KINTOテクノロゞヌズのブログ - TECH PLAY

TECH PLAY

KINTOテクノロゞヌズ

KINTOテクノロゞヌズ の技術ブログ

å…š1131ä»¶

はじめに 想定読者デヌタサむ゚ンティストなど、日垞的にデヌタを扱っおいお、コネクティッドデヌタは初めおの方。 この蚘事で分かるこずコネクティッドデヌタの䞭身、䞀般的な分析の流れ、それが䜕に䜿われるか、扱うずきに詰たる点。 こんにちは。KINTOテクノロゞヌズのデヌタサむ゚ンスGに所属するfalsenineです。 コネクティッドデヌタずは、通信機胜を持぀クルマが、クラりドに送るデヌタのこずです。車速や䜍眮情報などが含たれ、運転者ごずの安党運転スコアを保険料の割匕に反映する保険や、亀通情報の生成などに掻甚されおいたす。 なお本蚘事は、各瀟が公開しおいる資料をもずに、モビリティデヌタ党般の䞀般的な扱いを敎理したものです。特定のサヌビスの実装や、圓瀟の運甚そのものを説明したものではありたせん。 コネクティッドデヌタの䞭身 コネクティッドデヌタは、生成源で3局に分けるず敎理しやすいです。トペタの公開資料は、車茉通信機DCM経由で取埗する車䞡デヌタを「走行状況に関するデヌタ」ず「車䞡状態に関するデヌタ」に倧別しおいたす。これに車茉カメラからのデヌタを加えた3局で、本蚘事では䞻芁なデヌタを敎理したす。 å±€ 代衚的な項目 取埗のトリガ 走行状況 車速、゚ンゞン回転数、加速床、アクセルブレヌキ操䜜、シフトポゞション、走行距離、䜍眮情報 走行䞭に継続。䜍眮情報や車速は定期送信 車䞡状態 譊告灯の衚瀺情報、ダむアグ故障蚺断情報 状態倉化・異垞怜知 車倖画像 車倖の動画前埌数秒〜玄2分 衝突盞圓、悪路、新芏開通道路などの条件成立時 局で分ける理由は、粒床ず扱いが違うためです。走行状況は連続的な時系列、車䞡状態はむベントログ、車倖画像は条件付きのスナップショットに近いデヌタずなり、同じ車䞡デヌタでも、前凊理が異なりたす。[^toyota-data][^toyota-policy][^toyota-camera] どう分析するのか 走行状況を䟋に挙げたしょう。生の信号は、そのたたでは䜕の指暙にもなりたせん。モビリティのデヌタ分析は、単䜍を揃え、関心のあるむベントを定矩し、甚途に合わせお集玄するずいう加工を重ねお、生の信号を意味のある指暙に倉えおいく䜜業です。以䞋の4階局は、各瀟の公開資料に共通しお珟れる䞭間成果物を本蚘事で敎理したもので、業界共通の呌び方ではありたせん。 階局 やるこず 出おくるもの 信号 車速・加速床・䜍眮を時系列で受け取る 生の時系列 トリップ 䞀般的には、゚ンゞンのONOFFや䞀定時間以䞊の停車を境界に区切る定矩は事業者により異なる 1回の移動 むベント 閟倀を超えた挙動を抜き出す 発生回数ず発生地点 集箄 ドラむバヌ・道路リンク・メッシュのどれかに寄せる スコア、旅行時間、混雑床 䜍眮情報は道路に玐づけたす。この凊理はマップマッチングず呌ばれたすが、正しく玐づくずは限りたせん。トンネルで枬䜍できない、高速道路ず䞀般道が䞊走する、郜垂郚で誀差が倧きい、道路圢状が耇雑、ずいった条件では別の道路に圓たりたす。地図に茉っおいない现い道を走った堎合も、茉っおいる道のどれかに寄せられたす。 むベントが蚭蚈のポむントです。急ブレヌキ刀定の閟倀は、事業者ごずに異なりたす。プロヌブデヌタの提䟛事業者の説明では、閟倀0.3Gなら3秒間に玄30km/h、0.25Gなら玄25km/hの枛速を怜出するずされたす。0.05Gの違いで拟う挙動が倉わり、同じ生デヌタから別の結論が出たす。[^sei-faq][^kddi-probe] 䜕に䜿われおいるのか 集玄でどの単䜍に寄せるかが、甚途を決めたす。トペタは車䞡デヌタの利掻甚を「コネクティッドサヌビス」「いいクルマづくり」「いい町・いい瀟䌚づくり」に分類しおいたす。 集玄単䜍 甚途区分 䟋 ドラむバヌ・車䞡 コネクティッドサヌビス 運転特性による保険料割匕 車䞡車皮暪断 いいクルマづくり 品質改善、開発ぞのフィヌドバック 道路リンク・メッシュ いい町・いい瀟䌚づくり 通れた道マップ、亀通情報、道路保守点怜 道路単䜍に寄せた䟋が、高速道路の枋滞末尟怜知です。車速の䜎い車䞡が集たる区間を特定し、その䞋流を枋滞末尟ず定矩したした。クラスタリングずカルマンフィルタで掚定し、路偎レヌダヌによる既存゜リュヌションず重なる粟床を確認しおいたす。センサヌを蚭眮する代わりに、走っおいるクルマをセンサヌずしお䜿う発想です。[^toyota-data][^toyota-insurance][^techplay] 扱うずきに詰たる4点 ここたでの倉換は分析者が蚭蚈できたす。䞀方で入力の条件は決められたせん。クルマ1台には100台以䞊のECU電子制埡ナニットが茉っおいたすが、クラりドに届くのは、そこから必芁な項目だけを遞んで圧瞮したものです。ログの蚭蚈暩が車䞡偎にあるずいうこずです。 Webのアクセスログ 車䞡デヌタ ログ項目の決定 分析する立堎の人。あずからタグを远加し、蚈枬内容を倉曎できる。 車䞡の開発時点。車皮・グレヌドで違う 母集団 察象ナヌザヌの党数 同意した車䞡のみ デヌタの到着順 ほが生成順 通信が切れるず車内に滞留し、埌からたずめお届く ここから4぀のズレが生じ、そのたた技術課題になっおいたす。 母集団のズレ同意した車䞡しか芳枬できたせん。党数ではない暙本から党䜓を掚定するため、遞択バむアスが圱響したす。 スキヌマのズレ項目は車皮・グレヌドで異なり、今埌も倉わりたす。スキヌマ進化を前提にした蚭蚈が必芁です。 時刻のズレ生成時刻ず到着時刻が乖離したす。集蚈りィンドりの締め方ず再蚈算の蚭蚈が論点になりたす。 䜍眮のズレ枬䜍誀差や䞊走道路のせいで、別の道路に圓たるこずがありたす。マップマッチングの粟床が、䞋流の集蚈すべおを巊右したす。 たた、䜍眮情報や走行履歎は、個人の行動が衚れるデヌタです。扱う際は、匿名化や利甚目的の適切性が重芁になりたす。[^toyota-data][^techplay][^apc][^mobility-night] 掻かせる経隓ず、新しく芚えるこず 掻甚できるスキルは、SQL、分散凊理、時系列の前凊理、因果掚論や機械孊習の蚭蚈力です。4階局の倉換自䜓は、扱ったこずのある凊理の組み合わせに芋えるはずです。新しく芚えるのは、クルマの信号の意味ず、閟倀や集玄単䜍をどう決めるかのビゞネス感芚です。 個人的に面癜いず感じるのは、この分野では「䜕を枬るか」の蚭蚈がただ固たっおいないこずです。急ブレヌキの刀定基準ひず぀取っおも事業者ごずに異なり、その蚭蚈が分析の結論やサヌビスのあり方に圱響したす。敎備されたログを枡されお分析するのではなく、枬り方から考える䜙地が残っおいる。だからこそ、分析する人の蚭蚈しだいで、より安党な運転を促し、より快適なサヌビスを生み出せる可胜性がありたす。ここが䞀番の醍醐味だず思っおいたす。 䜍眮情報の扱いに぀いおは、KINTOテクノロゞヌズの勉匷䌚「 Mobility Night #1 - GPS・䜍眮情報 」の内容をテックブログで公開しおいたす。GPSの粟床をどう扱うかずいった、実務寄りの論点が䞊んでいたす。 [^toyota-data]: トペタ自動車「お客様のクルマからの車䞡デヌタの取埗ず利甚に぀いお」 https://global.toyota/jp/sustainability/privacy/data-utilizing-initiatives/index.html [^toyota-policy]: トペタ自動車「コネクティッドカヌから取埗するデヌタの利掻甚・保護の取組みに぀いお」2019 https://toyota.jp/pages/contents/tconnectservice/contents/pdf/toyota_datapolicy.pdf [^toyota-camera]: トペタ自動車「車茉カメラによる走行環境画像の取埗ず利甚に぀いお」 https://global.toyota/jp/sustainability/privacy/on-board-cameras-initiatives/ [^toyota-insurance]: トペタ自動車「トペタのコネクティッドカヌ向けに囜内初の運転挙動反映型テレマティクス自動車保険を開発」運転特性の評䟡項目 https://global.toyota/jp/detail/19575777 [^sei-faq]: 䜏友電工システム゜リュヌション「Traffic Vision プロヌブデヌタサヌビス よくある質問」Hondaカヌプロヌブデヌタの仕様。急ブレヌキ閟倀 0.3G0.25G の怜出範囲 https://www.seiss.co.jp/products/tv_probe/faq.html [^kddi-probe]: KDDI「商甚車のプロヌブデヌタ」矢厎゚ナゞヌシステム補デゞタルタコグラフによる商甚車プロヌブの仕様。トリップ刀定ぱンゞンON/OFFたたは滞圚時間15〜120分の指定。マップマッチングが正しく刀定されない条件、DRM基本道路に未定矩の道路の扱い https://biz.kddi.com/service/iot-cloud-data/data/probe/ [^techplay]: TECH PLAY「【TOYOTA✕ビッグデヌタ】車䞡デヌタの掻甚事䟋」トペタ䞻催むベント講挔録。ECU構成・枋滞末尟怜知 https://techplay.jp/column/1977 [^apc]: APC技術ブログData + AI Summit 2025 トペタ登壇セッションの二次報告。遅延デヌタの蚘述に䜿甚 https://techblog.ap-com.co.jp/entry/2025/06/26/154309 [^mobility-night]: KINTO Tech Blog「Mobility Night #1 - GPS・䜍眮情報」 https://blog.kinto-technologies.com/posts/2024-12-10-Mobility-Night-1-GPS-%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1/
はじめに こんにちは KINTO開発郚 KINTOシステム開発G マスタヌメンテナンスツヌル開発チヌム、技術広報郚兌務、Osaka Tech Lab 所属の high-g @high_g_engineer です。フロント゚ンド゚ンゞニアをやっおいたす。 以前、瀟内で開催しおいるフロント゚ンド勉匷䌚に぀いお玹介したした。 https://blog.kinto-technologies.com/posts/2025-06-30-frontend-study-group/ あれから勉匷䌚は続き、2026幎10月で第91回を迎えたした。 今回はその䞭で、2026幎8月〜9月に党5回で実斜した 『HTML解䜓新曞』の茪読䌚 に぀いお玹介したす。 正盎なずころ、曞籍の茪読䌚はフロント゚ンド勉匷䌚では前䟋がなく、ずりわけ、分厚い技術曞の茪読䌚ずなるず、「途䞭で倱速しがち」「ただ読み䞊げるだけの䌚になりがち」ずいう印象があり、少しハヌドルを高く感じおいたした。 実際、私自身も前職で同じ本の茪読䌚を経隓したずき、内容を理解しないたた読み進めるだけの䌚になっおしたった苊い思い出がありたす。 ですが、今回は最埌たで走り切れたうえに、参加者党員が前のめりに議論する堎になりたした。 この蚘事では、その経緯ず進め方、うたくいった理由などをたずめたす。 題材にした曞籍 https://www.borndigital.co.jp/book/25999/ 『HTML解䜓新曞 ―仕様から玐解く本栌入門』は、HTMLの仕様HTML Standardをベヌスに、各芁玠の意味や䜿い方、アクセシビリティずの関係を䞁寧に解説した曞籍です。 なぜHTMLの茪読䌚をするこずになったのか 「次に䜕をやるか」をみんなで話し合った 茪読䌚を始める盎前、勉匷䌚ではTSKaigi 2026のセッション動画をみんなで芖聎しおいたした。ただ、最近のフロント゚ンド勉匷䌚はTypeScriptの型の話に寄りがちな内容になっおいお、動画を芋るだけの䌚が続いおいたこずもあり、「もう少し珟堎に寄り添った勉匷䌚にしたい」ず考えおいたした。 そこで7月に2回ほど時間を取り、参加者が所属する各チヌムで実際に起きおいるフロント゚ンドの課題をヒアリングしたした。 するず、チヌムは違っおも次のような悩みが共通しお挙がりたした。 デザむナヌずの協業の進め方に課題がある UI / UXに関する知識をもっず䌞ばしたい アクセシビリティを最終的にコヌドぞどう萜ずし蟌むか、どう呚囲を巻き蟌むか キヌワヌドは「情報蚭蚈」 議論を重ねるうちに芋えおきたのが、「 情報蚭蚈 」ずいうキヌワヌドでした。 勉匷䌚で立おた仮説はこうです。 正しく情報蚭蚈されおいるUI ≒ 正しくマヌクアップされおいる ≒ Webアクセシビリティを満たしおいる デザむナヌず協業するうえでも、アクセシビリティを満たしたコンテンツを䜜るうえでも、土台になるのはHTMLの正しい理解です。 「HTMLの知識を匷化するこずが、情報蚭蚈の理解に぀ながり、ひいおはフロント゚ンドの党チヌムに共通する課題の解決に぀ながるかもしれない」ず考え、たずは h1 〜 h6 を正しい順序で䜿うずいう基瀎的なレベルから理解し盎そう、ずいう結論になりたした。その教材ずしおうっお぀けだったのが『HTML解䜓新曞』です。 いきなり始めず「本を玹介する䌚」を挟んだ ずはいえ、この本は党352ペヌゞずいうなかなかの厚さです。いきなり「来週から茪読䌚をやりたす」ず蚀うず、参加のハヌドルが䞀気に䞊がっおしたいたす。 䞀方で「みんなの準備が敎ったらやろう」では、い぀たでも始たらない可胜性が高いです。 そこで、たずは すでに本を持っおいる人に持参しおもらい、どんな本なのかを玹介する䌚 を䞀床挟みたした。 この䌚で䞭身をパラパラず眺めたこずで「ずりあえず買っお䞀読しおみたす」「今Kindleで買いたした」ずいう声が出お、その堎で進め方のルヌルも決めるこずができたした。 たた、マネヌゞャヌの承認をもらい、東京宀町ず倧阪のオフィスに1冊ず぀䌚瀟で曞籍を賌入できたした。 ただ、ふたを開けおみるず倚くの参加者が自分で賌入しおいお、「䌚瀟で買わなくおも、みんな持っおいたかもしれない」ずいうくらいでした。 茪読䌚の進め方 ルヌル ルヌルはシンプルにしたした。 参加者はできる限り事前に読んでくる もちろん、読めなくおも倧䞈倫  説明担圓は担圓箇所を事前に粟読し、圓日に説明する 説明方法はおたかせ  曞籍は䌚瀟賌入分を貞し出し可個人での甚意もOK 「読めなくおも倧䞈倫」ず明蚀しおおくこずで、担圓以倖の人も気軜に参加できるようにしおいたす。 1回玄1時間のタむムテヌブル 時間 内容 10〜30分 担圓者が担圓箇所をざっくり説明 20〜30分 党員で感想や気になったこずを話す 3分 次回の担圓決めルヌレット 次回の担圓は、Claude Artifactsで䜜ったルヌレットで決めたした。ちょっずしたゲヌム感芚があり、「誰になるかな」ず盛り䞊がるポむントでもありたした。 範囲は「䞻芁な節だけ」に絞った 党章を読むず長期戊になっおしたうため、CHAPTER 3の芁玠解説から、特に業務に関わりが深い5぀の節に絞りたした。 回 開催日 範囲 担圓 第1回 8/7 セクション 花茪さん 第2回 8/28 グルヌピングコンテンツ 䞉䞊さん 第3回 9/4 テキストレベルセマンティクス 霋藀さん 第4回 9/11 フォヌム その1 high-g 第5回 9/18 フォヌム その2 溝口さん お盆や私の䌑暇で䜕床かスキップを挟みたしたが、圓初の芋蟌みどおり5回で完走できたした。 アクセシビリティの有識者が参加しおくれた 今回の茪読䌚で倧きかったのが、瀟内のアクセシビリティの有識者である 蟻さん 、 守谷さん が参加しおくれたこずです。 本に曞かれおいる内容に察しお「実際のスクリヌンリヌダヌではこう読み䞊げられる」「昔はこう䜿われおいた」ずいった、 本の䞀歩先の知芋 をその堎で補足しおもらえたこずで、議論の質が倧きく䞊がりたした。 各回の様子 各回ずも、担圓者が本の内容をなぞるだけでなく、独自の切り口でテキストベヌスのたずめを䜜っおきおくれたした。ここでは各回で印象に残ったトピックをいく぀か玹介したす。 第1回セクション section / article / aside / nav ずいったセクショニングコンテンツや、 header / footer がランドマヌクになる条件などを扱いたした。 印象的だったのは、曞籍の刊行ず同じ2022幎に アりトラむンアルゎリズムがHTML Standardから削陀されおいる こずです。 https://github.com/whatwg/html/pull/7829 珟圚は、 section で囲んでも芋出しレベルは䞊がらず、 h1 〜 h6 の数字で決たりたす。 たた、「Reactアプリケヌションでは、最終的にレンダリングされたHTML党䜓を目にする機䌚がほずんどありたせん。セクション構造が正しいこずを日々の開発でどう怜蚌すればよいか」ずいう、コンポヌネント開発ならではの悩みも話題になりたした。 第2回グルヌピングコンテンツ p 、 ul 、 ol 、 dl 、 figure 、 main など「毎日曞いおいる芁玠」がテヌマでしたが、担圓の䞉䞊さんは意味の深い説明よりも、個人的に「そうなんだ」ず感じた郚分を䞭心にたずめおくれたした。 たずえば、 p の䞭に ul を曞くず゚ラヌにはならず、パヌサヌが黙っお p を閉じおしたいたす。 <!-- 曞いた぀もりのHTML --> <p> <ul> <li>項目</li> </ul> </p> <!-- パヌス埌のDOM --> <p></p> <ul> <li>項目</li> </ul> <p></p> その結果、 p > ul を前提にしたCSSが効かなくなったり、末尟に生える空の p で䜙癜が増えたりしたす。SSR環境ではサヌバヌで生成したHTMLずクラむアントのDOMが食い違い、hydration゚ラヌの原因にもなりたす。 ほかにも、次のような話題で盛り䞊がりたした。 ol の番号はDOMに存圚しないため、コピヌペヌストするず消える main は hidden 属性を付けたものを含めれば、1ペヌゞに耇数眮ける hr は「線」ではなく、段萜レベルのテヌマの区切り。スクリヌンリヌダヌでは「区切り」ず読み䞊げられる dl の読み䞊げはブラりザずスクリヌンリヌダヌの組み合わせによっお差があるが、セマンティクスずしお正しいなら䜿う䟡倀がある この回で特に印象に残ったのが、「セマンティクススクリヌンリヌダヌのため」ずいうチャットの発蚀に察する、蟻さんのひず蚀です。 「スクリヌンリヌダヌのため」っおのはたぶんちょっず違うな。スクリヌンリヌダヌはHTMLの仕様に合わせお解釈する偎なので。 スクリヌンリヌダヌで思いどおりに読たせるためにコンテンツを曲げるのではなく、仕様に沿っお正しくマヌクアップし、スクリヌンリヌダヌ偎がそれを正しく解釈する。アクセシビリティを考えるうえでの順序を、改めお確認できたした。 第3回テキストレベルセマンティクス em ず strong 、 small 、 s 、 time 、 ruby 、 bdi 、 br 、 wbr などを扱いたした。 担圓の霋藀さんからは「普段はフレヌムワヌク䞊でコンポヌネント単䜍でしかHTMLを曞かないので、芁玠そのものを意識したこずがなかった」ずいう率盎な感想があり、たさにこの茪読䌚の狙いどおりの気づきが共有されたした。 曞籍の刊行埌に仕様偎で倉わった点も話題になりたした。たずえば、曞籍の時点では察応するARIAロヌルがなかった芁玠にも、WAI-ARIA 1.2ではロヌルが割り圓おられおいたす。 HTML芁玠 WAI-ARIA 1.2でのロヌル em emphasis strong strong del / ins deletion / insertion sub / sup subscript / superscript b / i / small / s / u generic ほかにも、 <p>H<sub>2</sub>O</p> をVoiceOverで読たせるず「゚むチ・ツヌ・オヌ」ではなく「゚むチニオヌ」ず読たれた、日本語にはむタリック䜓の文化がないので i 芁玠はマヌクアップず芋た目が䞀臎しにくい、ずいった実際に詊しおみたからこその話も出たした。 チャットでは、昔䜿っおいたHTML゚ディタの話や、ガラケヌでHTMLを曞いおいた思い出話で䞖代を超えお盛り䞊がる䞀幕もありたした。 第4回フォヌム その1 私の担圓回です。 form 、 label 、各皮 input の type 、バリデヌション属性、 autocomplete などを扱いたした。 特に匷調したのは、 label の for 属性の萜ずし穎です。存圚しない id を指定するずHTMLチェッカヌで゚ラヌずしお怜出できたすが、 別の芁玠の id を指定しおしたった堎合はHTMLチェッカヌでは怜出できたせん。 ラベルをコピヌペヌストしお for を盎し忘れるず、コピヌしたラベルたで最初の入力欄に玐づいおしたう、ずいった事故が起こり埗たす。 これは目で芋おも気づきにくい䞀方、スクリヌンリヌダヌで読み䞊げるずすぐに分かる、ずいう話が蟻さんからありたした。 そのほかにも、次のような話題が出たした。 type="hidden" は「秘密」にはならない倀は改ざんできる pattern 属性はセキュリティのためのものではない placeholder はラベルの代わりにならない 電話番号を「ハむフンなし」ず泚釈しお type="number" で受け取るのは避けたい KINTOのサヌビスには申蟌フォヌムが倚いので、そのたた業務に生かせる内容だったず思いたす。 第5回フォヌム その2 最終回は溝口さんの担圓で、 button 、 select 、 datalist 、 progress / meter 、 fieldset / legend などを扱いたした。 溝口さんの切り口がずおも面癜く、「今はれロからフォヌム郚品を手曞きするこずは少なく、UIラむブラリを䜿うこずがほずんど」ずいう前提に立っお、 MUI・Ant Design・Radix UIがそれぞれの芁玠をどう実装しおいるか を、曞籍の内容ず突き合わせおくれたした。 たずえばスむッチSwitchコンポヌネントひず぀ずっおも、実装方針はラむブラリごずに異なりたす。 ラむブラリ Switchの実装 MUI 芋た目甚の span ず、透明な <input type="checkbox" role="switch"> Ant Design input を䜿わず <button type="button" role="switch" aria-checked> Radix UI <button role="switch" aria-checked> に加え、フォヌム内でのみ非衚瀺の input を远加 select も同様で、ネむティブの select を䜿わずに role="combobox" ず role="listbox" を組み合わせお再珟しおいたり、フォヌム互換のために芋えない select を眮いおいたりず、各ラむブラリの工倫が芋えおきたした。 「アクセシブルな耇数遞択UIを自前で実装するのはかなり倧倉なので、ラむブラリを䜿うのがおすすめ」ずいう結論にも説埗力がありたした。 たた、スむッチは「抌した瞬間に反映されるもの」なので、「保存」ボタンず組み合わせたり、月額幎額のような二択に䜿ったりするのは本来の甚途ずずれる、ずいうSwitchずトグルボタンの䜿い分けの話も盛り䞊がりたした。 ふりかえり å…š5回を終えたあず、勉匷䌚の1回分を䜿っおふりかえりを行いたした。 フレヌムワヌクには、KPTではなく Fun / Done / Learn を採甚しおいたす。KPTだず特に問題がなくおもProblemを挙げる必芁があり、ネガティブな空気になりやすいず考えたためです。 Fun楜しかったこず 茪読䌚は負荷の高いフォヌマットなのに、担圓者が理解したこずを積極的にシェアしおくれた ただ読んでくるだけでなく、担圓者が独自の解釈を織り亀ぜお、より高床な内容に仕䞊げおくれたUIラむブラリの察応状況など 発衚者ごずに本のどこに着目しおいるかが資料に衚れおいお、他の人がどう技術曞を読んでいるのかを知るこずができた 有識者のアクセシビリティの知芋を螏たえお本を読み進める䜓隓ができた 発衚埌のディスカッションで、党員が前のめりに建蚭的な意芋を出す堎になった 蟻さんからは、こんなコメントももらいたした。 昔のWeb制䜜者は、HTML解䜓新曞に曞いおあるくらいのこずは普段䜿いしおいた。今の時代は、そうした知識がなくおもプロダクトが䜜れおしたう。だからこそ、この茪読䌚を通しおみなさんが知ろうずしおくれおいるこずがうれしかった。 さらに、「䞖の䞭の登壇には、画面を芋おいないず眮いおいかれるものが意倖ず倚いけれど、今回のみなさんの発衚は、画面を芋おいなくおも話ずしお理解できた」ずいう、うれしい蚀葉もいただきたした。蟻さんがこの点に぀いお曞いた蚘事も玹介されおいたので、発衚をする方にはぜひ読んでほしいです。 https://note.com/debugon/n/nae7f164bf8a7 Doneやり遂げたこず フロント゚ンド勉匷䌚で曞籍を茪読するスタむルは初めおだったが、無事に完走できた 瀟内に『HTML解䜓新曞』の存圚を広められた 耇数回にわたっお1冊の技術曞を読む、ずいうスタむルを勉匷䌚ずしお1぀確立できた 䞀人で読むのが぀らい本でも、勉匷䌚に持ち蟌んでみんなで読む、ずいう遞択肢ができたのは倧きな収穫です。 Learn孊んだこず HTMLの珟行仕様は垞に曎新され続けるHTML Standardなので、曞籍の内容はすでに叀くなっおいる郚分もある。だからこそ 曞籍は取っかかりずしお䜿い、怪しいず思ったら仕様を匕く セクショニングコンテンツ、グルヌピングコンテンツ、テキストレベルセマンティクスずいったHTMLの原点を改めお思い出せた a 芁玠の内容モデルはTransparent透過的で、芪がフロヌコンテンツなら a の䞭に div などを眮くこずもできる セマンティックなHTMLを曞けばアクセシビリティを網矅できるわけではない。 結局、芋出しやラベルを適切に付けるこずが、アクセシビリティ的に䞀番重芁 芋た目に頌っおいたマヌクアップを、芁玠の意味から考え盎すきっかけになった 担圓になった人は誰も発衚を避けず、1週間で1時間分の議論ができる資料を䜜っおきおくれた。 1回あたりの適切なボリュヌム感 も぀かめた うたくいった理由をふりかえっおみる ふりかえりの内容も螏たえお、今回の茪読䌚がうたくいった理由を敎理するず、次の4぀だず思いたす。 珟堎の課題から題材を遞んだ 「なんずなく良さそうな本」ではなく、各チヌムぞのヒアリングで芋えた共通課題情報蚭蚈・アクセシビリティから逆算しお本を遞びたした。そのため、参加者にずっお「自分ごず」になりやすかったのだず思いたす。 始めるハヌドルを培底的に䞋げた 玹介する䌚を挟む、「読めなくおも倧䞈倫」ず明蚀する、範囲を䞻芁な節に絞る、曞籍を䌚瀟で甚意する、ずいった工倫で、参加の心理的なハヌドルを䞋げたした。 説明方法を担圓者に任せた 本の内容をなぞるのではなく、「そうなんだ」ず感じた点に絞る、UIラむブラリず突き合わせる、など担圓者ごずの切り口が生たれ、毎回違った面癜さがありたした。 有識者が䞀緒に読んでくれた 曞籍の内容を、珟圚の仕様や実際のスクリヌンリヌダヌの挙動ず照らし合わせお補足しおもらえたこずで、「読むだけの䌚」から「理解しお議論する䌚」になりたした。 おわりに 今回の茪読䌚を通しお、HTMLの知識そのものはもちろん、「勉匷䌚で1冊の本を読み切る」ずいう新しい型を手に入れるこずができたした。 ふりかえりでは、次の題材ずしおReactの公匏ドキュメントのような無料で読めるリファレンスを読むのも良さそう、ずいう声や、曞籍の内容を起点に、珟圚のHTMLの仕様やAI時代のマヌクアップに぀いおさらに議論を深める堎を぀くれないか、ずいうアむデアも出おいたす。 少人数のふりかえりではありたしたが、この茪読䌚を乗り越えたこずで、新しいこずができそうな可胜性を感じおいたす。 瀟内で茪読䌚を䌁画しようずしおいる方の参考になればうれしいです。
はじめに こんにちは、2026幎6月入瀟のhyokoです 本蚘事では、2026幎6月に入瀟したメンバヌ2名の入瀟盎埌の感想をたずめたした。 KINTOテクノロゞヌズ以䞋、KTCに興味のある方、そしお、今回参加したメンバヌの振り返りずしお有益なコンテンツになればいいなず思いたす hyoko 自己玹介 KINTO開発郚で契玄管理システムを担圓しおいたす。 今埌、芁件のずりたずめやリリヌスたでの進行管理を担圓する予定です。 これたでは、SIer2瀟、ITコンサル、事業䌚瀟の瀟内SEを経隓しおきたした。 趣味は音楜フェスに行くこずです。ここ数幎はFuji RockやSummer Sonicに行っおいたす。 よろしくお願いしたす 所属チヌムの䜓制は 宀町オフィスに6人、Osaka Tech Labに1人の合蚈7人のチヌムです。 3週間ごずの定期リリヌスで、新芏機胜の開発や既存機胜ぞの改修芁望察応、システム改善を䞊行しお実斜しおいたす。業務圱響のある䞍具合が芋぀かった堎合は臚時にリリヌスしおいたす。 他プロダクトを含むプロゞェクトはりォヌタヌフォヌル、既存機胜の改修芁望はアゞャむルで進めるハむブリッド圢匏です。技術スタックは、フロント゚ンドがJavaScript + HTML、バック゚ンドはPythonです。 KTCの入瀟動機や入瀟前埌のギャップは 事業䌚瀟の瀟内SEずしお、自身が構築に携わったプロダクトに長く関わり、事業の成長に貢献したいずいう思いがありたした。前職でも実珟はできおいたのですが、プラットフォヌム䟝存があったため、よりオヌプンな環境で挑戊したいず考えKTCに入瀟したした。 前職の経隓から瀟内SEのむメヌゞを持っおいたのですが、想像以䞊に高いスキルを持぀優秀な方が倚く刺激を受けおいたす。 珟堎の雰囲気はどんな感じ わいわいず賑やかで、雑談を含めたチヌム内のコミュニケヌションが掻発なチヌムです。 䞀方で職人気質でこだわりのある雰囲気もあり、SIer時代を懐かしく思い出しおいたす。 オフィスで気に入っおいるずころ 最寄り駅が䞉越前で、自宅から1時間以内で通勀できるアクセス性の良さです。 オフィス内にグリヌンが倚くお癒されたす。よく䜿う出入口にあるサボテン倚分、金鯱は特にお気に入りです。 髙田さんからの 質問䌑憩の取り方、おススメの過ごし方があれば教えおください。 昌食は䞀人で行くこずが倚いのですが、時間があるずきは行ったこずのないお店や方面に足を延ばし、新たな発芋を楜しむようにしおいたす。仕事䞭は座っおいるこずが倚いので、少しでも歩いおリフレッシュしおいたす。 時間がないずきは、お匁圓などを買っお䌑憩宀で食べおいたす。䌑憩宀はラゞオが流れおいお適床な雑音があり、ずおも過ごしやすい空間です。 Takada 自己玹介 モビリティプロダクト開発郚 DX゜リュヌショングルヌプに所属しおおり、䞻に囜内販売店ぞ向けたプロダクト開発提案を行っおいたす。 所属チヌムの䜓制は スタッフは倧阪2名、名叀屋1名、宀町4名、合蚈7名䜓制です。 KTCの入瀟動機や入瀟前埌のギャップは 前職は自動車業界におりたしお、これたでの経隓を囜内最倧の四茪販売䌚瀟ネットワヌクであるトペタ系列で掻かしおみたいずいう思いがあり入瀟させおいただきたした。自身は開発者ではないのですが、呚りのスタッフ皆さんのプロダクト開発における知芋の幅や意識の高さに驚いおいたす。毎日が孊びですね。 珟堎の雰囲気はどんな感じ コミュニケヌションはずおもフラットです。そしお自分で調べおも分からないこずは呚囲の誰かしらが手を差し䌞べおくださり、助け合いの文化を感じおいたす。 オフィスで気に入っおいるずころ 最最寄りが䞉越前駅なので自宅からのアクセスがずおも良いです。䟿利すぎお毎日の歩数が極端に枛っおしたい運動䞍足になっおしたいたした。 事務所っぜくない、カフェのような過ごしやすい空間がお気に入りです。 暪山さんからの 質問情報をキャッチアップする際に工倫されおいるこずがあれば教えおください。 自分は䜕が分からないのか、い぀たでにどんな情報が必芁があれば組み立おられるのか、を䞀旊敎理するようにしおいたす。業務に必芁な販売店情報に぀いおは、先方ず盎接䌚話をするず肌感芚のような蚀語化しにくい情報も埗るこずができたすので積極的に蚪問したいですね。その他、販売店珟堎の最前線で䜕が起きおいるのか仮説を立おるために頻繁にAIを掻甚しおいたす。 さいごに 今回は、2026幎6月に入瀟したメンバヌ2名の入瀟盎埌の感想をご玹介したした。 本蚘事が、KTCに興味のある方にずっお、入瀟埌の雰囲気や働くむメヌゞを知るきっかけになればうれしいです。最埌たでお読みいただき、ありがずうございたした そしお、KINTOテクノロゞヌズでは、ただたださたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは こちら からご確認ください
はじめに こんにちは KINTOテクノロゞヌズのデゞタル戊略郚DataOpsグルヌプ所属の䞉浊です。 普段は、瀟内のデヌタ分析基盀の開発・保守・運甚に加え、Google Analytics 4以䞋、GA4やGoogleタグマネヌゞャヌ以䞋、GTMを利甚した、Webサむトのアクセス解析や蚈枬環境の敎備を担圓しおいたす。 WebサむトでGA4やGoogle広告を蚈枬する堎合、䞀般的にはGoogleドメむンからGoogleタグを読み蟌み、Googleドメむンぞ蚈枬リク゚ストを送信したす。 䞀方、ブラりザのプラむバシヌ保護機胜や広告ブロッカヌなどの圱響により、Googleタグの読み蟌みや蚈枬リク゚ストがブロックされ、むベントが欠損するこずがありたす。 今回、この課題ぞの察応ずしお、既存のAmazon CloudFrontを利甚し、Googleタグゲヌトりェむを導入したした。 本蚘事では、Googleタグゲヌトりェむを導入した背景や構成、瀟内での圹割分担、怜蚌時に確認したポむント、導入埌に確認できた効果に぀いお玹介したす。 本蚘事の察象者 本蚘事は、以䞋のような方を察象ずしおいたす。 GTMやGA4を利甚したWebサむトの蚈枬を担圓しおいる方 Googleタグゲヌトりェむの導入を怜蚎しおいる方 Amazon CloudFrontをCDNずしお利甚しおいる方 本蚘事では、CloudFrontの现かな蚭定手順ではなく、導入時の考え方や進め方、怜蚌内容を䞭心に玹介したす。 Googleタグゲヌトりェむ導入の背景ず抂芁 背景 圓グルヌプでは、Webサむトの利甚状況や広告斜策の成果を把握するため、GTMを利甚しおGA4やGoogle広告などの蚈枬タグを配信しおいたす。 通垞の構成では、WebサむトからGoogleドメむン䞊のGoogleタグを読み蟌み、蚈枬したむベントをGoogleドメむンぞ送信したす。 通垞のGoogleタグ配信の構成 しかし、Googleドメむンぞの通信は、ブラりザのプラむバシヌ保護機胜や広告ブロッカヌなどによっお、制限されるこずがありたす。 蚈枬タグや蚈枬リク゚ストがブロックされるず、ナヌザヌが実際にペヌゞを閲芧したり、コンバヌゞョンしたりしおいおも、GA4やGoogle広告ぞむベントが送信されたせん。 その結果、以䞋のような課題が発生する可胜性がありたす。 GA4で確認できるむベント数が、実際の発生件数より少なくなる コンバヌゞョン数が正しく蚈枬されない Webサむトの斜策評䟡に䜿甚するデヌタが䞍完党になる 広告経由の成果を正しく評䟡できない 広告配信の最適化に䜿甚するコンバヌゞョンデヌタが䞍足する 特に広告配信では、蚈枬したコンバヌゞョンデヌタが、自動入札や配信察象の最適化に利甚されたす。 そのため、むベントの欠損は、レポヌト䞊の数倀が少なくなるだけでなく、広告配信の孊習や最適化にも圱響する可胜性がありたす。 実際に察象サむトでは、GA4で蚈枬しおいるコンバヌゞョンペヌゞのむベント数ず、バック゚ンドのデヌタベヌスに保存されおいるコンバヌゞョン件数に差がありたした。 もちろん、GA4ずバック゚ンドのデヌタベヌスでは、蚈枬の仕組みや集蚈条件が異なりたす。 そのため、数倀が完党に䞀臎するものではありたせん。 䞀方で、差が倧きい状態では、実際に発生したコンバヌゞョンの䞀郚をGA4で取埗できおいない可胜性があり、広告斜策やサむト改善を評䟡するうえで課題ずなっおいたした。 そこで、Googleタグぞの通信を自瀟ドメむン経由に倉曎し、タグやむベントがブロックされる圱響を軜枛するこずを目的ずしお、Googleタグゲヌトりェむを導入したした。 抂芁 察象のWebサむトでは、CDNずしおすでにAmazon CloudFrontを利甚しおいたした。 そのため、新たにサヌバヌを構築するのではなく、既存のCloudFrontを利甚しおGoogleタグゲヌトりェむぞの通信を䞭継する構成を採甚したした。 導入埌の構成は以䞋のずおりです。 flowchart TB Browser[Webブラりザ] --> Domain[Webサむトず同じ自瀟ドメむン] Domain --> CF[Amazon CloudFront] CF -->|通垞のWebコンテンツ| Origin[既存の配信先] CF -->|Googleタグゲヌトりェむ甚のパス| GTG[Googleタグゲヌトりェむ] GTG --> GA4[GA4・Google広告など] Webサむト䞊にGoogleタグゲヌトりェむ甚のパスを甚意し、そのパスぞの通信をCloudFrontからGoogle偎ぞ転送したす。 ブラりザから芋るず、Googleタグの読み蟌み先や察象ずなる蚈枬リク゚ストの送信先が、Googleドメむンではなく、Webサむトず同じ自瀟ドメむンになりたす。 Googleタグゲヌトりェむ導入前埌の構成図 芁玠技術・アヌキテクチャの玹介 ここからは、今回の導入で利甚したGoogleタグゲヌトりェむずAmazon CloudFrontに぀いお玹介したす。 Googleタグゲヌトりェむずは Googleタグゲヌトりェむ Google tag gateway for advertisers は、自瀟が管理するCDNやロヌドバランサヌなどのむンフラを利甚しお、Googleタグを自瀟ドメむン経由で配信する仕組みです。 通垞はGoogleドメむンから読み蟌たれるGoogleタグを、自瀟ドメむン䞊の特定のパスから読み蟌めるようにしたす。導入前埌の経路の違いは、前述の「 抂芁 」節の構成図のずおりです。 Googleタグゲヌトりェむでは、GA4のむベント蚭蚈や、GTMコンテナ内のタグの凊理内容を倧きく倉曎するのではなく、Googleタグぞアクセスする経路を倉曎したす。 そのため、既存のGTMコンテナ内のタグ、トリガヌ、倉数などを維持したたた導入できたす。 Amazon CloudFrontずは Amazon CloudFront は、AWSが提䟛するCDNサヌビスです。 Webサむトのコンテンツを利甚者に近い拠点から配信するこずで、衚瀺速床や可甚性の向䞊に利甚されたす。 CloudFrontでは、アクセスされたURLのパスに応じお、異なる配信先ぞリク゚ストを振り分けられたす。 今回はこの仕組みを利甚し、Googleタグゲヌトりェむ甚のパスぞの通信のみを、Google偎ぞ転送するようにしたした。 サヌバヌサむドGTMずの違い Googleタグゲヌトりェむず混同しやすい仕組みに、サヌバヌサむドGTMがありたす。 サヌバヌサむドGTMでは、サヌバヌ甚のGTMコンテナを構築し、サヌバヌ偎で蚈枬リク゚ストを凊理し、送信先を制埡したす。 䞀方、Googleタグゲヌトりェむは、Googleタグの読み蟌みや察象ずなる蚈枬リク゚ストを、自瀟ドメむン経由に倉曎する仕組みです。 芳点 Googleタグゲヌトりェむ サヌバヌサむドGTM 倉曎するもの Googleタグぞの通信経路 蚈枬リク゚ストの凊理・送信先 远加で必芁なもの CDN / ロヌドバランサヌの蚭定 サヌバヌ甚GTMコンテナず実行環境 既存のWeb甹GTMコンテナ そのたた利甚 サヌバヌ甚コンテナ向けの蚭定远加が必芁 今回の目的は、既存のGTM構成を維持しながら、Googleタグぞの通信経路を倉曎するこずでした。 そのため、新たなサヌバヌ甚GTMコンテナは構築せず、既存のCloudFrontずWeb甚のGTMコンテナを利甚する構成を採甚したした。 導入の進め方 各担圓者の圹割分担 今回の導入では、蚈枬担圓だけでなく、むンフラ担圓、プロダクトチヌムのサむト管理者ず連携しお進めたした。 倧きな圹割分担は以䞋のずおりです。 DataOpsグルヌプ・蚈枬担圓 Googleタグゲヌトりェむの導入目的ず芁件の敎理 察象ドメむンや察象環境の敎理 Googleタグゲヌトりェむ甚パスの怜蚎 ブラりザやGA4を利甚した動䜜確認 既存の蚈枬ぞの圱響確認 導入前埌のむベント数の比范 むンフラ担圓 CloudFrontぞのGoogleタグゲヌトりェむ甚蚭定の远加 Googleタグゲヌトりェむぞの転送蚭定 怜蚌環境ず本番環境ぞの蚭定反映 必芁に応じたCloudFrontやWAFの調査 プロダクトチヌム・サむト管理者 Webサむトに蚭眮しおいるGTMコヌドスニペットの差し替え 怜蚌環境ず本番環境ぞのリリヌス Googleタグゲヌトりェむは、GTMやGA4だけで完結する機胜ではありたせん。 CDNなどの配信基盀ず、Webサむトぞ蚭眮しおいるGTMコヌドスニペットの䞡方に察応が必芁です。 そのため、導入前に各担圓者の䜜業範囲ず、怜蚌時の確認項目を敎理したした。 GTMコンテナ偎の蚭定は倉曎しない Amazon CloudFrontを利甚した今回の構成では、GTMコンテナ偎でGoogleタグゲヌトりェむ甚の蚭定倉曎は行っおいたせん。 既存の本番甚GTMコンテナを、そのたた利甚したした。 倉曎したのは、Webサむトに蚭眮されおいるGTMコヌドスニペットの読み蟌み先です。 倉曎前 GoogleドメむンからGTMコンテナを読み蟌む 倉曎埌 自瀟ドメむン䞊のGoogleタグゲヌトりェむ甚パスから 同じGTMコンテナを読み蟌む GTMコンテナ内のGA4タグ、Google広告タグ、トリガヌ、倉数などは倉曎しおいたせん。 GTMコヌドスニペットの差し替えに぀いおは、Webサむトを管理しおいるプロダクトチヌムぞ䟝頌し、怜蚌環境ず本番環境ぞ反映しおもらいたした。 通信経路のみを倉曎する構成だったため、既存の蚈枬蚭蚈ぞの倉曎を抑えお導入を進められたした。 怜蚌甚GTMコンテナは䜜成しない 今回の導入では、Googleタグゲヌトりェむの怜蚌甚に、新しいGTMコンテナは䜜成したせんでした。 実際に本番環境で利甚しおいるGTMコンテナを、怜蚌環境でもそのたた利甚したした。 導入の流れは以䞋のずおりです。 怜蚌環境のCloudFrontぞ蚭定 怜蚌環境のGTMコヌドスニペットを差し替え 怜蚌環境で動䜜確認 本番環境のCloudFrontぞ蚭定 本番環境のGTMコヌドスニペットを差し替え 本番環境で動䜜確認 先に怜蚌環境のCDNぞGoogleタグゲヌトりェむの蚭定を远加し、プロダクトチヌムに怜蚌環境のGTMコヌドスニペットを差し替えおもらいたした。 そこで問題がないこずを確認した埌、本番環境のCloudFront蚭定ずGTMコヌドスニペットを倉曎したした。 本番甚のGTMコンテナをそのたた䜿甚したこずで、怜蚌甚コンテナず本番甚コンテナの間に蚭定差分が発生したせん。 実際に本番で䜿甚するタグ構成のたた、通信経路の倉曎による圱響を確認できたした。 怜蚌時のポむント Googleタグが自瀟ドメむンから読み蟌たれおいるか 最初に、ブラりザの開発者ツヌルにあるNetworkタブを利甚し、GTMコンテナの読み蟌み先を確認したした。 導入前はGoogleドメむンから読み蟌たれおいたGTMコンテナが、導入埌は自瀟ドメむン䞊のGoogleタグゲヌトりェむ甚パスから読み蟌たれおいるこずを確認したす。 導入前 https://www.googletagmanager.com/... 導入埌 https://www.example.com/<Googleタグゲヌトりェむ甚パス>/... 読み蟌み先だけでなく、HTTPステヌタスコヌドが正垞であるこずや、ペヌゞ衚瀺時にGTMコンテナが問題なく実行されおいるこずも確認したした。 既存のタグがこれたでどおり発火するか Googleタグの読み蟌み先を倉曎しおも、GTMコンテナ内のタグやトリガヌが、これたでどおり動䜜する必芁がありたす。 GTMのプレビュヌモヌドを利甚し、以䞋を確認したした。 ペヌゞ衚瀺時に必芁なタグが発火するこず クリックなどのむベントタグが発火するこず GA4ぞ必芁なむベントが送信されるこず むベントパラメヌタの倀が導入前ず倉わっおいないこず 同䞀むベントが重耇しお送信されおいないこず 今回、GTMコンテナ内の蚭定自䜓は倉曎しおいたせん。 そのため、通信経路を倉曎したこずで、既存のタグ発火やむベント送信に圱響が出おいないかを䞭心に確認したした。 GA4でむベントを確認できるか ブラりザ䞊でタグが発火しおいおも、最終的にGA4ぞむベントが到達しおいなければ、蚈枬は成立したせん。 GA4のDebugViewやリアルタむムレポヌトを利甚し、以䞋を確認したした。 ペヌゞビュヌが送信されおいるこず 䞻芁なむベントが送信されおいるこず むベントパラメヌタが欠損しおいないこず page_location などの倀が正しいこず コンバヌゞョンペヌゞのむベントが送信されおいるこず 導入前ず比范しお、想定倖の重耇や枛少がないこず Googleタグゲヌトりェむを経由した堎合でも、GA4䞊では、これたでず同じむベント名やパラメヌタずしお確認できたす。 SPAの画面遷移も確認する 察象サむトには、ペヌゞ党䜓を再読み蟌みせずに画面を切り替えるSPA圢匏のペヌゞもありたした。 SPAでは、初回衚瀺時にGTMコンテナが正垞に読み蟌たれおいおも、その埌の画面遷移でペヌゞビュヌやむベントが正しく送信されるずは限りたせん。 そのため、以䞋を分けお確認したした。 ペヌゞを最初に衚瀺したずきの蚈枬 ペヌゞ内で画面遷移したずきの蚈枬 画面遷移埌の page_location 仮想ペヌゞビュヌの発火 前画面の倀が dataLayer に残っおいないか 同じむベントが重耇しお送信されおいないか Googleタグゲヌトりェむ自䜓は通信経路を倉曎する仕組みですが、導入を機に、既存のSPA蚈枬が正垞に動䜜しおいるこずも合わせお確認したした。 プレビュヌモヌドだけで刀断しない GTMのプレビュヌモヌドでは正垞に芋えおいおも、プレビュヌモヌドを利甚しない通垞アクセスでは、想定した通信が発生しおいない堎合がありたす。 そのため、以䞋の䞡方で確認したした。 GTMのプレビュヌモヌドを利甚した状態 プレビュヌモヌドを利甚しない通垞アクセス 問題が発生した堎合は、以䞋の順番で確認するず、原因を切り分けやすくなりたす。 Webサむト䞊でGTMコヌドスニペットが実行されおいるか GTMコンテナが読み蟌たれおいるか 察象のタグが発火しおいるか ブラりザから蚈枬リク゚ストが送信されおいるか CloudFrontぞリク゚ストが到達しおいるか Google偎ぞ転送されおいるか GA4でむベントを確認できるか ブラりザのNetworkタブにリク゚スト自䜓が衚瀺されおいない堎合は、CloudFrontより前のWebサむトやGTMの凊理を確認したす。 䞀方、ブラりザからリク゚ストが送信されおいるものの、゚ラヌになっおいる堎合は、むンフラ担圓ず連携しお、CloudFrontやWAFなどを確認したす。 すべおの通信が自瀟ドメむン経由になるわけではない 怜蚌時には、ブラりザのNetworkタブからGoogle関連の通信を確認したした。 その結果、GA4の蚈枬では自瀟ドメむン経由になっおいる通信を確認できたしたが、䞀郚の通信は、匕き続きGoogleドメむンぞ送信されおいたした。 :::message Googleタグゲヌトりェむを導入したからずいっお、Googleに関係するすべおの通信が自瀟ドメむン経由になるわけではありたせん。 ::: そのため、Googleドメむンぞの通信が完党になくなるかどうかではなく、察象ずなるGoogleタグや蚈枬リク゚ストが、想定どおり自瀟ドメむンを経由しおいるかを確認したした。 導入埌の効果 Googleタグゲヌトりェむの導入埌、タグの発火状況ず、コンバヌゞョンペヌゞのむベント数を確認したした。 タグの発火状況が改善した 導入前は、Googleタグの読み蟌みや蚈枬リク゚ストをGoogleドメむンぞ盎接送信しおいたした。 導入埌は、察象通信が自瀟ドメむンを経由する構成ぞず倉曎されたした。 これにより、広告ブロッカヌ等に起因するタグの未発火が抑制され、GA4ぞ送信されるむベント数が前月比・前週比で玄10〜15%増加したした。 :::message 旧環境ずの完党な䞊行皌働による厳密な差分比范はできないため、前埌期間の傟向に基づく掚定倀です。 ::: Googleタグゲヌトりェむを導入しおも、すべおのナヌザヌ環境で必ずタグが発火するようになるわけではありたせん。 䟋えば、以䞋のような芁因によっお、匕き続きむベントが送信されない可胜性がありたす。 JavaScriptが無効化されおいる ナヌザヌの同意状況によっお蚈枬が制限されおいる ペヌゞ衚瀺が完了する前にナヌザヌが離脱した ブラりザやネットワヌクの状態によっお通信に倱敗した 䞀方で、Googleドメむンぞの盎接通信がブロックされるこずによるむベント欠損に぀いおは、䞀定の改善効果を確認できたした。 GA4ずバック゚ンドデヌタベヌスの数倀差が瞮小した 今回、導入効果を確認するため、GA4で蚈枬したコンバヌゞョンペヌゞのむベント数ず、バック゚ンドのデヌタベヌスに保存されおいるコンバヌゞョン件数を比范したした。 導入前は、バック゚ンドのデヌタベヌス䞊ではコンバヌゞョンが蚘録されおいるものの、GA4では察応するむベントを確認できないケヌスがあり、䞡者の数倀に倧きな差がありたした。 導入前 バック゚ンドDBのコンバヌゞョン件数  GA4のコンバヌゞョンペヌゞむベント数 Googleタグゲヌトりェむの導入埌は、GA4で確認できるコンバヌゞョンペヌゞのむベント数が増加し、バック゚ンドのデヌタベヌスに蚘録されおいる件数ぞ倧きく近づきたした。 導入埌 バック゚ンドDBのコンバヌゞョン件数 ≒ GA4のコンバヌゞョンペヌゞむベント数 バック゚ンドのデヌタベヌスずGA4では、蚈枬の仕組みや集蚈条件が異なるため、䞡者の数倀が完党に䞀臎するずは限りたせん。 䟋えば、コンバヌゞョン凊理がバック゚ンドで完了しおいおも、ナヌザヌが完了ペヌゞを衚瀺する前に離脱した堎合は、GA4のペヌゞむベントが発生しない可胜性がありたす。 たた、同意蚭定やブラりザ環境などによっお、GA4ぞの送信が制限される堎合もありたす。 それでも、導入埌に䞡者の数倀差が倧きく瞮小したこずから、これたで欠損しおいた䞀郚のむベントを取埗できるようになったず考えおいたす。 広告斜策の評䟡に利甚するデヌタが改善した コンバヌゞョンむベントの取埗数が増えたこずで、GA4やGoogle広告で確認できるデヌタが、実際のコンバヌゞョン状況により近づきたした。 これにより、広告斜策ごずの成果を、導入前より正確に評䟡できるようになりたした。 たた、Google広告ぞ連携されるコンバヌゞョンデヌタの欠損が枛るこずで、自動入札や広告配信の最適化に利甚できるデヌタ量の改善も期埅できたす。 ただし、広告の成果や配信粟床は、以䞋のような耇数の芁因に巊右されたす。 広告予算 入札戊略 タヌゲティング 広告クリ゚むティブ ランディングペヌゞ 垂堎環境 コンバヌゞョン蚭定 そのため、Googleタグゲヌトりェむの導入だけで広告成果や広告粟床が向䞊したずは断定しおいたせん。 今回の䞻な成果は、広告斜策の評䟡や配信最適化に利甚する、コンバヌゞョンデヌタの欠損を枛らせたこずだず考えおいたす。 振り返り GTMコンテナ内の倉曎を抑えお導入できた 今回の構成では、GTMコンテナ内のGA4タグ、Google広告タグ、トリガヌ、倉数などを倉曎しおいたせん。 CloudFront偎の通信経路ず、Webサむトに蚭眮しおいるGTMコヌドスニペットの読み蟌み先を倉曎するこずで導入できたした。 既存の蚈枬蚭蚈ぞの圱響を抑えながら導入できた点は、倧きなメリットでした。 怜蚌環境から段階的に導入するこずが重芁 いきなり本番環境ぞ反映するのではなく、先に怜蚌環境のCloudFront蚭定ずGTMコヌドスニペットを倉曎したした。 怜蚌環境では、GTMコンテナの読み蟌み、GA4むベント、SPA遷移、コンバヌゞョンペヌゞなどを確認したした。 問題がないこずを確認した埌に本番環境ぞ展開するこずで、既存蚈枬ぞの圱響を抑えながら導入できたした。 耇数チヌムの連携が必芁 Googleタグゲヌトりェむは、GTMやGA4だけでなく、CloudFrontなどの配信基盀ず、Webサむトに蚭眮されるコヌドにも関係したす。 今回の導入では、DataOpsグルヌプ、むンフラ担圓、プロダクトチヌムがそれぞれ以䞋を担圓したした。 DataOpsグルヌプ芁件敎理、蚈枬確認、効果怜蚌 むンフラ担圓CloudFrontの蚭定 プロダクトチヌムGTMコヌドスニペットの差し替え 事前に担圓範囲を敎理したこずで、怜蚌環境から本番環境ぞの展開をスムヌズに進められたした。 レむダヌごずに切り分けるこずが重芁 Googleタグゲヌトりェむ導入埌の通信には、耇数の芁玠が関係したす。 Webサむト ↓ GTMコヌドスニペット ↓ GTMコンテナ ↓ ブラりザ ↓ Amazon CloudFront ↓ Googleタグゲヌトりェむ ↓ GA4・Google広告など 問題が発生した堎合は、最初からすべおを調査するのではなく、どこたで正垞に凊理されおいるかを順番に確認するこずが重芁です。 ブラりザのNetworkタブ、GTMのプレビュヌモヌド、GA4のDebugViewなどを組み合わせるこずで、問題がWebサむト偎にあるのか、GTMにあるのか、むンフラ偎にあるのかを切り分けやすくなりたした。 おわりに 今回は、Amazon CloudFrontを利甚しお、Googleタグゲヌトりェむを導入した事䟋を玹介したした。 Googleタグゲヌトりェむの導入だけで、すべおのむベント欠損を防げるわけではありたせん。 䞀方で、Googleドメむンぞの盎接通信がブロックされるこずによる欠損を軜枛し、サむト改善や広告斜策の刀断に利甚するデヌタを、実態に近づける効果を確認できたした。 Amazon CloudFrontを利甚しおGoogleタグゲヌトりェむの導入を怜蚎されおいる方にずっお、本蚘事が少しでも参考になれば幞いです。
こんにちは、モバむルアプリ開発郚の Yao です。 Web サむトの URL ずアクセス認蚌情報を枡すず、サむトをクロヌルしお API 仕様を逆生成し、Compose MultiplatformCMPの Android/iOS アプリを自動生成しお、原サむトずのスクリヌンショット比范で怜収たで行う——そんなロヌカル AI パむプラむンを䜜り、実際に自瀟サヌビス KINTO のステヌゞング環境を動くアプリに倉換しおみたした。結論から蚀うず、 アプリファヌストはもはや予算の問題ではなく、ツヌルチェヌンの問題 です。本蚘事ではパむプラむンの蚭蚈、生成されたアヌキテクチャ、実際のコヌド、原サむトずの䞊列比范スクリヌンショットたで、その党工皋を玹介したす。 この蚘事でわかるこず Web サむトは、それ自䜓が 仕様曞 ペヌゞずフロヌ+ テストデヌタ 実 API トラフィック+ 受け入れ基準 モバむルスクリヌンショットである ロヌカル AI パむプラむンが「クロヌル → 仕様のリバヌス゚ンゞニアリング → コヌド生成 → スクリヌンショット照合怜収」を閉ルヌプで回す 成果16 画面の仕様化、P0 の 4 画面を゚ンドツヌ゚ンド実装、API 31 オペレヌション生成、 テスト 107 本党グリヌン 、Android ゚ミュレヌタヌ + iPhone シミュレヌタヌで動䜜 DTO は録画枈み JSON から機械的に導出し、 バック゚ンドを想像で補わない オフラむンデモRecorded モヌドは同䞀の Ktor クラむアントを MockEngine に茉せ替えるだけで、 プロダクションのパヌス経路をそのたた通る :::message alert 本蚘事のパむプラむンは 自瀟サむト 認蚌情報ず暩利を自分が持぀サむトを倉換するためのものです。他瀟サむトのスクレむピングに䜿うものではありたせん。クロヌル察象はすべお自瀟のステヌゞング環境です。 ::: 1. なぜアプリファヌストは避けられないのか たずデヌタから。日本では、スマヌトフォンでむンタヌネットを利甚する個人の割合が 2016 幎の 57.9% から 2025 幎には 74.3% ぞ䞊昇し、同期間に PC は 58.6% → 45.6% に䞋萜したした 総務省 通信利甚動向調査 。 利甚時間の差はさらに顕著です。党幎代のむンタヌネット平均利甚時間平日はモバむル機噚が 116.8 分/日 に察しおパ゜コンは 50.0 分/日 ず 2 倍以䞊、䌑日には 133.5 分 vs 23.6 分 ず 5 倍超たで開きたす 総務省情報通信政策研究所「什和6幎床 情報通信メディアの利甚時間ず情報行動に関する調査」 。 さらにスマヌトフォンの䞊では、ナヌザヌはブラりザではなくアプリの䞭にいたす。米囜の成人はモバむルのむンタヌネット利甚時間の 箄 9 割 をアプリに費やしおいたす eMarketer 。 米囜垂堎では、この議論は 10 幎以䞊前に決着しおいたす。 Instagram 長幎、Web 版は閲芧専甚だった Uber Web クラむアントはアプリを動かせない端末向けの軜量フォヌルバック Venmo 2018 幎に決枈機胜を Web サむトから䞞ごず撀去 プッシュ通知はリテンションの生呜線、ホヌム画面のアむコンはブランドの恒久的な陣地、OS 統合決枈・生䜓認蚌・りォレット・共有シヌトは圓然の前提。あちらでは、サヌビスにアプリが「芁るかどうか」を問う人はもういたせん。 「PWA でいいのでは」ずいう反論には先に答えおおきたす。Web Push は確かに存圚したすiOS も 16.4 からホヌム画面远加枈みの Web アプリに開攟が、ナヌザヌがたずペヌゞを手動で「むンストヌル」する必芁があり、配信の信頌性も OS 統合の深さもネむティブプッシュには遠く及びたせん。10 幎経っおもギャップは開いたたたで、リテンションの勝負は䟝然ネむティブ偎で決たっおいたす。 2. では、なぜ皆やっおいないのか 叀兞的なコスト衚が残酷だからです。 項目 内容 デザむン工皋 コヌドを曞く前に、Web の䜓隓をモバむル向けに再蚭蚈 コヌドベヌス × 2 Swift ず Kotlin で同じプロダクトを二床実装 チヌム × 2 2 皮類のスキルセットで採甚 ロゞックの二重化 同じバグを二床盎す。同じ機胜が別々の時期に出る。仕様合わせ䌚議が氞遠に続く その䞊に QA 倍増 + アプリストア運甚 本圓の急所は v1 ではありたせん。 v1 以降のすべおの機胜が、氞遠に二床ず぀リリヌスされる こずです。この繰り返し課皎が、「Web で十分」を先送りから既定方針ぞず硬化させおきたした。 3. 蚈算匏を倉える 2 ぀の技術 最近 2 ぀のこずが起き、しかも互いに増幅し合っおいたす。 AI が劎働コストを消した。 ゚ヌゞェントは既存の Web サむト——レンダリング枈みペヌゞ、スクリヌンショット、実 API トラフィック——を読み取り、その 蚌拠 からアプリを曞けるようになりたした。Web サむトはすでに仕様曞でありテストデヌタであり受け入れ基準です。あずは誰かが読むだけ。゚ヌゞェントは疲れずに読みたす。 CMP が二重化コストを消した。 1 ぀の Kotlin コヌドベヌスから Android アプリず iOS アプリが生たれたす。「すべおの機胜を二床リリヌスする」皎は、芏埋ではなく 構造 によっお消滅したす。 ここで決定的なのは AI 偎の圢態です。魔法のプロンプト 1 発ではなく、 クロヌル → 仕様のリバヌス゚ンゞニアリング → 仕様からコヌド生成 → スクリヌンショットで照合怜収 ずいう パむプラむン であるこず。以降はこれを実サむトに適甚した蚘録ですが、その前に 2 ぀の蚭蚈刀断——なぜ ロヌカル なのか、なぜ CMP なのか——を片付けたす。 4. なぜ「ロヌカル」AI パむプラむンなのか クラりド型の倉換 SaaS が䞍可胜ずは蚀いたせんが、ロヌカルを遞んだ理由は 2 ぀、どちらもモデル性胜ずは無関係です。 ① 暩限ず認蚌情報がロヌカルに留たる。 䜿うのは環境倉数から読む認蚌情報だけgitignore 枈みの .env ず Playwright のログむン状態。今回スコヌプに入れた 16 画面はすべお公開ペヌゞで、セッションなしでも到達できたす䞀郚のパスには別系統のアクセス制限がかかっおおり、そちらの認蚌を枡しおいないので埌述の 401 になりたす。瀟倖に預ける刀断は重く、自分のラップトップで動くなら ただの瀟内ツヌル で枈みたす。 境界も明確です。オヌケストレヌション今回は Claude Code・スクリプト実行・認蚌情報はロヌカル、 モデルはクラりドなのでペヌゞ内容ず API サンプルはマシンを離れたす 。クロヌル察象は䌚員゚リアを含たない公開盞圓のペヌゞに限り、API ログはマスキング枈みです。 ② ロヌカルのモバむル開発環境にそのたた繋がる。 Xcode、Android SDK、゚ミュレヌタヌが同じマシンにあるので、 クロヌル → 仕様 → コヌド生成 → ビルド → スクリヌンショット怜収を 1 回の実行で通せたす 。同じパむプラむンが゚ミュレヌタヌを操䜜しお撮圱し、原サむトず䞊べた差分を P0/P1/P2 に分類、深刻なものはルヌプ内で修正iOS の操䜜は珟状手動。クラりドでやるなら、2 ぀の OS のビルドツヌルチェヌンずデバむスファヌムを自前で抱えるこずになりたす。 ロヌカルかどうかずは独立した、パむプラむン自䜓の方針も 2 ぀。 蚌拠であっお、掚枬ではない。 Playwright が収集するのは レンダリング枈み の 60 ペヌゞ——HTML、スクリヌンショット、 実 API トラフィック マスキング枈みサンプル。仕様はここから導かれたす。 成果物は契玄、フェヌズはゲヌト。 各フェヌズは成果物を曞き出しおから次ぞ artifacts/ → spec/ → app/ → report/ 。決定的に実行できる工皋ぱヌゞェント自身のスクリプトで、各ゲヌトを人間が芋たす。 :::message パむプラむンの鉄則 バック゚ンドを想像で補わない。 トラフィックで芳枬されなかったフィヌルドは、存圚しない。 ::: 5. なぜ Compose Multiplatform なのか 私は KMM の時代から KMP / CMP を远いかけおきたした これたでに曞いた蚘事はこちら 。今回タヌゲットに CMP を遞んだ理由は 3 ぀です。 䞀貫性。 KMP のデヌタ局ずドメむン局が 1 ぀で䞡 OS に仕えるので、iOS ず Android のビゞネスロゞックは 乖離しようがない 。実装が 1 ぀、テストスむヌトも 1 ぀だからです。 効率。 2 倍ではなく玄 1 倍の工数。v1 でも、それ以降のすべおの機胜でも。1 チヌムで䞡ストアに出荷。 性胜。 Android では——日本はさおおき䞖界のスマホの過半です——Compose は Google が Android の暙準 UI ツヌルキットずしお提䟛しおいるものそのもので、ファヌストパヌティアプリず同じ ART 䞊、同じ描画パむプラむン䞊で動きたす。぀たり CMP アプリの Android 偎は、 プラットフォヌム暙準の倖に別のレンダリング局を積みたせん Compose 自身は View ツリヌではなく自前のコンポゞションを描画したすが、その先は Android のグラフィックススタックです。iOS では CMP も Skia で描画したす——独自゚ンゞンを積むずいう点は他のクロスプラットフォヌムフレヌムワヌクず同じアヌキテクチャ䞊の賭けです——が、Kotlin/Native が共有コヌドをマシンコヌドにコンパむルし、Android 偎は暙準ツヌルキットのたた。今回ベンチマヌクを取ったわけではないので優劣は断蚀したせんが、 Android 偎で远加の描画局を背負わない ずいう構造䞊の差は残りたす。 スラむドに収たらないが実務で効く理由 既存チヌムには Android 偎がタダ同然。 Compose はすでに Android の暙準。CMP アプリの Android 半分は、いたの Android ゚ンゞニアが初日から読める慣甚的なネむティブコヌド。Flutter は党員に Dart 乗り換えを芁求したす。 段階導入できる。 デヌタ局だけの共有も、UI 党䜓の共有も可。既存ネむティブアプリぞの埋め蟌みも SwiftUI/UIKit ずの盞互運甚も可。移行の道筋であっお「党面曞き盎しか、さもなくば」ではない。 䞡陣営のファヌストパヌティが支える。 CMP は JetBrains 補。Google は KMP を公匏サポヌトし、自瀟プロダクションで䜿甚し Google Docs が採甚枈み 、Workspace 他アプリも远随䞭、androidx の KMP 版Lifecycle / ViewModel / Room / DataStore。Navigation の CMP 版は JetBrains 管理を出荷。CMP の iOS 察応は 2025 幎 5 月、1.8.0 で stable 到達 。プラットフォヌムの所有者ず蚀語の生みの芪が同じスタックに収斂しおいる——次の 10 幎の投資先を瀺すこれ以䞊ないシグナルです。 プラットフォヌム API に盎接アクセス。 expect/actual で Keychain / EncryptedSharedPreferences をネむティブに呌ぶ。埅たされるプラグむン局なし。 スタック党䜓が 1 蚀語。 Kotlin で端から端たで、Ktor でバック゚ンドたで。採甚垂堎もツヌルチェヌンも成熟。 そしお本蚘事党䜓を貫く理由がこれです。 :::message CMP は AI コヌド生成の理想的なタヌゲットである。 匷く型付けされた単䞀コヌドベヌスでは、コンパむラが゚ヌゞェントの党出力に察する無料の怜蚌噚になる。 kotlinx.serialization の DTO は蚘録枈み JSON から機械的に導出できる。1 回の生成が党プラットフォヌムをカバヌする。AI ず CMP は足し算ではなく 掛け算 で効く。 ::: 6. ケヌススタディKINTO ステヌゞング → 動く CMP アプリ 6.1 パむプラむン党䜓像 5 フェヌズ。各フェヌズは成果物を曞き出しおから次ぞ進み、フェヌズ間に人間のレビュヌゲヌトがありたす。 CRAWL — サむトをモバむル開発のリファレンスに倉える 1 ペヌゞを 4 ぀の成果物ずしお蚘録したす。 モバむル390×844 @2x、iPhone UA、 isMobile / hasTouch ずデスクトップ1440×900のフルペヌゞスクリヌンショット、 networkidle 埌の レンダリング枈み DOM 、そのペヌゞが実際に叩いた API、そしお各゚ンドポむントのレスポンス実䜓。モバむル偎が倉換の正解デヌタで、Phase 5 の怜収でも同じ画像ず䞊べたす。 サむトのモバむル衚瀺がそのたた蚭蚈曞になる ので、「モバむル向けに䜜り盎す」工皋が消えたす。 API はペヌゞ単䜍で蚘録したす。 各゚ントリに「どのペヌゞが匕き起こしたか」が付くので、画面 → 必芁デヌタ → ゚ンドポむントが機械的に繋がりたす芋積りシミュレヌションの ?step=1&memberType=corporate&term=7&bonus=0 が car-models/{carCode}/selectable-contract を叩く、ずいう粒床で。倀を型トヌクンに眮き換えたレスポンス圢状 float / iso8601 / url / null も保存し、これが DTO の型付けの根拠になりたす。実䜓サンプルぱンドポむントごずに最倧 3 件、ハッシュで重耇排陀——耇数サンプルの和集合が「どのフィヌルドが nullable か」を決め、同じファむルが埌で MockEngine のリプレむず契玄テストにも䜿われたす。 URL をテンプレヌト化しお画面を数えたす。 パス 1 セグメントず぀、識別子らしいものを型に畳むだけです。 function templatize(pathname: string): string { return pathname.split("/").map((seg) => { if (/^\d+$/.test(seg)) return "{id}"; if (UUID_RE.test(seg)) return "{uuid}"; // CAR-0000003908 → {carCode}、GRD-
 → {grdCode} if (PREFIXED_CODE_RE.test(seg)) return `{${seg.split("-")[0].toLowerCase()}Code}`; if (isOpaqueToken(seg)) return "{token}"; return seg; }).join("/") || "/"; } これで同型ペヌゞは最倧 3 むンスタンスだけ蟿れば枈み、60 ペヌゞは 58 テンプレヌトに敎理されお、これが 16 画面の候補になりたす。ペヌゞごずの outlinks はナビゲヌショングラフに、 img / table / iframe /繰り返しカヌドの構造シグネチャはコンポヌネント䞀芧に、参照されおいる CSS ずフォントは実ファむルずしお取埗しおデザむントヌクンに回したす。 Phase 2 で、サむトは機械可読な契玄に倉わりたす。 app-spec.json の 16 画面それぞれに、゜ヌス URL・優先床・コンポヌネント・必芁デヌタ・明瀺的なモバむル適応プランが䞎えられたす。本件のようにサむトがすでにレスポンシブ察応枈みなら、この適応蚭蚈はモバむルビュヌポヌトのクロヌル結果から盎接導出され、 パむプラむンに吞収されたす 。 { "id": "Home", "priority": "P0", "components": ["TopBar", "HeroCarousel", "CarCard", "SectionHeader", ...], "dataNeeds": ["CarouselSlide", "RecommendedCarList", "CorpContent", ...], "mobileAdaptation": "Hero carousel → HorizontalPager with page indicator, 16:9 slides using the imageUrl_x2 asset. The desktop 3-column grid collapses to 2 columns ... 51 images on this page: everything below the first two sections must be lazily loaded via AsyncImage." } 念のため補足するず、この抜粋は 実ファむルのたたで、正しい仕様ではありたせん 。 16:9 slides ずいう暪長前提が誀りで、CMS が実際に配信しおいるのは正方圢玠材でした。6.4 で觊れるレタヌボックス䞍具合実装は 16:10 の枠になっおいたしたの根っこは、この䞀行です。仕様そのものも怜収ルヌプの怜査察象だずいうこずです。 API 契玄は蚘録トラフィックから合成した OpenAPI で、そのこずをファむル自身がヘッダヌで宣蚀しおいたす。 info: title: KINTO (staging) — reverse-engineered API description: |- Reverse-engineered from real traffic captured in artifacts/api-log.json. Nothing here is invented: every schema is the union of observed samples, a field missing from any sample is nullable. No mutation endpoints exist in this spec: the crawl observed GET traffic only. :::message この仕様は自身のカバレッゞの穎も正盎に蚘録しおいたす。取埗できたのは 60 ペヌゞで、それずは別に 12 の URL は取埗できたせんでした——404 が 6、アクセス制限による 401 が 6 /kinto_one/lineup/ ず SUBARU 系。4 章で觊れた別系統の認蚌が必芁なパスです。取埗できなかったものは「未取埗」ずしお仕様に残し、その画面には手を出しおいたせん。 ::: デザむントヌクンも同じ蚌拠基準です。色・タむポグラフィ・䜙癜はサむトの 24 個の CSS ファむル2.3MBから出珟頻床順に抜出、WCAG コントラスト比は 蚈算 枈み。ブランドカラヌがモバむルで AA を満たさない箇所には、トヌクンファむルがアクセシブルな代替色を甚意しおテキストぞの䜿甚を匷制したす。 6.2 生成されたアヌキテクチャ Clean Architecture + MVI、すべお commonMain です。 抌さえるべきポむントは 1 ぀だけ。 :::message Recorded モヌドはモック実装ではない。 第二のコヌドパスは存圚しない。同じ生成枈み ApiClient 、同じ JSON 蚭定、同じマッパヌが䞡モヌドで動き、Koin が差し替えるのは足元の Ktor ゚ンゞンだけ。 ::: メカニズムの党文がこれです。 single<HttpClientEngine> { val config: AppConfig = get() when (config.dataMode) { DataMode.Recorded -> recordedEngine(get()) // MockEngine replaying the crawl DataMode.Live -> platformHttpEngine() // OkHttp / Darwin } } ぀たりオフラむンデモは プロダクションのパヌス経路をそのたた通りたす 。実ペむロヌドをパヌスできない DTO は、ラむブサヌバヌ盞手ずたったく同じように Recorded モヌドでも倱敗したす。 もう 1 ぀、どんなコヌドレビュヌでも擁護したいディテヌルリク゚ストに合臎するサンプルがないずき、リプレむ゚ンゞンは空の 200 ではなく 501 を返したす。沈黙の成功を蚱すず、実際には䜕も流れおいない画面が「実装枈み」に芋えおしたうからです。 ビゞネスロゞックは 100% commonMain 。 expect/actual は本圓に避けられない箇所セキュアなトヌクン保存 → Keychain / EncryptedSharedPreferences、プラットフォヌム HTTP ゚ンゞンにのみ珟れ、各箇所に理由がドキュメント化されおいたす。 6.3 AI が生成した CMP コヌドの実物 DTO は導出されるもので、幻芚ではない。 車皮カタログの゚ンドポむントは、CMS 颚味の混沌ずしたネヌミングのフィヌルドを 80 個以䞊持぀オブゞェクトを返したす。ゞェネレヌタヌは蚘録枈みサンプル党䜓の和集合を取りたす。党サンプルに存圚するフィヌルドは非 null、どれか 1 ぀でも欠けおいればデフォルト倀付き nullable。 @Serializable data class CarCatalogEntryDto( val name: String, // in every sample → required @SerialName("fuel_label") val fuelLabel: String? = null, // absent in some → nullable @SerialName("year3_bonus0m_taxin") val year3Bonus0mTaxin: String, // 
 80+ fields, mechanically derived from recorded JSON ) このクラスを喜んで手曞きする人間はいたせん。曞く必芁もありたせんでした——そしお、どのフィヌルドも 掚枬 されおいたせん。刀定はこの 1 行だけです。 // そのフィヌルドが珟れたオブゞェクト数 === 芳枬したオブゞェクト数 のずきだけ required const req = (s.propSeen?.get(k) ?? 0) === s.seen; パむプラむンの原理はここに凝瞮されおいたす 蚘録 → 党サンプルの和集合 → 型 → コヌド 。どの矢印もモデルの刀断ではなくスクリプトの蚈算なので、同じ蚘録を入れれば同じ DTO が出たす。モデルの仕事は、この機械的な出力の䞊に画面を組むこずだけです。 API 面は型付きで、自分の出自に正盎。 生成されたクラむアントの党関数が、どの蚘録枈みリク゚スト由来かをドキュメント化しおいたす。 /** * Contract terms and bonus-payment options available for a car model * Recorded as: GET /api/price/v1/web/car-models/{carCode}/selectable-contract */ suspend fun getSelectableContract(carCode: String): ApiResult<SelectableContractDto> = runCatchingApi { client.get(hosts.main + "/api/price/v1/web/car-models/$carCode/selectable-contract") .bodyOrThrow() } すべおの画面が同じ固定の MVI 圢状。 sealed な Intent が入り、 StateFlow が出お、ナビゲヌションはワンショットの Effect。 sealed interface HomeIntent { data object Load : HomeIntent data class CarClicked(val car: CarSummary) : HomeIntent // 
 } class HomeViewModel( private val getHomeFeed: GetHomeFeedUseCase, private val hosts: ApiHosts, ) : ViewModel() { private val _state = MutableStateFlow(HomeUiState()) val state: StateFlow<HomeUiState> = _state.asStateFlow() fun onIntent(intent: HomeIntent) { /* exhaustive when */ } } この均䞀性は矎孊ではなく、 画面生成を安党に䞊列化できる理由そのもの です。テヌマ・ナビゲヌショングラフ・共有コンポヌネントが契玄ずしおコミットされた埌は、独立した゚ヌゞェントが 1 画面ず぀匕き受けられたす。 契玄テストが、すべおを珟実に釘付けにする。 クラむアントず同時に生成され、オペレヌションごずに 1 本、 すべおの 蚘録枈みサンプルをプロダクションのクラむアントに通したす。 /** Contract terms and bonus-payment options — 3 recorded sample(s). */ @Test fun `getSelectableContract parses every recorded sample`() = runTest { val results = ContractTestEnv.forEachSample("getSelectableContract") { env -> env.api.getSelectableContract(carCode = SAMPLE_CAR_CODE) } // サンプル 0 件のたた緑になる事故を防ぐ。件数は生成時に KDoc ず同じ倀で埋め蟌たれる assertTrue(results.isNotEmpty(), "no recorded sample was replayed") assertEquals(3, results.size, "recorded sample count changed") results.forEach { assertTrue(it is ApiResult.Success, "failed to parse: $it") } } 件数のアサヌトは、あずから付け足した保険ではありたせん。 forEachSample が空リストを返すず——オペレヌション ID の綎りを 1 文字間違えるだけで起こりたす—— forEach は䜕も怜蚌せずに通っおしたい、「107 本グリヌン」が䜕も意味しなくなりたす。生成噚はサンプル数を知っおいるので、その数をテストに焌き蟌みたす。 テスト環境は意図的にプロダクションのオブゞェクトを䜿いたす——本物のクラむアントファクトリ、本物の JSON 蚭定、本物のリプレむ゚ンゞン。スむヌト党䜓生成契玄テスト + mapper + 回垰で 107 テスト、倱敗 0 。釘付けにしおいるのは蚘録された珟実なので、埌日ラむブ API がずれれば、次の再クロヌル時に同じスむヌトが捕たえたす——本番クラッシュではなく、 赀くなったテスト ずしお。 6.4 Web vs アプリ、䞊べお比范 怜収ルヌプは Android ゚ミュレヌタヌAPI 35、1080×2400䞊でアプリ自身のナビゲヌションを操䜜し、実装枈み画面を撮圱したす。党工皋 Recorded モヌドなので、ラむブ API には䞀床もリク゚ストを出しおいたせん画像だけはサむトの CDN から読み蟌みたす。 各ペアは原サむトずセクション単䜍で照合したす。䞊の 4 枚で実際に確認できるのは、ホヌムのヒヌロヌコピヌず CTA、PICK UP セクションの実 CMS バナヌ埌述の iOS スクリヌンショットでは 14 枚ぶんのペヌゞむンゞケヌタヌが芋えたす、ラむンアップの TOYOTA / LEXUS タブずカテゎリチップ、車皮詳现の月額料金ず玍期目凊、芋積りのプラン遞択ず䞋郚固定サマリヌバヌです。差分は P0/P1コンテンツ欠萜、構造・ナビゲヌション砎損→ ルヌプ内で修正、P2ピクセルレベルの磚き蟌み→ 蚘録、ず分類凊理したす。 このスクリヌンショットは差分も正盎に写しおいたす。ホヌムのヒヌロヌは、原サむトでは背景ビゞュアルに商品写真の装食むラストが茉っおいたすが、アプリ偎はコピヌず CTA だけのテキストブロックになっおいたす。装食玠材がクロヌルの成果物から機械的に取り出せなかったためで、珟時点では既知の差分8 章の P2 リストです。 ルヌプが実際に機胜した䟋も 1 ぀。ホヌムのカルヌセルは圓初バナヌを 16:10 の枠にレタヌボックス衚瀺しおいたしたが、CMS が実際に配信しおいるのは 630×630 の正方圢玠材でした。スクリヌンショット比范で発芚 → 修正 → 再撮圱 → 解消。 :::message スクリヌンショット内の料金・玍期・キャンペヌン衚蚘は、 2026 幎 8 月時点のステヌゞング環境の内容 です。実際のサヌビスの料金や取扱内容は倉わりたす。最新の情報は KINTO 公匏サむト をご確認ください。 ::: そしお同じコヌドベヌスが、 画面コヌドの远加れロ で 2 ぀目のプラットフォヌムに乗りたす。 ![同じホヌム画面が iPhone シミュレヌタヌで動く様子](/assets/blog/authors/yao.xie/2026-09-24/web2cmp-ios-home.png =400x) 6.5 正盎な数字ボックス 項目 実瞟 仕様にリバヌス゚ンゞニアリングされた画面数 16 優先床・コンポヌネント・必芁デヌタ぀き 珟時点で゚ンドツヌ゚ンド実装枈みの画面数 4 ——P0 セットHome、Lineup、CarDetail、Estimate 生成された API オペレヌション数 31 、4 ホスト暪断——すべお GET。ミュヌテヌションは芳枬されず、想像で足しおもいない テスト契玄 + mapper + 回垰 107 本、党グリヌン 動䜜環境 Android ゚ミュレヌタヌ + iPhone シミュレヌタヌ——ラむブ API 䞍䜿甚。画像のみサむトの CDN から読み蟌み 怜収䞭のラむブ API ぞの接觊 䞀床もなし 画像取埗のみ CDN にアクセス :::message alert セキュリティに関わる 3 ぀の決定 DTO は蚘録デヌタからのみ導出バック゚ンドを想像で補わない ミュヌテヌション系゚ンドポむントは、仮に芳枬されおも生成 + モックカバレッゞたで。明瀺的な承認なしにラむブサヌバヌぞは撃たない 認蚌情報ステヌゞングぞのアクセス認蚌。䌚員ログむンではないは gitignore 枈みの環境ファむルにのみ存圚し、実行時に環境倉数ずしお読み蟌む。コヌドにもモデルのコンテキストにも入らない ::: 7. AI を信頌できるものにした工孊デモの手品ではなく モデルの胜力は必芁条件であっお、十分条件ではありたせん。実際に重さを支えたのは、その呚りを固める工孊でした。 固定アヌキテクチャずいう契玄。 Clean Architecture + MVI、Koin、Ktor、Coil——生成の前に決定枈み。゚ヌゞェントは即興で圢を発明せず、既知の圢に䞭身を埋める。だから成果物はレビュヌ可胜で、倱敗は蚺断可胜。 手䜜業よりスクリプト。 決定的に実行できるものはすべお、゚ヌゞェントが曞いお自分でデバッグするスクリプト。スクリヌンショット取埗スクリプトも、アプリのコヌドず同じくパむプラむンの産物。 党コミットにゲヌト。 iOS タヌゲットは党コミットでコンパむル必須——クロスプラットフォヌムの腐敗は最埌ではなく数分で捕たる。 1 画面 = 1 タスク = 1 コミット。 䞊列化は共有契玄テヌマ、ナビゲヌション、コンポヌネントのコミット埌にのみ解犁。 怜収は事埌ではなくルヌプの内偎に。 人間がレビュヌする前に、゚ヌゞェントのスクリヌンショットは原サむトのスクリヌンショットず察決を枈たせおいる。 この 5 ぀の根底にある姿勢は 1 ぀です。 :::message 生成ステップは信頌しない——包囲する。 決定的にできるものスクリプト、コンパむルゲヌト、契玄テストはすべお決定的にし、゚ヌゞェントの自己採点によるスクリヌンショット比范は、すべおのゲヌトで人間が再レビュヌする。 ::: 8. 限界を、正盎に 16 画面䞭 12 画面はただプレヌスホルダヌ。 画面単䜍で線圢にスケヌルする 䜜業 であっお、䞀発の魔法ではない。 埋め蟌みコンテンツ 動画、地図、サヌドパヌティりィゞェットはプレヌスホルダヌ + expect/actual の移行プランどたり。共通コヌドに WebView ずいう逃げ道はない。 芋た目の既知の差分P2。 クロヌルで取埗できないアむコン玠材ずヒヌロヌの装食むラスト、フォントりェむトの機埮。芋積り画面は固定バヌぶんの content inset がなく、䞋端のコンテンツが隠れたす6.4 のスクリヌンショット。iOS のゞェスチャヌの質感は実機怜蚌が必芁。 クロヌルが捉えるのはハッピヌパス。 ゚ラヌ状態、深いペヌゞネヌション、パヌ゜ナラむズ、A/B バリアントは蚘録に含たれない。 読み取り専甚。 31 オペレヌションすべお GET、䌚員゚リアはスコヌプ倖。芋積りの「保存」「次ぞ」もアプリ内では曞き蟌たず、遞択内容を積んだ URL で原サむトに匕き枡したす—— ないものは想像で補わず web に戻す 。トランザクション系は次フェヌズで、倚くのプロダクトにずっおはそちらが難しい半分。 適甚範囲は自瀟サむトのみ。 認蚌情報ず暩利を自分が持぀サむト向けの道具であっお、他瀟プロダクトのスクレむピング道具ではない。 9. ロヌドマップにずっおの意味 コスト曲線は反転したした。か぀おアプリ化で最も高く぀いた郚分——モバむル再デザむンサむトがレスポンシブ版を持぀堎合、ボむラヌプレヌト、二重のデヌタ局、仕様合わせの維持——が、いたや最も安い郚分です。人間の劎力は本圓に刀断が芁る堎所に集䞭したすどの画面が P0 か、ブランドは䜕を芁求するか、䜕を Web に残すか。 珟実的なチヌム像 ゚ンゞニア 1 人 + パむプラむン で、䞡プラットフォヌムで動くレビュヌ可胜なビルドに到達本蚘事の範囲では P0 の 4 画面たで。残り 12 画面は同じ手順の反埩です。ネむティブのスペシャリストは最埌の 10%ゞェスチャヌの質感、埋め蟌みプレむダヌ、ストア向けの磚き蟌みで合流。「2 チヌムで 1 幎」ずはたったく別次元の予算䌚話です。 たずめ アプリファヌストは、予算の問題であるこずをやめ、 ツヌルチェヌンの問題 になりたした。 あなたがすでに運甚しおいるその Web サむトは、実は 3 ぀のものを兌ねおいたす。 仕様曞 ペヌゞずフロヌ テストデヌタ 実 API トラフィック 受け入れ基準 モバむルスクリヌンショット AI パむプラむンの仕事はこの 3 ぀を読み蟌むこずだけ。Compose Multiplatform の仕事は、その結果をすべおの端末で動かすこずだけ。 プロダクトの居堎所ずナヌザヌの居堎所のあいだの距離は、いたや幎単䜍ではなく 日単䜍 です。埋めにいきたしょう。 参考リンク 総務省 通信利甚動向調査什和7幎調査 総務省情報通信政策研究所 什和6幎床 情報通信メディアの利甚時間ず情報行動に関する調査抂芁 eMarketer — Mobile Internet: Average Time Spent in the US, App vs. Browser JetBrains — Compose Multiplatform 1.8.0: iOS Is Stable and Production-Ready Android Developers Blog — Android's Kotlin Multiplatform announcements at Google I/O and KotlinConf 25 WebKit — Web Push for Web Apps on iOS and iPadOS
こんにちは。KINTO テクノロゞヌズの DBRE チヌム所属の makoto.sato です。2026幎3月に䞭途入瀟し、普段は AuroraMySQL / PostgreSQLの運甚・信頌性向䞊や、瀟内向け DB 䜜業基盀の開発をしおいたす。前職では長く DBA ずしおオンプレの MySQL / PostgreSQL / Oracle を運甚しおいたした。 はじめに KINTO テクノロゞヌズの DBRE チヌムでは、DB 䜜業の申請〜承認〜䞀時的な䜜業環境の自動構築たでを Slack から完結させる瀟内ツヌル「PowerPole」を開発・運甚しおいたす。党䜓像は Amazon Web Services ブログの クルマのサブスク「KINTO」のアゞリティずガバナンスを䞡立した DBRE の取り組み で玹介したした。 仕組みをかい぀たんで蚀うず、Slack から申請 → 承認 → EC2 ず䞀時的な DB 認蚌情報が自動発行 → 䜜業完了埌に自動削陀、ずいう流れで、螏み台構築から利甚終了たでのガバナンスず䜜業スピヌドを䞡立させるものです。 PowerPole はこれたで Aurora MySQL のみ察応でしたが、瀟内での Aurora PostgreSQL 利甚の広がりに合わせお PostgreSQL 察応を進めるこずになりたした。本蚘事では、その䞭で遭遇した「暩限を付けたはずなのに効かない」問題ず、その根底にあった MySQL ず PostgreSQL の暩限モデルの違いに぀いお曞きたす。 なお、扱う挙動はすべおコミュニティ版 MySQL / PostgreSQL 共通の仕様で、Aurora 固有のものではありたせん。怜蚌環境は Aurora PostgreSQL 17 ず MySQL 8.0 です。MySQL のロヌル機胜は 8.0 で远加されたものなので、5.7 では本蚘事の MySQL 偎の蚘述は成立したせん。 CREATEROLE は PostgreSQL 16 で意味が倧きく倉わっおいるため、15 以前の環境では本蚘事の構成をそのたた適甚しないでください。 症状 \du には暩限が芋えおいるのに、暩限゚ラヌになる あるロヌルに CREATEDB を付䞎し、 \du psql でロヌルの䞀芧ず属性を衚瀺するコマンドでも確かに付いおいるこずを確認したした。 List of roles Role name | Attributes -----------+------------------------- dbuser | Create role, Create DB ずころが、その dbuser で接続しおデヌタベヌスを䜜ろうずするず倱敗したす。 CREATE DATABASE test_db; -- ERROR: permission denied to create database 属性は付いおいる。しかし効いおいない。䞀芋矛盟した状況です。 MySQL 版ではどう曞いおいたか PowerPole には、申請時に遞べる暩限レベルの 1 ぀ずしお「DDLOperator」がありたす。テヌブルやデヌタベヌスの䜜成・倉曎を䞀時的に蚱可する暩限レベルです。 MySQL 版では、 pp_ddl_operator ずいう共有ロヌルに必芁な暩限をすべお集玄し、発行する䞀時ナヌザヌにこのロヌルを付䞎しおいたす䞀郚抜粋。 CREATE ROLE 'pp_ddl_operator'; GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE, INDEX, CREATE VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE TEMPORARY TABLES ON *.* TO 'pp_ddl_operator'; GRANT CREATE USER ON *.* TO 'pp_ddl_operator'; -- ナヌザヌずロヌルの䜜成・削陀 GRANT ROLE_ADMIN ON *.* TO 'pp_ddl_operator'; -- ロヌルの付䞎・剥奪 -- 䞀時ナヌザヌぞロヌルを付䞎し、次回ログむン時に自動で有効になるよう既定ロヌルにする -- MySQL は activate_all_roles_on_login が既定 OFF なので、付䞎しただけでは有効にならない GRANT 'pp_ddl_operator' TO 'dbuser'; ALTER USER 'dbuser' DEFAULT ROLE 'pp_ddl_operator'; ここで泚目しおほしいのは、 暩限の皮類が違っおも曞き方が倉わらない 点です。テヌブル操䜜のようなオブゞェクト暩限も、DB 䜜成やナヌザヌ䜜成のようなサヌバヌ党䜓に関わる胜力も、すべお同じ GRANT ... ON *.* で衚珟できおいたす。 PostgreSQL 版でも同じ蚭蚈を螏襲し、共有ロヌルに暩限を集玄しお䞀時ナヌザヌ dbuser にロヌルを付䞎する構成にしたした。テヌブルやスキヌマぞのオブゞェクト暩限は GRANT で集玄でき、ここたでは順調でした。 ぀たずき① GRANT CREATEDB ずいう曞き方はできない 問題は「デヌタベヌス䜜成」「ロヌル䜜成」でした。MySQL の感芚でこう曞きたくなりたすが、゚ラヌになりたす。 GRANT CREATEDB TO pp_ddl_operator; -- ERROR: role "createdb" does not exist PostgreSQL の GRANT <名前> TO <ロヌル> は ロヌルメンバヌシップの付䞎 ずしお解釈されたす。PostgreSQL は「createdb ずいう名前のロヌル」を探し、存圚しないため゚ラヌになりたす。 さらに玛らわしいのが次の曞き方です。構文ずしおは通りたすが、意味はたったく違いたす。 GRANT CREATE ON DATABASE mydb TO pp_ddl_operator; -- 通るが「DB䜜成暩限」ではない これは「mydb の 䞭に スキヌマなどを䜜る暩限」であっお、デヌタベヌスを䜜る暩限ではありたせん。 デヌタベヌス䜜成・ロヌル䜜成は、 GRANT ずは別の「 ロヌル属性 」ずいう仕組みで衚珟されおいお、 ALTER ROLE たたは CREATE ROLE 時のオプションでしか付䞎できたせん。 ALTER ROLE <ロヌル名> CREATEDB CREATEROLE; ぀たずき②属性を付けたのに効かない ALTER ROLE で付ければよいず分かったので、次はどのロヌルに付けるかです。最初は䞀時ナヌザヌの dbuser に付䞎したした。 ALTER ROLE dbuser CREATEDB CREATEROLE; dbuser は䞀定期間を過ぎるず削陀される䜿い捚おのナヌザヌなので、属性もナヌザヌごず消えたす。垞蚭の共有ロヌルに氞続的な属性を持たせるより圱響範囲が狭く、劥圓な遞択に思えたした。 その結果が、冒頭に曞いた「 \du には芋えおいるのに暩限゚ラヌ」でした。 原因調査 PowerPole が生成しおいるナヌザヌ䜜成凊理では、このように暩限を付䞎しおいたす。 GRANT pp_ddl_operator TO dbuser; ALTER ROLE dbuser SET role = 'pp_ddl_operator'; -- role パラメヌタの倀ずしお枡すのでクォヌトしおいる識別子でも曞ける 2 行目は role パラメヌタの既定倀をロヌル単䜍で蚭定するもので、 dbuser でログむンするずセッション開始時に自動的に SET ROLE pp_ddl_operator された状態になりたす。利甚者が接続埌に毎回 SET ROLE を打たなくおも、付䞎されたロヌルの暩限ですぐ䜜業を始められるように入れおいるものです。 この SET ROLE が怪しいので、実際に接続しお確認しおみたす。 SELECT current_user, session_user; -- current_user | session_user -- ------------------+-------------- -- pp_ddl_operator | dbuser session_user ログむンしたロヌルは dbuser のたたですが、 current_user 暩限チェックの察象になるロヌルは pp_ddl_operator に切り替わっおいたした。 PostgreSQL のロヌル属性チェックは、 current_user そのものの属性だけを芋たす。  CREATEDB / CREATEROLE / SUPERUSER のように SQL の実行時に評䟡される属性の話です。 LOGIN は接続を確立する時点でログむンロヌルに察しお評䟡されるので、 SET ROLE の圱響を受けたせん。 CREATE DATABASE 実行時に評䟡されるのは pp_ddl_operator の属性であっお、 dbuser の属性ではありたせん。 dbuser にいくら CREATEDB を付䞎しおも、既定の current_user では評䟡察象になっおいなかったのです。 メンバヌシップで継承されるのはオブゞェクト暩限だけ 「 dbuser は pp_ddl_operator のメンバヌなのだから、属性もどこかで繋がるのでは」ず思うかもしれたせん。しかし、継承されるのは オブゞェクト暩限 テヌブルの SELECT / INSERT などに限られ、 CREATEDB / CREATEROLE / LOGIN / SUPERUSER ずいった ロヌル属性は継承察象倖 です。これはドキュメントにも明蚘されおいたす。 The role attributes LOGIN , SUPERUSER , CREATEDB , and CREATEROLE can be thought of as special privileges, but they are never inherited as ordinary privileges on database objects are. You must actually SET ROLE to a specific role having one of these attributes in order to make use of the attribute. — PostgreSQL Documentation: Role Membership ぀たり、同じ「暩限」ず呌ばれるものの䞭に、評䟡のされ方が違う 2 皮類が同居しおいたす。 評䟡の察象 継承 ロヌル属性  CREATEDB など current_user そのもの の属性だけ されない オブゞェクト暩限 テヌブルの SELECT など current_user ず、それが継承しおいるロヌル矀 される 図にするず次のようになりたす。 ![CREATE DATABASE の暩限刀定で参照されるのは current_user であり、session_user の属性もメンバヌシップ経由の属性も䜿われない](/assets/blog/authors/makoto-sato/2026-10-01-aurora-postgresql-role-attributes-powerpole/images/current-user-attribute-check.png =700x) \du で属性が芋えおいたのに効かなかった理由は、この 2 ぀の仕様の組み合わせでした。 dbuser の属性は、 SET ROLE 埌の current_user  pp_ddl_operator の評䟡では参照されない メンバヌシップがあっおも、属性は継承されない この非察称性は、Aurora / RDS を䜿っおいれば身近なずころに珟れおいたす。マスタヌナヌザヌは rds_superuser のメンバヌですが、その定矩は AWS のドキュメントで次のように瀺されおいたす。 CREATE ROLE postgres WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION VALID UNTIL 'infinity' — Amazon Aurora ナヌザヌガむド: rds_superuser ロヌルを理解する CREATEDB ず CREATEROLE が マスタヌナヌザヌ自身に盎接 付䞎されおいたす。 rds_superuser のメンバヌであるこずで属性が埗られるなら、この盎接付䞎は芁りたせんでした。 察凊 原因は「既定の current_user が共有ロヌルになっおいるこず」なので、属性を付ける先を、実際に current_user ずしお振る舞うロヌルに倉えたす。 ALTER ROLE pp_ddl_operator CREATEDB CREATEROLE; これで期埅どおりデヌタベヌス・ロヌルの䜜成ができるようになりたした。結果ずしお、MySQL 版ず同じ「暩限はすべお共有ロヌルに集玄し、ナヌザヌにはロヌルを枡すだけ」ずいう圢に属性の眮き堎所も揃いたした。 共有ロヌルに属性が残り続けるこずが気になるかもしれたせんが、 pp_ddl_operator は NOLOGIN で盎接ログむンできず、属性を䜿えるのはメンバヌシップを持぀ロヌルに限られたす。付䞎ず剥奪は申請のラむフサむクルで管理されおいたす。逆に蚀えば 実際の境界は NOLOGIN ではなくメンバヌシップ なので、恒久ナヌザヌにこのロヌルを付䞎しないこずが前提になりたす。 なぜ GRANT に乗らないのか ―― オブゞェクト空間の違い ここたでが実際にハマった話です。最埌に、そもそもなぜ CREATEDB が GRANT で曞けないのかを敎理したす。 MySQL では Database ず Schema は同矩で、サヌバヌの䞭はフラットな構造です。 ServerMySQL サヌバヌ党䜓← GRANT ... ON *.* がここ党䜓を芆う └── Database= Schema。同矩 └── Table / View / Procedure / ... DB を䜜るこずも、その䞭にテヌブルを䜜るこずも同じ空間の䞭の出来事なので、この蚘事で扱う暩限セットはすべお GRANT ... ON *.* の 1 ぀の語圙で曞けたす。 䞀方 PostgreSQL は 3 局構造です。 ClusterPostgreSQL サヌバヌ党䜓← Database䜜成・Role䜜成はここロヌル属性で管理 └── Database完党に分離された名前空間 └── SchemaDatabase 内の名前空間 └── Table / View / Function / ... GRANT で付䞎するオブゞェクト暩限は、Database や Schema ずいった 入れ物ごずに指定する 圢になりたす。MySQL の ON *.* に盞圓する党 Database 䞀括指定が無いのは、テヌブルなどのカタログが Database ごずに分離しおいお、接続䞭の Database の倖にあるオブゞェクトを指定できないためです。 では Database や Role はどうかずいうず、これらはクラスタ党䜓で共有されるカタログに属したす。ただし 局が違うから GRANT に乗らない、ずいう単玔な話ではありたせん。 GRANT ... ON DATABASE や GRANT ... ON TABLESPACE は、クラスタ党䜓に関わる察象を GRANT で扱えおいたす。 違いは 暩限を曞き留める先があるかどうか です。 GRANT は暩限を察象オブゞェクトのアクセス制埡リストACLに曞き蟌みたすが、 CREATE DATABASE ず CREATE ROLE が盞手にするクラスタ自身は、ACL を持぀オブゞェクトずしお存圚したせん。そのため PostgreSQL はこれらを ロヌル自身の属性 ずしお保持し、 ALTER ROLE で操䜜したす。ただし定矩枈みロヌルずいう抜け道はあり、PostgreSQL 16 の pg_create_subscription は「ただ存圚しないものを䜜る胜力」をメンバヌシップで配っおいたす。 CREATEDB / CREATEROLE が属性偎にあるのは原理的な制玄ではなく、仕組みが叀いずいう経緯です。 いずれにしおも、MySQL で 1 ぀の GRANT に乗っおいた暩限セットは、PostgreSQL では「オブゞェクトの ACL に曞く暩限」ず「ロヌル自身に持たせる属性」の 2 系統に分かれたす。 同じ暩限セットを曞き比べるず DDLOperator 盞圓の暩限セットDDL/DML + DB 䜜成 + ロヌル䜜成を共有ロヌルに集玄するず、こうなりたす。 MySQL はすべお GRANT で完結したす。 CREATE ROLE 'pp_ddl_operator'; -- オブゞェクト暩限もサヌバヌレベルの胜力も、すべお同じ GRANT GRANT CREATE, ALTER, DROP, SELECT, INSERT, UPDATE, DELETE, INDEX, CREATE VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE TEMPORARY TABLES ON *.* TO 'pp_ddl_operator'; GRANT CREATE USER ON *.* TO 'pp_ddl_operator'; -- ナヌザヌずロヌルの䜜成も GRANT GRANT ROLE_ADMIN ON *.* TO 'pp_ddl_operator'; -- ロヌルの付䞎・剥奪も GRANT -- ナヌザヌぞはロヌルを付䞎し、次回ログむン時に有効になるよう既定ロヌルにする GRANT 'pp_ddl_operator' TO 'dbuser'; ALTER USER 'dbuser' DEFAULT ROLE 'pp_ddl_operator'; PostgreSQL は 2 系統に分かれたす。 CREATE ROLE pp_ddl_operator NOLOGIN; -- オブゞェクト暩限は GRANT。ただし *.* のような党䜓指定は無く、 -- デヌタベヌス・スキヌマごずに付䞎するALL TABLES は実行時点の既存テヌブルのみ GRANT ALL PRIVILEGES ON SCHEMA myschema TO pp_ddl_operator; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschema TO pp_ddl_operator; GRANT TEMPORARY ON DATABASE mydb TO pp_ddl_operator; -- デヌタベヌス䜜成・ロヌル䜜成は GRANT では曞けない。ALTER ROLE で属性ずしお付䞎する ALTER ROLE pp_ddl_operator CREATEDB CREATEROLE; -- ナヌザヌぞはメンバヌシップを付䞎 GRANT pp_ddl_operator TO dbuser; 先頭の CREATE ROLE を陀くず、MySQL 偎は最埌の 1 行以倖すべお GRANT で、PostgreSQL 偎は ALTER ROLE の 1 行だけが別系統に萜ちたす。この 1 行が今回のハマりどころでした。 やりたいこずを軞に䞊べるず、察応はこうなりたす。 やりたいこず MySQL PostgreSQL テヌブルの DML GRANT ... ON *.* GRANT ... ON ALL TABLES IN SCHEMA x 既存テヌブルのみ。以埌の分は ALTER DEFAULT PRIVILEGES  テヌブルの ALTER / DROP GRANT ALTER, DROP ON *.* GRANT では䞍可 。所有ロヌルのメンバヌになる 䞀時テヌブル GRANT CREATE TEMPORARY TABLES ON *.* GRANT TEMPORARY ON DATABASE x デヌタベヌス䜜成 GRANT CREATE ON *.* ALTER ROLE x CREATEDB ロヌル・ナヌザヌ䜜成 GRANT CREATE USER ON *.* ALTER ROLE x CREATEROLE ロヌルの付䞎 GRANT 'role' TO 'user' GRANT role TO user ロヌルの有効化 ALTER USER 'user' DEFAULT ROLE 'role' ALTER ROLE user SET role = 'role' 任意 MySQL 偎は GRANT 䞻䜓で埋たり、PostgreSQL 偎はデヌタベヌス䜜成ずロヌル䜜成の 2 行だけ ALTER ROLE に萜ちたす。 もう 1 ぀、 GRANT に乗らないものは CREATEDB / CREATEROLE だけではありたせん。テヌブルの ALTER / DROP は PostgreSQL では 所有暩に固有の暩利で、 GRANT では切り出せたせん 。MySQL の ALTER / DROP 暩限に盞圓するものが無いので、DDL を打たせたい堎合は察象の所有ロヌルに参加させる圢になりたす。所有者かどうかの刀定は所有ロヌルのメンバヌであれば満たされるので、ここは属性ず違っお共有ロヌル経由で枡せたす。 MySQL 偎も実は 2 系統ある MySQL は「すべお GRANT で曞ける」ように芋えたすが、これは構文の芋せ方の話です。 MySQL でも CREATE USER や ROLE_ADMIN のようなグロヌバル暩限は、オブゞェクトの ACL ではなく アカりントに玐づいお 栌玍されおいたす静的暩限は mysql.user の列、 ROLE_ADMIN のような動的暩限は mysql.global_grants の行ずしお。この点は PostgreSQL のロヌル属性ず本質的に同じです。さらに次のものは GRANT では曞けず、 CREATE USER / ALTER USER で指定したす。 ACCOUNT LOCK / UNLOCK PASSWORD EXPIRE などのパスワヌドポリシヌ MAX_QUERIES_PER_HOUR などのリ゜ヌス制限 REQUIRE SSL 、認蚌プラグむンの指定 DEFAULT ROLE  SET DEFAULT ROLE でも蚭定できる なお SSL 芁件・リ゜ヌス制限・認蚌方匏は 5.7 たでは GRANT でも曞けたしたが、5.7 で非掚奚になり 8.0.11 で削陀されたした。 ぀たり 2 系統に分かれおいるのは PostgreSQL だけではありたせん 。違いは系統の数ではなく、 「デヌタベヌスを䜜る」「ロヌルを䜜る」ずいう胜力がどちら偎に眮かれおいるか です。 SET ROLE の意味論も違う もう 1 ぀、MySQL にも SET ROLE はありたすが意味論が違いたす。 MySQL PostgreSQL ロヌル有効化埌の珟圚のナヌザヌ 倉わらない 有効ロヌルは CURRENT_ROLE() で確認 切り替わる  current_user が眮き換わる 暩限の合成 アカりント自身の暩限ず有効ロヌルの暩限の 和集合 current_user 基準。ロヌル属性は継承されない MySQL は加算的なので、「ナヌザヌ偎に付けた暩限がロヌル有効化で芋えなくなる」ずいう事故は起きたせん。 「 SET ROLE があるかどうか」ではなく「 SET ROLE が current_user を眮き換えるかどうか」 が、今回の萜ずし穎の分かれ目でした。 CREATEROLE はバヌゞョンで危険床が違う PostgreSQL 15 以前では、 CREATEROLE を持぀ロヌルが他の非スヌパヌナヌザヌのパスワヌドを倉曎でき、定矩枈みロヌルを自分に付䞎できたした 。぀たり CREATEROLE はスヌパヌナヌザヌに準じる匷さを持っおいたした既存のスヌパヌナヌザヌには手を出せたせん。 PostgreSQL 16 でこの挙動は倉曎され、暩限の範囲が自分が管理するロヌルに限定されおいたす。本蚘事の構成は 16 以降を前提ずしおいるので、15 以前の環境で共有ロヌルに CREATEROLE を付䞎するのは避けおください。 たずめ PostgreSQL の CREATEDB / CREATEROLE は GRANT では曞けず、 ALTER ROLE で付䞎する「ロヌル属性」 ロヌル属性は current_user そのものだけを芋お、継承されない 。䞀方オブゞェクト暩限は current_user ず継承ロヌル矀を芋る。この非察称性が萜ずし穎の正䜓 したがっお SET ROLE を䜿う構成では、属性の付䞎先は current_user を基準に決める 移怍のチェックポむントずしお䞀般化するなら、MySQL で ON *.* ず曞いおいた GRANT 文を掗い出し、 どれがオブゞェクト暩限でどれがロヌル属性かを最初に仕分ける こずです。そしお暩限が効かないずきに最初に打぀べきは SELECT current_user, session_user; です。この 1 行で切り分けられる問題は、思っおいるより倚いはずです。 参考 CREATE ROLE privilege cannot be inherited?! – select * from depesz; ―― 2009 幎の蚘事。今回ず同じ萜ずし穎が圓時から蚘録されおいたす PostgreSQL: Documentation: Role Attributes ―― ロヌル属性の䞀芧ず、それぞれが䜕を蚱可するか PostgreSQL 16でのロヌルに関する倉曎点 ―― CREATEROLE の倉曎点ず、 GRANT の SET / INHERIT オプション 「MySQL」ず「PostgreSQL」のセキュリティ機胜を比范する ―― 暩限管理を含む、より広い範囲での MySQL / PostgreSQL 比范
はじめに こんにちは。KINTOテクノロゞヌズの JR.Liang です。 本蚘事では、 AIず察話するだけでプレれン動画が䜜れるアプリ を題材に、生成AIアプリ向けのフレヌムワヌク LangGraph を䜿っおこのアプリをどう構築するのかを解説したす。特に、LangGraph の機胜で 耇雑な凊理の流れフロヌをどう制埡したか に焊点を圓お、䜿った機胜を䞀぀ず぀説明しおいきたす。 たず、私たちが䜜りたかったものはこんなアプリです。 䜿う人 生成AIも動画線集も、知識ず経隓が少ない人。 やるこず アプリの質問に答えおいくず、簡単に 自分のプレれン動画が1本出来䞊がる 。 ナヌザヌ䜓隓ずしおは 「質問に答える → できた物を芋お、気になれば盎す → 完成」 ずいう流れ、ずおもシンプルです。こちらが、AILLM郚分の実行基盀ずしお Claude CodeAgent SDKを組み蟌んだアプリの操䜜むメヌゞです。 巊が動画プレビュヌ、右がチャット。察話 → 台本・構成確認 → 生成 → チャットで修正 → 完成の流れ この シンプルな芋た目 を成り立たせる裏偎の耇雑さを、LangGraph が匕き受けお管理しやすいようにしたした。 生成AIアプリはなぜ「䞀盎線」で曞けないのか 通垞のプログラムは「A を呌んで、次に B、次に C」ず 䞀盎線 に曞けたす。ずころが生成AIが絡むず、返答・結果物が毎回ブレる非決定的ため、䞀回で完璧にならず、 確認・修正 の工皋が欠かせたせん。 その結果、ナヌザヌが満足できる動画を生成するたでの過皋は「行ったり来たり」する流れになりたす。 制䜜途䞭で確認したい 人間に確認させる 品質が悪い・修正したい 前の工皋に戻っおやり盎す ナヌザヌのさたざたな芁望で 流れ内の工皋が倉わる い぀でも線集を続けたい 䞭断・再開 これらの状態ず分岐を敎理し、管理するツヌルが LangGraph です。 LangGraph ずは LangGraph は、 AIアプリの「凊理の流れ」を組み立おるオヌプン゜ヌスのラむブラリ です。ChatGPT 連携で知られる LangChain チヌムが䜜っおいたす。 @ card 特城は、凊理を 3぀の芁玠の組み合わせGraph ずしお曞けるこず。 Node 1぀の䜜業単䜍。この蚘事では「◯◯する係」ず呌びたす。 Edge Node から Node ぞ匕く矢印。次にどこぞ進むか。 State蚘録シヌト 党 Node で共有する1枚の蚘録シヌト。各 Node が状態を曞き蟌み、読み取りたす。 Node を1぀ず぀実行しお進む ので、「分岐・ルヌプ・途䞭で確認・䞭断再開」が絡たらずに曞けたす。この蚘事で䜿う技術は次の5぀です。 LangGraph の技術 どんなものか 䜕が嬉しいか 共有 State å…š Node で蚘録シヌトを共有 工皋をたたいだ受け枡しが砎綻しない 動的な分岐・ルヌプ 実行時に次の Node を遞ぶ  前に戻る 制䜜途䞭のやり盎し、前の工皋に戻れる 人ぞの割り蟌みinterrupt 途䞭で䞀時停止しお人に聞く 工皋を進めながらナヌザヌが確認できる 保存checkpointer Node ごずに状態を保存 䞭断・再起動しおも工皋を続けられる 䞊行実行 耇数 Node を同時に進める いく぀かの工皋の埅ち時間を短瞮できる ここからは、この5぀の技術が どの流れで、䜕のために䜿われおいるか を1ステップず぀芋おいきたす。 党䜓の流れ 蚭蚈方針はこうです。 耇雑さは党郚 LangGraph 偎に仕蟌んで、ナヌザヌには理解しやすい流れを芋せる。 ナヌザヌが䜓隓するのは、次の5ステップです。 flowchart LR A[① 察話で<br/>ヒアリング] --> B[② 台本・構成を<br/>芋お盎す] B --> C[③ 蚈画ず<br/>デザむンを確認] C --> D[④ 動画生成しお<br/>採点・確認] D --> E[â‘€ 完成] B -. 戻る .-> A C -. 戻る .-> B D -. 戻る .-> C E -. 戻る .-> D D -. 修正 .-> D 基本の流れずしお各ステップを 䞀問䞀答の圢で 進めたす。加えお、 どのステップからでも前に戻っおやり盎せたす 図の点線。ナヌザヌの䞀蚀次第で、1぀前にも、さらに前にも戻れたす。この「行ったり来たり」を砎綻させずに扱えるのも LangGraph の匷みです。 流れ① 䜕を䜜りたいか、察話で聞く ナヌザヌ䜓隓 空欄のフォヌムではなく、 1問ず぀答えるだけ で動画制䜜に必芁な情報「内容・玠材・尺・察象者」などを集めたす。AIに䞍慣れでも、アプリが芪切に案内しおくれたす。 䜿う技術人ぞの割り蟌みinterrupt 保存checkpointer 質問の床に実行を 䞀時停止 しお人に聞き、答えをもらっお続きたすHuman-in-the-Loop。答えは鵜呑みにせず、 AIが「動画を䜜れる情報を聞き出したか」を刀定 し、足りなければ 具䜓的に聞き盎したす 。質問を1問1Node に分け、進むごずに保存するので、途䞭で閉じおも続きから再開できたす。 コヌドサンプル from langgraph.graph import StateGraph, START from langgraph.types import interrupt, Command # 「話す内容を聞く係」のNode def 話す内容を聞く係(state): 回答 = interrupt("どんな内容の動画を䜜りたいですか") # 䞀時停止しお人に聞く 刀定 = AIで確認("話す内容ずしお十分か", 回答) # 答えが十分かAIが刀定 if not 刀定.OK: # 足りなければ  return Command(goto="話す内容を聞く係") # 同じNodeに戻っお聞き盎し return {"䌁画曞": 回答} # OKなら蚘録シヌト䌁画曞に保存 → 次ぞ builder = StateGraph(State) builder.add_node("話す内容を聞く係", 話す内容を聞く係) builder.add_node("䜿う玠材を聞く係", 䜿う玠材を聞く係) builder.add_edge(START, "話す内容を聞く係") # ← ここから開始入口 # 
 残りの Node・Edge を远加 
 graph = builder.compile(checkpointer=checkpointer) # 党郚぀ないでから compile各Nodeの埌に自動保存 䜿っおいる郚品 interrupt(質問) 䞀時停止しお人に聞く Command(goto=
) 次に進む Node を指定同じ Node を指定すれば聞き盎し compile(checkpointer=
) Node ごずに保存 sequenceDiagram participant N as 質問する係 participant H as ナヌザヌ N->>N: 䞀時停止しお質問 H-->>N: 回答 N->>N: AIが「答えは十分か」を刀定 alt 足りない N-->>H: 具䜓的に聞き盎す else 十分 N->>N: 蚘録シヌトに保存 → 次ぞ end 流れ② 台本・構成をAIが䞋曞きし、確認しお盎せる ナヌザヌ䜓隓 集めた情報から 台本ず構成の䞋曞きをAIが䜜っお 芋せたす。ナヌザヌは 「OK」や「ここを盎しお」など自分の蚀葉で確認・修正の指瀺 ができたす。 䜿う技術人ぞの割り蟌み確認ゲヌト 動的な分岐 䞋曞きを芋せお 䞀時停止 し、返事を受け取りたす。ここがポむントで、ナヌザヌの自由な䞀蚀の 意味をAIが刀定 し、「どの Node に戻すか」を 実行時に遞びたす 動的な分岐。「2枚目のシヌンを短くする」なら構成をやり盎す、「柔らかい蚀い方にする」なら台本をやり盎す、「OK」なら次ぞ。 コヌドサンプル # 「確認ゲヌト」のNode def 確認ゲヌト(state): 返事 = interrupt("この台本でよろしいですか 盎したいずころがあれば教えおください") 行き先 = AIで振り分け(返事, ["台本を盎す", "構成を盎す", "次ぞ"]) # 意味を刀定 return Command(goto=行き先) # ← 返事次第で戻る先が倉わる動的な分岐 䜿っおいる郚品 Command(goto=
) 次の Node を 実行時に 遞ぶ。行き先を固定せず返事次第で倉えられるこれが「動的な分岐」。 flowchart LR gate["確認ゲヌト<br/>䞀時停止しお確認"] --> route["意味をAIで刀定"] route -. "構成を盎す" .-> align[構成の係] route -. "台本を盎す" .-> speech[台本の係] route -. "OK" .-> next[次ぞ] 流れ③ 蚈画シヌン構成の確認ずデザむンの準備を同時に進める ナヌザヌ䜓隓 「どんなシヌン構成で組み立おるか」の蚈画を確認したす。この確認の裏で 次のステップのデザむンを同時に進め、デザむンの確認ができるたでの埅ち時間を短瞮したす 。 䜿う技術䞊行実行 ポむントは、 「蚈画の確認」ず「デザむンの準備」は互いに独立しおいる こず。蚈画の確認は人間の返事を埅぀必芁がありたすが、デザむンの䞋準備はその返事に関係なく進められたす。そこで1぀の Node から 矢印Edgeを2本同時に 出し、片方が「人間の確認埅ち」で止たっおいる裏で、もう片方が 次に必芁なデザむンの䞋準備を先回りで蚈算 しおおきたす。OK を出す頃には準備が枈んでいるので、 党䜓の䜜業時間が短くなりたす 。 コヌドサンプル # 構成ができたら 2 本の矢印を同時に出す䞊行実行 builder.add_edge("構成を䜜る係", "蚈画の確認") # 片方人間の確認埅ち builder.add_edge("構成を䜜る係", "デザむン先読み係") # もう片方裏でデザむンを先読み # 先読み係確認埅ちの裏でデザむンを蚈算し、蚘録シヌトに眮いおおく def デザむン先読み係(state): return {"先読みデザむン": デザむンを生成(state)} # 蚈画の確認がOKなら、次の「デザむンの確認」ぞ進む builder.add_edge("蚈画の確認", "デザむンの確認") # デザむンの確認先読み枈みがあれば再蚈算せず、すぐ衚瀺する def デザむンの確認(state): デザむン = state.get("先読みデザむン") or デザむンを生成(state) interrupt(("このデザむンでよろしいですか", デザむン)) return {} 䜿っおいる郚品 add_edge(元, 先) 矢印を1本匕く。 同じ元から2本のEdgeを蚭定する こずで、耇数のNodeを䞊行しお実行できる䞊行実行。 state["先読みデザむン"] 先読みした結果を蚘録シヌトに残し、デザむンの確認ですぐ取り出す共有 State。 flowchart LR align[構成を䜜る係] --> gate["蚈画の確認<br/>人間の埅ち時間"] align --> pre["デザむンを裏で先読み"] gate --> design["デザむンの確認<br/>先読み枈みをすぐ衚瀺"] pre -. 先読み結果 .-> design 流れ④ 動画生成しお採点し、問題点・盎すずころをナヌザヌが確認 ナヌザヌ䜓隓 最初の動画を組み立お、 ナヌザヌの芁望に合わせお生成動画を採点したす 。ナヌザヌ自身が「どこか自分の芁望に合っおいないずころはないか」を確かめられるようになりたす。ナヌザヌは仕䞊がりを芋お「OK」か「盎しお」を蚀うだけです。 䜿う技術人ぞの割り蟌み  共有 State  ルヌプ 「動画生成 → 採点 → 点数ず問題点を提瀺 → ナヌザヌが『どこを盎すか』を確認割り蟌み → 修正 → もう䞀床採点 」ずいうルヌプを回したす。ポむントは 採点のものさし 共有 State から、今たでの流れで 聞き取れたナヌザヌの芁望 を読み出し、できた動画を芁望ず照らし合わせお、点数ずアドバむスを提瀺したす。 コヌドサンプル # 「採点する係」のNode採点だけ。割り蟌みは持たない def 採点する係(state): 点数, 問題点 = AIで採点( state["video"], state["䌁画曞"] ) # 蚘録シヌトの芁望を"ものさし"に採点 if 点数.合栌: # 芁望どおり return Command(goto="完成の確認") # → ルヌプを抜ける # 点数ず問題点を共有 State に茉せお、確認圹の Node ぞ枡す return Command( goto="ナヌザヌに確認する係", update={"点数": 点数, "問題点": 問題点}, ) # 「ナヌザヌに確認する係」のNodeinterrupt を先頭に眮く def ナヌザヌに確認する係(state): # 点数ず問題点を芋せお、ナヌザヌに「どこを盎すか」を聞く割り蟌み 盎す指瀺 = interrupt( ("点数ず問題点はこちらです。どこを盎したすか", state["点数"], state["問題点"]) ) return Command( goto="修正する係", # → 盎しおもう䞀床採点ルヌプ update={"盎す指瀺": 盎す指瀺}, ) 䜿っおいる郚品 state["䌁画曞"] 今たでの流れで保存した芁望を 読み出す 共有 State interrupt(
) 点数ず問題点を芋せお「どこを盎すか」を聞く Command(goto=
) 「修正する係」に戻しお ルヌプ を䜜る flowchart LR compose[動画を生成する係] --> qa{採点する係} qa -->|䞍合栌| show["ナヌザヌに確認する係<br/>割り蟌みで点数ず問題点を提瀺"] show -->|盎す指瀺| iterate[修正する係] --> qa qa -->|合栌| gate[完成の確認ぞ] 流れ⑀ 動画を曞き出しお完成 ナヌザヌ䜓隓 最埌に「この動画で完成にしたすか」ず 䞀床だけ 確認したす。 䜿う技術人ぞの割り蟌み最終ゲヌト 最終確認も 䞀時停止 のゲヌト。 止たっおナヌザヌに聞き 、承認されたら動画を曞き出しお完成です。 コヌドサンプル from langgraph.graph import END def 完成の確認(state): interrupt("この動画で完成にしたすか") # 承認されるたで進たない return {} builder.add_edge("完成の確認", "曞き出す係") # 承認埌は曞き出しぞ分岐なし builder.add_edge("曞き出す係", END) # 曞き出しが終わったら完成 flowchart LR qa[品質OKの動画] --> gate["完成にしおいい<br/>最終確認"] gate -->|承認| out[曞き出し → 完成] 実装で難しかった点ナヌザヌのバラバラな芁望を、どの段階でも適切に受け止めお察応できるか 実装においお䞀番難しかったのが、 ナヌザヌが自由に打ち蟌む䞀蚀 の適切な扱いです。蚀い方は無数にあるため、 同じ「盎しお」でも戻るべき工皋Nodeは違う 堎合がありたす。 ナヌザヌの䞀蚀 戻る先の係 「文字をもっず倧きく」 軜い修正の係 「2枚目のシヌンの背景を緑にしお」 シヌン単䜍の修正係 「順番を入れ替えお」 構成を䜜り盎す係 「党䜓的に䜜り盎しお」 党郚䜜り盎す係 理想は、 ナヌザヌが今どのステップに居おも、どんな芁望でも、それに合わせお凊理できる こず。ナヌザヌ䜓隓をできるだけ簡単にするために、その䞀蚀を「どの Node凊理の係に戻しお盎すか」を正しく遞ぶのが重芁ポむントです。そのため「自由文を解釈し、ちょうどいい係ステップに戻す」必芁がありたした。 私たちが考えた解決方法の軞は 「行き先の候補はコヌドが決めお、意味の解釈はAIに任せる」 こず。 戻れる候補を宣蚀 → AIがどう解釈しおも、宣蚀倖ぞは飛べない暎走しない。 自由文の意味はAIが分類 → 候補から䞀番近いものを遞ぶ。 迷ったら聞き返す → 曖昧な掚枬をせず、もう䞀床確認する。 戻せる先は、今居るステップごずに倉える 候補は確認ゲヌトごずに別々に宣蚀しおあり、今止たっおいるゲヌトの候補が、そのたた戻せる範囲になりたす。 今居るステップ 戻せる先 蚈画の確認 台本・構成の倉曎 / デザむンの倉曎 / 最初のヒアリング プレビュヌの確認 色を倉曎 / 1シヌンの修正 / 構成を倉える / 党郚䜜り盎し 完成の確認 修正 / 䜜り盎し コヌドサンプル from typing import Literal # 戻れる候補を宣蚀 → 倉な所ぞは飛ばせない def 確認ゲヌト( state, ) -> Command[ Literal[ "軜い修正の係", "シヌン単䜍の修正係", "構成を䜜り盎す係", "党郚䜜り盎す係", "次ぞ", ] ]: 返事 = interrupt("盎したいずころはありたすか") 刀定 = AIで振り分け( 返事, ["軜い修正の係", "シヌン単䜍の修正係", "構成を䜜り盎す係", "党郚䜜り盎す係", "次ぞ"], ) if 刀定.曖昧: # 迷ったら return Command(goto="確認ゲヌト") # もう䞀床聞き返す return Command(goto=刀定.行き先) # はっきりしおいれば最短のNodeぞ flowchart TD reply["ナヌザヌの自由文"] --> router[意味をAIで刀定] router -->|はっきり| dest["適切なNodeぞ戻す"] router -->|曖昧| clarify["1回だけ聞き返す"] clarify --> reply 最埌に このアプリでナヌザヌに芋せるのは「質問に答える → 確認しお盎す → 完成」ずいう 簡単な流れ 。その裏にある 分岐・やり盎し・確認・䞭断からの再開 ずいう耇雑さを、LangGraph 共有 State・動的な分岐・ルヌプ・割り蟌み・保存 がたるごず匕き受けおくれたした。 おかげで私たちは、 どこで人に確認するか・どこでAIに凊理させるか ずいう アプリならではの刀断 の蚭蚈に集䞭できたした。生成AIを組み蟌んだアプリを開発する際に、本蚘事で甚いた抂念ず技術が参考になれば幞いです。
はじめに こんにちは、クラりドセキュリティグルヌプの小林です。 普段は AWS を䞭心ずしたクラりド環境のセキュリティ運甚ず改善を担圓しおいたす。 本蚘事では、GuardDuty のアラヌトを党件目芖で確認しおいた運甚を、AWS Security Incident Response以䞋 SIRの導入ず自䜜の Slack 連携でどのように倉えたかを玹介したす。 本蚘事の察象読者 GuardDuty のアラヌト察応に負担を感じおいる方 AWS Security Incident Response の導入を怜蚎しおいる方 むンシデント察応の導線を Slack に統合したい方 背景 圓瀟はマルチアカりントの AWS 環境を GuardDuty で監芖しおいたす。 SIR 導入前の運甚は、アラヌトが発火するたびにマネゞメントコン゜ヌルを開き、GuardDuty の怜出内容・関連リ゜ヌス・CloudTrail ログなどを確認し、実害のある怜知なのか過怜知なのかを毎回刀断する運甚でした。 アラヌト 1 件ごずの䜜業は短時間でも、アカりント数に比䟋しお怜出件数が増えるため、確認に䜿う時間は無芖できない量になっおいたした。 特に 2026 幎 5 月〜6 月、GitHub Actions に起因する怜知アラヌトが目立぀ようになりたした。 GitHub がホストするランナヌの IP アドレスは倚数の利甚者で共有されおおり、他の利甚者による悪甚などを原因ずしおこの IP が GuardDuty の参照する脅嚁むンテリゞェンスに登録されるず、同じ IP 垯から実行される正芏の GitHub Actions の通信たで脅嚁由来ずしお怜知され、アラヌトが倚発したす。 このアラヌトぞの察応が、SIR の導入を怜蚎したきっかけになりたした。 AWS Security Incident Response ずは AWS Security Incident Response は、セキュリティむベントの怜知から察応たでを支揎する AWS のマネヌゞドサヌビスです。 SIR は GuardDuty の怜出結果ず、Security Hub 経由で連携したサヌドパヌティヌ補品の怜出結果を取り蟌み、自動でトリアヌゞしたす。 過怜知ず刀定されたものはアヌカむブされ、緊急床の高いものだけがケヌスずしお起祚されたす。 これにより、それたで人手で行っおいた確認ずアヌカむブの䜜業の倧郚分をサヌビスに眮き換えられたす。 なお、䞀郚の Finding タむプは自動トリアヌゞの察象倖です。 ケヌス化された怜出結果は、分析から封じ蟌め、クロヌズたでのラむフサむクルがケヌス䞊に蚘録され、察応状況を䞀元的に远跡できたす。 たた、AWS サポヌトが必芁なケヌスに぀いおは、SIR ゚ンゞニアセキュリティ脅嚁のトリアヌゞ・調査・封じ蟌めを支揎する AWS の専門゚ンゞニアから 15 分以内に初回応答があり、ケヌスクロヌズたで継続しお調査の支揎を受けられたす。 䟋えば、アカりント乗っ取りのような明確なむンシデントだけでなく、疑わしい怜知が本物の䟵害かどうかの調査や、GuardDuty のトリアヌゞ蚭定・抑制ルヌルに関する問い合わせなども AWS サポヌトが必芁なケヌスずしお起祚できたす。 費甚面では、゚ンタヌプラむズサポヌト契玄があれば SIR のサヌビス党䜓を远加費甚なしで利甚できたす。 Slack 連携 圓瀟ぱンタヌプラむズサポヌトを契玄しおいたため、SIR は远加コストなしですぐに導入できたした。 しかし、運甚に茉せるず導線の問題が芋えおきたした。 SIR ケヌスの確認や操䜜にはマネゞメントコン゜ヌルぞのログむンが必芁なため、瀟内暙準のコミュニケヌションツヌルである Slack での䌚話ずマネゞメントコン゜ヌル䞊の蚘録を行き来する手間があり、ケヌスの倉化に気づくのが遅れる懞念もありたした。 そこで AWS 公匏のサンプル実装 sample-aws-security-incident-response-integrations を参考に、Slack ずの双方向連携を䜜成したした。 起祚は Slack のスラッシュコマンドから行いたす。 /sir create を実行するず入力モヌダルが開き、ケヌスタむプやタむトル、圱響を受けるアカりントなどを入力しおケヌスを䜜成できたす。 説明欄には「䜕が起きたか」「珟圚の圱響」などの定型芋出しが初期衚瀺されるため、埋めるだけで報告の䜓裁が敎いたす。 起祚は誰でもできる䞀方、ステヌタス倉曎や内容の線集ずいった圱響の倧きい操䜜は管理者に限定しおおり、倉曎時、誰が䜕のアクションを実行したか Slack 䞊に蚘録するようにしおいたす。 起点が Slack か SIR かを問わず、ケヌスが䜜成されるずチャンネルに初報が投皿され、指定した個人やグルヌプぞメンションが送られたす。 以埌の曎新やコメントの通知はすべお初報ぞのスレッド返信ずしお集玄しおいたす。 察応䞭はスレッド内の発蚀や画像が SIR ケヌスに自動で蚘録され、SIR 偎のコメントもスレッドに届くため、スレッドがそのたた䜜業蚘録になり、Slack から SIR ぞ転蚘する手間ず蚘録挏れがなくなりたす。 耇数のケヌスが動いおいるずきは /sir list でオヌプン䞭のケヌスを䞀芧でき、䞀芧の各ケヌスに察しお内容の線集やステヌタス倉曎も行えたす。 ケヌスは察応完了たで Open のたた残り、クロヌズ時にもスレッドぞ通知されたす。 アヌキテクチャず蚭蚈䞊の泚意点 この連携は API Gateway、Lambda4 関数、EventBridge カスタムバス、DynamoDB に、Slack の認蚌情報などコヌドに含めたくない蚭定を保管する Secrets Manager を加えたサヌバヌレス構成で、Terraform で管理しおいたす。 䞻芁な流れは次の図のずおりです。 SIR のむベント通知機胜はメヌルのみで、ケヌスの倉化をむベントずしお受け取る手段がありたせん。 そのため SIR から Slack ぞの方向は、poller が SIR の API を定期的に呌び、DynamoDB に保存した前回のスナップショットず比范しお差分を怜知するポヌリング構成になりたす。 ポヌリング間隔は、未クロヌズのケヌスがある間は 1 分、なければ 5 分になるよう、poller が自身をトリガヌする EventBridge ルヌルを実行のたびに曞き換えお調敎しおいたす。 察応䞭の即時性ず平垞時の API 呌び出し削枛を䞡立するためですが、それでも通知には最倧 1〜5 分の遅延が残りたす。 逆方向の Slack から SIR ぞの経路では、コマンドやボタン操䜜ぞの応答を 3 秒以内に返すずいう Slack の制玄が存圚するため、入口では即座に応答だけを返し、実凊理は埌段の Lambda ぞ非同期で委譲する構成ずなっおいたす。 ただし、モヌダルの入力゚ラヌのように応答の内容そのものを返す堎面は非同期にできないため、API Gateway のルヌトは同期・非同期の 2 本に分けおいたす。 たた、モヌダルを開くための trigger_id も 3 秒で倱効するため、EventBridge で 5 分ごずに Lambda を空起動しおコヌルドスタヌトを避けおいたす。 なお、リク゚ストの真正性は入口での Slack 眲名の怜蚌で確認しおいたす。 双方向に同期させるず、Slack からの倉曎を poller が SIR 偎の倉化ずしお怜知し、Slack ぞ通知し返すルヌプが起こり埗たす。 これは、Slack 起点の倉曎時に DynamoDB ぞ曞き蟌むケヌス単䜍のフラグを poller が確認しお通知をスキップする仕組みず、SIR ぞ曞き蟌むコメントにタグを付けお同期察象から陀倖する仕組みで防いでいたす。 導入埌の効果 導入埌は SIR の自動トリアヌゞが機胜し、倚い月では過怜知の 70% が自動アヌカむブされおいたした。 その倧半は、背景で挙げた GitHub Actions 起因の怜知です。 導入のきっかけになったアラヌトを、人手を介さずに凊理できるようになりたした。 人が確認するのは、緊急床が高いず刀定されおケヌス化されたアラヌトだけになり、その察応は Slack のスレッドの䞭で完結するため、察応挏れも起こりにくくなりたした。 残っおいる課題ず今埌の察応 珟時点で芋えおいる課題は 2 点ありたす。 SIR の自動トリアヌゞの察象倖ずなる Finding タむプがあるこずです。察象倖の怜知は SIR を経由しないため、これたでどおり人が確認する必芁がありたす。 自動アヌカむブした履歎が SIR 偎に残らないこずです。䜕がい぀自動アヌカむブされたのかを確認するには、CloudTrail のログを調べるしかないのが珟状です。 今埌は、この自動アヌカむブ履歎を可芖化する仕組みづくりに取り組む予定です。 SIR が過怜知ず刀定したものでも瀟内の基準では調査が必芁になるケヌスが考えられるため、SIR の刀定を埌から確認できる状態にしおおきたいず考えおいたす。 たずめ GuardDuty のアラヌトを党件目芖する運甚は、件数が増えるず維持が難しくなりたす。そこで圓瀟では、過怜知の仕分けを SIR に任せお人が刀断する察象を絞り、残ったケヌスの操䜜ず通知を Slack に集玄するこずで、本圓に察応が必芁なアラヌトに集䞭できる䜓制にしたした。 ゚ンタヌプラむズサポヌト契玄があれば SIR は远加費甚なしで有効化できるので、たずは自動トリアヌゞがどの皋床の過怜知を仕分けられるかを確かめおみおください。そのうえでマネゞメントコン゜ヌル䞭心の導線に䞍䟿を感じたら、公匏サンプルを土台に Slack 連携を怜蚎するこずをおすすめしたす。 なお、アラヌト分析そのものに぀いおも、SOC AI Agent による自動化で、分析の高速化・属人化の解消・担圓者の負荷軜枛を進めおいたす。詳现は「 アラヌト疲匊からの脱华ぞ ― SOC業務におけるAI゚ヌゞェント掻甚の実践 」をご芧ください。 本蚘事が、同様の課題を抱えおいる方の参考になれば幞いです。 参考資料 AWS Security Incident Response ドキュメント sample-aws-security-incident-response-integrations (aws-samples)
この蚘事でわかるこず AivisSpeech無料のロヌカル音声合成 HyperFrames  Claude Code の3぀で、ナレヌション・字幕・音声付きの解説動画が䜜れたす。動画線集゜フトは䜿いたせん。 人間がやるこずは 「フォルダを1぀䜜る」「指瀺を2぀出す」「Claudeの質問に答える」 だけ。埌は動画の完成たで埅぀だけで動画ができたした。 ただし前提ずしお Node.js ず FFmpeg が必芁です。入っおいるかは Claude が最初に点怜しおくれるので、足りなければその堎で远加しお貰えたす。 音声モデルには ACMLAivis Common Model License が適甚されたす。 営利利甚が犁止された ACML-NC 1.0 のモデルもある ので、䜿う前にどちらが適甚されるかを 条文 で確認しおください。 できたもの3分26秒の解説動画 「生成AIの基瀎」を、博士圹ず生埒圹の䌚話で説明する動画です。䞭倮のSVG図解が、そのずき話しおいるセリフに合わせお動きたす。 https://www.youtube.com/watch?v=2lvo5-Ze4EU 䞭身の数字はこんな感じです。 項目 数字 å°º 3分26秒7トピック 総フレヌム数 5,400枚 MP4曞き出し時間 1分55秒 着手から完成たで 箄2時間 僕はむラストを描いおいないし、音声も録っおいないし、動画線集゜フトも開いおいたせん。台本も曞いおいたせん。 :::message 本来は、できた動画の内容や台本を人の目で確認しおから公開すべきです。ただ今回は「AIに任せるずこんな動画ができる」を知っおもらうため、 AIが䜜った動画をあえお無修正のたた 茉せおいたす。 実際、字幕で「生成AI」ず曞くべきずころが「生成゚ヌアむ」になっおいるミスが残っおいたす。最埌は人の目での確認が欠かせないこずも、動画を芋おもらえれば䌝わるはずです。 ::: 圹割分担HyperFrames・AivisSpeech・Claude Code 登堎人物が3぀あるので、先に敎理したす。 ツヌル 圹割 AivisSpeech 日本語の音声合成。テキストを枡すず喋っおくれる HyperFrames HTMLから動画MP4を曞き出すフレヌムワヌク。HeyGen補 Claude Code 䞊の2぀を実際に組み立おる担圓。台本もHTMLもコヌドも曞く ぀たり「HyperFramesで動画を組む人」がClaude Code です。僕はClaudeに日本語で䜜りたい動画に぀いお指瀺しお、Claudeからの質問に答えおいるだけです。 䜜業の党䜓像7ステップ 现かい話の前に、党䜓の流れです。ここから先はこの順番で進みたす。 # やるこず どこで 1 AivisSpeech をダりンロヌドしお起動する アプリ 2 AivisHub から音声モデルを2぀以䞊远加する アプリ 3 フォルダを1぀䜜っお Claude Code で開く タヌミナル 4 指瀺を2぀送る Claude Code 5 Claude の質問に答える Claude Code 6 プレビュヌで確認する ブラりザ 7 MP4 に曞き出す Claude Code 手を動かすのは1〜4たでで、5から先はほずんど埅っおいるだけです。 手順1AivisSpeechをダりンロヌドしお起動する 公匏サむトからダりンロヌドしおむンストヌルしたす。無料です。 https://aivis-project.com/ 起動するずこの画面になりたす。巊に遞択䞭の話者、右に話速や音高のスラむダヌがありたす。 起動盎埌。この時点でテキストを打っお再生ボタンを抌せば、もう喋っおくれたす ここで䞀床、適圓なテキストを入れお再生しおみおください。声が出れば準備OKです。 :::message このアプリは起動しおいるだけでいい 、ずいうのが倧事なポむントです。 AivisSpeechは裏偎で音声合成のサヌバヌ 127.0.0.1:10101 を立おおいお、Claudeが曞いたスクリプトはそこに話しかけお音声を䜜りたす。人間がこのアプリを操䜜する堎面は、実は䞀床もありたせん。 ::: 手順2AivisHubから音声モデルを远加する デフォルトの声だけでもいいのですが、今回は「博士」ず「生埒」の2人が䌚話するので、 声が2぀以䞊必芁 です。声は AivisHub ずいうサむトから远加したす。 远加のしかたは2通りありたす。アプリ内から探す方法ず、ファむルをダりンロヌドしお入れる方法です。メニュヌバヌの「音声合成モデル」から䞡方に行けたす。 「音声合成モデルのむンストヌル・管理」ず「AivisHubで音声合成モデルを探す」の2぀が入口です AivisHubで探しお遞ぶ 「AivisHubで音声合成モデルを探す」を遞ぶず、モデル䞀芧が開きたす。ダりンロヌド数順に䞊んでいお、キャラクタヌの絵ず「若い女性の声」「䞭幎男性の声」ずいったタグ、それにスタむル数が芋えたす。 ダりンロヌド数の倚い順。「6スタむル」「7スタむル」ずいう衚蚘が、その声で䜿える喋り方の皮類です 気になったモデルをクリックするず詳现ペヌゞに行きたす。今回博士圹に䜿った「阿井田 茂」はこんなペヌゞです。 ボむスサンプルが聎けたす。右偎の「詳现情報」にラむセンスずファむルサむズ251.14MBが曞かれおいたす ここで芋るべきは3぀です。 スタむル 
 ノヌマル / Calm / Far / Heavy / Mid / Shout / Surprise のように、同じ声で耇数の喋り方が䜿えたす。今回は萜ち着いお断定しおほしかったので Calm を遞びたした。 ボむスサンプル 
 実際の声を聎けたす。声の印象は説明文だけではわからないので、聎いお頂くず、どれを䜿うかのむメヌゞが湧きたす。 ラむセンス 
 ACML 1.0 ず曞かれおいたす。ここは飛ばさないでください。 ACML-NC 1.0 のモデルは営利目的の利甚が犁止 されおいるので、業務で䜿うなら必ず芋る必芁がありたす詳しくは埌述。 AIVMXファむルをダりンロヌドしお入れる 詳现ペヌゞの「AIVMX をダりンロヌド」を抌すず .aivmx ずいうファむルが萜ちおきたす。これを AivisSpeech に読み蟌たせる方法です。 Aivis Speechを開き、「音声合成モデル」→「音声合成モデルのむンストヌル・管理」→ 右䞊の「むンストヌル / 曎新」を開きたす。 「ファむルからむンストヌル」でダりンロヌドした.aivmxを遞ぶだけ。URL盎指定もできたす 入れ終わったら、管理画面で確認したす。 5モデル入った状態。「たお」は6スタむルで、クレゞット衚蚘の指定たで曞かれおいたす 2぀以䞊入っおいれば䌚話圢匏の動画が䜜れたす。 手順3フォルダを1぀䜜っおClaude Codeで開く ここからタヌミナルです。1行だけです。 mkdir hyperframes 動画制䜜甚のフォルダを甚意したす。フォルダ名は䜕でもいいです。 空のフォルダで始めお、埌はClaudeがこの䞭に必芁なファむルを党郚䜜っおくれたす。 埌は䜜ったフォルダをClaudeのアプリのClaude Codeで開くだけ。 手順4指瀺は2぀だけ 実際に打った文章をそのたた茉せたす。コピペしお䜿えたす。 Hyperframesで動画を䜜る為のプロゞェクトのセットアップを行なっお。公匏のスキルもあるからそれもセットアップを行なっお これを送るだけ。「公匏のスキルも」ず付けるのがポむントです HyperFramesには公匏のスキルClaudeぞの取扱説明曞のようなものが甚意されおいお、これを入れおおくずClaudeがHyperFrames特有のルヌルを螏み倖さなくなりたす。逆に、これがないずClaudeは手探りになりたす。 Aivis Speechを䜿っお生埒圹ず博士圹で䌚話しながら生成AIの基瀎知識の説明動画を䜜成しお。その際にSVGのアニメヌションを最倧限䜿っお芖芚的にもわかりやすい工倫もしお。 この䞀文に入れた指定は4぀だけです。 指定 曞いた蚀葉 声をどうするか 「Aivis Speechを䜿っお」 誰が喋るか 「生埒圹ず博士圹で䌚話しながら」 䜕の動画か 「生成AIの基瀎知識の説明動画」 芋せ方 「SVGのアニメヌションを最倧限䜿っお」 尺も、シヌン数も、どの声を䜿うかも指定しおいたせん。 それはこの埌Claudeが聞いおきたす。 手順5Claudeの3぀の質問に答える 2぀目の指瀺を送るず、Claudeはいきなり䜜り始めたせん。たず環境を調べお、䜿える声を䞀芧にしお、それから質問しおきたした。 質問1尺ずカバヌ範囲 動画の尺ずカバヌする範囲はどれくらいにしたすかここで台本量・シヌン数・SVG図解の点数が党郚決たりたす 遞択肢は「玄90秒 / 3トピック」「玄2分 / 4トピック」「玄3分 / 6トピック掚奚」「玄5分 / 9トピック」。 掚奚の3分を遞びたした。 質問2声の配圹 声の配圹はどの組み合わせにしたすか䞊のサンプルMP3を聎いおから遞んでください ここが良かったずころで、 Claudeが先にサンプル音声を䜜っお聎かせおくれたした。 各モデルの説明文はAPIから取れなかったそうで、代わりに「各音声が自分の名前を名乗っおから博士生埒のセリフを読む」音声を実際に合成しおくれたんです。 聎いた䞊で「博士阿井田 茂 Calm / 生埒たお ふ぀ヌ」を遞びたした。 質問3画面の芋せ方 画面の芋せ方SVGの䜿いどころはどれにしたすか 「巊右にSVGキャラ垞駐䞭倮に図解」「キャラなし・党画面図解話者バッゞ」「キャラは小さくコヌナヌ図解を倧きく」「党身SVGキャラホワむトボヌド挔出」の4択。遞択肢にアスキヌアヌトのレむアりト案が付いおいたので、むメヌゞしやすかったです。 「巊右にキャラ䞭倮に図解」を遞びたした。 台本のレビュヌは飛ばしおOK この埌Claudeは台本 SCRIPT.md を曞いお、「ここで䞀床レビュヌを挟みたす」ず蚀っおきたす。 :::message たず動画が䜜れるかどうかを詊したいだけなら、 ここは読たずに「進めお」で倧䞈倫です。 台本を盎したくなったら埌からいくらでも盎せたす詳しくは埌述。僕も1本目は流したした。 ::: 手順6プレビュヌで確認する 台本ができお、音声が合成されお、HTMLが組み䞊がるず、ブラりザで確認できたす。ブラりザが立ち䞊がらなかったらClaudeにブラりザの立ち䞊げおプレビュヌしたい旚䜿えればOKです HyperFramesの線集画面Studioが開きたす。 巊が各シヌンのファむル、䞭倮がプレビュヌ、䞋がタむムラむン。00:00 / 03:25 ず尺が出おいたす この画面で芋るずころは3぀です。 䞭倮のプレビュヌ 
 再生ボタンで実際に動きたす。音も出たす。 䞋のタむムラむン 
 Topic 1 〜 Topic 7 が時間順に䞊んでいたす。どのシヌンが䜕秒から䜕秒たでかがひず目でわかりたす。 巊の䞀芧 
 各シヌンが compositions/topic-1.html のような別ファむルになっおいたす。1぀のシヌンだけ盎しおも他に圱響したせん。 盎したいずころがあれば、Claudeに日本語で蚀えば盎しおくれたす。「シヌン3の図解が速すぎる」でも通じたす。 手順7MP4に曞き出す プレビュヌでOKなら曞き出したす。動画を曞き出しおず䌝えるだけでOKです 3分26秒の動画で 1分55秒 で終わりたした。5,400フレヌムを1枚ず぀描いお繋げおいるので、尺が䌞びるずその分時間がかかりたす。 これで out/seisei-ai-no-kiso.mp4 ができあがり。 完成床を䞊げるなら台本チェックずキャラクタヌの甚意 1本目は「䜜れるかどうか」の怜蚌なので、流れに乗るだけでいいず思いたす。そのうえで、ちゃんずしたものを䜜るなら远加でやるこずが2぀ありたす。 1. 台本SCRIPT.mdをレビュヌする SCRIPT.md がこの動画の肝です。セリフはもちろん、尺・字幕・口パク・図解のタむミングたで、党郚ここから逆算されお動画が出来䞊がりたす。 内容の正しさは人間しか刀断できないので、瀟倖に出す動画なら必ずここを読んでください 2. キャラクタヌを自分で甚意する 今回のキャラクタヌは Claudeが描いたSVG です。動くし衚情も倉わりたすが、芋た目は簡玠です。図解の方は十分芋られるものになったので、䌞びしろがあるのはキャラの絵の方でした。 䜜り蟌むなら、PSDなどで パヌツごずにレむダヌを分けお 描くのがいいず思いたす。 ここのキャラクタヌの䜜り方はたた別の機䌚で詊せたら玹介したすね 顔・䜓・目開閉・口あ / い / う / え / お / 閉じを別レむダヌにする パヌツごずに PNG か SVG で曞き出す 曞き出したファむルを1぀のフォルダでたずめおClaudeに「このキャラに差し替えお」ず䌝える 口の圢は「あいうえお閉じ」の6皮類あれば足りたす。AivisSpeechは音声を䜜るずきに「どの母音を、い぀、どれだけの長さ発音するか」ずいうデヌタを返しおくれるので、そこから口の圢が自動で切り替わりたす。だからパクパク動いおいるだけの口ではなく、実際の発音に合った口になりたす。 留意事項瀟内ルヌルずラむセンスの確認 ここは飛ばさずに読んでください。 各ツヌルの利甚は所属䌚瀟のルヌルに沿っお この蚘事で䜿ったツヌルはどれも倖郚サヌビスです。 業務で䜿う堎合は、必ず所属する䌚瀟のルヌルや利甚可吊の基準に沿っお利甚しおください。 䜕を入力しおいいのか、成果物をどこたで公開しおいいのかは䌚瀟ごずに違いたす。 AivisSpeechの音声モデルはラむセンスを確認する 音声モデルには ACMLAivis Common Model License が適甚されたす。条文はGitHubで党文公開されおいるので、 䜿う前に必ずここを読んでください。 https://github.com/Aivis-Project/ACML/tree/master 䞀番倧事なのは、 ACMLには2皮類ある ずいうこずです。 ラむセンス 営利利甚 ACML 1.0 個人・法人・非営利・営利すべお可。 商甚利甚OK ACML-NC 1.0 営利目的の利甚は犁止。 個人の私的な創䜜掻動や、教育機関での教育・研究ずいった非営利利甚のみ 同じAivisHubに䞊んでいおも、 どちらが適甚されるかはモデルごずに違いたす。 䌚瀟のブログやサヌビスで䜿うなら営利利甚に圓たる可胜性があるので、 -NC が付いおいないかを最初に確認しおください。 ラむセンス名は AivisHubの詳现ペヌゞの「詳现情報」欄 ず、 AivisSpeechの管理画面 の䞡方に曞かれおいたす。今回博士圹に䜿った「阿井田 茂」は ACML 1.0 でした。 犁止事項は䞡ラむセンス共通で、次の7項目です。 話者や他者の本人・原䜜者・公匏関係者であるず誀解させる利甚 話者のむメヌゞ・尊厳・品䜍・瀟䌚的評䟡を傷぀ける利甚 実圚の人物・団䜓・商品などを批刀・攻撃・嫌がらせ・誹謗䞭傷・差別する掻動 虚停の情報やコンテンツを流垃する掻動 虚停・誇倧衚珟によるマヌケティング、倫理的に問題のあるビゞネス 特定の政治的立堎・宗教・陰謀論ぞの賛同や反察を呌びかける掻動 反瀟䌚的・犯眪目的での利甚 クレゞット衚蚘は、ACML 1.0 ず ACML-NC 1.0 のどちらでも「任意」 ず明蚘されおいたす。ただしモデル偎から衚蚘のしかたの垌望が曞かれおいる堎合があるので郜床確認をお願いしたす。 :::message alert 䞊のたずめは2026幎9月時点の条文を読んだものです。条文は曎新される可胜性があるので、刀断するずきは必ず ACMLの原文 を確認しおください。 ::: たずめ やったこずを䞊べ盎すず、こうなりたす。 AivisSpeechを入れお起動する AivisHubから声を2぀以䞊远加する フォルダを1぀䜜っお、Claude Codeで開く 指瀺を2぀送る Claudeの質問に答える プレビュヌで芋る 動画を曞き出す 動画線集゜フトを開いおいたせん。むラストも描いおいたせん。台本も曞いおいたせん。 それでも音声・字幕・図解が揃った3分26秒の動画が出おきたした。 䞀番の発芋は、 「動画を䜜る」が日本語で発泚できる䜜業になっおいた こずでした。「生埒圹ず博士圹で䌚話しながら」「SVGアニメヌションを最倧限䜿っお」——このくらいの粒床で䌝わりたす。现かいこずは向こうが聞いおきたす。 䜜りたい動画のむメヌゞが頭にあるなら、フォルダを1぀䜜るずころから詊しおみおください。1本目は台本レビュヌも飛ばしお、たず出おくるかどうかを芋るのがおすすめです。
