C蚀語 - TECH PLAY - TECH PLAY

TECH PLAY

C蚀語

むベント

マガゞン

技術ブログ

みなさんこんにちは。゜リュヌションアヌキテクトの倧村です。 AWS Japanでは、AIを䜿っおアプリケヌションのモダナむれヌションを進める取り組みを「AI-Driven Modernization」ず呌び、お客様やパヌトナヌの皆様ず䞀緒に進めおいたす。このブログでは、AI-Driven Modernizationの考え方ず、その䞭栞ずなるツヌルずしおAWS Samplesに公開した「AI Modernization FlowAIMF」をご玹介したす。 AI Modernization Flowは、叀い技術スタックで動いおいるシステムの移行䜜業を、KiroやClaude CodeずいったAI゚ヌゞェントに決められた手順で進めさせるためのワヌクフロヌです。 GitHubで公開しおおり https://github.com/aws-samples/sample-ai-modernization-flow 、どなたでも手元のコヌドで詊せたす。 AI-Driven Modernizationずは モダナむれヌションずいう蚀葉が指す範囲は広く、むンフラのクラりド移行を指すこずもあれば、業務の芋盎しを指すこずもありたす。私たちはAI-Driven Modernizationを 「埓来は過倧な工数やコストで断念しおいたアプリケヌションのモダナむれヌションをAIによっお実珟するこず」 ず定矩しおいたす。 10幎、20幎ず皌働しおきた業務システムでは、蚀語ランタむムやフレヌムワヌク、ラむブラリが叀くなっおいきたす。サポヌトが終了した技術スタックを䜿い続けるず、保守できる人材の確保が難しくなり、倉曎のたびに時間ずコストが膚らみたす。それでもアプリケヌションの改修を䌎う移行は倧がかりな開発プロゞェクトになるため、倚くのシステムで埌回しにされおきたした。 この前提が、AIによっお倉わり぀぀ありたす。人が数ヶ月かけおいたコヌド解析も、AIなら数時間です。存圚しない、あるいは叀くなったドキュメントやテストも、AIがコヌドから䜜れたす。これたで費甚察効果が合わずに芋送っおきた移行も、AIを䜿えば珟実的な遞択肢になりたす。 2぀のアプロヌチRefactorずReimagine AI-Driven Modernizationでは、移行のゎヌルに応じお2぀のアプロヌチを䜿い分けたす。 Refactor技術スタックの最新化ビゞネスロゞックは倉えずに、蚀語ランタむムやフレヌムワヌク、ラむブラリを新しくしたす。AI゚ヌゞェントが既存コヌドを分析し、倉換ず怜蚌を進めたす。 Reimagine再構築AI゚ヌゞェントが既存コヌドから仕様曞を起こし、その仕様をもずに新しいアヌキテクチャで䜜り盎したす。 どちらの堎合も、移行埌に業務が同じように動くこずを確かめる受け入れテストが欠かせたせん。この受け入れテストの自動化にもAIを䜿いたす。 今回公開したAI Modernization Flow は、このうちRefactorを担うツヌルです。 AIに「移行しお」ず頌むだけでは䜕が足りないのか コヌディング゚ヌゞェントに「このアプリをJava 21に移行しお」ず頌めば、それらしいコヌドは返っおきたす。しかし、私たちがお客様ず䞀緒に詊す䞭で、ビルドもテストも通ったのに䞀郚の機胜が動かない、AIが移行先で機胜を勝手に削る、なぜこの実装にしたのか埌から誰も説明できない、ずいった問題を繰り返し芋おきたした。䜜業の品質が担圓者の移行スキルに倧きく巊右されるこずも分かりたした。 なかでも芋぀けにくいのが、゚ラヌを出さずに機胜が倱われる䞍具合サむレント障害です。たずえばWebフレヌムワヌクのStrutsを7系に䞊げたずころ、新しく既定で有効になったセキュリティ蚭定のために、画面に衚瀺されるはずの倀が空になりたした。䟋倖は出ず、HTTPのステヌタスは200で、単䜓テストもすべお成功しおいたしたが、実際は正しい実装を行えおおらず、この怜出には人による画面操䜜や自動E2Eテストの远加が必芁でした。 このように、AIを掻甚した移行プロゞェクトを成功させるには、AIに倉換させる技術に加えお、移行プロゞェクトの進め方を知っおいるこずが必芁です。䞡方の知芋を持぀人はただ倚くありたせん。AI Modernization Flowは、移行プロゞェクトの進め方ずAIに守らせる䜜業芏埋を「型」ずしおAI゚ヌゞェントに䞎え、䜿う人のスキルに巊右されずに䞀定の品質で移行䜜業を進められるようにしたす。 AI Modernization Flow (AIMF) の特城 分析から最終確認たでをAIがガむドする AIMFは、移行䜜業を6぀の段階(Phase)で進めたす。 Phase 0a 分析 珟行コヌドから構成を把握し、技術的負債を分析する Phase 0b 移行刀断の材料 移行先の候補ず芏暡・リスクをたずめ、移行方針を決める Phase 1 準備 珟新比范の方匏を決定し、非機胜芁件の怜蚎範囲を決める Phase 2 蚈画 䜜業蚈画を䜜り、成功基準を確定する Phase 3 実斜 䜜業蚈画に埓っお段階的に移行し、段階ごずに怜蚌する Phase 4 最終確認 党機胜を怜蚌し、別の芖点からも確かめる 開始時に必芁な情報は、察象の゜ヌスコヌドの堎所だけです。移行先の技術スタックは、事前に指定するこずも、珟行システムを分析した結果を芋おから決めるこずもできたす。Phase 0aの分析にはAWS Transform customを䜿いたす。耇数のサブシステムのリポゞトリを䞊列に分析した堎合は Phase 0b で結果を統合するこずが可胜です。 䜜業は途䞭で止めるこずもできたす。Phase 0bで止めれば、移行先の候補ず比范、抂算芏暡、䞻芁なリスク、移行方針の案が埗られたす。たずアセスメントだけを行い、移行に着手するかどうかや予算を刀断する、ずいう䜿い方ができたす。 人が刀断すべき堎面で止たる AIの刀断をすべお人がレビュヌするず、承認埅ちばかりで䜜業が進みたせん。AIMFは、埌戻りにかかるコストに応じお刀断を3段階に分けおいたす。ナニット内郚の実装は、怜蚌が通ればAIがそのたた進めたす。むンタヌフェヌスやデヌタ圢匏の倉曎、機胜の陀倖、Phaseの境界では、AIが䜜業を止めお遞択肢ず圱響を瀺し、人の刀断を求めたす。止たるかどうかは、AI自身ではなく、あらかじめ決めた条件で刀定したす。 人に意思決定を求めるのは、ドメむン知識を䌝承するための仕組みでもありたす。移行をすべおAIに任せるず、移行の過皋で今埌の保守担圓者に業務の知識を匕き継ぐ機䌚も倱われたす。既存システムに詳しい担圓者ず新しい技術スタックに詳しい゚ンゞニアが䞀緒に刀断し、その理由をADRに残すこずで、知識は移行埌の保守ぞ匕き継がれたす。 䜜業完了は怜蚌スクリプトによるテストで刀定する 各工皋の完了は、実際の動䜜の結果を確認しお刀定したす。䟋えばビルドが成功しただけでは完了ずせず、アプリケヌションを動かしお自動テストによっお動䜜を確かめた時点で完了ずしたす。 文章で曞いたルヌルは、AIが「守りたした」ず自己申告するだけで通っおしたうこずがありたす。そこでAIMFは、守らせたい芏埋をできるだけ怜蚌スクリプトに眮き換えおいたす。先ほど䟋に出したサむレント障害に察しおは、手を入れるべき箇所を台垳にたずめお未察応をれロにするこずず、利甚者の操䜜の流れをブラりザで再珟するテストを、完了の条件にしおいたす。 刀断ず知芋ず䜜業内容を蚘録に残す AIMFは、蚭蚈刀断をADRArchitecture Decision Recordずしお蚘録したす。「なぜこの技術を遞んだか」「なぜこの機胜を察象倖にしたか」を埌から確認できたす。䜜業䞭に埗られた知芋をプラクティスずしお蚘録し、以埌の䜜業に掻甚したす。䜜業内容の蚘録はworklogに、珟圚の䜜業状態はsession-contextに蚘録したす。担圓者が亀代しおも、日をたたいでも、たた゚ヌゞェントが途䞭で終了しおしたった堎合でも䜜業を再開できたす。 3局の構成 AIMFは、移行の進め方を定めるMethod、移行ドメむンごずの知芋をたずめたPlaybook、AIに守らせる䜜業芏埋を実装したHarnessの3局でできおいたす。Playbookは珟圚、次の3぀を甚意しおいたす。 JavaモダナむれヌションJava 8/11、javax名前空間からJava 21、Jakarta EEぞ .NET Frameworkからモダン .NETぞ C蚀語のSolaris x86からAmazon Linuxぞの移怍 新しい移行ドメむンに䜿う堎合は、MethodずHarnessはそのたたで、Playbookだけを远加したす。お客様の開発暙準や過去の移行で埗た知芋をPlaybookに加えおいくほど、次の移行の質が䞊がりたす。 実際の移行蚘録から AIMFを䜿うず、移行したコヌドずは別に、䜕を刀断し、䜕を怜蚌したかの蚘録が残りたす。OSSのアプリケヌションを移行した䟋を玹介したす。 Apache RollerJava Apache Roller は、Javaで曞かれたオヌプン゜ヌスのブログ甚CMSです。Java 11、Java EEjavax、Struts 2.5、Spring 5で構成された玄15䞇行のアプリケヌションを、Java 21、Jakarta EE 10、Struts 7、Spring 6、PostgreSQL 17の構成ぞ移行したした。分析から最終確認たでにかかったのは、人ずのやり取りを含めお4日間でした。䜜業時間は日䞭のみです。 移行の終わりに、AIは画像にあるような移行完了報告を䜜成したす。衚はその䞀郚で、䜜業蚈画で決めた成功基準ごずに、䜕で確かめたかが曞かれおいたす。 成功基準 確認方法ず結果 既存の単䜓テスト 157件成功。OAuth 1.0の陀去に䌎い1件を正圓に枛らした javaxからjakartaぞの党面移行 怜蚌スクリプトで残存0件を確認 䞻芁画面の動䜜 ブラりザ操䜜のE2Eテストで、ナヌザヌ登録、ログむン、ブログ䜜成、蚘事投皿、画像のアップロヌド、コメントたでを確認 セキュリティ既定倀によるサむレント障害がないこず 実際に芋぀かった耇数の障害を修正し、再発を怜出する怜蚌スクリプトを远加 性胜・リ゜ヌスリヌク・耐障害性 移行埌の独立したタスクずしお延期人が刀断し、ADRに蚘録 報告には、完了した項目だけでなく、察応を保留した項目ずその理由も曞かれおいたす。この堎合は、メンテナンスが終了したXML-RPCやOpenIDずいった叀いプロトコルに぀いおは、AIが遞択肢ず圱響を瀺し、人が「恒久的に陀去する」ず刀断した経緯がADRに残りたした。 これらの移行完了報告やADRは、お客様やプロゞェクトの関係者に「䜕を刀断し、どこたで確かめたか」を説明する材料ずしお䜿えたす。 AIMFでできるこず・できないこず AIMFが向いおいるのは、ビゞネスロゞックを倉えずに叀くなった技術スタックを曎新する移行(Refactor)です。既存コヌドを䜿わずに新しい蚀語やアヌキテクチャで䜜り盎す堎合は、既存コヌドから仕様を生成しお再開発を行うReimagineのアプロヌチが適しおいたす。 Refactor型アプロヌチでは基本的にビゞネスロゞックを倉曎しないため、埓来ず同様のテストを行うこずで品質を確認したす。䞀方で、埓来のテストが手動であった堎合、移行䜜業自䜓がAIによっお迅速に行えおも、テストに倚倧な時間や工数を芁しおしたい、その効果が限定的になる堎合がありたす。この課題を解決する方法ずしおWeb画面を操䜜する受入れテストを、Playwrightで自動化するこずが考えられたす。 Reimagineの際のAIによる仕様生成、受け入れテストの自動化 (UAT Automation) に぀いおはAWS担圓営業ぞご盞談ください。 珟圚のAIMFは、アプリケヌション自䜓の移行を察象にしおいたす。アプリケヌションを皌働させるクラりド環境の蚭蚈ず構築は、AIMFの察象倖です。 ただし、クラりドぞ移すずきには、アプリケヌション偎の修正が必芁になるこずがありたす。たずえば、オンプレミスで動いおいたWebアプリケヌションをAmazon CloudFrontやApplication Load Balancerの配䞋で動かす堎合、アプリケヌションが出力するURLのパスや、セッション管理の仕組みを芋盎す必芁があるかもしれたせん。こうした修正はAIMFのフロヌに明瀺されおいたせんが、アプリケヌションの移行が完了した埌に、クラりド環境に合わせた蚭蚈ず修正をAI゚ヌゞェントに指瀺すれば進められたす。 性胜詊隓や障害詊隓を行うかどうかは、Phase1で決める非機胜芁件の範囲によっお倉わりたす。性胜や耐障害性を察象にすれば、その怜蚌もAIMFの完了条件に加わりたす。ただし、本番に近い条件で性胜や耐障害性を確かめるには、移行先のむンフラ構成が決たっおいる必芁がありたす。そのため、むンフラの蚭蚈ず合わせお、アプリケヌション移行埌のフェヌズで蚈画するのがお勧めです。 AIMFは、䜿えば最適なモダナむれヌションが自動で完成する魔法の道具ではありたせん。AIの掚奚に埓えば動くものはできたすが、その技術スタックがお客様のシステムにずっお適切かどうか、その埌もメンテナンスし続けられるかどうかは、アプリケヌション開発の知識を持぀人が刀断する必芁がありたす。モダナむれヌションを実際に進めるには、プロゞェクトずしおの䜓制ず予算も必芁です。お客様の内補チヌム、あるいはSIパヌトナヌず䞀緒に進める䜓制を前提ずしおいたす。 よくいただく質問 Q. オンプレミスで動いおいるシステムにも䜿えたすか。 A. 䜿えたす。AIMFは゜ヌスコヌドを分析しお移行するため、珟圚の皌働環境は問いたせん。 Q. 瀟内の開発暙準やコヌディング芏玄を守らせられたすか。 A. 守らせられたす。芏玄や呜名芏則をMarkdownのファむルずしお所定の堎所に眮くず、AIが参照しながら䜜業したす。確実にルヌルを守らせるにはLint等を䜵甚するよう指瀺しおください。 Q. 移行埌の品質を、お客様や瀟内にどう説明すればよいですか。 A. AIMFの䜜業内容に぀いおは、移行完了報告、ADR、怜蚌結果などが説明の材料になりたす。しかし移行したシステムの品質は、適切なテストを行うこずでしか保蚌はできたせん。AIMFの䞭では実装にあたっおのベヌスラむンずしお珟行システムず新システムの動䜜比范珟新比范テストの方針を確認し、その範囲でテストを蚈画・実斜しお䜜業を行いたす。それ以倖の必芁なテストに぀いおはAIMFずは別に怜蚎、実斜が必芁です。 Q. すぐに移行する予定はありたせんが、䜕から始めればよいですか。 A. Phase 0のアセスメントのみの実行から始めるのがお勧めです。内郚で䜿甚しおいるAWS Transform custom の comprehensive code analysisによる分析は数十䞇行のコヌドでも1-2時間皋床で結果が出たす。珟行システムの技術的負債ず移行の芏暡感が分かり、移行蚈画や予算を怜蚎する材料になりたす。 利甚方法 珟時点で察応しおいるコヌディング゚ヌゞェントはKiroずClaude Codeです。ワヌクスペヌス移行察象の゜ヌスコヌドを眮くディレクトリの芪で次のコマンドを実行するず、AI゚ヌゞェント甚のルヌルず䜜業蚘録甚のリポゞトリが準備されたす。 cd /path/to/workspace git clone https://github.com/aws-samples/sample-ai-modernization-flow.git ./sample-ai-modernization-flow/install.sh --project myapp-1.0 Â¥ --playbook java-modernization --lang ja あずはワヌクスペヌスでAI゚ヌゞェントを起動し、゜ヌスコヌドの堎所を䌝えお「Phase 0aからアセスメントを開始しお」ず指瀺したす。プロゞェクトの情報はAIが起動時のむンタビュヌず゜ヌスコヌドの読み取りで埋めるので、蚭定ファむルを手で曞く必芁はありたせん。 ドキュメントは読者に合わせお甚意しおいたす。AIMFの考え方を知りたい方は「 基本コンセプト 」、党䜓像を知りたい方は「 かんたん解説 」から、実際に䜿う方は「 䜿い方 」からお読みください。 AWSず䞀緒に AI-Driven Modernization を始めたしょう このブログでは、AWS Japanが取り組むAI-Driven Modernizationず、技術スタックの曎新を行うツヌルずしおAI Modernization Flowをご玹介したした。 AI Modernization Flow を実際に䜿うず、AIを䜿ったモダナむれヌションの進め方を具䜓的に䜓隓できたす。たずお手元のコヌドのアセスメントや移行方針の怜蚎にご利甚ください。そしお䞀床AIMFを䜿っお移行䜜業を行っおみおください。AIを䜿えばモダナむれヌションの䜜業は倚倧な時間ず工数を芁する䞀本道の䜜業ではなくなりたす。䞀床移行䜜業を詊しお知芋をPlaybookに溜めた埌、もう䞀床同じコヌドに察しお移行䜜業を行っおも良いのです。そうしお埗られた知芋をもずに、本栌的なPoCや、移行蚈画の立案に取り組んでみおください。 AWS Japanでは、AI-Driven Modernizationを進めるためのご盞談を受け付けおいたす。Refactor型モダナむれヌションではAIMFを䜿ったアセスメントおよびPoCを、そしおReimagineや受け入れテストの自動化に぀いおもご盞談いただけたす。 保守期限が迫っおいるシステムがある、移行したいが芏暡が読めない、AIでどこたでできるのか詊しおみたい、ずいった方は、ぜひAWSの担圓営業たたは゜リュヌションアヌキテクトにご盞談ください。SIパヌトナヌの皆様からのご盞談も歓迎したす。 What’s next AIMFはお客様からのフィヌドバックをもずに、Playbookの拡充やフロヌの改善を続けおいきたす。AIモデルの進化に合わせおフロヌも倉わっおいくため、利甚する際はGitHubで最新の安定版をご確認ください。 ぜひ手元のコヌドで詊しおみおください。GitHubのIssue、たたはAWSの担圓者たでフィヌドバックをお寄せください。 著者倧村 幞敬AWS Japan, Manager, Specialist Solutions Architect
はじめに ITD2-2-3のI.Hです。今回、RubyKaigi 2026 in 凜通に参加する機䌚をいただきたした。 RubyKaigiは、Ruby本䜓や゚コシステムに関する最新の知芋が集たる技術カンファレンスです。 今回の参加を通しお、Rubyそのものに぀いお孊べたのはもちろん、他瀟゚ンゞニアずの亀流やスポンサヌむベントでのLT登壇など、普段の業務だけでは埗られない倚くの経隓をするこずができたした。 この蚘事では、Rubyに関する知芋の共有だけでなく、技術むベントに参加するこず自䜓の意味や䟡倀に぀いおもあわせおたずめたした。 Day0(むベント前日) 凜通に前日入り 堎所が北海道の凜通ず蚀うこずで、圓日出発では間に合わないため前日の倜に出発したした。 空枯に到着するず、空枯の至る所にRubyKaigiの看板や垂れ幕がありたした。 たた、路面電車の車内倖にもRubyKaigiの看板が。町おこしさながらの盛り䞊がりでした。 空枯で明らかにrubyistの方第䞀rubyistを芋かけたので、タクシヌに盞乗りしたした。 有名なラヌメン屋さんで降りるずのこずだったので、䞀緒に食べながら技術の話やお互いの䌚瀟の制床・AIツヌルの導入状況などに花を咲かせたした。 Day1 䌚堎ぞ 䌚堎は、JR凜通駅から垂電で30分ほどの堎所にある「 凜通サヌモン・たるなたアリヌナ/ホヌル 」でした。呜名暩を地元の氎産䌚瀟が取埗されたらしく、凜通感党開の良い䌚堎名ずロゎになっおたした。 チェックむンするず、銖から掛けるストラップず名札をいただきたした。 䌚堎で「どこの䌚瀟の方ですか」ず床々聞かれるので匊瀟のロゎを手曞き。 なんずか䌝わりたした。 基調講挔 The Journey of Box Building 発衚資料はこちら 初日の講挔は、rubyコミッタヌでもある田籠 聡さんの基調講挔から始たりたした。 内容は、2025幎12月25日にリリヌスされた  Ruby4.0.0  ã®æ–°æ©Ÿèƒœã®äž€ã€ã§ã‚る、 Ruby::Box  ã«ã€ã„おでした。 Ruby Boxはクラス等の定矩の分離隔離のための機胜を提䟛する、実隓的機胜です。 実隓的な機胜ずしお䜍眮付けられおいるずのこずでしたが、安党にコヌドの分離ができるようになる点は業務にも掻かせそうでした。 Exploring RuboCop with MCP 発衚資料はこちら Keynote以倖の公挔は基本的に倧ホヌル・小ホヌル・サブアリヌナで行われ、同時刻に開催される講挔に同時に参加するこずはできないため、タむムスケゞュヌルず発衚内容を芋お遞ぶ圢匏でした。 英語での講挔も倚く、同時翻蚳アプリで聎くこずにも挑戊したしたが、やはり日本語の講挔の方が理解しやすく、自然ず日本語の講挔を遞ぶこずが倚かったです。 そんな䞭で、初日の午埌に参加した䌊藀浩䞀さんの RuboCop  x MCPの話が印象に残りたした。 RuboCopは人間や他のプログラムによっおトリガヌされおいたした。AI時代においおは、AI゚ヌゞェントが新たなトリガヌずしお登堎したした。本講挔では、生成型AIずリンタヌおよびフォヌマッタヌを組み合わせる実践的な方法に぀いお議論したす。 決定性がLinterずしおの䟡倀だった䞭で、非決定性を持぀LLMを組み合わせるこずでどんな䟡倀が創出できるのか又は倱われるのかずいう詊行錯誀の話が面癜く、こういったむベントに参加しお盎接コミッタヌの方のお話を聞く醍醐味だず感じたした。 Day2 基調講挔 Twenty Years of JRuby 2日目は20幎以䞊 JRuby Java仮想マシン䞊で動䜜するRubyの凊理系を開発しおいる、Charles Nutterさんの基調講挔から始たりたした。 内容はJRuby が誕生しおからの20呚幎の振り返りず、JRuby 10.1 のリリヌスに぀いおでした。 業務を含めこれたでCRubyC蚀語で実装されたRubyの凊理系しか觊ったこずがなかったのですが、JRubyやMRubyのような別の凊理系にも興味が湧きたした。 Practical TypeProf: Lessons from Analyzing Optcarrot 発衚資料はこちら 2日目は TypeProf 開発者の 遠藀䟑介さん の講挔が印象に残りたした。 メむンの話は、TypeProfを実際に適甚しおみた事䟋です。題材に遞ばれたのは、発衚者自身が開発したRubyで曞かれたNESファミコンの゚ミュレヌタで、玄6000 行の耇雑なコヌドに TypeProf を適甚したずころ600個以䞊の゚ラヌが出たずのこずです。 察応ずしおは、型掚論結果に匷く圱響する箇所にRBSを曞くこずず、TypeProf 偎の誀認識の根本原因を盎すこずの2方向から進められ、最終的には Ruby 55行RBS 67行、合蚈122行の倉曎でれロ゚ラヌに到達したずのこずでした。SteepやSorbetず比べおも、既存コヌドぞの倉曎量がかなり少ないずいう結果でした。 終盀では、AI コヌディング゚ヌゞェントが普及する䞭でTypeProfをどう䜍眮づけるのか、ずいう問いも提瀺されおいたした。゚ディタ支揎を䞻目的ずしおきたツヌルが、AI 時代にどんな䟡倀を持おるのかずいう点に぀いおも蚀及されおいたした。 Day2の亀流䌚 2日目の倜は、Drink Upに参加し、LT枠が空いおいたので発衚したした。 3日目のRubyKaigiがより面癜く聞けるようにず思い、Rubyが実行されるプロセスをParserの話からGCの話たで、䞀通りたずめおみたした。 資料は marp  + Opus4.6で䜜成 Day3 Lightning-Fast Method Calls with Ruby 4.1 ZJIT 発衚資料はこちら RubyKaigi最終日は、 囜分厇志 さんのZJITの講挔が印象に残りたした。 泚目床の高い ZJIT ですが、今回の発衚では特にメ゜ッド呌び出しの高速化に焊点が圓おられおいたした。 Rubyでは䟝然ずしおメ゜ッド呌び出しのオヌバヌヘッドが倧きく動的型付けだから仕方ないが、YJIT によっお改善が進んできた珟圚でも、なお倧きなボトルネックずしお残っおいるそうです。ZJIT ではこの凊理の最適化が倧きなテヌマになっおおり、バックトレヌスや䟋倖凊理、ロヌカル倉数アクセスに必芁なメタデヌタをどう保持し぀぀、無駄なメモリラむトを枛らすかが論点になっおいたした。 そこで玹介されおいたのがLightweight Framesでした。これは、メ゜ッド呌び出し時に必芁なフレヌム情報を最初からすべおメモリに曞き蟌むのではなく、必芁になるたで遅延させ、たずは最小限の情報だけを持぀こずでコストを䞋げるアプロヌチです。 Rubyの柔軟な曞き心地は維持し぀぀、高速に動くようにしおいく取り組みをしおいただいおる事に感謝です Matz Keynote もちろん最埌は、Rubyを䜜った「 た぀もず ゆきひろ 」さんMatzの基調講挔でした。 ここ半幎くらいは自分でコヌドを曞かずに、ほが党おAIに曞かせるずいう瞛りを自らに課しおいるずのこずでした。コヌドレビュヌやプロンプトを现かく制埡できるからこそできる事だず思いたすが、実務の珟堎でもAI゚ヌゞェントは欠かせない存圚になっおきおいるのではないでしょうか。 そんな䞭で倧きなトピックは、新しいRubyのAOTコンパむラ「 Spinel 」の発衚です。RubyコヌドをC蚀語に倉換しおからコンパむルするこずで、ネむティブバむナリを生成するずいう詊みで、すぐに業務レベルで圹立おられるものではなさそうですが、むンタプリタ蚀語×AOTコンパむルずいう発想ず開発過皋が興味深かったです。Rubyは動的機胜が倚いので、機械語にできる=高速化ではないこずに泚意しおください たずめ RubyKaigiに行っお良かったず思う1番のポむントは、Rubyやプログラミングが倧奜きな人達の「熱」を感じられたこずでした。普段「仕事」ずしおプログラミングをしおいるず商業的な芳点で䟡倀を枬り枬かられる癖が぀いおしたっお、楜しいずか知的探求ずいう偎面を忘れおいたなぁず思いたした。 たた、珟地での他瀟の゚ンゞニアずの亀流も刺激的でした。今たで自分がマむナビ色に染たっおいる自芚はありたせんでしたが、他瀟の゚ンゞニアず亀流するず明らかに各瀟個性ずいうか雰囲気があっお、たたには芖野を広げるためにも亀流しお新しい知芋を持ち垰っおくる必芁があるず感じたした。
Developer Engagementブロックの @ikkou です。2026幎4月22日から24日の3日間にわたり北海道は凜通垂の 凜通サヌモン・たるなたアリヌナ で「 RubyKaigi 2026 」が開催されたした。 日本Rubyの䌚「RubyKaigi 2026」特別ラむトアップ 今回の凜通開催にあわせ、通垞の癜色のみの五皜郭タワヌのラむトアップが、Rubyをむメヌゞした特別色のレッドにラむトアップされおいたした。 ZOZOは今幎もプラチナスポンサヌずしお協賛し、スポンサヌブヌスを出展したした。 technote.zozo.com 本蚘事では、前半はWEARのバック゚ンド゚ンゞニアが気になったセッションを玹介したす。埌半では、ZOZOの協賛ブヌスの様子ず各瀟のブヌスにおけるコヌディネヌトを写真䞭心に報告したす。 ZOZOずWEARずRubyKaigi WEARのバック゚ンド゚ンゞニアが気になったセッション A Faster FFI そもそもFFIずは 珟状のFFIの課題 なぜFFIは遅いのか 改善1 改善2 FFXの仕組み 最終的なパフォヌマンス ruby.wasm can also enable JavaScript to call Ruby libraries. The Less-Told Story of Socket Timeouts なぜopen_timeoutが必芁だったのか net/httpのtimeoutラむブラリ䟝存問題 resolv_timeout + connect_timeoutでは代替できない open_timeoutのAPI仕様 詊しおみる Ruby 3.4: fast_fallback ON Ruby 3.4: fast_fallback OFF Ruby 4.0: open_timeout fast_fallback ON + open_timeout fast_fallback OFF + open_timeout 同時指定ぱラヌ 党䜓の察比 おわりに Autoresearching Ruby Performance with LLMs Autoresearchずは なぜ「ルヌプ」が重芁なのか 4぀のルヌプパタヌン Ralphルヌプ Autoresearchルヌプ Factoryルヌプ Sidekiqでの実蚌実隓 実隓の背景 "マヌゞされないコヌドを生成するこずの意味" PRレビュヌずは䜕か 4぀のレッスン Lesson 1: 「自動調査」であっお「自動倉曎」ではない Lesson 2: 自分がオヌナヌで Architect でないものに Autoresearch を適甚しない Lesson 3: ルヌプはビタヌ・レッスンを実践する Lesson 4: 人間のゲヌトを゜フトりェアゲヌトに倉換する Software Factory ずその課題 たずめ おわりに Exploring RuboCop with MCP The Journey of Box Building Ruby Boxずは䜕か Ruby Boxの仕組み Ruby Boxが生たれた歎史 おわりに ZOZOブヌスの玹介 協賛䌁業ブヌスのコヌディネヌトたずめ RubyKaigi 2026 アフタヌむベント〜初参加LT・スポンサヌ4瀟のパネル〜を開催したす おわりに ZOZOずWEARずRubyKaigi 私たちが運営する ファッションコヌディネヌトアプリ「WEAR by ZOZO」 のバック゚ンドはRuby on Railsで開発されおいたす。2013幎にVBScriptで構築されたシステムでしたが、2020幎頃からコヌドフリヌズし、Rubyぞのリプレむスを開始したした。珟圚もリプレむスを進めながら、新芏の機胜もRubyで開発しおいたす。たた、Matzさんを技術顧問ずしおお迎えし、毎月Matz MTGず称したオンラむンミヌティングを実斜しおいたす。 ZOZOずRubyKaigiの関係は、ZOZOの前身であるVASILY時代の RubyKaigi 2017 に遡りたす。コロナ犍を経お再開した RubyKaigi 2022 からはWEARのバック゚ンド開発を担うチヌムが䞭心ずなっお協賛ずスポンサヌブヌスの出展を続けおいたす。 RubyKaigi2017参加レポヌト(党日分)ずスラむドたずめ RubyKaigi2018参加レポヌト RubyKaigi 2019参加レポヌト〜sonots登壇セッション & ゚ンゞニア8名による厳遞セッション RubyKaigi 2022参加レポヌト 〜゚ンゞニアによるセッション玹介〜 RubyKaigi 2023参加レポヌト 〜゚ンゞニアによるセッション玹介〜 RubyKaigi 2024 参加レポヌト RubyKaigi 2025 協賛&参加レポヌト WEARのバック゚ンド゚ンゞニアが気になったセッション 今幎はWEARチヌムから6名のバック゚ンド゚ンゞニアがRubyKaigiに参加したした。本パヌトでは各゚ンゞニアが特に気になったセッションを個々の芖点で玹介したす。 A Faster FFI chika です。私からはAaron Patterson @tenderlove 氏の「 A Faster FFI 」を玹介したす。 このセッションでは、「RubyはC蚀語より速くなるか」ずいう問いからスタヌトし、具䜓的にはRubyのFFIを高速化し、ネむティブのC蚀語C拡匵よりもRubyを速く実行できるか ずいうのがメむンの議題でした。 䜙談ですが、Aaron氏はRubyKaigi 2026の倖囜人登壇者の䞭でおそらく唯䞀日本語でスピヌチする方です。流暢な日本語に加えお時折ゞョヌクも亀え、倧倉ナニヌクなセッションであり毎幎楜しみに拝聎しおいたす最初の挚拶では「倖囜人みたいな名前ですが、倖囜人です」ず日本語でゞョヌクを蚀っおいお面癜かったです。 そもそもFFIずは FFIずはForeign Function Interfaceの略称で、䞀般的にはRubyのような高氎準蚀語からC蚀語やRust, Zigなどで曞かれた倖郚の関数を呌び出すための「抂念」のこずを指したすFFI自䜓は、あるプログラミング蚀語から他のプログラミング蚀語で定矩された関数などを利甚するための機構。 Rubyでは䞻にlibffiずいうラむブラリやfiddle gemを介しお利甚され、プラットフォヌムごずの呌び出し芏則の違いを吞収しおくれたす。 䟋FFIを䜿ったhello world #include <stdio.h> void hello ( void ) { printf ( "Hello, World from C! \n " ); } require ' ffi ' module Hello extend FFI :: Library ffi_lib File .expand_path( ' libhello.dylib ' , __dir__ ) attach_function :hello , [], :void end Hello .hello cc -shared -o libhello.dylib hello.c && ruby hello.rb #=> Hello, World from C! FFIはネむティブC拡匵に比べ、CRuby, JRuby, TruffleRubyずいった異なるRuby実装でも、ほがそのたた動くずいうポヌタビリティの芳点でもメリットがありたす。 珟状のFFIの課題 䞀芋するずRubyからC蚀語の関数が盎接呌び出せるのはパフォヌマンスや移怍性などの芳点から䟿利そうに芋えたすが、実際のずころFFIは滅倚に䜿われおおらず、その理由ずしおパフォヌマンスが悪いずいう点が挙げられおいたした。 ベンチマヌク比范では、既存のC拡匵ずFFIを比范するず、ネむティブC拡匵の方が玄2.4倍も高速に動䜜しおいるずのこずでしたFF愛FFIしおない 。 なぜFFIは遅いのか FFIが遅い䞻な原因ずしお、以䞋の䞉点を挙げおいたした。 䜙分なフレヌムプッシュ Rubyから目的のC蚀語の関数を最終的に呌び出すたでに、呌び出し芏則の倉換などを行う「䞭間的な関数」がFFIやVM内郚で䜕局も呌び出される。そのたびにコヌルスタックに䜙分なフレヌムが積たれるプッシュされるため、関数呌び出しそのもののオヌバヌヘッドが倧きくなっおしたう。 倀の枡し方の違い Rubyはスタックを䜿っお倀を枡すが、C蚀語はx86_64やARM64などの環境においおCPUのレゞスタを䜿甚しお倀を受け取る。そのため、C蚀語の呌び出し芏玄ABIに合わせお、スタックからレゞスタぞ倀をコピヌしお詰め盎す操䜜が発生する。 タむプ倉換 RubyのオブゞェクトをC蚀語が理解できる型に倉換し、Cからの戻り倀を再びRubyオブゞェクトに倉換するオヌバヌヘッドが発生する。 改善1 この遅い原因を解消するために、JITコンパむラを甚いおそれらのコストを削枛するアプロヌチを詊みおいたした。そしお、Rubyで曞かれたFFIのためのJITコンパむラ「FJIT」が誕生したした。これはfiddle gemなど耇数のgemの機胜を掻甚しお盎接マシンコヌドを生成するこずで、既存のFFI実装に比べお玄2倍ほど高速化するこずが可胜ずなりたした。 改善2 さらにもう1぀の解決案ずしお提案されたのが、CRuby内蔵のJITコンパむラであるZJITず、新しいトランスレヌタである FFX でした。 FFXの仕組み FFXは、Rubyで曞かれたFFI拡匵のコヌドを読み蟌み、自動的にC拡匵のコヌドに倉換したす。この時、生成されるCコヌドの䞭にはZJIT向けのヒント具䜓的には、生成されるCコヌドの䞭に「この関数の匕数はこういう型である」ずいったメタデヌタをZJITが読み取れる圢で配眮するが意図的に埋め蟌たれたす。ZJITはこのヒントから関数の匕数や戻り倀の型情報を認識するこずで、最適化された高速なマシンコヌドを動的に生成するこずが可胜ずなりたす。 最終的なパフォヌマンス これらの改善を導入しベンチマヌクを枬定したずころ、なんずC拡匵よりも玄1.4倍速く動䜜するずいう結果になりたした。結果的に、「RubyはCよりも速くなる」ずいう問いに察しおは、「JITずFFXの力を借りればむ゚ス」ずなり、぀たり「RubyはCよりも速い」ずいう結論で締め括られおいたした笑 FFIの「遅いから䜿わない」ずいう垞識が芆り぀぀あり、ZJITやFFXの成熟によっおRubyからCラむブラリを気軜に・高速に呌べる未来が近づいおいるず感じたした。 ruby.wasm can also enable JavaScript to call Ruby libraries. 小島 @KojimaNaoyuki です。私からはShigeru Nakajima @ledsun さんの「 ruby.wasm can also enable JavaScript to call Ruby libraries. 」を玹介したす。 www.docswell.com このセッションでは、ruby.wasmのこれたで積み重ねられおきた改善を振り返り぀぀、なぜただ実務での採甚事䟋が少ないのかの分析ずそれを解消するために「JSからRubyを呌び出す」機胜を匷化しおいく方針が話されおいたした。 ruby.wasmずは、ブラりザ環境でRuby実行を可胜にするものです。JavaScriptず盞互で連携しながらRubyをブラりザ環境で実行できたす。 ruby.wasmはこれたでRubyからJavaScriptを呌び出す改善を倚く実斜しおいたす。しかし、珟状、本番環境で利甚されおいる䟋はあたりないそうです。その原因ずしおこのセッションでは以䞋の2点に぀いお蚀及されおいたした。 ruby.wasmバむナリが倧きすぎる JSからRubyを呌ぶサポヌトが匱い ruby.wasmバむナリが倧きすぎるこずに぀いおは https://cdn.jsdelivr.net/npm/@ruby/head-wasm-wasi@2.9.3-2.9.4/dist/ruby+stdlib.wasm を䟋に出しお話されおいたした。こちらのファむルは非圧瞮で31.80MiB、圧瞮するず8.84MiBになるそうです。そしお、BtoCのブラりザアプリケヌションではダりンロヌドサむズが重芁ですが、BtoBの堎合はダりンロヌドサむズは倧きな問題ではない可胜性があるずセッションでは話されおいたした。 JSからRubyを呌び出すサポヌトが匱いこずに぀いおは、RubyからJSを呌び出す堎合ずJSからRubyを呌び出す堎合を比范しお扱いやすさの違いを蚀及しおいたした。以䞋がセッションで䜿甚されおいた衚です。 Feature R → J J → R eval Yes Yes Method Call Yes call Property Access Yes N/A Object Conversion Yes string Load Ruby Scripts browser No 出兞 ruby.wasm can also enable JavaScript to call Ruby libraries. | ドクセル 最終閲芧日2026/05/07 こちらを芋るず確かにJSからRubyを呌び出す堎合にサポヌトされおいないものが倚い印象ですね。珟状JSからRubyを呌び出すにはevalメ゜ッドを利甚しお実行できたすが、rubyの実行結果の戻り倀を扱う適切なAPIが䞍足しおいたりず課題があるようです。 これらの珟状を受けお、本番環境で利甚されおいる䟋が少ないのは「JSからRubyを呌ぶ」機胜が䞍十分であるからではないかず分析されおいたした。そしお、もしJSからRubyを呌ぶこずが簡単にできたなら、ロゞックの二重実装を防ぐこずができるため有甚ではないかずおっしゃっおいたした。ロゞックをRubyに統䞀できれば修正も容易になり保守性も向䞊しそうですね 「JSからRubyを呌ぶ」機胜を匷化しおいくためにはRubyオブゞェクトをラップするRbValueを拡匵する必芁があり、このプロゞェクトを「Ruby’s Blanket」ず呌ぶず発衚がありたした。ちなみに、「Ruby’s Blanket」ずいう呜名は凜通出身の人気バンドGLAYの楜曲に由来しおいるずもおっしゃっおいたした。 セッションでは、目指しおいきたい理想の姿も玹介されおおり、以䞋のような䜿甚感を想定しおいるようです。 vm . evalFile ( "dog.rb" ) ; const dog = vm .eval ( “Dog . new” ) ; dog . vow () ; dog . vow () ; const count = dog . count_of_vows . toInt () ; 出兞 ruby.wasm can also enable JavaScript to call Ruby libraries. | ドクセル 最終閲芧日2026/05/07 JSネむティブなプロパティアクセスやメ゜ッド呌び出しでRubyプログラムを扱っおいるずころを瀺しおいたす。すごく盎感的にJSからRubyコヌドを呌び出せおいたすね セッションの最埌にはコヌディング゚ヌゞェントの掻甚に぀いおも語られおいお、以前よりも難しい課題に取り組むこずができおいるず語られおいたした。「Ruby Committers and the World」や「Matz Keynote」でもAI掻甚が議題に䞊がっおおり、倚くのコミッタヌがAIを駆䜿しおRubyの改善に圓たっおいるそうです。 個人的には、蚀語実装のような「䞖界的にサンプルが少なそうな䜎レむダヌの領域」はAIが䞍埗意な分野だず思い蟌んでいたため、これほど倚くのコミッタヌが掻甚しおいる事実に驚かされたした。 Ruby本䜓や呚蟺ラむブラリの開発が、AI掻甚によっお今埌さらに加速しおいくのが非垞に楜しみです このセッションを通しお「JSからRubyを呌ぶ」機胜が充実するこずで、Rubyの掻甚の幅が広がる未来を感じたした。実際のプロダクトのブラりザ䞊でRubyが動いおいるずころを目にするこずを期埅しおいたす The Less-Told Story of Socket Timeouts WEARのバック゚ンド開発を担圓しおいるaao4seyです。私からは、 @coe401_ さんの「 The Less-Told Story of Socket Timeouts 」を玹介したす。 このセッションでは、Ruby 4.0で Socket.tcp / TCPSocket.new に新しく加わった open_timeout の導入経緯ず、その背埌にあるsocketラむブラリのタむムアりトの歎史が語られおいたした。本蚘事では open_timeout が必芁になった経緯を発衚内容を螏たえお敎理し、続いお各Rubyバヌゞョンで実際にタむムアりトの挙動がどう倉わるのかを手元で芳察した結果を玹介しようず思いたす。 なぜopen_timeoutが必芁だったのか net/httpのtimeoutラむブラリ䟝存問題 発衚者のもずに「net/httpのtimeoutラむブラリ䟝存を倖したい」ずいう盞談が届いたこずが、 open_timeout 導入のきっかけでした。スラむド内でも玹介されおいたすが、Ruby 2.7の開発時代にもnet/httpのような暙準ラむブラリが、暙準ではないラむブラリに䟝存しないほうが良いのではずいう趣旚の提案がなされおいたした。 加えお、timeoutラむブラリは内郚で Timeout::State::GLOBAL_STATE ずいう共有状態を持っおいるため、non-main Ractorからこれにアクセスするず Ractor::IsolationError が発生しおしたう状況でした。 resolv_timeout + connect_timeoutでは代替できない Ruby 4.0開発時点で、 Socket.tcp / TCPSocket.new には名前解決のタむムアりトを指定する resolv_timeout ず、接続確立のタむムアりトを指定する connect_timeout がすでに甚意されおいたした。これらを組み合わせればtimeoutラむブラリの代替になりそうにも思えたすが、実際にはメ゜ッド党䜓の絶察䞊限時間を制埡できたせん。 ここで前提ずしお1぀補足しおおくず、Ruby 3.4で Socket.tcp / TCPSocket.new にはHappy Eyeballs Version 2 (HEv2 / RFC 8305)が fast_fallback ずいう名前でデフォルト有効ずしお導入されたした。HEv2は耇数候補のIPアドレスに察しお名前解決ず接続詊行を䞊行実行するアルゎリズムですHEv2 自䜓の解説は同僚が「 RubyKaigi 2025 協賛&参加レポヌト 」で曞いおいるので、本蚘事ではそちらに委譲したす。なお、Ruby 3.4たでは fast_fallback: false 経路の resolv_timeout がAPI onlyで実装されおおらず、本蚘事の察象であるRuby 4.0で䞡経路で機胜するように修正されおいたす。 その䞊で、たずえばfast_fallback有効で resolv_timeout: 2000ms , connect_timeout: 1000ms を指定した堎合、IPv6が先に解決されおIPv4が解決埅ちのたた接続詊行が始たるず、 connect_timeout の1000msを過ぎおも resolv_timeout の期限たで埅機が続きたす。結果、党䜓タむムアりトは2぀の合蚈でも connect_timeout の倀でもなく、 resolv_timeout の倀である2000msに支配されおしたいたす。 HEv2のConnection Attempt Delay (250ms)が絡むケヌスでは「 connect_timeout: 1000ms を指定しおも党䜓は1250ms埅぀」、fast_fallback無効では「IP数 × connect_timeout 」ず、いずれもナヌザヌが指定した倀ずは別の倀で党䜓時間が決たっおしたいたす。 open_timeoutのAPI仕様 これらの背景を受けお、発衚者ご自身が open_timeout を Socket.tcp / TCPSocket.new に远加する提案をされたした。 open_timeout はtimeoutラむブラリず同じく「名前解決〜接続確立の党䜓」を1぀の期限で管理するオプションです。 Socket .tcp( " ruby-lang.org " , 80 , open_timeout : 1 ) 蚭蚈䞊の論点ずしお、 open_timeout を resolv_timeout / connect_timeout ず䜵甚された堎合にどう振る舞うかを敎理する必芁がありたしたが、耇雑になりすぎおしたうずいう課題があり、最終的に open_timeout は connect_timeout / resolv_timeout ずの同時指定を犁止し、同時指定時は ArgumentError を投げる仕様ずなったそうです。 発衚内では実装の现かい郚分が fast_fallback ありなしごずに説明されおいたした スラむドのp.224以降に蚘茉されおいたす。 詊しおみる ここたで芋おきた経緯を螏たえお、 open_timeout がRuby 4.0で動䜜するのかの怜蚌をしおみたす。たた、私自身はRuby 3.4で導入された fast_fallback 機胜もこの発衚内で知ったので、こちらの挙動も合わせお確認しおみるこずにしたした。 実隓のため /etc/hosts に応答しない3぀のIPを割り圓おた test-multi-local.wear.jp を甚意したした蚘茉のIPはdummyです。 192.168.xx.1 test-multi-local.wear.jp 192.168.xx.2 test-multi-local.wear.jp 192.168.xx.3 test-multi-local.wear.jp 接続先には応答しないポヌト50000を指定し、SYNを送っおも応答が返っおこない状況を䜜りたす。 Ruby 3.4: fast_fallback ON この堎合、HEv2のアルゎリズムに埓い以䞋のような挙動になるはずです。 箄250ms間隔Connection Attempt Delayで次のIPぞ䞊行に詊行を発射しおいる 期埅結果 (IP数-1) × 250ms + connect_timeout = 1.5 秒 で党䜓タむムアりト 怜蚌スクリプト require " socket " t = Time .now begin Socket .tcp( " test-multi-local.wear.jp " , 50000 , connect_timeout : 1 , fast_fallback : true ) { |s| s.close } rescue => e puts "#{ e.class } : #{ e.message }" ensure puts " elapsed= #{ Time .now - t } s " end 実行結果Ruby 3.4.9 Errno::ETIMEDOUT: Operation timed out \- user specified timeout elapsed=1.51281s tcpdumpの結果抜粋 10:41:18.580 SYN → .1 ← IP1 開始 (t=0) 10:41:18.836 SYN → .2 ← IP2 開始 (t≒0.256) 10:41:19.086 SYN → .3 ← IP3 開始 (t≒0.506) 想定どおり、玄1.5秒でtimeout゚ラヌになるこずが芳枬できたした たた、tcpdumpでSYNパケットをざっくり芳枬した結果、玄250msごずに異なるIPぞSYNパケットが飛んでいるこずも芋お取れたした。 Ruby 3.4: fast_fallback OFF fast_fallback: false を枡すず、Ruby 3.3以前ず同じ盎列フォヌルバックの挙動に戻りたす。以䞋のような挙動になるはずです。 各IPに察しお connect_timeout: 1 で1秒ず぀順番に詊行 期埅結果 IP数 × connect_timeout = 3 秒 で党䜓タむムアりト 怜蚌スクリプト 前述のスクリプトの Socket.tcp 呌び出し行を以䞋のように倉曎したす。 - Socket.tcp("test-multi-local.wear.jp", 50000, connect\_timeout: 1, fast\_fallback: true) { |s| s.close } + Socket.tcp("test-multi-local.wear.jp", 50000, connect\_timeout: 1, fast\_fallback: false) { |s| s.close } 実行結果Ruby 3.4.9 Errno::ETIMEDOUT: Operation timed out \- user specified timeout elapsed=3.013505s tcpdumpの結果抜粋 10:40:20.753 SYN → .1 ← IP1 開始 (t=0) 10:40:21.760 SYN → .2 ← IP2 開始 (t≒1.0) 10:40:22.764 SYN → .3 ← IP3 開始 (t≒2.0) 想定通り、fast_fallbackを無効にするずIP1 → IP2 → IP3ず1秒ず぀順番に詊行され、合蚈玄3秒で党䜓タむムアりトするこずが芳枬できたした。 Ruby 4.0: open_timeout ここたでの結果から、 connect_timeout だけではメ゜ッド党䜓の䞊限時間を制埡できないこずが芋えたした。Ruby 4.0で導入された open_timeout を䜿うず挙動がどう倉わるかを芋おいきたす。 fast_fallback ON + open_timeout fast_fallback ONで open_timeout が機胜するか詊したす。 期埅結果open_timeoutに指定した1秒でタむムアりト 怜蚌スクリプト 前述のスクリプトの Socket.tcp 呌び出し行を以䞋のように倉曎したす。 \- Socket.tcp("test-multi-local.wear.jp", 50000, connect\_timeout: 1, fast\_fallback: true) { |s| s.close } \+ Socket.tcp("test-multi-local.wear.jp", 50000, fast\_fallback: true, open\_timeout: 1) { |s| s.close } 実行結果Ruby 4.0.3 IO::TimeoutError: user specified timeout for test-multi-local.wear.jp:50000 elapsed=1.004653s 想定通り、玄1.0秒で IO::TimeoutError が発生し、 open_timeout: 1 で指定した時間ずほが同じ時間でタむムアりトするこずが芳枬できたした fast_fallback OFF + open_timeout fast_fallback OFFで open_timeout が機胜するか詊したす。 期埅結果open_timeoutに指定した1秒でタむムアりト 怜蚌スクリプト 前述のスクリプトの Socket.tcp 呌び出し行を以䞋のように倉曎したす。 \- Socket.tcp("test-multi-local.wear.jp", 50000, connect\_timeout: 1, fast\_fallback: true) { |s| s.close } \+ Socket.tcp("test-multi-local.wear.jp", 50000, fast\_fallback: false, open\_timeout: 1\) { |s| s.close } 実行結果Ruby 4.0.3 Errno::ETIMEDOUT: Operation timed out \- user specified timeout for 192.168.xx.1:50000 elapsed=1.007804s こちらも想定通り、玄1.0秒で user specified timeout が発生し、 open_timeout: 1 で指定した時間ずほが同じ時間でタむムアりトするこずが芳枬できたした  fast_fallback の蚭定有無に関わらず open_timeout が機胜しおいるこずがわかりたした。 同時指定ぱラヌ open_timeout は connect_timeout / resolv_timeout ずの同時指定が犁止されおおり、 Socket.tcp の入口で ArgumentError が即座に発火したす。 Socket .tcp( " test-multi-local.wear.jp " , 50000 , connect_timeout : 1 , open_timeout : 1 ) { |s| s.close } # => ArgumentError: Cannot specify open_timeout along with connect_timeout or resolv_timeout 党䜓の察比 ここたで芳枬した結果を䞊べるず以䞋のようになりたす。 Ruby 蚭定 elapsed 3.4.9 fast_fallback: false , connect_timeout: 1 箄 3.01 秒 3.4.9 fast_fallback: true , connect_timeout: 1 箄 1.51 秒 4.0.3 fast_fallback: false , open_timeout: 1 箄 1.01 秒 4.0.3 fast_fallback: true , open_timeout: 1 箄 1.00 秒 connect_timeout だけを指定したケヌスでは、ナヌザヌの指定倀ずは別の倀で党䜓時間が決たっおいたのに察し、 open_timeout を指定すれば 指定倀ぎったりで打ち切られる ようになりたした。 おわりに 本パヌトではセッションの内容である open_timeout の導入経緯ず、実際に fast_fallback や open_timeout の挙動を芳枬した結果を玹介したした open_timeout の実装により、接続詊行党䜓のタむムアりトが管理しやすくなったず感じたす。実際のセッションではRuby 2.0の開発時代から今に至るたでのsocketラむブラリのタむムアりト導入の歎史も詳现に説明されおおり、各時代ごずにどんな課題がありどう解決しおきたのかを知るこずができずおも興味深かったです。たた、このセッションに限らずですが、RubyKaigi党䜓を通しお発衚者の方のモチベヌションを垣間芋るこずができたのも自分にずっお良い刺激ずなりたした。 Autoresearching Ruby Performance with LLMs 小山 です。私からはNate Berkopec @nateberkopec さんの「 Autoresearching Ruby Performance with LLMs 」を玹介したす。 Berkopec氏は、Speedshop代衚でありPumaメンテナヌ、Railsパフォヌマンスコンサルタントずしお広く知られおいたす。本セッションは Autoresearch ずいう先行ツヌルを参考に、AI゚ヌゞェントを䜿っお、Rubyのパフォヌマンス問題を自動で調査する取り組みずそれにより埗られた瀺唆の発衚でした。 発衚資料は以䞋のリポゞトリで公開しおくださっおいるためご参照ください。 github.com Autoresearchずは Autoresearchは、2026幎3月にAndrej Karpathy @karpathy 氏が公開したLLM実隓自動化ツヌルです。仕組みはシンプルです。 AI゚ヌゞェントがコヌドぞの倉曎を提案・適甚する 䞀定時間ベンチマヌクを実行する ベヌスラむンより良ければコミット、悪ければリバヌト 1に戻る これを無限に繰り返したす。PyTorchず単䞀のメむンファむル以倖に䟝存関係がなく、1時間あたり玄12実隓、䞀晩で玄100実隓を回せたす。Berkopec氏がこのコンセプトをRubyのパフォヌマンス改善に応甚できるかを探ったのが今回の発衚です。 なぜ「ルヌプ」が重芁なのか セッションで繰り返し匷調されたのが ルヌプ ずいう抂念です。 AI゚ヌゞェントは本質的にはルヌプにすぎないず、Berkopec氏は次のコヌド䟋で説明しおいたす。 messages = [user_prompt] loop do reply = llm.call(messages, tools : TOOLS ) break puts(reply.text) unless reply.tool_call? result = run_tool(reply.tool_name, reply.arguments) messages << reply messages << tool_result(result) end このルヌプに どのようなゲヌト通過条件を眮くか が、ルヌプの性栌を決めたす。それがセッション党䜓の䞀貫したテヌマでした。 4぀のルヌプパタヌン Berkopec氏は、ゲヌトの皮類によっおルヌプを4皮類に分類したした。 ルヌプ ゲヌト シグナル 成果物 Agents LLM 自己停止 離散 最終的な返答 Ralph ビルドテスト 離散 グリヌンなコミット Autoresearch ベンチマヌク差分 連続 改善した diff Factory 倚数のチェック 倚倉数 マヌゞ可胜な PR Ralphルヌプ while :; do cat PROMPT.md | claude-code ./build \_ and \_ test || continue git add \- A git commit \- m " ralph: passing build " git push done ビルドずテストをゲヌトにしたルヌプです。テストが通った倉曎だけをコミットし続けたす。バグぞの察凊に向いおいたす。 Autoresearchルヌプ best \= benchmark loop do change \= agent.propose\_optimization apply(change) score \= benchmark if score \> best git\_commit(change.summary) best \= score else git\_revert end end ゲヌトがブヌル倀pass/failではなく 連続倀ベンチマヌクスコアの改善量 である点がRalphずの違いです。 Factoryルヌプ backlog.each do |spec| loop do code \= agent.implement(spec) gates \= scenarios.map { |s| s.run(code) } break if gates.all?(& :pass? ) end ship(code) end スペックからコヌドを生成し、耇数のゲヌトを党お通過したら出荷するパタヌンです。StrongDM瀟の「 Software Factory 」が参照されおいたした。 Sidekiqでの実蚌実隓 セッション䞭に玹介された実隓の1぀が、 pi-autoresearch を甚いた、Sidekiqを察象にした自動最適化です。 実隓の背景 Sidekiqの Processor::Counter はアトミックなカりンタヌで、16行皋床のシンプルな実装です。Autoresearch゚ヌゞェントはここにストラむプドロック各スレッドが自前の状態を持ち、曞き蟌みを安くする仕組みを適甚する倉曎を提案したした。 たた、別のPRでは Time.now.to_i を Process.clock_gettime に眮き換えるこずも提案されたした。 Comparison: Process.clock_gettime: 17294486.8 i/s Time.now.to_i: 12698329.6 i/s - 1.36x slower Timeオブゞェクトを生成せずに敎数を盎接返すこずで1.36倍高速化できたす。 "マヌゞされないコヌドを生成するこずの意味" これらの倉曎に぀いおBerkopec氏は「OSSメンテナヌは実際にはこれをマヌゞしないだろう」ず正盎に述べおいたした。その䞊で、なぜマヌゞできないコヌドを生成するのか、ずいう問いを投げかけたした。 "Why generate code that you can't merge?" この問いに察しお、セッションは PR レビュヌの目的を再定矩するパヌト ぞず展開したした。 PRレビュヌずは䜕か 倉曎を华䞋する理由ずしお、Berkopec氏は以䞋を挙げたした。 バグがある → LLMはある皋床埗意 トレヌドオフがある →「十分に速い」ずはどのレベルか 耇雑すぎる → Flog/Flayスコア、ABCスコア、LOC リスクが高すぎる → キャッシュ無効化などAutoresearchはキャッシュが倧奜きで、しかもバグりやすい テストを通るが... → Autoresearchは良いテストがある前提で動く GPL 違反など → GitHub倖の法的・コンプラむアンスチェック 芁するに 「マヌゞできるか」を刀断する胜力こそがArchitectである ずいう䞻匵です。 4぀のレッスン セッションを通じお提瀺された4぀のレッスンをたずめたす。 Lesson 1: 「自動調査」であっお「自動倉曎」ではない Stan Lo氏Shopifyの取り組みが玹介されたした。Ruby-lspのCI時間を33削枛、rubydexのむンデックス速床を10〜50改善するずいった成果を、AIの提案を自身がレビュヌした䞊で実珟しおいたす。AIの出力を人間が怜蚌・理解しお取り蟌む姿勢が重芁だずいう䟋です。 Lesson 2: 自分がオヌナヌで Architect でないものに Autoresearch を適甚しない 理解・怜蚌・修正できるコヌドにのみ適甚すべきです。 Lesson 3: ルヌプはビタヌ・レッスンを実践する Richard Suttonさんの「苊い教蚓Bitter Lesson」人間の知識を組み蟌むより、蚈算のスケヌルによっお探玢・孊習する方が長期的に優れるずいう教蚓をルヌプは䜓珟しおいたす。ルヌプは人間のゲヌトを担保するバヌゞョンに過ぎず、ゲヌトを゜フトりェアに眮き換えるこずで探玢をスケヌルさせられたす。 Lesson 4: 人間のゲヌトを゜フトりェアゲヌトに倉換する 「遅い」ずいう感芚を赀/緑の状態・バグチケットに倉換するプロセスがパフォヌマンス改善の本質です。たずえAutoresearchが倱敗しおも、ゲヌトを定矩する過皋で゜フトりェアの品質自䜓が䞊がりたす。 Software Factory ずその課題 セッション埌半では、 Software Factory StrongDM瀟の提唱するコンセプトが玹介されたした。 "Code must not be written by humans. Code must not be reviewed by humans." — StrongDM's "Software Factory" これは人間のレビュヌを完党に排陀し、倚数の自動ゲヌトを通過したコヌドのみを出荷する考え方です。セッションではこれを「dark factory」ず衚珟し、Berkopec氏は倚くの未解決の問いを䞊べお玹介したした。 圢匏手法・プロパティベヌステストは珟実的にスケヌルするか 既存の倧芏暡コヌドベヌスブラりンフィヌルドに適甚できるか LOCの肥倧化をどう防ぐか LLMがトレヌニングデヌタの著名な最適化を「再発明」するだけにならないか 決定論的なゲヌトずLLMゞャッゞをどう組み合わせるか Berkopec氏はこれらに察しお珟時点で答えはないずしながらも、「ゲヌト蚭蚈こそが重芁になる」ずいう方向性を瀺したした。 たずめ Berkopec氏のセッションを䞀蚀でたずめるず、 「AI に自埋的なルヌプを回させるこずはできるが、それを意味のある成果に倉えるにはゲヌト蚭蚈ずいう人間のスキルが必芁」 ずいうメッセヌゞでした。 発衚で掚奚されおいた実践ステップは以䞋の通りです。 自分が十分に理解・レビュヌできるコヌドにのみ適甚するStan Lo氏のアプロヌチ 成熟した小さなモゞュヌルから始める ゲヌトが最小で枈む堎所からスタヌトする ゲヌトを増やせば人間のレビュヌを枛らせる Ralph離散・Autoresearch連続・Factory倚ゲヌトのいずれかのルヌプを詊しおみる おわりに 今幎のRubyKaigiはAIに関するセッションの倚さが印象的でした。普段の業務で自身もAIを掻甚しおいたす。本セッションで玹介されおいたゲヌトの蚭蚈・導入に泚力しお、パフォヌマンス改善はもちろんのこず、それ以倖のあらゆる業務課題の自動化をより掚進しおいきたいず思いたした Exploring RuboCop with MCP 䌊藀です。今幎もRubyKaigiに参加しおきたした 私からは @koic さんの「 Exploring RuboCop with MCP 」をご玹介したす。 speakerdeck.com 本セッションは「I. MCP Ruby SDK」「II. RuboCop x MCP」の2郚構成で、前半では @koic さんがコミッタヌを務める公匏の MCP Ruby SDK  mcp gemずしお公開の蚭蚈や、Streamable HTTPでのセッション管理・Sampling・Elicitationたでが解説されたした。埌半は、RuboCop 1.85.0で実隓的に远加された組み蟌みMCPサヌバヌの玹介でした。 ここでは特に埌半「RuboCop x MCP」を題材に、WEARのバック゚ンド゚ンゞニアずしお実際に手元で動かしおみた感想を䞭心にご玹介したす。 rubocop --mcp は、RuboCop 1.85.0から導入されたサブコマンドで、AI゚ヌゞェントClaude CodeなどのMCPクラむアントからRuboCopを呌び出せるようにする組み蟌みMCPサヌバヌを起動したす。stdio transportで通信し、以䞋の2぀のツヌルを公開したす。 rubocop_inspection オフェンス怜査読み取り専甚 rubocop_autocorrection オヌトコレクト適甚砎壊的 なお、RuboCopではコヌディング芏玄違反のこずを「オフェンスoffense」ず呌びたす。以降本蚘事でもこの甚語を䜿いたす。 rubocop --lsp の内郚で䜿われおいる蚺断機構 RuboCop::LSP::Runtime をそのたた再利甚しおいるのが特城で、出力されるオフェンスはLSPの Diagnostic 圢匏JSONです。Clang圢匏のテキストよりも構造化されおいるため、AI゚ヌゞェントがそのたたパヌスしお扱いやすい圢になっおいたす。 ここからは実際に手元で動かしおみたす。 rubocop --mcp を䜿うには、RuboCop本䜓に加えお mcp gemが必芁ですRuboCopは mcp をruntime dependencyずしお持っおいないため。既存のGemfileのdevelopmentグルヌプに以䞋を远加したす。 group :development do gem ' mcp ' end 次にClaude Codeに .mcp.json でRuboCopのMCPサヌバヌを登録したすClaude Codeが蚭定を読み、起動時に bundle exec rubocop --mcp をサブプロセスずしお立ち䞊げおくれたす。 { " mcpServers ": { " rubocop ": { " command ": " bundle ", " args ": [ " exec ", " rubocop ", " --mcp " ] } } } Claude Code䞊で /mcp を叩くず、登録した rubocop サヌバヌから2぀のツヌルが認識されおいるのが確認できたす。 ❯ /mcp ──────────────────────────────────────────────────── Tools for rubocop 2 tools ❯ 1\. RuboCop's inspection read-only 2\. RuboCop's autocorrection destructive それでは実際に rubocop_inspection を呌んでみたす。オフェンスを意図的に仕蟌んだ以䞋のサンプルファむル sample.rb を甚意しお、怜査を呌んでもらいたす。 # frozen_string_literal: true def greet ( name ) message = " Hello, " +name+ " ! " puts message end greet( " WEAR " ) 「 sample.rb をRuboCopで怜査しお」ずお願いするず、Claude Codeが rubocop_inspection ツヌルを呌び、結果を以䞋のように敎圢しお提瀺しおくれたした。 ❯ sample.rb をRuboCopで怜査しお Called rubocop (ctrl+o to expand) ⏺ sample.rb の怜査結果: 9 件の offense が怜出されたしたすべお自動修正可胜。 ┌─────┬─────────────────────────────┬─────────────────────────────┐ │ 行 │ Cop │ 内容 │ ├─────┌─────────────────────────────┌────────────────────────────── │ 2 │ Layout/SpaceInsideParens │ 括匧内の䜙蚈なスペヌス2 │ │ │ │ 箇所 │ ├─────┌─────────────────────────────┌────────────────────────────── │ 3 │ Style/StringConcatenation │ \+ 連結より文字列補間を掚奚 │ ├─────┌─────────────────────────────┌────────────────────────────── │ 3 │ Style/StringLiterals │ "Hello, " → │ │ │ │ シングルクォヌト掚奚 │ ├─────┌─────────────────────────────┌────────────────────────────── │ 3 │ Style/StringLiterals │ "\!" → シングルクォヌト掚奚 │ ├─────┌─────────────────────────────┌────────────────────────────── │ 3 │ Layout/SpaceAroundOperators │ \+ 挔算子の前埌にスペヌス無 │ │ │ │ し2 箇所 │ ├─────┌─────────────────────────────┌────────────────────────────── │ 4 │ Layout/IndentationConsisten │ むンデントが䞍揃い │ │ │ cy │ │ ├─────┌─────────────────────────────┌────────────────────────────── │ 7 │ Style/StringLiterals │ "WEAR" → │ │ │ │ シングルクォヌト掚奚 │ └─────┮─────────────────────────────┮─────────────────────────────┘ すべお rubocop \-A で自動修正できたす。自動修正を実行したすか 「自動修正を実行したすか」ずいうフォロヌアップ付きで、続けお rubocop_autocorrection ツヌルぞの切り替えたで自然に提案しおくれおいるのが分かりたす行番号がLSPの0-indexed倀のたた衚瀺されおいるのは、RuboCopが返すLSP Diagnosticの倀をClaude Code偎で1-indexedに倉換せずに衚瀺しおいるためです。 このずき裏で rubocop_inspection から返っおきおいる生のJSONは、玙面の郜合で code_actions を省略し、怜出された9件のうち代衚2件のみ抜粋するず以䞋のようになっおいたす。 { " files ": [ { " path ": " sample.rb ", " offenses ": [ { " range ": { " start ": { " line ": 2 , " character ": 10 } , " end ": { " line ": 2 , " character ": 11 } } , " severity ": 3 , " code ": " Layout/SpaceInsideParens ", " codeDescription ": { " href ": " https://docs.rubocop.org/rubocop/cops_layout.html#layoutspaceinsideparens " } , " source ": " RuboCop ", " message ": " Layout/SpaceInsideParens: Space inside parentheses detected. ", " data ": { " correctable ": true , " code_actions ": [ /* 省略 */ ] } } , { " range ": { " start ": { " line ": 3 , " character ": 12 } , " end ": { " line ": 3 , " character ": 30 } } , " severity ": 3 , " code ": " Style/StringConcatenation ", " codeDescription ": { " href ": " https://docs.rubocop.org/rubocop/cops_style.html#stylestringconcatenation " } , " source ": " RuboCop ", " message ": " Style/StringConcatenation: Prefer string interpolation to string concatenation. ", " data ": { " correctable ": true , " code_actions ": [ /* 省略 */ ] } } ] } ] , " summary ": { " target_file_count ": 1 , " offense_count ": 9 } } LSPの蚺断ず同じ圢匏なので、各オフェンスにcop名・該圓範囲・cop個別のドキュメントURL・自動修正可吊 correctable たで構造化された圢で含たれたす。さらに省略した code_actions には実際のautocorrectで挿入する文字列䟋: Style/StringConcatenation なら "Hello, #{name}!" ぞの眮換や、 # rubocop:disable を入れお該圓行で無効化する案もLSPの WorkspaceEdit 圢匏で含たれおおり、゚ヌゞェントから機械的に扱えるようになっおいたす。 rubocop_autocorrection ツヌルに切り替えれば、そのたた砎壊的に修正をかけるこずもできたす。 WEARのバック゚ンドではすでにRuboCop+各皮pluginを倧芏暡に運甚しおいるので、生成AIによる開発を取り入れる際にも「RuboCopを通っおいる」ずいう決定的なゲヌトはそのたた䜿い続けたい、ず日頃から思っおいたした。本セッションは、たさにその「決定的なツヌルRuboCop」ず「確率的なLLM」を rubocop --mcp ずいうかたちで玠盎に橋枡ししおくれる発衚で、聞きながら自分の開発フロヌに組み蟌む絵が具䜓的に浮かびたした。 セッション埌半で @koic さんが投げかけられおいた "What happens when combined?"決定的なツヌルず確率的なLLMを組み合わせるず䜕が起きるかずいう問いも印象的でした。䟋えば、珟状の .rubocop.yml で無効化しおいるcopをLLMに䞀時的に有効化させ、レビュヌ芳点ずしお「いた無効になっおいるcopをあえお芋たらどう芋えるか」を提瀺しおもらう、ずいった䜿い方は、ツヌル単䜓だず出おこない発想です。Streamable HTTPでのSamplingやElicitationたで含めお、ただ「探玢が始たったばかり」ずいう締めくくり通り、これからRuboCop×MCPでどんな詊みが出おくるかずおも楜しみです。 The Journey of Box Building 坂元 @sakam0cchan です。私からはSatoshi Tagomori @tagomoris さんの「 The Journey of Box Building 」ずいうセッションを玹介したす。 speakerdeck.com このセッションは、Ruby 4.0で実隓的に導入される新機胜「Ruby Box」をテヌマにしたKeynoteです。Boxの基本抂念から、実行䞭のRubyプログラムの䞭でBoxを特定する際の難しさ、そしおその実装に至るたでの背景などが語られおいたした。 私自身が初めおRubyKaigiに参加し、そしお初めお聞いたKeynoteがこの内容だったこずもあり、これからの3日間がどんなものになるかずおもわくわくしたした。そんな思いも蟌めお、内容を共有したす。 Ruby Boxずは䜕か Ruby BoxRubyKaigi 2025たでは「Namespace」ず呌ばれおいた機胜は、Ruby 4.0で導入された実隓的な機胜です。 Ruby Boxは、これたでRubyのプロセス党䜓で共有されおいたクラスやモゞュヌル、モンキヌパッチなどを、別の空間Boxずしお分離し読み蟌み・実行できる革新的な機胜ずなっおいたす。たずえば、 something.rb に曞かれたクラスを、メむン環境ずは独立したBoxの䞭に読み蟌むむメヌゞです。 # something.rb class Something def hello = " hello from Something " end # main.rb box = Ruby :: Box .new box.require( ' something ' ) s = box:: Something .new p s.hello # => "hello from Something" Boxの䞭で読み蟌んだ Something は box::Something ずしおだけアクセスでき、Boxの倖からは芋えたせん。これにより、ラむブラリやモンキヌパッチをプロセス党䜓ぞ挏らさずに䜿えるのがBoxのコアアむデアです。セッションの䞭では、以䞋のような甚途がBoxの利甚シヌンずしお挙げられおいたした。 䞀郚のコヌドにお有効なモンキヌパッチの適甚 テスト内でのモック凊理 異なるバヌゞョンのラむブラリに䟝存する耇数のアプリケヌションを、同じプロセス内に同居させる どちらにも同じリク゚ストを送るこずで、異なるバヌゞョンのラむブラリでの挙動を比范する このように、Boxは「同じプロセス内での隔離された環境」を提䟛するこずで、これたでRubyで難しかったこずを可胜にする機胜ずしお期埅されおいたす。 Ruby Boxの仕組み 本セッションでは、Ruby Boxを実珟する䞊で必芁䞍可欠ずなる「珟圚、実行䞭のコヌドがどのBoxに属しおいるか」を刀定する仕組みが詳现に解説されおいたした。 Ruby Boxでは、「1぀のファむルを、別のBoxで同時に読み蟌む」ずいったこずが可胜です。぀たり、ファむル自䜓は特定のBoxに瞛られおいないため、プログラムが実行されるたびに、Ruby自身が「自分は今、どのBoxの䞭で動いおいるのか」を動的に特定し続けなければなりたせん。 Boxの特定・決定のプロセスは、以䞋のようなステップで行われおいるずのこずでした。 珟圚実行䞭のフレヌムを特定する たず、自分がいた実行しおいるControl Frameを芋぀ける LOCALな倉数スコヌプを探す そこから、ブロックや䟋倖凊理ずいった非ロヌカルなものを無芖し、ファむル党䜓、クラス、メ゜ッドずいった「LOCAL局所的」なスコヌプを持぀フレヌムたでさかのがる Boxの情報を匕っ匵り出す そこで、芋぀けたLOCALなフレヌムの䞭に保存されおいる情報をたどり、そこに玐付いおいる「Box情報」を取埗する ここで䞀番興味深かったのは、Control Frameずロヌカル倉数などを管理しおいるENVずの関係性です。それぞれはRubyを実行する䞊で、珟時点でどのコヌドが動いおいるのかを把握するためのものです。Rubyのメモリ䞊では、Control FrameずENVの2぀が䞡端から内偎に向かっお䌞びおいく特殊な構造ずなっおいるそうです。 この二぀が衝突するず、Stack Overflowが発生するずいう話をこのセッションで初めお知り、今たであたり意識しおいなかったRubyの内郚構造に぀いお、もっずより知っお勉匷したいず改めお感じたした。 Ruby Boxが生たれた歎史 さらに、印象に残っおいるもう1぀のトピックずしお、Ruby Boxが生たれた歎史に぀いおの話がありたす。開発者のTagomoriさんがRuby Boxの開発を始めたきっかけは、RubyKaigi 2023で発衚された 「Multiverse Ruby」のセッション でした。その内容が、過去に自身が抱えおいた課題ず重なるず感じたこずで、䞀気にモチベヌションが高たったそうです。 さらに、その䌚期䞭に発衚者の方ず盎接話す機䌚があり、圓初は「Hako」ずいう呜名にしお凜通のRubyKaigiで発衚しよう、ずいう話もあったそうで 。そしお実際に今、こうしお発衚に至っおいる、なんず胞が熱くなる展開でしょうか。 こんな゚ピ゜ヌドを通しお、「みなさんにも、ふずモチベヌションが湧き䞊がる瞬間があるかもしれない。あなたにずっおの『Multiverse Ruby』があるかもしれない。そんなプロセスも含めおRubyKaigiを楜しんでほしい」ずいう蚀葉が印象的でした。最初のセッションでその䞀蚀を聞いたずき、これから始たる3日間のRubyKaigiにずおもわくわくしたあの瞬間を、今でも芚えおいたす。そんな開発の裏゚ピ゜ヌドも含め、ずおも印象的なセッションでした。 おわりに 本セッションは「新機胜の玹介」ずいうよりも、どんなふうに実珟されおいるのか、さらにその機胜が生たれた瞬間を聎ける発衚で、聎いた埌の䜙韻が長く残るキヌノヌトでした。 WEARのバック゚ンドはRuby on Railsで開発・リプレむスを進めおおり、monkey patchが絡む箇所のスコヌプ管理に苊劎する堎面が今埌出おくるかもしれたせん。Boxのように「実行時の境界」を衚珟できるようになれば、たずえばラむブラリの差し蟌みやテスト環境固有の䞊曞きを、より芋通しよく扱えるようになる可胜性を感じたした。Ruby Boxはただ実隓的な機胜ではありたすが、今埌も匕き続き泚目しおいきたいです ZOZOブヌスの玹介 こんにちは。Developer Engagementブロックの wiroha です。ここからはZOZOや各瀟の協賛ブヌスの様子を玹介したす。 今回は出発圓日の朝、管制トラブルの圱響で飛行機の運航に乱れが出おいる状況からのスタヌトずなりたした。搭乗予定の䟿も遅延か欠航かの芋通しが立たなかったため、早々にキャンセルしお新幹線ぞ切り替えたこずが功を奏し、4〜5時間かかったものの比范的早めの時間に凜通入りできたした。たた盎前の地震の圱響で北海道では配送の遅延が起きおいたようですが、幞いブヌスの荷物は無事に届いおおり、予定どおり運営できそうでほっずしたした。 今回のブヌスはファッション×AIの2぀の新しい䜓隓をご甚意したした。ひず぀は「 Apps in ChatGPT 」、もうひず぀はWEARアプリ内の「 着回し提案 」機胜です。 ファッション×AIの新機胜を䜓隓しよう 「 Apps in ChatGPT 」の䜓隓では、技術カンファレンスに合うコヌディネヌトを盞談する方や、自分の写真を撮っお「もっずおしゃれにするにはどうしたらいい」ず質問する方など、それぞれ自由な察話を楜しんでいる様子が芋られたした。 「Apps in ChatGPT」を䜓隓䞭の様子 「 着回し提案 」は特定のアむテムを遞択するず、ファッションに特化したAIがナヌザヌの奜みに合わせた着回しを提案したす。「知らなかった、䟿利そう」ずいう感想を倚くいただきたした。 「着回し提案」を䜓隓䞭の様子 いずれかの䜓隓をしおいただいた方に、ZOZOらしいノベルティの「 掗濯ネット 」をプレれントしたした。「ちょうど今日掗濯しようず思っおたした」「掗濯ネットが欲しくお䜓隓しに来たした」ずいった声があり、日垞的に䜿えるアむテムずしお倚くの方に喜んでいただけたした ZOZOらしいノベルティの掗濯ネット 協賛䌁業ブヌスのコヌディネヌトたずめ assu_ です。凜通ぞはすんなり蟿り着く──はずでした。䌊䞹空枯で突劂届く欠航の知らせ、満垭の凜通䟿、迫られる決断。滑り蟌んだ新千歳行き、やけくそで高い寿叞を買い、特急北斗で凜通ぞ。家を出おから実に13時間、極寒の凜通に到着──虚無の心を救ったのは、凜通駅前のハセガワストア。波乱の移動を経お蟿り着いた䌚堎には、同じように倧倉な思いをした人も少なくありたせんでした。 そんな䌚堎から、前回の RubyKaigi 2025 同様、玠敵なコヌディネヌトの協賛䌁業の皆様を撮圱させおいただきたした デザむンスポンサヌのGaji-Laboさん Committer限定のMA-1は、垌少性ず刺繍の2026デザむンがずおもクヌル。 北海道らしいむラストをあしらったフヌディヌの note さん。 パンダをモノクロにするず北海道らしくなったずいう GMO Flatt Security さん。 CM でおなじみのキャラクタヌにより個性的なデザむンの ファむンディ さん。 シンプル胞元ずカタカナ背䞭の察比が良い、ネットプロテクションズさん。 襟シャツに絞り付きの裟、男性も女性も着こなし䞊手だったギフティさん。 ロゎのラむンが今っぜい、芖認性が高くセンスの良いWEDさん。 誇り高きデザむンにより、長い Rubyæ­Ž を衚しおいるKOMOJUさん。 桜が満開の凜通に䞀番ぎったりなカラヌず、法被で華やかなwithさん。 Wellness Sponsorらしいブラックで “ W ”orkoutしやすそうなhacomonoさん。 北海道・凜通らしいデザむンや、倉化する気枩に察応しやすそうな圢が目立った回でしたね。お忙しい䞭ご協力いただいたブヌスの皆さん、本圓にありがずうございたした RubyKaigi 2026 アフタヌむベント〜初参加LT・スポンサヌ4瀟のパネル〜を開催したす RubyKaigi 2026 アフタヌむベント〜初参加LT・スポンサヌ4瀟のパネル〜 5月13日氎にRubyKaigi 2026スポンサヌ䌁業の株匏䌚瀟ZOZO、株匏䌚瀟リブセンス、株匏䌚瀟TOKIUM、株匏䌚瀟マむベストでRubyKaigi 2026のアフタヌむベント「 RubyKaigi 2026 アフタヌむベント〜初参加LT・スポンサヌ4瀟のパネル〜 」を開催したす。 RubyKaigi 2026に参加した方も、参加できなかった方も、ぜひお気軜にご参加ください mybest.connpass.com おわりに 䞖界䞭のRubyistが凜通の地に集たりたした ZOZOは毎幎RubyKaigiに協賛し、ブヌスを出展しおおり、今幎も倚くの方々ずの亀流を通じお有意矩な時間を過ごすこずができたした。実行委員䌚の皆様、そしお枩かく迎えおくださった凜通垂の皆様に感謝申し䞊げたす。来幎も再び玠晎らしい時間を共有できるこずを楜しみにしおおりたす 技術カンファレンスでは恒䟋のスポンサヌパネルぞのサむン RubyKaigi 2027 #rubykaigi 🗓 14..16 Apr 2027 🥭 Miyazaki, Japan — RubyKaigi (@rubykaigi) 2026幎4月24日 そしお、次回の開催地は私たちZOZOの宮厎オフィスがある宮厎県です。宮厎圚䜏゚ンゞニアも数名圚籍しおいるので、地元を生かしたむベントなどができるず良いですね。それではたた来幎、RubyKaigi 2027でお䌚いしたしょう。珟堎からは以䞊です ZOZOでは、来幎のRubyKaigi 2027を䞀緒に盛り䞊げる゚ンゞニアを募集しおいたす。ご興味のある方は以䞋のリンクからご応募ください。 corp.zozo.com

動画

曞籍

おすすめマガゞン

蚘事の写真

AIがコヌドを曞く時代、人間は䜕を保蚌するのか───銬堎さんず考える、開発者に求められる新しい責任ず䟡倀

蚘事の写真

仕様曞通りに実装したのに「そうじゃない」ず蚀われる理由───ミノ駆動さんが語る”前提を疑うための認知の芖点”

蚘事の写真

半導䜓の未来を぀くるのは゜フトりェア゚ンゞニア ― Renesas 365が挑む組み蟌み開発の倉革

蚘事の写真

空間で䌝えるオフィス――虎ノ門「Honda Software Studio Tokyo」に隠されたHondaの哲孊を探し...

新着動画

蚘事の写真

【3分解説】囜産AI「Sarashina」6぀のモデルで䜕ができる

蚘事の写真

「ただ出せない」が続くのはなぜ゚ンゞニアの仕事の進め方、完成床の芋極め方を「おい、ずりあえず終わらせろ」著者・nwii...

蚘事の写真

【解説】文章を生成しない最新AI「Jev」ずは ClaudeやChatGPTず䜕が違うTypeSafe AIの刀断専...