株匏䌚瀟゚ブリヌのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟゚ブリヌ

株匏䌚瀟゚ブリヌ の技術ブログ

å…š469ä»¶

はじめに この床、株匏䌚瀟゚ブリヌは、2026幎9月11日金〜13日日に開催される「iOSDC Japan 2026」に、ゎヌルドスポンサヌずしお協賛するこずになりたした 匊瀟はこれたで Go Conference や TSKaigi などに協賛しおきたしたが、今幎は9月頭の DroidKaigi 2026 に続いお、iOSDC Japan にも初めお協賛したす。初めおの参加ずいうこずで、ブヌスでどんな方々ずお話しできるのか、今から楜しみにしおいたす。 本蚘事では、開催抂芁ず匊瀟のブヌス䌁画、iOSDCチャレンゞのトヌクン玹介、そしおアフタヌパヌティヌのご案内をお届けしたす。 iOSDC Japan 2026 ずは iosdc.jp iOSDC Japan は、iOS 関連技術をコアテヌマずした゜フトりェア技術者のためのカンファレンスです。䌚堎でのトヌクセッションやスポンサヌブヌスに加えおオンラむン配信もあり、iOS ゚ンゞニアが幎に䞀床集たる倧芏暡なむベントです。 今幎の開催抂芁は以䞋のずおりです。 開催日時 Day 0: 2026幎9月11日金 Day 1: 2026幎9月12日土 Day 2: 2026幎9月13日日 開催堎所 有明セントラルタワヌホヌルカンファレンス 開催圢態 オフラむン / オンラむンニコニコ生攟送 ブヌス出展日皋 2026幎9月11日金〜9月13日日の3日間 ブヌス䌁画 匊瀟のブヌスでは、次の2぀の䌁画を甚意しおいたす。開発本郚のメンバヌが珟地に参加したすので、ぜひお気軜にお立ち寄りください アンケヌトボヌド「iOSアプリ開発、AIにどこたで任せおいたすか」 「iOSアプリ開発、AIにどこたで任せおいたすか」をテヌマにした参加型のアンケヌトボヌドを蚭眮したす。 実装からレビュヌ、テストたで、日々の iOS 開発のどこたでを AI に任せおいるのか、゚ンゞニア歎ずあわせお皆さんのリアルな声をお聞かせください。 集蚈結果は、むベント埌の事埌レポヌト蚘事で公開する予定です。シヌルを1枚貌るだけで参加できたすので、セッションの合間にぜひ立ち寄っおみおください 新しくなったデリッシュAI をブヌスで觊れたす たた、iOS版でリリヌスしたばかりのデリッシュキッチンの新しい「デリッシュAI」を、実機でデモ展瀺したす 新しいデリッシュAI は、チャットで盞談するずレシピを提案しおくれる機胜です。たずえば「子䟛に人気のレシピ教えお」ず聞くず、たず「ハンバヌグ / カレヌ / から揚げ  」ず遞択肢で聞き返しおくれお、「ハンバヌグ」を遞ぶず、子䟛向けのハンバヌグレシピをすぐに提案しおくれたす。その䞋には「もっず簡単」「野菜入り」のような次の絞り蟌みや、「こんな質問もできたす」の候補が䞊ぶので、文字を打たなくおもタップだけで䌚話が進みたす 技術的には、サヌバヌ偎の AI ゚ヌゞェントが「どの UI をどう䞊べるか」たで生成し、iOS アプリがそれを SwiftUI で描画する、いわゆる Generative UI の䜜りになっおいたす。 「LLM に UI を任せおデザむンは厩れないの」「サヌバヌが返した UI を SwiftUI でどう描画しおるの」ず気になった方は、ぜひブヌスぞ 実機を觊りながら、iOS ゚ンゞニアが蚭蚈の䞭身たでお話ししたす。 デリッシュAI は最新版のアプリでご利甚いただけたす。iOSDC たでにぜひ䞀床、「今日の倕飯、䜕がいいかな」ず聞いおみおください iOSDCチャレンゞのトヌクン玹介 iOSDC Japan では、䌚堎をはじめ様々なずころに散りばめられた「iOSDCトヌクン」を探し、芋぀けた数に応じお抜遞刞を獲埗できる「iOSDCチャレンゞ」が開催されたす。集めた抜遞刞は、䌚堎の抜遞カりンタヌでノベルティが圓たる抜遞に䜿えたす。 匊瀟もこの䌁画に参加しおおり、トヌクンは党郚で3぀甚意したした。トヌクンは「#」から始たるスペヌスを含たない文字列です。この蚘事ではそのうち2぀を芋出しずしお掲茉し、残りの1぀はブヌスで公開したす。 #AIファヌスト・カンパニヌ 匊瀟は「AI ファヌスト・カンパニヌ」を掲げ、AI を前提に組織や仕事の進め方を組み替えおいる最䞭です。 Claude の党瀟導入で個人の AI 掻甚は䞀気に進みたした。ここからは、そこで生たれたツヌルやプロンプト、スキルを個人に閉じたたたにせず共有資産ぞ育おる「個人から組織ぞ」を進めきるこずず、AI に任せられる範囲が広がるなかで人間の圹割を意思決定ず蚭蚈ぞ寄せおいくこずが、次のテヌマです。 #誰でも簡単においしく䜜れる デリッシュキッチンが倧切にしおいるのは、「誰でも簡単においしく䜜れる」レシピ動画を届けるこずです。 料理が埗意な人だけでなく、料理に苊手意識のある人、忙しい日の倕飯に悩んでいる人、料理を始めたばかりの人にも「今日はこれ䜜っおみよう」ず思っおもらえるように、レシピの遞び方から䜜り方の芋せ方たで、サヌビスの䜓隓党䜓をこの蚀葉を軞に䜜り蟌んでいたす。 残りの1぀はブヌスで 3぀目のトヌクンは、匊瀟のブヌスに掲瀺しおいたす。 アンケヌトボヌドやデリッシュAI の展瀺を芋に来おいただいた぀いでに、ぜひ探しおみおください。 アフタヌパヌティヌのご案内 DroidKaigi 2026 の協賛蚘事でもご案内したしたが、ゆめみ、フェンリル、Yappli、WealthNavi、セヌフィヌ、゚ブリヌの6瀟合同で「DroidKaigi & iOSDC After Talks Night 2026」を開催したす DroidKaigi 2026 ず iOSDC Japan 2026 の合同アフタヌパヌティヌですので、iOS ゚ンゞニアず Android ゚ンゞニアが同じ堎に集たり、モバむル゚ンゞニア党䜓で技術亀流や LT などを楜しめる䌚になる予定です。 開催日時 2026幎10月2日金19:00〜21:00 開催堎所 䜏友䞍動産麻垃十番ビル アクセンチュア・むノベヌション・ハブ 東京 開催圢態 オフラむン / オンラむン コンテンツ ・各瀟の Android & iOS に関するセッション ・懇芪䌚 詳现・お申し蟌みは以䞋からご確認ください。皆さんのご参加をお埅ちしおいたす yumemi.connpass.com おわりに 初めおの iOSDC Japan ぞの協賛ずいうこずで、チヌム䞀同、圓日をずおも楜しみにしおいたす。 ブヌスでは、デリッシュキッチンの iOS 開発の裏偎や技術スタック、AI 時代のアプリ開発に぀いおのご質問や雑談も倧歓迎です。「トヌクンを探しに来た」「新しいデリッシュAI の技術的な䞭身を聞いおみたい」「ちょっず゚ンゞニアず話しおみたい」くらいの軜い気持ちで構いたせんので、ぜひ匊瀟のブヌスに足をお運びください。 有明の䌚堎、そしお10月のアフタヌパヌティヌで、皆さんずお䌚いできるこずを楜しみにしおいたす 最埌たでお読みいただき、ありがずうございたした
Go Conference 2026 に 今幎はSilver スポンサヌずしお協賛いたしたす はじめに この床、株匏䌚瀟゚ブリヌは、2026 幎 9 月 11 日(金)に開催される「Go Conference 2026」に、Silver スポンサヌずしお今幎も協賛するこずになりたした Go Conferenceずは gocon.jp プログラミング蚀語 ”Go”ナヌザヌのためのカンファレンスです。今幎はハむブリッド開催で、䌚堎でのセッションやワヌクショップに加え、セッションのオンラむン配信も予定されおいたす 今幎の開催抂芁は以䞋のずおりです。 開催日時 2026幎9月11日金 開催堎所 東京郜䞭野区䞭野4䞁目10番2号 䞭野セントラルパヌク サりス 1F / B1F 開催圢態 オフラむン / オンラむンセッションのみ配信 コンテンツ ・基調講挔 ・セッション ・ワヌクショップ ・Official Party懇芪䌚 昚幎は Go 1.24 / 1.25 の新機胜や蚀語内郚を深掘りする発衚が䞭心でしたが、今幎はすでにGoコミュニティに参加しおいる方、はじめおGoコミュニティに参加する方、みんなの孊びや奜きがより遠く深く広がるようなカンファレンスになるよう「 Go Far, Go Together 」ずいうテヌマが掲げられおいたす。 たた、プロポヌザルの審査基準にも「自身の経隓、知芋に基づく、独自性のある内容であるか」ずあるように今幎の タむムテヌブル を芋るず独自性に富んだテヌマが倚く芋られたす。 䟋えば、海䞊で動くGoサヌバヌ、Go におけるコン゜ヌルゲヌム開発、9幎のOSS保守で芋た暙準ラむブラリずtestingの進化などです。 筆者個人ずしおは、convto さんの「暙準パッケヌゞに uuid が远加された背景から芋る Go らしい意思決定」が気になっおいたす むベント圓日に぀いお ゚ブリヌのブヌスでは、料理に関するクむズや、ノベルティ・キッチングッズなどが圓たるくじ匕き、アンケヌトボヌドを蚭眮しおいたす デリッシュキッチン 食クむズ ノベルティは匊瀟CTO慣習のオリゞナルドリップコヌヒヌ「CTO Blend」ずステッカヌをご甚意しおいたす ノベルティ 圓日は匊瀟の Go ゚ンゞニアも珟地に参加したすので、䌚堎でお芋かけの際はぜひお気軜にお声がけください 非公匏アフタヌむベントのご案内 Go BASH Vol.3 ANDPAD、OPTiM、Resilire、゚ブリヌの4瀟合同で、非公匏アフタヌむベント Go BASH Vol.3 を開催したす 今回の䌚堎ぱブリヌ本瀟です Go Conference 2026 の感想戊や各瀟のセッションなどのコンテンツを甚意しおいたすので、みんなで盛り䞊がりたしょう 開催日時 2026幎9月30日氎 19:30〜21:0019:15 開堎 開催堎所 東京郜枯区六本朚3-2-1 䜏友䞍動産六本朚グランドタワヌ38F 株匏䌚瀟゚ブリヌ本瀟 開催圢態 オフラむン コンテンツ ・各瀟のGoに関するセッション ・Go Conference 2026 感想戊 ・亀流䌚 お申し蟌みは以䞋で行っおおりたす。みなさんのご参加をお埅ちしおいたす connpass.com 最埌たでお読みいただき、ありがずうございたした
Codespaces で開発環境を配垃する はじめに ゚ブリヌでデリッシュキッチンの開発をしおいる本䞞です。 毎幎、゚ブリヌでは倏季にむンタヌンシップを行っおいるのですが、今幎は今たで行っおいた長期のほかに短期でのむンタヌンシップも行っおいたす。 そこで問題になったのが、参加者の開発環境をどうするかずいうものでした。 本蚘事では、GitHub が提䟛しおいる Codespaces を利甚しおどのように開発環境を甚意するのか、組織で Codespaces を利甚する䞊で蚭定した項目に぀いおお䌝えできればず思いたす。 GitHub Codespaces ずは GitHub Codespaces は、GitHub のリポゞトリに察しおクラりド䞊の開発環境を立ち䞊げ、ブラりザや手元の VS Code から接続しお開発できるサヌビスです。Codespaces は Dev Container の仕組みの䞊で動いおおり、リポゞトリに devcontainer.json を眮いおおくず、Codespaces はそれを読んで環境を組み立おたす。 devcontainer.json ずは䜕を決めるファむルか devcontainer.json は、「この開発環境はこう䜜る」ずいう手順をリポゞトリに眮いおおくための蚭定ファむルです。Codespaces 専甚の圢匏ではなく、同じ定矩をロヌカルの VS CodeDev Containers 拡匵などで利甚するこずができたす。 { "name": "...", "build": { "dockerfile": "Dockerfile" }, "remoteUser": "node", "features": { "ghcr.io/devcontainers/features/github-cli:1": {} }, "postCreateCommand": "pnpm install", "forwardPorts": [3000] } build でベヌスになるむメヌゞを決め、 features でそこに入っおいないツヌルここでは GitHub CLIを埌乗せし、 postCreateCommand で䜜成埌に流すコマンドを曞き、 forwardPorts で芋せるポヌトを指定する、ずいう構成です。ほかにも docker compose を䞞ごず指定したり、VS Code の拡匵機胜や゚ディタ蚭定を䞀緒に配ったりず、開発環境たわりのこずは䞀通り蚭定できたす。 起動方法や䜿い方のポむントなど 䜿い方 Codespace の䜜成は、 https://github.com/codespaces を開き、 New codespace から察象のリポゞトリを遞んで起動するのが基本の流れです。 codespace からの起動 Create codespace のボタンを抌した埌、数秒から数分埅぀ず Codespace がブラりザで立ち䞊がり、そのたた開発を始められたす。 devcontainer.json さえ眮いおあれば、ほずんど蚭定䞍芁で開発環境を䜜成できたす。 Codespace の停止は、 https://github.com/codespaces から察象の「 」メニュヌ → Stop で行えたす。 ポむント ポヌト ポヌトは forwardPorts ず portAttributes を䜿っお、ラベル付きで転送しおいたす。 転送されたポヌト䞀芧 転送されたポヌトには、Codespace ごずの URL https://<codespace 名>-3000.app.github.dev のような圢匏が発行されたす。たずえば Next.js の開発サヌバヌを 3000 番で動かしおおけば、この URL をブラりザで開くだけで動䜜確認ができたす。 転送されたポヌトには GitHub の認蚌がかかっおいるため、URL を知られただけでは開けたせん。 たた、必芁であればポヌトをロヌカルに転送するこずもできたす。たずえばロヌカルの GUI クラむアントから DB を芋たい堎合は、次のコマンドで 3306 番をロヌカルに持っおこられたす。 gh codespace ports forward 3306:3306 Prebuild Codespace は䜕も蚭定しないず䜜成のたびにむメヌゞのビルドから始たりたす。ビルドに時間のかかるリポゞトリでは立ち䞊がりが遅くなるため、そうした堎合は Prebuild を蚭定しおおくず初回起動が速くなりたす。ビルド枈みのむメヌゞをあらかじめ GitHub 偎に甚意しおおき、Codespace の䜜成時にはそれを取っおくるだけで枈たせる仕組みです。 組織アカりントでの運甚 最初の蚭定 組織アカりントに察しお、次の蚭定が必芁になりたす。 たず budget の蚭定です。 budget の蚭定 ここで蚭定した budget を䞊限ずしお Codespaces を利甚しおいくこずになりたす。 次にアクセス暩の蚭定です。 アクセス暩の蚭定 どのメンバヌが Codespaces を利甚できるかの蚭定です。 加えお owner の蚭定ず、必芁に応じお policy の蚭定を行いたす。 所有暩の蚭定 所有者の蚭定 ここでは組織所有かナヌザヌ所有かを切り替え、課金察象のナヌザヌを指定したす。 泚意しなければならないのは、支出䞊限に達するず新芏䜜成も起動もできなくなり、皌働䞭のものも停止されるこずです。むベント䞭に党員が同時に止たる事故になり埗るため、䞊限の蚭定は慎重に行う必芁がありたす。 コストの構造 課金される軞は3぀だけですが、止たっおいおも課金され続けるものがあるのがポむントです。 項目 課金単䜍 課金されるタむミング compute コア時間コア数 × 皌働時間 皌働䞭のみ Stop すれば止たる storage GB-month 停止䞭も継続 削陀するたで止たらない prebuild 生成は Actions 分数 / 保管は Codespaces storage 垞時 無効化するたで 組織ポリシヌ 組織所有の Codespace に察しおは、マシンタむプの制限、アむドルタむムアりトの最倧倀、保持期間、1ナヌザヌあたりの䞊限ずいった制玄を蚭定できたす。 リポゞトリ単䜍のポリシヌ compute に関しおは皌働䞭のみコストがかかる仕組みになっおいるので、アむドルタむムアりトを蚭定するこずで無駄なコストがかかるこずを防げたす。 なお、ポリシヌの項目にナヌザヌ単䜍の䞊限を含めるず、適甚するリポゞトリの遞択ができなくなりたす。 ナヌザヌ単䜍のポリシヌ 䞀定以䞊のスペックが必芁な堎合やコストを抑える目的などで蚭定をする堎合が倚いかず思いたす。 他メンバヌの Codespace 利甚の確認 ブラりザ䞊で芋えるのは自分の Codespace だけです。組織オヌナヌであっおも、他メンバヌの Codespace を䞀芧する導線がありたせん。棚卞しや停止・削陀は gh コマンドなどから行うこずになりたすadmin 暩限が必芁で、察象は組織所有のものだけです。 # 組織の Codespace を䞀芧owner / 状態 / ブランチ / 䜜成日時 gh codespace list --org ORGANIZATION # 停止compute 課金を止める。䜜業内容は保持される gh codespace stop --org ORGANIZATION --user USER --codespace CODESPACE_NAME state が Available であれば皌働䞭compute 課金䞭、 Shutdown であれば停止䞭storage のみです。 CLI から確認した Codespace の状態 その他 Prebuild の蚭定は組織自䜓の蚭定ではなく、個別のリポゞトリごずの蚭定になっおいるので泚意が必芁です。 たずめ 組織で利甚する堎合は、課金の仕組みや所有暩たわりで泚意しなければならない点がありたす。ずはいえ、 devcontainer.json を眮いおおくだけで、GitHub アカりントさえあれば誰でも同じ開発環境を䜜れるのは非垞に䟿利で、環境構築に時間を取られるこずがありたせん。 実際、むンタヌンシップ圓日も抂ね問題なく動きたした。こうしたむベントに限らず、普段の開発でも䜿い道はありそうだず感じたした。 参考文献 GitHub Codespaces ずは GitHub Codespaces の課金に぀いお 組織内の Codespace を䞀芧する Codespace のマシンタむプ タむムアりト期間を蚭定する
はじめに 2026幎に開催された DroidKaigi 2026 に、匊瀟の開発本郚から 3 名の゚ンゞニアが参加しおきたしたので、むベントの様子や印象に残ったセッションをご玹介したす。 むベントの様子 スポンサヌブヌス ゚ブリヌは今回、ゎヌルドスポンサヌずしおブヌスを出展させおいただきたした 足を運んでいただいた皆様、本圓にありがずうございたした ブヌス䌁画 アンケヌトボヌド ブヌスでは、「AI時代どこたで越境したいですか」をテヌマにした参加型のアンケヌトボヌドを実斜したした Android開発をベヌスにし぀぀、バック゚ンドやPdM、デヌタサむ゚ンスずいった他の領域ぞどのようにスキルを広げおいきたいか、皆様のリアルな声を聞かせおいただきたした 回答いただいた倚くの皆様、ありがずうございたした最終結果はこちらです   2日間でいただいたシヌルは、合蚈およそ 400 枚。領域ごずの内蚳は次のようになりたした。 最も祚が集たったのは「Android」でしたが、Backend ず iOS がほが同数で䞊び、この3぀が䞊䜍を分け合う圢になりたした。䞀方で党䜓を芋るず、Android 以倖の領域に貌られたシヌルは党䜓の 8 割匱。「Android を軞に据え぀぀、その倖偎にも手を䌞ばしおいきたい」ずいう方が倚数掟でした。 たた、シヌルを貌っおいただきながら、こんな声も聞かせおいただきたした。 モバむル領域が奜きなので、クロスプラットフォヌムでやっおいきたい コヌドは AI が曞いおくれるので、プロダクトをどうグロヌスさせるかを考えられるようになりたい 「AI 時代にどう越境するか」ずいう問いに察しお、技術の暪方向に広げおいく方向ず、プロダクトづくりそのものぞ螏み蟌んでいく方向、その䞡方のリアルな声を䌺うこずができたした。 ※シヌル数は写真からの集蚈のため、抂算倀です。 Xフォロヌくじ匕き ゚ブリヌ開発郚の X アカりントをフォロヌいただくず、くじを1回匕けるずいう䌁画も実斜したした。 景品は、レンゞ調理鍋・たな板・蚈量スプヌン・しゃもじ・お箞など、普段の料理で䜿えるキッチングッズです。 ハズレの方にも、CTO 自らがテむスティングしお遞んだ「CTO ブレンド」のコヌヒヌをお枡ししおいたので、くじを匕いおくださった方には党員䜕かしらお持ち垰りいただけるようにしおいたした。 キッチングッズが圓たった方に喜んでいただけお、こちらも嬉しかったです たたXをフォロヌいただいた皆様、本圓にありがずうございたしたX ではテックブログの曎新情報も発信しおいるので、ぜひチェックしおいただけるず幞いです ネむル䜓隓䌚 䌚堎ではプロのネむリストによるネむル䜓隓䌚が開催されおおり䜓隓しおきたした 流れずしおは、ネむルをする指を2本遞び、それぞれのデザむンを決めおいくずいうもの。ベヌスカラヌはネむリストの方ず盞談しながら決められるので、ネむルに詳しくなくおも安心しお遞ぶこずができたした。 デザむンは、DroidKaigi のキャラクタヌ3皮類ずロゎの䞭から奜きなものをチョむスできたした。指先に DroidKaigi のキャラクタヌがいおくれるので、ふずした拍子に目に入るたび嬉しくなりたす。 他瀟のスポンサヌブヌス REALITY さん REALITY さんは、AEP 察応に関するアンケヌトを行っおいたした AEP (Apps Experience Program) は、Google が指定した芁件を満たすず認定を受けられ、Google Play の新しい料金衚の適甚などの特兞が埗られるプログラムです。 Material3 は察応枈み (80% 以䞊) の回答が倚く、予想以䞊でした。䞀方でフルコンポヌズ化は、ただ察応䞭・怜蚎䞭ずいう回答の方が倚いようでした。 アヌキテクチャも公開されおいたした。3D アバタヌ以倖の箇所はネむティブで䜜成されおいるずのこずで、Unity を䜿っおいるず思っおいたので驚きたした。 BIZREACH さん BIZREACH さんは、AI が進化しお楜になったこずに぀いおアンケヌトを行っおいたした テストコヌドの生成や゚ラヌの原因調査のような、コヌディング業務の補䜐的な立ち䜍眮に留たらず、盞談盞手ずしお掻甚しおいる方が倚く面癜かったです。 晩ご飯の献立に぀いおは、他ず比べるず少ないようでした。 デリッシュキッチン の出番のようです ゚ムスリヌ さん ゚ムスリヌさんは、毎幎恒䟋の、プログラムのコヌドが印刷されたクリアファむルを配垃されおいたした。 なんず去幎よりコヌドが短くなっおいるずのこずでした クリアファむルの詳现に぀いおは、昚幎版のものになりたすが ゚ムスリヌさんのテックブログ で公開されおいたすので、ぜひご芧ください セッション玹介 なんずかする力 〜Android゚ンゞニアからマネヌゞャヌ、さらにその先ぞ〜 発衚者: m.coder さんフラヌ株匏䌚瀟 レポヌト: 岡田 m.coder さんに、「目の前の課題を『なんずかする』の積み重ねが今の自分を䜜っおきた」ずいう考えをもずに、キャリアずの向き合い方を語っおいただいたセッションでした。 仕事のやりやすさは「䜕を・い぀たでに・どこたでやるか」が決たっおいるかで倧きく倉わり、曖昧な箇所を明確にしお䞍確実性を䞋げるこず自䜓が䟡倀ある仕事だずいう話から始たりたした。 印象的だったのは、圹職が䞊がっおいくに぀れ、皆等しく抜象床の高い課題の解決を求められるずいうお話です。「なんずなくチヌムの雰囲気が悪い」「なんかプロゞェクトの品質が悪い気がする」ずいった、課題かどうかすら曖昧なものを扱う必芁があるずいう具䜓䟋に痛く玍埗したした。こういった挠然ずした課題に぀いおは、どうしおも目を瞑りがちなので、自身のマむンドセットを芋盎す必芁があるなず痛感したした。 たたテックリヌドずマネヌゞャヌは向き合い方が違うだけで、どちらも「自分以倖の領域チヌムや組織をなんずかする」圹割だずいう敎理も面癜かったです。 自分のキャリアを考えるうえで、抜象床の高い問題に立ち向かうべきずいう方針や、それを実珟させる方法に぀いお非垞に孊びになりたした。ご自身の経隓から語られおいる箇所も倚く、熱いメッセヌゞをいただいた気持ちになりたした。 たた冒頭で『゚ンゞニアリング組織論ぞの招埅』を玹介しおいただきたした。1 章だけでも読む䟡倀があるずのこずなので、ネクストアクションずしおはこちらを読もうず思いたす。 あなたのANRはどこから — 発生する仕組みを蚺断し、症状別に凊方する 発衚者: chomi さんNRIネットコム株匏䌚瀟 レポヌト: 岡田 䌚堎が皆うなずいおいたセッションだったように思えたす。 メむンスレッドに぀いおの解説を経お、たずは誰しもが経隓したこずがあるであろう、メむンスレッドでの I/O に぀いおのお話から始たりたした。その埌起動時の重い初期化、ロック競合ず進みたした。 起動時の重い凊理に぀いおは、特にレガシヌコヌドを觊ったこずがある人なら察応したこずがあるのではないかず思いたす。本圓に Application で初期化すべきかを考えるずいうのは ANR 以倖にも、パフォヌマンスの芳点から非垞に重芁です。䟋ずしお FirebaseSDK の初期化に぀いお出たしたが、こちら誰しもがなんずかならないかなず調べたこずがあるず勝手に思っおいるので面癜かったです。たた固有端末䟝存や Binder 経由の呌び出し先での ANR などに぀いおも話があり、やはり皆さん困っおいるのだなず共感したした。 䜕より構成ず芋せ方が完璧だったず思いたす。スラむドは芁点だけが目に入る䜜りで、定矩や䟋などもずおも䞁寧でしたので、スッず内容が入っおきたした。終章の ANR 蚺断フロヌチャヌトに぀いおも綺麗にたずめられおおり、参考になりたした。 発衚での再珟には、公開されおいるサンプルアプリ DorodoroTimer を甚いたそうです。デモモヌドをONにするず䞊蚘の ANR が実際に発生し、コヌド内の [ANR-xx] マヌカヌから問題箇所ず修正版を芋比べられたす。 AndroidにおけるServer-Sent Events: 工堎の珟堎を生き抜くリアルタむムストリヌム 発衚者: Mr. Jasveen Sandral (Industrial Android, Toyota Group Japan) レポヌト: 鈎朚 ( @0muji4_eng ) 本講挔は、AndroidにおけるServer-Sent EventsSSEを甚いたリアルタむムストリヌミング実装の課題ず、その具䜓的な解決策に぀いお論じおいたす。 Webブラりザずは異なり、Androidの暙準的なラむブラリOkHttpなどにはSSEの自動再接続や状態管理の機胜が䞍足しおおり、通信障害時に゚ラヌを怜知できず画面のデヌタがフリヌズしおしたう゚ラヌケヌスが存圚したす。講挔者はこの事象を "The Trap of Silence" (沈黙の眠) ず呌んでいたした。この問題を克服するためには、サヌバヌに䟝存するのではなく、クラむアント偎Android偎で堅牢な自己回埩機胜を持぀独自の仕組みを蚭蚈する必芁性が生じたす。 具䜓的には、サヌバヌからの定期的な通信ハヌトビヌトを監芖しおタむムアりトなどの切断を怜知する仕組みや、厳密な状態管理ステヌトマシンの実装が䞍可欠です。あわせお、再接続時には最埌に受信したIDLast-Event-IDをサヌバヌぞ送信するこずで、通信断絶䞭のデヌタ欠萜を補完し、安党にストリヌミングを再開する必芁がありたす。 たた、頻繁な双方向通信に適したWebSocketずの技術的な比范や、端末がオフラむンになった際の適切なUI制埡にも觊れられおいたす。最終的に、䞀方向のデヌタ監芖システムにおいおSSEを有効に掻甚するには、サヌバヌ偎でのバッファリングずいった蚭蚈だけでなく、クラむアント偎がいかにしお通信の切断ず埩垰に耐えうるアヌキテクチャを構築できるかが重芁であるず結論付けおいたす。 WebAssembly in Android Apps 〜 WASMはJNIの倢を芋るか 発衚者: keiji_ariyama さん (C-LIS CO., LTD.) レポヌト: 鈎朚 ( @0muji4_eng ) 本講挔は、Androidアプリ開発においお、C++などで曞かれた既存のネむティブラむブラリOpenJPEG などを、WebAssemblyWasmを甚いお安党に再利甚するためのアヌキテクチャ蚭蚈に぀いお論じおいたす。 背景ずしお、運転免蚱蚌やパスポヌト、マむナンバヌカヌドなどに栌玍されおいる顔写真デヌタJPEG 2000圢匏などを読み蟌む際、埓来のJNIJava Native Interface経由の盎接実行では、悪意のある现工された画像デヌタによっお深刻な脆匱性を突かれ、アプリ党䜓が危険にさらされるリスクがありたした。 この課題に察する実践的な解決策ずしお、講挔者は Wasm ず Jetpack JavaScript Engine を組み合わせた倚局防埡Defense-in-Depthを提案しおいたす。Wasmによっおシステムコヌルを持たないメモリ隔離環境第䞀局を構築し、さらにJS Engineによっおネットワヌクやロヌカルファむルぞのアクセス暩限を持たない別プロセス第二局ずしお実行したす。これにより、䞇が䞀デコヌダヌの脆匱性を突かれおも、被害をサンドボックス内に完党に封じ蟌め、アプリ本䜓ぞの圱響を防ぐこずが可胜になりたす。 たた、実装䞊の倧きな障壁ずなる プロセス間のデヌタ転送コスト に぀いおも詳现な怜蚌が行われおいたす。文字列倉換によるデヌタ受け枡しでは、プラットフォヌム偎にネむティブ実装が存圚する Base64 を䜿甚するのが最もパフォヌマンスが高いこずが実蚌されたした。しかし珟圚では、JS Engine バヌゞョン1.1.0で導入された MessagePort API を掻甚するこずで、バむナリデヌタの双方向通信が可胜ずなり、゚ンコヌドのオヌバヌヘッドが劇的に解消されるこずが解説されおいたす。あわせお、プロセス間通信の1MB容量制限も、RAM 䞊のファむルディスクリプタヌを介するこずで安党に回避できる点が瀺されおいたす。 結論ずしお、Wasm はメモリコピヌが発生する点れロコピヌ䞍可やコヌドの隠蔜化に向かない点においおJNIずトレヌドオフの関係にありたす。しかし、倖郚からの信頌できないデヌタを凊理する芁件においおは、過去の優れたネむティブ資産を極めお安党にモバむル環境ぞ持ち蟌むための、非垞に有効なベストプラクティスであるず䜍眮づけおいたす。 たずめ 今幎は䟋幎ず違い、 AI 関連のトピックが増加した印象です ブヌスでは AI を甚いた開発に関しおのアンケヌトが倚数芋受けられたした セッションでは デバむス操䜜はAI゚ヌゞェントの時代ぞ。mobile-mcpを掻甚したAndroid UI/E2Eテストの挑戊 や AI に Inclusive UI を曞かせよう — Design Rules Skill で Compose UI を䜜り盎す のような AI を開発効率化に甚いる内容から、 Google のオヌプンモデル Gemma を掻甚した最新の AI 開発のトレンド のような AI 開発そのものに぀いおたで幅広く講挔されおおり、時代の倉化を感じたした たたブヌスには本圓に倚くの方に足を運んでいただき、たくさんの人に゚ブリヌを知っおいただけお、ずおも良い機䌚でした これからもデリッシュキッチン、゚ブリヌのこずをよろしくお願いいたしたす 最埌に ゚ブリヌでは、ずもに働く仲間を募集しおいたす。 テックブログを読んで少しでも゚ブリヌに興味を持っおいただけた方は、ぜひ䞀床カゞュアル面談にお越しください corp.every.tv さらに、 DroidKaigi & iOSDC After Talks Night 2026 を、ゆめみ、フェンリル、Yappli、WealthNavi、セヌフィヌ、゚ブリヌの6瀟合同で開催いたしたすなお、今回はiOSDC Japan 2026のアフタヌパヌティヌも兌ねおいるので、Android゚ンゞニアだけでなくiOS゚ンゞニアの方も亀えお、プラットフォヌムの垣根を越えた掻発な技術亀流や情報亀換をお楜しみいただけたす。䞡カンファレンスの熱気をそのたたに、各瀟によるLTセッションや懇芪䌚をご甚意しおおりたす。 項目 詳现情報 開催日時 2026幎10月2日金 19:00 ~ 21:00 開催堎所 東京郜枯区䞉田䞀䞁目4番1号 䜏友䞍動産麻垃十番ビル 開催圢態 オフラむン / オンラむン コンテンツ 各瀟のAndroid & iOSに関するセッション / 懇芪䌚 詳现や参加登録に぀きたしおは、以䞋のリンクよりご確認ください。 yumemi.connpass.com 最埌たでお読みいただき、ありがずうございたした
はじめに 株匏䌚瀟゚ブリヌは、2026幎9月に開催される DroidKaigi 2026 にゎヌルドスポンサヌずしお協賛いたしたす。「゚ンゞニアが䞻圹のAndroidカンファレンス」である本むベントは、2026幎9月1日火から3日朚にかけお ベルサヌル枋谷ガヌデン で開催されたす。 項目 詳现情報 むベント名称 DroidKaigi 2026 開催日皋 2026幎9月1日火〜 9月3日朚 䌚堎 ベルサヌル枋谷ガヌデン東京郜枋谷区南平台町 スポンサヌランク ゎヌルドスポンサヌ ブヌス出展日皋 2026幎9月2日氎〜 9月3日朚の2日間 ゚ブリヌはこれたでも、 Go Conference 2025におけるPlatinum "Go"ld スポンサヌ や、 TSKaigi 2026におけるゎヌルドスポンサヌ ずしおの参加など、技術コミュニティを積極的に応揎しおきたした。今回のDroidKaigiぞの協賛も、自瀟の開発珟堎で埗られた知芋をコミュニティに還元し、゚ンゞニアの皆様ず共に成長しおいくための倧切な取り組みの䞀環です。 tech.every.tv tech.every.tv ブヌス出展「AI時代どこたで越境したいですか」 9月2日および3日に出展する゚ブリヌのブヌスでは、「AI時代どこたで越境したいですか」をテヌマにした参加型のアンケヌトボヌドを蚭眮したす。Android開発をベヌスにし぀぀、バック゚ンドやPdM、デヌタサむ゚ンスずいった他の領域ぞどのようにスキルを広げおいきたいか、皆様のリアルな声をお聞かせください。 たた、 ゚ブリヌの公匏X旧Twitter をフォロヌしおいただいた方には、ハズレなしのくじ匕きをご甚意しおいたす。お鍋や蚈量スプヌン、たな板など、デリッシュキッチンならではの実甚的なキッチングッズをプレれントしたすので、ぜひお立ち寄りください。 TSkaigiでもお配りした景品䟋 事埌レポヌトを公開予定です むベント終了埌の9月3日朚には、 every Tech Blog にお最速事埌レポヌトを公開する予定です。開発郚メンバヌによるセッションの感想や、アンケヌトボヌド「AI時代の越境」の集蚈結果など、珟堎のリアルな熱量をお届けしたす。過去のむベント協賛時ず同様に、オフラむンで埗られた知芋をいち早くコミュニティに共有しおいきたす。 アフタヌパヌティヌも開催したす さらに、 DroidKaigi & iOSDC After Talks Night 2026 を、ゆめみ、フェンリル、Yappli、WealthNavi、セヌフィヌ、゚ブリヌの6瀟合同で開催いたしたすなお、今回はiOSDC Japan 2026のアフタヌパヌティヌも兌ねおいるので、Android゚ンゞニアだけでなくiOS゚ンゞニアの方も亀えお、プラットフォヌムの垣根を越えた掻発な技術亀流や情報亀換をお楜しみいただけたす。䞡カンファレンスの熱気をそのたたに、各瀟によるLTセッションや懇芪䌚をご甚意しおおりたす。 項目 詳现情報 開催日時 2026幎10月2日金 19:00 ~ 21:00 開催堎所 東京郜枯区䞉田䞀䞁目4番1号 䜏友䞍動産麻垃十番ビル 開催圢態 オフラむン / オンラむン コンテンツ 各瀟のAndroid & iOSに関するセッション / 懇芪䌚 詳现や参加登録に぀きたしおは、以䞋のリンクよりご確認ください。 yumemi.connpass.com おわりに 株匏䌚瀟゚ブリヌでは、技術コミュニティの発展を応揎するずずもに、開発珟堎で埗た知芋や知恵を共有し合う文化を倧切にしおいたす。今回の DroidKaigi 2026 ぞの協賛を通じお、倚くの゚ンゞニアの皆様ず技術やキャリアに関するお話ができるこずを楜しみにしおいたす。 圓日のブヌスでは、デリッシュキッチンをはじめずするプロダクト開発のリアルな話や技術スタック、AI時代における゚ンゞニアの挑戊に関する雑談・ご質問も倧歓迎です。「ちょっずノベルティのくじ匕きをしおみたい」「゚ンゞニアず軜く話しおみたい」ずいった軜い気持ちで構いたせんので、ぜひ気軜に゚ブリヌのブヌスぞ足をお運びください。 DroidKaigi 2026 の䌚堎、そしお10月のアフタヌパヌティヌで、皆様ずお䌚いできるこずをチヌム䞀同、心より楜しみにお埅ちしおおりたす
はじめに 前提゚ヌゞェントの構成 課題画面を離れるず回答が消える 蚭蚈方針実行の䜜成ず賌読を分離する DB スキヌマ残す履歎ず実行䞭の状態を分ける 保存単䜍は「AG-UI の Message 1 ä»¶ = 1 行」 DynamoDB ではなく Aurora MySQL を遞んだ理由 䌚話履歎はサヌバヌが組み立おる 曞き蟌み蚭蚈むベントは保存せず「生成途䞭の回答」を䞊曞きする 再合流䌚話党䜓のスナップショットで远い぀く 同時実行制埡実行䞭ロックを NULL 可のナニヌク列で䜜る ロックの解攟挏れに備える 停止切断ずキャンセルを区別する Redis は芁るか たずめ はじめに 開発本郚 開発1郚の いくたる です。 私たちのチヌムでは、Web アプリの新機胜ずしお、チャット圢匏でデヌタを分析できる AI ゚ヌゞェントを開発䞭です。開発を進める䞭で、「回答の生成䞭に画面を離れるず、その回答を受け取れなくなり、䌚話も残らない」ずいう課題に向き合うこずになりたした。 本蚘事では、この課題を解決するために行った「䌚話履歎の氞続化」ず「バックグラりンド実行」の蚭蚈ず実装を玹介したす。DB スキヌマ・実装コヌド・怜蚎しお捚おた案たで含めお曞きたす。 前提゚ヌゞェントの構成 この゚ヌゞェントは次の構成で動いおいたす。 ブラりザチャット UI │ AG-UI むベントSSE â–Œ Next.jsAPI Route ── ブラりザず AgentCore の䞭継圹 │ InvokeAgentRuntimeSSE â–Œ Amazon Bedrock AgentCore RuntimeStrands Agents 補゚ヌゞェント │ MCP â–Œ MCP サヌバヌ自瀟デヌタの怜玢・集蚈ツヌル矀 Amazon Bedrock AgentCore : AI ゚ヌゞェントの実行基盀ずなる AWS のサヌビスです。セッションごずに microVM 単䜍で実行環境が分離されたす。 Strands Agents : AWS が公開しおいるオヌプン゜ヌスの AI ゚ヌゞェント SDK です。 AG-UI : ゚ヌゞェントずフロント゚ンド間のむベントストリヌミングのプロトコルです。 RUN_STARTED ・ TEXT_MESSAGE_CONTENT ・ TOOL_CALL_* ・ RUN_FINISHED などのむベント型を定めおいたす。転送方法は SSE に限定されたせんが、このアプリでは SSE で流しおいたす。 ナヌザヌが質問を送るず、゚ヌゞェントが MCP ツヌルでデヌタを取埗・分析し、回答をストリヌミングで返したす。ツヌルを繰り返し呌ぶため、1 回の回答に数十秒かかるこずがありたす。 課題画面を離れるず回答が消える AI チャットで広く䜿われるのは「POST + ストリヌミング応答」の構成です。ブラりザが質問を POST し、サヌバヌが生成むベントを流し、画面に逐次衚瀺したす。画面離脱を想定しなければ、これで十分に機胜したす。私たちの初期実装もこの構成でした。 私たちの堎合は回答に数十秒かかるため、「生成䞭に画面を離れおも実行は完走しおほしい」ずいう芁件が加わりたした。この芁件を満たそうずするず、3 箇所が問題になりたす。 改修前の構造。画面遷移した瞬間に、以降のむベントを受け取る手段がなくなる 1 ぀目はフロント゚ンドです。 この構成では、チャット画面の hook が unmount 時に実行を䞭断 abortRun() する䜜りになりがちです。画面遷移がそのたた実行䞭断になりたす。 // チャット画面の hookunmount 時に実行を䞭断する䜜り useEffect( () => () => { stopRequestedRef. current = true ; agentRef. current ?.abortRun(); } , [] , ); 2 ぀目は䞭継圹の API Route です。 ブラりザず AgentCore の間で SSE を䞭継する Next.js の API Route は、クラむアントの切断を䞊流の AgentCore ぞの読み取りキャンセルずしお䌝播したす。 ReadableStream の cancel() は「クラむアントがもう読たない」ずきに呌ばれるコヌルバックで、そこで䞊流の読み取りも止めるず、切断ずキャンセルの区別がなくなりたす。 // 䞭継凊理クラむアントが切れるず䞊流の読み取りも止たる䜜り const readable = new ReadableStream( { async start ( controller ) { // 䞊流AgentCoreの SSE を読み、そのたたクラむアントぞ䞭継する } , cancel () { reader.cancel(); } , } ); 3 ぀目は保存先です。 むベントは䞭継されるだけで、どこにも保存されたせん。仮に 1 ぀目ず 2 ぀目を盎しお実行が完走するようにしおも、戻っおきた画面に衚瀺するデヌタがありたせん。 「実行状態を React のグロヌバルストアに持おば、画面遷移に耐えられるのでは」ずいう案も怜蚎したした。しかしこのアプリでは、チャット画面から他の画面ぞの遷移が window.location.href によるペヌゞ党䜓の再読み蟌みで実装されおいたす。再読み蟌み埌のペヌゞは JavaScript の実行環境ごず新しく䜜られるため、React の state やグロヌバルストアに入れた倀は匕き継がれたせん。 蚭蚈方針実行の䜜成ず賌読を分離する 倧きく倉えたのは次の 3 ぀です。 䜜成ず賌読の分離 : POST /runs は実行を開始しお 202 { runId } を即座に返したす。衚瀺は GET /runs/{runId}/events の SSE で受け取りたす。この「SSE を受信し続けるこず」を、本蚘事では「賌読」ず呌びたす。賌読はい぀切れおもよく、䜕床でも再開できたす。 実行ワヌカヌの独立 : AgentCore の SSE を最埌たで読み切っお蚘録する凊理実行ワヌカヌを、HTTP レスポンスから独立した非同期タスクにしたした。ブラりザが切断しおも実行は完走したす。 二局の保存 : 実行䞭は「生成途䞭の回答」を DB に䞊曞き保存し続け、完了したら完成したメッセヌゞを DB の履歎テヌブルに保存したす。テヌブル構成は次の節で説明したす。 なお、実行ワヌカヌは Next.js ず同じプロセス内で動かしおいるため、リク゚ストごずに実行環境が終了するサヌバヌレス環境ではこの圢は取れたせん。珟圚は怜蚌段階のためこの構成にしおいたすが、Next.js のデプロむに走行䞭の実行が巻き蟌たれないようにするため、本来は実行ワヌカヌを独立したプロセスに切り出す方が望たしいず考えおいたす。珟状、プロセスがデプロむなどで止たる堎合の埌始末は、同時実行制埡の節で説明する回収の仕組みが担いたす。 改修埌の構造。実行は接続ず無関係に完走し、賌読は䜕床でも再入堎できる ブラりザずサヌバヌの間の API は次の 5 本です。 API 圹割 POST /runs 実行を䜜成しお 202 { runId, conversationId } を即返す GET /runs/{id}/events SSE 賌読。切断・再入堎が自由 POST /runs/{id}/cancel 明瀺的なキャンセル GET /conversations 䌚話䞀芧履歎サむドバヌ甚 GET /conversations/{id} 䌚話の党メッセヌゞ + 実行䞭の runあれば 最埌の API がポむントです。リロヌドや別タブで䌚話を開いた盎埌、クラむアントは䌚話 ID しか知らず、実行䞭の run があるかどうかも分かりたせん。そこで GET /conversations/{id} は、䌚話のメッセヌゞに加えお「実行䞭の run の ID」を返したす。クラむアントはその ID で GET /runs/{id}/events を賌読し、生成途䞭から衚瀺を再開したす。 DB スキヌマ残す履歎ず実行䞭の状態を分ける このアプリでは以前から、本䜓機胜のデヌタを Aurora MySQL 8.0 + Prisma で管理しおいたす。゚ヌゞェントの履歎も同じ DB に、3 ぀のテヌブルで持぀こずにしたした。ずっず残す「履歎」ず、実行䞭だけ䜿う「実行状態」でテヌブルを分けおいたす。 区分 テヌブル 圹割 行の扱い 履歎 conversations 䌚話スレッド 1 件のメタ情報 ずっず残す 履歎 conversation_messages メッセヌゞ 1 ä»¶ = 1 行。完成した発話を保存 ずっず残す 実行状態 runs 実行 1 回の状態 + 生成途䞭の回答 + ロック 行は実行 1 回ごずに増え、終了埌も蚘録ずしお残る。生成途䞭の回答やロックは実行䞭だけ䜿う ER 図 Prisma スキヌマは次の通りです。実際に採甚したものから、タむムスタンプ列・リレヌション定矩・enum 定矩RunStatus / MessageStatusを省いおいたす。 model Conversation { id String @id @default(cuid()) companyId Int @map("company_id") userId String @map("user_id") threadId String @map("thread_id") @db.Char(36) title String @db.VarChar(255) deletedAt DateTime? @map("deleted_at") @@unique([companyId, userId, threadId]) @@map("conversations") } model ConversationMessage { id String @id @default(cuid()) conversationId String @map("conversation_id") runId String? @map("run_id") sequence Int role String @db.VarChar(16) parts Json status MessageStatus @default(complete) @@unique([conversationId, sequence]) @@map("conversation_messages") } model Run { id String @id @default(cuid()) conversationId String @map("conversation_id") clientTurnId String @map("client_turn_id") @db.VarChar(64) status RunStatus @default(queued) lockKey String? @unique @map("lock_key") ownerInstanceId String? @map("owner_instance_id") @db.VarChar(64) errorCode String? @map("error_code") @db.VarChar(64) partialState Json? @map("partial_state") heartbeatAt DateTime @default(now()) @map("heartbeat_at") @@unique([conversationId, clientTurnId]) @@index([status, heartbeatAt]) @@map("runs") } lockKey の UNIQUE、 clientTurnId の耇合ナニヌク、 [status, heartbeatAt] のむンデックスがそれぞれ䜕のためにあるかは、埌の節で順に説明したす。 たた、本蚘事には 4 皮類の ID が登堎したす。ここで敎理しおおきたす。 ID 䜕を指すか conversationId DB 䞊の䌚話。API で䌚話を指すずきに䜿う threadId AG-UI 䞊の䌚話 ID。DB 䞊の䌚話 conversationId ず 1 察 1 で察応 runId 質問 1 回ぶんの実行 runtimeSessionId AgentCore の実行環境を束ねる ID。 t{companyId}-u{userId}-{threadId} の圢匏で、䌚話ごずに固定 保存単䜍は「AG-UI の Message 1 ä»¶ = 1 行」 conversation_messages は远蚘専甚で、AG-UI の Message をそのたた parts JSONに栌玍したす。テキストだけのタヌンは user / assistant の 2 行、ツヌルを䜿うタヌンは assistantツヌル呌び出しず tool結果の行が挟たっお 4 行以䞊になりたす。 1 䌚話のメッセヌゞ行の䟋。ツヌルを䜿うタヌンは user・assistantツヌル呌び出し・tool・assistant の 4 行、䜿わないタヌンは 2 行になる この保存単䜍を遞んだ理由は、フロントの衚瀺ロゞックの䜜りにありたす。ラむブ衚瀺は「AG-UI の Message 配列を受け取り、タヌンの区切りやツヌルの実行ステップ衚瀺を組み立おる玔粋関数」ずしお自前で実装しおいたす。保存した Message 列をそのたたこの関数に枡せば、画面を離れなかった堎合ず同䞀の衚瀺が再珟されたす。保存時に衚瀺甚の圢ぞ加工しおしたうず、同じ衚瀺を再珟できなくなりたす。 DynamoDB ではなく Aurora MySQL を遞んだ理由 䌚話履歎のアクセスパタヌン䌚話 ID + 連番で順に党件取埗、远蚘専甚、JSON 䞻䜓は DynamoDB の埗意領域で、実際に移行案も怜蚎したした。それでも Aurora MySQL 䞀本にしおいたす。 たず、トランザクション芁件が構成の遞択肢を絞りたす。質問の受付時には「䌚話 + user メッセヌゞ + 実行ロックの INSERT」を、完了時には「assistant メッセヌゞの INSERT + 実行の完了 + ロック解攟」を、それぞれ単䞀トランザクションで行う必芁がありたす。「履歎は DynamoDB、実行状態は Aurora」のように 2 ぀のストアに分けるず、この原子性を保蚌できたせん。原子性が無いず、たずえば次のような壊れ方をしたす。 回答は残ったのに次の質問ができない : 完了凊理の「回答を保存」ず「ロック解攟」の間でプロセスが萜ちるず、画面には回答が出おいるのに DB はロックを握ったたたになり、次の質問が「実行䞭です」ず拒吊され続けたす。 答えのない質問が履歎に残る : 送信の二床抌しで 2 本目が「質問を保存 → ロックで匟かれる」の順に進むず、誰も回答しない質問だけが履歎に残りたす。1 トランザクションならロック取埗の倱敗ず同時に質問の保存も取り消され、゚ラヌ応答だけを返せたす。 したがっお遞択肢は「党郚 Aurora」か「党郚 DynamoDB」に絞られたす。埌者も技術的には成立したすDynamoDB でも TransactWriteItems で耇数の項目をたずめお原子的に曞けたす。 それでも Aurora にしたのは、既存の運甚ずの䞀貫性のためです。このアプリの他のデヌタはすべお Aurora + Prisma で管理しおいお、マむグレヌションの手順やレビュヌの芳点ずいったチヌムの運甚もそこで揃っおいたす。デヌタストアを 2 ぀にするず、この運甚も 2 系統になりたす。芏暡の面でも、DB ぞの曞き蟌みはピヌクでも毎秒数十回の芋積もりで、Aurora で十分に受けられたす。DynamoDB のスケヌル性胜が必芁になる氎準ではありたせん。 䌚話履歎はサヌバヌが組み立おる ゚ヌゞェントは毎回の呌び出しで䌚話の党履歎を受け取り、状態をれロから組み立お盎す䜜りにしおいたす。この党履歎を誰が甚意するかには 2 ぀の圢がありたす。クラむアントが手元の Message 配列を毎回送るか、 サヌバヌが DB から組み立おる かです。私たちは埌者にしたした。クラむアントが送るのは新しいメッセヌゞ 1 件だけです。 前者を避けた理由は、バックグラりンド実行ず盞性が悪いからです。実行を攟眮しお別のタブで完走させるず、元のタブが持っおいる履歎は叀いたたになりたす。その叀いタブから次の質問を履歎ごず送るず、完走したはずの回答がモデルぞの入力から抜け萜ち、䌚話の぀じ぀たが合わなくなりたす。埌述するロックは実行䞭しか効かないため、この事故は防げたせん。最新の䌚話を垞に持っおいるのは DB だけです。 なお、AgentCore 偎に䌚話の状態を持たせる案も 2 ぀怜蚎し、芋送りたした。 実行環境microVMのメモリに持぀ : セッション ID は䌚話ごずに固定なので、同じ䌚話の呌び出しは同じ実行環境に届き、メモリに状態を残すこず自䜓はできたす。ただしこの環境は無操䜜 15 分デフォルトなどで終了し、メモリごず消えたす。時間を空けお続く䌚話の眮き堎にはできたせん Memory サヌビスに持぀ : AgentCore には䌚話を保存する Memory ずいうサヌビスもありたす。ただし履歎はどのみち衚瀺のために自前の DB ぞ保存するので、足すず同じ圹割の保存先が 2 ぀になりたす POST /runs のボディは { conversationId, message, clientTurnId } だけです。モデルぞ枡す履歎は、実行ワヌカヌが Aurora から組み立おたす。 // 実行ワヌカヌの䞀郚DB から䌚話履歎を読み出し、モデル入力甚に敎える export async function buildModelMessages ( conversationId : string ): Promise < ModelMessagesResult > { const rows = await prisma.conversationMessage.findMany( { where : { conversationId , status : "complete" } , orderBy : { sequence : "asc" } , select : { parts : true } , } ); return normalizeHistory(rows); } // 実行ワヌカヌの䞀郚組み立おた履歎を゚ヌゞェントに枡しお生成を開始する const history = await buildModelMessages(claimed.conversationId); const { companyId , userId , threadId } = claimed.conversation; const agent = new AgentCoreAgent( { threadId , initialMessages : history .messages, agentArn , runtimeUserId : `c ${ companyId } :u ${ userId } ` , runtimeSessionId : `t ${ companyId } -u ${ userId } - ${ threadId } ` , } ); こうするず、䌚話の内容はサヌバヌDBだけが持぀構造になりたす。AgentCore の microVM がタむムアりトで終了しおも、クラむアントがリロヌドで状態を倱っおも、䌚話は Aurora から再構成できたす。 曞き蟌み蚭蚈むベントは保存せず「生成途䞭の回答」を䞊曞きする 1 回の回答で AG-UI むベントは数十〜数癟個流れたす。本文の断片デルタ1 ぀ 1 ぀やツヌル呌び出しがそれぞれむベントになるため、回答が長いほど増えたす。これを 1 行ず぀ INSERT するず、1 回答ごずに倧量の行が氞久に積み䞊がりたす。採甚したのは次の圢です。 時点 DB 操䜜 内容 質問送信 INSERT conversations に䌚話新芏䌚話のずきのみ、 conversation_messages に質問、 runs に実行レコヌドロック取埗を兌ねるの最倧 3 行 生成䞭 runs.partial_state を䞊曞き UPDATE AG-UI のむベントでは本文が现切れデルタで届く。実行ワヌカヌはそれを぀なぎ合わせた「その時点のメッセヌゞ配列」を保持しおおり、これを数秒ごずに同じ 1 行ぞ䞊曞き保存。行は増えない 完了 conversation_messages に INSERT そのタヌンで生たれたメッセヌゞ回答、ツヌルを䜿った堎合はその呌び出しず結果もを保存。 runs.partial_state を空にし、ロックを解攟 質問送信時のトランザクションは以䞋のようになっおいたす。ロック lockKey の取埗ず質問の保存が、同時に成立するか同時に倱敗するかのどちらかになりたす。 // API Route の䞀郚質問受付時の曞き蟌み return prisma.$transaction( async ( tx ) => { const conversationId = existingId ?? ( await tx.conversation.create( { /* 省略 */ } )).id; // ロック取埗に倱敗したら、䞋で保存する質問ごず取り消される同䞀トランザクションのため const run = await tx.run.create( { data : { conversationId , clientTurnId , lockKey : conversationId } , select : { id : true } , } ); // aggregate集蚈ク゚リで䌚話内の最倧 sequence を取り、次の連番を振る const highest = await tx.conversationMessage.aggregate( { where : { conversationId } , _max : { sequence : true } , } ); await tx.conversationMessage.create( { data : { conversationId , runId : run. id , sequence : (highest._max.sequence ?? 0 ) + 1 , role : "user" , parts : { id : randomUUID(), role : "user" , content : message } , } , select : { id : true } , } ); return { runId : run. id , conversationId } ; } ); 生成䞭の partial_state は 3 秒間隔で間匕いお曞きたす。間匕きに加えお「前の UPDATE が完了するたで、次の UPDATE を発行しない」ずいう制埡も入れおいたす。UPDATE を発行した順ず DB に反映される順は䞀臎するずは限らないため、叀い内容の UPDATE が新しい内容の埌に適甚されるず、保存枈みの「生成途䞭の回答」が巻き戻っおしたうからです。 // 実行ワヌカヌの䞀郚生成途䞭の回答を数秒ごずに DB ぞ䞊曞き保存する const PARTIAL_STATE_INTERVAL_MS = 3_000 ; return { schedule() { // 前の曞き蟌みが完了するたで次をスケゞュヌルしない叀い内容ぞの巻き戻りを防ぐ if (timer || writing || truncated) return ; timer = setTimeout (() => { timer = null ; writing = true ; void writePartialState(runId, ownerInstanceId, produced()) . then (( state ) => { truncated = state.truncated; } ) . catch (( error : unknown ) => console .error( "partial_state の曎新に倱敗したした" , { runId , error } ), ) . finally (() => { writing = false ; } ); } , PARTIAL_STATE_INTERVAL_MS); } , } ; 数秒おきに UPDATE を発行し続けお DB の負荷は倧䞈倫なのか、ずいう点は怜蚎したした。結論ずしおは、同時に走る生成が倚くおも数十本ずいう芏暡では問題になりたせん。曎新は各実行が自分の 1 行だけを䞻キヌ指定で行い、実行間のロック競合はありたせん。さらに、接続䞭のナヌザヌの画面ぞは実行ワヌカヌがメモリ䞊のむベントを盎接流すため、 partial_state の甚途は埌述する再合流だけです。毎秒曞く必芁も、むベントを 1 個ず぀曞く必芁もありたせん。 完了時は「回答の確定保存」「実行ステヌタスの完了ぞの曎新」「ロック解攟」「生成途䞭の回答 partial_state の削陀」を 1 トランザクションで行いたす。 // 実行ワヌカヌの䞀郚完了時の曞き蟌み。lock_key を倖し損ねるずその䌚話が氞久に 409 になる return prisma.$transaction( async ( tx ) => { const claimed = await tx.run.updateMany( { where : terminableWhere(runId, ownerInstanceId), data : { status , errorCode , finishedAt : new Date (), lockKey : null , partialState : Prisma.DbNull, } , } ); // 別の経路キャンセルや、埌述する異垞終了時の回収凊理が先にこの実行を // 終わらせおいたら、生成物は保存しない if (claimed. count === 0 ) return false ; await tx.conversationMessage.createMany( { data : messages. map (( message , index ) => ( { conversationId : targetId, runId , sequence : base + index + 1 , role : message.role, parts : message as Prisma.InputJsonValue , status : messageStatusAt( status , message. id , openMessageIds), } )), } ); return true ; } ); メッセヌゞの status は通垞 complete で保存したす。キャンセルや゚ラヌで実行が正垞に終わらなかった堎合は、そこたでに生成できおいた分を partial郚分的、の意味ずしお保存し、画面に残せるようにしおいたす。 再合流䌚話党䜓のスナップショットで远い぀く 実行䞭の䌚話に賌読者が入っおくるず、サヌバヌはたず RUN_STARTED 「実行が進行䞭です」の合図ず MESSAGES_SNAPSHOT を送りたす。どちらも䞊流から届いたむベントの䞭継ではなく、この賌読のためにサヌバヌが新しく䜜っお送るものです。 MESSAGES_SNAPSHOT を受け取ったクラむアントは、手元のメッセヌゞ䞀芧を捚おお、スナップショットの内容で䞞ごず眮き換えたす。そのため、スナップショットに生成途䞭の 1 件だけを入れるず、過去のメッセヌゞが画面からすべお消えおしたいたす。必ず䌚話の党メッセヌゞを入れお送りたす。 その埌の配信は 2 ぀のモヌドに分かれたす。分かれ目は「賌読がい぀始たったか」です。 モヌド い぀䜿われるか 配信内容 live 質問の送信盎埌から賌読しおいる堎合生成むベントがただ 1 件も流れおいないうちに賌読が始たったずき 実行ワヌカヌが受け取る生成むベント TEXT_MESSAGE_CONTENT などを、メモリからそのたた逐次䞭継 poll それ以倖すべおリロヌド・別タブ・離脱しお戻っおきた堎合 1 秒間隔で DB を読み、確定枈み履歎ず partial_state の生成途䞭回答をマヌゞした䌚話党䜓の MESSAGES_SNAPSHOT を、内容が倉わったずきだけ送り盎す。実行が終わったら RUN_FINISHED たたは RUN_ERROR で締める ぀たり、途䞭から戻っおきた賌読者が受け取るのは live 配信のむベント列ではなく、「䌚話党䜓のスナップショットの送り盎し」です。 // 配信モヌドの遞択。むベントが 1 件でも流れた埌に始たった賌読は poll に回す export function attach ( runId : string , signal : AbortSignal ): LiveSubscription | null { const fanout = fanouts. get (runId); if (!fanout) return pollInstead(runId, "fanout_absent" ); if (fanout. closed ) return pollInstead(runId, "fanout_closed" ); // 1 件でも䞭継枈みなら列の途䞭からになるので、履歎を出せる poll に任せる if (fanout.relayed > 0 ) return pollInstead(runId, "already_relayed" ); // 省略賌読者を登録し、生成むベントを流す AsyncGenerator を返す } // poll 配信のルヌプ。䌚話党䜓のスナップショットを、内容が倉わったずきだけ送り盎す while ( true ) { const event = snapshot(stored, readPartialMessages(progress.partialState)); const serialized = JSON . stringify (event); if (serialized !== previous) { previous = serialized; yield event; } if (isTerminal(progress. status )) break ; await sleep(POLL_INTERVAL_MS, signal); progress = await readProgress(run. id ); if (isTerminal(progress. status )) stored = await loadConversationMessages(run.conversationId); } yield terminalEvent(run, progress); 途䞭合流の賌読者を live のむベント列に合流させず poll に回すのは、正しさを優先したためです。デルタの続きから流すには、「スナップショットに含めた分」ず「これから流すデルタ」の境界を厳密に合わせる必芁がありたす。境界がずれるず、 content += delta の積み䞊げで本文が二重に連結されたす。䌚話党䜓のスナップショットを送り盎す圢なら、毎回が䞞ごずの眮き換えなので、この事故が原理的に起きたせん。その代わり、poll 配信の画面は live 配信のようなストリヌミング衚瀺にはならず、数秒おきに文章がたずたっお進む衚瀺になりたす。途䞭合流でもストリヌミング衚瀺にするこずは、埌続の課題にしおいたす。 同時実行制埡実行䞭ロックを NULL 可のナニヌク列で䜜る 「同䞀䌚話に実行䞭の run は 1 本だけ」を DB で匷制したす。PostgreSQL なら 郚分むンデックス partial index。 CREATE UNIQUE INDEX ... WHERE status IN ('queued','running') のように、条件を満たす行だけぞ䞀意制玄をかけられたすで曞けたすが、MySQL 8.0 には盞圓する構文が甚意されおいたせん。 代わりに runs.lock_key NULL 可・UNIQUEを䜿いたした。実行䞭は lock_key = conversationId 、終了時に NULL ぞ戻したす。MySQL のナニヌクむンデックスは NULL を重耇ずしお扱わない ため、終了枈みの run は䜕本でも共存でき、実行䞭は䌚話ごずに 1 本に絞られたす。 同䞀䌚話ぞの 2 本目の POST /runs は、INSERT 時にナニヌク制玄違反の゚ラヌずしお原子的に匟かれたす。重耇には 2 皮類ありたす。1 ぀は「同じ送信の二床抌し」です。クラむアントは送信 1 回ごずに ID client_turn_id を発行し、リトラむでも同じ ID を送るため、この列の重耇で怜出できたす。送信ボタンの連打はフロントでも抑止できたすが、ネットワヌク䞍調時の自動再送などフロントの制埡では防げない経路が残るため、DB でも守りたす。もう 1 ぀は「別の質問の䞊行送信」 lock_key の重耇で、同じ䌚話を耇数のタブで開いおいるずきに起きたす。どちらだったかを匕き盎しお、応答を分岐したす。 // API Route の䞀郚重耇キヌ゚ラヌの解釈 } catch (error) { if (!isUniqueViolation(error)) throw error; // 二床抌しなら、先行の run をそのたた返す同じ送信は 1 回ずしお扱う const raced = await findRunByClientTurnId(params); if (raced) return { ok : true , runId : raced. id , conversationId : raced.conversationId } ; // 䞊行送信なら、実行䞭の run を添えお拒吊ぞ const activeRunId = await findActiveRunIn(conversationId); if (activeRunId) return { ok : false , reason : "active_run" , activeRunId } ; } // API Route の䞀郚䞊行送信ぞの応答 if (result.reason === "active_run" ) { return Response .json( { errors : "この䌚話はいた実行䞭です" , activeRunId : result.activeRunId } , { status : 409 } , ); } 409 のレスポンスに activeRunId を含めおいるのは、UI がそれを䜿っお「拒吊」ではなく「実行䞭の run ぞの賌読切り替え」に倉換できるようにするためです。 ロックの解攟挏れに備える ロックには解攟挏れぞの備えも必芁です。サヌバヌのプロセスが突然萜ちるず、running のたたロックを握った run が残りたす。そうなるず、誰も実行しおいないのにその䌚話ぞの質問が「実行䞭です」ず拒吊され続けたす。備えは 2 ぀の仕組みの組み合わせです。 実行ワヌカヌは、実行䞭の run の heartbeat_at を定期的に珟圚時刻ぞ曎新したす凊理が続いおいるこずの蚘録です それずは別の掃陀凊理が、 heartbeat_at の曎新が䞀定時間止たっおいる queued / running の run を「担圓プロセスが異垞終了した」ずみなしお failed にし、ロックを解攟したす。 heartbeat_at は INSERT 時に珟圚時刻が入るため、202 を返した盎埌・実行が始たる前にプロセスが萜ちお queued のたた残った run も、この経路で回収されたすスキヌマの @@index([status, heartbeatAt]) はこの怜玢甚です 「サヌバヌ起動時に、残っおいる running を党郚 failed にする」ずいうより単玔な方法は採れたせんでした。デプロむ䞭は新旧のサヌバヌがしばらく同時に動いおおり、旧サヌバヌがただ実行しおいる最䞭の run を、新サヌバヌの起動凊理が誀っお failed にしおしたうためです。run に owner_instance_id どのサヌバヌがその実行を担圓しおいるかを持たせおいるのも同じ理由です。掃陀凊理は、自分のサヌバヌがいた実行しおいる run を誀っお回収しないよう、この ID ずメモリ䞊の実行䞀芧を突き合わせお刀定したす。 この回収の仕組みは、デプロむやスケヌルむンでプロセスごず止められた堎合の埌始末も兌ねおいたす。止たったプロセスが抱えおいた実行は途䞭から再開できたせんが、heartbeat が途絶えるため数分以内に failed になり、そこたでの生成分は partial ずしお履歎に残り、䌚話のロックも解攟されたす。ナヌザヌは倱敗を確認しお、すぐ次の質問に進めたす。 停止切断ずキャンセルを区別する この蚭蚈では、タブを閉じる・画面を遷移するのは「切断」であり、実行は継続したす。明瀺的に止めたいずきは POST /runs/{id}/cancel を呌びたす。実行ワヌカヌにキャンセル芁求の印を立おお䞊流ぞの賌読を切り離し、実行を「キャンセル」ずしお蚘録したす。蚘録埌に遅れお届いた生成物は、前述の完了時トランザクションの「別の経路が先に終わらせおいたら保存しない」分岐で砎棄されたす。 // API Route の䞀郚キャンセル凊理 if (getActiveRun(runId) || run.ownerInstanceId === OWNER_INSTANCE_ID) { // 終了の蚘録は実行ワヌカヌに任せる。ここで曞くず、ワヌカヌが「先に終了枈み」ず刀定しお生成物を捚おる const active = registerRun(runId); active.cancelRequested = true ; await active.agent?.detachActiveRun(); return { ok : true } ; } // 別のサヌバヌが担圓しおいる run。䌚話のロックを解攟するために蚘録だけ曞く await finalizeRun( { runId , status : "cancelled" , finalizedBy : `cancel: ${ OWNER_INSTANCE_ID } ` } ); 実行䞭の䌚話ぞの远加送信は、前述のロックにより 409 で拒吊されたす。ただし 409 を返すだけだず、「戻っおきたら画面が止たっお芋える → もう䞀床送る → ゚ラヌ」ずいう流れになりやすいため、途䞭経過の可芖化再合流を初回リリヌスの範囲に含めおいたす。実行䞭であるこずが芋えおいれば远加送信は起きにくく、方向を倉えたい堎合も「停止しおから送る」導線に誘導できたす。 Redis は芁るか 同皮の蚭蚈では、実行䞭むベントの共有に RedisRedis Streamsを䜿う構成がよく知られおいたす。ただし Redis が必芁になるのは「タスクを 2 ぀以䞊に増やし、か぀ストリヌミング衚瀺を保ちたい」堎合です。今回はどちらにも圓おはたらないため、入れおいたせん。 珟圚は ECS 1 タスクで動かしおおり、通垞時は再接続のリク゚ストが実行ワヌカヌず同じプロセスに届きたす。むベントはプロセス内のメモリで手枡せるため、Redis なしで live 配信が成立したす。 タスクを 2 ぀以䞊に増やすず、賌読のリク゚ストが実行ワヌカヌのいない方のタスクぞ届くこずがありたす。live 配信はワヌカヌず同じプロセスのメモリを介しお成り立っおいるため、別のタスクに届いた賌読では䜿えたせん。ただし DB はどのタスクからも読めるので、poll 配信はそのたた動きたす。぀たり live 配信できたはずの賌読が poll 配信になり、ストリヌミング衚瀺が数秒おきの曎新になるだけで、履歎も途䞭経過も芋られたす。蚭蚈方針の節で觊れた「実行ワヌカヌを独立したプロセスに切り出す」堎合も、ワヌカヌず賌読者が必ず別プロセスになるため、同じく䞭継が必芁になりたす。圓面は 1 タスクで足りる芏暡のため、珟時点ではこの構成にしおいたす。 たずめ 実行の䜜成ず賌読を分離し、実行ワヌカヌを HTTP 接続から独立させるこずで、画面を離れおも実行が完走する構造にしたした。 履歎は「メッセヌゞ 1 ä»¶ = 1 行」でずっず残し、生成途䞭の回答は䞊曞き曎新の 1 行に分けたした。むベントの逐次保存はせず、モデルぞ枡す履歎もサヌバヌが DB から組み立おたす。 同時実行制埡は MySQL の「NULL 可ナニヌク列」によるロックで実珟したした。キャンセルは賌読の切り離しず、実行を「キャンセル」ずしお蚘録するこずで実珟し、切断ずは明確に区別しおいたす。 AI チャットの「履歎」ず「バックグラりンド実行」は別々の機胜に芋えたすが、䜜っおみるず、どちらも「䌚話の状態はサヌバヌ偎で持぀」ずいう同じ蚭蚈に行き着きたした。AI チャットの実行基盀を䜜る際に共通しお珟れる論点だず思うので、同じものを䜜る方の参考になれば幞いです。
目次 はじめに Partial Prefetchingは䜕を解決するのか すべおを先読みする方法ず、䜕も先読みしない方法の䞭間を䜜る OISHYでPartial Prefetchingを詊す 怜蚌条件 蚈枬方法 実隓1クリック前の取埗を枛らすず、通信ず遷移はどう倉わるか 実隓2URL固有のデヌタを埅぀間に䜕が芋えるか 補足適甚範囲によっお先読みの圢が異なった たずめ 参考文献 はじめに こんにちは、開発本郚の 黒髙 です。最近はアメリカ向けレシピサヌビスである OISHY の開発に関わっおいたす。 Next.js 16.3 では、ペヌゞ遷移の応答性を改善する仕組みずしお Instant Navigations が远加されたした。クリック前に再利甚できるUIやデヌタを準備し、クリック埌に必芁な郚分を取埗するこずで、遷移盎埌から次のペヌゞを描画しやすくする仕組みです。 Instant Navigationsを構成する機胜のうち、今回取り䞊げるのは Partial Prefetching です。本蚘事では、Partial Prefetchingを玹介したうえで、OISHYの既存ペヌゞでは通信ず画面遷移にどのように珟れるのかを怜蚌したす。 Partial Prefetchingは䜕を解決するのか すべおを先読みする方法ず、䜕も先読みしない方法の䞭間を䜜る Next.jsの <Link> によるprefetch先読み では、リンクが画面内に入るず、ナヌザヌがクリックする前に遷移先のデヌタを取埗したす。クリック時にデヌタが揃っおいれば、遷移先をすぐに衚瀺できたす。 䞀方、リンクが倚い画面では、実際にはクリックされないリンクのデヌタも取埗したす。先読みを無効にすれば事前通信はなくなりたすが、その堎合はクリックしおから遷移先のデヌタを取埗するこずになりたす。 Next.js 16.3のPartial Prefetchingは、この二぀の䞭間を䜜る機胜です。Cache Componentsを䜿うペヌゞぞの既定の <Link> では、URLごずの完成圢をすべお先読みする代わりに、同じ皮類のペヌゞで再利甚できるApp Shellを先読みしたす。クリックされたURLに固有のデヌタは、必芁になった時点で取埗したす。 App Shell ずは、URL固有のデヌタを埅たずに衚瀺できるペヌゞの共通郚分です。サむト共通のレむアりトや、デヌタの読み蟌み䞭に衚瀺するUIなどが含たれたす。 レシピ詳现ペヌゞを䟋にするず、レシピ名や材料はURLごずに倉わりたすが、それらを埅っおいる間の枠組みは耇数のレシピで共有できたす。 同じルヌトを指す耇数のリンクで䞀぀のApp Shellを再利甚できる ため、リンクごずに同じ共通郚分を取埗し盎す必芁もありたせん。 この仕組みは、次のようなペヌゞで効果が珟れやすいず考えられたす。 商品、蚘事、レシピなど、同じ皮類の詳现ペヌゞぞのリンクが倚数䞊ぶ 衚瀺されたリンクのうち、実際にクリックされるのは䞀郚だけである 詳现ペヌゞに、共通レむアりトやデヌタ取埗䞭の衚瀺など、URLをたたいで再利甚できる郚分がある OISHYのトップペヌゞにも、同じ /recipes/[id] ぞ遷移するレシピリンクが倚数䞊びたす。そこで今回は、レシピ詳现ペヌゞをPartial Prefetchingぞ切り替えたずき、クリック前の通信ずクリック埌の衚瀺がどう倉わるかを確かめたした。 OISHYでPartial Prefetchingを詊す OISHYでは、すでに Cache Components を有効にしおいたす。たず、レシピ詳现ペヌゞぞの遷移にPartial Prefetchingを適甚するため、次の蚭定を远加したした。 // app/recipes/[id]/page.tsx export const prefetch = 'partial' ; 公匏リファレンスでは、 prefetch = 'partial' はリンクではなく遷移先に蚭定する ものず説明されおいたす。この蚭定により、レシピ詳现ペヌゞをPartial Prefetchingぞ段階的に切り替えたす。 怜蚌条件 䞻な怜蚌では、次の3条件を比范したした。 条件 Next.js Partial Prefetchingを適甚する堎所 デヌタ取埗䞭の衚瀺 条件A 16.2.11 適甚しない なし 条件B 16.3.1 レシピ詳现ペヌゞ なし 条件C 16.3.1 レシピ詳现ペヌゞ スケルトン衚瀺 実隓1では条件Aず条件Bを比范し、クリック前の取埗を枛らしたずきに通信ず画面遷移がどう倉わるかを確認したした。実隓2では条件Bず条件Cを比范し、URL固有のデヌタを埅぀間にApp Shellが画面にどう珟れるかを確認したした。 以䞋で扱う条件B・Cず補足怜蚌の先読み通信は、Next.js 16.3.1で芳枬したものです。内郚的な通信の圢は、今埌のバヌゞョンで倉わる可胜性がありたす。 OISHYの既存構成では、Next.jsの standalone server をECSで動かし、その前段にCloudFrontずALBを眮いおいたす。今回の蚈枬もこの配信経路で行いたした。 蚈枬方法 察象 同じ10件のレシピを、それぞれ3回ず぀蚈枬 操䜜 トップペヌゞを新しいタブで開き、察象リンクが画面内に入る䜍眮たでスクロヌル。5秒埅っおからクリックし、クリック前の先読み通信ずレシピタむトルが衚瀺されるたでの通信・時間を蚘録 ブラりザ条件 画面サむズは1280×900、回線速床の制限はなし。ブラりザ偎のHTTPキャッシュは蚈枬のたびに無効化し、スクロヌル䜍眮ずクリックたでの埅ち時間を統䞀 集蚈 各レシピの3回の䞭倮倀を求めたあず、10件の䞭倮倀を代衚倀ずしお䜿甚。通信量にはChrome DevTools Protocolの Network.loadingFinished.encodedDataLength を䜿い、ブラりザが受信したデヌタ量に近い倀を比范 実隓1クリック前の取埗を枛らすず、通信ず遷移はどう倉わるか 最初に、Next.js 16.2.11の条件Aず、16.3.1ぞ曎新しおレシピ詳现ペヌゞをPartial Prefetchingぞ切り替えた条件Bを比范したした。この比范にはNext.js自䜓の曎新も含たれるため、Partial Prefetchingだけの効果ではなく、OISHYで16.3.1ぞの曎新ず機胜導入を行った前埌差ずしお扱いたす。 ここでいう RSCReact Server Componentsデヌタ は、Next.jsがクラむアント偎の画面を曎新するために送るデヌタです。 指暙䞭倮倀 条件A倉曎前 条件Bレシピ詳现ペヌゞに適甚 クリック前のRSCリク゚スト 75 6 クリック前の転送量 箄319KB 箄20KB クリック埌のRSCリク゚スト 0 1 クリック埌の転送量 0KB 箄20KB クリック前埌の合蚈リク゚スト 75 7 クリック前埌の合蚈転送量 箄319KB 箄38KB クリック前のリク゚スト数は玄92%、転送量は玄94%枛りたした。クリック埌には、遞択したレシピのRSCリク゚ストが1件発生しおいたす。それを含めた合蚈転送量も玄88%枛っおおり、クリック前の通信がそのたたすべおクリック埌ぞ移ったわけではありたせんでした。 倉曎前は、画面内に䞊ぶ倚数のレシピに぀いおURL固有のRSCデヌタを取埗しおいたした。倉曎埌は、共通郚分を先読みし、遞択したレシピのデヌタをクリック埌に取埗しおいたす。今回の画面では、クリックされなかったレシピぞの先読みが枛ったこずが、通信量の差ずしお倧きく珟れたした。 次の画像は1回の蚈枬䟋で、衚の数倀は反埩蚈枬から求めた代衚倀です。 条件Bでのクリック前のNetwork蚘録の䟋 䞀方、クリックからレシピタむトルが衚瀺されるたでの代衚倀は、倉曎前が玄44ms、倉曎埌が玄82msで、どちらも100ms未満でした。URL固有のデヌタをクリック埌に取埗するようになったこずず敎合したすが、今回の条件では目芖できるほど長い埅ち時間にはなりたせんでした。倧きく倉わったのは、完成画面が出るたでの芋た目よりも、クリック前に取埗するデヌタの量でした。 なお、この結果は回線速床を制限しない環境でのものです。Partial Prefetchingは、クリック前の転送量を枛らす代わりに、URL固有デヌタの取埗をクリック埌ぞ移す仕組みです。䜎速な回線では、クリック埌の埅ち時間が今回より長くなる可胜性がある䞀方、クリックされないリンクぞの先読みを抑える効果は倧きくなるため、有効に働くかどうかは通信環境によっおトレヌドオフになり埗たす。 実隓2URL固有のデヌタを埅぀間に䜕が芋えるか Partial Prefetchingでは、URL固有のデヌタがクリック時点で揃っおいなければ、クリック埌にデヌタの取埗を埅぀時間が生じたす。その間にApp Shellがどのように珟れるかを芋るため、条件Cではレシピデヌタの取埗䞭に衚瀺するスケルトンを loading.tsx ずしお定矩したした。 loading.tsx 自䜓はNext.js 16.3の新機胜ではありたせん。同じルヌト階局のペヌゞを Suspense 境界で囲み、定矩したUIをデヌタの準備䞭に衚瀺する仕組みです。Partial Prefetchingでは、 この代替衚瀺を含むApp Shellが先読みの察象になりたす 。 // app/recipes/[id]/loading.tsx export default function RecipeDetailLoading () { return < RecipeDetailSkeleton /> ; } スケルトンずは、完成埌のレむアりトに近い枠を先に衚瀺し、デヌタを埅っおいる堎所を瀺すUIです。今回のレシピ詳现ペヌゞでは、次のスケルトンがApp Shellずしお先に衚瀺される郚分になりたす。 レシピ詳现ペヌゞのスケルトン衚瀺䟋 30回䞭25回はスケルトンを経由せず、完成したレシピ詳现が盎接衚瀺されたした。スケルトンが先に珟れたのは5回で、クリックから14〜22msで衚瀺され、レシピタむトルより玄68〜856ms先行したした。 この結果から、スケルトンは毎回挟たる䞭間画面ではなく、レシピ固有のデヌタがクリックたでに揃わなかった堎合だけ、遷移先の枠組みずしお先に衚瀺されるこずが分かりたした。 たた、条件Cの通信を远加で確認するず、条件Bずは異なる挙動が芋぀かりたした。条件Bではレシピ固有のデヌタをクリック埌に取埗しおいた䞀方、条件Cの補完蚈枬では、10回䞭4回で耇数のレシピ固有デヌタをクリック前に取埗するRSC通信が䞊びたした。 条件Cでクリック前に芳枬したレシピ固有デヌタの先読み この違いがPartial Prefetchingの適甚範囲ず関係するのかを確認するため、远加蚈枬したした。 補足適甚範囲によっお先読みの圢が異なった 条件Cでは、レシピ詳现ペヌゞだけに prefetch = 'partial' を蚭定しおいたした。 prefetch = 'partial' は、蚭定したペヌゞより䞊䜍のルヌト階局たで同じ蚭定にするものではありたせん。 Next.js 16.3.1の実装 では、それぞれのルヌト階局が、その階局で指定された蚭定かアプリ党䜓の既定倀を参照したす。 この挙動を調べる䞭で、 段階導入時の先読みを扱うNext.js 16.3.1の公匏テスト を芋぀けたした。このテストにも、動的なペヌゞだけをPartialにし、未蚭定の䞊䜍階局を埓来の方法で扱う構成で、リンク先固有のデヌタたで先読みする䟋がありたす。 そこで、条件Cの loading.tsx ずペヌゞ偎の蚭定を残したたた、 アプリ党䜓の既定倀をPartialにする partialPrefetching: true だけを远加したした。 // next.config.ts const nextConfig = { cacheComponents : true , partialPrefetching : true , } ; 同じ導線を10回蚈枬した結果は次のずおりです。 Partial Prefetchingの適甚範囲 URL固有デヌタの先読み 共有郚分の先読み レシピ詳现ペヌゞのみ 10回䞭4回で芳枬 あり アプリ党䜓 10回䞭0回 あり 同じ loading.tsx を残したたた適甚範囲を倉えるず、今回の導線ではURL固有デヌタの先読みが10回䞭4回から0回になりたした。䞀方、App Shellを構成する共有郚分の先読みは続いおいたした。Next.js 16.3.1の実装ず公匏テストを合わせるず、今回芳枬した通信にはPartial Prefetchingの適甚範囲が関係しおいたず考えられたす。 たずめ Partial PrefetchingをOISHYのレシピ䞀芧で詊したずころ、16.3.1ぞの曎新ず機胜導入埌、クリック前のRSC転送量が玄94%枛り、クリック埌を含む合蚈でも玄88%枛りたした。 䞀方、倉曎前からレシピタむトルたでの衚瀺は玄44msず十分に速く、回線速床を制限しない今回の環境では、通信量ほど倧きな芋た目の差はありたせんでした。スケルトンを含むApp Shellは、URL固有のデヌタがクリックたでに揃わなかった堎合だけ、完成したペヌゞより先に衚瀺されたした。 たた、レシピ詳现ペヌゞだけに適甚した堎合ず、アプリ党䜓に適甚した堎合では、クリック前の先読みも異なりたした。ペヌゞ単䜍で詊せる機胜ではありたすが、今回の怜蚌では適甚範囲も実際の通信に関係しおいたした。 Partial Prefetchingは、商品・蚘事・レシピの䞀芧のように、同じ皮類の詳现ペヌゞぞのリンクが倚く、その䞀郚だけがクリックされる画面を想定しおいたす。クリックされないURL固有デヌタの先読みを抑えながら、デヌタが間に合わない堎合にはApp Shellを先に衚瀺する仕組みです。今回のOISHYでは、先読み通信量には倧きな差が出た䞀方、芋た目の差は小さいずいう結果でした。 参考文献 Next.js 16.3 Next.js 16.3: Instant Navigations Instant Navigationガむド Adopting Partial Prefetching <Link> のprefetch先読み Cache Components Server and Client Components output: 'standalone' prefetch のルヌト蚭定Next.js 16.3.1 同じルヌトでApp Shellを再利甚する説明Next.js 16.3.1 partialPrefetching の党䜓蚭定Next.js 16.3.1 loading.tsx ずSuspense境界Next.js 16.3.1 loading.tsx の代替衚瀺を先読みする説明Next.js 16.3.1 ルヌト階局ごずの先読み蚭定を扱う実装Next.js 16.3.1 段階導入時の先読みを確認する公匏テストNext.js 16.3.1 Chrome DevTools Protocol: Network.loadingFinished
title はじめに こんにちは、株匏䌚瀟゚ブリヌでデリッシュキッチンのiOSアプリの開発をしおいる成田です。 珟圚は、プレミアムナヌザヌの登録数の向䞊やプレミアムナヌザヌの䜓隓をより良くするこずを目的ずしたチヌムで開発をしおいたす。 サブスクリプションの解玄は、これたで開発者にずっおブラックボックスでした。ナヌザヌが App Store の管理画面で「サブスクリプションをキャンセルする」を抌すずき、アプリ偎にできるこずは䜕もありたせん。匕き止めのメッセヌゞも、オファヌの提瀺も、そもそも解玄されようずしおいるこずを知るこずさえ、その瞬間にはできたせんでした。 WWDC26 で発衚された Retention Messaging は、ここに初めお介入手段を䞎える機胜です( セッション309 )。解玄確認画面に、アプリからのメッセヌゞやオファヌを差し蟌めるようになりたす。 Appleによれば、この機胜を導入したサブスクリプションでは、解玄を取りやめお利甚を継続するナヌザヌの割合が改善されおいるずのこずです。解玄抑止にも取り組む立堎ずしおは、無芖できない機胜です。 ただ䞀般提䟛はされおいたせんが、具䜓的に䜕ができるのか、どう始めればよいのか、珟時点で分かっおいるこずを敎理したす。 䜕ができるのか ナヌザヌが App Store のサブスクリプション管理から解玄しようずするず、確認画面が出たす。Retention Messaging を蚭定しおおくず、この画面にアプリからのコンテンツが衚瀺されたす。 衚瀺できる圢匏は3぀です。 圢匏 内容 メッセヌゞのみ ロヌカラむズ枈みの匕き止め文蚀 メッセヌゞ + 画像 テキストメッセヌゞに Asset Library 等から蚭定した画像を添えお蚎求 メッセヌゞ + オファヌ 割匕や無料期間付きなどのオファヌを提瀺する ナヌザヌがオファヌの察象である堎合、オファヌの衚瀺が画像を眮き換えたす。「解玄する前に、3ヶ月無料で続けられるオファヌがありたす」のような画面を、Apple の解玄フロヌの䞭に出せるわけです。この画面は App Store 偎が描画するもので、公匏ドキュメントによれば iOS 15.1 以䞊で利甚できたす。アプリの最䜎察応バヌゞョンず関係なく届くのは、地味に嬉しいずころです。 オファヌが匕き換えられたかどうかはサヌバヌ偎で確認できたす。眲名付きトランザクションに新しいオファヌ皮別が入りたす。 { " offerType ": 5 , " offerIdentifier ": " Yoga_2026_cancel_free_3m ", " offerDiscountType ": " FREE_TRIAL ", " offerPeriod ": " P3M " } offerType はトランザクションに「どの皮類のオファヌが絡んだか」を刻むフィヌルドで、これたで4皮類あったものに远加で Retention Offer が加わった圢です。 offerType 皮類 1 お詊し 2 プロモヌション 3 オファヌコヌド 4 再獲埗 5 Retention Offer メッセヌゞを甚意する方法は2぀ある ここたでが䞻に「解玄確認画面に䜕が出るか」の話です。次は、その衚瀺をアプリ偎がどう甚意するかです。 方法は2぀あっお、手軜さが倧きく違いたす。App Store Connect で蚭定するだけの方法ず、自前のサヌバヌを立おお顧客ごずにリアルタむムで出し分ける方法です。順に芋おいきたす。 方法1: App Store Connect 偎での蚭定 App Store Connect 䞊でメッセヌゞ・画像・オファヌを蚭定し、察象のサブスクリプションにマッピングするだけです。自前のサヌバヌ実装は䞍芁で、Apple 偎が衚瀺を担いたす。 流れはこうです。 ロヌカラむズ枈みのメッセヌゞ文蚀を䜜る 任意で Asset Library の画像、Retention Offer を添える 1぀以䞊のサブスクリプションにマップする Sandbox 環境でテストしお公開 方法2: リアルタむム API 型(ナヌザヌごずの出し分け) 方法1の匱点は、党員に同じものしか出せないこずです。 新しく発衚された Retention Messaging API を䜿うず、「誰に・䜕を出すか」を自瀟のデヌタで決められるようになりたす。 誀解しやすい点を先に曞いおおくず、 解玄の理由そのものが Apple から届くわけではありたせん 。リク゚ストに入っおいるのは「誰の契玄か( originalTransactionId )」たでです。ただ、この ID で自瀟のナヌザヌデヌタを匕けば、手持ちの情報が䜿えたす。䟋えば、賌読しおからどれぐらいか、最埌にアプリを開いたのはい぀か、月額プランか幎額プランか、過去にオファヌで匕き止めたこずがあるかなどがあるでしょう。 理由そのものは分からなくおも、こうしたデヌタから仮説は立おられたす。 出し分けのロゞックが自前のサヌバヌにあるこずで A/B テストでの怜蚌も可胜になるはずなので、その仮説を怜蚌するこずもできそうです。 次に、仕組みを芋おいきたす。 Retention Messaging API を䜿うず、解玄操䜜が起きたたさにその瞬間に、App Store から自前のサヌバヌぞ問い合わせが来たす。 // App Store からのリク゚スト { " originalTransactionId ": " 123456789 ", " appAppleId ": 6745974591 , " productId ": " Yoga_summer_2026 ", " userLocale ": " en-US ", " requestIdentifier ": " c03248af-dd76-4e9b-9c1e-4489cd19a768 ", " environment ": " Production ", " signedDate ": 1780920000000 } これに察しお、 このナヌザヌに䜕を出すか を返したす。返せる応答は3皮類です。 ① メッセヌゞ { " message ": { " messageIdentifier ": " 551ee7c0-... " } } ② プラン切替の提案(alternateProduct) { " alternateProduct ": { " messageIdentifier ": " ed7f25fc-... ", " productId ": " Yoga_summer_2026_annual " } } 同じサブスクリプショングルヌプ内の別プランぞの乗り換えを提案できたす。「月額×12ヶ月コミット」の新プランタむプずも連動しおいお、たずえば幎額プランを解玄しかけた人に「月額の12ヶ月コミットなら続けやすいですよ」ずいう導線が䜜れたりしそうです。 ③ プロモヌショナルオファヌ { " promotionalOffer ": { " messageIdentifier ": " 80135e2b-... ", " promotionalOfferSignatureV2 ": " eyJhbGciOiJFUzI
 " } } プロモヌショナルオファヌは、開発者が特定のナヌザヌだけに提䟛できる限定オファヌです。 察象ナヌザヌ以倖には利甚されないように、開発者のサヌバヌが秘密鍵を䜿っお「このナヌザヌに、このオファヌを適甚しおよい」ずいう眲名を発行したす。アプリはこの眲名を䜿っお、オファヌが正しく発行されたものかを確認したす。 promotionalOfferSignatureV2 は、このデゞタルな蚱可蚌を暙準的な圢匏である JWSJSON Web Signature で衚珟する新しい仕様です。 ずころで、ここたでの応答䟋が messageIdentifier ずいう ID しか返しおいないこずに気づいたでしょうか。メッセヌゞの文蚀や画像の実䜓は、あらかじめ Apple に登録しおおく蚭蚈になっおいたす。解玄フロヌの真っ最䞭に文蚀ごず送るのではなく、実䜓は事前登録しおおいお、その堎では「どれを出すか」を ID で遞ぶだけです。 この事前登録を担うのが、管理甚の゚ンドポむント矀です。メッセヌゞや画像の登録のほか、リアルタむム問い合わせの受け口 URL の蚭定、性胜テストの実行もここで行いたす。 POST /messages // メッセヌゞ登録 GET /messages // 登録枈み䞀芧 DELETE /messages/{messageId} // 削陀 POST /images // 画像登録 GET /images DELETE /images/{imageId} POST /defaultMessages // デフォルトメッセヌゞ蚭定 GET /defaultMessages/{productId}/{locale} DELETE /defaultMessages/{productId}/{locale} POST /realtimeUrl // 受け口URLの蚭定 GET /realtimeUrl DELETE /realtimeUrl POST /performanceTests // 性胜テスト GET /performanceTests/{testId} フォヌルバックは段階的 リアルタむム応答が䜿えない・䞍正な堎合は App Store Connect で蚭定されたものに、それも無ければ API で蚭定したデフォルトメッセヌゞにフォヌルバックされたす。 たた、Sandbox には自瀟サヌバヌの応答性胜を枬るためのテスト甚゚ンドポむントが甚意されおいたす。解玄フロヌの䞭で同期的に呌ばれる API なので、応答が遅ければ䜓隓を壊したす。本番前にここで確認しおおく、ずいう建お付けだず理解しおいたす。 たずめ Retention Messaging は、解玄確認画面ずいう最埌の接点に初めお介入できる機胜 甚意する方法は2぀。サヌバヌ䞍芁の App Store Connect 蚭定型ず、ナヌザヌごずに出し分けるリアルタむム API。フォヌルバックも敎理されおいる 返せるのはメッセヌゞ、プラン切替提案、プロモオファヌの3çš® メッセヌゞや画像の実䜓は事前登録しおおき、リアルタむム応答では ID で遞ぶだけ。Sandbox には応答性胜のテスト甚゚ンドポむントも甚意されおいる 解玄はこれたで、起きおから初めお知るものでしたが、今回からは解玄を思いずどたっおもらうための斜策を、解玄のタむミングに合わせお出せるようになりたす。サブスクリプションを運営しおいるチヌムは、サヌビス提䟛が始たる前に、どんなメッセヌゞを出すか、どんなオファヌを甚意するかを怜蚎しおおくずよさそうです。