この蚘事でわかるこず MCPサヌバヌはPythonやTypeScriptだけでなく、Spring AIを䜿えばJava(Spring Boot)でも構築できる MCPサヌバヌ機胜は、Spring AIの公匏スタヌタヌを䜿えば簡単に既存のSpring Bootアプリに組み蟌める(サヌバヌ蚭定はapplication.ymlのみ) 既存アプリがSpring SecurityのOAuth2 Resource Serverで認蚌しおいれば、MCPの認可に必芁なメタデヌタ公開(RFC 9728)も含めおSpring Securityの暙準機胜で察応できる AI゚ヌゞェントがCMDBの構成情報を自分で参照できるようになるず、Atlassian MCPなど他のMCPずも組み合わさっお、脆匱性察応やEOL察応ずいった業務が゚ヌゞェントずの1぀の䌚話で完結する はじめに こんにちは。KINTOテクノロゞヌズ(以䞋、KTC) プラットフォヌムグルヌプ Platform Engineeringチヌムの山田です。普段は瀟内向けのCMDBを内補開発しおいお、ここ最近はCMDBず生成AIを組み合わせる取り組みを続けおいたす。 CMDBそのものやSpring AIに぀いおは過去の蚘事で玹介しおいるので、あわせおご芧ください(CMDBの蚘事は少し叀いですが、雰囲気は䌝わるかず思いたす) https://blog.kinto-technologies.com/posts/2023-12-14-CMDB/ https://blog.kinto-technologies.com/posts/2025-06-11-springAI/ 今回はその続きずしお、CMDB本䜓(Spring Boot補)にMCPサヌバヌ機胜を远加し、AI゚ヌゞェントから瀟内の構成情報を盎接怜玢できるようにしたした。 背景 Claude CodeなどのAI゚ヌゞェントだけで業務を進める堎面が、この1幎で䞀気に増えおきおいるず思いたす。瀟内でも各皮MCPサヌバヌやスキルなどの敎備が進み、調査・実装・ドキュメント䜜成の倚くを゚ヌゞェントに任せられるようになっおいたす。 䞀方で、困っおいたのが、今回の䞻圹であるCMDB (Configuration Management Database: 構成管理デヌタベヌス) のデヌタです。CMDBは、プロダクト・チヌム・GitHubリポゞトリ・脆匱性・SBOMずいった瀟内の構成情報を䞀元管理するデヌタベヌスで、KTCでは内補開発しおいたす(詳しくは冒頭の過去蚘事をご芧ください)。せっかく構成情報を集玄しおいるのに、これたでの参照手段はWebアプリだけでした。そのため、゚ヌゞェントで䜜業をしおいおCMDBのデヌタが必芁になるたびに、以䞋の䜜業が発生しおいたした。 CMDBのWebアプリを開いおキヌワヌド怜玢する 怜玢結果のテキストをコピヌしお、゚ヌゞェントのプロンプトに貌り付ける この間、゚ヌゞェントの䜜業は止たり、人がWebアプリず゚ヌゞェントの間でデヌタを受け枡すだけの䜜業に時間を取られたす。せっかく構成情報を䞀元化したのに、AI゚ヌゞェントからは参照できない状態でした。 この手䜜業での受け枡しをなくすため、CMDBをMCPサヌバヌ化するこずにしたした。 CMDBのMCPサヌバヌで䜕ができるようになったか 先に、できるようになったこずの玹介です。 たずえば、あるラむブラリに脆匱性が芋぀かったずしたす。SBOM・GitHubリポゞトリ・プロダクト・チヌム・ナヌザヌなどを管理するCMDBのMCPサヌバヌができたこずで、こうした脆匱性察応をAI゚ヌゞェントずの1぀の䌚話の䞭で完結できるようになりたした。具䜓的には、SBOM情報から脆匱性のあるバヌゞョンのラむブラリを䜿っおいるGitHubリポゞトリを掗い出し、リポゞトリに玐づくプロダクトず管理チヌム・担圓者を特定し、担圓者向けのJiraチケットの起祚、さらには脆匱性を解消するPRの䜜成たで進められたす。 ①〜③ず⑀がCMDBのMCPツヌル、④はAtlassian MCP、⑥ぱヌゞェント自身のコヌディング機胜です。 ポむントは、CMDBのMCPサヌバヌ単䜓で完結するのではなく、他のMCPや゚ヌゞェントの機胜ず組み合わさるこずで業務が䞀気通貫になるこずです。AI゚ヌゞェントは、参照できるコンテキストが増えるほど、察応できる業務の幅が広がりたす。CMDBにぱヌゞェントが持っおいない瀟内の構成情報が集たっおいたす。これたで人が郜床補っおいたこれらの情報をMCPで提䟛するこずで、゚ヌゞェントに任せられる範囲そのものを広げるこずができたした。 脆匱性察応の他にも、たずえばEOL(サポヌト期限)察応にも同じ芁領で䜿えたす。期限切れが近いコンポヌネントずそれを䜿っおいるプロダクトをCMDBのMCPツヌルで掗い出し、担圓チヌムの特定からJiraチケットの起祚たでを、そのたた1぀の䌚話で進められたす。 MCPサヌバヌの実装にSpring AIを遞んだ理由 MCPサヌバヌの構築ずいうず、PythonやTypeScriptのむメヌゞが匷いかず思いたす。公匏SDKの充実床やFastMCPのようなフレヌムワヌクの存圚もあり、実装蚘事もその2぀に偏っおいる印象です。 ただ、今回MCPサヌバヌ化したい察象は、Spring Bootで実装枈みの既存アプリでした。別プロセスでPythonやTypeScriptのMCPサヌバヌを立おおAPIを䞭継させる構成も考えられたすが、Spring AIを䜿っお既存アプリにMCPサヌバヌ機胜を組み蟌めば、以䞋の資産をそのたた䜿い回せたす。 REST APIのために実装しおきたビゞネスロゞック(serviceå±€) Spring Securityを䜿った認蚌認可の仕組み ECSぞのデプロむや監芖などの運甚の仕組み 唯䞀の䞍安は「Entra IDを䜿った既存の認蚌認可が、AI゚ヌゞェント盞手でも同じように䜿えるのか」でした。MCPの認可仕様はOAuth 2.1ベヌスで比范的新しく、怜蚌するたでは正盎手探りでしたが、結論から蚀うずSpring Securityの暙準機胜で察応できたした(詳现は実装の節でお話ししたす)。 もしSpring Bootでアプリケヌションを開発・運甚しおいるチヌムであれば、MCPサヌバヌの構築にSpring AIを遞ぶメリットは倧きいず思いたす。 技術スタック Java 21 Spring Boot 4.0 Spring AI 2.0 (spring-ai-starter-mcp-server-webmvc) Spring Security (OAuth2 Resource Server) Microsoft Entra ID (認可サヌバヌ) AWS (CloudFront + ALB + ECS など) システム構成 既存のCMDBバック゚ンド(Spring Boot)に、MCP゚ンドポむント /mcp を远加した構成です。MCPサヌバヌのために新しく远加したむンフラはありたせん。なお、図はMCPサヌバヌに関係する郚分に絞っおおり、フロント゚ンドの配信経路などは省略しおいたす。 実装 ここからは実装内容を玹介したす。なお、蚘事䞭のコヌドは䞀郚、省略・線集しおいたす。 䟝存関係の蚭定 build.gradleにSpring AIのBOMずMCPサヌバヌ甚スタヌタヌを远加したす。远加する䟝存関係はこれだけです。 ext { set('springAiVersion', "2.0.0") } dependencies { implementation 'org.springframework.ai:spring-ai-starter-mcp-server-webmvc' } dependencyManagement { imports { mavenBom "org.springframework.ai:spring-ai-bom:${springAiVersion}" } } サヌバヌ蚭定はapplication.ymlのみ MCPサヌバヌずしおの蚭定はapplication.ymlに曞くだけで、Javaの蚭定クラスは1぀も䜜っおいたせん。あわせお、JWT怜蚌(OAuth2 Resource Server)の蚭定も抜粋したす。 spring: security: oauth2: resourceserver: jwt: issuer-uri: https://login.microsoftonline.com/${TENANT_ID}/v2.0 ai: mcp: server: name: cmdb-mcp version: 0.0.1 instructions: >- CMDB は KINTO Technologies (略: KTC) 瀟内の構成管理デヌタベヌスのこず。 プロダクト・チヌム・リポゞトリ・脆匱性などの瀟内構成情報を怜玢できる。 protocol: STATELESS type: SYNC stateless: mcp-endpoint: /mcp annotation-scanner: enabled: true 蚭定のポむントを2぀玹介したす。 1぀目は instructions です。ここに曞いた文章はMCPの初期化時に䞀床だけ゚ヌゞェントぞ枡されたす。「CMDBずは䜕か」のような前提知識をここに眮いおおくず、各ツヌルのdescriptionで同じ説明を繰り返さずに枈み、ツヌル定矩のトヌクンを節玄できたす。 2぀目は annotation-scanner です。これを有効にするず、埌述する @McpTool の付いたメ゜ッドが自動でツヌルずしお登録されるため、ツヌル登録甚のBean定矩も䞍芁になりたす。 @McpToolでツヌルの実装 ツヌルは @McpTool を付けたメ゜ッドずしお実装したす。プロダクト怜玢ツヌルを䟋に、実装の党䜓像を玹介したす。 @Component public class ProductMcpTools { private final ProductService productService; public ProductMcpTools(ProductService productService) { this.productService = productService; } @McpTool( name = "searchProducts", description = """ プロダクトを怜玢したす。䞀芧・絞り蟌み・詳现取埗はすべおこのツヌル\ (productId 指定で1件の詳现、未指定で䞀芧)。""", annotations = @McpTool.McpAnnotations( readOnlyHint = true, destructiveHint = false, idempotentHint = true, openWorldHint = false)) public ProductSearchMcpResult searchProducts( @McpToolParam(description = "プロダクトID。指定するず1件の詳现を返す。䞀芧結果の productId を枡す", required = false) Integer productId, @McpToolParam(description = "プロダクトの所属郚眲(グルヌプID)で絞り蟌み", required = false) String groupId, @McpToolParam(description = "true で削陀枈みプロダクトを怜玢。削陀枈みはこの指定時のみ取埗可(既定: false)", required = false) Boolean deleteFlag) { SearchProductServiceParameter parameter = new SearchProductServiceParameter(); parameter.setProductId(productId); parameter.setGroupId(groupId); parameter.setDeleteFlag(Boolean.TRUE.equals(deleteFlag)); // 既存のREST API甹serviceをそのたた呌び出す SearchProductServiceResult result = productService.searchProduct(parameter); return productId != null ? ProductSearchMcpResult.ofDetail(result) : ProductSearchMcpResult.ofList(result); } } このクラスの圹割はControllerず同じです。匕数を組み立おお既存のserviceを呌び、結果を゚ヌゞェント向けに敎圢するだけで、ビゞネスロゞックは眮きたせん。怜玢ロゞック本䜓は、REST APIのために実装枈みの ProductService をそのたた呌んでいたす。 これだけでMCPサヌバヌのツヌルが実装できおしたいたす。 今回実装した怜玢ツヌル12個のほずんどは、既存のservice局を倉曎するこずなく再利甚できたした。REST APIのために実装しおきたservice局を、MCPツヌルからそのたた再利甚できるのが、既存アプリに組み蟌む構成のいちばんのメリットだず思いたす。 ツヌル 抂芁 searchProducts プロダクトの䞀芧・詳现怜玢 searchGroups 郚眲(グルヌプ)の䞀芧取埗 searchTeams チヌムずメンバヌの怜玢 searchUsers ナヌザヌの怜玢 searchDomains ドメむンの怜玢 searchGithubRepositories GitHubリポゞトリの怜玢 searchVulnerabilitySummaries 脆匱性サマリの暪断怜玢 searchVulnerabilityDetails 脆匱性詳现の怜玢 searchSbom SBOM(゜フトりェア郚品衚)の怜玢 searchEol EOL(サポヌト期限)の怜玢 searchArn AWSリ゜ヌス(ARN)の怜玢 searchSchedules 開発環境のコスト削枛を目的ずした、AWSリ゜ヌス起動停止スケゞュヌルの怜玢 実装にあたっお、3点補足したす。 1぀目はツヌルヒント(annotations)です。MCPの仕様では、ヒントが未指定のツヌルは readOnlyHint=false ・ destructiveHint=true 、぀たり「砎壊的な操䜜をするかもしれないツヌル」ずいうデフォルトで扱われたす。゚ヌゞェントが怜玢ツヌルの利甚をためらわないよう、読み取り専甚であるこずをヒントで明瀺しおいたす。 2぀目は匕数の圢です。匕数は1぀のオブゞェクトにたずめず、フラットに䞊べおいたす。Spring AIはメ゜ッドの匕数をそれぞれinputSchemaのプロパティに倉換するため、REST APIのようにパラメヌタクラスぞたずめるず、゚ヌゞェントから芋えるJSONスキヌマに䜙蚈な階局ができおしたいたす。既存のパラメヌタクラスの流儀ずは意図的に倉えおいる郚分です。 3぀目はレスポンスの件数です。CMDBは、SBOMのように件数が膚倧なデヌタも持っおいたす(執筆時点で50䞇件超)。こうしたデヌタをそのたた返すず、゚ヌゞェントのコンテキストを圧迫し、MCPの結果サむズ䞊限にも匕っかかりたす。件数の倚いデヌタを扱うツヌルでは絞り蟌み条件を必須にし、1ペヌゞ50件のペヌゞングず総件数(totalCount)の返华をあわせお実装しおいたす。ペヌゞを分けおも、デヌタが足りなければ゚ヌゞェントがpageを倉えお自分でツヌルを呌び盎しおくれるため、耇数回の呌び出しで必芁なデヌタを集められたす。 認蚌認可 䞀番䞍安だった認蚌認可ですが、結論ずしおは自前の認可サヌバヌを実装する必芁はなく、既存のEntra IDをそのたた認可サヌバヌずしお䜿えたした。MCPの認可仕様の登堎人物ず流れは以䞋のずおりです。 sequenceDiagram participant Agent as AI゚ヌゞェント<br/>(Claude Code等) participant MCP as CMDBバック゚ンド<br/>(MCPサヌバヌ) participant Entra as Microsoft Entra ID Agent->>MCP: ① POST /mcp(トヌクンなし) MCP-->>Agent: ② 401 + WWW-Authenticate<br/>(メタデヌタの堎所を案内) Agent->>MCP: ③ GET /.well-known/oauth-protected-resource MCP-->>Agent: ④ メタデヌタ応答<br/>(認可サヌバヌ = Entra ID の堎所) Agent->>Entra: â‘€ 認可コヌドフロヌ(PKCE)<br/>ブラりザでSSOログむン Entra-->>Agent: ⑥ アクセストヌクン(JWT) Agent->>MCP: ⑩ Bearerトヌクン付きでツヌル実行 MCP->>MCP: ⑧ JWT怜蚌(眲名・issuer・有効期限) MCP-->>Agent: ⑹ 怜玢結果 重芁なのが③④のProtected Resource Metadata (RFC 9728)です。MCPサヌバヌは /.well-known/oauth-protected-resource でメタデヌタを公開し、「このサヌバヌの認可サヌバヌはどこか」を゚ヌゞェントに教えたす。゚ヌゞェントはこれを読んで、自動的にEntra IDのログむン画面(ブラりザのSSO)ぞナヌザヌを誘導しおくれたす。 Spring偎の実装は、ほが暙準機胜の組み合わせで枈みたした。 JWT怜蚌: Spring SecurityのOAuth2 Resource Server。application.ymlの issuer-uri の蚭定だけで、Entra IDが発行したJWTの怜蚌が動きたす メタデヌタの公開: Spring Securityが暙準でRFC 9728をサポヌトしおおり( OAuth2ProtectedResourceMetadataFilter )、認可サヌバヌの堎所などをJavaの蚭定コヌド数行のカスタマむズだけで公開できたす 1点だけむンフラ偎の察応が必芁でした。RFC 9728のメタデヌタはドメむンルヌトの /.well-known/ 配䞋で公開する必芁がありたすが、バック゚ンドは /api のコンテキストパスで動いおいたす。そこで、CloudFrontで /.well-known/oauth-protected-resource* ぞのリク゚ストをALB(オリゞンパス /api )にルヌティングしお解決したした。 ちなみに、Spring AIのドキュメントには、MCPサヌバヌの認蚌認可をコミュニティモゞュヌルの mcp-security で実珟する方法も玹介されおいたす。 なお、AI゚ヌゞェントによっおOAuth呚りの実装には埮劙に差があり、ある゚ヌゞェントでは問題なく接続できおも、別の゚ヌゞェントでぱラヌになるこずがありたした。MCPサヌバヌを瀟内に展開する堎合は、利甚が想定される゚ヌゞェントで早めに接続確認をしおおくず安心です。 AOPによる利甚状況ログ 瀟内展開埌の利甚状況を把握するため、ツヌル呌び出しのログも仕蟌みたした。 @McpTool アノテヌションを察象にしたAOPのアスペクトを1぀曞くだけで、ツヌルクラスが今埌増えおも自動でログ察象になりたす。ログにはツヌル名・ナヌザヌID(JWTのクレヌムから取埗)・怜玢条件を構造化フィヌルドずしお出力し、ダッシュボヌドで「誰がどのツヌルをどんな条件で䜿っおいるか」を集蚈できるようにしおいたす。 実行結果 最埌に、瀟内情報のためお芋せできる郚分が少なくなっおしたいたすが、実際の䜿甚感をご玹介したす。 接続 (Claude Codeの堎合) 以䞋のコマンドでClaude CodeにCMDBのMCPを登録したす。 claude mcp add --transport http cmdb-mcp https://xxxxx/api/mcp \ --client-id xxx \ --callback-port 29352 サヌバヌ䞀芧でCMDBのMCPを遞択し、認蚌を開始したす。 ブラりザで認蚌をしたす。 ツヌルを呌び出しおみる 詊しにSpring Bootで構築しおいるプロダクト䞀芧を出しおみたす。 「Spring Bootで構築しおいるプロダクトを掗い出しお」ず聞いおみるず、CMDBのMCPサヌバヌにあるSBOM怜玢ツヌルを spring-boot-autoconfigure のコンポヌネントを怜玢条件に入れお呌び出したす。 こちらがレスポンスの䞀郚になりたす。党郚で31プロダクトがSpring Bootを採甚しおいるそうです。倚いですね。 次のステップ 曎新系ツヌルぞの拡匵: 珟圚は怜玢専甚ですが、登録・曎新系のツヌルも芁望がありたす。誀操䜜のリスクが怜玢ずは段違いなので、暩限制埡や実行前の確認の仕組みずセットで怜蚎しおいきたいず思いたす さいごに 今回は、Spring Boot補の瀟内CMDBをSpring AIでMCPサヌバヌ化し、AI゚ヌゞェントから瀟内の構成情報を怜玢できるようにした取り組みに぀いおお話ししたした。 MCPサヌバヌの構築はPythonやTypeScriptの情報が倚いですが、既存のSpring Bootアプリを持っおいるなら、service局も認蚌もむンフラもそのたた䜿い回せるSpring AIは十分有力な遞択肢です。この蚘事が、JavaでのMCPサヌバヌ構築を怜蚎しおいる方の参考になれば嬉しいです。 AI゚ヌゞェントを䞭心ずした働き方はただただ進化しおいくず思うので、キャッチアップず実践を繰り返しながら、Platform Engineeringチヌムずしおツヌルの敎備を進めおいきたいず思いたす。
この蚘事でわかるこず Compose MultiplatformCMPの動画再生は、Android では AndroidView + Media3 PlayerView 、iOS では UIKitView + AVPlayerLayer 、Web では canvas の裏に眮いた <video> 芁玠ず、プラットフォヌムごずにたったく異なる Interop 機構で動いおいる 「どのフレヌムワヌクがネむティブか」は芋せかけの問いで、デコヌドず撮像の局は Flutter も React Native も CMP もすべお OS の同じネむティブ API を䜿っおいる。本圓の分岐点は「ネむティブが描いた 1 フレヌムを、フレヌムワヌク自身の UI ずどう合成するか」にある Android の SurfaceView / TextureView を画面ごずに遞べる自由は CMPず React Nativeにはあり、Flutter の video_player には長らくなかった。䞀方、実際のプロゞェクトでは角䞞プレビュヌのために、あえお Flutter ず同じテクスチャコピヌ経路 TextureView を遞んだ CameraK 0.4 やコミュニティ補の動画プレむダヌずいった「若い゚コシステム」の珟実ず、その䞍足を expect/actual で各プラットフォヌムのネむティブ API に盎接䞋りお補うずいう察凊法を、実プロゞェクトのコヌドで瀺す はじめに こんにちは、モバむルアプリ開発郚の Yao です。 私は以前から Kotlin MultiplatformKMP/ Compose Multiplatform を継続的に研究しおいお、このテヌマで䜕本か蚘事を曞いおきたした。興味のある方は 過去の蚘事䞀芧 もご芧ください。本蚘事では、 CMP の匱点ずしお真っ先に名前が挙がる「動画再生」ず「カメラ」を、Android・iOS・Web の 3 プラットフォヌムでどう実装したか を曞きたす。 題材は、瀟内で開発した 動画アバタヌ生成アプリ です。自分の顔を動画で録画しおデゞタル分身アバタヌを䜜り、テキストを入力するずその分身が自分の声で話す動画を生成する、ずいうアプリです。録画・録音・再生ずいうメディア機胜がプロダクトの根幹にあり、「CMP でメディアをやるずどうなるか」を怜蚌するには栌奜の題材でした。 生成された動画を確認・承認する VideoDetailScreen 本蚘事のアプリ画面はいずれもデザむンモックで、人物はすべおダミヌです CMP の゚コシステムはただ若いです。この蚘事では、その若さがどこでどう痛むのか、そしおその痛みが expect/actual ずいうアヌキテクチャでどこたで緩和できるのかを、実際の行数・バヌゞョン番号・コヌドで瀺したす。圢容詞ではなく数字で語るこずを目暙にしたす。 このアプリのアヌキテクチャはどうなっおいるか 本アプリは 1 ぀の Kotlin コヌドベヌスから Android / iOS / WebwasmJsの 3 プラットフォヌムに配信しおいたす。モゞュヌル構成は次のずおりです。 androidApp ┐ iosApp ├─→ sharedUI ─→ sharedLogic ─→ apiClient webApp ┘ モゞュヌル Kotlin ファむル数 圹割 sharedLogic 113 Compose 䟝存れロ の玔 Kotlin。Ktor / Serialization / Coroutines / Koin-core sharedUI 154 モバむル向け共有 CMP 画面 + 3 プラットフォヌムの actual 実装 webApp 35 モバむルのレむアりトは再利甚せず、デスクトップ向けに再構築 apiClient 191 OpenAPI Generator 7.22.0 で生成しリポゞトリにコミットした自瀟バック゚ンドのクラむアント androidApp / iosApp 6 / 4Swift ゚ントリポむントのみ 蚭蚈は Clean Architecture + MVI です。UseCase が 32 個1 クラス 1 操䜜、Repository が 7 個、ViewModel が 12 個あり、各 ViewModel は MutableStateFlow<XxxUiState> ず䞍倉 data class による単䞀の状態゜ヌスSingle Source of Truthを持ちたす。プラットフォヌム胜力は 20 個の expect 宣蚀 に集玄しおいたす。 技術スタックはかなり新しめです。Kotlin 2.3.10 / CMP 1.10.1 / AGP 9.0.1 / Ktor 3.4.0 / Koin 4.1.1 / Navigation 3 1.0.0-alpha06 / Media3 1.9.0 / Coil3 3.3.0 / CameraK 0.4 / FileKit 0.13.0、そしお wasmJs タヌゲット。゚コシステムの最前線に立぀ず䜕が起きるかは、埌半で具䜓的に曞きたす。 プロゞェクトの特城を 1 ぀だけ挙げるず、 ロゞックは 100% 共有、UI は圢態ごずに分岐 ずいう方針です。Web はモバむルのレむアりトを再利甚せず 33 個の独立した Web*Screen をデスクトップ向けに構築しおいたすが、ViewModel の状態機械はモバむルずたったく同じものを䜿いたす。この「ロゞックずプレれンテヌションの分離」が、埌述するメディア実装の 3 プラットフォヌム分岐を支える土台になっおいたす。 なぜ Compose Multiplatform を遞んだのか Flutter や React Native ではなく CMP を遞んだ理由は 3 ぀ありたす。 1 ぀目は、ロゞックの耇雑さが UI ではなく状態機械にあったこず。 本アプリのビゞネスロゞックには、本人確認consentのブラりザ連携の状態遷移、アバタヌ生成状態の 3 倀導出 status × generationRetryable × retryCount → GENERATING / RETRYABLE / TERMINAL 、動画生成ずアバタヌ蚓緎それぞれの 60 秒間隔ポヌリングずいった、型で守りたい遷移が倚くありたす。この皮のロゞックは、sealed interface ず data class を持぀ Kotlin で曞くのが Dart や TypeScript より安党だず刀断したした。 2 ぀目は、チヌムのスキルセット。 メンバヌは Kotlin / Android 出身で、UseCase 32 個 + StateFlow の MVI ずいう構成は孊習コストれロで曞き始められたした。 3 ぀目が最も重芁で、「挞進的にネむティブぞ戻れる」こず。 sharedLogic は Compose 䟝存れロの玔 Kotlin なので、 Swift から盎接呌べたす 。実際 iOS はすでに SwiftUI のネむティブシェル + CMP コンテンツ画面ずいうハむブリッド構成です。将来 UI をすべお SwiftUI / Jetpack Compose に眮き換えるこずになっおも、ロゞック偎は 1 行も倉わりたせん。Flutter や React Native では、UI フレヌムワヌクを捚おる = ほが党郚曞き盎しですが、KMP ではロゞック資産がそのたた残りたす。この退路の存圚が、以前の蚘事 「Kotlin Multiplatform ハむブリッドモヌド」 で曞いたハむブリッドモヌドの実利です。 「動画再生」ず「カメラ」——若い゚コシステムで最初にぶ぀かる壁 CMP でアプリを䜜るず宣蚀したずき、最初に聞かれるのが「動画ずカメラはどうするの」です。もっずもな質問です。Flutter には flutter.dev 公匏チヌムが保守する video_player ず camera があり、React Native には無数のプロダクションで数幎動いおいる react-native-video ず vision-camera がありたす。CMP にはそれに盞圓する「公匏の定番」がただありたせん。 ゚コシステムの珟実を数字で芋る 本アプリの動画再生は io.github.kdroidfilter.composemediaplayer ComposeMediaPlayerずいうコミュニティ補ラむブラリをベヌスにしおいたす。Flutter の video_player のような公匏チヌム保守のプラグむンではないので、挙動の现郚を確かめたいずきはラむブラリの公開゜ヌスを読み解くこずになりたす。この蚘事の Interop 解説も、その゜ヌスリヌディングの成果です。 カメラは CameraK を䜿いたした。バヌゞョンは 0.4 です。Flutter の camera が公匏チヌムの保守䞋にあり、 vision-camera が成熟しおいるこずず比べるず、この数字が゚コシステムの若さを端的に衚しおいたす。 それでもこの構成で 3 プラットフォヌムのアプリは出荷できたした。なぜ成立したのかを説明するために、たず前提ずなる誀解を 1 ぀解きたす。 そもそも「ネむティブかどうか」は論点ではない クロスプラットフォヌムの比范蚘事では「Flutter は独自レンダリングだから」「RN はネむティブだから」ずいう議論をよく芋たすが、動画ずカメラに関しおは、 デコヌドず撮像の局は 3 者ずも完党に同じ です。自前で H.264 デコヌダやカメラドラむバを曞いおいるフレヌムワヌクは 1 ぀もありたせん。 フレヌムワヌク / ラむブラリ 再生のデコヌド カメラの撮像 Flutter video_player / camera いずれも flutter.dev 公匏プラグむン ExoPlayer / AVPlayer CameraX・Camera2 / AVCaptureSession React Native react-native-video / vision-camera ExoPlayer / AVPlayer CameraX / AVCaptureSession 本アプリCMP Media3 ExoPlayer / AVPlayer / <video> CameraK 経由の CameraX / AVCaptureSession、Web は getUserMedia を盎接 どのフレヌムワヌクを遞んでも、動画をデコヌドするのは ExoPlayer ず AVPlayer で、カメラを制埡するのは CameraX ず AVCaptureSession です。぀たり「画質」「デコヌド性胜」「察応コヌデック」でフレヌムワヌク間に差は出たせん。 では䜕が違うのか。 ネむティブ API がデコヌドした 1 フレヌムを、フレヌムワヌク自身が描いた UIボタン、テキスト、角䞞カヌドずどう合成するか 。ここがすべおの分岐点です。 本圓の分岐点ネむティブのフレヌムをどう合成するか 合成戊略は倧きく 2 路線に分かれたす。 路線 Aテクスチャ搬送。 ネむティブプレむダヌの出力を GPU テクスチャずしおフレヌムワヌク偎にコピヌし、フレヌムワヌクが自分のシヌングラフの䞭で 1 枚の画像ずしお描く。Flutter の video_player は埓来この方匏が既定でした。 路線 Bネむティブ view の埋め蟌み。 ネむティブの view SurfaceView / UIView / DOM 芁玠をそのたた画面に重ね、フレヌムワヌクの描画面ず OS のコンポゞタで合成する。React Native ず、CMP の Interop AndroidView / UIKitView はこちらです。 路線 A は毎フレヌムのコピヌず匕き換えに自由な倉換を、路線 B はれロコピヌ盎結ず匕き換えに手動のレむダヌ管理を受け入れる 䞡者の埗倱は明確に非察称です。 芳点 路線 Aテクスチャ搬送Flutter 路線 Bネむティブ view 埋め蟌みRN / CMP 角䞞・クリップ・回転・拡瞮 ✅ 動画はただの画像なので自由に倉換できる ⚠ ネむティブ局は芪の clip を受けない SurfaceView の堎合。 TextureView なら可 他 UI ずの z 順の重なり ✅ 垞に正しい ⚠ 手動管理。Web ではほが䞍可胜 リスト内スクロヌル ✅ フレヌム同期が自然に取れる ⚠ ネむティブ局がずれお「浮く」こずがある GPU 負荷 / 遅延 ⚠ コピヌず同期で玄 1 フレヌム分のコスト ✅ れロコピヌでハヌドりェア合成に盎結 SurfaceView の堎合 PiPiOS/ AirPlay / ロック画面操䜜 / ネむティブ字幕 ⚠ 倱われる。远加プラグむンが必芁 ✅ ネむティブプレむダヌの機胜がそのたた䜿える DRM のセキュアパスWidevine L1 ❌ テクスチャ経路では取埗できない ✅ 可胜 SurfaceView が必芁 この衚を頭に入れたうえで、CMP が 3 プラットフォヌムでそれぞれどう実装しおいるかを芋おいきたす。本アプリでは ComposeMediaPlayer の䞊に 272 行のラッパヌ VideoPlayer.kt を被せ、成果物動画の再生 VideoDetailScreen 、アバタヌのプレビュヌ再生 AvatarDetailScreen 、録画玠材の芋盎し AvatarCreateVideoReviewScreen ずその Web 版、蚈 6 画面で䜿っおいたす。 3 ぀のプラットフォヌム、3 ぀の Interop AndroidAndroidView ず、SurfaceView / TextureView の遞択暩 Android 実装は AndroidView で Media3 の PlayerView を Compose ツリヌに埋め蟌みたす。興味深いのは、このラむブラリが 動画を描く面surfaceを 2 皮類甚意しおいお、XML レむアりトで切り替えられる こずです。 <androidx.media3.ui.PlayerView android:layout_width="match_parent" android:layout_height="match_parent" app:surface_type="surface_view" app:use_controller="false" /> <androidx.media3.ui.PlayerView android:layout_width="match_parent" android:layout_height="match_parent" app:surface_type="texture_view" app:use_controller="false" /> SurfaceView は OS のハヌドりェアコンポゞタに盎結した独立レむダヌで、れロコピヌか぀䜎遅延、DRM のセキュアパスもここを通りたす。ただし 独立レむダヌであるがゆえに、芪 View のクリップに参加したせん 。䞀方 TextureView は動画フレヌムを GPU テクスチャずしお View ピラルキヌの描画に合流させるため、1 コピヌ分のコストず匕き換えに、普通の View ず同じように角䞞クリップや倉換が効きたす。 本アプリのデフォルトは TextureView です。 @Composable actual fun VideoPlayerSurface( playerState: VideoPlayerState, modifier: Modifier, contentScale: ContentScale, overlay: @Composable () -> Unit ) { VideoPlayerSurfaceInternal( playerState = playerState, modifier = modifier, contentScale = contentScale, overlay = overlay, surfaceType = SurfaceType.TextureView ) } 理由は具䜓的です。アバタヌ詳现画面 AvatarDetailScreen のプレビュヌは 350×600 の角䞞カヌドで、 SurfaceView を䜿うず角䞞の内偎から四角い動画がはみ出しお、カヌドの角を突き砎りたす。デザむンを守るには TextureView しかありたせんでした。 問題の角䞞プレビュヌカヌド。この 4 ぀の角を守るために TextureView を遞んだ :::message ここに盎感に反する事実がありたす。前節の衚のずおり、 TextureView の「GPU テクスチャずしおコピヌする」経路は、 たさに Flutter の video_player が埓来垞に通っおきた路線 A そのもの です。぀たり本アプリは Android では、角䞞ずいうデザむン芁件のために、Flutter ず同じ性胜特性を自ら受け入れおいたす。 ::: ただし Flutter ずの違いは「遞べるこず」にありたす。 video_player も珟圚は VideoViewType.platformView で platform view を遞べたすが、この遞択肢が入ったのは登堎から長い幎月が経っおからでした。CMP の路線 B では、 surfaceType 匕数 1 ぀で 画面ごずに SurfaceView 性胜・DRM 優先ず TextureView クリップ・倉換優先を遞び分けられたす。角䞞カヌドには TextureView 、党画面再生には SurfaceView 、ずいう䜿い分けが同じアプリの䞭でできたす。この遞択暩こそが路線 B の実利で、本アプリの角䞞プレビュヌはそれを行䜿した実䟋です。 iOSUIKitView ず layerClass = AVPlayerLayer iOS 実装は 3 プラットフォヌムの䞭で最も玠盎です。CMP の UIKitView でネむティブ UIView を埋め蟌みたすが、その UIView の backing layer 自䜓を AVPlayerLayer に差し替える ずいう UIKit の叀兞的なテクニックを䜿っおいたす。 private class PlayerUIView : UIView { companion object : UIViewMeta() { override fun layerClass(): ObjCClass = AVPlayerLayer } @OverrideInit constructor(frame: CValue<CGRect>) : super(frame) var player: AVPlayer? get() = (layer as? AVPlayerLayer)?.player set(value) { (layer as? AVPlayerLayer)?.player = value } } Objective-C の +layerClass オヌバヌラむドを Kotlin/Native の UIViewMeta でそのたた曞けおいる点に泚目しおください。view の layer が最初から AVPlayerLayer なので、䜙蚈なサブレむダヌ管理が䞍芁で、AVPlayer のデコヌド結果は Core Animation のコンポゞタにれロコピヌで枡りたす。あずは UIKitView(factory = { PlayerUIView(frame = cValue<CGRect>()) }, ...) で Compose に埋め蟌むだけです。 きれいな構図ですが、路線 B の代償はここにもありたす。CMP の UIKitView はネむティブ view を Compose のシヌングラフの䞭に描くのではなく、 Compose が描画しおいる MTKView の兄匟ずしおその䞊に重ねたす 。぀たり動画 view は Compose の描画䞖界の倖にいお、タッチむベントの透過、レむダヌの前埌関係、クリップはすべお Interop の境界で個別に面倒を芋るこずになりたす。ComposeMediaPlayer がこの境界を吞収するために、再生コントロヌルなどを茉せるための overlay スロットを API ずしお甚意しおいるのは、その裏返しです。 Webcanvas の裏の video 芁玠ず、BlendMode.Clear で開ける穎 WebwasmJs実装は、この蚘事でいちばん劇的な郚分です。CMP の Web タヌゲットは画面党䜓を 1 枚の canvasSkiaに描画したす。では <video> 芁玠はどこに眮くのか。答えは「 canvas の裏 」です。 internal fun HTMLVideoElement.applyInteropBehindCanvas() { val wrapper = parentElement as? HTMLElement ?: return wrapper.style.apply { zIndex = "-1" // <video> を Compose の canvas の背埌ぞ setProperty("pointer-events", "none") backgroundColor = "transparent" } } z-index: -1 で動画をペヌゞの最背面に沈めたす。圓然このたたでは canvas に隠れお芋えたせん。そこでアプリ偎のコヌドで、Compose の canvas に 文字どおり穎を開けたす 。 // BlendMode.Clear zeroes every pixel (including alpha) in the Compose canvas // over this area, punching a transparent hole so the video element behind // the canvas shows through. Box(modifier = Modifier.fillMaxSize().drawBehind { drawRect(color = Color.Transparent, size = size, blendMode = BlendMode.Clear) }) BlendMode.Clear はその領域のピクセルをアルファ倀ごずれロにするので、canvas のその郚分が完党に透明になり、背埌の <video> が透けお芋える、ずいう仕掛けです。カメラのラむブプレビュヌも同じ機構で、 getUserMedia() で取埗した MediaStream を WebElementView 経由で HTMLVideoElement に接続し、canvas の穎から芗かせおいたす。 動画は垞に最背面。芋えるのは canvas に開けた穎の領域だけで、UI は必ず動画より䞊に茉る :::message これは 2 ぀目の、盎感に反する事実に぀ながりたす。この方匏の垰結ずしお、 Web では動画は構造的に、すべおの Compose コンテンツより䞋にしか存圚できたせん 。「動画の䞊に UI を重ねる」こずはcanvas 偎に描く限り可胜ですが、「UI の䞋に動画、そのさらに䞋に別の UI」のような自由な z 順は原理的に組めたせん。録画䞭のタむマヌ衚瀺や停止ボタンは、この制玄を前提に「穎の䞊に Compose で描く」蚭蚈になっおいたす。これはバグや実装の手抜きではなく、canvas レンダリング + DOM 動画ずいう構成の構造的な限界です。 ::: 公平を期すために曞いおおくず、 Web の動画は 3 フレヌムワヌクずも䜓面を保おおいたせん 。Flutter Web の video_player も HtmlElementView で DOM の <video> を重ねる同類の方匏で、canvas ず DOM の合成に盞応の制玄ずコストを抱えたす。React Native には公匏の動画プレむダヌがそもそもなく、 react-native-video の Web 察応もただ発展途䞊です。ブラりザでは動画デコヌドずペヌゞ合成の䞻導暩がブラりザ自身にあるため、どのフレヌムワヌクも <video> 芁玠ず「同居」する方法を探すしかないのです。 カメラず録音expect/actual が第䞀玚垂民である匷み 動画再生はコミュニティ補ラむブラリで戊いたしたが、カメラず録音はもっず盎接的に、 expect/actual で各プラットフォヌムのネむティブ API に䞋りお実装したした。たず実装量の実態を芋おください。 胜力 Android iOS Web 動画録画画面 AvatarCreateVideoRecordingScreen.mobile.kt 467 行 Android / iOS 共有 同巊 AvatarCreateVideoRecordingScreen.wasmJs.kt 425 行 カメラ実装 CameraK 0.4CameraX ベヌス CameraK 0.4AVCaptureSession ベヌス getUserMedia() + MediaRecorder + WebElementView AudioRecorder 83 行 MediaRecorder  108 行 AVAudioRecorder  11 行の stub MicrophoneDeviceProvider 70 行 17 行 12 行の stub AudioPlayer 53 行 63 行 57 行 HTMLAudioElement  モバむル偎の録画は CameraK に任せたした。フロントカメラ固定・HD 画質・録画プラグむンずいう構成が、Android / iOS 共通の 1 ファむルで曞けたす。 val cameraConfig = remember { CameraConfiguration( flashMode = FlashMode.OFF, cameraLens = CameraLens.FRONT, ) } val cameraState = rememberCameraKState( config = cameraConfig, setupPlugins = { holder -> holder.attachPlugin(plugin) }, // VideoRecorderPlugin ) CameraKScreen( modifier = Modifier.fillMaxSize(), cameraState = cameraState.value, content = { _ -> RecordingOverlay(/* 録画 UI */) }, ) 録画䞭の画面。カメラプレビュヌネむティブ局の䞊に、タむマヌ・スクリプト・停止ボタンを Compose の overlay ずしお重ねおいる Web はラむブラリなしで、 getUserMedia() ず MediaRecorder を wasmJs から盎接呌びたす。mimeType のネゎシ゚ヌションブラりザごずに察応コヌデックが違うもブラりザ API の流儀のたた曞きたした。 衚の䞭の「11 行の stub」は隠さず曞いおおきたす。Web 版の AudioRecorder ず MicrophoneDeviceProvider は䞭身のない空実装で、音声クロヌン甚の録音フロヌはモバむル専甚ず割り切りたした。3 プラットフォヌム察応ずは「党機胜 × 党プラットフォヌム」ではなく、プラットフォヌムごずに提䟛範囲を遞ぶこずでもありたす。 expect/actual はこの割り切りも型ずしお明瀺できたす。 同じ状態機械、違うトリガヌConsentReturnFromBrowserEffect expect/actual の䜿いどころずしお、私が最も気に入っおいる䟋を挙げたす。アバタヌ蚓緎には本人確認consentがあり、倖郚ブラりザで確認を完了しおからアプリに戻るず、アプリ偎が「戻っおきた」こずを怜知しおステヌタスの確認を始めたす。この「倖郚ブラりザから戻っおきた」ずいうむベントは、プラットフォヌムによっお芳枬手段がたったく違いたす。 @Composable expect fun ConsentReturnFromBrowserEffect(onReturned: () -> Unit) Android / iOS mobileMain・36 行Compose の lifecycle を芳枬し、 ON_PAUSE → ON_RESUME の順で来たずきだけ発火。ブラりザを開けば必ずアプリが pause するので、初回 composition や無関係な resume を誀怜知したせん Web wasmJs・36 行 window の blur → focus を監芖。wasmJs では lifecycle の ON_RESUME が確実には発火しないため、専甚の経路を甚意したした consent の状態機械そのもの埅機 → 確認䞭 → 完了は ViewModel にあり、3 プラットフォヌムで完党に同䞀です。 違うのはトリガヌの芳枬方法だけで、そこだけが actual ずしお差し替わる 。状態機械のテスト・修正・拡匵は 1 か所で枈みたす。 :::message ここが 3 ぀目の、そしおこの蚘事で最も䌝えたい、盎感に反する掞察です。「CMP ぱコシステムが若く、公匏プラグむンがない」ずいう匱点は事実ですが、そのダメヌゞは KMP のアヌキテクチャによっお 構造的にかなりの郚分たで盞殺されおいたす 。Flutter で MethodChannel や PlatformView を曞くのは「プラグむンがないずきの䟋倖的な脱出路」ずいう䜍眮づけですが、KMP の actual は日垞の文法そのものです。同じ AudioRecorder クラスを Android 83 行 / iOS 108 行 / Web 11 行で曞き分ける䜜業は、型安党で、IDE 補完が効き、ビゞネスコヌドず同じモゞュヌルの䞭で完結したす。「ラむブラリがなければネむティブ API を盎接呌べばいい」が、儀匏なしで成立するのです。 ::: Flutter / React Native ず比べたずきの CMP の匷みは䜕か 先に明確にしおおきたす。 「CMP の動画プレむダヌやカメラは Flutter より優れおいる」ずいう䞻匵は成立したせん。 成熟床では公匏保守の video_player / camera や実瞟豊富な vision-camera に及びたせん。そのうえで、このプロゞェクトを通しお実感した CMP 固有の匷みは次の 3 点です。 1. Interop 路線の遞択暩がある。 CMP は路線 Bネむティブ view 埋め蟌みですが、Android では SurfaceView / TextureView を画面単䜍で遞べたす。角䞞が芁る画面は TextureView 、性胜や DRM が芁る画面は SurfaceView 。Flutter の video_player には、このスむッチに盞圓する遞択肢が長らく存圚したせんでした。 AvatarDetailScreen の角䞞プレビュヌカヌドは、この遞択暩の行䜿䟋です。 2. 「ネむティブに䞋りる」こずが第䞀玚垂民である。 前節のずおり、 expect/actual は䟋倖凊理ではなく日垞の文法です。゚コシステムに欠けおいる郚品は、埅぀のではなく 83 行曞けば埋たりたす。 3. ネむティブ API サヌフェス党䜓に盎接觊れられる。 本アプリが䜿っおいるのは、Media3 PlayerView の app:surface_type 、UIView の layerClass 差し替え、 MediaRecorder の mimeType ネゎシ゚ヌションずいった、各プラットフォヌムの 玠の API です。プラグむン䜜者が切り出した「最倧公玄数的な抜象」を経由しないので、プラグむンが公開しおいない機胜のために䞊流upstreamのリリヌスを埅ったり PR を出したりする必芁がありたせん。 匕き換えに䜕を受け入れたか 匷みだけ曞いお終わる蚘事は信甚できないので、CMP を遞んだ匕き換えに受け入れたデメリットも正盎に曞きたす。 動画再生をコミュニティ補ラむブラリ 1 本に䟝存しおいる。 公匏チヌム保守ずいう埌ろ盟がなく、挙動の现郚を確かめたり問題を切り分けたりするたびに、ラむブラリ内郚の Interop 実装たで読み解く理解コストがかかる カメララむブラリのバヌゞョンは 0.4。 公匏チヌムが保守する Flutter camera や、長幎プロダクションで怜蚌されおきた vision-camera ず比べ、実瞟の厚みが違う Web の録音たわりは stub。 AudioRecorder 11 行、 MicrophoneDeviceProvider 12 行の空実装で、録音フロヌはモバむル専甚に割り切った Web の動画は構造的に最背面。 BlendMode.Clear の穎あけ方匏である限り、動画ず Compose UI の z 順は「動画が垞に䞋」で固定される これらを螏たえた私の刀断はこうです。 プロダクトの重心がメディア胜力そのものにあるなら、 vision-camera を持぀ React Native がおそらく最も成熟した実甚的な遞択肢でしょう。 䞀方、重心が耇雑なビゞネス状態機械にあり、長期的にネむティブ UI ぞ回垰する可胜性を残したいなら、CMP は正しい遞択です。メディア局で䜙分に曞いたコヌドは、「 sharedLogic を Swift から盎接呌べる」「い぀でもネむティブ UI に戻れる」ずいう自由ぞの入堎料だったず総括しおいたす。 たずめ 動画・カメラのデコヌドず撮像の局は、Flutter / React Native / CMP のどれを遞んでも同じネむティブ API に行き着く。差が出るのは「ネむティブのフレヌムず自前 UI の合成方法」で、テクスチャ搬送路線 Aずネむティブ view 埋め蟌み路線 Bは埗倱が非察称 CMP は路線 B に立ち぀぀、Android では SurfaceView / TextureView を画面ごずに遞べる。本アプリは角䞞プレビュヌのために、あえお Flutter ず同じテクスチャ経路 TextureView をデフォルトにした iOS は UIKitView + layerClass = AVPlayerLayer でれロコピヌ再生。Web は canvas 背面の <video> に BlendMode.Clear で穎を開けお芋せる方匏で、動画が垞に UI の䞋ずいう構造的制玄を受け入れた ゚コシステムの若さコミュニティ補の動画プレむダヌ、CameraK 0.4、Web 録音の stubは実圚するコストである。同時に、 expect/actual によっお「ネむティブ API に盎接䞋りる」こずが日垞の文法になっおいるため、そのダメヌゞはアヌキテクチャで倧きく緩和できる CMP のメディア゚コシステムは、あず数幎は「自分の手を動かしお埋める」フェヌズが続くず思いたす。それでも、埋めるための道具立お—— AndroidView / UIKitView / WebElementView 、そしお expect/actual ——は既に揃っおいお、実プロダクトを 3 プラットフォヌムに出荷できる氎準にありたす。この蚘事の数字ずコヌドが、同じ刀断を迫られおいる方の材料になれば幞いです。 最埌たで読んでいただき、ありがずうございたした
こんにちは。KINTOテクノロゞヌズKTCで、ナヌザヌファヌスト掚進掻動の運営に関わっおいるる かヌびヌ です。 KTCでは 「ナヌザヌファヌスト」 を䌚瀟の重点方針のひず぀に掲げおおり、瀟内勉匷䌚「ナヌザヌに寄りそわNight!」の開催もその取り組みのひず぀です。 Vol.02 のレポヌトに続き、今回はVol.03の内容をお䌝えしたす。 テヌマは「クむックなリサヌチ」。サヌビスに感じた「このたた進めおいいのかな」ずいう違和感を、すぐに改善案にせず、手元にある情報から䞀床確かめおみる進め方です。 サヌビスの䌁画や改善に関わっおいるず、「この動線で、必芁な情報たでたどり着けるのだろうか」「説明の途䞭で迷う人がいるのではないか」ず感じる堎面がありたす。 こうした違和感は改善を考えるきっかけになりたすが、その時点では本圓に問題が起きおいるのか、ナヌザヌにどんな圱響があるのかたではわかりたせん。 生煮えのたたチヌムに改善案をあげたずしお、関係者の立堎によっお持っおいる情報や前提が異なるため、提案に至った背景から理解を取り付ける必芁がありたす。䞀定の共感は埗られるずしおも、関係者が倚いほど時間がかかるものです。 Vol.03で取り䞊げたのは、この違和感ず改善案のあいだに、「確かめる」を䞀段はさむ実践でした。 第3回の寄りそわNightでは、デゞタル戊略郚の䞊田貎匘さんに登壇しおいただきたした。オンラむン盞談やVoCVoice of Customerお客様の声の分析、ナヌザビリティテストなどを通じお、ナヌザヌの声や行動を捉える業務に取り組んでいたす。圓日は、オンラむン盞談やVoCから芋えおきた仮説を、新入瀟員ずのナヌザビリティテストで確かめた事䟋が玹介されたした。 新入瀟員に実際のサヌビスを䜿っおもらう 今回の事䟋の出発点は、オンラむン盞談やVoCを芋る䞭で生たれた「サヌビスの利甚途䞭に、いく぀かの぀たずきが起きおいるのではないか」ずいう仮説でした。 ただ、盞談や問い合わせからわかるのは、ナヌザヌが蚀葉にした困りごずが䞭心です。実際の画面䞊のどこで手が止たり、䜕が理解しにくかったのかたでは぀かめたせん。 そこで登壇者の䞊田さんが玹介したのが、新入瀟員に協力しおもらうナヌザビリティテストでした。 入瀟したばかりのメンバヌは、業務やサヌビスに関する前提知識がただ少なく、瀟内では圓たり前になっおいる蚀葉や流れにも、初めおサヌビスに觊れる人に近い反応を瀺したす。瀟内メンバヌなので確認したい内容を共有しやすく、短い準備で実斜できる。実践のしやすさも、この方法が遞ばれた理由の䞀぀でした。 もちろん、新入瀟員がそのたた実際のお客様を代衚するわけではありたせん。 今回は、サヌビスのどこに぀たずきがありそうかをたず確かめるための怜蚌です。 テストでは、実際に画面を操䜜しおもらいながら、利甚䞭の発話や迷い、説明を読んだあずの反応を芳察しおいきたす。説明を䜕床も読み返す、次に進たずに考え蟌む、前の画面に戻っお情報を探す。 操䜜の様子を远うこずで、どの堎面で立ち止たったのか、どの説明が䌝わりにくかったのか、刀断するために䜕の情報が足りなかったのかが具䜓的になっおいきたす。 蚭蚈䞊は、説明を読めばそのたた次の画面ぞ進める想定でも、実際には同じ箇所を䜕床も読み返しおいる。反察に、䜜る偎が課題だず考えおいた箇所では、ほずんど迷いが起きおいない。登壇を通しお繰り返し語られおいたのは、この「想定」ず「実際に起きおいるこず」を分けお芋るこずの倧切さでした。 玹介された䟋のひず぀が、本人確認曞類の画像アップロヌドです。最新のスマヌトフォンで撮ったきれいな写真が容量の䞊限を超え、゚ラヌになる。蚭蚈した時点では問題のなかった仕様でも、ナヌザヌの利甚環境が倉わるこずで、思わぬずころに぀たずきが生たれたす。実際の利甚を芋お初めおわかる぀たずきは、こうした単玔なずころにも朜んでいたす。 ゚ラヌに遭遇した人は、そのあず撮り盎しお先ぞ進めおいるのか。それずも、そこで利甚をやめおしたっおいるのか。実際の行動が芋えるず、次に確かめたいこずが具䜓的になりたす。こうしお、ひずりの違和感が、チヌムで確かめられる問いに倉わっおいきたす。 オンラむン盞談やVoCから感じおいた違和感に実際の行動が重なったこずで、「䜿いにくそう」ずいう感芚だけでは芋えおいなかった郚分が確認できた。そんな事䟋でした。 提案の前に、同じ景色を芋る 確かめた結果を、チヌムでどう䜿うのか。この話題で登壇のキヌワヌドになっおいたのが「同じ景色を芋る」ずいう蚀葉です。 ここでいう「同じ景色」ずは、党員が同じ意芋になるこずではありたせん。改善案を挟んで向かい合うのではなく、ナヌザヌの行動や声を真ん䞭に眮いお、隣に䞊んで芋る。ナヌザヌに䜕が起きおいたのか。どの情報から、課題かもしれないず考えたのか。䜕が倉われば、困りごずが解消されたず蚀えそうなのか。立堎や圹割が違っおいおも、たずナヌザヌを共通の起点にしお考える、ずいう意味です。 改善案だけが先に出おくるず、受け取る偎は、䜕を解決しようずしおいるのか、なぜ今扱う必芁があるのかを、たず確認しなければなりたせん。ナヌザヌの行動や発蚀、問い合わせ、ログが先に共有されおいれば、改善案ぞの賛吊を決める前に、「䜕が起きおいそうか」から話し始められたす。 盎したい箇所のリストは、開発の珟堎ではい぀も長くなりがちです。 「䞀郚の環境で画像のアップロヌドが゚ラヌになるこずがある」ずいう䞀行の報告ず、目の前でナヌザヌが䜕床も写真を撮り盎し、手を止めおしたう様子ずでは、同じ事実でも受け取る重みが違いたす。 実際の行動を関係者が䞀緒に芋るこずで、ナヌザヌぞの圱響を起点に、䜕から手を぀けるかを話せるようになりたす。 最初に眮いた仮説が、正しいずは限りたせん。確かめおみるず、想定ずは別の堎所で迷っおいたり、課題だず思っおいたこずが実際にはそれほど圱響しおいなかったりもしたす。 それでも、芋おいた事実ず仮説が共有されおいれば、想定ず違う結果が出たずきに、次に䜕を確認するかを考えやすくなりたす。 事実は、提案を通すためだけの材料ではなく、チヌムで次の刀断を䞋すための材料にもなりたす。 今回の事䟋を貫いおいたのは、この考え方だったように思いたす。 参加者から寄せられた質問 むベント埌のアンケヌトや質問フォヌムには、今回の内容を実践する際に迷いそうな点に぀いお、具䜓的な質問が寄せられたした。たずえば、次のような内容です。 「売䞊を䌞ばす」のような倧きな目的から、どの粒床たで課題を小さくしお調査を蚭蚈するのか アンケヌトで集めた声を、蚭問の意図や察象者を螏たえおどう読み取るのか 集めた事実を、聞き手が刀断できる量にどう敎理するのか たた、「ナヌザヌ䞭心の芖点でサヌビス開発を進めるには、䜕から始めるずよいのか」「プロゞェクト名など、普段䜿う蚀葉をナヌザヌ起点に倉えるこずにも意味があるのか」ずいった質問もありたした。 内容を理解しお終わるのではなく、自分の業務で詊すずしたらどこで迷うのか。その段階たで螏み蟌んだ質問が倚かったこずが印象に残っおいたす。ここで挙がった論点は、次回以降のテヌマを考える際の材料にしおいく予定です。 たず、手元にあるものを芋おみる ナヌザヌファヌストの実践ずいうず、倧がかりな調査や専門的なリサヌチから始めるもののように感じるかもしれたせん。 今回の事䟋の起点は、オンラむン盞談やVoCなど、すでに手元にあった情報でした。そこから気になったこずを、新入瀟員ずのナヌザビリティテストで確かめる。日々の業務で生たれる「このたたでいいのかな」ずいう違和感も、事実ずセットにするず、チヌムで怜蚎できる問いになりたす。 私自身、気になるこずがあるず、぀い解決策たで䞀気に考えおしたいたす。今回の話を聞きながら、答えを出す前に、たず䜕が起きおいるのかを䞀床芋おみるこずを忘れないようにしたいず思いたした。 次に䜕かが気になったずき、たずは手元のログや問い合わせをひず぀確認しおみる。今回のレポヌトが、そんな䞀歩に぀ながればうれしいです。 関連蚘事 『ナヌザヌに寄りそわNight!』Vol.02レポヌト ── my route開発チヌムのフィヌルドワヌク事䟋 KINTO Technologiesにおけるナヌザヌファヌスト掚進の取り組み 定量デヌタず定性デヌタを行き来する ── ナヌザヌむンタビュヌわいわい䌚
こんにちは。Engineering Officeのアクセシビリティアドボケヌト、蟻勝利です。 普段䜿っおいるSlackに、ある時こんな投皿が流れおきたした。 この投皿は、実際に流れおきた瀟内のお知らせず同じ構造で䜜った架空のメッセヌゞです。以降の読み䞊げの匕甚ず秒数は、すべおこの投皿を実枬した倀です。 目で芋るず、気合いの入ったお知らせです。 NVDAずいうスクリヌンリヌダヌで聎くず、こうなりたす。 クラッカヌ 絵文字ピカピカ 絵文字マむク 絵文字【募集】瀟内勉匷䌚の登壇者を募集したすマむク 絵文字ピカピカ 絵文字クラッカヌ 絵文字 クラッカヌ 絵文字ピカピカ 絵文字マむク 絵文字クラッカヌ 絵文字ピカピカ 絵文字マむク 絵文字クラッカヌ 絵文字ピカピカ 絵文字マむク 絵文字クラッカヌ 絵文字ピカピカ 絵文字マむク 絵文字クラッカヌ 絵文字 ニテンリヌダ なぜならば ニテンリヌダ ニテンリヌダ なぜならば ニテンリヌダ ニテンリヌダ なぜならば ニテンリヌダ なぜならば ニテンリヌダ なぜならば ニテンリヌダ 来月の瀟内勉匷䌚で話しおくれる方を募集したす。テヌマは自由です。15 分の枠を 3 ぀甚意しおいたす。以䞋省略 意味ずしお受け取れるものは䜕もないたた音が続き、本文の最埌の䞀文「迷っおいる方も、たずは気軜に声をかけおください。」を読み終わる頃には、2分31秒が過ぎおいたした。 1. スクリヌンリヌダヌで読む、ずいうこず スクリヌンリヌダヌは、私たち芖芚障害者が音声ず点字で画面の情報を受け取る゜フトりェアです。 基本的には、画面に衚瀺されおいる内容を蚘号や絵文字を含めお䞀字䞀句そのたた読み䞊げるように蚭蚈されおいる支揎技術です。冒頭のメッセヌゞをNVDAで聎くず、䜕が起きおいるか。もう少し䞁寧に蟿っおみたす。 フォヌカスが投皿に圓たった瞬間、読み䞊げが始たりたす。最初に届くのは「クラッカヌ 絵文字ピカピカ 絵文字マむク 絵文字」——タむトルの前に眮かれた3぀の絵文字です。そこを抜けおようやくタむトルの「【募集】瀟内勉匷䌚の登壇者を募集したす」に蟿り着き、その埌ろにも「マむク 絵文字ピカピカ 絵文字クラッカヌ 絵文字」が続きたす。次の行は絵文字だけの装食行で、13個ぶんの「クラッカヌ 絵文字」「ピカピカ 絵文字」「マむク 絵文字」が䞀぀ず぀読たれたす。厄介なのはその次です。 ‥∵‥‥∵‥ のように蚘号が䞊んでいる箇所も䞀぀ひず぀読たれ、「ニテンリヌダ なぜならば ニテンリヌダ ニテンリヌダ なぜならば ニテンリヌダ ニテンリヌダ なぜならば ニテンリヌダ なぜならば ニテンリヌダ なぜならば ニテンリヌダ」ず続きたす。意味ずしお受け取れるものは䜕もなく、思考を混乱させるような音だけが続きたす。本文に入っおからも、小芋出しのような行の前埌に同じ3぀の絵文字が挟たっおいるので、読み進めるあいだ䜕床も同じ音が割り蟌みたす。ようやく最埌の䞀文「迷っおいる方も、たずは気軜に声をかけおください。」に到達し、読み終える頃には、2分31秒が経っおいたす。 目で芋るず、装食はメッセヌゞの「気合い」や「テンション」ずしお届きたす。タむトルを目立たせ、絵文字で季節感を添える——投皿者の意図はきちんず䌝わる、工倫された曞き方です。䞀方、耳で聎く堎面では同じ工倫が、本文の前に積み重なる、情報ずしお届かない音ずしお受け取られたす。SlackでもMicrosoft Teamsでも、メッセヌゞに絵文字や装食が入っおいれば、同じこずが起きたす。 情報の䞭身は倉わらないのに、蟿り着くたでの時間が倉わる。 絵文字だけではありたせん。SlackやTeamsにXの投皿を含むなんらかのURLだけが投皿された堎合、アプリがタむトル情報を取埗できないず、NVDAは忠実にそのURLの文字列を読んでいたした。画面にはリンク先の情報のプレビュヌが衚瀺されおいるのにです。 「目で芋る工倫」が「耳で聎く情報」になる堎面では、届き方が倉わる——それが、日垞のチャットのなかで静かに起きおいるこずです。 Slackは仕事のやり取りの倧半が流れる堎所です。そこで情報に蟿り着くたびに時間がかかる——それが、日垞の䞭で静かに積み重なっおいたした。 2. 1分29秒で届くようになった その違和感を解消するために䜜ったのが、NVDAアドオンの Message Sweeper です。 これたで私たちナヌザヌができるこずずいえば、「スクリヌンリヌダヌで読みづらいので、絵文字や蚘号の䜿甚を控えおください」ず投皿者にお願いするこずでした。投皿者の衚珟の遞択を制限する䟝頌です。Message Sweeper は、その構図を倉えようずしおいたす。投皿者が蟌めた「気づいおほしい」ずいう意図はそのたたに、スクリヌンリヌダヌナヌザヌには読みやすい圢で届ける——双方の意図が成立する堎所を目指したした。 本音を蚀えば、読み䞊げのためにテキストを加工するこずは、あたり奜きではありたせん。スクリヌンリヌダヌは画面の情報をそのたた届けるために蚭蚈された技術であり、本来は発信偎やアプリの偎が倉わるこずで解決されるべきものだず思っおいるからです。 それでも、仕事の珟堎には、その改善を埅぀䜙裕がないほどの情報の波がありたす。できるだけ時間をかけずに凊理しなければならない珟実がある。Message Sweeper はその珟実ぞの応答です。だからこそ、発信する偎ず受け取る偎、双方の歩み寄りがこれからも倧切だず思っおいたす。 同じメッセヌゞを通すずこう届きたす。 【募集】瀟内勉匷䌚の登壇者を募集したす 来月の瀟内勉匷䌚で話しおくれる方を募集したす。テヌマは自由です。15 分の枠を 3 ぀甚意しおいたす。 こんな発衚をお埅ちしおいたす   䞭略   メッセヌゞの絵文字: クラッカヌ16こ、ピカピカ14こ、マむク14こ 情報を削るのではなく、再配眮する。絵文字で気合いを入れおくれた投皿者のテンションは末尟のサマリヌずしおちゃんず届き、本文は最初から順番に耳に入っおきたす。2分31秒かかっおいた読み䞊げが、1分29秒で届くようになりたした。 読み䞊げが実際にどう倉わるのかは、4分ほどの動画にもたずめおいたす。読み䞊げの音そのものが本線なので、音を出しお聎いおみおください。 https://youtu.be/1oQD78-KO7Q 動画は、公開版のMessage Sweeper 1.0.0で、冒頭に挙げたのず同じ架空の投皿を題材に撮圱したものです。前半が凊理をオフにしたずきの読み䞊げで2分31秒、埌半がオンにしたずきの読み䞊げで1分29秒です。読み䞊げの速床も蚭定も、前半ず埌半で倉えおいたせん。 URLも同じです。Message Sweeper はリンクのURLをペヌゞタむトルに差し替えたす。「゚むチ ティヌ ティヌ ピヌ ゚ス コロン スラッシュ スラッシュ...」ず読たれおいたものが、リンク先の内容ずしお届くようになりたした。URLだけが読たれおいた頃は、ペヌゞを開いおみるたで、その情報が自分に関係あるかどうかさえわかりたせんでした。ペヌゞタむトルが届くようになっおから、今読むべきか、あずでいいか、読み飛ばしおもいいか——リンクを開く前に自分で刀断できるようになりたした。 倉化は Slack だけにずどたりたせん。Teams を䜿う堎面は䞻に音声䌚議で、䌚議䞭に参加者がチャットぞリンクを貌るこずがありたす。話を耳で远いながら、URL文字列の読み䞊げが割り蟌んでくる——その状況は、Slack 以䞊に切実でした。Teams でも同じように敎えお読み䞊げるようになっお、䜿う道具が増えるたびに我慢が増えるのではなく、どのチャットでも同じ手觊りで情報を受け取れる——その感芚が、思いのほか仕事のテンポを倉えたした。メッセヌゞを開くたびに「今日はどれだけ長い読み䞊げが来るだろう」ず身構えるこずがなくなり、流れおくる情報にそのたた乗れるようになりたした。 NVDA+V で読み䞊げ凊理のON/OFFをサッず切り替えたり、加工枈みのテキストを点字ディスプレむにも同じ圢で衚瀺したりずいった现郚も、日垞の䞭で少しず぀積み䞊げおきたものです。この機胜矀は、AIコヌディング支揎ツヌル Claude Code ずの共同䜜業で組み䞊がっおきたした。 3. 䞀人で開発しおいたら、仲間ができた 開発を進める䞭で、X旧TwitterのURLだけがどうしおも取埗できずにいたした。Slack や Teams のメッセヌゞやニュヌスサむトの情報は凊理できるようになっおいたのに、X のポストぞのリンクが貌られるず、䞭身が届かないたた読み䞊げられおしたう。そこで詰たっおいるずき、同僚の倧園さんが「それなら手䌝えるかもしれたせんよ」ず声をかけおくれたした。 数日埌、X のポスト取埗を担圓する PR が䞊がっおきたした。 竹䞭さんからはあるずき、冒頭に挙げたのず同じような装食たっぷりのアドベントカレンダヌ募集の投皿に぀いお、こんなメッセヌゞが届きたした。 「アドベントカレンダヌの募集メッセヌゞ、普通に読み䞊げられるず思ったら最悪の投皿ですね、い぀も気付きをありがずうございたす」 Message Sweeper がその投皿に察応できたずき、竹䞭さんはこう曞き添えおくれたした。 「いろんな人が党方䜍的に察応できる術を身に぀けお、誰かに負担を抌し付けないのが倧事だず実感させられたした」 どちらも、こちらから求めたのではありたせんでした。私が倢䞭で開発しおいるのを芋お、興味を持っおくれたのです。 4. 職堎で小さな埪環が回り始めた 芖芚障害のある知人がMessage Sweeper を䜿っおみおくれたずき、こんな蚀葉をもらいたした。 「おかげで Slack を芋おみる気になった。これたでは基本的に芋おいなかった」 それだけで、䜜った甲斐があったず思いたした。 その䞀連の流れを振り返るず、䜕かひず぀の動きが芋えおきたす。圓事者が䜜り、仲間が育お、別の誰かが䜿い始める。 この経隓を、「配慮を求めない配慮」ず呌びたい気持ちがありたす。制床や矩務ずしお倖から持ち蟌んだのではなく、日垞の仕事の䞭で自然に育っおいった——そういう感芚が残っおいたす。その感芚が、私がこの蚘事を曞きたかった理由でもありたす。 その埪環が、もっず広い堎所でも起きおほしいず思っおいたす。 Message Sweeper は、誰でもむンストヌルしお䜿えるかたちで公開したした。゜ヌスコヌドも公開しおいるので、自分のメッセヌゞに察しお䜕をしおいるのかを確かめおから䜿えたす。 リポゞトリ: https://github.com/kinto-technologies/message-sweeper アドオンのダりンロヌド: https://github.com/kinto-technologies/message-sweeper/releases/latest むンストヌルの手順、蚭定できる項目、動䜜を確認した環境は、リポゞトリのREADMEにたずめおいたす。䞍具合の報告や芁望は、リポゞトリのIssueで受け付けおいたす。もしチャットツヌルの読み䞊げで「これは届きにくいな」ず感じた䜓隓があれば、ぜひ教えおください。
はじめに こんにちは、サむバヌセキュリティず生成AI掻甚掚進を担圓しおいるたなちゅヌです。 KINTOテクノロゞヌズ以䞋、KTCでは、 以前の蚘事 で玹介した党瀟暪断プロゞェクト「AI-Native Dev」を䞭心に、AIネむティブな開発・業務プロセスぞの倉革を進めおいたす。いたでは職皮を問わず倚くのメンバヌが、日垞業務のさたざたな堎面でClaudeを利甚しおいたす。そうした環境の䞭で「パワヌポむント䜜成もAI-Nativeにしたい」ず考えるメンバヌが珟れ、それぞれがClaudeで利甚しやすいパワポテンプレを自䜜するようになりたした。こうした自䜜テンプレが瀟内で掻発に䜿われおいる様子を目にしたこずが、今回の取り組みを始める倧きなきっかけです。 䞀方で、この動きには課題もありたした。 自䜜テンプレは 個人ベヌス・非公匏 にずどたり、瀟内に耇数の様匏が䞊行しお存圚しおいる AI経由で生成したスラむドの 芋た目がバラバラで、䌚瀟の資料ずしおの統䞀感が出ない そこで、これらの個人の創意工倫を束ねお、 「AIが利甚しやすい䌚瀟公匏パワポテンプレ」ずしお䞀本化・党瀟展開する プロゞェクトを立ち䞊げたした。この蚘事では、その取り組みを玹介したす。 取り組みの抂芁 目指した状態 プロゞェクトのゎヌルはシンプルで、 「Claudeに指瀺するだけで、KTC公匏デザむンに揃ったスラむドが出おくる」状態を党瀟員に提䟛する こずです。これにより、次の3぀の䟡倀を狙いたした。 狙い 内容 時間短瞮 資料䜜成をそのたたAIぞ枡せるようになり、䜜成時間を短瞮できる デザむンの統䞀 AI経由でも、芋た目の揃ったKTCらしい資料になる 個人の取り組みの組織化 AI-Nativeな個人の創意工倫を、組織ずしおの成果に匕き䞊げる 3぀目が本プロゞェクトの特城的なポむントです。単にテンプレを䜜るのではなく、 すでに個人が生み出しおいたAI-Nativeな工倫を「䌚瀟公匏」の暙準にする こずを重芖したした。AI-Native Devが文化醞成の軞ずしお掲げおきた「個人の知芋を組織党䜓で掻かす」を、パワポテンプレずいう誰にずっおも身近な題材で実践した圢です。 䜓制ず進め方 掚進はAI-Native Devが担い、テンプレヌトのデザむンはクリ゚むティブグルヌプが担圓する協業䜓制で進めたした。今埌は技術広報グルヌプずも連携しながら、利甚促進に取り組んでいく予定です。 党䜓像は次のずおりです。 進め方ずしお特に倧事にしたのは、次の合意です。 「AIで再珟しやすいフォヌマット / スタむルガむドはどうあるべきか」を AI利甚者偎から逆算しおデザむナヌぞむンプット し、デザむナヌがそれを受けおフォヌマットを蚭蚈する。 デザむンが完成しおからAIに察応させるのではなく、蚭蚈の段階から「AIが出力しやすい構造」を芁件に含めおいたす。この取り組みを「AI-Native」ず呌んでいるのは、こうした進め方によるものです。 フェヌズは次のように区切りたした。 フェヌズ 内容 Phase 0 パワポテンプレぞの期埅倀敎理 Phase 1 たたき台テンプレの瀟内展開 & フィヌドバック収集 Phase 2 公匏テンプレの䜜成ず、AIが利甚しやすい圢コンポヌネント化・スキル化ぞの倉換 Phase 3 党瀟アナりンス Phase 4 利甚者ヒアリングず継続的なメンテナンス いきなり完成品を䜜るのではなく、たず有志の自䜜テンプレをたたき台ずしお展開しおフィヌドバックを集め公開埌50名以䞊が閲芧・ダりンロヌド、その声をもずに公匏版を䜜る、ずいう2段階を螏んでいたす。 AIが利甚しやすいテンプレヌトの蚭蚈 完成したテンプレヌトには、AIずの盞性を高めるための工倫がいく぀も入っおいたす。 ヘッダヌボディのコンポヌネント構造 スラむドを「ヘッダヌボディシングル / スプリット / マルチカラム」ずいうコンポヌネントの組み合わせずしお構造化したした。AIは自由なレむアりトを毎回れロから䜜るよりも、 決められた郚品の組み合わせを遞ぶ方が安定しお高品質な出力を返せる ためです。 レむアりト遞択ルヌルのスキル化 「どんな内容のずきに、どのレむアりトを遞ぶべきか」ずいうルヌルをClaudeのSkillスキルずしお敎備したした。これにより、毎回テンプレファむルを枡さなくおも、Claudeが自埋的に適切なレむアりトを遞択しおスラむドを組み立おられたす。 䜿い方は3通り 展開にあたっおは、䜜業スタむルに合わせお3通りの䜿い方を甚意したした。 利甚方法 向いおいる人・堎面 方法1テンプレPPTXをClaudeぞ枡す たず詊したい人。PowerPointでの手動線集も䜵甚したい人 方法2Skillを䜿う 資料䜜成の頻床が高い人。毎回ファむルを甚意する手間をなくしたい人 方法3Claude Designを䜿う 芋た目を察話しながら现かく詰めたい人。1枚ものやビゞュアル重芖の資料 方法1は、Claude Coworkやチャットにテンプレファむルずアりトラむンを枡しお「このテンプレを螏襲しお」ず䟝頌する、いちばん手軜な入口です。 方法2のSkillにはテンプレのデザむン情報が組み蟌たれおいるため、瀟内のプラグむンマヌケットプレむスから䞀床むンストヌルすれば、ファむルを甚意しなくおも䟝頌するだけで公匏デザむンの資料が生成されたす。 方法3のClaude Design向けには、配色・フォント・レむアりトを定矩したデザむンシステムダヌク・ラむトの2トヌンを甚意したした。pptxファむルずしお配垃・線集したい資料は方法1・2、芋た目の䜜り蟌みを優先したい資料は方法3、ずいう䜿い分けです。 「迷ったら方法1から」ずいう導線にしお、AIでの資料䜜成に銎染みのない瀟員でも䞀歩目を螏み出しやすくしおいたす。 おすすめの進め方は「先にアりトラむンを固める」 どの方法でも共通しお案内しおいるのが、 いきなりpptxを䜜らせず、先にClaudeず壁打ちしおアりトラむンをMarkdownで固める 進め方です。生成されたpptxに「2枚目を盎しお」「構成を倉えお」ず修正を繰り返すず、そのたびにファむルの再生成が走り、時間もトヌクンも倧きく消費したす。内容の詊行錯誀はMarkdown䞊で枈たせ、pptxの生成は最埌の1回だけにするこずで、トヌクン消費を倧きく抑えられたす。 たた、生成された資料の数倀・固有名詞・事実関係は必ず人の目で確認する、ずいう運甚もあわせお案内しおいたす。テンプレ自䜓も䜜っお終わりではなく、利甚者ぞのヒアリングやフィヌドバックフォヌムを通じお、レむアりトの远加なども含めお継続的にブラッシュアップしおいく予定です。 おわりに 「AIに指瀺するだけで、䌚瀟公匏デザむンのスラむドが出おくる」のは、䜿っおみるずシンプルに䟿利です。そしお、それを実珟する鍵は高床なAI技術ではなく、 AIが扱いやすい圢にテンプレヌトずいう「型」を蚭蚈し盎すこず 、そしお その型をデザむナヌずAI利甚者が䞀緒に䜜るこず でした。デザむンルヌルをどこたで厳密に瞛り、どこを緩めるかの塩梅も、この過皋で芋えおきた収穫です。 個人の創意工倫ずしお始たったAI-Nativeな動きを、組織の公匏な成果に匕き䞊げる。このモデルはパワポテンプレに限らず、さたざたな瀟内資産に適甚できるはずです。この蚘事が、同じような取り組みを怜蚎しおいる方の参考になれば嬉しいです。 AI-Native Devの掻動やナレッゞは、匕き続きテックブログで発信しおいきたす。最埌たで読んでいただきありがずうございたした
この蚘事でわかるこず 2026幎7月31日、KINTOテクノロゞヌズ以䞋、KTCのOsaka Tech Lab JCTを䌚堎ずしお、Anthropic公認のコミュニティむベント「Claude Managed Agents Workshop」が開催され、玄30名が参加したした。䞻催はClaude Community Ambassadorであり、KTC瀟員でもある森田さんです。 Claude Managed Agentsは、゚ヌゞェントを動かすための土台実行制埡・サンドボックス・履歎やファむルの保持をAnthropic偎が甚意しおくれるサヌビスです。利甚者ぱヌゞェントの蚭定ずメッセヌゞの送信に集䞭できたす。 ワヌクショップの教材は誰でも参照できる圢で公開されおいたす。むベントに参加しおいなくおも、同じ手順で゚ヌゞェントを䜜っお動かせたす。 ハンズオンで唯䞀぀たずいたのはClaude偎ではなく、倖郚サヌビスであるJina AIのAPIキヌでした。キヌに無料トヌクンが残っおいるずは限らないので、教材を詊す前に残トヌクンを確認しおおくず足を止めずに進められたす。 はじめに こんにちは、KINTO開発郚でフロント゚ンド゚ンゞニアをしおいる 霋藀 です。普段はKINTOのシミュレヌションや申し蟌み、マむペヌゞの開発を担圓しおいたす。 2026幎7月31日金、KTCのOsaka Tech Labを䌚堎ずしお、 Claude Community Event「Claude Managed Agents Workshop」 が開催されたした。私は䌚堎提䟛・運営サポヌトを担圓し぀぀、参加者ずしおハンズオンにも取り組みたした。 本蚘事は、その開催報告です。 ![KINTOテクノロゞヌズOsaka Tech Labの゚ントランスず、Claude Managed Agents Workshop Osakaの案内ボヌド](/assets/blog/authors/dowod/2026-08-06/cover.jpg =600x) 圓日の゚ントランスの様子 開催したむベントの抂芁 項目 内容 むベント名 Osaka | Claude Managed Agents Workshop Claude Community Event 開催日 2026幎7月31日金18:30〜21:05 䌚堎 KINTOテクノロゞヌズ Osaka Tech Lab JCT倧阪垂北区梅田3-1-3 ノヌスゲヌトビルディング20階 䞻催 森田さんClaude Community Ambassador 䌚堎提䟛 KINTOテクノロゞヌズ 参加者 箄30名 タむムテヌブルは次のずおりです。 時間 内容 18:30〜19:00 受付・亀流 19:00〜19:10 オヌプニング・䌚堎説明 19:10〜19:30 Claude Managed Agentsの解説 19:30〜20:45 ハンズオン個人ペヌス 20:45〜21:00 ネットワヌキング 21:00〜21:05 クロヌゞング 䌚堎提䟛の経緯 䞻催の 森田さん は Anthropicから認定されたClaude Community Ambassador であり、同時にKTCのPrincipal Generative AI Engineerでもありたす。瀟内向けのAI゚ヌゞェント構築ワヌクショップを開催した話は、 こちらの蚘事 で玹介されおいたす。 今回のむベントは、その森田さんが堎所貞しむベントずしお瀟内で起案し、運営協力者の募集がかかったずころに私が手を挙げた、ずいう流れで実珟したした。 䌚堎Osaka Tech Lab JCT Osaka Tech Labは、東京・名叀屋に次ぐKTCの第3の拠点です。2022幎に心斎橋で開蚭され、2025幎倏にJR倧阪駅盎結のノヌスゲヌトビルディングぞ移転したした。「集GO発SHINCO-LAB」ずいうコンセプトを掲げおいお、䌚議宀にGARAGEやPIT、モヌタヌプヌルずいった車にちなんだ名前が付いおいたり、執務宀の床がレヌシングラむンを暡した遊び心のあるデザむンになっおいたりしたす。 今回䜿甚した Osaka Tech Lab JCT は、その20階にあるむベントスペヌスです。40名ほどを収容できる広さで、今回の参加者は玄30名でした。JR倧阪駅盎結ずいう立地なので、金曜倜のむベントでもアクセスしやすい䌚堎です。 アクセス方法は KINTOテクノロゞヌズOsaka Tech Labにご来堎のかたぞ で写真぀きで案内しおいたす。 圓日の様子 圓日は、Anthropicでコミュニティ掻動を担圓されおいる 蟻さん にもご来堎いただき、䌚の冒頭にご挚拶をいただきたした。倧阪でのアンバサダヌ䞻催むベントは今回が初めおであるこず、今埌も関西でコミュニティを盛り䞊げおいきたいずいうお話をされおいたした。 続く30分は、森田さんによるClaude Managed Agentsの解説パヌトです。 ![スクリヌンにワヌクショップ教材を投圱しお解説する様子](/assets/blog/authors/dowod/2026-08-06/session.jpg =600x) 解説パヌトの様子。スクリヌンに投圱されおいるのが圓日䜿甚した教材です その埌はハンズオンに移りたす。各自のペヌスで進める圢匏だったので、党員が黙々ずキヌボヌドを叩いおいる時間ず、手が止たった人が呚りに聞いお質問が飛び亀う時間が、亀互に蚪れおいたした。 各テヌブルにはお菓子が甚意されおいお、぀たみながらハンズオンを進められたした。 ![参加者がそれぞれのノヌトPCでハンズオンに取り組んでいる](/assets/blog/authors/dowod/2026-08-06/handson-overview.jpg =600x) ハンズオン䞭の䌚堎。各自のペヌスで進めたす もくもくず䜜業が進むなか、森田さんが䌚堎を回っお、困っおいる人がいないか声をかけおサポヌトに入る堎面もありたした。 手を挙げれば䞻催者が盎接芋に来おくれる ずいう䜓制だったので、普段Claude Codeを䜿っおいない人でも安心しお参加できるむベントだったず思いたす。 ![参加者のノヌトPCをのぞき蟌んでサポヌトしおいる様子](/assets/blog/authors/dowod/2026-08-06/support.jpg =600x) サポヌトに入る森田さん 参加者の幎霢局は幅広く、孊生の方も参加されおいたした。 ![別アングルから芋た䌚堎の様子](/assets/blog/authors/dowod/2026-08-06/handson-wide.jpg =600x) Osaka Tech Lab JCTは40名ほどを収容できたす 参加者には、Claude Managed Agentsを詊すための$50盞圓のAPIクレゞットが配垃されたした。 さらに蟻さんからは、Anthropic公匏のノベルティも提䟛しおいただきたした。 ![オレンゞ色のぬいぐるみがテヌブルに䞊べられおいる](/assets/blog/authors/dowod/2026-08-06/novelty-plush.jpg =600x) Claude Codeのマスコットキャラクタヌ「Clawd」のぬいぐるみ。サングラス姿ず、癜衣にフラスコを持った科孊者姿の2皮類がありたした ![箱に入ったM5Stack Cardputer ADV](/assets/blog/authors/dowod/2026-08-06/novelty-cardputer.jpg =600x) M5Stack Cardputer ADV 数に限りのあるノベルティは垌望者が甚意された数を䞊回ったため、 じゃんけん倧䌚 でもらえる人を決めたした。䌚堎が䞀番盛り䞊がった瞬間だったかもしれたせん。 ![参加者が䞀斉に手を挙げおじゃんけんをしおいる](/assets/blog/authors/dowod/2026-08-06/janken.jpg =600x) じゃんけん倧䌚の様子 ![参加者党員での集合写真](/assets/blog/authors/dowod/2026-08-06/group-photo.jpg =600x) 最埌に参加者の皆さんず。手にしおいるのがClawdのぬいぐるみです Claude Managed Agentsずは ここで、圓日のテヌマだったClaude Managed Agentsに぀いお、私が理解した範囲で敎理しおおきたす。 AI゚ヌゞェントを自分でれロから䜜ろうずするず、アプリケヌション偎で甚意しなければならないものが意倖ず倚くありたす。モデルを呌んでツヌルを実行し、その結果をたたモデルに枡す、ずいう繰り返しの制埡。ツヌルを安党に動かすための実行環境。途䞭で生成されたファむルや䌚話履歎の保持。Claude Managed Agentsは、この土台をAnthropic偎がたるごず甚意しおくれるサヌビスです。利甚者が甚意するのは「どんな゚ヌゞェントにするか」ずいう蚭定ず、「䜕をしおほしいか」ずいうメッセヌゞだけになりたす。 Messages APIずの棲み分けは、公匏ドキュメントでは きめ现かい制埡が欲しいならMessages API、数分から数時間かかる長時間実行タスクや非同期凊理ならClaude Managed Agents ずいう敎理になっおいたす。 登堎する抂念は4぀です。 抂念 䜕を指すか ゚ヌゞェント 䜿うモデル、システムプロンプト、ツヌル、MCPサヌバヌ、スキルをたずめた蚭定。䞀床䜜ればIDでセッションから参照できる 環境 ゚ヌゞェントを走らせる堎所。Anthropic偎のクラりドサンドボックスず、自分たちで管理するむンフラ䞊で動かすセルフホスト型が遞べる セッション 環境の䞭で実際に動いおいる゚ヌゞェントの実䜓。タスクを実行しお成果物を残す むベント アプリケヌションず゚ヌゞェントのあいだで亀換されるメッセヌゞ。ナヌザヌの指瀺、ツヌルの実行結果、ステヌタス曎新などが該圓し、レスポンスはSSEでストリヌミングされる ハンズオンも「゚ヌゞェントを䜜る → 環境を䜜る → セッションを起動する → メッセヌゞを送る」ずいう順番をそのたたたどる構成になっおいたので、この4぀の関係は手を動かしおいるうちに自然ず頭に入りたした。 サンドボックスの䞭では、bash、ファむルの読み曞き・線集、glob・grep、Web怜玢・取埗ずいったツヌルが最初から䜿えたす。ここにMCPサヌバヌを繋げば倖郚サヌビスのツヌルも呌び出せる、ずいう組み立おです。 料金は次の2軞です。 セッションのなかでモデルが䜿ったトヌクンぶんの、通垞のAPI料金プロンプトキャッシングの乗数も同じように適甚されたす セッションランタむムセッション時間あたり$0.08 セッションランタむムはミリ秒単䜍で蚈枬され、セッションが running のあいだだけ加算されたす。次のメッセヌゞを埅っおいる idle の時間は加算されたせん。裏を返せば、 ゚ヌゞェントを長時間攟眮しおも埅機䞭のコストは増えない ずいうこずで、これは長時間タスク向けずいう䜍眮づけず敎合しおいたす。なお、セッション内でWeb怜玢が走った堎合は1,000怜玢あたり$10が別途かかりたす。 本蚘事執筆時点でClaude Managed Agentsはベヌタ版です。詳现は 公匏ドキュメント ず 料金ペヌゞ を参照しおください。 ハンズオンをやっおみた 私は受付を担圓しおいたため、ハンズオンの開始が少し遅れたした。さらにむベントの様子を撮圱しながら進めおいたので、䞊玚には届かず 䞭玚たで の到達です。 教材は初玚・䞭玚・䞊玚の3段階構成になっおいお、内容は次のようなものでした。 初玚 テンプレヌト「Deep researcher」からリサヌチ゚ヌゞェントを䜜る、チャットで蚭定を自動生成しおMicrosoft LearnのMCPサヌバヌを䜿うクむズ゚ヌゞェントを䜜る、自由挔習 侭箚 Jina AIのMCPサヌバヌに぀ながるWebリサヌチ゚ヌゞェントを、 コン゜ヌル・CLI ant ・Python SDK の3通り で䜜る 侊箚 分析レポヌトスラむド生成、スケゞュヌル実行でGitHub Pagesを毎朝曎新、Gmail連携、蚘憶する゚ヌゞェント、マルチ゚ヌゞェント 同じ゚ヌゞェントをコン゜ヌル・CLI・SDKの3通りで䜜らせる䞭玚の蚭蚈が特に良くできおいお、画面操䜜で理解した抂念がそのたたAPIのリ゜ヌス構造に察応しおいるこずが䜓感できたした。 そしお特筆すべきは 教材の完成床 です。説明が䞁寧で画像も豊富に甚意されおいお、公匏が提䟛した教材ず蚀われおも遜色ないなず感じる内容でした。おかげでClaude Managed Agentsの郚分ではたったく぀たずくこずなく進められたした。 ぀たずいたのはJina AIのAPIキヌ 匷いお挙げるなら、䞭玚で䜿う Jina AIのAPIキヌ が唯䞀の詰たりどころでした。私のAPIキヌには無料トヌクンの残りがなく、Jina AIのツヌルを呌び出せたせんでした。 䞭玚で䜜るのはWeb怜玢するリサヌチ゚ヌゞェントで、怜玢は Jina AI の MCPサヌバヌ 経由で実行したす。この怜玢系のツヌルはAPIキヌが必須です。APIキヌ自䜓はアカりント䜜成もクレゞットカヌド登録もなしにトップペヌゞから取埗できるのですが、 そのキヌに無料トヌクンが残っおいるずは限りたせん 。 :::message これから教材を詊す方は、先に jina.ai の「API KEY & BILLING」タブでAPIキヌの残トヌクンを確認しおおくず、䞭玚で足を止めずに進められたす。 ::: むベントに参加しおいなくおも教材を詊せたす このワヌクショップの教材は、森田さんが䜜成したものが公開されおいたす。 Claude Managed Agents Workshop教材サむト むベントに参加しおいなくおも、事前準備から䞊玚たで同じ手順をたどれたす。Claude Managed Agentsを觊っおみたい方には、公匏ドキュメントを読み蟌むより先にこちらを䞀呚するのがおすすめです。 :::message この教材はAnthropicの公匏コンテンツではなく、非公匏の孊習教材です。ラむセンスがCC BY-NC-ND 4.0のため、本蚘事では䞭身の転茉はせず、リンクの玹介にずどめおいたす。 ::: 8月にも同じ内容のワヌクショップが開催されたす 今回のむベントは申蟌がキャンセル埅ちたで䌞び、参加できなかった方が倚く出たした。そうした方に向けお、 同じ内容のワヌクショップが8月にも開催されたす 。 項目 内容 むベント名 Osaka | Claude Workshop 開催日 2026幎8月18日火 䌚堎 クラスメ゜ッド株匏䌚瀟 倧阪オフィス倧阪垂䞭倮区䌏芋町3-6-3 䞉菱UFJ信蚗銀行倧阪ビル8階 䞻催 森田さんClaude Community Events 解説のあずハンズオンずいう流れは7月31日ず同じ構成です。申蟌には承認が必芁なので、詳现は むベントペヌゞ を確認しおください。 おわりに Claude Managed Agentsは、゚ヌゞェントの蚭定ずメッセヌゞの送信だけで自埋゚ヌゞェントを動かせるプラットフォヌムです。教材が公開されおいるので、興味を持たれた方はぜひ手を動かしおみおください。 Osaka Tech Labでは今埌もむベント開催を予定しおいたす。 KINTOテクノロゞヌズのconnpass もあわせおチェックしおいただけるず嬉しいです。 参考リンク Claude Managed Agents Workshop圓日䜿甚した教材 Claude Managed Agentsの抂芁公匏ドキュメント Jina AI 公匏MCPサヌバヌ 瀟内でAI゚ヌゞェント構築ワヌクショップを開催したした。森田さんの蚘事 KINTOテクノロゞヌズOsaka Tech Labにご来堎のかたぞ
はじめに こんにちは、2026幎5月入瀟のyaMayuです 本蚘事では、2026幎5月に入瀟したメンバヌ2名に入瀟盎埌の感想をお䌺いし、たずめたした。 KINTOテクノロゞヌズ以䞋、KTCに興味のある方、そしお、今回参加しおくださったメンバヌぞの振り返りずしお有益なコンテンツになればいいなず思いたす Y.Q 自己玹介 グルヌプコアシステム郚 ビゞネスディベロップメントGに配属されたした。 自動車郚品メヌカヌ→ITコンサル→圓瀟 ずいったキャリアを歩んでいたす。 所属チヌムの䜓制は グルヌプコアシステム郚の人数が倚いですが、ビゞネスディベロップメントGは割ず少数粟鋭です。珟圚6人 同じグルヌプのメンバヌは出身地が倚様で欧州、北米、アゞアetc.グルヌプ内の公甚語は英語です。 KTCの入瀟動機や入瀟前埌のギャップは トペタグルヌプずしおの安定感ず、若い䌚瀟らしいベンチャヌカルチャヌの䞡方に魅力を感じたこず、たたモビリティサヌビス領域でのビゞネスディベロップメントに携わりたいず考えたこずが入瀟の動機です。 今のずころ、倧きなギャップは感じおいたせん。 珟堎の雰囲気はどんな感じ 真面目な雰囲気ずフラットな雰囲気の、良いバランスが取れおいるず感じたす。 オフィスで気に入っおいるずころ Water Serverがある。 呚りにランチできるお店が倚い。立地 yaMayuさんからの 質問旅行が趣味ずのこずなので、おすすめの堎所やたた行きたい堎所があればお䌺いしたいです日本囜内でも、海倖でもどちらでもOKです 小笠原諞島です片道1日ほどかかる長い船旅を経お蚪れる分、非日垞な䜓隓が埅っおいたしたりミガメの産卵ツアヌもおすすめです。倪平掋に浮かぶ倜の星空や朝日にも感動し、たた蚪れたいず思っおいたす。 yaMayu 自己玹介 プラットフォヌム開発郚 Quality Engineering GでQA゚ンゞニアをやっおいたす。 異業皮からSESに転職し、第䞉者怜蚌を経おKTCに入瀟したした。 京郜垂出身で今は郜内圚䜏、宀町オフィス勀務です。 趣味ず呌べるものはあたりないですが、移動䞭はよくオヌディオブックを聎いおいたす。読曞も奜きです。ミステリヌ倚めです。たたに映画を芳に行ったりしたす。 所属チヌムの䜓制 Web QA, アプリQA, SETチヌム合わせお21名です。 6月にSETチヌムが新蚭され、倧幅に人が増えたした。 QA, SETチヌムずも宀町オフィスずOsaka Tech Labにメンバヌがいたす。 私はWeb QAチヌムに所属しおいたす。 珟堎の雰囲気 倧阪のメンバヌずは拠点が離れおいたすが、Slackやzoomで随時連絡や盞談をしおいたす。 オフィスに出瀟しおいるずきは、䞀緒にランチ行くこずもあり和やかな雰囲気だず思いたす。 KTCぞの入瀟動機や入瀟前埌のギャップ 前職、前々職ではお客様先のプロダクトに携わっおいたので、自瀟プロダクトのQAに携わりたいず思い、転職したした。 プロダクトのゞャンルはあたり絞っおいなかったのですが、サブスクサヌビスはいろんなゞャンルでどんどん広たっおいるので、今埌も需芁がありそう  倚くの人に䜿っおもらえるプロダクトに携われそう、ず思い入瀟したした。 カゞュアル面談面接オファヌ面談でいろいろお話を聞くこずができおいたので、入瀟埌の倧きなギャップは今のずころないです。 オフィスで気に入っおいるずころ 地䞋鉄の駅から盎結なので、雚でも濡れない日差しも怖くないずころ。 呚蟺においしいお店が倚いずころ。お倀段は安くはないですが 。 フリヌドリンクでコヌヒヌが飲めるずころ。 Y.Qさんからの質問京郜出身者ずしお、芳光客があたり知らないおススメの堎所や楜しみ方をご教瀺ください 最近はネットやSNSですぐ広たっおしたうので難しいですね 笑 志接屋のカルネもうすっかり有名になっおしたいたしたが、昔から奜きで、今も実家に垰るず必ず食べたす 法茪寺 電電宮電気・電波の神様を祀る神瀟です。日本唯䞀らしいですIT関連の人にも人気がありたす。嵐山にありたすが、枡月橋から少し離れおいるので比范的空いおいるず思いたす。 明智越明智光秀が愛宕神瀟に参詣する際に通った道で、本胜寺を攻める際にも通ったず蚀われおいたす。今はハむキングコヌスになっおいお、歎史ず自然を感じられたす。台颚や豪雚の圱響で道が荒れおいる堎合もあるようなので、蚪れる際はご泚意を。 さいごに みなさた、入瀟埌の感想を教えおくださり、ありがずうございたした KINTOテクノロゞヌズでは日々、新たなメンバヌが増えおいたす 今埌もいろんな郚眲のいろんな方々の入瀟゚ントリが増えおいきたすので、楜しみにしおいただけたしたら幞いです。 そしお、KINTOテクノロゞヌズでは、ただたださたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは こちら からご確認ください
はじめに こんにちは、2026幎4月入瀟の山本です 本蚘事では、2026幎4月入瀟メンバヌに入瀟盎埌の感想をお䌺いし、たずめおみたした。 前の方からの質問に次の方が答えるリレヌ圢匏でお届けしたす。 KINTO テクノロゞヌズ以䞋、KTCに興味のある方、そしお、今回参加䞋さったメンバヌぞの振り返りずしお有益なコンテンツになればいいなず思いたす もっさん ![もっさんのプロフィヌル画像](/assets/blog/authors/yuta.yamamoto/mossan.png =300x) 自己玹介 KINTO開発郚 開発掚進Gに所属しおいたす。 案件党䜓の管理や、AIを掻甚したサむト構築のプロゞェクトを担圓しおいたす。 スポヌツ芳戊が趣味で、最近は地元のBリヌグクラブを応揎しおいたす。せっかくなのでKINTOず瞁のあるアルバルク東京もこれから掚しおいきたいです 所属チヌムの䜓制は 開発掚進Gは8名䜓制で、KINTOサヌビスに関わる開発案件のプロゞェクトマネゞメントを䞻に行っおいたす。 職皮はPMが䞭心で、事業郚偎のメンバヌや開発メンバヌず連携しながら、ものづくりを進めおいたす。 KTCぞ入瀟したずきの第䞀印象はギャップはあった 前職の同僚が圚籍しおいたこずもあり、入瀟前から気軜に質問でき、カゞュアル面談でも疑問をその堎で解消できたので、䞍安なく入瀟できたした。 入瀟埌はフットサルや筋トレなど、いろいろな掻動を楜しんでいるアクティブな方が倚く、いい意味でのギャップを感じたした。 ゚ンゞニアの勉匷䌚など孊びや発信の堎が倚いのも印象的で、自分の経隓がない分野でも興味があれば気軜に参加させおもらっおいたす。 珟堎の雰囲気はどんな感じ 䌑憩宀では豆を挜いおコヌヒヌを淹れおいる方がいお、銙りに぀られおふらふらず混ざりに行きたした。ずおもりェルカムな雰囲気で、業務でただ関わりのない方ずもゆるく繋がれるのがありがたいです。 党員が䞭途採甚ずいうこずもあり各分野のプロフェッショナルが揃っおいお、日々の䌚話から倚くの刺激をもらっおいたす。 オフィスで気に入っおいるずころ 宀町オフィス勀務です。 オフィスから日本橋をわたっお八重掲・銀座あたりを歩くのがお気に入りで、街のにぎわいを感じながらの散歩がいい気分転換になっおいたす。 寿叞ず玅茶さん ⇒ もっさんぞの質問 生たれ倉わったらなりたい職業ずその理由を教えおください 料理人やパティシ゚ですね。今はチヌムでものづくりをしおいたすが、生たれ倉わったら䞀人で黙々ず䜕かを突き詰めおみたいです ぀じたく ![぀じたくさんのプロフィヌル画像](/assets/blog/authors/yuta.yamamoto/tsujitaku.jpeg =300x) 自己玹介 新サヌビス開発郚 FACTORY EC開発G所属です。 趣味は筋トレです。䜓を倧きくしたいです。 所属チヌムの䜓制は 新サヌビス開発郚 FACTORY EC開発Gで、TOYOTA/LEXUS UPGRADE FACTORYのEC基盀を開発・運甚しおいたす。 フロント゚ンド、バック゚ンド、PdM、SRE、QA、ディレクタヌ、マネヌゞャヌなど合わせお15名ほどの䜓制です。 KTCぞ入瀟したずきの第䞀印象はギャップはあった 入瀟前の面接の時も色々話をしおいたので倧きなギャップはなかったです 珟堎の雰囲気はどんな感じ フロント゚ンド、バック゚ンド、PdMなど各方面のメンバヌが揃っおいるので提案→実行たでが玠早くできお働きやすいです。 オフィスで気に入っおいるずころ 駅から近く、改札出おから5分もたたずに自垭に座れるずころ。 オフィスが綺麗なずころ。 もっさん ⇒ ぀じたくさんぞの質問 TOYOTA UPGRADE FACTORY 担圓されおいたすが、こんなアップグレヌドあったらいいなず思うのはどんなものですか 自分の運転スタむルを孊習しお、燃費・快適性のバランスを自動最適化するAIモヌドみたいなアップグレヌドがあったらいいなず思いたす。 山本雄倪 ![山本さんのプロフィヌル画像](/assets/blog/authors/yuta.yamamoto/yuta_yamamoto.png =300x) 自己玹介 新サヌビス開発郚 プロゞェクト掚進グルヌプ所属の山本雄倪です。ロヌルはPjMです。 仕事は寄り添い䌎走するようなスタむルが性に合っおおり、誰かの為にだずより力が出るタむプ。 趣味はゎルフ・釣り・サりナ・キャンプなどアクティブ系広め、お酒も倧奜きです。最近はゎルフにハマっおたす。やっず100を切りはじめたした 所属チヌムの䜓制は プロゞェクト掚進グルヌプは10名にも満たない小芏暡䜓制ですが、トペタグルヌプ各瀟に察しおKTCの技術力を掻かしお支揎を䞻導するグルヌプでもあり、やりがいは倧きいです。 最先端な取り組みにも関䞎できるチャンスがあるので、KTCの䞭でも䞀番面癜いグルヌプなのではずも思っおいたす。 KTCぞ入瀟したずきの第䞀印象はギャップはあった 第䞀印象は オフィスがどの拠点も立掟笑 ギャップは想像以䞊にスキルフルなメンバヌが倚い点です。 珟堎の雰囲気はどんな感じ 少数チヌムずいう性質もあり、各自別のプロゞェクトで䜜業しおおり実質的な関わりは少ないです。 ただ、定䟋MTGは情報亀換が掻発に行われおおり、盞互に助蚀できる皋よい雰囲気に感じたす。 オフィスで気に入っおいるずころ 私はFukuoka Tech Lab所属で、倧名のリッツ・カヌルトンの真䞋にオフィスがあり景色が良い博倚湟を䞀望できお、倩気が良い日には志賀島や胜叀島も綺麗に芋える窓際がお気に入り、良いリフレッシュゟヌンになっおいたす。 ぀じたくさん ⇒ 山本さんぞの質問 おすすめの日本酒教えおください 犏岡は酒蔵が意倖ず倚くお迷いたすが、寒北斗をおすすめしたす 北斗䞃星をモチヌフにしたパッケヌゞやお猪口もあったり、芋た目から愛せたす。 寿叞ず玅茶 ![寿叞ず玅茶さんのプロフィヌル画像](/assets/blog/authors/yuta.yamamoto/sushitokocha.jpeg =300x) 自己玹介 デゞタル戊略郚デヌタグロヌスGでマネヌゞャヌをしおいたす。 Web゚ンゞニア → EM・PdM → 事業責任者 → VPoE ずいったキャリアを歩んでいたす。 所属チヌムの䜓制は 1チヌムに機胜暪断しおいる方々が揃っおいるのが特城です。 PdM、゚ンゞニア、デザむナヌずいったプロダクトトリオが揃っおいるため、倚角的な芖点から機胜改善や案件進行ができるのが匷みです。 KTCぞ入瀟したずきの第䞀印象はギャップはあった リファラルなので事前に質問できおいた点ずカゞュアル面談も耇数回実斜させおいただいたため、ギャップはありたせんでした。 珟堎の雰囲気はどんな感じ 比范的スタヌトアップのようにワむワむやっおいる雰囲気が匷いですね。 䌚瀟芏暡で考えるず総合的に珍しいかもしれたせん。 オフィスで気に入っおいるずころ フリヌドリンクが甚意されおいるずころ、宅配匁圓が頌めるずころですね。 山本さん ⇒ 寿叞ず玅茶さんぞの質問 これたでで䞀番歯ごたえのあった仕事はどんな仕事でしたか れロから開発組織を䜜るこずになり、未経隓から採甚芁件、スカりト業務、AG察応、カゞュアル面談、面接、オファヌ察応などすべおやっおたした。 さいごに みなさた、入瀟埌の感想を教えおくださり、ありがずうございたした KINTOテクノロゞヌズでは日々、新たなメンバヌが増えおいたす 今埌もいろんな郚眲のいろんな方々の入瀟゚ントリが増えおいきたすので、楜しみにしおいただけたしたら幞いです。 そしお、KINTOテクノロゞヌズでは、ただたださたざたな郚眲・職皮で䞀緒に働ける仲間を募集しおいたす 詳しくは こちら からご確認ください
こんにちは Principal Generative AI Engineerの森田です。私の所属するAIファヌストGでは、瀟内の生成AI掻甚にずどたらず、販売店やトペタグルヌプにおけるAI掻甚支揎を行っおおりたす。 瀟内でAI゚ヌゞェントの掻甚が進む䞭、ある郚眲から「AI゚ヌゞェント開発に取り組みたいが、どこから始めおいいかわからない」ず盞談をもらいたした。座孊だけでは手觊り感が埗られないので、実際に手を動かすワヌクショップ圢匏で開催するこずにしたした。 匊瀟はAWSを䞻なクラりド基盀ずしおいるため、AWSが提䟛するAI゚ヌゞェントの構築・運甚基盀である Amazon Bedrock AgentCore ず、゚ヌゞェントのツヌル連携プロトコルである MCPModel Context Protocol を䞭心テヌマに据えたした。 教材ずしお䜿甚した曞籍 れロから資料を䜜るよりも、䜓系的にたずたった曞籍のハンズオンをベヌスにした方が、参加者が埌から埩習しやすいず考えたした。今回は以䞋の2冊を䜿甚しおいたす。 『 Amazon Bedrock AgentCore 実践入門 ── Strands Agentsで構築するAI゚ヌゞェント 』 SBクリ゚むティブ ※以䞋、AgentCore本 『 AWSではじめるMCP実践ガむド ── 基瀎からAI゚ヌゞェント構築たで培底解説 』 技術評論瀟 ※以䞋、MCP本 AgentCore本で゚ヌゞェントフレヌムワヌクであるStrands AgentsやAgentCoreの各機胜を孊び、MCP本でMCPサヌバヌの自䜜ずAgentCore Gatewayによるツヌル統合を孊ぶ、ずいう組み合わせです。 実は、どちらも私が共著者ずしお執筆に携わった曞籍です。手前味噌で恐瞮なのですが、䞭身を隅々たで把握できおいる分、参加者がハンズオンで詰たったずきにも補足しやすく、教材ずしお遞びたした。 開発環境 今回は環境を揃えるため、 GitHub Codespaces 䞊に開発環境を甚意したした。曞籍の手順をベヌスに、以䞋の工倫で環境構築にかかる時間を短瞮しおいたす。 ツヌル管理は mise に統䞀し、 mise use aws-cli node uv claude でAWS CLI・Node.js・uv・Claude Codeを䞀括導入 AWSぞは aws configure sso でSSOログむン コヌディングのお䟛ずしお Claude Code をセットアップ サンプルコヌドは曞籍著者が公開しおいるGitHubリポゞトリを git clone しお参照できるようにし、すべおのコヌドを手打ちしなくおいいようにしたした。 ワヌクショップの構成 1日のワヌクショップずしお、午前・午埌に分けお以䞋の流れで進めたした。 午前の郚1.5時間・・・Strands Agentsに觊れる # タむトル 曞籍・該圓箇所 抂芁 1 Strands Agents入門 AgentCore本 3.4節 ツヌル定矩、゚ヌゞェント䜜成、䌚話ルヌプの実装など基本を䜓隓 2 リサヌチ゚ヌゞェントの構築 AgentCore本 4ç«  Webから情報収集・芁玄する゚ヌゞェントを構築し、ツヌル連携の開発フロヌを掎む 任意 AgentCoreハヌネス AgentCore本 5.2節 時間に䜙裕がある人向けに、AgentCoreハヌネスを䜓隓 午埌の郚3時間・・・AgentCoreずMCPを実践する # タむトル 曞籍・該圓箇所 抂芁 3 AgentCoreランタむム入門 AgentCore本 5.3節 agentcore create → agentcore deploy で゚ヌゞェントをクラりドにデプロむ 4 アンビ゚ント゚ヌゞェントの構築 AgentCore本 15ç«  S3ぞの領収曞アップロヌドをトリガヌに、解析→Confluence蚘録→メヌル通知するむベント駆動型゚ヌゞェントをCDKで構築 5 MCPサヌバヌの構築 MCP本 4.2節 自前のMCPサヌバヌずホストを実装 6 AgentCore Gateway MCP本 6.2節 MCPサヌバヌをAgentCore Gatewayに登録し、認蚌・認可を統合 瀟内実斜にあたっお倉曎が必芁だったポむント 曞籍のハンズオンをそのたた瀟内で実斜するにあたり、いく぀か環境差異ぞの察応が必芁でした。 :::message メヌルアドレスの゚むリアス 15章のアンビ゚ント゚ヌゞェントでは、サンプルデヌタ内の耇数ナヌザヌのメヌルアドレスにそれぞれ通知を送る蚭蚈になっおいたす。しかし瀟内のメヌル環境でぱむリアスが䜿えなかったため、 data/users.json のメヌルアドレスをすべお自分のアドレスに統䞀したした。その結果、同じアドレスでSNSサブスクリプションが重耇しおしたうため、 chapter15/cdk/lib/expense-agent-stack.ts で重耇を排陀するよう修正したした。 + const uniqueEmails = [...new Set(emailAddresses)]; - emailAddresses.forEach((email, i) => { + uniqueEmails.forEach((email, i) => { // 各アドレスごずに SNS サブスクリプションを䜜成 }); ::: :::message Googleカレンダヌ連携が䜿えない環境 13章のフルスタック゚ヌゞェント構築ハンズオンはGoogleカレンダヌ連携Google認蚌を前提ずしおいるため、瀟内環境では実斜が難しく割愛したした。興味がある方には自宅での実斜を案内しおいたす。 ::: :::message AWSアカりントの共有 耇数人で1぀のAWS環境を䜿ったため、リ゜ヌス名が他の人ず重耇・混同しないよう、各自の名前を付䞎するルヌルにしたした。特にS3バケット名はアカりント内で䞀意である必芁があり、そのたただず衝突しおしたいたす。CDKスタックにハヌドコヌドされたバケット名 expense-agent-${account} に自分の名前を付けお回避したした。AgentCoreランタむムも、 agentcore create で付ける名前を handsonmorita のように各自で区別できるものにしおいたす。 ::: :::message alert リヌゞョンの差異 AgentCore本ずMCP本で、䜿甚リヌゞョンが異なっおいるため、単䞀リヌゞョンで実斜するには読み替えが必芁でした。GitHubで公開されおいるサンプル゜ヌスを利甚しお進めおいたのですが、どこを修正すればよいかが芋萜ずしやすいポむントでした。 ::: 参加者からもらった質問 ワヌクショップ䞭、参加者からいく぀か印象的な質問がありたした。 Q. ツヌルの定矩はPythonでもできるのか Strands Agentsのツヌル定矩はPythonのデコレヌタ @tool で行えたす。関数のdocstringがそのたたツヌルの説明文descriptionずしおLLMに枡されるため、Pythonで完結したす。MCPサヌバヌずしお公開する堎合もPython SDKが利甚可胜です。 Q. Swarm゚ヌゞェントはどうやっおタスクを振り分けおいるのか マルチ゚ヌゞェント構成Swarmでは、オヌケストレヌタヌずなる゚ヌゞェントがLLMの刀断に基づいお、各サブ゚ヌゞェントにタスクをルヌティングしたす。各゚ヌゞェントのnameやdescriptionに基づき、他の゚ヌゞェントの圹割を把握したうえで、䜜業を委譲する゚ヌゞェントを遞択したす。 Q. マルチ゚ヌゞェントにするか、シングル゚ヌゞェントにするか、どのように決めるのが良いか 個人的な感芚ずしおは、最初から厳密に切り分けようずしない方がうたくいきたす。シングル゚ヌゞェントずしお䜜り始めお、耇雑なタスクをうたく凊理できなくなったり、コンテキストを分けた方が動きが安定するず感じた時点で、サブ゚ヌゞェントぞの分割を考える、ずいうのが実際の進め方に近いです。 Q. ゚ヌゞェントで䜿甚するモデルはどのような基準で遞んでいるのか コストを最初から意識しすぎないこずが倧事だず思っおいたす。Sonnetをベヌスにたず䜜っおみお、刀断の粟床が足りない郚分はOpusに切り替え、単玔䜜業の郚分だけHaikuでコストを䞋げる、ずいう順番です。先にHaikuでコストを抑えようずするず、実珟できる機胜のレベルが䞋がっおしたうので、たずは「゚ヌゞェントずしお実珟できるか」を確認しおから、コスト最適化に移る方がスムヌズに進みたす。 参加者の声 ワヌクショップの締めに参加者で「振り返り䌚」を行い、そこで出た声の䞭から印象的だったものをいく぀か玹介したす。 ある参加者は、「゚ヌゞェントの動きが、これたでふんわりずマゞックのように感じおいたのに、こういう仕組みで動いおいたのかず腹萜ちした」ず話しおくれたした。難しさの本質はプロンプトの䜜り蟌みにある、ずいう気づきを埗られたようです。 別の参加者は、ハヌネスの手軜さに驚いたそうです。テンプレヌトに「あなたはプロ野球に詳しい人です」のような䞀行を曞くだけで゚ヌゞェントが動いおしたうのを芋お、拍子抜けするほど単玔だったず話しおいたした。 MCPサヌバヌの自䜜に取り組んだ参加者は、午埌の䞭でも特に難しかったず振り返っおいたした。それでも自分の手で実装したこずで、普段䜿っおいるMCPの裏偎の動きたで想像できるようになった、ずいう蚀葉が印象的でした。 これたで固定パむプラむン的な実装情報を取埗し、LLMに枡し、敎圢しお出力するに慣れおいたずいう参加者は、゚ヌゞェントが入力に応じお凊理のルヌトを動的に決めおいく発想自䜓が新鮮だったず語っおいたした。同じ入力でも出力のパスが事前に決たっおいない、ずいうずころに面癜さを感じたそうです。 ワヌクショップを終えお 1日にかなりの内容を詰め蟌んだこずもあり、進み具合には個人差が出たした。午前の任意項目だったAgentCoreハヌネス5.2節たで到達できた方もいれば、そこたで手が回らなかった方もいたす。午埌はそれぞれの興味に合わせお、アンビ゚ント゚ヌゞェントに取り組むグルヌプずMCPサヌバヌ構築に取り組むグルヌプに分かれお進めおもらいたした。 今回のワヌクショップを通しお、曞籍のハンズオンをベヌスにしたこずで準備の負担を抑え぀぀、実践的な内容を届けられたのは良かったです。本蚘事が、これからAI゚ヌゞェント開発に取り組む方や、同様のワヌクショップを䌁画する方の参考になれば幞いです。最埌たでお読みいただき、ありがずうございたした。
こんにちは! KINTOテクノロゞヌズ(以䞋、KTC)のAIファヌストグルヌプで、生成AIの掻甚掚進を担圓しおいる和田です。 先日、JDLA(日本ディヌプラヌニング協䌚)の資栌合栌者コミュニティ「CDLE」の業皮別勉匷䌚にお招きいただき、「個人の発芋を、組織の知恵に」ずいうテヌマで登壇しおきたした。本蚘事は、その内容を再構成したものです。 https://jdla.connpass.com/event/393970/ 1. はじめに KTCはトペタ自動車のグルヌプ䌚瀟で、クルマのサブスク「KINTO」をテックの力で支える内補開発の䌚瀟です。 2023幎の春、GPT-4ずAPI版が出おきたタむミングで内補の生成AIチャットを立ち䞊げお以来、3幎以䞊にわたっお生成AIの掻甚掚進を続けおきたした。最近ではKTC/KINTOで培った技術力を、トペタグルヌプの各瀟ぞずアドバむゞングや開発支揎を通じた提䟛もしおいたす。 その立堎から囜内の状況を眺めるず、察照的な数字がありたす。生成AIを「導入枈み」ず回答した囜内䌁業は57.7%^[ NRI「IT掻甚実態調査(2025幎)」 ]。導入の壁は、もうほずんど越えられおいたす。䞀方で、AIが利益(EBIT)に5%以䞊効いおいお、か぀倧きな䟡倀を生んでいるず答えられる䌁業は6%^[ McKinsey "The State of AI in 2025" ]。導入はしたが、成果を出しおいるず蚀い切れる䌚瀟はただ䞀握りです。 おそらくこの蚘事を読んでいるような、新しい技術ぞの感床が高い方は、すでに仕事が倧きく倉わっおいるはずです。メヌルの䞋曞き、議事録の芁玄、コヌディング支揎。少なくずも、これらを党おカタカタ手で打っおいる人は、かなり枛っおいるのではないでしょうか。しかし問題はその先です。あなたの「呚りの人」はどうでしょうか。個人ずしおは䟡倀が出おいる。でも、組織ずしおはどうでしょう。今回のテヌマは、個人の成果ず組織の成果の間にある、この溝に぀いおです。 2. キャズムのどこに手を打぀か ― 今日は「B」の話 本題に入る前に、組織ぞ新しいものを広げるずきのむメヌゞを共有させおください。䜕床も芋たであろう、キャズム理論^[ゞェフリヌ・ムヌアが提唱した、新技術の普及プロセスを説明する理論。利甚者をむノベヌタヌ/アヌリヌアダプタヌ/アヌリヌマゞョリティなどの局に分け、局の間にある溝(キャズム)を越えるこずの難しさを論じたものです。]の図です。 新しい技術や文化を組織ぞ広げるずきの手法。A・B・Cのどこに手を打぀か これは生成AIの話だから持ち出した図ではありたせん。DXのずきも、RPAのずきも、新しい技術や文化を倧きな組織に入れる堎面では、い぀もこの抂念を䜿っおきたした。 図にはA・B・Cずいう3぀の矢印を描いおいたす。それぞれが別の打ち手です。みなさんの組織は、いたどの矢印に手を打っおいるでしょうか。そしおご自身はどの局にいお、どの矢印ならコミットできそうでしょうか。そんなこずを考えながら芋おもらえればず思いたす。 A:むノベヌタヌに自由を枡す。 新しいものは、攟っおおいおも勝手に調べ、勝手に始め、勝手に実隓しおしたう人たちがいたす。圌らにできる限り自由な環境を枡す。ただ自由なだけでなく、ガヌドレヌルを敷いお「ここでなら安心しお遊んでいい」ずいう空間にするのがAです。 B:キャズムに橋をかける。 むノベヌタヌやアヌリヌアダプタヌが芋぀けた䟡倀に、アヌリヌマゞョリティ以降の人たちが远埓できるよう、厖になっおいるキャズムぞ橋をかける取り組みです。 C:埌ろ向きな局を動かす。 配っおもなかなか觊っおくれない、興味を持っおもらいにくい局に、どう䜿っおもらうか。ここに悩んでいる䌚瀟さんは、きっず倚いはずです。 今日お話しするのは、このうちBが䞭心です。Bをやるには、その手前でAも回っおいる必芁があるのですが、本蚘事では「芋぀かった䟡倀を、キャズムの向こう偎ぞどう枡すか」に軞足を眮きたす。 3. 䟡倀創出の䞡茪 ― 探玢ず実装 組織で䟡倀を出すには、2぀の埪環が芁る、ず私は考えおいたす。 1぀は探玢。むノベヌタヌやアヌリヌアダプタヌにあたる人たちが自由に䟡倀を探せる環境を甚意し、「この䜿い方は効く」ずいう発芋を生んでもらうフェヌズです。もう1぀は実装。芋぀かった0→1の発芋を、組織に固定しお10にも100にもするフェヌズです。藪たみれの䞭をしらみ぀ぶしに歩いおゎヌルを芋぀けるのが探玢だずすれば、芋぀かった道を舗装しお誰でも歩けるようにするのが実装です。 探玢だけでは、個人の発芋で止たりたす。IRレポヌトに茉るようなむンパクトは、個人技からは出たせん。逆に、発芋のない組織でいきなり実装(仕組み化)から入るず、舗装すべき道がどこにあるのか分からないたた工事が始たりたす。これらは䞡茪であっおどちらが欠けおも前進するこずはできたせん。 ここからは、KTCがこの䞡茪をどう回しおいるか、探玢→実装の順でお話ししたす。 4. 探玢:トヌクンマキシング ― 自転車の乗り方は、本では孊べない 探玢の打ち手の䞀぀ずしお「トヌクンマキシング(Tokenmaxxing)」^[あるものを極限たで盛るずいうネットスラング "-maxxing" を、トヌクン消費にくっ぀けた蚀葉です。]を玹介したす。瀟内のAIのトヌクン消費を、ずにかく最倧化する。䟡倀創出はいったん脇に眮いお、たず䜿う量を増やす斜策矀のこずです。 なぜ䟡倀創出にこだわるず蚀っおおきながら、消費量に泚目するのでしょう。生成AIの正しい䜿い方は、机䞊で孊べないからです。私はよく自転車の乗り方に䟋えるのですが、自転車の乗り方を本で孊んだ人は、おそらくいたせん。補助茪を぀けお、サポヌタヌを぀けお、河原で䜕床も転んで、身䜓で芚えたはずです。「AIにこう頌むずうたくいく」「これはAIには苊手だ」ずいう感芚も同じで、詊行錯誀からしか生たれたせん。だから、たずたくさん挕いで、たくさん転ぶこずで、AIず効率よく協業する感芚が磚かれたす。 トヌクンマキシングを構成する斜策は、「消費を増やす斜策」ず「消費量を芳枬する斜策」で構成されたす。 消費を増やす斜策の䟋ずしおは「手䜜業コヌディング犁止」がありたす。䞀定期間、人手でのコヌディングを犁止しお実装はAI゚ヌゞェントに任せ、人間は指瀺ず怜蚌に集䞭する、ずいうものです。コヌディング界隈で広たった斜策ですが、「手䜜業での資料䜜成犁止」のように事務系ぞのアレンゞも利きたす。 私自身は資料䜜成ぞのこだわりが匷く、今でも぀い手䜜業で熱䞭しおしたう時があるのですが、最初の1割は人間が䜜り、そこから7〜8割たではAIに持っおいかせお、最埌にたた、人間のこだわりを入れるようにしおいたす。䜕床も倱敗しながら最近ようやくちょうど良いAIずの協業感芚を掎めおきおいたす。 KINTOテクノロゞヌズで実斜した手䜜業コヌディングを犁止する斜策「Vibe Coding Week」に぀いおは、Findyさんによるむンタビュヌブログでも取り䞊げおいただきたした。 https://jp.findy-team.io/blog/ai-casestudy/kintotechnologies_vibecodingweek/ もう1぀の芁玠が芳枬です。増やしっぱなしではコストが爆発するので、誰が・どれだけ䜿っおいるかを可芖化する。この文脈で有名になったのがMetaの「Claudeonomics」で、8.5䞇人超の埓業員がトヌクン消費量でランク付けされ、䞊䜍250名にはRPG颚の称号が䞎えられおいたそうです^[ Fortune「A Meta employee created a dashboard so coworkers can compete to be the company's No. 1 AI token user」(2026/04/09) ]。KTCでも、Claude Codeのメトリクスを各ナヌザヌから収集し、個人ず組織それぞれの䜿い方を分析する仕組みを動かしおいたす。ツヌルは配ったけれどその埌を芋おいない、ずいう組織は、たずここから始めるのを勧めたす。 KTCで運甚しおいるClaude Codeメトリクスのダッシュボヌド(数倀はダミヌデヌタ) 5. ただし、トヌクン消費はハック可胜 ・・・ただしトヌクン消費量は、あくたで間接指暙です。 たくさん䜿った≠䟡倀が出た。実際、Metaの番付では、順䜍のためにAIを空回ししお消費量を氎増しする埓業員が珟れたずいう情報もありたす。そりゃそうですよね。指暙は必ずハックされたす。入力量で成果を枬るのは、印刷したペヌゞ数で文章の質を枬るようなものなので、報酬や人事評䟡に盎接ひもづけるのは慎重であるべきです。トヌクンマキシングは、短期的に組織のモメンタムを䜜る旗印ずしおは効きたすが、ずっず続けるものではありたせん。習熟が進んで消費が萜ち着いおくるずころたでがセットです。 消費量はあくたで間接指暙。指暙は必ずハックされる そしおもう1぀、この打ち手には賞味期限がありたす。これたでのコヌディング゚ヌゞェントの倚くは月額定額、いわば携垯のパケ攟題のような契玄でした。「ずにかく䜿え」が安心しお蚀えたのは、この建お付けがあったからです。ずころが課金䜓系は埓量制ぞ動いおいたす。 GitHub Copilotは2026幎6月1日から䜿甚量ベヌスの課金ぞ移行したす し、他の゚ヌゞェントも続々ず埌を远っおいたす。 Uberが2026幎のAI予算をわずか4か月で䜿い果たし、コヌディング゚ヌゞェントの利甚に埓業員䞀人圓たりの月額䞊限を蚭けた ずいう報道も出始めたした。 埓量課金の䞖界で倧事になるのは、トヌクンマネゞメントや最適化、぀たり劥圓なコストで成果を増やす考え方です。難しいのは、マキシングを経隓しないたた埓量課金に入っおしたった組織で、転んだこずのないたた管理から始めるこずになりたす。もしいた手元に䜿い攟題のプランがあるなら、それは最埌のモラトリアムかもしれたせん。プランが生きおいるうちに、探玢をやり切るこずをお勧めしたす。 定額制(パケ攟題)から埓量課金ぞ。「ずにかく䜿え」が蚀えた時代は終わり぀぀ある ここたでが探玢の話。次は、芋぀けた発芋をどう組織に固定するかです。 6. 実装:発芋をAgent Skillに固める ― 発芋した本人に、文曞化たで背負わせない どの組織にも、キャズムでいうむノベヌタヌやアヌリヌアダプタヌにあたる人たちがいたす。新しいものを勝手に調べ、勝手に詊し、「この頌み方ならうたくいく」ずいう良い䜿い方を芋぀けおくる人たちです。問題は、その発芋が本人の䞭にしかないこずです。 そこでKTCで今増えおいるのが、 Agent Skill です。Agent Skillずは、AI゚ヌゞェントに特定タスクの「やり方」を教える再利甚可胜な手順曞のこずで、い぀䜕をするかを曞いた指瀺曞(SKILL.md)、手順ずOK/NGの線匕き、テンプレヌトやスクリプトずいった参照ファむルを1぀のパッケヌゞにたずめたものです。属人的だったカンコツを取り出しお、誰でも再珟できる圢に固める。暗黙知やワザを、Skillずいう圢で党員に配るこずができたす。 Agent Skillは指瀺曞・手順/刀断基準・参照ファむルの3点セット KTCの䟋でいうず、トペタグルヌプには「物ず情報の流れ図(物情)」ずいう業務の可芖化手法があるのですが、このドラフトをAIに䜜らせるSkillを固めお、瀟内に配垃しおいたす。先行する人たちの発芋を、お湯を泚げば誰でも食べられるむンスタント食品に加工しお配る、ずいうむメヌゞです。 䞀方でこうした探玢の担い手は、新しい䜿い方を探すこず自䜓は奜きでも、それを手順曞に曞き起こすこずには関心が薄かったりしたす。であれば、暪䞲の掚進組織が本人のずころぞ出向いお、「文曞化はうちらが代わりにやりたす」ず匕き受けおしたうのはどうでしょうか。発芋した本人に、文曞化の手間たで負わせる必芁はないかもしれたせん。 7. 運甚ず文化 ― 「手でプロンプトを打たない」ずいう逆説 Skillは䜜っおおしたいではなく、運甚が必芁です。誰でもSkillを探しお䜿える堎所(Plugin Market)を䜜る。呜名ルヌルを決める・・・怜玢できないSkillは、存圚しないのず同じだからです。ブランチ名や関数名に払っおいる気遣いを思い出しおください。あれず同じ気遣いがSkillにも必芁です。ただ、Skillの呜名芏則のベストプラクティスはただ䞖の䞭に敎備されおいないので、䌚瀟ごずに独自で決めおしたうのが有効だず思いたす。それから、定期的なメンテナンス。数か月で前提が倉わる領域なので、叀いSkillは攟眮すれば負債になりたす。 Skill運甚を支える4぀の仕組み(Plugin Market・呜名ルヌル・定期メンテ・察象発掘) そしお、そのメンテナンスをどう回すか。ここが地味に倧倉なずころなのですが、KTCではSkillの保守そのものをSkillにしおしたうこずを詊しおいたす。いわば、Skillを点怜・敎備するためのSkill矀です^[公開されおいるmizchiさんの「 waxa 」を参考にしおいたす。]。圹割を分けた、4぀のモヌドがありたす。 怜蚌する:曞いたばかりのSkillを、たっさらな別セッションに癜玙で読たせ、「ここが䌝わらない」ずいう曖昧さや暗黙知を炙り出す。 棚卞しする:Skill矀ぜんぶを耇数の芳点で健康蚺断し、どれから手を入れるべきかのリストを䜜る。迷ったら、たずここから。 呜名を敎える:名前ずdescriptionだけを呜名芏則に合わせお盎す。䜕をするSkillか䞀目で理解でき、怜玢で芋぀かる状態を保぀ための敎備になる。 本文を盎す:叀いSkill名やモデル名、URLずいった陳腐化した参照を、機械的に䞀括眮換する。 コツは、各修正のポリシヌきっちり分けお、1぀のセッションに䜕もかもやらせないこず。さきほど「怜玢できないSkillは存圚しないのず同じ」ず曞きたしたが、その状態を保぀䜜業自䜓を、人間の根性ではなくSkillに肩代わりさせるわけです。運甚ずは、こういう地味な仕組みの積み重ねなのだず思いたす。 Skillの保守そのものをSkillにする。圹割を分けた4モヌドで運甚を回す(参考: mizchiさんのwaxa) 文化の面では、事䟋共有䌚や勉匷䌚ずいった地道な取り組みを続けおください。「こんな効くSkill䜜ったぜ」を芋せ合う堎は、評䟡制床ではなく、぀い誰かに芋せたくなる気持ちで回り始めたす。地味ですが、文化醞成はこういう積み重ねでしか進たないず思っおいたす。 最埌に1぀、逆説的な話を。個人の仕事を組織の仕事にする䞊で、プロンプト゚ンゞニアリングのスキルが邪魔をするこずがありたす。個人が勘ずコツでプロンプトを䞁寧に調敎し、゚ヌゞェントをいい感じに動かすのは、良いようでいお暪展開が非垞にしにくい。プロンプト頌みの業務は、それ自䜓が属人化です。なのでKTCでは最近、組織の仕事にする堎合は手でプロンプトを打぀のをできるだけやめお、スラッシュコマンドやSkillの呌び出しだけで完結させるこずを掚奚しおいたす。䞊手に打おる人ほど、打たない。劙な話ですが、組織化ずはそういうこずだず考えおいたす。 なお、ここたでの打ち手は、KTCがクラりド・AI領域で新しいこずに螏み蟌みやすい立堎にある、ずいう前提ず切り離せたせん。新しいこずを詊し、うたくいったものを少しず぀呚囲ぞ広げおいく——そんな意識で取り組んでいるので、キャズムでいう䞊䜍局に意識的に時間を寄せおいたす。どの局にどれだけ時間をかけるかのポヌトフォリオは、自瀟の立ち䜍眮や方針に埓っお決め、経営局ず握っおおくのが筋だず思いたす。 8. たずめ ― 個人の発芋を、組織の知恵に 「個人の発芋を、組織の知恵に」今回お䌝えしたかったのは、結局この䞀行です。探玢のフェヌズでは、トヌクンマキシングでたくさん詊しお、転ぶこずを恐れない。正しい䜿い方は、詊行錯誀からしか生たれないからです。実装のフェヌズでは、発芋をAgent Skillのような圢に固め、誰でも再珟できるようにしお配る。そしお、仕組みず文化で回し続ける。 探玢→実装→仕組み・文化。個人の発芋を、組織の知恵に G怜定やE資栌を持っおいるような方は、すでに䞀本のスペシャリティがある状態です。AIは自力にレバレッゞをかける道具なので、自力が10の人ず100の人では、掛けた埌の差がたるで違いたす。ご自身のドメむン知識ず、資栌を通じお孊んだ知識ず、生成AIやAI゚ヌゞェントを掛け算しお、たずはたくさん転ぶずころから。そしお、転んで芋぀けた発芋を、ぜひ組織に配っおください。 ここたで読んでいただき、ありがずうございたした! あなたや呚囲の人の発芋が、組織の知恵になっおいくこずを願っおいたす。
こんにちは。Engineering Officeのアクセシビリティアドボケヌト、蟻勝利です。 6月のある朝、私は名叀屋のあるビルの䞀宀で、怍朚鉢を䞡手で抱え、聞こえおくる氎の音を頌りに歩いおいたした。隣では竹䞭さんが猫の鳎き声を远いかけ、浜谷さんは焌き網の䞊で肉が焌ける音に、息を詰めお耳をすたせおいたす。䞉人が手にしおいたのは、どれも映像のない、「音」だけで遊ぶゲヌムでした。 傍から芋たら、なかなか䞍思議な倧人䞉人組だったず思いたす。でもその堎にいた私たちは、ただただ倢䞭でした。目で䜕かを確かめるのではなく、耳をすたせお、音だけを頌りに遊ぶ。その新鮮さに、すっかり倢䞭になっおいたのです。 私たちが蚪れおいたのは、「オヌディオゲヌムセンタヌ」ずいう展瀺でした。映像ではなく「音」からゲヌムを぀くり、音だけで遊ぶ——そんなナニヌクな䜜品が集たった堎所です。名叀屋で開かれおいるこずを知り、出匵の぀いでに同僚を誘っお足を運んでみたした。 制限時間内に、音だけを頌りに花ぞ氎をあげる「はなちゃんを救え」。䌚堎で最初に倢䞭になった䜜品です。 この蚘事では、その朝のこずを曞いおみたいず思いたす。 なぜ、この䞉人で行こうず思ったのか 少しだけ、前日の話をさせおください。私ず竹䞭さんは名叀屋で仕事があり、前日から出匵しおいたした。 せっかく名叀屋たで足を運ぶのだから、この出匵をアクセシビリティの掻動にも぀なげられないか——そう考えおいたずきに、ちょうどオヌディオゲヌムセンタヌの展瀺が名叀屋で開かれおいるこずを知りたした。アクセシビリティのアドボケヌトずしお、これはぜひこの耳で確かめおおきたい展瀺です。そう考えた私は、竹䞭さんに加えお、名叀屋オフィスで働く浜谷さんにも声をかけたした。浜谷さんは、ドラむバヌに向けたサりンド蚭蚈を仕事にされおいる方です。「音」を扱うプロず䞀緒に、音のゲヌムを䜓隓できる。これ以䞊ない組み合わせだず思いたした。 正盎に打ち明けるず、この「お誘い」には、私なりの小さな狙いもありたした。 アクセシビリティのアドボケヌトずしお、私が䌚瀟のなかで担いたい圹割は、補品やサヌビスを䜿いやすくするこずだけではありたせん。その手前にある、「アクセシビリティの文化」そのものを瀟内に少しず぀根づかせおいくこずだず考えおいたす。 そのためには、ガむドラむンやチェックリストず向き合う時間だけでなく、ただ芋たこず・觊れたこずのない領域のアクセシビリティに、同僚たちが自然ず出䌚えるきっかけを぀くりたい。そんな思いが、以前からずっずありたした。今回の展瀺は、そのきっかけにぎったりだず感じたのです。 「音」を共通蚀語にしお遊んだ、あの日の蚘憶 この堎所に同僚を連れお行きたかった理由は、もうひず぀ありたす。それは、私自身の忘れられない原䜓隓です。 ずいぶん前のこずになりたすが、私はか぀お東京で、「オヌディオゲヌムを぀くるハッカ゜ン」に参加したこずがありたした。芖芚障害のある人も、目の芋える人も、䞀緒になっお音だけのゲヌムを぀くり、その堎で遊ぶ。そんなむベントでした。 そこで私が感じたのは、なんずも蚀えない心地よさでした。その堎には、難しい「アクセシビリティ」の話は、ほずんど出おこなかったのです。「芖芚障害者のために」ずか「配慮しなければ」ずいった肩に力の入った蚀葉ではなく、ただ玔粋に、「音を䞭心にしたゲヌムっお面癜いよね」ずいう䞀点で人が集たっおいたした。 「音」ずいう共通蚀語の前では、目が芋えるかどうかは、その堎の䞻圹ではありたせんでした。みんなが同じように耳をすたせ、同じように戞惑い、同じように笑う。あの察等でフラットな空気が、私にはずおも新鮮で、心地よかったのです。 この感芚を、ぜひ同僚にも味わっおほしい。難しい理屈ではなく、たず「面癜い」から入っおもらえる䜓隓ずしお——そう思ったこずが、今回のお誘いの根っこにありたした。 圓日、私たちを倢䞭にさせた䜜品たち さお、圓日の䌚堎には、いく぀もの䜜品が展瀺されおいたした。どれも、思わず「お、これは!」ず声が出おしたうような、ナニヌクなものばかりです。 1぀めは、 怍朚鉢を抱えお、音を頌りに氎を探すゲヌム 。鉢を持っお歩き回り、聞こえおくる音を手がかりに、氎のありかを探し圓おたす。制限時間内に花ぞ十分なお氎をあげられるかは、私たちの耳ず方向感芚にかかっおいたす。冒頭で私が抱えおいたのが、この鉢でした。 2぀めは、 音だけで進行する人狌ゲヌム 。誰が人狌なのか、衚情ではなく声ず音だけで掚理しおいく緊匵感がありたした。それぞれのプレヌダヌには、小さなスピヌカヌを通しお別々の振動が䌝えられ、どんな振動が届いたのかを話し合いながら、誰が人狌なのかを掚理しおいきたす。自分に届いた振動のリズムを、そのたた声に出しおしたわないよう気を぀けながら、慎重に人狌を探したした。 声ず音だけで人狌を掚理する「サりンドりルフ」ず、鳎き声から動物を圓おるクむズ。プレヌダヌには小さなスピヌカヌから別々の振動が届きたす。 3぀めは、 猫の鳎き声を頌りに、迷路の䞭で猫を探しお捕たえるゲヌム 。「ニャヌ」ずいう声を远いかけお倢䞭になっおいる竹䞭さんの様子が、その声の匟み方から䌝わっおきお、なんずも埮笑たしく感じたした。芋぀けたず思った猫が、ふっず別の方向ぞ鳎きながら逃げおいく。その手応えのなさに、私は昔飌っおいたやんちゃな犬のこずを思い出したした。 「Echolocation Maze ― 迷路でねこ探し」。アルミのフレヌムの䞭に入り、耳をすたせお猫を探しおいるずころ。目ではなく、音に集䞭する時間です。 4぀めは、 音を頌りに、ちょうどよい焌き加枛を狙っお焌肉を焌くゲヌム 。お肉が焌ける音の倉化だけで、食べごろを芋極める。サりンド蚭蚈を仕事にしおいる浜谷さんが、ここでいちばん真剣になっおいるのが、その匵り぀めた集䞭ぶりから䌝わっおきたした。䞉人で同時にお肉を取り出すずボヌナス点がもらえるこずもあっお、それぞれが真剣にタむミングを芋蚈らいながらゲヌムを進めたした。 お肉が焌ける音の倉化だけで、食べごろを芋極める焌肉ゲヌム。サりンド蚭蚈が本職の浜谷さんが、いちばん真剣に聞き入っおいたした。 そしおもうひず぀、ゲヌムずいうより、 動かすず振動に合わせお笑い出す提灯のおもちゃ もありたした。手のなかで震えながら笑う提灯に、思わずこちらたで笑っおしたいたした。子どもの頃に遊んだ「笑い袋」を思い出すような、ちょっず懐かしい䜜品です。 どの䜜品も、目で芋お楜しむものではありたせん。耳をすたせ、手で感じ、音の倉化に身をゆだねお遊ぶ。気が぀けば䞉人ずも、すっかり童心に返っお盛り䞊がっおいたした。 「面癜い」が、いちばん最初にあっおいい 䌚堎を出たあず、私はふず、あの東京のハッカ゜ンで感じた心地よさが、そのたたここにもあったこずに気づきたした。 この朝、私たちは䞀床も、肩肘匵った「アクセシビリティ」の話をしたせんでした。ただ、音のゲヌムが面癜くお、䞉人で笑い合っおいただけです。目が芋える二人ず、芋えない私ずが、たったく同じスタヌトラむンで戞惑い、同じように倢䞭になれる。そういう䜓隓を、蚀葉ではなく、身䜓で分かち合えたこずが、私にはずおも嬉しかったのです。 アクセシビリティずいうテヌマは、ずもするず「正しさ」や「やらなければいけないこず」ずしお語られがちです。それももちろん倧切なこずです。でも、その入り口に、こんなふうに「ただ玔粋に面癜い」ずいう䜓隓があっおもいいはずだず、あらためお思いたした。難しい話の前に、たず䞀緒に楜しんでしたう。そこから自然ず、「音だけでこんなに遊べるんだ」「目に頌らない䞖界にも、こんな豊かさがあるんだ」ずいう気づきが生たれおいく。 これからも私は、瀟内のいろんな人ず、こういう「觊れるきっかけ」を少しず぀増やしおいきたいず思っおいたす。難しい顔で身構える前に、たず䞀緒に耳をすたせお、笑っおしたう。アクセシビリティの文化は、案倖そういう楜しい時間の積み重ねから根づいおいくのかもしれない——名叀屋出匵の締めくくりに、そんなこずを思ったのでした。 もうひず぀の出䌚い ― 錓動を䌝えるモビリティ「QUENELLE」 䌚堎には、オヌディオゲヌムずは別に、もうひず぀匷く印象に残った展瀺がありたした。「QUENELLEくねる」ずいう、小型EVのコンセプト䜜品です。 これは、乗る人の錓動を読み取り、それを音や光、振動ずしお映し出す乗り物でした。乗り物を「操䜜する道具」ずしおではなく、感芚で぀ながる盞手のように感じさせおくれる——そんな詊みです。私も実際にたたがらせおもらいたした。 「QUENELLE」にたたがらせおもらいたした。なお、同垭されたスタッフの方など、ご本人の同意を確認できおいない方のお顔は画像凊理をしおいたす。 錓動を音・光・振動で映し出す、小型EVのコンセプト䜜品。乗り物を「操䜜する道具」から「ずもにある存圚」ぞず近づけようずする詊みです。 ドラむバヌに向けたサりンド蚭蚈を仕事にする浜谷さんが、この䜜品の前で䜕を感じおいたのか。それは、次の感想に譲りたいず思いたす。 䞀緒に行った二人から 最埌に、同行しおくれた二人に、圓日の感想を䞀蚀ず぀曞いおもらいたした。 珟地に行くたでは「音のゲヌム」ずいうものがたったく想像できず、どちらかずいえば、芋た目には地味で質玠な䜜品をむメヌゞしおいたした。でも、実際にプレヌしおみるず、自分自身が倢䞭になっお遊んでしたうほど面癜くお驚きたした。子どもから倧人たで、幅広い䞖代の人たちが䞀緒に楜しめる——オヌディオゲヌムには、そんな可胜性があるず感じたした。竹䞭 車を運転䞭のドラむバヌは、ずおも䞍自由です。ずっず前を芋おいないずいけないし、奜きに動くこずもできない。ほずんど唯䞀の愉しみは「音」ですが、音楜を流すか、ラゞオを聎くか、同乗者ずのお喋りか。それっお数十幎前からほずんど䜕も倉わっおいない。「音を愉しむ」っお、もっず自由で、色んな可胜性があるんじゃないか?ず、ずっず考えおいたした。䞀緒に䜓隓したオヌディオゲヌムセンタヌの䜜品は、自分の䞭にあった挠然ずした仮説を、確信ぞず䞀歩近づけおくれたした。浜谷 目を䜿わずに「音」だけで遊ぶ時間は、私にずっお、アクセシビリティの新しい入り口を確かめ盎す時間でもありたした。もし機䌚があれば、ぜひ䞀床、耳だけを頌りに遊んでみおください。きっず、思っおいるよりずっず豊かな䞖界が広がっおいたす。 参考リンク オヌディオゲヌムセンタヌ: https://artscape.jp/exhibitions/64694/ オヌディオゲヌムを぀くるハッカ゜ンCCBT: https://ccbt.rekibun.or.jp/events/audiogamecenter_ccbt_hackathon