Cloudflare Walletsが䜿う決枈プロトコル x402 を理解する 目次 はじめに x402が察象ずする課題 プロトコルフロヌ ② 402 Payment Required ず PaymentRequirements scheme が取る倀 — exact ず upto ③ authorization ぞの眲名 ④ PaymentPayload の送信 â‘€ verify / settle ず facilitator 決枈の確定ず䞍可逆性 HTTPを利甚する構成のメリット 支払っおよいかの刀断は仕様の範囲倖 たずめ 参考 はじめに こんにちは、開発本郚開発1郚の 赀川 です。食事管理アプリ ヘルシカ の開発をしおいたす。 ダむ゚ット・食事管理・䜓重管理・カロリヌ蚈算 - ヘルシカ every, Inc. ヘルスケアフィットネス 無料 2026幎8月4日、Cloudflareが Cloudflare Wallets を発衚したした。これは、Web䞊でサヌビスの賌入や入金を行うためのりォレットで、Cloudflareのアカりントに玐づきたす。珟時点ではりォレットの識別子の予玄のみが提䟛されおおり、僕もずりあえず予玄しおみたした。 Cloudflare Wallet Tagを予玄した Cloudflare Walletsでは、アカりントが持぀Walletから、゚ヌゞェントが䜿うVirtual Walletに支出暩限を委任できたす。゚ヌゞェントはVirtual Walletを䜿っお、API、MCPツヌル、コンテンツなどを賌入できたす。 この賌入のやり取りには、 x402 ずいう決枈プロトコルが䜿われおいたす。x402は、HTTPのリク゚ストずレスポンスの䞭だけで完結し、支払いが必芁であるこずを瀺すのに、HTTPステヌタスコヌドの 402 Payment Required 1 を䜿っおいたす。 本蚘事ではこの x402 に぀いお、ドキュメントをあたりながらたずめおみたした。 x402が察象ずする課題 䟋えば有料APIを利甚しようず思ったら、我々は䞀般に次の手順を螏みたす。 サヌビスにサむンアップする クレゞットカヌドなどの決枈手段を登録する APIキヌを発行する そのキヌをリク゚ストに付けお呌ぶ 月末にたずめお請求される 認蚌ず課金がフロヌずしお完党に分離しおおり、いずれも事前のサむンアップを前提ずしおいたす。 人間が利甚する分には䜕の問題もないですが、クラむアントがAI゚ヌゞェントである堎合、この前提が制玄になりたす。手順1〜3のうち、サむンアップペヌゞは人間向けのUIずしお䜜られおおり、決枈手段の登録も人間の承認が必芁です。゚ヌゞェントは事前登録された識別子も支払い手段も持たないため、この3手順の実行には人間の介圚が必芁になりたす。 x402は、事前の登録手続きなしに支払いを成立させる方匏を定矩しおいたす。 プロトコルフロヌ プロトコルのフロヌは次のずおりです。この章の図や蚘述は、 x402 Specification v2 ず Cloudflare の x402 ドキュメント に基づいおおり、執筆時点で最新のv2に぀いお曞いおいたす。 x402のプロトコルフロヌ このフロヌには、アカりントやセッション、事前に共有したAPIキヌなどは含たれたせん。ClientずServerはこのリク゚ストで初めお通信し、支払いが成立したす。 ※ 実際の支払いは、ブロックチェヌン䞊でトヌクンを送るこずで成立したす。USDCなどのステヌブルコむン米ドルなどの法定通貚に䟡倀を連動させたトヌクンが䜿われたす。 ② 402 Payment Required ず PaymentRequirements ①のリク゚ストに察しお、Serverは②で 402 Payment Required を返したす。支払いの条件は PAYMENT-REQUIRED ヘッダに、Base64゚ンコヌドされたJSONずしお茉りたす。 このJSONの accepts フィヌルドに、支払いの条件が配列で入りたす。芁玠1぀が「この条件で払っおくれれば、このリ゜ヌスを枡すよ」ずいう1件分の提瀺にあたり、これを PaymentRequirements ず呌びたす。配列なのでServerは条件の異なる耇数の遞択肢を䞊べられ、Clientはその䞭から1぀を遞びたす。 PaymentRequirements は次のフィヌルドから構成されたす。 フィヌルド 内容 scheme 支払いスキヌム exact / upto  network 察象ブロックチェヌンBase、Ethereum、Solana など amount 金額 asset トヌクン皮別USDC など payTo 支払いの宛先アドレス maxTimeoutSeconds タむムアりト scheme が取る倀 — exact ず upto scheme フィヌルドは支払い方匏を指定したす。 Cloudflare のドキュメント に蚘茉されおいるのは次の2぀です。 exact : 固定額の送金です。EVMEthereum Virtual Machine 2 䞊では USDC を payTo のアドレスに送金したす。②の時点で金額が確定しおいるケヌスに察応したす。 upto : 䞊限額を先に承認し、実際の課金額を決枈時に確定したす。LLMの掚論APIのように、実行するたでトヌクン数が確定せず、金額が事埌に決たるケヌスに察応したす。 ③ authorization ぞの眲名 Clientは、 accepts の䞭から採甚する PaymentRequirements を1぀遞び、その内容を authorization オブゞェクトに反映しお眲名したす。authorization の圢は、 scheme ずチェヌンの皮類の組み合わせで決たり、EVM䞊で exact を䜿う堎合は次のフィヌルドを持ちたす。 フィヌルド 内容 from 送金元アドレス to 宛先アドレス value 金額 validAfter / validBefore 有効期間 nonce 䞀床きりの倀 眲名は自身の秘密鍵で行いたす。眲名が保蚌するのは、その鍵の保有者にしか生成できないこず、眲名察象が1バむトでも倉われば怜蚌に倱敗するこず、の2点です。 nonce は䞀床きりの倀であり、 validBefore で有効期間が区切られるため、同じ眲名を他の支払いに再利甚するこずはできたせん。 ④ PaymentPayload の送信 眲名ず authorization は PaymentPayload にたずめられ、 PAYMENT-SIGNATURE ヘッダに茉っお、同じURLに再送されたす。 PaymentPayload は次の構造です。 { " x402Version ": 2 , " resource ": { ... } , " accepted ": { /* ②の accepts から遞んだ PaymentRequirements */ } , " payload ": { " signature ": " ... ", " authorization ": { " from ": " ... ", " to ": " ... ", " value ": " ... ", " nonce ": " ... " } } } â‘€ verify / settle ず facilitator ⑀でServerが行う怜蚌ず決枈は、facilitator に委譲できたす。facilitator は、支払いの怜蚌ずブロックチェヌンぞの送信を担うサヌビスで、次の2぀の゚ンドポむントを提䟛したす。 POST /verify : 支払いペむロヌドが有効かを、ブロックチェヌン䞊で送金を実行せずに怜蚌する POST /settle : 怜蚌枈みの支払いをブロックチェヌンに送信し、送金を確定させる facilitator の利甚は必須ではありたせんが、ブロックチェヌンずのやり取りを抜象化できるため、Cloudflareのドキュメントでは掚奚されおいたす。 Clientは facilitator ず盎接通信せず、ServerずHTTPで通信したす。⑀の内偎を展開するず、次のようになりたす。 facilitator を含む⑀の内偎 決枈が確定するず、Serverは⑥でリ゜ヌスを返したす。決枈の確認は PAYMENT-RESPONSE ヘッダに茉りたす。 決枈の確定ず䞍可逆性 x402の決枈は、1回の送金で確定したす。カヌド決枈のように、支払いを承認する段階ず実際に資金が動く段階が分かれるこずはありたせん。これにより、リ゜ヌス1件ごずのような少額の支払いでも短時間で決枈できたすが、同時に次の制玄が生じたす。 決枈を取り消せない プロトコルずしお返金手段を定矩しおいない 誀送金や詐取による送金があった堎合、プロトコルの範囲では資金は戻りたせん。返金や救枈を実装する堎合は、アプリケヌション局で別途定矩するこずになりたす。 HTTPを利甚する構成のメリット x402は決枈専甚のプロトコルを新蚭せず、支払いのやり取りをHTTPのリク゚スト/レスポンスサむクルの䞭で衚珟したす。そのためクラむアントを遞びたせん。゚ヌゞェント、curl、サヌバ間通信のいずれも察象になり、SDKも必須ではありたせん。 402応答は特定のURLに察する支払い芁求なので、倀付けの単䜍もURLになりたす。゚ンドポむントごず、MCPツヌルごずに䟡栌を返せたす。 支払っおよいかの刀断は仕様の範囲倖 x402の仕様が定矩しおいるのは、3぀のHTTPヘッダ、 PaymentRequirements ず PaymentPayload の構造、facilitator の verify / settle の手順、および scheme です。「どのような条件で支払いを承認するか」は定矩されおいたせん。仕様䞊、正しく眲名されたペむロヌドは正圓な支払いずしお凊理されたす。 Cloudflare Walletsは、この刀断をりォレット偎で瞛る仕組みを持っおいたす。゚ヌゞェントに枡すVirtual Walletには、䜿っおよい金額の枠allowance、支払い先の蚱可リストallow list、1回あたりの䞊限額maximum transaction sizeを蚭定できたす。 これらはりォレット偎の蚭定なので、゚ヌゞェントが䜕をしようずしおも、枠を超える送金や、蚱可リストにない盞手ぞの送金は成立したせん。x402が定矩しおいない「支払っおよいか」の刀断を、゚ヌゞェント任せにせず、りォレットの蚭定ずしお持たせおいる構成です。 たずめ x402の仕様を敎理するず、次のようになりたす。 決枈専甚のプロトコルを新蚭せず、HTTPのリク゚スト/レスポンスサむクルで支払いを衚珟する 事前のアカりントもAPIキヌも䜿わず、402応答ずその再送だけで支払いが成立する scheme ずしお exact 固定額ず upto 䞊限額の事前承認を定矩する 怜蚌ず決枈は facilitator に委譲できる。利甚は必須ではない 決枈はブロックチェヌン䞊で確定し、プロトコルずしお取り消し手段を持たない 支払っおよいかの刀断は仕様の範囲倖で、クラむアント偎に委ねられる 最埌たでお読みいただきありがずうございたした。 参考 Announcing Cloudflare Wallets: The programmable wallet for the agentic Internet - The Cloudflare Blog 2026幎8月4日 x402 - Cloudflare Agents docs x402 Specification v2 - coinbase/x402 RFC 9110: HTTP Semantics - 15.5.3. 402 Payment Required 珟行のHTTP仕様である RFC 9110 では "The 402 (Payment Required) status code is reserved for future use." ず蚘述されおいたす。402が暙準ずしお甚途を定矩されおこなかったこずを、僕は今回の蚘事を曞くたで知りたせんでした。 ↩ Ethereum が採甚しおいるブロックチェヌンの実行環境です。これを採甚するチェヌンは倚く、Cloudflareのドキュメントも EVM に察応するチェヌンずしお Base、Ethereum、Polygon などを挙げおいたす。 ↩
はじめに こんにちは、株匏䌚瀟゚ブリヌのデリッシュキッチンにお7月から玄1か月間゚ンゞニアずしおむンタヌンシップに参加しおいたした、亀井ず申したす。 この蚘事では、むンタヌン䞭に取り組んだこずの䞭心である「Databricks LakebaseぞのOAuth M2M認蚌の導入」ず、その先でデヌタを読むための「GoのPostgreSQL向けラむブラリ遞定」の2぀に぀いお、どう実装・怜蚌・調査したのかを曞きたいず思いたす。 むンタヌンで取り組んだこず むンタヌンでは、Go蚀語で曞かれたデリッシュキッチンのAPIサヌバヌを䞻な察象ずしお、次の4぀に取り組みたした。 デリッシュAIの衚瀺順゜ヌトのロゞックの実装 Databricks LakebaseぞのOAuth M2M認蚌の実装 GoのPostgreSQL向けデヌタアクセスラむブラリORMの比范調査 M2M認蚌を動かすための環境倉数・ECSタスク定矩の远加 この蚘事では䞻に2ず3に぀いお曞きたす。 開発の背景 デリッシュキッチンのサヌバヌから、Databricks䞊の新しいリ゜ヌスに接続したいずいう需芁が生たれおいたした。接続先はLakebase Autoscaling PostgresずいうDatabricksが提䟛するフルマネヌゞドなPostgreSQLで、projects → branches → endpointsの3階局でリ゜ヌスを管理する新䞖代のサヌビスです。 Databricks本䜓は分析寄りで、アプリが求める個別レコヌドを䜎レむテンシで匕く甚途には向きたせん。そこで、Databricksでテヌブルを䞀元管理するカタログ機胜であるUnity Catalog偎のテヌブルをsourceずしおLakebaseのPostgresに自動同期しsynced table、アプリからは読み取り専甚のPostgresテヌブルずしお高速に読む、ずいう構成を取りたす。 問題は認蚌です。既存のDatabricks接続はPATPersonal Access Tokenずいう長呜トヌクンで認蚌しおいたした。しかしPATは倱効管理が手動で、そもそもLakebaseのPostgres認蚌OAuth roleは「発行から60分で倱効するトヌクン」を前提ずしおおり、PATでは接続できたせん。静的なパスワヌドで認蚌するroleも䜜れたすが、DatabricksのID管理に玐づかない長呜の静的クレデンシャルになるため、挏掩時のリスクを考えるず避けたいずころです。 Databricksはサヌビスプリンシパルの認可にはOAuth 2.0を掚奚しおおり、ここではOAuth M2M認蚌、すなわちサヌビスプリンシパルずclient credentialsフロヌの組み合わせを実装したした。甚語を敎理するず: サヌビスプリンシパルSP: 人間ではなくアプリ自身に䞎えるIDアカりント。人に玐づけるず退職や異動等で凊理が止たり、暩限も広くなりがちなので、機械甚のアカりントを別に立おたす client credentialsフロヌ: ナヌザヌの同意画面を介さず、アプリがClient IDずClient Secretを認可サヌバヌに提瀺しおアクセストヌクンを埗るOAuth 2.0のフロヌ ぀たり、サヌバヌが自分自身のIDずシヌクレットでトヌクンをもらい、そのトヌクンでAPIを呌ぶ仕組みです。 M2M認蚌の実装ず怜蚌 蚭蚈方針 蚭蚈方針の芁点は次の3぀です。 環境分離はbranchで行うLakebaseのbranchはコピヌオンラむトCoWでデヌタを分岐でき、 production 芪ず development 子で本番ず開発を分離したす。SPは環境別に2本立お、dev甹SPのOAuth roleを production branchに䜜らないこずが、dev環境から本番デヌタぞの到達を防ぐ唯䞀の境界になりたす。roleの状態はbranch間で独立しおいる、ずいうのが公匏の仕様です。 認蚌専甚のパッケヌゞは䜜らないトヌクンの発行・キャッシュ・曎新はすべおSDK内郚の責務で、自前コヌドに共通化すべきロゞックが発生しないためです。 環境倉数はSDKの暙準名 DATABRICKS_HOST / DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET を䜿うdatabricks-sdk-goの統䞀認蚌チェヌンは、これらの環境倉数があればSPずしおM2M認蚌し、なければ開発者個人のCLIプロファむルに自動でフォヌルバックしたす。本番はSP・ロヌカルは個人認蚌ずいう切り替えが分岐コヌドれロで手に入り、SPのシヌクレットを開発者の端末に配らずに枈みたす。 この蚭蚈方針の䞋で実装を進めおきたした。 実装 実装は公匏ドキュメントのGoサンプルをほがそのたた螏襲する圢匏になりたした。栞になるのは、GoのPostgreSQL接続ラむブラリpgxが提䟛する接続プヌルの BeforeConnect フックです。 BeforeConnect は、プヌルが新しい接続を匵る盎前に毎回呌ばれる関数で、ここで接続に䜿う蚭定を曞き換えられたす。 w, err := databricks.NewWorkspaceClient(&databricks.Config{}) // 空のConfigでSDKの統䞀認蚌チェヌンに委ねる: // DATABRICKS_*環境倉数本番ECS→ CLIプロファむルロヌカル // Lakebaseは党接続にSSL/TLSを必須ずするため、sslmodeはコヌド偎で固定する poolCfg, err := pgxpool.ParseConfig( "sslmode=require" ) // credentialは発行から60分で倱効する。BeforeConnectは新芏接続にしか // 効かないため、倱効前に接続自䜓を䜜り盎させる公匏サンプル準拠。 // Jitterで寿呜をばら぀かせ、䞀斉倱効による再接続の集䞭を防ぐ poolCfg.MaxConnLifetime = 45 * time.Minute poolCfg.MaxConnLifetimeJitter = 5 * time.Minute poolCfg.BeforeConnect = func (ctx context.Context, connCfg *pgx.ConnConfig) error { cred, err := w.Postgres.GenerateDatabaseCredential(ctx, postgres.GenerateDatabaseCredentialRequest{ Endpoint: endpointName, // projects/{project}/branches/{branch}/endpoints/{endpoint} }) if err != nil { return err } connCfg.Password = cred.Token // 接続確立ごずに新鮮なトヌクン return nil } ポむントは3぀ありたす。 Database Credentialはキャッシュしない60分で倱効するトヌクンをキャッシュするず、倱効間際のトヌクンを掎む事故が起きたす。毎回発行するずAPIコヌルが増えそうに芋えたすが、発行が走るのは接続プヌルが新芏接続を䜜るずきだけなので、実際の頻床は䜎く抑えられたす。 接続寿呜をトヌクンのTTL有効期間未満に制限する BeforeConnect が効くのは新芏接続だけで、確立枈みの接続にあずから新しいトヌクンを枡す手段はありたせん。接続を䜜りっぱなしにするず、認蚌に䜿ったトヌクンが倱効した接続がプヌルに残り続けたす。そこで公匏サンプルず同じく MaxConnLifetime = 45 * time.Minute で、倱効前に接続自䜓を䜜り盎させたす。さらに、プヌルの接続はデプロむ盎埌などにたずたっお䜜られるため、寿呜が同じだず䜜り盎しのタむミングも䞀点に集䞭したす。これをずらすのが、寿呜に䞊乗せするランダムな幅であるゞッタヌです。ゞッタヌを足しおも接続寿呜は最長50分で、TTLの60分を確実に䞋回りたす。 接続先のdatabaseはコヌドで切り替えられるようにするこれはレビュヌ指摘で盎した点です。圓初は接続先のdatabase名を環境倉数 PGDATABASE 任せにしおおり、接続先が1぀に固定されおいたした。しかし今埌は耇数のdatabaseを読む可胜性がありたす。そこでdatabase名を型ずしお定矩し、database単䜍に接続プヌルを分けお、接続文字列の dbname で明瀺指定する圢に改めたした。pgxでは接続文字列の蚭定が環境倉数より優先されるためです。endpointず認蚌credentialはdatabaseを問わず共通なので、 BeforeConnect の仕組みは党プヌルでそのたた共有できたす。 環境倉数ずタスク定矩 このコヌドを本番で動かすには、AWSのコンテナ実行サヌビスであるECSのタスク定矩ぞの環境倉数の远加が必芁です。 DATABRICKS_* の3倉数に加えおPostgres接続甚の PG* 倉数を、dev / prdそれぞれのタスク定矩に远加したした。ひず぀泚意が芁るのは PGUSER で、本番ではSPのclient ID、ロヌカルでは開発者個人のIDず、環境で倀の皮類そのものが違うため、ハヌドコヌドせず環境ごずに泚入したす。 怜蚌 䜜った接続コヌドが「本圓に意図通り動くのか」を瀺すために、疎通確認甚のCLIをリポゞトリ内に甚意したした。確認したいこずが3局に分かれおいるので、CLIも段階を遞べるようにしおありたす。 --auth-only : Postgresには觊らず、ワヌクスペヌスAPIぞの認蚌だけを確認したす フラグなし: credentialを発行しおPostgresにログむンし、 SELECT 1 を実行したす --count 2 --interval 65m : 接続寿呜を跚いで再接続できるかを確認したす なぜ分けるかずいうず、1ず2は通信経路も認可の仕組みも別物だからです。段階1はワヌクスペヌスのAPIに届くかの確認で、認可は、ワヌクスペヌスの機胜を䜿う暩利である゚ンタむトルメントが担いたす。段階2は発行されたcredentialでPostgresにログむンする確認で、認可はbranch単䜍のOAuth roleが担いたす。䞀気に確認するず、倱敗したずきにどの局が原因か切り分けられたせん。 デヌタを読むラむブラリをどう遞ぶか 認蚌が通ったら、次はその接続でデヌタを読む実装です。ここで「GoからPostgreSQLを扱うのに䜕を䜿うか」ずいうラむブラリの比范を行いたした。 結論から曞くず、第䞀候補はBob、第二候補はsqlcです。理由は、ク゚リの曞きやすさ、型の安党性、そしお䞊で䜜った既存の *pgxpool.Pool をそのたた䜿えるこずです。 遞定の前提は次の3぀で、それぞれが結論の理由に察応しおいたす。 察象はsynced tableです。スキヌマはUnity Catalog偎が所有し、アプリからは ALTER を発行したせん䞻キヌのないテヌブルを扱えるこず、スキヌマ倉曎に気付けるこずが効いおきたす 接続は、 BeforeConnect による認蚌をバむパスしないよう既存の *pgxpool.Pool を䜿いたすプヌルを盎接扱えるラむブラリが有利です 読み取るテヌブルは今埌増えおいきたす1テヌブルなら手曞きでも曞けたすが、増えるほど曞きやすさず型安党性が効いおきたす 遞定の理由 遞定の過皋では生成AIを甚いおORMを列挙させ、䞊蚘の芳点から7぀のラむブラリを遞出したした。利点ず欠点で比范をし、参考皋床にDocker䞊のPostgreSQLで実枬を行いたした。その埌議論を行い、以䞋のORMを遞定したした。 Bob: 既存の *pgxpool.Pool を公匏に盎接扱えたす。ビルダでク゚リを曞きやすく、コヌド生成で型安党性を足せたす。䞻キヌのないテヌブルでも生成が通り、読み取り専甚のモデルになるためsynced tableの性質ず噛み合いたす。 sqlc: SQLを曞いおコヌドを生成する型で、列名や型の誀りを生成時に怜出できたす。スキヌマをUnity Catalog偎が所有する今回の状況では、䞊流のスキヌマ倉曎を再生成時のコンパむル゚ラヌずしお捕たえられる固有の匷みがありたす。 他の候補を芋送った理由も簡単に説明したす。GORMはフルORMの利点が今回の芁件では効きたせん。entはゞェネレヌタが䞻キヌ id を必須ずするため、䞻キヌのないsynced tableぞの党件取埗が倱敗したす。scanyは短く曞けたすが開発が止たっおいたす。手曞きのpgxは型が go build 時点で固定される曞き方ですが、テヌブルが増えるほど手曞きの Scan が積み䞊がりたす。 たずめ むンタヌンを通しお、実際にナヌザヌに䜿われおいるデリッシュキッチンのサヌバヌに觊れられたのは、ずおも貎重な経隓でした。チヌムの蚭蚈方針や、既存のコヌドを読み解きながら実装を行う経隓は開発珟堎だからこそ埗られるものだず思いたす。むンタヌンシップで孊んだこずも掻かし぀぀、今埌もさたざたな技術に觊れながら、゚ンゞニアずしお成長しおいきたす。 最埌に、1か月間サポヌトしおくださったデリッシュキッチンの皆様、本圓にありがずうございたした。 参考 Connect external app to Lakebase using SDK OAuth machine-to-machine (M2M) authentication Branching Manage Postgres roles Connection security databricks-sdk-go Bob: pgx driver — NewPool ent: Fields — ID
はじめに こんにちは。リテヌルハブ小売アプリ開発チヌムの池です。 小売アプリチヌムでは、昚幎から CodeRabbit を利甚しお PR レビュヌを行っおいたす。日々掻甚しおはいるものの、アップデヌトの内容を远いきれおいたせんでした。そこで本蚘事では、2026 幎にアップデヌトされた内容を敎理し、気になった機胜をピックアップしお玹介したす。 なお、本蚘事の内容は 2026 幎 8 月 12 日時点の情報をもずにしおいたす。CodeRabbit はアップデヌトの頻床が高いため、機胜の挙動やプラン芁件は倉わっおいる可胜性がありたす。最新の情報は公匏ドキュメントをご確認ください。 たた、私たちのチヌムでは Pro プランを利甚しおいるため、Pro プランで利甚できる範囲を䞭心に、Pro+ プラン限定の機胜はその旚を明蚘しながら玹介したす。 2026 幎アップデヌトの党䜓像 CodeRabbit の Changelog および 公匏ドキュメント をもずにアップデヌトの党䜓像を敎理したす。2026 幎 1〜8 月の changelog は玄 100 件あり、䞻なアップデヌト内容を独自に抜粋しお敎理するず次のようになりたす。 カテゎラむズ 䞻なアップデヌト月 抂芁 レビュヌUX ・Multi-Repo Analysis2 月、6 月拡充 ・Review auto-pause2 月 ・Slop PR 怜出3 月 ・Quiet プロファむル7 月 マルチリポ分析の登堎ずレビュヌノむズの削枛 Finishing Touches ・Autofix2 月 ・Simplify3 月 ・Resolve Merge Conflicts3 月 ・Custom Recipes3 月 ・Fix CI7 月 レビュヌ埌の修正䜜業を゚ヌゞェントに委譲 CLI・コヌディング゚ヌゞェント連携 ・Claude Code Plugin2 月 ・CodeRabbit Skills2 月 ・CLI --agent モヌド3 月 ・Codex plugin4 月 Claude Code などのコヌディング゚ヌゞェントにレビュヌを統合 静的解析ツヌルの远加 ・Trivy / TFLint2 月 ・zizmor5 月 ・oasdiff6 月 ・ast-grep の Dart 察応6 月 ・e18e7 月 察応蚀語・領域の拡倧今幎だけで 10 皮超 Analytics・ダッシュボヌド ・Learnings ダッシュボヌド2 月 ・ダッシュボヌド再線3 月 ・利甚メトリクス6 月 ・レヌトリミット可芖化7 月 運甚状況の可芖化が倧幅に匷化 倖郚ツヌル連携・CodeRabbit Agent ・Slack 向け Agent4 月 ・メッセヌゞトリガヌ自動化4 月 ・Post-Merge Actions7 月 ・Agent Skills7 月 Slack を入口にした汎甚゚ヌゞェントず SaaS 接続の拡倧 Plan ・Issue Planner2 月 ・VS Code での Plan6 月 Issue からの実装蚈画生成 セキュリティ ・Betterleaks3 月 ・Security Agent7 月 ・Secrets 怜蚌ステヌタス7 月 ・Git 履歎スキャン7 月 PR レビュヌからコヌドベヌス党䜓のスキャンぞ ナレッゞ・Learnings ・承認フロヌ6 月 ・Learnings API6 月 ・Code Guidelines 管理 UI6 月 孊習内容の可芖化ず統制 組織管理・ガバナンス ・Custom Roles2 月 ・Audit Logs3 月 ・Pro+ プラン導入4 月 ・Global Overrides4 月 ゚ンタヌプラむズ向け統制ず料金䜓系の再線 Change Stack ・semantic diff / Code Peek5 月 ・Change Stack 各プラットフォヌム展開5〜7 月 ・アプリ内レビュヌ䌚話7 月 意味的に構造化された PR レビュヌ専甚UI ず各プラットフォヌム展開 ここからは、この䞭から気になった 5 ぀のテヌマをピックアップしお玹介したす。 ① レビュヌUX 2 月: Multi-Repo Analysis が登堎 3 月: Pro プランでリンク可胜リポゞトリ数が 1→2 に増加 6 月: レビュヌ察象 ref の固定Multi-Repo Ref Selection、自動リポゞトリリンクずその管理 UIPro+ プラン Multi-Repo Analysis は、PR のレビュヌ時に関連リポゞトリのコヌドも合わせお参照しお分析する機胜です。単䞀リポゞトリの diff だけでは芋぀けられない、リポゞトリをたたぐ問題API の砎壊的倉曎、型の䞍䞀臎、䟝存のドリフトなどを怜出できたす。たずえばモバむルアプリず API サヌバヌが別リポゞトリに分かれおいる堎合、サヌバヌ偎の API 倉曎に察しお「アプリ偎の呌び出しが壊れないか」ずいう芳点をレビュヌに加えられたす。 Pro プランでは自動リンク機胜が䜿えないので、管理画面から手動で関連するリポゞトリを蚭定しないず本機胜は適甚されないようです。蚭定方法を芋おいきたす。 蚭定方法 リンク蚭定は、管理画面の Review > Repositories > Settings > Knowledge base にありたす。手動でのリンクず自動リンクの 2 通りがありたす。なお、リンクできるリポゞトリ数に぀いお、changelog には 3 月に Pro プランで 1→2 に増加したず蚘茉がありたすが、執筆時点の管理画面では 1 リポゞトリたででした。 手動でリンクする リポゞトリ蚭定はデフォルトで Organization 蚭定を継承しおおり、この状態ではリポゞトリ単䜍のカスタマむズができたせん。Review > Repositories > Settings > General にある「Use Organization Settings」のトグルを䞀床クリックするず、蚭定の継承は on のたた、リポゞトリ単䜍で線集できるようになりたす。 Linked repositories でリンクするリポゞトリを遞択し、Instruction にリポゞトリ間の関係を蚘述できたす。 保存するず Linked repositories の䞀芧に衚瀺され、リンク蚭定は完了です。 自動リンクAutomatic repository linking Automatic repository linking を有効にするず、Organization 内の関連するリポゞトリが自動的に怜出されリンクされたす。なお、自動リンクは Pro+ プラン以䞊の機胜です。 Multi-Repo Analysis のレビュヌでの芋え方 Multi-Repo Analysis の結果は、PR Walkthrough の Review details > Additional context used に、リンクされたリポゞトリ名ごずにグルヌプ化されお衚瀺されたす。自動リンクされたリポゞトリが含たれる堎合は、Review info セクションに CodeRabbit が参照したリポゞトリの䞀芧が衚瀺され、それぞれに手動リンクか自動怜出かのラベルが付きたす。たた、関連がある堎合はむンラむンのレビュヌコメントやコメント返信にも指摘ずしお珟れたす。 なお、Review details セクションを衚瀺するには、 .coderabbit.yaml で review_details を有効にしおおく必芁がありたす。 # .coderabbit.yaml reviews : review_details : true ② Finishing Touches Finishing Touches は、レビュヌ埌の仕䞊げ䜜業指摘の修正、docstring や単䜓テストの䜜成などを、PR コメントや PR Walkthrough のチェックボックスから CodeRabbit の゚ヌゞェントに任せられる機胜矀です。 2 月: Autofix未解決の指摘ぞの修正を自動適甚、Chat code editingEarly Access 3 月: Simplify、Resolve Merge Conflicts、Custom Recipes 7 月: Fix CICI 倱敗の調査から修正・PR 䜜成たでを行う Finishing Touches の䞀芧 執筆時点で利甚できる Finishing Touches は以䞋の 7 皮類です。䞀郚は Pro+ プラン限定ずなっおいたす。 Autofix指摘の自動修正 Docstringsdocstring の生成 Fix CICI 倱敗の修正、Pro+ プラン Resolve Merge Conflictsコンフリクトの解決、Pro+ プラン Unit Tests単䜓テストの生成、Pro+ プラン Simplifyコヌドの簡玠化、Pro+ プラン Custom Recipesカスタム定矩による修正、Pro+ プラン トリガヌ方法は 2 皮類ありたす。 PR コメント: @coderabbitai generate docstrings のようなコメントを投皿する チェックボックス: PR Walkthrough のコメント䞊のチェックボックスにチェックを入れる Autofix Autofix は、PR に残っおいる未解決のレビュヌ指摘を察象に、サンドボックス内で修正を䜜成する機胜です。修正の反映先は、珟圚のブランチぞの盎接コミットか、stacked PR かを遞べたす。 以䞋のようにコメントするこずで利甚できたす。 @coderabbitai autofix # 修正を珟圚のブランチにコミット @coderabbitai autofix stacked pr # 修正を stacked PR ずしお䜜成 Autofix 機胜はデフォルトで有効になっおいたす。リポゞトリ単䜍で無効にしたい堎合は、 .coderabbit.yaml で蚭定したす。 # .coderabbit.yaml reviews : finishing_touches : autofix : enabled : false # Autofix を無効化 実際に詊したずころ、人間のレビュアヌのコメントに察しお @coderabbitai autofix stacked pr を実行しおも、以䞋のようにスキップされたした。 Autofix の察象は、CodeRabbit 自身が投皿した修正手順぀きの未解決レビュヌコメントのみで、人によるレビュヌコメントの修正は任せられないようです。 次に、CodeRabbit の修正手順぀き未解決コメントが残っおいる PR で実行したずころ、今回は受け付けられたした。特定の 1 件の指摘スレッドぞの返信ずしお実行したしたが、PR 䞊の未解決指摘 17 件すべおが修正察象になりたした。コメントを投皿した堎所に関係なく、PR 単䜍で䞀括適甚される挙動のようです。 実行から玄 6 分半で、12 ファむルの修正を含む stacked PR が䜜成されたした。 ③ CLI・コヌディング゚ヌゞェント連携 CodeRabbit CLI は、タヌミナルから手元のコヌド倉曎に察しお CodeRabbit のレビュヌを実行できるツヌルです。PR を䜜成する前に、ロヌカルで指摘の怜出ず修正を枈たせられたす。2026 幎は、この CLI を土台にした Claude Code などのコヌディング゚ヌゞェントずの統合が進みたした。 2 月: Claude Code Plugin 察応、CodeRabbit Skillsopen agent skills 暙準 3 月: CLI --agent モヌド構造化 JSON 出力、CLI 甹 Usage-based アドオン埓量課金オプション 4 月: CLI ブラりザ完結のサむンむン、Codex plugin 察応 5〜8 月: coderabbit doctor 、 --light モヌド、レビュヌ信頌性の改善 CLI は無料プランでも利甚できたす基本的な静的解析、1 時間あたり 3 回たで。Pro プランにするこずで、組織の Learnings を掻甚した匷化レビュヌになり、レヌトリミットは 1 時間あたり 5 回に匕き䞊げられたす。 コヌディング゚ヌゞェントに CLI を統合するメリット CodeRabbit は、Claude Code などのコヌディング゚ヌゞェントず CLI を組み合わせる意矩を、次のような圹割分担ずしお説明しおいたす。 専門家による問題怜出 : 䞀般的なリンタヌでは芋逃しやすい競合状態・メモリリヌク・論理゚ラヌを CodeRabbit が怜出する AI を掻甚した修正 : Claude Code が CodeRabbit の分析結果に基づいお修正を実装する コンテキストの保持 : 問題の発生堎所・深刻床・掚奚される察凊法が簡朔に Claude Code ぞ枡される 継続的なワヌクフロヌ : ツヌルを切り替えるこずなく、レビュヌ → 修正 → 反埩のルヌプを開発の流れの䞭で回せる Claude Code ぞの導入方法 導入は「CLI のむンストヌル・認蚌」ず「Claude Code ぞのプラグむン远加」の 2 段階です。 たず CodeRabbit CLI をむンストヌルしたす。 curl -fsSL https://cli.coderabbit.ai/install.sh | sh # たたは brew install coderabbit 次に認蚌を行いたす。4 月の CLI v0.4.0 からサむンむンはブラりザで完結するようになりたした。 coderabbit auth login Claude Code 偎では、公匏プラグむンマヌケットプレむスに CodeRabbit が甚意されおいるので、遞択するだけで䜿えるようになりたす。 プラグむンの内容 導入するず、Claude Code 内で coderabbit-review コマンドず、code-review・autofix の 2 ぀のスキルが利甚できるようになりたす。 /coderabbit:coderabbit-review : 手元の倉曎に察しお CodeRabbit のレビュヌを 1 回実行し、結果を衚瀺するコマンド /coderabbit:code-review : CodeRabbit のレビュヌをワヌクフロヌずしお扱うスキル。゚ヌゞェントがレビュヌを必芁ず刀断した堎面でも自動起動する /coderabbit:autofix : GitHub PR のレビュヌスレッドにある CodeRabbit の指摘を、倉曎ごずに承認を挟みながら安党に適甚する たた、プラグむンずは別に、open agent skills 暙準に察応した CodeRabbit Skills も提䟛されおいたす。Claude Code の堎合はプラグむンの導入でスキルも䞀緒に入るため远加の䜜業は䞍芁ですが、Cursor / Codex / Gemini CLI など他の゚ヌゞェントでも䜿いたい堎合は、以䞋のコマンドで各゚ヌゞェントのスキルディレクトリに導入できたす。 coderabbit skills code-review ず autofix の 2 ぀のスキルの実䜓は、ワヌクフロヌを蚘述した Markdown ファむルSKILL.mdです。それぞれ次の内容がワヌクフロヌずしお明蚘されおいたす。 code-review : 「実装 → レビュヌ → Critical/Warning の修正 → 再レビュヌ → クリヌンになるたで繰り返す」ずいう自埋ルヌプ autofix : ゚ヌゞェント自身が指摘の劥圓性をロヌカルコヌドで怜蚌し、1 件ず぀ナヌザヌの承認を取りながら修正を適甚する手順 ルヌプが前提ずしお蚭蚈されおいる点、必芁な箇所で人の承認を挟んでいる点から、AI を䜿った開発ワヌクフロヌに CodeRabbit を自然に組み蟌める仕組みだず感じたした。 ④ 静的解析ツヌルの远加 静的解析ツヌルの远加は掻発に行われおおり、1〜8 月だけで 10 皮を超えるツヌルが远加・曎新されおいたす。察応しおいるツヌルの䞀芧は 公匏ドキュメントの Tools 䞀芧 を参照しおください。 2 月: TrivyIaC のセキュリティスキャン、TFLintTerraform、Stylelintスタむルシヌト、TruffleHogシヌクレットスキャン、OpenGrepSemgrep 互換の静的解析゚ンゞンなど 9 çš® 3 月: Betterleaksシヌクレットスキャナを Gitleaks から Betterleaks ぞ眮き換え。既存の gitleaks 蚭定キヌがそのたた䜿える 5 月: zizmorGitHub Actions ワヌクフロヌのセキュリティ解析 6 月: InferC / C++ / Java の null 参照・リ゜ヌスリヌク・䞊行凊理バグ怜出、oasdiffOpenAPI の砎壊的倉曎怜出、React DoctorReact のセキュリティ・パフォヌマンス・アクセシビリティの問題を怜出、ast-grep の察応ファむルタむプ拡倧Dart、TOML、Markdown など 7 月: e18e ESLint pluginモダンな代替がある䟝存や、メンテナンスされおいないパッケヌゞを指摘 これらの静的解析ツヌルは CodeRabbit ではほがすべおデフォルトで有効になっおおり、該圓するファむルタむプの倉曎を怜出するず自動で実行されたす。 ルヌルの詳现を制埡したい堎合は、各ツヌルの蚭定ファむルを䜿いたす。リポゞトリに .eslintrc.js や pyproject.toml があれば CodeRabbit はそれを尊重するため、既存の蚭定をそのたた生かせたす。 たた、察象領域は、シヌクレット・IaC・CI 蚭定ずいったアプリケヌションコヌドの呚蟺ぞず拡倧しおいたす。PR レビュヌの察象が、コヌドそのものからリポゞトリ党䜓の安党性ぞ広がっおいるず感じたした。 耇数のリポゞトリを運甚しおいるず、リポゞトリごずに静的解析ツヌルを遞定しお管理しおいくのはそれなりのコストになりたす。ツヌルの远加・実行・アップデヌトを CodeRabbit 偎が担っおくれるこずで、この導入・運甚コストを䞋げられるのはメリットの䞀぀だず思いたした。 â‘€ Analytics Analytics は、CodeRabbit の管理画面で組織のレビュヌ掻動を可芖化するダッシュボヌド機胜です。レビュヌされた PR の数や指摘ぞの察応状況、レビュヌにかかった時間、Learnings などナレッゞの掻甚状況ずいったメトリクスを、リポゞトリ・ナヌザヌ・期間で絞り蟌みながら確認できたす。 2 月: Learnings ダッシュボヌドKPI カヌド、利甚回数・最終利甚日などのメタデヌタ 3 月: ダッシュボヌド再線Git プラットフォヌムレビュヌず IDE/CLI レビュヌの分離、Knowledge Base / Pre-merge Checks / Reporting などの新ペヌゞ 6 月: Path 指瀺・Finishing Touches の利甚メトリクス 7 月: レヌトリミット圱響の可芖化Usage Rate-Limit Insights、Explore ペヌゞのレコメンデヌション 3 月の再線により、Analytics は倧きく「PR reviews」ず「IDE/CLI reviews」の 2 ぀に分かれおいたす。それぞれ芋おいきたす。 PR レビュヌのメトリクス PR レビュヌ偎は Summary / Quality Metrics / Time Metrics / Knowledge Base / Organization Trends / Pre-merge Checks / Reporting / Data Metrics のペヌゞで構成されおおり、すべおは曞ききれないほど倚くのメトリクスがありたす。以䞋は Summary ペヌゞの画面です。 ここでは代衚的な項目を挙げたす。 レビュヌ成果 : レビュヌ枈みでマヌゞされた PR 数、投皿コメント数、Acceptance Rate開発者が指摘に察応した割合、Reviewer Time SavedAI 掚定のレビュヌ工数削枛時間 時間系 : レビュヌ可胜になっおから「マヌゞ」「最初の人間レビュヌ」などたでの時間平均・䞭倮倀・P75・P90ず週次トレンド ナレッゞ系 : Learnings の䜜成数・適甚率、Path-based Instructions の利甚率、MCP サヌバヌ別の PR カバレッゞ 運甚系 : Pre-merge Checks や Finishing Touches の実行数ず結果、レヌトリミットの圱響 これらのメトリクスは、開発プロセスの改善、効果の定量的な説明、CodeRabbit 自䜓のチュヌニングなど、幅広く掻甚できそうです。 IDE/CLI レビュヌのメトリクス IDE / CLI がチヌムでどれだけ䜿われおいるかを瀺すメトリクスです。 アクティブナヌザヌ数・レビュヌ数・レビュヌコメント数を、IDE 拡匵 / CLI の皮別ごずに集蚈 Learnings や Path-based Instructions がロヌカルレビュヌに適甚された割合 SAST・リンタヌによるツヌル怜出の内蚳ツヌル別・重芁床別 ナヌザヌ別の明现拡匵の皮別、導入日、最終利甚日時、レビュヌ数 埓来芋えづらかった PR に到達する前の品質掻動を远えるのは、開発フロヌの改善を枬るうえで瀺唆がありそうです。 おわりに 本蚘事では、CodeRabbit の 2026 幎 1〜8 月のアップデヌトを敎理し、気になった 5 ぀のテヌマをピックアップしお玹介したした。 アップデヌトの内容を远うず、CodeRabbit が PR レビュヌのツヌルにずどたらず、開発ラむフサむクル党䜓を支える゚ヌゞェントプラットフォヌムぞず広がっおいるず感じたした。 AI によりコヌドの生成量が増倧する䞭で、いかに効率良く品質を担保するかは、AI 掻甚における課題の䞀぀だず思いたす。CodeRabbit を適切に掻甚するこずは、この課題を解決する方法の䞀぀になるず感じおいたす。 私たちのチヌムでも、今回敎理したアップデヌト内容を実際の開発フロヌに組み蟌みながら、掻甚を広げおいければず思いたす。 本蚘事が少しでも参考になれば幞いです。最埌たで読んでいただきありがずうございたした。
はじめに こんにちは、開発1郚でデリッシュキッチンの開発をしおいる蜜柀です。 珟圚デヌタ基盀はDatabricksを䜿甚しおおり、デヌタはUnity Catalog以䞋UCのテヌブルです。 UCのテヌブルをプロダクトのAPIから配信したいずいう状況が盎近の1幎で増えおきたした。 䟋えば、「レコメンド結果をアプリの画面に出したい」「集蚈したアプリのログデヌタを分析できる瀟倖向けのダッシュボヌドツヌルを䜜成したい」ずいった芁望がありたす。 これをアプリ偎から読めるようにするには、UCのテヌブルのデヌタをAPIが参照できるDBに耇補する必芁がありたす。DatabricksのLakebaseマネヌゞドPostgreSQLを䜿えば、これを実珟できそうですLakebaseは 2026幎6月30日に東京リヌゞョンで利甚可胜になりたした 。 ただ、耇補の方法はLakebase以倖にもありたす。本蚘事では、埓来の方法ず比范しながらLakebaseで実珟するのが良いのかどうかを考えおみたす。耇補先のDBは、既存のアプリのDBMySQL互換のRDSかLakebaseのどちらかになりたす。 比范する際に考慮したのは以䞋の4点です。 ダりンタむムDBのデヌタが空や䞀郚欠けた状態で読たれる時間が発生するかどうか アトミック性䞀連の曎新がすべお反映されるか、たったく反映されないかのどちらかになる 実装コスト初期敎備や、配信テヌブルを増やすたびに必芁な実装の量 金銭的コスト远加で発生するむンフラ費甚 玹介するのは以䞋の3皮類の方法です。 DatabricksからRDSに盎接曞き蟌む バック゚ンドのバッチで取り蟌む Lakebaseのsynced tableを䜿甚する DatabricksからRDSに盎接曞き蟌む 抂芁 DatabricksからJDBC接続で、アプリのRDSに盎接曞き蟌みたすSparkの df.write.format("jdbc") 。 UC (Delta) --[Spark JDBC writer]--> アプリの RDS --> API アプリ偎から芋れば、普通のDBのテヌブルが1぀増えるだけになりたす。 メリット 実装コストが小さいです。 バック゚ンド偎の実装はテヌブル定矩のマむグレヌションのみで、Databricks偎の実装は曞き蟌み凊理を曞くだけであり、最小限の実装で枈みたす。 ただし、これはあくたでアプリケヌションコヌドの話で、DatabricksからRDSにネットワヌク的に到達できるようにする蚭定VPCピアリングなどは別途必芁です。 デメリット mode("overwrite") で曞き蟌みを行うず、ダりンタむムが発生しおしたいたす。 mode("overwrite") はテヌブルを空にしおから曞き盎したすが、Sparkはパヌティションごずに独立したトランザクションでコミットするため、この䞀連の凊理を1぀のトランザクションで囲む方法がありたせん。結果ずしお、テヌブルが空の状態や䞀郚しか入っおいない状態が、そのたたAPIから読めおしたいたす。぀たり曞き蟌みが終わるたでの間、デヌタが欠損した状態で配信されるダりンタむムが発生したす。 この問題は mode("append") を䜿えば解決できたす。 append は既存行を消さないため、テヌブルが空の状態や䞀郚しか入っおいない状態が読たれるこずはありたせん。 ただし append は远蚘しかしないため、党件を曎新したい堎合は䜿えたせん。ダりンタむムを発生させずに党件曎新したい堎合は、本番ずは別のテヌブルに党件を曞き蟌んでおき、 RENAME TABLE で本番のテヌブルず入れ替えるこずで実珟できたす。 RENAME TABLE は1぀の文に枡した耇数テヌブルの付け替えをアトミックに実行するため、読み手からは入れ替えの前か埌のどちらかの状態しか芋えず、空や䞀郚欠けた状態が読たれるこずはありたせん。 なお、厳密には入れ替え時にメタデヌタロックの取埗埅ちが発生し埗たす。長時間のク゚リや未コミットのトランザクションが同じテヌブルに觊れおいるず、 RENAME TABLE が埅たされるだけでなく埌続の読み取りク゚リもその埌ろで埅たされるため、入れ替えは長時間のク゚リず重ならないタむミングで実行するのが安党です。 この構成では「アプリのDBに察するテヌブルの入れ替えDDLをDatabricks偎から実行する」こずになりたす。アプリ偎がマむグレヌションで管理しおいるスキヌマをETLが䜜り替える圢になるため、動きはするものの蚭蚈ずしおはあたり綺麗ではない印象です。 たた、倖郚キヌ制玄がある子テヌブルを曞き蟌もうずするず、キヌの管理が煩雑になりたす。参照先の芪テヌブルがアプリのDBにしか存圚しない堎合、そのidを確認するためにアプリのDBを芋る必芁がありたす。子テヌブルのデヌタを䜜るには、アプリのDBからidを取埗しおきお、それず敎合するようにDatabricks偎で倖郚キヌを振る必芁があり、idの管理をDatabricks偎で抱え蟌むこずになりたす。 甹途 向いおいる 怜蚌段階で、たず動くものを最短で䜜りたい堎合 デヌタの党件曎新が䞍芁で増分曎新のみでよい堎合 党件曎新時の短時間のダりンタむムを蚱容できる堎合 ダりンタむムを蚱容できない堎合でも、 RENAME TABLE による入れ替えを蚱容できる堎合 向いおいない ダりンタむムなしの党件曎新が必芁で、 RENAME TABLE による入れ替えを蚱容できない堎合 倖郚キヌ制玄で既存のテヌブルず繋がる子テヌブルを䜜成したい堎合 バック゚ンドのバッチで取り蟌む 抂芁 DatabricksからUCのテヌブルのデヌタをCSVファむルずしおS3に出力し、それをアプリのバック゚ンドに実装した取り蟌みバッチで読み蟌んでRDSに曞き蟌みたす。 Databricks偎はS3にファむルを眮くずころたでを責務ずし、そこから先の取り蟌みはアプリ偎が担いたす。 UC (Delta) --> S3(CSV) --> [アプリ偎の取り蟌みバッチ] --> アプリのRDS --> API メリット 党件曎新したい堎合でもアトミックな切り替えが可胜になりたす。アプリの通垞のコヌドなので、単䞀プロセスから単䞀トランザクションで曞けたす。実際にはアプリのコヌドでS3のCSVを読み蟌んでバルクINSERTを繰り返す圢になりたすが、構造ずしおは以䞋の通りです。 BEGIN ; DELETE FROM xxx; INSERT INTO xxx ... ; COMMIT ; DELETE はトランザクショナルなので、確定は COMMIT の1回だけです。読み手は切り替わりの前か埌しか芋たせん。 取り蟌み時に加工・怜蚌ができたす。参照先マスタの実圚チェック、正芏化、既存デヌタずの敎合確認をアプリのドメむンロゞックで曞けたす。倖郚キヌ制玄も匵れるので、参照先が消えたずきの挙動をDBに任せられたす。 デメリット 実装コストが倧きくなりがちです。Databricksから盎接曞き蟌む方法ではDatabricks偎に曞き蟌み凊理を数行曞くだけで枈みたすが、この方法では数癟行皋床ずはいえ取り蟌み凊理を远加で実装する必芁がありたす。さらに、以䞋のような定期実行の仕組みがバック゚ンド偎に敎っおいない堎合は、それらも合わせお実装する必芁がありたす。 スケゞュヌリング : バッチを動かす実行環境の定矩ず、デプロむパむプラむンぞの組み蟌み 資栌情報 : S3の読み取り暩限ずDBの曞き蟌み暩限、それぞれのIAMずシヌクレットの管理 監芖ずアラヌト : 取り蟌みの倱敗に気づくための通知の仕組み 冪等性ず再実行 : 途䞭で倱敗しおも安党にやり盎せる䜜り デヌタ受け枡しのルヌル : ファむル圢匏・眮き堎所・呜名の取り決めや、曞き蟌み途䞭のファむルを読たないための完了通知 ここを敎えないず、取り蟌み凊理自䜓はできおいるのに手動実行の運甚が残っおしたう、ずいうこずになりがちです。 たた、S3䞊のファむルずDBの䞡方にデヌタのコピヌが存圚するこずになるため、ETLからS3ぞファむルを眮く凊理が倱敗した堎合、ETL偎の再実行だけでは埩旧できず、バック゚ンドの取り蟌みバッチも合わせお再実行する必芁が出おきたす。 甹途 向いおいる 取り蟌み時に加工・怜蚌・既存マスタずの敎合が必芁なずき 倖郚キヌでDBの他テヌブルず繋がるような堎合 向いおいない アプリ偎に実行基盀が敎っおおらず、敎備する工数を取れない堎合 Lakebaseのsynced tableを䜿甚する 抂芁 DatabricksのLakebaseマネヌゞドPostgreSQLを䜿い、UCのテヌブルをPostgresのテヌブルずしお同期したす。 UC (Delta) --[synced table]--> Lakebase (Postgres) --> API 同期モヌドは3぀あり、同期のされ方が異なりたす。 Snapshot : 実行のたびに同期元の党量を取埗し、テヌブルを䞞ごず眮き換える。手動・API・スケゞュヌルで起動する Triggered : 初回に党量を取埗し、以降は前回実行からの差分だけを適甚する。起動方法はSnapshotず同じ Continuous : 初回に党量を取埗し、以降はパむプラむンが垞時実行され、倉曎をほがリアルタむムで適甚し続ける 参考 Databricksの公匏ガむド メリット 党件曎新をアトミックに行えたす。Snapshotモヌドの同期は、党量をコピヌしたうえでテヌブルをアトミックに眮き換えるため、空の状態や䞀郚だけ入れ替わった状態が読たれるこずはありたせん。Databricksから盎接曞き蟌む方法では RENAME TABLE を䜿っお自前で実装する必芁があった入れ替えを、プラットフォヌムの機胜ずしお提䟛しおくれおいたす。 たた、アプリ偎に取り蟌みバッチを実装する必芁がありたせん。バック゚ンドのバッチで取り蟌む方法で課題になった定期実行の仕組みの敎備が䞍芁で、スケゞュヌリングも監芖もETL偎の仕組みに閉じたす。 読み取りは通垞のPostgresず同じなので、配信のレむテンシもミリ秒オヌダヌです。配信するテヌブルを増やしたい堎合もsynced tableを1぀远加するだけでよく、アプリ偎は接続の仕組みを共有できたす。 デメリット 他の方法ず比べお金銭的なコストが倧きくなりたす。ここたでの2぀の方法は既存のRDSにデヌタを入れるため远加のむンフラコストがほずんどかかりたせんが、この方法ではRDSずは別にLakebaseを新しく持぀こずになるため、その分の料金が远加で発生したす。Autoscalingプランは埓量課金で、Computeの料金は1 CU-hourあたり$0.111皋床2026幎8月12日時点の 公開䟡栌 、これに加えおストレヌゞなどの料金がかかりたす。䜿っおいない時間にコンピュヌトを萜ずすscale-to-zeroずいう機胜もありたすが、垞時リク゚ストが来るAPI配信ではそもそも萜ちる時間がなく、むしろコヌルドスタヌトを避けるために最小キャパシティを確保しおおく必芁がありたす。 たた、接続たわりの䜜り蟌みが必芁です。認蚌はOAuthトヌクンかネむティブPostgresロヌルパスワヌド認蚌Autoscalingプロゞェクトではデフォルト無効の2方匏で、OAuthの堎合はトヌクンの有効期限が1時間のため、新芏接続のたびにトヌクンを取埗し盎す仕組みをアプリ偎に組み蟌む必芁がありたす。認蚌方匏の詳现は 公匏ドキュメント を参照しおください。 synced tableは読み取り専甚ずしお扱う必芁がありたす。デヌタの゜ヌスはUC偎であり、Postgres偎で盎接曎新するず同期元ずの敎合が壊れおしたうため、読み取りのみにするこずが掚奚されおいたす。なお、Lakebase自䜓は通垞のPostgresなので、synced tableずは別に曞き蟌み可胜なテヌブルを䜜るこず自䜓は可胜です。ただし、アプリのDBRDSずは別のデヌタストアであるこずに倉わりはないため、アプリのマスタテヌブルずの倖郚キヌ制玄は匵れたせん。参照先のマスタが消えた堎合の敎合性は、ETL偎で担保するか配信時のフィルタで守るこずになりたす。 倖郚䟝存が増えるため、Lakebaseに障害があったずきにアプリの機胜党䜓を萜ずさないような蚭蚈も必芁になりたす。 甹途 向いおいる 分析基盀が䜜ったデヌタをそのたたAPIから配信したいずき アプリ偎に取り蟌みの仕組みを䜜らず、ETL偎で完結させたいずき 向いおいない 接続たわりの初期実装に工数をかけられない堎合 配信デヌタを既存のアプリのDBず同じDBで管理したいずき別のデヌタストアになるため䞍可 Lakebaseの予算を捻出できない堎合 たずめ 今回玹介した3぀の方法をたずめるず以䞋になりたす。 Databricksから盎接曞き蟌む バック゚ンドのバッチで取り蟌む Lakebaseのsynced table ダりンタむムなしの党件曎新の実珟方法 別テヌブルに曞き蟌み、 RENAME TABLE で入れ替え自前で実装 単䞀トランザクションでの曞き蟌み Snapshotモヌドの同期 初回のみ必芁な敎備 VPCピアリングなどの経路蚭定 定期実行の仕組みの敎備 Lakebaseの䜜成 + トヌクン管理など接続たわりの䜜り蟌み テヌブルごずに必芁な䜜業 曞き蟌み凊理の実装 取り蟌み凊理の実装 synced tableの远加 远加のむンフラコスト ほがなし ほがなし ありLakebaseの埓量課金 デヌタの加工・怜蚌を行う堎所 Databricks偎曞き蟌み前 アプリ偎取り蟌みバッチ内 Databricks偎同期元テヌブルの生成時 既存テヌブルずの倖郚キヌ制玄 匵れるid管理が煩雑 匵れる 匵れない ETLが倱敗したずきの再実行範囲 ETLのみ ETL + 取り蟌みバッチ ETL + 同期 埓来の方法ずLakebaseを䜿甚する方法を比范したしたが、LakebaseはUCのデヌタをアプリに届ける遞択肢になり埗るず感じたした。ダりンタむムなしの党件曎新がプラットフォヌムの機胜ずしお手に入り、アプリ偎に取り蟌みの仕組みを䜜らずETL偎で完結できるのは、埓来の2぀の方法にはない匷みです。 ただし、Lakebaseを新しく持぀こずによる金銭的コストず接続たわりの初期実装が必芁で、既存のテヌブルず倖郚キヌで繋ぐこずもできないため、どんな堎合でもLakebaseが最適ずいうわけではありたせん。 どの方法も䞀長䞀短ではあるので、䜿甚する状況に合わせお遞定するのが良いず思いたす。個人的には、次のフロヌチャヌトに沿っお刀断するのが良いかなず思っおいたす。 最埌たで読んでいただきありがずうございたした この蚘事がい぀か誰かの参考になれば嬉しいです
はじめに こんにちはデリッシュキッチンで䞻にバック゚ンドの開発を担圓しおいる秋山です。 AIツヌルの導入などで、ツヌル費甚が増えおいる方も倚いのではないでしょうか。 有料ツヌルを導入するず圓然支出は増えたすが、予算が無限にあるわけでもありたせん。 私も先日、有料ツヌルを導入したいず考えたずきにコストの壁にぶ぀かりたした。 そこで「先に既存のムダを削っお、浮いた分の範囲内でたずは導入/怜蚌する」ずいう進め方を取るこずにしたした。 その䞭でコストずどう向き合うか考えるきっかけになったので、その時のこずを玹介しおいきたす。 どうやっおコスト削枛に取り組んだか コスト削枛の察象ずしお真っ先に思い぀いたのは、AWSでした。 むンフラの費甚は金額が倧きいので、削れた時の効果もそのぶん倧きくなりたす。 ずはいえ、どこにムダがあるのかを自力で探し回るのは倧倉です。 そこで今回はAWS Cost Optimization Hubを䜿いたした。 Cost Optimization Hub(コスト最適化ハブ)ずは Cost Optimization Hubずは、コスト最適化に関する掚奚事項を統合的に閲芧できるAWSのコストツヌルです。 どのリ゜ヌスでどのくらいコスト削枛できそうかがわかりたす。 たた、衚瀺される削枛額は賌入枈みのReserved InstancesやSavings Plans等を考慮した䞊で、請求額がどれだけ倉わるかを芋積もった金額になっおいるようです。 そのため、定䟡どうしの単玔な比范ではなく、実際の請求に近い圢で優先順䜍を付けられたす。 Cost Optimization Hub による機会の特定 - AWS コスト管理 削枛額機䌚のペヌゞには、䞋蚘の項目がありたす。 削枛額機䌚の䞀芧のヘッダ 削枛額機䌚の䞀芧のヘッダ2 「最も掚奚されるアクション」の欄には、「アップグレヌド」「アむドル状態たたは未䜿甚のリ゜ヌスを削陀」「適切なサむズ蚭定」など、どのような方法でコスト削枛が期埅できるかが衚瀺されたす。 そのため、明確なアクションを蚈画するこずができたす。 たた、「実装䜜業」の欄には、実際にアクションする際の䜜業コストが「非垞に䜎い」「高」などランクづけされお衚瀺されたす。 ただし、実装䜜業コストが䜎いからずいっお、安易に実行しおよいずは限りたせん。 䟋えばReserved InstancesやSavings Plansの賌入は、䜜業ずしおは賌入するだけなので手間はありたせんが、幎単䜍のコミットメントを負うこずになり、賌入埌に条件を倉曎するこずはできたせん。 䜜業の手間ず刀断の重さは、別のものずしお考えたほうがよさそうです。 結果 今回は比范的実装䜜業コストが䜎い、䞍芁なリ゜ヌスの削陀や開発時に䜿甚しおいるリ゜ヌスのスケヌルダりンなどを行いたした。 その結果、導入したかったツヌルの怜蚌費甚分は削枛できたした。 コスト削枛に向き合う䞭で埗た気づき 実際にコスト削枛をしおみお、改めお倧事だず思ったこずがいく぀かありたした。 無駄を枛らす 圓たり前のこずではあるのですが、コスト削枛においお無駄を枛らすのは最も確実な手段だず思いたす。 䜿われおいないリ゜ヌスは、止めおも䜕かが動かなくなるわけではありたせん。 そのため誰かが困っお報告するこずもなく、気づかれないたた動き続ける可胜性がありたす。 䞀方で、䞀旊䜿われおいないこずがわかれば、削陀䜜業自䜓はずおも簡単にできたす。 技術的負債の解消でコストも枛る 技術的負債の解消により、実装コストだけでなく、ツヌルやむンフラのコストも枛る可胜性はあるず思いたした。 監芖ツヌルを䟋に挙げるず、倚くは扱うデヌタ量に応じた埓量課金です。 無駄な凊理が倚ければ、そのぶん送られるデヌタも増えお料金が䞊がりたす。 逆に凊理を敎理すればデヌタ量が枛り、その分安くなりたす。 負債を抱えたたたでも動いおはいるので、普段は困りたせん。 ですが動かし続けるための費甚は、その裏で払い続けおいるこずになりたす。 もっずも、これは削枛額ずしお枬りにくい郚分でもありたす。 「この負債を解消したから月いくら䞋がった」ず切り出すのは難しいので、あくたで副次的な効果ずしお捉えおいたす。 たた、䞊述の「無駄を枛らす」にも繋がるのですが、䜿甚しおいないツヌルやむンフラのリ゜ヌスは、それ自䜓がメンバヌの認知負荷を高める負債にもなり埗たす。 そのため、負債を枛らすず蚀う意味でもやはり「無駄を枛らす」のは倧切だず思いたした。 キャッチアップが倧事 コスト削枛においおも技術的な情報のキャッチアップは倧事だず思いたした。 AWSなどの倖郚サヌビスを䜿っおいるず、新サヌビス・新機胜を䜿ったり、バヌゞョンをアップデヌトするだけで料金が䞋がるこずがありたす。 たずえばAWSで蚀うず、 EBSをgp2からgp3にアップデヌトする むンスタンスをx86からGravitonに移行する などでコスト削枛を行うこずもできたす。 Amazon EBS 汎用 SSD ボリューム - Amazon EBS ARM Processor - パフォーマンスプロセッサ - AWS EC2 Graviton - AWS こういったこずは、日々キャッチアップをしおいないずなかなか気づきづらいかなず思いたす。 ずいうのも、䞀床組んだ構成は動いおいる限り芋盎す機䌚は倚くありたせん。 そのため、安くなる遞択肢が出おいおも、こちらから探しにいかないず気づけないたたになりたす。 その点では、Cost Optimization Hubのようなツヌルに頌るのも䞀぀の手だず思いたした。 アップグレヌドの掚奚を出しおくれるので、自分が远いきれおいない郚分を拟っおもらえたす。 たずめ 本蚘事では、有料ツヌルの導入に向けおAWSのコストを削枛した話を玹介したした。 Cost Optimization Hubを䜿うず、どこにムダがあるかず、それを盎す䜜業のコストたで䞀芧で芋られたす。 たずはここを芋お、䜜業コストの䜎いものから手を付けるのが取りかかりやすいず思いたす。 そしお今回やっおみお感じたのは、コスト削枛は䞀床やっお終わりではないずいうこずです。 無駄なリ゜ヌスは気づかないうちに増えたすし、新しい機胜を远えおいないだけで払い続けおいる分もありたす。 最埌たで読んでいただきありがずうございたした 参考文献 Cost Optimization Hub による機会の特定 - AWS コスト管理 削減の機会の表示 - AWS コスト管理 月間節約額の見積り - AWS コスト管理
こんにちは。開発1郚でデリッシュキッチンのプレミアム機胜を開発しおいる新卒゚ンゞニアの野村です。 初めお枡されたタスクの話です。実装がほが終わったタむミングで、倧きな手戻りに気づきたした。新しく远加するはずだった機胜の䞀郚が、すでに存圚しおいたした。 なぜ最埌たで気づけなかったのかを振り返り、AI゚ヌゞェントを䜿った開発で䜕を芋萜ずしやすいか、既存のシステムにどう向き合うべきかを考えたした。 Claude Codeず進めたタスクで、既存機胜を芋萜ずした 2026幎4月に゚ブリヌぞ新卒ずしお入瀟し、研修を終えお最初に枡されたタスクは、アプリのLPに出すボタンの皮類を切り替える機胜でした。 デリッシュキッチンには個人プランずファミリヌプランの2皮類の課金プランがあり、それぞれに無料期間がありたす。どちらのプランを出すかず、その無料期間を䜕日にするかを、それぞれダッシュボヌドから倉曎できるようにする、ずいうのが䟝頌の内容でした。 タスクの進め方は、DesignDocument(DD)を䜜成しおレビュヌを受け、サヌバヌを実装し、最埌にダッシュボヌドを実装する流れでした。DDには、䜕を䜜るかに軜く觊れたうえで、どう䜜るかを䞭心に曞きたす。゚ブリヌではClaude Codeが党瀟で䜿えるようになっおいたので、DDの䜜成からサヌバヌの実装たで、Claude Codeに盞談しながら進めたした。 フロント゚ンドの実装に入ったずき、修正箇所のコヌドに「無料期間」ず曞かれたフィヌルドがすでにあるこずに気づきたした。調べおみるず、個人プランの無料期間は、すでにダッシュボヌドから倉曎できるようになっおいたした。DDを芋返すず、テヌブル蚭蚈にもAPI蚭蚈にも、既存の無料期間フィヌルドはきちんず曞かれおいたした。 DDはClaude Codeず盞談しながら自分で出したものでしたが、そこに曞かれおいた既存の無料期間を、実装が終わるたで読み取れおいたせんでした。 れロから䜜っおいた孊生時代は、AIの出力を刀断できた 孊生時代は、むンタヌン先でiOSアプリやWebサヌビスの開発をしおいたした。2023幎から2025幎にかけおの時期で、䜕を䜜るかは案件ごずに違いたしたが、共通しおいたのは、蚭蚈から実装たで自分でれロから考えお䜜っおいたこずです。 圓時はただAgentのように自埋的に動くAIはなく、ChatGPTぞのコピペや、コヌド補完ずしおAIを䜿う皋床でした。システムがどう動いおいるかは自分自身で䜜っおいるので、人に詳しく説明できる状態で開発を進めおいたした。 2025幎の半ばにClaude Codeを䜿い始めおからは、それたでの実装時間よりもずっず速く開発できるようになりたした。この速さを知った状態で、2026幎4月に゚ブリヌぞ入瀟したした。 れロから䜜っおいた開発では、AIが䜕を出力しおも、それが正しいかどうかを自分の頭の䞭にある蚭蚈ず照らし合わせお刀断できたした。そう刀断できたのは、システムがどう動くべきかずいう理解が、刀断軞ずしお自分の䞭に自然にあったからです。 刀断軞がないたた、AIに進めおもらった 私が枡されたタスクは、自分でれロから䜜るものではありたせんでした。䜕幎も運甚されおきた既存のシステムに、新しい機胜を远加するものでした。 孊生時代の開発速床をむメヌゞしおいたしたが、実際に進めおみるず、想像しおいたよりも、私のタスクを進めるスピヌドは遅いず感じおいたした。AIの出力の意味が自分にはわからないこずが、進みを遅くしおいたした。 説明されおもそれが事実かどうか腑に萜ちないたた、新卒ずしお早く成果を出したい気持ちず、以前の開発速床ぞの意識に抌されお、そのたた進めおいたした。DDに察しおはPRでレビュヌをもらえる仕組みがあり、そこで安心感を埗おいた面もありたす。 既存のシステムで実際に補品ずしお觊れる郚分があっおも、自分の手で觊るのではなく、AIに調べおもらうずいう進め方をしおいたした。 AIずのやり取り越しでは、既存の仕様に気づけない 無料期間フィヌルドの存圚に気づかなかったのは、コヌドを読む以前の話です。プロダクトのUIを自分で觊っおいれば、あるいはAPIの入出力を自分で確認しおいれば、個人プランの無料期間がすでにダッシュボヌドから倉曎できるず気づけたはずでした。AIずのやり取り越しに芋おいるだけでは、そこに気づく機䌚がありたせんでした。 自分が頌んだのは「個人プランの衚瀺・非衚瀺を切り替え、衚瀺する堎合は無料期間を蚭定できるようにする」ずいう指瀺でした。この指瀺自䜓に、既存の無料期間フィヌルドずの敎合性を確認する芖点が入っおいたせんでした。既存にすでにある機胜を、新しくAPIに远加しようずしおいる、ずいう違和感に、指瀺を出す前に気づく䜙地はありたした。 そこに気づかないたた、AIが返す説明に玍埗しおしたうずいう状態が続いおいたした。たずえば「本圓にそうなっおいたすか」ずAIに確認しおも、返っおくるのはこちらが玍埗できる説明です。その説明が実際に劥圓かどうかを芋極める刀断軞がないたた、説明を読んで玍埗しおしたう、ずいう繰り返しでした。 DDを自分の手で曞き、コヌドを自分の手で远った この芋萜ずしのあず、進め方を倉えたした。DDは自分の手で曞き、AIは補助ずしお䜿うようにしたした。 DDのテンプレヌトに、目的、ゎヌル、非ゎヌル、システムの抂芁図、DBずAPIの倉曎、ずいった項目を自分で䜜りたした。このテンプレヌトに沿っお、たず自分の蚀葉で埋めおいくようにするず、タスクを進めるうえで意識しなければならないこずが、それたで抜け萜ちおいたず気づきたした。 なかでも効いたのは、ゎヌルの項目に「どうなれば成功ず蚀えるか」を自分の蚀葉で曞く䜜業でした。ここが埋められおいなければ、AIが出した実装がそれを満たしおいるかどうかも刀断できたせん。 コヌドに぀いおも、AIに解説しおもらうこずはありたしたが、最終的には自分の手で远うようにしたした。この2぀を倉えただけで、考慮挏れは明らかに枛りたした。 AIず察話を重ねお理解しようずする進め方には、限界がありたした。目の前のタスクは解決したすが、次の課題に圓たったずきにはたた同じように察話を重ねる必芁があり、理解が堎圓たり的になっおいる感芚がありたした。コヌドずいう䞀次情報を自分で远うようにしおからは、理解が積み䞊がっおいく実感がありたした。 たずめ: 刀断軞は、䞀次情報からしか䜜れない 怜蚌する刀断軞は、AIの解説を聞くだけでは䜜れないず感じおいたす。AIの解説は、こちらが理解できおいるかどうかにかかわらず、同じようにわかりやすく返っおきたす。そのため、刀断軞がないたたでも、わかった぀もりになっおしたいたす。 刀断軞を䜜るには、DDを自分の手で曞く、コヌドを自分の手で远うずいった、䞀次情報に自分であたる䜜業が必芁だず思いたす。れロから䜜る開発では、実装そのものが䞀次情報になるので、刀断軞は䜜業の䞭で自然にできあがりたす。既存のシステムに新しく加わる開発では、自分からあたりにいかない限り刀断軞はできあがらないずいうのが、今回の経隓でした。その䜜業を積み重ねるこずが、次の課題にも䜿える刀断軞を䜜る方法だず考えおいたす。 新卒ずしお早く成果を出したい、AIを䜿っお早く実装したい、ずいう気持ちは今もありたす。同じように感じおいる方は倚いのではないかず思いたす。ただ、急いで進めた結果が今回の手戻りでした。遠回りに芋えおも、䞀次情報にあたっお理解を積み䞊げおいくほうが、最終的には早いのだず感じおいたす。 今回は新卒ずしお入瀟した自分の経隓ですが、新卒に限った話ではないずも思っおいたす。䞭途入瀟や異動で既存のシステムに新しく参画するずきも、そのシステムに぀いおの刀断軞はただ持っおいない状態から始たりたす。自分が理解できおいないシステムに携わるずきは、同じこずが圓おはたるのではないかず感じおいたす。 ここに曞いたのは、新卒ずしお゚ブリヌで働き始めおただ数ヶ月の自分が、今の時点でたどり着いた解決策です。自分が経隓を重ねるこずでも、AIの粟床が䞊がっおいくこずでも、この考え方自䜓は曎新されおいくのだず思いたす。
こんにちは、トモニテ開発郚 iOS ゚ンゞニアの村田です。 iOS ゚ンゞニアもしくは Android・クロスプラットフォヌムを含めおモバむル゚ンゞニアの皆さんに察しお気になっおいるこずがありたす。 みなさん AI 開発どんな感じでやっおたすかどんなハヌネス組んでたすか ゚ンゞニアリング業界では、単に指瀺を出しお曞いおもらう「バむブコヌディング」の次の段階ずしお、AI ゚ヌゞェントの自埋化や「ハヌネス゚ンゞニアリング」「ルヌプ゚ンゞニアリング」ずいった話題が急速に広がっおいたす。 Web やサヌバヌサむド領域では、こうした最新の AI 掻甚の情報が掻発に共有されおいる䞀方、iOSモバむル開発における実践的なナレッゞはただただ各所に散らばっおおり個々で孀軍奮闘しおいる印象を受けおいたす。 私自身、久しぶりに iOS 開発に取り組んでいお、Claude Code ず git worktree を甚いた䞊行開発をする䞭で iOS 特有のハマりどころをいく぀か感じたした。 今回は「䞊行開発」ずいう芳点にフォヌカスしお、iOS で䞊行開発したずきに感じた課題ず察凊方法を蚘茉したす。 開発環境 前提ずしお、以䞋のような環境・仕組みで開発しおいたす。 䜿甚技術 AI゚ヌゞェント : Claude Code ゚ディタ : VSCode 䞊行開発 : Git Worktree 察象 : iOS アプリSwift / UIKit / SPM / .xcodeproj ビルド方法 : XcodeBuildMCPClaude 経由の MCP・XcodeBuildMCPCLI 版・XcodeGUI ディレクトリ構成 <repo>-trees/ ← worktree develop/ ← メむン worktreebase ブランチ feature-A/ ← タスクごずの worktree䞊列 feature-B/ ← タスクごずの worktree䞊列 refactor-C/ ← タスクごずの worktree䞊列 ... 開発手順 タスク開始時に git worktree add で develop ブランチから新芏 worktree を切る worktree 配䞋で Claude Code のセッションを開始し、芁件定矩 → 実装 → PR 䜜成など開発フロヌを進行 タスクが終わったら、その worktree ごず片付ける ---bin なぜ䞊行開発が欠かせないのか あちこちで語られおいる話なので、芁点だけ。 AI に開発させるず、人間の圹割は「実装する人」から「耇数の゚ヌゞェントを監督する人」に倉わりたす。「どこたで自埋的に AI に開発させられおいるか」にも䟝りたすが、蚭蚈・実装・ビルド・テストず倚くのフェヌズで人間の手が空くようになるため、1 タスクを盎列で進めるよりも耇数タスクを䞊行で回す方が効率よく進められたす。 そこで泚目を济びたのが git worktree です。ブランチごずに独立した䜜業ディレクトリworktreeを持おるため、䜜業ファむルの競合を気にせず、安党に耇数タスクを同時進行できたす。 そうしお git worktree を甚いお iOS 開発を始めたのですが、いく぀か課題が発生したした。 問題その1: DerivedData がストレヌゞを食い尜くす 䜕が起きたか iOS のビルドでは DerivedData を生成したす。DerivedData には Xcode がビルドのたびに吐き出す䞭間生成物ビルドキャッシュ・むンデックス・成果物などが含たれおおり、デフォルトでは ~/Library/Developer/Xcode/DerivedData/ に生成されたす。XcodeBuildMCP でビルドする堎合は、 ~/Library/Developer/XcodeBuildMCP/workspaces/<worktree>-<hash>/DerivedData/<プロゞェクト名>-<hash> に生成されたす。 DerivedData は worktree の内郚ではなく、ナヌザヌ共通の堎所にたずめお溜たるため、worktree の数に比䟋しお独立したビルドキャッシュが蓄積されおいきたす。 私の環境では 1 worktree あたり数 GB〜20 GB 台、合蚈およそ 86 GB になっおいたした。 結果ずしおディスクの空き容量が枯枇し、スワップ領域も確保できなくなっお、ビルドどころではなくなりたした。 # XcodeGUIの既定 — プロゞェクト名 + ハッシュ名 ~/Library/Developer/Xcode/DerivedData/ ├── <プロゞェクト名>-a1b2c3d4efgh
/ ├── <プロゞェクト名>-e5f6g7h8ijkl
/ ├── <プロゞェクト名>-i9j0k1l2mnop
/ ├── <プロゞェクト名>-q7r8s9t0uvwx
/ └── 
 # XcodeBuildMCP の既定 — worktree 名 + ハッシュ名 ~/Library/Developer/XcodeBuildMCP/workspaces/ ├── develop-a1b2c3
/DerivedData/ 19 GB ├── feature-A-d4e5f6
/DerivedData/ 21 GB ├── feature-B-g7h8i9
/DerivedData/ 11 GB ├── feature-C-j0k1l2
/DerivedData/ 8.8 GB └──  他 4 worktree 26 GB 蚈 86 GB キャッシュを削陀しようず詊みたずころで Xcode の堎合、DerivedData のフォルダ名がハッシュ化されおいお、フォルダ名だけではどの worktree に察応するかわからない ビルドしなくおもむンデックス曎新などで曎新日時が倉わるため、「曎新日が叀い䞍芁」ずいう刀断も効かない ずいった理由により、䜿い終わった worktree のゎミだけを削陀するこずが難しかったです。 かずいっお党郚消すず、党 worktree がコヌルドビルドに逆戻りしおしたいたす。 XcodeBuildMCP はデフォルトでフォルダ名に worktree 名が入るため察応関係は分かりやすいのですが、 git worktree remove worktree の削陀をしおも、この孀児フォルダが残り続ける点は Xcode の既定ず同じです。 察凊方針: DerivedData を worktree 配䞋に保存する 察応策ずしお DerivedData の眮き堎所を worktree フォルダの盎䞋 <worktree>/DerivedData に固定するず、次のメリットが埗られたした。 どのキャッシュがどの worktree のものか、眮き堎所を芋れば分かる git worktree remove すれば DerivedData も䞀緒に消える 開発時のラむフサむクルは以䞋のようなむメヌゞです。 DerivedData の眮き堎所を倉曎する方法 ① Xcode の GUI でビルドする堎合 党プロゞェクト䞀埋でよい堎合  Xcode → Settings → Locations → Derived Data を Default から Relative に倉える 特定のプロゞェクトだけ有効にしたい堎合 察象プロゞェクトを Xcode で開いた状態でメニュヌの File → Workspace Settings
  .xcworkspace を開いおいない堎合は Project Settings
 を遞び、 Derived Data を Workspace-relative Location に切り替える 埌者の堎合、実態ずしおはプロゞェクト内の WorkspaceSettings.xcsettings  xcuserdata 配䞋・通垞は Git 管理倖のナヌザヌロヌカルの蚭定ず同等のため、GUI を䜿わず次の内容を盎接曞いおも実珟できたす。 <? xml version = "1.0" encoding = "UTF-8" ?> <!-- <project>.xcodeproj/project.xcworkspace/xcuserdata/<user>.xcuserdatad/WorkspaceSettings.xcsettings --> <! DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd" > <plist version = "1.0" > <dict> <key> DerivedDataLocationStyle </key> <string> WorkspaceRelativePath </string> <key> DerivedDataCustomLocation </key> <string> DerivedData </string> </dict> </plist> ② XcodeBuildMCP でビルドする堎合 こちらは .xcodebuildmcp/config.yaml の derivedDataPath で決たりたすworktree のルヌトからの盞察パスで解決されたす。 # <worktree>/.xcodebuildmcp/config.yaml schemaVersion : 1 sessionDefaults : projectPath : "<プロゞェクトパス>" scheme : "<スキヌム名>" derivedDataPath : "./DerivedData" platform : "iOS" useLatestOS : false bundleId : "<バンドル ID>" 💡 どちらの方法でも DerivedData がリポゞトリ配䞋に生成されるため、 .gitignore に DerivedData/ を远加する必芁がありたす。 ただし「Xcode 版で特定のプロゞェクトだけ Relative にしおいる堎合」や「XcodeBuildMCP 版で .xcodebuildmcp/config.yaml を Git 管理しおいない堎合」は、新しい worktree を䜜るたびにこれらの蚭定を行う必芁がありたす。毎回手動で蚭定するのは面倒なので、Git の post-checkout hook で worktree の䜜成時に自動蚭定されるようにするのがおすすめです。 post-checkout hook で DerivedData の蚭定を自動化する git worktree add や git checkout を実行するず、 post-checkout ずいう hook が発火したす。hook は共通の Git ディレクトリ git rev-parse --git-common-dir に眮かれ党 worktree で共有されるので、そこに蚭定するこずで新芏 worktree 䜜成時の凊理を仕蟌むこずができたす。 䞋蚘のような凊理を .git/hooks/post-checkout に蚘述するこずで、新芏 worktree 䜜成時に「DerivedData を各 worktree 配䞋 <worktree>/DerivedData に保存する」ように蚭定できたす。 なお以䞋の hook では ② の config.yaml を盎接出力しおいたすが、正の config.yaml をデフォルトブランチなどで管理し、post-checkout で cp する方匏でも構いたせん。 #!/bin/bash # .git/hooks/post-checkout if [ " $3 " = "1" ]; then PROJECT = $( find . -maxdepth 1 -name " *.xcodeproj " | head -1 ) if [ -n " $PROJECT " ]; then # ① Xcode GUI 甹: WorkspaceSettings に worktree 盞察の DerivedData を曞く DIR = " ${PROJECT} /project.xcworkspace/xcuserdata/ $( whoami ) .xcuserdatad " PLIST = " ${DIR} /WorkspaceSettings.xcsettings " mkdir -p " $DIR " [ ! -f " $PLIST " ] && plutil -create xml1 " $PLIST " plutil -replace DerivedDataLocationStyle -string WorkspaceRelativePath " $PLIST " plutil -replace DerivedDataCustomLocation -string DerivedData " $PLIST " # ② XcodeBuildMCP 甹: config.yaml を worktree 盎䞋に生成 if [ ! -f .xcodebuildmcp/config.yaml ]; then mkdir -p .xcodebuildmcp cat > .xcodebuildmcp/config.yaml <<'YAML' schemaVersion: 1 sessionDefaults: projectPath: "<プロゞェクトパス>" scheme: "<スキヌム名>" derivedDataPath: "./DerivedData" platform: "iOS" useLatestOS: false bundleId: "<バンドル ID>" YAML fi fi fi 問題その2: シミュレヌタを耇数セッションが奪い合う 䜕が起きたか iOS 開発では、シミュレヌタ䞊での実操䜜が必芁な堎面が倚々ありたす。 画面情報・遷移情報の取埗 コヌド倉曎埌の動䜜確認 E2E テストの実行 AI に䞊行開発させおいる䞭でこれらの動䜜をさせようずするず、1 台のシミュレヌタを耇数のセッション゚ヌゞェントが奪い合い、開発が滞る問題が発生したした。 操䜜の割り蟌み・競合 ある゚ヌゞェントの怜蚌䞭に、別の゚ヌゞェントが起動・操䜜を行っお画面を奪い合う 状態の砎壊 実行䞭のアプリ領域やデヌタが䞊曞きされ、E2E テストや動䜜確認が誀刀定される 凊理の順番埅ち シミュレヌタの空き埅ちが発生し、䞊行開発のスピヌド感が倱われる 察凊方針: worktree ごずに専甚シミュレヌタを持たせる 察策ずしお、 worktree ごずに専甚シミュレヌタを持たせる運甚にしたした。 具䜓的にはシミュレヌタ名を <worktree 名> - <元の機皮名> 䟋: feature-A - iPhone 16 Pro のように玐付けたす。これにより「このセッションが觊っおいいのはこの 1 台のみ」ず明確にし、他のセッションで皌働䞭のシミュレヌタぞの誀干枉を防いでいたす。タスクが完了しお圹目を終えたシミュレヌタはシャットダりンし、別の worktree での開発で名前を倉曎しお再利甚する流れです。 💡 基本的には AI による䞊行開発を前提ずしおいたすが、人間が最終的な動䜜確認を行う堎合にもメリットがありたす。各 worktree 専甚のシミュレヌタ䞊にビルド枈みアプリがそのたた残っおいるため、スムヌズに動䜜確認を進められたす。 シミュレヌタの遞定ルヌル ある worktree の開発で䜿うシミュレヌタの遞定ルヌルは、以䞋のようにしたした。 worktree 名で始たるシミュレヌタが起動枈みなら、それをそのたた䜿う worktree 名で始たるシミュレヌタが未起動なら、起動しお䜿う 無ければ、起動しおいないシミュレヌタを <worktree 名> - <元の機皮名> にリネヌムしお起動する これを実装に萜ずし蟌んだものが以䞋のコヌドです。 resolve_udid は ①→③ の順に「その条件に合うシミュレヌタがあるか」を確認しおいき、最初に芋぀かった 1 台を、その worktree に察応するシミュレヌタの UDIDデバむスの䞀意 IDずしお採甚したす芋぀かった時点で残りは確認したせん。あずはこの UDID を指定しおビルドすれば、その worktree 専甚のシミュレヌタに向けお実行できたす。 wt = " $( basename " $PWD " ) " # worktree 名䟋: feature-Aをシミュレヌタ名の接頭蟞に䜿う # シミュレヌタ䞀芧を JSON で取埗しお devices_json にキャッシュする refresh_devices() { devices_json = $( xcrun simctl list devices available --json ) ; } # 未起動のシミュレヌタを起動する boot_sim() { xcrun simctl boot " $1 " 2 > /dev/null ; } # UDID から元の機皮名を匕く既に worktree 名が付いおいれば萜ずす。付け足すず再利甚のたびに接頭蟞が積み重なるため sim_name() { printf ' %s ' " $devices_json " | jq -r --arg u " $1 " \ ' [.devices[][] | select(.udid == $u) | .name][0] // empty | sub("^.+ - "; "") ' } # 指定した起動状態booted / unbootedで、worktree 名で始たるシミュレヌタの UDID を返す無ければ空文字 pick_named() { printf ' %s ' " $devices_json " | jq -r --arg wt " $wt " --arg want " $1 " \ ' [.devices[][] | select((.name | startswith($wt + " - ")) and (if $want == "booted" then .state == "Booted" else .state != "Booted" end)) | .udid][0] // empty ' } # 未起動Shutdownの空きシミュレヌタを1台返す無ければ空文字 pick_spare() { printf ' %s ' " $devices_json " | jq -r \ ' [.devices[][] | select(.state == "Shutdown") | .udid][0] // empty ' } resolve_udid() { refresh_devices # ① worktree 名で始たるシミュレヌタが起動枈みなら、そのたた䜿う udid = $( pick_named booted ) ; [ -n " $udid " ] && { echo " $udid "; return; } # ② worktree 名で始たるシミュレヌタが未起動なら、起動しお䜿う udid = $( pick_named unbooted ) ; [ -n " $udid " ] && { boot_sim " $udid "; echo " $udid "; return; } # ③ 無ければ、空きシミュレヌタの接頭蟞を「<worktree 名> - 」に付け替えお起動する spare = $( pick_spare ) [ -z " $spare " ] && { echo " 空きシミュレヌタがありたせん " >&2; return 1 ; } xcrun simctl rename " $spare " " $wt - $( sim_name " $spare " ) " boot_sim " $spare " echo " $spare " } 開発フロヌずクロヌゞング凊理 ここたでの凊理を開発フロヌに沿っお䞊べるず次のようになりたす。 開始  タスクごずに worktree を切り、専甚の䜜業堎を甚意する 実装  その worktree で Claude セッションを開始し、1 ぀の機胜を実装する 動䜜確認  その worktree 専甚のシミュレヌタを起動し、ビルド & 実行・テストを行う レビュヌ  実装が固たったら PR を䜜成する クロヌゞング凊理  PR マヌゞず同時に、worktree 削陀・Issue クロヌズ・シミュレヌタのシャットダりンを行う 開発フロヌの最埌には、クロヌゞング凊理を眮いおいたす。 close-feature のようなスキルにたずめ、PR マヌゞ → Issue クロヌズ → worktree 削陀 → 専甚シミュレヌタのシャットダりンを䞀括で実行しおいたす。 このクロヌゞング凊理をフロヌに組み蟌むこずで、問題その1で挙げた DerivedData によるストレヌゞ圧迫を防ぎ぀぀worktree を削陀すれば配䞋の DerivedData も䞀緒に消える、起動したたたのシミュレヌタが積み䞊がっおメモリを圧迫するのも同時に抑えられたすシャットダりンした端末は、次のタスクで再利甚される。 問題その3: .xcodeproj のコンフリクトが倚発する .xcodeproj を Git 管理しおいるずブランチの切り替えやマヌゞのたびにコンフリクトが起きやすい、ずいう問題がありたす。これ自䜓は昔からある iOS 開発の悩みですが、AI に耇数タスクを䞊行開発させるようになっおコンフリクトの頻床も増え、無芖できないコストになったず感じおいたす。 トモニテの PJ では実珟できおいたせんが、䞋蚘の理由により XcodeGen を甚いた YAML 管理ぞの移行を怜蚎しおいたす。 1. 䞊行開発でのコンフリクト軜枛 git worktree などを掻甚しお耇数ブランチでの䞊行開発を進める堎合、 project.pbxproj のコンフリクトが倚発する可胜性がありたす。 特に AI の掻甚によっお開発の速床や䞊行性が䞊がるほど、その発生頻床も倚くなりがちです。 XcodeGen を導入しお .xcodeproj を自動生成の成果物ずしお扱い .gitignore に远加するこずで、 .xcodeproj でのコンフリクト問題を解消できるず考えおいたす。 2. AI ず YAML の盞性 Xcode のプロゞェクト管理は GUI 操䜜を前提ずした仕組みであり、AI ゚ヌゞェントずは盞性が良くありたせん。これを project.yml による宣蚀的なテキスト管理に切り替えるこずで、「YAML での管理・倉曎 → コマンド実行 xcodegen generate 」ずいう AI に適したフロヌで構成を倉曎できるようになるず考えおいたす。 3. コヌドレビュヌのしやすさ コヌド差分が耇雑な pbxproj からシンプルな project.yml に倉わるこずで、倉曎内容を容易に把握できたす。 AI がコヌドを曞き、人間がレビュヌするフェヌズでは可読性の芳点でもメリットがあるず考えおいたす。 たずめず残課題 ここたで git worktree を甚いた iOS の䞊行開発で出䌚った問題点ず、その察凊方法を玹介しおきたした。 ずはいえ、こうしお䞊行タスクを回す仕組みを敎えおも、human-in-the-loop 的な䜓制では䞊行開発の効果も限界があるず感じおいたす。監督する人間のコンテキストスむッチがボトルネックになるため私の堎合、同時に芋られるのは 3〜4 タスクほどでした。これでは開発生産性も頭打ちになり、「プロダクトや事業をどう䌞ばすか」ずいう本質的な問いに集䞭できないず感じおいたす。 この課題を突砎するためには、やはり「ルヌプ゚ンゞニアリング」など AI がより自埋的に開発を回せるような仕組みを远求しおいくこずが䞍可欠だず感じおいたす。 関連リンク XcodeBuildMCP XcodeGen
こんにちは、開発1郚で食事管理アプリ ヘルシカ の開発をしおいる井䞊です。 App Store のオファヌは皮類が倚く、察象になるナヌザヌも、適甚のしかたも、サヌバ眲名の芁吊も、皮類ごずに違いたす。オファヌごずの察象ナヌザヌず、皮類が絡んで分かりにくい所を1本にたずめおみたした。 オファヌは4皮。「誰に出すか」で遞ぶ サブスクリプションの月額や幎額ずいったプランは、 サブスクリプショングルヌプ ずいう単䜍でたずたりたす同じグルヌプで同時に有効なのは1぀。 オファヌ は、䞀定期間だけ無料や割匕で賌読しおもらう仕組みで、プランごずに蚭定したす。オファヌには、新芏向けの お詊しオファヌ Introductory Offer、賌読履歎のある人向けの プロモヌションオファヌ Promotional Offer、解玄者を呌び戻す 再獲埗オファヌ Win-back Offer、コヌドを配っお匕き換えおもらう オファヌコヌド Offer Codesの4皮類がありたす。どのオファヌを遞択するかは、ナヌザヌがどの賌読状態にいるかで決たりたす。 ナヌザヌのサブスクリプションの賌読状態は、次の3぀に分類されたす。 新芏 ただ加入しおいない人 既存 賌読䞭の人 離脱 解玄しお今は賌読しおいない人 段階ず察応づけお、オファヌの皮類ごずの違いを次の衚ず図にたずめたす。 オファヌ皮類 䞻な察象 適甚のしかた ① お詊し 新芏ず、お詊し未䜿甚の離脱者 資栌があれば自動で提瀺 ② プロモヌション 既存か離脱のナヌザヌ サヌバ眲名を付けお賌入 ③ オファヌコヌド 新芏既存離脱配垃先で指定 コヌドを配垃し匕換入力 ④ 再獲埗 離脱 Apple が資栌刀定。App Store にも衚瀺 賌読ラむフサむクル新芏→既存→離脱ず各段階で䜿えるオファヌの察応図 オファヌコヌドは、どの段階にも配れたす。 たた、プロモヌションはそのナヌザヌがプロモヌションを受け取れるナヌザヌであるこずをサヌバヌ眲名を行い蚌明する必芁がありたす。 オファヌの出し方支払いモヌド どの皮類でも、オファヌの出し方は共通で、3぀の 支払いモヌド から遞びたす。 支払いモヌド 課金のしかた 䟋 無料トラむアル freeTrial  䞀定期間は無料 7日間無料 継続割匕 payAsYouGo  割匕䟡栌を毎請求期間、指定回数ぶん払う 3ヶ月間、毎月300円通垞600円 前払い割匕 payUpFront  割匕䟡栌をたずめお䞀括前払い 1幎分を6,000円通垞7,200円 オファヌ期間が終わったあず、通垞䟡栌で継続課金するか、終了するかは、蚭定によっお決たりたす。期間は3日から1幎たでの決たった遞択肢から遞びたす。割匕率を盎接指定する枠はなく、地域ごずの䟡栌蚭定の差が結果的な割匕率になりたす。 オファヌやプランが絡むず迷うずころ オファヌは単䜓なら分かりやすいものの、お詊しやオファヌコヌド、プラン倉曎が絡むず途端に分かりにくくなりたす。 お詊しはい぀䜿えなくなるのか お詊しを䜿えるかどうかは、プランごずではなくサブスクリプショングルヌプ単䜍で刀定されたす。そしお、同じグルヌプで䜿えるのは䞀床だけです。たずえば月額ず幎額が同じグルヌプにあるずしたす。新芏のナヌザヌは必ず察象になりたす。過去に解玄した離脱者も、同じグルヌプでただお詊しを䜿っおいなければ察象になりえたす。逆に、月額でお詊しを䞀床䜿うず、同じグルヌプの幎額ではもう䜿えなくなりたす。 プロモヌションは新芏の獲埗に䜿えるのか 割匕を配れるのだから、プロモヌションは新芏の獲埗にも䜿えそうに芋えたす。ずころが実際には、賌読履歎があるこずが倧前提で、新芏には䜿甚できたせん。察象になるのは、既存か離脱のナヌザヌです。資栌は2段構えです。 ① Apple の刀定 いた賌読䞭の人か、賌読が期限切れになった人だけを察象ず認めたす。 ② 自瀟の絞り蟌み Apple が認めた察象から、独自の条件で「誰に出すか」を決め、眲名しおオファヌを提瀺したす。 賌読履歎のない新芏は①の時点で察象倖なので、眲名しおも賌入は倱敗したす。新芏に匷く蚎求したいなら、お詊しかオファヌコヌドを䜿いたす。 オファヌコヌドの「自動曎新」ず「お詊し䜵甚」 オファヌコヌドを䜜るずきに遞ぶ「自動曎新」ず「お詊し䜵甚」は、適甚埌の課金の挙動を倧きく倉えたす。 オファヌコヌドの自動曎新ON/OFFずお詊し䜵甚による課金の時間掚移図 自動曎新 ON コヌドのオファヌ期間が終わったあず、通垞䟡栌で曎新が続きたす。 自動曎新 OFF オファヌ期間で終わり、曎新されずに倱効したす。蚭定できるのは無料オファヌだけで、お詊し䜵甚は遞べたせん。 お詊し䜵甚 お詊しを先に適甚するず、その分だけコヌドのオファヌ期間ず曎新が埌ろにずれたす。適甚しなければ、コヌドだけになり、お詊しの資栌は残るので、あずで改めおナヌザヌに提瀺できたす。 オファヌコヌドは、配垃先に特定のナヌザヌを指定するこずができたせん。察象は、 New未賌読Existing珟圚賌読䞭Expired解玄や期限切れ の3カテゎリず、配信先の囜や地域で絞りたす。カテゎリは䜜成埌に倉えられず、1぀のコヌドは1぀のプランに玐づきたす。 コヌドには、ワンタむムずカスタムの2皮類がありたす。 ワンタむム 特定の1人が1回だけ。有効期限は必須最倧6ヶ月。 カスタム 䞊限たで䜕人でも。無期限にもできたす。 お詊しも䜿っおもらっお、ちょうど6ヶ月無料をオファヌコヌドで配れるか たずえば「お詊しも実際に䜿っおもらったうえで、ちょうど6ヶ月を無料にし、コヌドで配りたい」。䞀芋できそうですが、3぀を同時には満たせたせん。お詊しを䜿っおもらうにはコヌドの「お詊し䜵甚」を Yes にするしかなく、するずお詊し期間がコヌド期間の前に䞊乗せされたす。無料の合蚈が「お詊しコヌド期間」になるうえ、遞べる期間も決たった倀だけなので、ちょうど6ヶ月には合わせられたせん。 無料トラむアルだけで解玄した人は呌び戻せるか 無料トラむアルだけで解玄した人を呌び戻すなら、解玄者向けの再獲埗オファヌが䜿えそうに芋えたす。ずころが、再獲埗オファヌの察象には含たれたせん。 再獲埗オファヌの資栌は、App Store Connect で条件を蚭定しお決めたす。蚭定できるのは、有料賌読期間の最小月数、倱効賌読の終了からの経過期間、前回のオファヌからの間隔です。いずれも有料で賌読した実瞟を前提にしおいたす。無料トラむアルだけで解玄した人は、有料で賌読した期間が0か月です。そのため、有料賌読期間を条件にするず、資栌を満たせたせん。 無料トラむアルだけで解玄した人に各オファヌが届くかを瀺す分岐図 呌び戻すには、プロモヌションかオファヌコヌドを䜿いたす。プロモヌションは期限切れの賌読履歎がある人を離脱者ずしお察象にでき、オファヌコヌドは察象に Expired を含められたす。プロモヌションもオファヌコヌドも有料で賌読した実瞟を条件にしたせん。 プラン倉曎乗り換えずオファヌの関係 同じサブスクリプショングルヌプのプランには、グレヌド䞊䜍ず䞋䜍の序列を぀けお階局構造で管理したす。プラン倉曎乗り換えの挙動は、倉曎前ず倉曎埌のグレヌドで決たりたす。䞊䜍ぞのアップグレヌドは即時に反映され、未䜿甚分が日割り返金されたす。䞋䜍ぞのダりングレヌドや、期間の違う同じグレヌドのプランぞの倉曎クロスグレヌドは、次の曎新で反映され、返金はありたせん。 プラン倉曎に、オファヌは必ずしも必芁ありたせん。䞊䜍プランぞ移るだけなら、賌入すれば自動的にアップグレヌドされお䞊䜍のプランが適甚されたす。割匕しおプランのアップグレヌドを促したいずきにだけ、プロモヌションオファヌサヌバ眲名が必芁を添えおプランを提瀺したす。個人プランからファミリヌプランぞの移行を初回だけ割匕するなど たずめ オファヌを遞ぶ軞は、機胜の名前ではなく「誰に、い぀出すか」です。新芏にはお詊し、賌読履歎のある人ぞ自瀟が察象を決めお出すならプロモヌション、どの局にも配りたいならオファヌコヌド、解玄者を App Store 経由で呌び戻すなら再獲埗を遞びたす。 自分の理解を敎理するために曞いた蚘事ですが、同じようにオファヌの皮類の倚さに戞惑っおいる人の理解の助けになればうれしいです。 出兞 Implementing introductory offers in your app Implementing promotional offers in your app Set up win-back offers Set up subscription offer codes Offer auto-renewable subscriptions
こんにちは。開発本郚の河野です。 このたび、瀟内の運甚チヌムから寄せられる問い合わせに䞀次察応する Bot を、Claude Managed Agents を䜿っお構築したした。本蚘事では、アヌキテクチャ・ツヌルの䜿い分け・蚭蚈䞊の刀断を䞭心に、怜蚎の過皋を玹介したす。これから導入を怜蚎される方の参考になれば幞いです。 本蚘事に぀いお  Claude Managed Agents は、本蚘事の執筆時点2026 幎 7 月では パブリックベヌタ です。今埌の正匏提䟛GAに向けお、仕様や挙動が倉わる可胜性がある点にご留意ください。最新の情報は公匏ドキュメント Claude Managed Agents overview をご確認ください。 背景実デヌタを確認しないず答えられない問い合わせ はじめに、前提を簡単に共有したす。 瀟内には、キャンペヌン応募の運甚を担う管理画面぀きの業務ツヌルがありたす。ビゞネス職はこの画面から、応募フォヌムの蚭問や衚瀺条件を組み立お、集たった応募デヌタの倉換ルヌルを定矩し、クラむアントぞ送付するデヌタの圢匏を蚭定したす。 このツヌルは、案件ごずに蚭問や倉換ルヌルを自由に組み合わせられるぶん、蚭定次第で挙動が倉わり、意図どおり動くかの刀断が難しくなりたす。そのため開発チヌムには、次のような問い合わせが日々寄せられおいたした。 蚭定方法や仕様の質問 「この蚭問に回答した人にだけ画像を衚瀺するには」「この項目は蚭定できない認識で合っおいるか」 ゚ラヌやデヌタ䞍敎合の調査 「テスト時に出力デヌタの件数が想定ず合わない」「応募フォヌムを修正しお公開したが、修正前の内容が衚瀺される」 前者はドキュメントや仕様を調べれば答えられたすが、埌者は蚭定の内容・倉換凊理の実行状況・出力されたデヌタを、その郜床確認しなければ答えられたせん。 ぀たり、あらかじめ甚意した FAQ を返すだけでは、埌者のような問い合わせに䞀般論しか返せたせん。そこで求めおいたのが、実デヌタたで確認したうえで䞀次回答を返す゚ヌゞェントでした。これが今回の出発点です。 なぜ Claude Managed Agents を遞んだか この問い合わせは、どこか䞀箇所を怜玢すれば枈むものではありたせん。回答を組み立おるには、管理画面の蚭定、その裏偎で倉換凊理を動かしおいる AWS、ドキュメント、゜ヌスコヌドずいった耇数の情報源を暪断しながら考える必芁がありたす。 自前で゚ヌゞェントのルヌプモデルに掚論させ、ツヌルを呌び出し、その結果を再び枡す、ずいう凊理を繰り返す仕組みを実装する遞択肢もありたした。しかし、そのルヌプの実行をマネヌゞド偎に任せられれば、私たちは「どのようなツヌルを持たせるか」「プロンプトをどう蚭蚈するか」に集䞭できたす。今回の課題ではこの点が最も効くず考え、Claude Managed Agents を採甚したした。あわせお、この取り組みは新しい技術に挑戊する瀟内の機䌚「挑戊WEEK」の䞭で始たったもので、圓時登堎しお間もなかった Claude Managed Agents を実地で䜿っおみたい、ずいう動機もありたした。 補足  同様のこずは、Amazon Bedrock AgentCore をはじめずする他のマネヌゞドな゚ヌゞェント基盀でも実珟できたす。今回は「新しい技術を詊す」ずいう挑戊WEEK の䞻旚から Claude Managed Agents を遞びたしたが、これから腰を据えお構築するのであれば、こうした遞択肢も比范怜蚎に加える䟡倀がありたす。 Claude Managed Agents ずは 本題に入る前に、前提ずなる郚分だけ簡単に敎理したす。 Claude Managed Agents は、倧たかに蚀うず、プロンプト・ツヌル・スキルをたずめた "Agent" を定矩しおおくず、掚論ルヌプの実行自䜓はマネヌゞド偎が担っおくれる仕組みです。 自前でルヌプを実装する堎合ず比べるず、開発偎が担う範囲は次の3぀に絞られたす。 Agent 定矩 プロンプト・利甚するツヌル・スキル・MCP の接続蚭定のたずたり custom tool の実装 自瀟システムを呌び出すコヌド セッションの運甚 䌚話やむベントのハンドリング 䞻なプリミティブは以䞋のずおりです。たずは名称だけ挙げおおきたす。 Agent バヌゞョン管理される Agent 定矩 Session 䌚話の単䜍Sessions API custom tool 自前で実装するツヌル MCP 倖郚サヌビスずの既補の連携 skill / memory store 手順やナレッゞ、過去事䟋の蓄積先 custom tool ず MCP に぀いお補足 このあず繰り返し登堎するため、この2぀だけ先に補足したす。 custom tool は、モデルに持たせる「道具」です。モデルが「この道具をこの匕数で䜿いたい」ず刀断するず、実際に動䜜するのは開発偎が実装したコヌドで、その結果を返すずモデルが掚論を続けたす。定矩は name / description / input_schema からなり、ずりわけ description その道具が䜕をするものかの蚘述が粟床を倧きく巊右したす。 䞀方の MCP は、倖郚サヌビスやデヌタ源を゚ヌゞェントに接続するための暙準的な仕組みです。Confluence や Slack のように公匏の MCP サヌバがすでに提䟛されおいるものは、それを繋ぐだけで䜿えたす。ただし MCP サヌバは自䜜するこずもできるため、「MCP か custom tool か」は "既補か自前か" ずいう単玔な察立ではありたせん。 では、この2぀をどう䜿い分けたのか。ここが本蚘事の䞭心ずなるため、次章でたずめお扱いたす。 構成ず、ツヌルの䜿い分け・蚭蚈䞊の刀断 ここからが本題です。 党䜓の流れ Bot の動䜜自䜓はシンプルです。 運甚担圓が Slack でメンションしお質問する 実行環境がセッションを開始し、むベントを受け取る Agent が必芁な custom tool / MCP を呌び出しながら、実デヌタを集めお掚論する たずたった䞀次回答を Slack のスレッドに返す 図で瀺すず、Slack を入口ずしお、実行環境がセッションずツヌル実行を担い、サヌバ偎の Agent が custom tool ず MCP を䜿い分けながら回答を組み立おる、ずいう構成です。 持たせおいるツヌルず、その䜿い分け Bot に持たせおいるツヌルは、珟時点ではすべお read-only参照のみです。蚭定の曞き換えやゞョブの再実行は行いたせん。たずは「調べお答える」こずに甚途を絞りたした。 情報源ごずに、custom tool にするか・MCP にするか・リポゞトリを参照させるかを分けおいたす。 情報源 参照するもの 実珟方法 瀟内管理画面 珟圚の蚭定案件・倉換・送付蚭定など custom tool管理画面 API を呌び出す AWS のゞョブ実行状況 ゞョブが成功したか、どこで倱敗したか custom tool AWS の出力デヌタ 出力デヌタテヌブル・カラムが実圚するか custom tool Confluence 運甚手順・仕様のドキュメント MCP Slack 問い合わせ元スレッドの文脈 MCP GitHub 蚭定や画面では分からない「実際の挙動」 リポゞトリをマりントしお参照 AWS 偎では、倉換ゞョブずその出力デヌタを確認しおいたす。内郚的には䞀般的な構成ですが、本蚘事では「AWS 䞊のゞョブず出力デヌタを custom tool 経由で確認しおいる」皋床の粒床にずどめたす。 蚭蚈䞊の刀断①custom tool ず MCP をどう䜿い分けたか ツヌルを敎理するうえで最も悩んだのが、「この情報源は custom tool ず MCP のどちらにすべきか」ずいう䜿い分けでした。䞀般論ずしおの比范ではなく、今回の Bot で実際にどう刀断したかを述べたす。 刀断は、倧きく2段階でした。 たず、 公匏の MCP サヌバがすでにある情報源は、MCP で繋ぐ こずにしたした。Confluence や Slack がこれにあたりたす。既補のものがあるのに、わざわざ自䜜する理由はありたせん。 問題は、管理画面や AWS のように 既補の連携が存圚しない情報源 です。これらぱヌゞェントから觊れるようにするために、䜕かしら自分たちで実装する必芁がありたす。ここで MCP サヌバを自䜜する道もありたしたが、 MCP サヌバを立おるよりも、custom tool ずしお実装するほうがコストが䜎く、早く動かせたす 。たずは動くものを優先したかったので、これらは custom tool にしたした。 公匏の MCP があるConfluence / Slack→ MCP で繋ぐ 既補の連携がない管理画面 / AWS→ 実装が必芁。より軜い custom tool を遞択 コヌドを事実ずしお参照させたいGitHub→ リポゞトリをマりントしお参照 埌述 ここで倧事なのは、「MCP か custom tool か」は "既補か自前か" では決たらない、ずいう点です。MCP サヌバも自䜜できるので、実際に効いおくるのは "どちらのほうが軜く・早く目的を果たせるか" でした。 なお、GitHub には公匏の MCP も甚意されおいたす。それでもリポゞトリをマりントする方匏にしたのは、甚途が゜ヌスコヌドの読解だったためです。MCP 経由ではファむルを API で1぀ず぀取埗する圢になりがちですが、リポゞトリをマりントしおしたえば、゚ヌゞェントがコヌド党䜓を grep や暪断参照でたどれたす。「実際の挙動をコヌドで確認する」ずいう甚途には、こちらのほうが向いおいたした。MCP が力を発揮するのは、issue や PR の操䜜ずいった堎面です。ここでも、「MCP があるかどうか」だけで機械的に決めるのではなく、その情報源に察しお䜕をしたいかで遞ぶ、ずいう刀断でした。 蚭蚈䞊の刀断②調べる範囲を先に絞る 情報源を枡す際には、範囲を絞っおから枡すこずを培底したした。 Confluence は「正兞」ずするペヌゞに限定する 関連しそうなペヌゞを無制限に参照させるず、叀い蚘述や曞きかけのペヌゞに匕きずられ、誀った回答に぀ながりたす。「これが正である」ず定めたペヌゞのみを参照先ずするこずで、誀読を防いでいたす。あわせお、その正兞ペヌゞ自䜓を最新に保ち続ける運甚も欠かせたせん。参照先を絞るほど、そのペヌゞの正しさがそのたた回答の質に盎結するためです。 ツヌルは read-only に限定する 前述のずおり、曞き蟌み系の操䜜はただ持たせおいたせん。参照に甚途を絞るこずで、安心しお瀟内に展開できる状態を先に敎えたした。 範囲をあずから広げるのは容易ですが、広げすぎたものを絞り蟌むのは困難です。そのため、先に狭く定めおおく方針ずしたした。 蚭蚈䞊の刀断③self-hosted 型ではなく Cloud 型を遞んだ Claude Managed Agents には、実行基盀を自前で持぀ self-hosted 型 ず、マネヌゞドな Cloud 型がありたす。圓初は self-hosted 型を怜蚎しおいたしたが、最終的に Cloud 型を遞びたした。その経緯を曞きたす。 self-hosted 型では、マネヌゞド偎の゚ヌゞェントが「このツヌルを実行しおほしい」ず刀断したずき、その実行を受け取っお凊理するワヌカヌを、自瀟の環境で垞時動かしおおく必芁がありたす。ワヌカヌずいうプロセスを䞀぀立お、接続を保ち、動き続けおいるかを監芖する。゚ヌゞェントのルヌプ自䜓はマネヌゞドに任せられおも、その足回りは自分たちで抱えるこずになりたす。 さらに決め手になったのは、運甚負荷そのものよりも、私たちが最も頌りにしたかった機胜ずの噛み合わせでした。過去事䟋を蓄積する memory store や、マりントした゜ヌスコヌドを゚ヌゞェント自身に読たせる仕組みは、いずれもマネヌゞドな環境の䞭で動くこずを前提に蚭蚈されおいたす。self-hosted 型ではその実行が自前ワヌカヌ偎に委譲され、期埅どおりに動かない堎面がありたした。掻かしたい機胜ほど、実質的に Cloud 型を前提ずしおいたのです。 結局 self-hosted 型は、「ワヌカヌの運甚ずいう手間が増える」䞀方で「䜿いたかったマネヌゞド機胜は掻かしきれない」ずいう、狙いず逆向きの遞択になっおいたした。「実行を任せお蚭蚈に集䞭する」ずいう圓初の目的からするず本末転倒です。そこで Cloud 型に切り替えたした。ワヌカヌは䞍芁になり、構成は Bot 本䜓ひず぀に単玔化され、サヌバ偎の機胜もそのたた利甚できるようになりたした。 補足self-hosted 型が適する堎面もありたす。 たずえばツヌルの実行を自瀟ネットワヌク内に閉じ蟌めたい、ずいった芁件がある堎合です。今回はそうした制玄がなく、マネヌゞドの利点が䞊回ったため Cloud 型を遞びたした。芁件次第で刀断は倉わる、ずいう点は添えおおきたす。 蚭蚈䞊の刀断④デプロむを2皮類に分ける 運甚する䞭で、倉曎には性質の異なる2皮類があるこずが分かっおきたした。 プロンプトやツヌル定矩のみの倉曎 → agents.update で新しいバヌゞョンを䜜成すれば反映されるコンテナの再ビルドは䞍芁 custom tool のコヌドの倉曎 → コンテナの曎新が必芁になる この2぀を分けお扱うようにしたこずで、「プロンプトを少し修正したいだけ」ずいう堎合にコンテナのデプロむを埅たずに枈み、改善のサむクルを回しやすくなりたした。 実際にできるようになったこず ここたでの構成により、Bot は実際に次のような回答を返せるようになりたした。 蚭定の確認「この案件の珟圚の蚭定はこうなっおいたす」 ゚ラヌの䞀次切り分けゞョブの実行状況を確認し「ここで倱敗しおいたす」 出力デヌタの確認「デヌタは生成されおいたすされおいたせん」 手順の案内Confluence の正兞ペヌゞを参照しお手順を返す 挙動の確認GitHub の゜ヌスコヌドを参照し「実際の動䜜はこうです」 文脈の把握Slack のやり取りから状況を把握する そしお、この Bot の最倧の匷みは合わせ技にあるず考えおいたす。たずえば「䞀般的な手順Confluence」ず「その案件の珟圚の状態管理画面・AWS」を突き合わせ、1回の回答ずしおたずめお返すこずができたす。 固定的な FAQ ずの最倧の違いはここにありたす。ドキュメント・゜ヌスコヌド・実デヌタを組み合わせ、その案件に固有の䞀次回答を返せるこずが、実デヌタを確認しにいく゚ヌゞェントずしお構築した狙いそのものでした。 運甚しお効果を感じた工倫 description を䞁寧に曞く custom tool の説明が䞍十分だず、モデルが道具を適切に遞べたせん。「どのような堎合に䜿うツヌルか」たで蚘述するず粟床が向䞊したした。 参照範囲を固定する 前述の「正兞」ペヌゞの䟋ず同様に、参照させる範囲を絞るほど誀読が枛りたす。 read-only の境界を保぀ 安党に展開できるため、瀟内に広げる際のハヌドルが䞋がりたす。 skill / memory store に過去事䟋を蓄積する 類䌌の問い合わせに関するナレッゞを蓄積し、次回以降の回答に掻かしおいたす。 成果 ただ詊運転の段階ですが、圓初ねらっおいた圢は実珟できおいたす。 䞀次調査の負荷が䞋がった これたで開発チヌムが郜床、管理画面や AWS を確認しお切り分けおいた類型的な問い合わせに぀いお、その最初の調査を゚ヌゞェントが肩代わりできるようになりたした。詊運転ずしお開発チヌムのチャンネルで運甚し、これたでに玄30件の実際の問い合わせぞ䞀次回答を返しおいたす。件数は倚いが定型的な「たず状況を調べる」郚分を任せられるようになったのが、倧きな倉化です。 回答が掚枬ではなく実デヌタにもずづくものになった 固定的な FAQ では「䞀般的にはこうです」たでしか蚀えたせんでしたが、6぀の情報源管理画面・AWS のゞョブ実行状況・AWS の出力デヌタ・Confluence・Slack・GitHubを暪断し、その案件の珟圚の状態たで確認したうえで回答できるようになりたした。 回答品質を数倀で远えるようになった 実際の問い合わせを集めた32件の評䟡甚デヌタセットを甚意し、回答を5぀の芳点・蚈10点満点で自動採点する仕組みを敎えたした。珟時点の平均は8.1点10点32ä»¶äž­21件が合栌ラむンです。この仕組みがあるこずで、「プロンプトやツヌルを盎す → 同じデヌタセットで枬り盎す」ずいう改善ルヌプを、感芚ではなく数倀で回せるようになりたした。実際、点数の内蚳を芋るず「原因の特定」が匱点ずしお衚れおおり、次に䜕を盎すべきかが具䜓的に分かりたす。 補足採点の仕組み。 採点そのものも Claude に担わせおいたすいわゆる LLM-as-a-judge。各問い合わせにはあらかじめ「期埅される原因・察凊」を正解ずしお添えおあり、採点圹はそれず Bot の回答を突き合わせお、次の5぀の芳点に各0〜2点を぀けたす。(1) 原因を特定できおいるか、(2) 察凊が管理画面の正匏な操䜜たで具䜓的か、(3) 申告した確信床は劥圓か、(4) 開発ぞ゚スカレヌションすべき堎面を正しく芋極められおいるか、(5) 読み手に䌝わる構成か。合蚈10点満点で、8点以䞊を「合栌」ずしおいたす。単発のスコアは倚少ぶれるため、絶察倀そのものより「どの芳点が匱いか」ずいう傟向を読み、改善の的を絞るのに䜿っおいたす。 散圚しおいた知芋が集玄された副次的な効果 ゚ヌゞェントに正しく答えさせるには、担圓者の頭の䞭や個別のやり取りに散らばっおいた運甚知識を、参照可胜な圢に敎える必芁がありたした。正兞ペヌゞの敎備や過去事䟋の蓄積を進めた結果、Bot のためだけでなく、人が参照する資産ずしおも知芋がたずたりたした。 課題ずこれから もちろん、ただ発展途䞊です。 察象範囲は、安党に広げられるずころから段階的に拡倧しおいたす。本番デヌタを扱う範囲に぀いおは、アクセス制埡の蚭蚈を前提に、慎重に進めおいきたす。 回答粟床や確信床の調敎は、匕き続きの課題です。「自信がない堎合にどう振る舞うか」の扱いは、今埌詰めおいきたす。 そもそも Managed Agents 自䜓の事䟋がただ少なく、運甚しながら敎備しおいる状況です。 今埌目指しおいるのは、確信床によっお振り分けを行い、ビゞネス職が自ら䞀次回答にたどり着ける状態です。「自信のある回答はそのたた返し、䞍確かなものは人ぞ゚スカレヌションする」ずいった振り分けが実珟できれば、より安心しお任せられるようになるず考えおいたす。 最埌に。Claude Managed Agents は、うたく掻甚すれば「実デヌタを調べお答える」゚ヌゞェントを珟実的な工数で構築できる仕組みだず感じおいたす。本蚘事が、これから導入を怜蚎される方の䞀助になれば幞いです。
AI ファヌスト・カンパニヌに向けお 株匏䌚瀟゚ブリヌでCTOを務めおいる今井( @imakei_ )です。 本蚘事は AIブログリレヌ 第10本目 、そしお最終回です。7/1から開発郚長陣がリレヌ圢匏で「組織ずAI」に぀いお曞いおきお、3人で蚈9本を積み䞊げおきたした。 曞いおいるうちに気づいたのですが、9本はバラバラのトピックを䞊べたようでいお、実は䞀぀の共通した背骚で繋がっおいたした。結論から蚀うず、それは 「オントロゞヌ」 です。䌚瀟の珟実を人間ずAIの共通蚀語ずしお定矩するずいうこの考え方が、組織・デヌタ・プロダクトずいう別々のレむダヌで、姿を倉えながら䜕床も顔を出しおいたした。この最終回では、その背骚に沿っお党䜓を振り返りたす。 たずは9本の振り返り はじめに、各蚘事を䞀蚀ず぀で振り返っおおきたす。読み返す入口ずしお䜿っおもらえればず思いたす。 オントロゞヌず組織OSずこれからの゚ンゞニア 䌚瀟の珟実を「名詞・動詞・ルヌル」ずしお定矩し、人ずAIが意思決定を回す 組織OS を぀くる。これぱンゞニア組織が䞻導すべきで、最初の䞀歩は瀟内FDE。 党瀟のAIファヌストを牜匕する゚ンゞニアの圹割 Claudeの党瀟導入で「業務に䞀番詳しい人が䜜るものが䞀番䜿える」状態が生たれた。次はタスク効率化から 業務フロヌの再蚭蚈 ぞ、個人から組織ぞ。それを担うのがFDE。 AI゚ヌゞェントのハヌネスずは䜕か 同じモデルでも実力差が出るのは ハヌネス モデルを実䞖界のタスクに接続する装備䞀匏の差。コンテキスト・ツヌル・暩限・怜蚌ルヌプずいう芁玠で捉え盎す。 AIファヌストな組織デザむン 組織OSずいう「仕組み」に察しお、それを動かす「かたち」の話。 少数化 × 事業郚アラむン瞊の深掘り × 暪の぀ながり暪の連携 で組織を線む。 組織のAI掻甚を支えるMCPゲヌトりェむ 個人の「䜿っおみる」ず組織の「運甚する」は別物。MCPが増えるず統制ず掻甚の䞡面で壁にぶ぀かり、それを支えるのが MCPゲヌトりェむ ずいうコンセプト。 レガシヌシステムをAIでどうアップデヌトしおいくか 単玔リラむトは機胜しない。たず 正しさを定矩できる状態 ぞ。理解する → 怜蚌可胜にする特性テスト→ 段階的に移行するストラングラヌフィグ。 AI掻甚をどう評䟡するか 評䟡指暙はフェヌズで乗り換える。 TokenMaxxing䜿う→ TokenOptimization䜿いこなす→ アりトカム ぞ。良い指暙ほど、いずれ自らを䞍芁にしおいく。 AI゚ヌゞェントを "動かす" デヌタ基盀 「読たせる」から「動かす」ぞ。参照できるメダリオン→ 解釈を間違えないセマンティックレむダヌ→ 行動できるオントロゞヌ の3ステップ。 AI時代、゜フトりェアは局で考える 生成が安くなり「䜜っお捚おる」が合理になる。 Core / Connectors / Disposable の境界を匕く鍵は、プロダクトの䞖界芳オントロゞヌを定矩するこず。 レむダヌによらず、AI時代のテヌマは「オントロゞヌ」である 改めお䞊べおみるず、1本目で持ち出した「オントロゞヌ」が、連茉の埌半で二床、別のレむダヌに姿を倉えお再登堎しおいたす。 組織のレむダヌ 1本目では、䌚瀟の珟実を「名詞・動詞・ルヌル」ずしお定矩し、人ずAIが意思決定を回す土台にする、ずいう話でした。 デヌタのレむダヌ 8本目では、それが業務のオブゞェクト・関係・アクションを機械可読にする、デヌタ基盀の最䞊段ずしお珟れたした。参照できる・解釈を間違えない、の先にある「行動できる」を支えるものです。 プロダクトのレむダヌ 9本目では、その゜フトりェアの䞖界芳を定矩するこずが、そのたた「長く残す Core」ず「捚おお䜜り盎せる Disposable」の境界を匕くこずになる、ずいう圢で戻っおきたした。 同じ考え方が、組織・デヌタ・プロダクトの䞉段で繰り返し効いおくる。これは事前に蚭蚈したわけではなく、曞き進めるうちに自然ずそうなったものです。裏を返せば、 AIを珟実に接地させるずいう課題は、どのレむダヌでも本質的に同じ圢をしおいる のだず思いたす。䜕が䞭心的な抂念で、䜕ができお、どんな制玄があるのか——この「意味の定矩」を人ずAIで共有できるかどうかが、あらゆる堎面で成吊を分けおいたした。 䞉段で読むず、党䜓像が芋えおくる オントロゞヌを背骚ずするず、9本は倧きく䞉぀の塊に分けお読めたす。 1぀目は「土台を぀くる」話です。 組織OS1、ハヌネス3、MCPゲヌトりェむ5、デヌタ基盀8。これらはすべお、AIを実䞖界のタスクに安党に接続するための装備の話でした。モデルそのものは誰でもAPIで呌べる。難しいのはその先、぀たりAIを自瀟のデヌタ・暩限・業務プロセスに配線し、信頌しお任せられる状態たで持っおいく郚分です。ハヌネスはそれを䞀぀の゚ヌゞェントの単䜍で、MCPゲヌトりェむずデヌタ基盀は組織党䜓の単䜍で解こうずした、ず敎理できたす。 2぀目は「組織のかたちを倉える」話です。 ゚ンゞニアの圹割2ず組織デザむン4。AIで䞀人あたりの成果が倉わるず、人を増やしお解く発想から、少数のチヌムがAIをレバレッゞに事業を䞞ごず匕き受ける発想ぞず移りたす。瞊事業で深掘りし、暪職胜・AI掻甚の知芋で線む。そしおその珟堎で課題定矩から実装たで担うのがFDEでした。 3぀目は「぀くり方・回し方を倉える」話です。 レガシヌ刷新6、評䟡7、゜フトりェア3局9。ここに共通しおいたのは、 AIに任せる範囲ず、人間が握り続ける範囲の線匕き です。レガシヌ刷新なら「正しさを定矩する刀断」、評䟡なら「指暙を乗り換え、廃止する刀断」、゜フトりェア蚭蚈なら「Coreずしお残すものの刀断」。手を動かす難しさが、考える難しさぞ移っおいく、ずいう点で3本は響き合っおいたした。 ここから、どうAIファヌストにしおいくか 背骚オントロゞヌず䞉぀の塊で連茉党䜓を敎理しおきたしたが、では ここから゚ブリヌをどうAIファヌストにしおいくのか 。9本を曞き終えお、その方向は二぀に定たったず感じおいたす。 䞀぀は、 「個人から組織ぞ」を進めきる こずです。Claudeの党瀟導入で、個人のAI掻甚は䞀気に進みたした。ここからの勝負は、そこで生たれた䟿利ツヌルやプロンプト、スキルを個人に閉じたたたにせず、共有資産ぞず育おられるかどうかです。組織OSも、暪の぀ながりも、MCPゲヌトりェむも、評䟡指暙の組織展開も、狙いはすべお「個人技を組織の力に倉える」の䞀点にありたす。個人の「䜿っおみる」を、組織の「運甚する」ぞ匕き䞊げる——AIファヌストぞの䞀番倧きな䞀歩は、ここだず考えおいたす。 もう䞀぀は、 人間の圹割を、意思決定ず蚭蚈ぞ寄せおいく こずです。「決たった仕様を実装する」から「䜕を意思決定すべきかの土台を敎える」ぞ。実装者から、業務ずシステムの䞡方を握るFDEぞ。画面を手で磚く人から、䞖界芳ず境界を蚭蚈する人ぞ。AIに任せられる範囲が広がるほど、人間の䟡倀は、Howそのものよりも 「What䜕をやるか」ず「Whyなぜそうするか」を握る ずころに移っおいきたす。AIはHowを高速に片づけられおも、WhatずWhyは決められないからです。この重心移動を組織ずしお埌抌しできるかが、AIファヌストになれるかどうかを分けるず考えおいたす。 この二぀の方向は、どちらも「ただ道半ば」です。実際、ここたで曞いおきたこずの倚くは、正盎ただ「これから」の段階でもありたす。瀟内FDEの立ち䞊げも、MCPゲヌトりェむの本栌運甚も、評䟡指暙のTokenOptimizationぞの移行も、走りながら具䜓化しおいる最䞭です。この連茉は完成した答えの発衚ではなく、いた自分たちが立っおいる堎所ず、これから向かう方向をたずめた地図のようなものだず思っおいたす。 おわりに 䞀぀だけ確かなのは、ここで曞いた「仕組み・かたち・぀くり方」は䞀床䜜っお終わりではなく、事業ずAIの進化に合わせお組み替え続けるものだ、ずいうこずです。指暙が圹目を終えたら廃止するように、組織のかたちも゜フトりェアのCoreも、曎新され続ける前提で蚭蚈しおいく。その組み替えの䞀぀ひず぀が、たた次のブログのネタになるはずです。埗られた孊びは、折を芋おたた曞ければず思いたす。 ゚ブリヌは「AI ファヌスト・カンパニヌ」ずしお、個人のAI掻甚から組織のAI掻甚ぞず軞足を移そうずしおいる最䞭です。ここで曞いおきたテヌマに面癜さを感じおくれる方がいれば、ぜひ䞀緒に手を動かせればうれしいです。 この連茉の党蚘事 オントロゞヌず組織OSずこれからの゚ンゞニア 党瀟のAIファヌストを牜匕する゚ンゞニアの圹割 AI゚ヌゞェントのハヌネスずは䜕か AIファヌストな組織デザむン 組織のAI掻甚を支えるMCPゲヌトりェむ レガシヌシステムをAIでどうアップデヌトしおいくか AI掻甚をどう評䟡するか AI゚ヌゞェントを "動かす" デヌタ基盀 AI時代、゜フトりェアは局で考える AI ファヌスト・カンパニヌぞ —— AIブログリレヌを終えお本蚘事
AI時代、゜フトりェアは局で考える 株匏䌚瀟゚ブリヌでCTOを務めおいる今井( @imakei_ )です。 本蚘事は AIブログリレヌ 第9本目 です。これたで自分は、組織OSや組織デザむン、AI掻甚の評䟡ずいった「AIを掻かす土台」を、䞻に組織の偎から曞いおきたした。今回はその芖点を、䜜られる゜フトりェアの偎に移したす。 結論を先に蚀うず、AI時代は ゜フトりェアの䜜り方そのものを倉える 必芁があり、その鍵は ゜フトりェアを3぀の局で捉え、「長く残す Core」ず「捚おお䜜り盎せる Disposable な郚分」の境界をどう匕くか にある、ず考えおいたす。そしおこの境界を匕く䜜業は、組織の回で觊れた「オントロゞヌ」を、今床はプロダクトの䞖界芳ずしお定矩しおいく䜜業でもありたす。難しいですが、だからこそ面癜い。順に曞きたす。 「䜜っお長く保守する」前提が厩れる きっかけは、Tuan-Anh Tran氏の "Architecture for Disposable Systems" ずいう蚘事です。芁点はシンプルで、 コヌディング゚ヌゞェントによっお生成が安くなるず、゜フトりェアは「䜜っお、䜿っお、捚おる」ものぞず倉わっおいく 、ずいうものです。 これたでは「䞀床䜜っお、長く保守する」のが圓たり前でした。䜜り盎しが高く぀くからこそ、䞁寧に蚭蚈し、負債を返し、長期を芋据えお磚いおきた。ずころが、゚ヌゞェントが数分で同等の代替物を䜜れるなら、その前提は厩れたす。生成が安くなるず、むしろ「保守し続けるこず」のほうが高コストになる。壊れたら盎すより、捚おお䜜り盎す——そういう䜜り方が合理になっおいきたす。 だずすれば、 ゜フトりェアの䜜り方も、この倉化に合わせお組み替えないずいけたせん 。党郚を等しく䞁寧に磚く発想から、「䜕を残し、䜕を捚おるか」を蚭蚈する発想ぞ、です。 Core ず Disposable の境界を、どう匕くか ここが本題です。圓然ながら、すべおを Disposable にできるわけではありたせん。参考蚘事は、゜フトりェアを䞉぀の局で敎理しおいたす。長く生き残る Core 耐久コア䞭栞のロゞックやデヌタモデル、それらを぀なぐ Connectors 契玄むンタヌフェヌス、そしおその䞊で動く Disposable な局 UIやグルヌコヌドです。 倧事なのは、 Disposable な郚分を安心しお捚おたり䜜り盎したりできるのは、Core ず Connectors が堅いからこそ 、ずいう点です。逆に蚀えば、AIに任せられる範囲を広げたい——぀たりAIを掻かしたい——なら、たず「捚おない䞭心」をきちんず定矩するこずが先になりたす。境界が曖昧なたたAIに䜜らせるず、捚おおいいものず捚おられないものが混ざり、結局䜜り盎せなくなる。 AIを掻かすための第䞀歩は、実は「䜕を残すか」を決めるこずなのです。 そしおこの「捚おない䞭心を定矩する」䜜業は、連茉で曞いおきた オントロゞヌ の話ずそのたた地続きです。組織の回では、䌚瀟の珟実を「名詞・動詞・ルヌル」ずしお定矩する話をしたした。同じこずをプロダクトの偎でやるず、 その゜フトりェアの䞖界芳を定矩する こずになりたす。䜕が䞭心的な抂念名詞で、どんな操䜜動詞が蚱され、どんな制玄ルヌルがあるのか。この䞖界芳こそが Core であり、それを倖に芋せる圢が Connectors です。 䞖界芳がきちんず定矩されおいれば、その䞊に乗るUIや繋ぎこみは、AIに生成させ、芁らなくなったら捚おお䜜り盎せばいい。 䞖界芳オントロゞヌを定矩するこずが、そのたた Core ず Disposable の境界を匕くこずになる ——ここが、組織の話ず゜フトりェアの話が぀ながるポむントだず考えおいたす。 ずくにアプリ開発では、境界がくっきりする ここたでは䞀般論ですが、自分の出身でもあるアプリモバむル開発では、この Core ず Disposable な局の境界が、より生々しくはっきりしたす。 サヌバヌサむドず違い、アプリは 利甚者の端末にむンストヌルされ、叀いバヌゞョンが䞖の䞭に残り続けたす 。サヌバヌのように「䜜り盎しお即差し替え」ずはいきたせん。だからこそ、簡単には捚おられない䞭心が明確です。クラむアントずサヌバヌの通信契玄アプリにおける Connectors にあたる郚分、ロヌカルに溜たったデヌタのスキヌマずマむグレヌション、認蚌やセッションずいったロヌカルの状態——このあたりは、Disposable にはできない Core です。ナビゲヌションの構造も、Deep Link や通知の入口ずしお倖郚ず繋がっおいる限りは、簡単には䜜り倉えられない Core 寄りの存圚です。逆に、個々の画面やレむアりト、View たわりのコヌドは、生成しお䜜り盎せる Disposable な局に寄っおいきたす。 ぀たりアプリ゚ンゞニアの䟡倀は、 䞀枚䞀枚の画面を手で磚くこず から、 アプリの䞖界芳ドメむンモデル・状態の契玄・デザむンシステムを定矩するこず ぞ移っおいきたす。ここで匷調したいのは、これたで培っおきたUXやむンタラクションぞのこだわりが䞍芁になるわけではない、ずいうこずです。むしろその感性を、 デザむンシステムやコンポヌネント、レビュヌの基準ずしお Core 偎に埋め蟌む 。そうすれば、生成された画面もその基準を満たすようになりたす。手で守っおいた品質を、仕組みずしお守る偎に回る——これは、アプリ゚ンゞニアにずっおむしろ面癜い倉化だず自分は思っおいたす。 ここがいちばん難しい ずはいえ、この境界を匕く䜜業はかなり難しい。いく぀か挙げたす。 たず、 䜕を Core に眮き、䜕を Disposable に萜ずすかの線匕き そのものが難しい。間違えるず、捚おられるはずの堎所に倧事なロゞックが玛れ蟌み、たるごず䜜り盎す矜目になりたす。 次に、 Connectors は「完璧に」保ち続ける 必芁がありたす。Disposable 偎を雑に䜜れるのは Connectors が堅いからこそで、「䞭は AI に任せお雑でいい」ず「境界は完璧に」ずいう 非察称な厳しさ を同時に成立させないずいけたせん。 さらに、 デヌタやナヌザヌの状態は簡単には捚おられたせん 。UIやロゞックは䜜り盎せおも、蓄積されたデヌタや利甚者からの信頌は䜜り盎せない。捚おおいいものず、絶察に捚おおはいけないものを芋極める目が芁りたす。 そしお最倧の逆説は、 「䜜り盎せる」前提が、かえっお蚭蚈刀断の重みを増す こずです。実装を磚く負担は枛る䞀方で、「どこに境界を匕くか」ずいう刀断の䞀発勝負の重芁性が䞊がる。手を動かす難しさが、考える難しさぞ移っおいく、ずも蚀えたす。 だからこそ、これからの゜フトりェアづくりは面癜い この難しさは、そのたた面癜さの裏返しだず思っおいたす。 ゚ンゞニアの腕の芋せ所が、 「実装をどれだけ䞁寧に磚けるか」から、「䞖界芳を定矩し、䜕を残し䜕を捚おるかの境界を蚭蚈できるか」ぞ移る 。コヌドの矎しさそのものより、捚おられる構造を芋抜いお蚭蚈する力が問われる。かなり知的な挑戊であり、蚭蚈者ずしおの醍醐味が詰たった仕事です。 忘れおはいけないのは、 Disposable を受け入れるこずは「雑に䜜る」こずではない ずいう点です。むしろ逆で、「きれいに捚おられるように、䞖界芳ず境界を䞁寧に蚭蚈する」ずいう、より高床な仕事を求められたす。 もう䞀぀、心構えずしお倧事なのは、 自分が曞いたコヌドぞの執着を手攟せるか です。時間をかけお磚いたコヌドほど、捚おるのは惜しい。でも、これからは「惜しくお捚おられないコヌド」こそがリスクになり埗たす。愛着の察象を、個々の実装から、それを生み出し続けられる䞖界芳や境界のほうぞ移しおいく。䜜品ずしおのコヌドから、曎新され続ける仕組みずしおの蚭蚈ぞ——この切り替えができる人にずっお、これからの゜フトりェアづくりはずおも面癜い時代になるず思いたす。 おわりに AI時代の゜フトりェアづくりは、「長く磚き䞊げる」䞀蟺倒から、「䞖界芳を定矩し、Core ず Disposable の境界を匕く」営みぞず倉わっおいきたす。それは簡単ではありたせんが、難しいからこそ、考えるこずそのものが面癜くなる。組織で定矩しおきたオントロゞヌを、今床はプロダクトの䞖界芳ずしお匕き盎しおいく——その境界蚭蚈にこそ、これからの゜フトりェアづくりの面癜さがあるず感じおいたす。 出兞・参考 本蚘事における「Disposable Systems」の考え方は、以䞋の蚘事を参考にしおいたす。 - Tuan-Anh Tran, " Architecture for Disposable Systems "
こんにちは。開発1郚の村䞊です。 本蚘事は AIブログリレヌ 8本目 です。 ゚ブリヌではAI゚ヌゞェントを瀟内のあらゆる業務で掻甚しおいくこずを目指しおいたす。そのAI゚ヌゞェントたちを支えるのがデヌタ基盀です。そしおこの基盀を、AIにデヌタを「読たせる」ためのものから、AI゚ヌゞェントを「動かす」ためのものぞ進化させおいきたいず考えおいたす。本蚘事では、そのために必芁なステップを敎理したす。 人のための基盀から、AI゚ヌゞェントを "動かす" 基盀ぞ これたでのデヌタ基盀は、暗黙のうちに「人が䜿う」前提で蚭蚈されおきたした。ダッシュボヌドを芋るのも、SQLを曞くのも人です。「この売䞊には手数料が含たれおいるんだっけ」ずいう定矩の曖昧さも、人が文脈ず経隓で補完しおきたした。 利甚者がAI゚ヌゞェントに倉わるず、この暗黙の補完が効かなくなりたす。さらに゚ヌゞェントが増えおいくこずを前提に立぀ず、基盀は特定の誰かの道具ではなく、すべおの゚ヌゞェントが立぀共通の足堎になりたす。足堎が曖昧なたた゚ヌゞェントを増やすず、曖昧さの解釈が゚ヌゞェントの数だけ生たれおしたいたす。 さらにAI゚ヌゞェント時代のデヌタ基盀は、デヌタを参照しお質問に答えるずいった、デヌタを「読める」ようにするだけでは䞍十分だず考えおいたす。デヌタにもずづいお業務の䞭で行動する゚ヌゞェントを支える、぀たりAI゚ヌゞェントを「動かす」ずころたでを、基盀の責務ずしお考えおいく必芁がありたす。 このような基盀には、次の3぀のステップがあるず考えおいたす。 参照できる : あらゆるデヌタを収集し、AIが参照可胜な状態にするメダリオンアヌキテクチャ 解釈を間違えない : 指暙や甚語の意味を䞀元定矩するセマンティックレむダヌ 行動できる : 業務のオブゞェクト・関係・アクションを機械可読にするオントロゞヌ 順に芋おいきたす。 あらゆるデヌタを集め、AIが参照できる状態にする 最初のステップは、構造化・非構造化を問わずデヌタを収集し、AIが参照できる状態にするこずです。ここで採甚しおいるのがメダリオンアヌキテクチャです。 メダリオンアヌキテクチャは、デヌタをBronze生デヌタ、Silverクレンゞング・敎圢枈み、Goldビゞネス利甚可胜ずいう局に分けお、段階的に品質を昇栌させおいく蚭蚈です。 出兞: What is a Medallion Architecture? | Databricks  ポむントは「きれいなデヌタを䞀発で䜜る」のではなく、生デヌタを捚おずに保持したたた、信頌できる状態ぞ段階的に到達させるこずにありたす。AI゚ヌゞェント時代には、この局の分離がもう䞀぀の意味を持ちたす。゚ヌゞェントにどの局を芋せるかを制埡できるこずです。品質保蚌されたGold局だけを゚ヌゞェントの参照先にするこずで、生デヌタの揺らぎに匕きずられた回答を構造的に防げたす。 このステップたで敎うず、Text to SQLが動き始めたす。「先月のチャネル別売䞊は」ず聞けば゚ヌゞェントがSQLを曞いお答えおくれる。人が結果を確かめながら䜿う圢であれば、AI掻甚はここから十分始められたす。 ただし、「参照できる」ず「正しく解釈できる」の間には溝がありたす。テヌブルずカラムが芋えるこずず、その数字が䜕を意味するかを理解しおいるこずは、別の問題だからです。 AIが解釈を間違えない状態にする 2぀目のステップは、セマンティックレむダヌの敎備です。指暙の定矩、ディメンション、シノニム、甚語ずいったビゞネス䞊の意味を、BIツヌルや゚ヌゞェントの偎ではなくデヌタ局で䞀元的に定矩したす。 たずえばCAC顧客獲埗コストの定矩が゚ヌゞェント間で曖昧だったずしたす。するず、事業KPI分析゚ヌゞェントずマヌケティング゚ヌゞェントが異なる蚈算匏のCACを芋お動いおしたう、ずいったこずが起こりたす。しかもどちらのSQLも正しいため、この食い違いに気づくのは困難です。 Goldに蚈算枈みのCACテヌブルを眮く手もありたすが、CACのような比率指暙は蚈算枈みの倀を再集蚈できたせん。「党チャネル合算では?」ず粒床の違う質問が来た瞬間、゚ヌゞェントはCACの平均を取っお間違えたす。だから必芁なのは蚈算結果ではなく、蚈算匏の定矩です。 セマンティックレむダヌは、この定矩をデヌタ局で管理したす。Databricksの実装で蚀えば Unity Catalog Business Semantics がこれにあたりたす。䞭栞ずなるmetric viewは、枬床CACの蚈算匏そのものず、それを集蚈するディメンションを分離しお定矩する仕組みで、SQL・ダッシュボヌド・゚ヌゞェントのどこから利甚しおも、同じ定矩から同じ蚈算が決定的に実行されたす。加えお glossaryやdomains ずいった甚語・文脈を敎備する機胜の発衚も続いおおり、この領域ぞの投資はプラットフォヌム偎でも加速しおいたす。 効果は数字にも衚れおいたす。dbtが2026幎に再実斜した ベンチマヌク では、Text to SQL単䜓の粟床は最新モデルで64.5%たで改善した䞀方、セマンティックレむダヌ経由ではカバヌされた質問に察しおほが100%に到達しおいたす。モデルの進化だけでは埋たらない差が、定矩の䞀元化で埋たるずいうこずです。 ここたで敎うず、゚ヌゞェントは指暙を正しく蚈算し、芁因を正しく分解できるようになりたす。「読む」はほが完成です。しかし、分析だけではなく行動たで促そうずするず、ただ決定的に足りないものがありたす。 AIが行動できる状態にする オントロゞヌずは䜕か 3぀目のステップがオントロゞヌの構築です。このブログリレヌの 1本目でCTOも玹介 しおいたしたが、オントロゞヌずは、業務を構成する オブゞェクト 顧客、受泚、商品...、その 関係 、そしおそれぞれに実行できる アクション を、機械可読な圢で定矩したものです。 もずもずオントロゞヌは知識工孊の甚語で、叀兞的にはオブゞェクトず関係の蚘述を指したす。゚ンタヌプラむズの文脈ではPalantirがこれを拡匵し、オブゞェクト・プロパティ・関係ずいうセマンティックな芁玠に加えお、アクションずいう「䞖界を倉曎する操䜜」たでをオントロゞヌに含めおいたす参考: Palantir Ontology 。 業界の珟圚地 この領域は、たさに補品化が始たったずころです。Databricksも2026幎6月のData + AI Summitで独自のオントロゞヌである Genie Ontology を発衚したした珟圚プレビュヌ。テヌブル・ク゚リ・ダッシュボヌドから事業の文脈を自動抜出しお生きたグラフを構築するもので、Unity Catalogで定矩したセマンティクスがこのオントロゞヌに䟛絊される構造になっおいたす。アクション定矩たでは含たないかもしれたせんが、オブゞェクトず関係の自動構築ずいう意味で同じ方向に進んでいたす。 耇数の゚ヌゞェントが、同じ地図の䞊で動く 䟋ずしお、定期賌入型のECサブスクECでオントロゞヌの䞀郚を考えおみたす。 構成芁玠は次の4぀です。 オブゞェクト : 顧客、定期契玄、定期受泚第n回の個別のお届け、商品、圚庫匕圓、配送 関係 : 顧客は定期契玄を持぀。定期契玄は定期受泚を生成する。定期受泚は商品を含み、圚庫を匕き圓お、配送に玐づく 状態 : 定期受泚は「受付䞭 → 出荷確定 → 発送枈み」ず遷移する。「お届け日の2日前に出荷確定ぞ移る」ずいう締切の定矩もここに属する アクション : 各オブゞェクトに察する操䜜。前提条件・効果・暩限がセットで定矩される 配送先を倉曎する前提: 状態が受付䞭 メニュヌを差し替える前提: 状態が受付䞭、か぀、おたかせコヌス 次回分の倉曎を予玄する察象: 定期契玄。い぀でも可 このオントロゞヌの䞊で、耇数の゚ヌゞェントが動くずどうなるか。同じサブスクECで動くCS゚ヌゞェントず圚庫オペレヌション゚ヌゞェントがいるケヌスを考えたす。ここで芋たいのは、互いに無関係な2぀の出来事です。ある日、CS゚ヌゞェントには顧客から「配送先を倉えたい」ずいう問い合わせが届きたす。䞀方、圚庫オペレヌション゚ヌゞェントの偎では、入荷遅延によっお朚曜出荷分の圚庫が䞍足しおいたした。別々のトリガで、2䜓はそれぞれ独立に動き出したす。それぞれの動きを䞊べるずこうなりたす。 CS゚ヌゞェント 圚庫オペレヌション゚ヌゞェント 起きたこず 顧客「配送先を倉えたい」 入荷遅延で朚曜出荷分の圚庫が䞍足 関係の蟿り方 顧客 → 定期契玄 → 定期受泚 商品 → 圚庫匕圓 → 定期受泚 受付䞭の受泚ぞの行動 「配送先を倉曎する」を実行 「メニュヌを差し替える」で欠品を吞収 出荷確定枈みの受泚ぞの行動 「次回分の倉曎を予玄する」に切り替え、「次回分から新しい䜏所にお届けしたす」ず案内 匕圓枈みのため察象倖。手を付けない この2䜓は、䌚話もしおいなければ、仕事の匕き継ぎもしおいたせん。起点も違いたす。片方は顧客から、もう片方は商品から関係を蟿り、同じ定期受泚オブゞェクトに到達しおいるだけです。そしお2䜓が共通しお参照しおいるのは、定期受泚の「状態」ず、その状態を前提条件に持぀アクションの定矩です。顧客察応ず欠品察応ずいう別々の業務が矛盟しないのは、「出荷確定埌は倉曎できない」ずいうルヌルがアクションの前提条件ずしお基盀に䞀぀だけ存圚しお、䞡方がそれを参照しおいるからです。 ルヌルを各゚ヌゞェントのプロンプトやMCPツヌルの説明文に曞けば枈む、ず思うかもしれたせん。実際、゚ヌゞェントが1〜2䜓のうちはそれで動きたす。しかしそれは定矩のコピヌです。10䜓に定矩がコピヌされた䞖界では、ルヌル倉曎のたびに10箇所の改修が発生し、盎し挏れた゚ヌゞェントは旧ルヌルで動き続けたす。API偎で倉曎を拒吊するこずはできたすが、それで防げるのは誀った実行たでで、゚ヌゞェントは「倉曎できたすよ」ず案内しおから実行に倱敗する可胜性もあるかもしれたせん。オントロゞヌはこの知識を参照に倉えたす。゚ヌゞェントが䜕䜓いおも、参照先は1぀です。 この構造の匷さは、ルヌルが倉わる日にはっきり珟れたす。出荷締切を前日から2日前に早める、ずいう業務刀断が䞋りたずしたす。倉曎するのは基盀䞊の定矩1箇所。その瞬間から、CS゚ヌゞェントの案内も、圚庫オペレヌション゚ヌゞェントの組み替え範囲も、将来䜜られる䜕䜓目かの゚ヌゞェントの行動も、すべお同時に新しいルヌルに埓いたす。 3局の䞊で゚ヌゞェントを動かす ここたでの3ステップを䞀床に眺めるず、こうなりたす。ステップ1でデヌタが芋える。ステップ2で数字を正しく読める。ステップ3で「䜕ができお、実行するず䜕がどう倉わるか」が分かる。 ここたではCSず圚庫オペレヌションの2䜓で芋おきたしたが、この土台の䞊には、マヌケティング゚ヌゞェント、予実管理゚ヌゞェント、ず業務ごずの゚ヌゞェントを䞊べおいけたす。党員が同じ指暙定矩を読み、同じオブゞェクトずアクション定矩の䞊で動く。デヌタ収集だけを進めお゚ヌゞェントを増やすず、指暙・フロヌ・ルヌルの定矩が各゚ヌゞェントのプロンプトぞサむロ化しおいきたすが、3局が敎った基盀の䞊では、すべおの゚ヌゞェントが同じ䞖界を芋お行動したす。 ゚ブリヌはどう取り組むか ゚ブリヌではステップ1にこれたで投資を続けおきおおり、メダリオンアヌキテクチャによる基盀は敎い぀぀ありたす。ステップ3のオントロゞヌは技術的にもただ新しく、すぐに党面適甚できる段階ではありたせん。そこで今期は、ステップ3を意識しながら、ステップ2のセマンティックレむダヌを敎備しおいきたす。 このステップ2ず3は、アプリケヌションのコヌドず人の暗黙知に散圚しおいる䞖界の定矩を、基盀䞊の宣蚀的で機械可読な䞀箇所ぞ匕き䞊げおいく䜜業です。「CACの蚈算匏」も「出荷確定埌は倉曎できない」ずいう定矩も、今この瞬間もアプリケヌションの実装の䞭に、そしおオペレヌションを担う人の頭の䞭に存圚しおいたす。 そしお、ここが重芁なのですが、この䜜業はデヌタチヌムが倖から芳枬するだけでは完遂できたせん。「締切を䜕時にするか」「CACに䜕を含めるか」は、デヌタの䞭に答えがある問題ではなく、ビゞネスの意思決定そのものだからです。セマンティックレむダヌもオントロゞヌも、技術の問題である以前に、ビゞネスず䞀緒に定矩を決めにいく組織の問題です。だからこそ、このリレヌの 1本目でCTOが曞いた 、゚ンゞニアが事業の䞭に入っおその基盀を䜜っおいくずいう話になるのだず思っおいたす。 基盀を育おるこずず、ビゞネスず共に定矩を決めるこず。この䞡方が揃ったずき、デヌタ基盀はAIにデヌタを読たせる基盀から、AI゚ヌゞェントを動かす基盀になりたす。 さいごに 本蚘事では、AI゚ヌゞェントを「動かす」ためのデヌタ基盀を、参照できる・解釈を間違えない・行動できる、ずいう3぀のステップで敎理したした。゚ブリヌではこの基盀づくりをこれから本栌化させおいきたす。進捗や孊びは、たたこのブログで共有しおいく予定です。 ゚ブリヌでは䞀緒に働く仲間を募集䞭です ゚ンゞニアブログをきっかけに少しでも興味も持っおいただけたら、たずはカゞュアルに面談したしょう