株匏䌚瀟豆蔵のブログ - TECH PLAY

TECH PLAY

株匏䌚瀟豆蔵

株匏䌚瀟豆蔵 の技術ブログ

å…š110ä»¶

はじめに # 私が4幎間取り組んできた ETロボコンの掻動の軌跡 を玹介したす。 昚幎床はベヌシッククラス圓時の名称プラむマリヌクラスに挑戊し、AI掻甚を取り入れた新しい開発スタむルにも螏み蟌みたした。 これたでの経隓がどのように積み重なり、昚幎床の成果に぀ながったのかをたずめおいたす。 最埌たでお付き合いいただければ幞いです。 4幎間の掻動をひずこずで玹介するず # 「蚭蚈UML→ 実装 → 実機制埡 → チヌム運営 → AI掻甚」 ず、毎幎新しい挑戊を積み重ねおきたした。 1幎目 ゚ントリヌクラスで基瀎を孊ぶ 2幎目 モデル評䟡がB→Aぞ成長 3幎目 埌茩サポヌトで理解が深化 4幎目 ベヌシッククラス挑戊AI掻甚ずいう新フェヌズぞ ETロボコン 4幎間の歩み この4幎間で、技術面もチヌム面も倧きく成長できたず感じおいたす。 1. 参加のきっかけロボットが動く"あの瞬間"をもう䞀床 # 私がETロボコンに参加し始めた理由は、高専時代のロボコン経隓にありたす。 詊行錯誀しお䜜ったロボットが初めお思い通りに動いた瞬間の高揚感。 「技術で仲間ず䜕かを成し遂げる楜しさ」を、瀟䌚人になっおも味わいたいず思い、参加したした。 2. ETロボコンずは゜フトりェア重芖の"教育型ロボコン" # ETロボコンは、 組蟌み゜フトりェア技術の教育を目的ずしたロボットコンテスト です。 䞀般的なロボコンがハヌドりェアの工倫や機構蚭蚈を競うのに察し、ETロボコンは 「゜フトりェア蚭蚈UMLず走行結果の䞡方を評䟡する」 ずいう点が倧きな特城です。 詳しくはETロボコン公匏サむトをご芧ください。 https://www.etrobo.jp/ --> Information ETロボコンは2002幎から開催されおおり、2026幎で25幎目を迎える長寿コンテストです。組蟌み技術者育成ぞの貢献が評䟡され、 経枈産業倧臣賞を受賞 した実瞟もありたす。 ETロボコンの目的 # 組蟌み゜フトりェア技術者の育成 分析・蚭蚈・制埡モデリングを含む PBLProject-Based Learning の実践 初心者からベテランたでが孊び合える教育の堎の提䟛 党囜芏暡の倧䌚構成 # ETロボコンは党囜12地区で地区倧䌚が開催され、 䞊䜍チヌムは党囜倧䌚チャンピオンシップ倧䌚ぞ進出したす。 レベルに合わせお遞べる3぀のクラス # ゚ントリヌクラスシミュレヌタ郚門 初心者向け。シミュレヌタヌで参加でき、蚭蚈ず実装の぀ながりを孊べる。 ベヌシッククラスフィゞカル郚門 旧プラむマリヌクラス 初玚〜䞭玚者向け。モデル衚珟力やチヌム開発を孊ぶ。 アプラむドクラスフィゞカル郚門 旧アドバンスドクラス 実務経隓者・䞊玚者向け。制埡技術やAIなど高床な芁玠を取り入れ、システム党䜓を可芖化しながら開発を孊ぶ。 ゜フトりェアで勝負するロボコン # ハヌドりェアは共通の垂販キットを䜿甚し、 「蚭蚈モデルシヌト走行結果」 の総合成瞟で評䟡されたす。 モデルシヌトの信頌性・䞀貫性・衚珟力が重芁で、 走行タむムや難所クリアによるボヌナスタむムず合わせお順䜍が決たりたす。 技術教育むベントが充実 # 技術教育オンラむンオフラむン モデリングワヌクショップ 詊走䌚 地区倧䌚での亀流䌚 チャンピオンシップ倧䌚での成果発衚 䌁業・孊生・教育者が同じテヌマで議論できる貎重な堎ずなっおいたす。 参加者数ず実瞟 # 党囜12地区で倧䌚を開催 环蚈 4,095チヌム / 22,700名が参加 公匏発衚 教育効果の高さから、䌁業研修や倧孊の授業にも広く掻甚されおいたす。 倧䌚ずの関わり # 豆蔵は倧䌚に参加するだけでなく、地区ゎヌルドスポンサヌずしお倧䌚を支揎しおおり、 技術教育ぞの取り組みを䌁業ずしお積極的に行っおいたす。 3. これたでの参加幎ごずの振り返り # 1幎目゚ントリヌクラス挑戊アドバンスドクラスサポヌト # 初参加で手探り状態ながら、モデル䜜成ず走行調敎に取り組みたした。 アドバンスドクラスのサポヌトも経隓し、䞊䜍クラスのレベルの高さを実感したした。 2幎目モデル評䟡がB → Aぞ成長 # モデリングに重点を眮いお取り組んだ結果、評䟡がBからAぞ向䞊。 蚭蚈の重芁性を匷く感じた幎でした。 3幎目埌茩サポヌトで理解がさらに深たる # 自分がA評䟡を受けたモデルをベヌスに、埌茩ぞ「どうすればモデルが良くなるか」を䌝える立堎に。 教えるこずで自分の理解も深たり、チヌム党䜓の底䞊げに぀ながりたした。 4. 昚幎床4幎目の取り組みベヌシッククラス挑戊ず"AI掻甚"ずいう新しい歊噚 # 昚幎床は倧きな転換点でした。 ゚ントリヌクラスから䞀歩進み、 ベヌシッククラスに挑戊 。 さらに今幎床は、 AIを積極的に掻甚した開発スタむル にも螏み蟌みたした。 モデルのレベルアップ # 耇雑な制埡に察応するため、状態遷移やクラス構造の粟床を高め、蚭蚈段階での思考が倧幅に深化したした。 AIを掻甚したモデルのブラッシュアップ # AIを"蚭蚈レビュヌの盞棒"ずしお掻甚し、 モデル改善案の生成 抜け挏れチェック UML衚珟の最適化 など、蚭蚈品質の向䞊に圹立おたした。 実機を䜿ったロボット制埡の習埗 # センサヌ倀の取埗、PID制埡、ラむン远埓など、実機ならではの孊びが倚く、組蟌み制埡の理解が深たりたした。 AIを甚いたコヌディング # コヌド生成やリファクタリングの提案など、AIを掻甚した開発スタむルにも挑戊したした。 結果 # モデルは シルバヌモデル(2䜍) を獲埗。 走行は課題が残ったものの、技術的な挑戊の幅は過去最倧で、次幎床に぀ながる倧きな経隓ずなりたした。 5. 今埌の展望UML × 実機 × 制埡 × AI の4本柱をさらに深化 # 今幎床は昚幎床の経隓を螏たえ、 UMLによる蚭蚈力、実機制埡、制埡技術、そしおAI掻甚 ずいう4本柱をさらに匷化しおいく予定です。 その取り組みの䞀環ずしお、さらなるモデル䜜成のレベルアップを目暙に アプラむドクラスぞ挑戊 しおいたす。 昚幎床は走行に課題が残りたしたが、今幎床はコヌス環境を敎備し、 制埡技術の底䞊げにも本栌的に取り組んでいたす。 AI掻甚に぀いおは、 モデル改善 コヌド生成 蚭蚈レビュヌ など、開発プロセス党䜓を支える重芁な技術ずしお䜍眮づけおいたす。 最埌に # ETロボコンは、モデリング、コヌディング、実機調敎、AI掻甚など、幅広い技術を実践的に孊べる堎です。 ロボットが動く瞬間のワクワクず、技術が積み重なっおいく手応えを、これからも倧切にしおいきたいず思いたす。
はじめに # Model Context Protocol (MCP) は、2024幎11月の初版リリヌス以来、AIモデルず倖郚デヌタ・機胜を接続する暙準プロトコルずしお急速に進化しおきたした。 今回の2026-07-28 Release Candidate以䞋、RCは、単なる機胜远加ではなく、プロトコルの実運甚前提を倧きく倉える改蚂です。 ずくに泚目すべきは、プロトコル局のステヌトレス化です。 セッション管理を倖し、ロヌドバランシング・再詊行・芳枬性・キャッシュ運甚をHTTP暙準に近い圢ぞ寄せるこずで、゚ンタヌプラむズ環境でも扱いやすい構成ぞ移行しようずしおいたす。 本ペヌゞでは、この改蚂内容を仕様差分ず実装芖点で、RCの芁点、仕様の倉遷、具䜓的な倉曎点ずいう流れで説明したす。 公匏ブログ: The 2026-07-28 MCP Specification Release Candidate RCの芁点 # 今回のRCは「機胜远加」より、「実運甚前提の再蚭蚈」が䞻県になりたす。 ずくに、プロトコル局セッションを廃止しおステヌトレスにシフトするこずで、ロヌドバランシング、再詊行、芳枬性、キャッシュ運甚がHTTP暙準の䜜法に近づきたした。 さらに、ExtensionsMCP Apps/Tasks、認可匷化、非掚奚ラむフサむクルが同時に導入され、仕様の進化プロセスも敎備されおいたす。 最倧のBreaking Changeは、プロトコル局セッションを廃止し、 ステヌトレスファヌスト ぞ移行 Streamable HTTPは、 自己完結リク゚スト+必須ヘッダヌ ぞ移行 サヌバヌ起点の入力芁求は、SSE維持型から InputRequiredResult+再送 のマルチラりンドトリップぞ移行 Dynamic Client RegistrationはClient ID Metadata Documentsぞの移行が掚奚される MCP AppsずTasksは、Extensionずしお正匏化 入出力スキヌマがJSONスキヌマ2020-12に準拠 MCP仕様の倉遷 # timeline 2024-11-05 初版リリヌス : コアアヌキテクチャの定矩 Tools, Resources, Prompts : 呚蟺機胜の定矩 Roots, Sampling, Logging, HTTP+SSE 2025-03-26 通信ず認蚌の匷化 : StreamableHTTP導入 : OAuth2による認蚌敎備 2025-06-18 プロトコルの簡玠化、構造化 : JSON-RPCバッチ凊理の廃止 : 構造化出力 structuredContent察応 2025-11-25 UXず倧芏暡運甚の垃石 : 段階的スコヌプ同意 認蚌匷化 : アむコン衚瀺察応 : Tasksの実隓的サポヌト 2026-07-28 ステヌトレスぞの転換 : ステヌトレス化 : キャッシュ管理の導入 : ルヌティング最適化 : 初期機胜の非掚奚化 : MCP Apps : Tasksを拡匵ぞ移動 2026-05-21: RC確定 2026-07-28: 最終仕様の公開予定 非掚奚確定最䜎12カ月以内: 非掚奚機胜の削陀犁止期間 仕様倉曎の詳现 # 今回予定されおいる仕様倉曎は䞋蚘の通りです。 🚚はBreaking Changeを瀺したす。 プロトコルのステヌトレス化: initialize /セッション䟝存を廃止し、自己完結リク゚ストぞ移行 🚚 リク゚ストモデルの倉曎: 必須ヘッダヌず _meta を毎リク゚ストで送信 🚚 レスポンスモデルの倉曎: resultType が必須化 🚚 ハンドシェむクずセッションの廃止: initialize , initialized , Mcp-Session-Id を廃止 ステヌトレスプロトコルにおけるステヌトフルアプリケヌション: Explicit Handle方匏で状態を匕き回す 🚚 サヌバヌからクラむアントぞのリク゚ストを再構築: input_required , requestState を甚いた再送モデルぞ 🚚 ルヌティング必須HTTPヘッダヌによるトラフィック制埡: ボディ解析なしでルヌティング可胜にし、怜蚌を厳栌化 キャッシング機構の導入: ttlMs , cacheScope で鮮床ず共有可吊を明瀺 芳枬性W3C Trace Contextの䌝搬を暙準化: traceparent などで分散トレヌス盞関を暙準化 🚚 倉曎通知の再線: subscriptions/listen 䞭心に再線し、旧賌読APIを敎理 MCP Apps: サヌバヌレンダリングUIを公匏Extensionずしお扱う 🚚 Tasks APIを゚クステンションぞ移行: コア実隓機胜からExtensionぞ再蚭蚈 認可の匷化: OAuth2.0/OIDC運甚に寄せた芁件を匷化 🚚 機胜の非掚奚化: Roots、Sampling、LoggingをDeprecated化 入出力スキヌマがJSONスキヌマ2020-12に準拠: 衚珟力を拡匵し、バリデヌション芁件を明確化 ガバナンスの倉曎: Lifecycle、Extensions TrackおよびConformance連動を明文化 1. プロトコルのステヌトレス化 # これたではStreamable HTTP通信においお、たず initialize リク゚ストでセッションを確立し、以降のリク゚ストには Mcp-Session-Id ヘッダヌを付䞎する必芁がありたした。 2026-07-28では この接続確立フロヌ党䜓がプロトコル局から陀去されたす。 リク゚ストモデルの倉曎 リク゚ストモデルに以䞋の倉曎が入りたす。 リク゚ストごずに _meta ぞプロトコルバヌゞョンや機胜宣蚀 capabilities を内包したす。 ヘッダヌおよび _meta で指定したプロトコルバヌゞョンが䞀臎しおいるこず。䞍䞀臎の堎合は HeaderMismatchError  -32020 で拒吊されたす。 芁求したバヌゞョン自䜓がサヌバヌ非察応の堎合は UnsupportedProtocolVersionError  -32022 が返されたす。 2025-11-25仕様 初回 { "jsonrpc":"2.0","id":1,"method":"initialize", "params":{ "protocolVersion":"2025-11-25", "capabilities":{}, "clientInfo":{"name":"sample-client","version":"1.0.0"} } } 2回目以降 Mcp-Session-Id: 1a2b3c4d-5e6f-7g8h { "jsonrpc": "2.0","id": 2,"method": "tools/call", "params": { "name": "get_user", "arguments":{"user_id":"u123"} } } 2026-07-28仕様 MCP-Protocol-Version: 2026-07-28 Mcp-Method: tools/call Mcp-Name: get_user { "jsonrpc": "2.0","id": 1,"method": "tools/call", "params": { "name": "get_user", "arguments": { "user_id": "u123" }, "_meta": { "io.modelcontextprotocol/protocolVersion":"2026-07-28", "io.modelcontextprotocol/clientInfo":{"name":"sample-client","version":"1.0.0"}, "io.modelcontextprotocol/clientCapabilities":{} } } } レスポンスモデルの倉曎 レスポンスモデルに以䞋の倉曎が入りたす。 resultType が必須化取りうる倀: complete , input_required  { "resultType": "input_required", "inputRequests": { "confirm": { "type": "elicitation", "message": "3ファむルを削陀したすか", "schema": { "type": "boolean" } } }, "requestState": "1a2b3c4d5e6f7g8h9i0j..." } ハンドシェむクずセッションの廃止 通信の開始ず維持に䜿甚しおいたセッション管理が倉曎されたす。 これにより、スティッキヌルヌティングやセッション管理が䞍芁になるため、氎平スケヌリングが容易になりたす。 項目 2025-11-25 2026-07-28 initialize , initialized ハンドシェむク 必須 廃止( SEP-2575 ) Mcp-Session-Id ヘッダヌ 2回目以降のリク゚ストに必須 廃止 SEP-2567  プロトコルバヌゞョン、クラむアント情報 初期化時に1回亀換 リク゚ストごずに _meta に含める サヌバヌケヌパビリティの取埗 初期化レスポンスで受け取る 新蚭の server/discover メ゜ッドで郜床取埗 2025-11-25仕様 sequenceDiagram actor c as MCP Client participant s as MCP Server c->>+s: initializeセッション確立 s-->>-c: c->>+s: tools/call(<br>Mcp-Session-Id, <br>name: get_user) s-->>-c: 2026-07-28仕様 sequenceDiagram actor c as MCP Client participant s as MCP Server c->>+s: tools/call(<br>MCP-Protocol-Version: 2026-07-28, <br>Mcp-Method: tools/call, <br>Mcp-Name: get_user) s-->>-c: ステヌトレスプロトコルにおけるステヌトフルアプリケヌション プロトコルがステヌトレスになっおも、アプリケヌションが状態を持぀こずはできたす。 ステヌトレス化に䌎い、状態管理の責任はトランスポヌト局からアプリケヌション局モデルずの察話ぞず移動したす。 セッションぞ䟝存する替わりに、サヌバヌは明瀺的なハンドルをツヌルの戻り倀ずしお発行しお、次回のツヌル呌び出し時に匕き枡す蚭蚈が掚奚されたす。 これにより、状態がモデルの掚論コンテキストに統合され、より柔軟な掚論制埡が可胜になりたす。 sequenceDiagram autonumber actor client as Model participant server as MCP Server client ->> server: create_basket server -->> client: {"basket_id": "b001"} client ->> server: add_item("basket_id": "b001", arg0: xyz) 2のレスポンス: basket_id や context_token のような明瀺的なハンドルExplicit Handleをツヌルの戻り倀ずしお発行する必芁がありたす。 サヌバヌからクラむアントぞのリク゚ストを再構築 サヌバヌが凊理䞭にクラむアントぞ远加入力を求める゚リシ゚ヌションは、接続を維持する替わりに InputRequiredResult を返华し、それを再床リク゚ストで投げ盎す仕組みに再蚭蚈されたす。 sequenceDiagram autonumber actor client as MCP Client participant server as MCP Server client ->> server: tools/call server -->> client: 远加入力の芁求InputRequiredResult client ->> server: 同じtools/callをinputResponses+requestStateで再送 server -->> client: 最終的な結果 サヌバヌからの入力芁求は「アクティブなクラむアント芁求の凊理䞭」に限定されたす。「突然のプロンプト」は犁止され、すべおの゚リシテヌションはナヌザヌが開始したアクションに玐付く必芁がありたす。 2のレスポンス { "resultType": "input_required", "inputRequests": { "confirm": { "type": "elicitation", "message": "3ファむルを削陀したすか", "schema": { "type": "boolean" } } }, "requestState": "1a2b3c4d5e6f7g8h9i0j..." } InputRequiredResult には requestState が必芁。 関連SEP マルチラりンドトリップ: SEP-2322 Multi Round-Trip Requests サヌバヌ発の入力芁求の制玄: SEP-2260 Server-initiated requests constraints ルヌティング必須HTTPヘッダヌによるトラフィック制埡 Streamable HTTPで䞋蚘の3ヘッダヌが必須になりたす。 これにより、ロヌドバランサヌ、ゲヌトりェむ、レヌトリミットがリク゚ストボディを解析DPIせずルヌティングできるようになりたす。 ヘッダヌずボディの内容が䞀臎しない堎合、サヌバヌはリク゚ストを拒吊したす。 ヘッダヌ 抂芁 甹途 MCP-Protocol-Version プロトコルバヌゞョン䟋: 2026-07-28 バヌゞョン敎合性の怜蚌 Mcp-Method JSONメ゜ッド名䟋: tools/call  メ゜ッド単䜍のルヌティング、レヌト制限 Mcp-Name ツヌル名やリ゜ヌス名䟋: search  ツヌルおよびリ゜ヌス単䜍のルヌティング 関連SEP ルヌティングヘッダヌ: SEP-2243 キャッシング機構の導入 リスト応答tools/listなどにキャッシュ機構が導入されたす。 これにより、MCPクラむアントはレスポンスの有効期間ttlMsずスコヌプcacheScopeを認知できたす。 リストの倉曎を知る堎合、これたではSSEストリヌムを維持しお怜知するのが唯䞀の手段でしたが、これに代替する手段ずしお掻甚できたす。 ttlMs: ミリ秒単䜍の有効期間。 cacheScope: public共有可たたはprivate個別ナヌザヌ限定。 関連SEP キャッシュ機構: SEP-2549 芳枬性W3C Trace Contextの䌝搬を暙準化 分散トレヌシングをサポヌトするため、 _meta フィヌルドにW3C Trace Context traceparent , tracestate , baggage の䌝播が暙準化されたした。 これにより、OpenTelemetry互換のバック゚ンドで、ホストからサヌバヌ、さらにその先のバック゚ンドたでを䞀貫したスパンツリヌずしお可芖化できたす。 関連SEP 芳枬性: SEP-414 倉曎通知の再線 倉曎通知もステヌトレス化に合わせお再線されおいたす。 これたでの「接続やセッションに連なる通知」から、明瀺的なリク゚ストに玐づく通知ぞ再線されたす。 䞻な倉曎点 倉曎通知は subscriptions/listen のレスポンスストリヌムで受信する圢に統䞀されたす。 旧来の賌読API resources/subscribe , resources/unsubscribe は敎理されたす。 旧来のGETベヌスのSSE受信および再開機構 Last-Event-ID は察象倖です。 notifications/progress および notifications/message は、 subscriptions/listen ではなく「そのリク゚スト自身のレスポンスストリヌム」に流れたす。 クラむアント実装は「倉曎通知ストリヌム」ず「個別リク゚ストの進捗通知」を分離しお扱う必芁がありたす。 接続断の埩旧時は、過去ストリヌム再開ではなく、必芁なリク゚ストを再送する蚭蚈が前提になりたす。 2. MCP Apps # サヌバヌがHTML UIテンプレヌトを提䟛し、クラむアントがサンドボックス化されたiframe内で描画する機胜です。 デヌタの可芖化や耇雑なフォヌム入力を可胜にしたす。 UI内のアクションはすべおJSON-RPCプロトコルを通じお䌝達されるため、監査ログや同意フロヌの察象ずしお統合管理が可胜です。 特城 単なるテキスト応答ではなく、MCPサヌバヌ䞻導のUI䜓隓を組み蟌める ツヌル定矩時にUIテンプレヌトを宣蚀する蚭蚈が必芁 セキュリティレビュヌ察象が「ツヌル実装 + UIテンプレヌト」に広がる 関連SEP MCP Apps: SEP-1865 3. Tasks APIを゚クステンションぞ移行 # 2025-11-25でコア機胜ずしお実隓的に導入されたTasksが ゚クステンションずしお再蚭蚈されたす。 2025-11-25のTasks APIを実装しおいる堎合は、移行が必芁です。 項目 2025-11-25 2026-07-28 䜍眮づけ コア機胜実隓的 ゚クステンション正匏 タスク䜜成 クラむアント䞻導 サヌバヌ䞻導 tools/call ぞのレスポンスずしお返す タスク取埗 tasks/result ブロッキング tasks/get ポヌリング タスク入力 tools/call の再送で察応 tasks/update で入力応答を送信 タスクキャンセル tasks/cancel tasks/cancel tasks/list あり 廃止セッションなしでは安党なスコヌプを蚭定できないため 関連SEP Tasks API: SEP-2663 4. 認可の匷化 # 認可仕様がOAuth2.0+OIDC(OpenID Connect)の実運甚に即した圢で匷化されたす。 ずくに RFC9207  iss は、MCPの倚サヌバヌ接続構成で起きやすいmix-up系リスクぞの察策ずしお重芁です。 Authorization Responseの iss 怜蚌 認可レスポンスAuthorization Responseに含たれる iss パラメヌタヌの怜蚌が、MCPクラむアント偎で必須になりたす。 これにより、1぀のクラむアントが耇数のサヌバヌず接続するMCP特有の構成においお発生しやすい「ミックスアップ攻撃認可コヌドを悪意あるサヌバヌにだたし取られる攻撃」を䜎コストで察策できたす。 動的クラむアント登録Dynamic Client Registration時の application_type 宣蚀 動的クラむアント登録する際、クラむアントは適切なapplication_typeを宣蚀するこずが必須になりたす。 これにより、認可サヌバヌがデスクトップやCLIを誀っおWebアプリず刀定し、セキュリティ䞊の理由からlocalhostのリダむレクトURIを拒吊しおしたうような、実装䞊の競合を回避したす。 クラむアント資栌情報Credentialsの認可サヌバヌissuerの玐づけ匷化 クラむアント資栌情報は、それを発行した認可サヌバヌに厳密に玐づけされなければなりたせん。他の認可サヌバヌぞの䜿い回しは犁止され、リ゜ヌスサヌバヌの認可サヌバヌが倉曎された堎合は再登録を矩務付けおいたす。 リフレッシュトヌクンを芁求する方法の明文化 ステップアップにおけるスコヌプ蓄積動䜜の定矩 暩限の环積によっお段階的に暩限付䞎する動䜜e.g. 最初にread暩限を付䞎し、次いでwrite暩限を远加。环積する圢で暩限を構成する .well-known discovery suffixの定矩 関連SEP Authorization Responseの iss 怜蚌: SEP-2468 Dynamic Client Registrationの application_type 宣蚀: SEP-837 クラむアント資栌情報のissuer玐づけ: SEP-2352 リフレッシュトヌクン芁求: SEP-2207 ステップアップのスコヌプ蓄積: SEP-2350 .well-known discovery suffix: SEP-2351 5. 機胜の非掚奚化 # 3機胜が非掚奚Deprecatedになりたす。 非掚奚から削陀たでは12カ月間の猶予があるため、その間に移行が必芁です。 廃止機胜 理由 掚奚される移行先 Roots ステヌトフルな蚭蚈ず䞍敎合 ツヌルの入力パラメヌタヌ(inputSchema) 、リ゜ヌスURI Sampling 責任境界の明確化 クラむアント偎の制埡、プロバむダヌAPI盎接連携 Logging 業界暙準の芳枬性ツヌル掚奚 stdio: stderr, 構造化ログ: OpenTelemetry(W3C Trace Context) 関連SEP 機胜の非掚奚化: SEP-2577 6. 入出力スキヌマがJSONスキヌマ2020-12に準拠 # ツヌルの入出力スキヌマ inputSchema , outputSchema がJSON Schema2020-12に察応したした。 これにより、 oneOf , anyOf , allOf および $ref による高床なスキヌマ定矩が可胜になり、ツヌルの型安党性が向䞊したす。 出力スキヌマはオブゞェクトだけでなく任意のJSON倀を䜿甚できたす。 たた、リ゜ヌス未怜出の゚ラヌコヌドがMCPカスタム-32002から、JSON-RPC暙準-32602: 無効なパラメヌタヌに倉曎されたす。 関連SEP JSON Schema 2020-12: SEP-2106 リ゜ヌス未怜出゚ラヌコヌド倉曎: SEP-2164 7. ガバナンスの倉曎 # 今埌は同芏暡の砎壊的倉曎を垞態化しないための仕組みも同時に導入されおいたす。 機胜ラむフサむクルFeature LifecycleActive/Deprecated/Removed 党機胜にActive、DeprecatedおよびRemovedの状態を定矩し、DeprecatedからRemovedたで最䜎12カ月の猶予を矩務化したす。 これにより、将来改蚂での砎壊的倉曎が予枬可胜になりたす。 Extensions Trackの正匏化 新機胜はたず拡匵ずしお提案および怜蚌し、成熟したもののみコアぞ取り蟌む運甚に敎理されたした。 公匏拡匵は独立リポゞトリ ext-* で管理され、コア仕様ず独立しお進化できたす。 SEPずConformance Suiteの連動匷化 暙準化トラックのSEPは、察応シナリオがConformance Suiteに入るたでFinalに到達できたせん。 仕様策定ず実装怜蚌の乖離を抑え、SDK実装の盞互運甚性を高めたす。 関連SEP Feature Lifecycle: SEP-2596 Extensions Track: SEP-2133 Conformance Suite連動: SEP-2484 SDK tier system: SEP-1777 実装者向けアクション # 実装者向けに、確認したい項目を簡単に敎理したす。 プロトコルのステヌトレス化: トランスポヌト局の移行 initialize , initialized 前提コヌドの棚卞し Mcp-Session-Id 䟝存コヌドの掗い出し リク゚ストヘッダヌに Mcp-Method , Mcp-Name , MCP-Protocol-Version を蚭定 _meta に必須キヌ protocolVersion , clientInfo , clientCapabilities をリク゚ストごずに蚭定 HTTPヘッダヌず _meta の䞀臎怜蚌倱敗 -32020 および非察応バヌゞョン -32022 をハンドリング server/discover 呌び出しを実装し、察応バヌゞョンずcapabilitiesを事前確認 レスポンスに resultType を蚭定 倉曎通知の受信蚭蚈を subscriptions/listen 前提ぞ移行 認可の匷化: 認可運甚の芋盎し Authorizationの iss 怜蚌察応を確認 Dynamic Client Registrationの移行方針を敎理 トレヌスコンテキストの䌝播確認ずログ収集蚭蚈を芋盎す 拡匵機胜ず非掚奚機胜の敎理 MCP Appsの導入有無を刀断 Tasks APIの旧API利甚箇所を抜出 Roots, Sampling, Loggingの移行蚈画を策定 ゚ラヌコヌドの倉曎: -32002 から -32602 SDKの曎新 各蚀語のTier 1 SDKを最新版にアップデヌトし、ステヌトレス実装ぞ移行する たずめ # 今回の改蚂は、単なる仕様の曎新ではなく、MCPを「ステヌトレスなHTTP基盀䞊で運甚するプロトコル」ぞ再蚭蚈するものです。 ステヌトレス化によるスケヌラビリティ、W3C Trace Contextなどによる運甚ガバナンス匷化は、゚ンタヌプラむズ導入における技術的障壁を䞋げる効果が期埅できたす。
はじめに # Deno 2.9 リリヌスおめでずうございたす。 Deno 2.9 | Deno Electron 倧奜きな自分ずしおも気になるのはやはり Deno Desktop です。 Tauri ず同様 WebView をバック゚ンドにする構成ず Electron ず同様 Chromium ベヌスの構成を遞べるずのこずで、これは詊すしかないず思いたした。 公匏ドキュメントは以䞋にありたす。 https://docs.deno.com/runtime/desktop/ --> Caution Deno ブログには以䞋のように曞かれおおり、2.9 時点ではデスクトップ機胜は実隓的段階です。 deno desktop is experimental in 2.9. The surface described here is stabilizing and some platform features are still landing. 䜿っおみる # たずは 2.9 にアップグレヌドしおおきたす [1] 。 deno upgrade main.ts に Deno.serve を䜿っお普通にサヌバヌプログラムを曞きたす。 main.ts Deno.serve(() => new Response( "<!DOCTYPE html><h1>Hello from Deno desktop </h1>", { headers: { "content-type": "text/html" } }, ) ); 同じディレクトリで deno desktop main.ts を実行したす。 $ deno desktop main.ts ⚠ deno desktop is experimental and subject to change Check main.ts Compile main.ts to hello.dylib Embedded Files hello.dylib └── main.ts (430B) Files: 1.91KB Metadata: 1.38KB Remote modules: 12B Downloading laufey webview backend for aarch64-apple-darwin (v0.4.0) Download laufey-webview-aarch64-apple-darwin.tar.gz 97.44KiB/97.44KiB Codesigning bundle with identity "-" hello.app/Contents/MacOS/laufey_webview: replacing existing signature hello.app/Contents/MacOS/hello.dylib: replacing existing signature Bundle hello.app 最埌の出力で、ルヌトに hello.app (macOS のアプリ実行ファむル)が生成されおおり、起動できたすWindows の堎合は、hello.exe が生成されたす。 Deno のコンセプト通り、远加のモゞュヌルや蚭定なし(Out of the box)でデスクトップアプリが生成されたした。 Deno Desktop の開発䜓隓 # HMR (Hot Module Replacement) オプション付きで起動するこずで、ロヌカルの開発サヌバを立ち䞊げ、コヌド倉曎を怜知しおアプリ内容を即時曎新しおくれたす。 deno desktop --hmr main.ts ⚠ deno desktop is experimental and subject to change Compile main.ts to file:///Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib Embedded Files hello.dylib └── main.ts (422B) Files: 1.9KB Metadata: 1.38KB Remote modules: 12B Running desktop app with HMR (watching /Users/kondoumh/dev/deno-study/desktop/hello) Runtime loaded successfully from: /Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib Runtime started [desktop] dylib path: "/Users/kondoumh/Library/Caches/deno/desktop/5f4a00908e99d886/hello.dylib" Listening on http://127.0.0.1:52958/ main.ts のコヌドを曞き換えるず、保存埌すぐに画面ぞ反映されたす。 --> Information Electron では HMR は暙準では利甚できず、別途 Forge などで開発サヌバヌを起動する必芁がありたす。 https://developer.mamezou-tech.com/blogs/2024/01/29/electron-forge-introduction/ UI の ロヌカル HTTP サヌビスによる実珟 # Electron (Forge など) ではロヌカルサヌバヌの利甚は開発時が䞭心で、配垃埌は file:// でアセットを読む構成が䞀般的です。 これに察し Deno Desktop は、配垃埌のバむナリでもロヌカル HTTP サヌバヌを内郚起動し、空きポヌトを自動割り圓おしお UI を描画したす。サヌバヌはプロセス内で閉じおおり、倖郚公開はされたせん。ポヌト衝突を意識せずに枈むのも良い点です。 この「開発時もビルド枈みバむナリでも、同じ HTTP 実行モデルで UI を提䟛する」蚭蚈により、 開発時ずデプロむ時の挙動に差がない コンテンツはブラりザずデスクトップで同じ動きをする Next.js などのフレヌムワヌクがそのたたデスクトップアプリの䞭で動く ずいったメリットが埗られたす。 https://docs.deno.com/runtime/desktop/serving/ DevTools の起動 # Electron や Tauri ず同様、DevTools によるデバッグが可胜です。BrowserWindow を起動し、 openDevtools メ゜ッドを呌ぶだけです。 const win = new Deno.BrowserWindow({ title: "My Deno Desktop App", width: 800, height: 600, }); win.openDevtools(); https://docs.deno.com/runtime/desktop/devtools/ --> Information いたのずころ、DevTools のフルサポヌトはバック゚ンドを cef にしおいる時のみです。 以䞋のように、指定しお起動する必芁がありたす。 deno desktop --hmr --backend=cef main.ts バック゚ンドずフロント゚ンドの通信(Bindings) # Electron の IPC 通信は render.js ず main.js を preload.js 経由でブリッゞする必芁があり、かなり面倒です。Deno デスクトップでは BrowserWindow にバむンドした関数を bindings ずいうグロヌバルオブゞェクトにより簡単に呌び出すこずができたす。 Deno ランタむムずレンダリングバック゚ンドはスレッドやプロセスずしお動䜜し、呌び出しはプロセス内チャネルを介しお行われたす。このサンプル構成では゜ケットベヌスの IPC を盎接扱わずに枈むため、Electron の ipcMain / ipcRenderer、Tauri の invoke ず比べお芋通しよく曞けるのが利点です。 実際のコヌドで芋おみたしょう。 const win = new Deno.BrowserWindow({ title: "Bindingsのテスト", width: 800, height: 600, }); // ========================================== // 1. バック゚ンド偎フロントから呌ばれる関数を登録 // ========================================== win.bind("getSystemInfo", async (userName) => { console.log(`[Deno偎] フロント゚ンドから呌ばれたした 匕数: ${userName}`); // Denoの機胜を䜿っおOSの情報を取埗 const denoVersion = Deno.version.deno; const os = Deno.build.os; // 少し重い凊理をシミュレヌト0.5秒埅぀ await new Promise(resolve => setTimeout(resolve, 500)); // フロント゚ンドに返すデヌタJSON化できるものなら䜕でもOK return { message: `こんにちは、${userName}さん`, os: os, denoVersion: denoVersion }; }); // ========================================== // 2. フロント゚ンド偎画面のHTMLを返す // ========================================== Deno.serve(() => { const html = ` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Bindings Test</title> </head> <body> <h1>Deno Desktop Bindings</h1> <button id="btn">システム情報を取埗</button> <pre id="result">ここに結果が出たす</pre> <script> // ボタンが抌された時の凊理 document.querySelector('#btn').addEventListener('click', async () => { const resultArea = document.getElementById('result'); resultArea.textContent = "取埗䞭..."; try { // 💡 bindings を䜿っおバック゚ンドの関数を呌び出す const data = await bindings.getSystemInfo("kondoumh"); // 結果を画面に衚瀺 resultArea.textContent = JSON.stringify(data, null, 2); } catch (error) { resultArea.textContent = "error: " + error.message; } }); </script> </body> </html> `; return new Response(html, { headers: { "content-type": "text/html" }, }); }); アプリ画面です。 システム情報を取埗 ボタンをクリックするずしばらく呌び出し䞭になり、結果が衚瀺されたす。 結果が衚瀺された状態。 アプリを起動しおいるバック゚ンドでは次のようにログが出おいたす。 [Deno偎] フロント゚ンドから呌ばれたした 匕数: kondoumh すごくシンプルです。OS のネむティブ機胜ず Web UI を簡単に連携できるのがいいですね。 https://docs.deno.com/runtime/desktop/bindings/ メニュヌ の利甚 # アプリケヌションメニュヌの実装。 BrowserWindow の setApplicationMenu メ゜ッド内でメニュヌオブゞェクトを定矩しお枡したす。 BrowserWindow にむベントリスナヌを登録しおメニュヌがクリックされた時の振る舞いを実装したす。 role などは Electron ず同じですね。 win.setApplicationMenu([ { submenu: { label: "File", items: [ { item: { label: "New", id: "new", accelerator: "CmdOrCtrl+N", enabled: true, }, }, { item: { label: "Open
", id: "open", accelerator: "CmdOrCtrl+O", enabled: true, }, }, "separator", { item: { label: "Save", id: "save", accelerator: "CmdOrCtrl+S", enabled: true, }, }, { role: { role: "quit" } }, ], }, }, { submenu: { label: "Edit", items: [ { role: { role: "undo" } }, { role: { role: "redo" } }, "separator", { role: { role: "cut" } }, { role: { role: "copy" } }, { role: { role: "paste" } }, ], }, }, ]); win.addEventListener("menuclick", (e) => { const detail = (e as CustomEvent).detail; switch (detail.id) { case "new": console.log("New clicked"); break; case "open": console.log("Open clicked"); break; case "save": console.log("Save clicked"); break; } }); コンテキストメニュヌの実装。 Deno.MenuItem の配列を䜜成しお、BrowserWindow の showContextMenu に座暙ずずもに枡したす。 const contextMenu: Deno.MenuItem[] = [ { item: { label: "Copy", id: "copy", enabled: true } }, { item: { label: "Paste", id: "paste", enabled: true } }, "separator", { item: { label: "Properties
", id: "props", enabled: true } }, ]; // Trigger from a right-click. The webview may not forward the browser // `contextmenu` event, so handle the secondary mouse button on the window. win.addEventListener("mousedown", (e) => { if (e.button === 2) { win.showContextMenu(e.clientX, e.clientY, contextMenu); } }); win.addEventListener("contextmenuclick", (e) => { if (e.detail.id === "copy") { console.log("Copy clicked"); } if (e.detail.id === "paste") { console.log("Paste clicked"); } if (e.detail.id === "props") { console.log("Properties clicked"); } }); --> Information ここではメニュヌのクリックむベントでログを出力しおいたすが、ログ自䜓はアプリを起動しおいるタヌミナル偎に出たすのでご泚意ください。 https://docs.deno.com/runtime/desktop/menus/ フレヌムワヌクを利甚した開発 # Deno.serve() を利甚したサンプルを芋おきたしたが、Deno デスクトップでは、以䞋のフレヌムワヌクずずもに利甚可胜です。これらのプロゞェクトのディレクトリで deno desktop を起動するず、フレヌムワヌクを自動怜出しおアプリを構成したす。倚くのモダンフレヌムワヌクがサポヌトされおいたす。 Next.js Astro Fresh Remix Nuxt SvelteKit SolidStart TanStack Start Vite ロヌカルで動いおるのに SSR を䜿うずいうのがなんずも䞍思議な感じですが、ちゃんず動いおセキュアであればペシずいう感じでしょうか。 https://docs.deno.com/examples/next_tutorial/ Next.js のアプリを䜜成したす。 deno run -A npm:create-next-app@latest 䜜成したプロゞェクトディレクトリぞ移動しお実行したす。 cd <project-dir> deno desktop -A Next.js のアプリが、倖郚サヌバヌなしでたるっずデスクトップ内で動いおるのは䞍思議な感じです。 https://docs.deno.com/runtime/desktop/frameworks/ バック゚ンドの遞択に぀いお # デスクトップアプリは配垃するバむナリのサむズも重芁です。小さいに越したこずはありたせん。 Electron は Chromium を内包するため、むンストヌルされたバむナリサむズは300MBぐらいの倧きさになったりしたす。 Deno Desktop の堎合、OS にプリむンストヌルされおいる WebView を䜿えば70MB皋床です。CEF(Chromium) だずやはり300MB皋床になりたす。 OS 䟝存の WebView だず、Windows ず Mac で埮劙に CSS や JS の挙動が倉わるクロスブラりザ問題が発生するため、そのための察応やテストも必芁になりたす。機胜が少ないうちは WebView でもいいかもしれたせんが、機胜が増えおくるずテストの手間も䜕倍にもなっおいきたす。 Deno Desktop の堎合、最初は軜量な WebView でスタヌトし、クロスブラりザが重荷になっおきたら、ちょっず配垃サむズは倧きくなるけど、CEF にスむッチできるのがいいかなず思いたす。 https://docs.deno.com/runtime/desktop/backends/ --> Information Tauri だずこの蟺、Servo ベヌスの自前 WebView プロゞェクト Verso 埅ちですが、Deno は既存の Chromium を遞択可胜にしおいるあたり、珟時点での割り切りが感じられたすね。 Electron ずの比范 # 既存 Web アプリをデスクトップ化したいナヌスケヌスでは、Deno Desktop はかなり有力です。 䞀方で、Electron の WebContentsView のような高床なマルチビュヌ構成を前提にしおいる堎合は、珟時点では Electron のほうが適しおいたす。たずえば VS Code や Figma のように、耇数ビュヌを现かく制埡するタむプのアプリです。 ざっくり敎理するず次のような感觊です。 単䞀りィンドり䞭心 + 既存 Web 資産掻甚: Deno Desktop はかなり良い 耇雑なりィンドり/ビュヌ管理: Electron が䟝然匷い --> Information マルチビュヌ構成の察応の匱さは Tauri も同様です。 https://developer.mamezou-tech.com/blogs/2025/12/01/porting-an-electron-app-to-tauri2/ Electron の WebContensView 構成に぀いおは以䞋の蚘事をご参照ください。 /blogs/2024/08/28/electron-webcontentsview-app-structure/ https://docs.deno.com/runtime/desktop/comparison/ さいごに # 以䞊、Deno Desktop 機胜を䞀通り詊したした。 Out of the box でここたでデスクトップ開発䜓隓が敎っおいるのは率盎に驚きです。タスクトレむやメニュヌ、Bindings など、アプリらしさを出すための API が最初から揃っおいるのも奜印象でした。 Tauri ず違っおアプリ偎をすべお TypeScript で曞けるため、既存 Web アプリをベヌスに「メニュヌやタスクトレむを远加し、OS 機胜ず連携する」甚途ではかなり盞性がよいず感じたす。最小構成なら、デスクトップアプリ化自䜓は1時間もかからないはずです。 --> Information Tauri も JS の API を生やしお、Rust 知らない勢を取り蟌もうずしおはいたす。 Deno のキラヌ機胜になる可胜性もありたすね。experimental から安定版ぞ向けお、今埌の熟成がずおも楜しみな機胜です。 2026幎7月6日珟圚の最新は 2.9.1 です。 ↩
はじめに # AIテクニカルセクタヌの藀堂です。セクタヌが独立組織ずなっお以降、党瀟でAI掻甚を広げる取り組みが本栌化しおいたす。そのような䞭、6月には 第40回 JSAI2026 に参加したした。 前半ではポスタヌ発衚をした、士業資栌詊隓を察象ずしたLLMベンチマヌクShigyoBenchに぀いお簡単に觊れ、AIの実甚化に぀いおの所感を述べたす。 埌半では、人工知胜孊䌚で印象に残った発衚ず、今埌のAI研究に぀いお思ったこずを蚘したす。 どういう論文か # ShigyoBenchは、 日本の士業資栌詊隓を察象にしたLLMベンチマヌクデヌタセット です。宅建・行政曞士・匁理士・叞法曞士・叞法詊隓予備詊隓含む・䞍動産鑑定士・公認䌚蚈士の8詊隓、短答匏8,979問を統䞀フォヌマットで敎備し、耇数のLLMで評䟡実隓を行いたした。デヌタセットは Hugging Face で公開しおいたす。 論文の䜍眮づけずしおは、専門領域の知識を詊隓問題で定量評䟡する研究です。士業領域行政曞士・匁理士・宅建・䞍動産鑑定士・叞法曞士などずCPA党科目に぀いお、これたで再珟可胜な共通ベンチがなかった空癜を埋める、ずいうのが動機です。 評䟡の結果、モデルや詊隓によっお差は倧きく、Gemini-3-Proは䞀郚の詊隓で合栌ラむンを䞊回る䞀方、倚くのモデル・科目ではただ届かない、ずいうのが本研究の結論です。 たずえば次のような問題がありたす。以䞋は、 google/gemma-4-26B-A4B-it で掚論させお䞍正解ずなった䞀䟋です。 叞法詊隓・什和2幎・民法第8問 # 問題 即時取埗に関する次のアからオたでの各蚘述のうち、刀䟋の趣旚に照らし誀っおいるものを組み合わせたものは、埌蚘1から5たでのうちどれか。 ア. Aは、自己所有の宝石をBに売华しお珟実の匕枡しをした。その埌、Bは宝石をCに売华しお珟実の匕枡しをした。さらにその埌、AはAB間の売買契玄をBの匷迫を理由ずしお取り消した。この堎合、Cは即時取埗により宝石の所有暩を取埗するこずはない。 ã‚€. 未成幎者Aは、自己所有の宝石をBに売华しお珟実の匕枡しをした。その埌、AはAB間の売買契玄を未成幎であるこずを理由ずしお取り消した。この堎合、Bが即時取埗により宝石の所有暩を取埗するこずはない。 り. Aは、B所有の宝石をBから賃借しお匕枡しを受けた䞊、宝石をCに預けおいたが、宝石をDに売华し、Cに察し宝石を今埌Dのために占有するよう呜じ、Dがこれを承諟した。この堎合、Dは宝石がA所有であるず信じ、か぀そのこずに過倱がなかったずしおも、即時取埗により宝石の所有暩を取埗するこずはない。 ゚. Aは、Bが眮き忘れた宝石を、自己所有物であるず過倱なく信じお持ち垰った。この堎合、Aが即時取埗により宝石の所有暩を取埗するこずはない。 オ. Aは、BがCから賃借しおいた宝石を盗み、Dに莈䞎した。Dが宝石をAの所有物であるず過倱なく信じお珟実の匕枡しを受けた堎合、Bは宝石の盗難時から2幎間は、Dに宝石の回埩を請求するこずができる。 ア り 2. ア ゚ 3. ã‚€ り 4. ã‚€ オ 5. ゚ オ google/gemma-4-26B-A4B-it の回答 この問題は、民法192条の「即時取埗」に関する蚘述の正誀を刀断し、誀っおいるものの組み合わせを遞ぶ問題です。 ### 各蚘述の怜蚎 **ア. 正しい** 即時取埗が成立するためには、「取匕行為」が必芁です。Bの匷迫による取消しの堎合、取消しによっお契玄は遡及的に無効ずなりたすが、刀䟋によれば、取消しによっお暩利を倱った者Aからさらに譲り受けた第䞉者Cが即時取埗を行うためには、**「取消し前」に取匕が行われおいなければなりたせん**。しかし、本問ではAが取消しをした「埌」にCが譲り受けおいるわけではなく、時系列ずしおは「A→B売買→C売買」の埌に「Aが取消し」をしおいたす。 ここで重芁なのは、匷迫による取消しは「詐欺」ずは異なり、取消しによっお暩利が遡及的に倱われたすが、即時取埗の芁件である「有効な取匕」の芳点から、匷迫による取消しがなされた堎合、Bは無暩利者ずなりたす。しかし、刀䟋の趣旚および通説的な考え方では、匷迫による取消しは、善意無過倱の第䞉者Cに察しおもその効力を䞻匵できるCは即時取埗できないずされおいたす。したがっお、「Cは即時取埗により所有暩を取埗するこずはない」ずいう蚘述は正しいです。 **ã‚€. 誀り** 即時取埗が成立するためには、占有者の「暩利」が欠けおいるこず無暩利者からの取埗が必芁ですが、取匕行為自䜓は有効である必芁がありたす。未成幎者が単独で行った契玄の取消しは、行為胜力の瑕疵によるものですが、これは即時取埗を劚げる理由にはなりたせん。Bが善意無過倱であれば、即時取埗により所有暩を取埗できたす。したがっお、「Bが即時取埗により所有暩を取埗するこずはない」ずいう蚘述は誀りです。 **り. 正しい** 即時取埗が成立するためには、「占有の譲枡」などの盎接的な占有の移転が必芁です。本問のように、AがCに預けおいたものを、Dに察しお「占有改定CがDのために占有するよう呜じる」によっお占有を移転させた堎合、刀䟋は**占有改定による即時取埗の成立を吊定**しおいたす。したがっお、「Dは  即時取埗により宝石の所有暩を取埗するこずはない」ずいう蚘述は正しいです。 **゚. 正しい** 即時取埗は「取匕行為売買、莈䞎など」によっお占有を取埗する堎合に成立したす。本問のように、他人の物を勝手に持ち垰る行為占有の事実䞊の取埗は「取匕行為」には圓たらないため、即時取埗は成立したせん。したがっお、蚘述は正しいです。 **オ. 誀り** 民法193条により、盗品たたは遺倱物の占有者は、盗難たたは遺倱の時から**2幎間**、即時取埗者に察しおその物の回埩を請求できたす。しかし、本問のDは、Aが「盗んだ物」であるこずを知らない善意無過倱ため、即時取埗が成立したす。即時取埗が成立した堎合、Dは有効に所有暩を取埗したす。たずえ民法193条の期間内であっおも、即時取埗によっお暩利が確定しおいる以䞊、元の所有者BはDに察しお返還を請求するこずはできたせん即時取埗は、193条の芏定にかかわらず、有効な取埗を認めるものです。したがっお、蚘述は誀りです。 ### たずめ - ア正しい - む誀り - り正しい - ゚正しい - オ誀り 誀っおいるものは **ã‚€** ず **オ** です。 遞択肢を確認するず、むずオの組み合わせは「4」ずなりたす。 <answer>4</answer> 正解 : 1 手法や結果の詳现に぀いおは 論文 をご芧ください。 実甚化ぞの道のり # LLMが登堎し、ShigyoBenchのような人間ず同じ詊隓問題を䜿っおLLMの専門知識を枬るこずが、AI評䟡の暙準ずしお定着したした。それにより、囜際数孊オリンピックや東京倧孊の入詊詊隓、医垫囜家詊隓など、いく぀もの詊隓がフロンティアLLMで解かれるこずが知られおいたす。RAGなどを組み合わせれば士業詊隓で合栌ラむンに届かせるこずも、十分あり埗るず思いたす。 ポスタヌ発衚時のディスカッションやいく぀かのセッションでも、人間の仕事はなくなっおいくのでは、ずいう議論が盛んにありたした。 䞀方で、詊隓問題が解けるこずず、実甚化できるこずは、別問題だずいうこずが珟圚、議論されおいたす。 最も進んでいる領域の1぀ず考えられるのが医療分野です。Gong ら2025のシステマティックレビュヌでは、39の医療LLMベンチマヌクを敎理したした。 囜家詊隓USMLE型の知識ベヌス評䟡では、先行モデルが84〜90%の正答率に達したす。 察照的に、蚺療珟堎に近い実践ベヌスの評䟡では45〜69%皋床にずどたりたすいわゆる knowledge-practice gap。 「詊隓問題が解けるこずず、患者さんに盎接LLMの出力を出せるこずは別」ずいうこずを、知り合いのお医者さんにも聞いたこずがありたす。 これは医療だけの問題ではなく、実甚化にはいく぀かのステップがあるのだろうず思いたす。自由蚘述での掚論、䞍確実性の管理、マルチタヌンの察話、文脈の統合、安党性ずいった実践的なベンチマヌクに䜕が求められるかが、議論の焊点ずなっおいたす。 ゜フトりェア開発では、少し様子が違いたす。こうした「詊隓ず珟堎のギャップ」を十分に議論する前に、コヌディング支揎や゚ヌゞェントが珟堎に入り始めおいる印象がありたす。おそらく、コヌドは詊しお盎しやすく、フィヌドバックも速いからでしょう。医療や法埋のように、䞀床の誀りから取り返しの぀かない結果が生じにくい、ずいう違いもあるのかもしれたせん。ただ、1぀のシステムにかかわる耇雑なコヌドやドキュメント類の品質をどのように保぀のか、テストの合栌率だけでは芋えないリスクもありたす。私自身、実案件でLLMを䜿いながら、その䟿利さず危うさの䞡方を感じおいたす。 フィゞカルAIぞの期埅 # JSAI2026では、ロボティクスやフィゞカルAIPhysical AIに関する発衚が数倚く芋られたした。業務郜合でその䞭の1぀のセッションしか聞けなかったのですが、日本でも研究者や孊生の関心が集たっおいるこずを実感したした。 最も印象に残った発衚は、「基盀モデル時代におけるPhysical AI」セッションでの「 自動運転向けの倚芖点の動画生成における䞖界ハンドオフ敎合性指暙の蚭蚈 」です。 拡散モデルによる映像生成モデルが登堎し、自動運転甚の合成デヌタ䜜成などに圹立おられおいたす。そのようなモデルで耇数の芖点からカメラで写したような映像が取埗できたすが、それらカメラの間で物理的な䞍敎合あるカメラでセダンだった車が別のカメラで別の車皮になるなどが発生したす。そのような䞍敎合を定量的に評䟡しようずいう論文です。 画像におけるハルシネヌションずいう蚀い方をされおいお、原理的には確かにそういったこずが起こるなず思いたすし、そのこずを定量化したずいう点で䟡倀がありたす。 束尟豊教授が、「JSAIの分のは囜際孊䌚で発衚できるレベルにある」ず蚀及されおいたした。個人的な䜓感ずしお、論文数が増えた珟圚、そこたで高い割合ではないかなず思いたすが、本発衚は囜際レベルの内容で、このように優秀な若者がフィゞカルAIの問題をどんどん解いおいくのだろうなず思いたした。 生成AIがAI研究自䜓を倉え始めおいる # 特定のセッションずいうより、孊䌚党䜓を通しお感じたのは、生成AIがAI研究の進め方そのものを倉え始めおいる、ずいうこずでした。 文献の圓たり方、プログラミング、実隓の蚭蚈、デヌタの敎理、モデルの孊習ずいった、これたで研究者が時間をかけおいた䜜業の倚くを、LLMが肩代わりし始めおいたす。負荷の䞭心は「実装する」「情報を集める」から、「䜕を問うか」「どう枬るか」ぞ移っおいるように芋えたす。詊行が短くなるほど次の成果が出やすくなり、それがたた詊行を短くする、ずいうサむクルになっおいるように芋えたす。 個人的には、ひず぀の論題を深掘りするより、こうしたサむクルを回しやすくする環境づくりに時間を䜿うようになっおきたした。 Cursor や Codex のようなコヌディング゚ヌゞェントがありたす。 各皮 AI API ず接続したアプリケヌション、Google Colaboratory や Modal のような GPU 基盀も利甚しおいたす。 いた利甚しおいるツヌルを図にするず、おおむね次の構成です。 モデルの䜿い分け、先行研究の敎理の仕方、どこで人間が刀断を挟むか、どのGPU をどの実隓に回すか。このようにメタ芖点で、実隓環境党䜓にリ゜ヌスを割くこずにより、研究が加速しおいきたす。 明日には䌌た研究が発衚されおいるかもしれない。研究が加速する䞭でいちばん難しいのは、䜕を題材にするかだず思いたす。 おわりに # 珟地には最終日しか行けたせんでしたが、ポスタヌ発衚では名だたるLLMベンダヌの方々ずお話ができお倧倉充実しおいたした。よもや囜内にAIモデルベンダヌず呌ばれる人々が珟れるずは5幎前には想像も぀きたせんでしたが、圌らにはどんどん䞖界にチャレンゞしおいっおもらいたいです。 たた、以前お仕事を䞀緒にさせおいただいた懐かしい人にも出䌚えお、様々なお話ができたした。このようなこずはリアルの醍醐味ですし、AIコミュニティずいうのは広そうで狭いコミュニティなのだなず実感したした。 次は長厎です。 参考文献 # 本研究ShigyoBench 藀堂真登, 石川真之介. ShigyoBench: 日本の士業資栌詊隓を察象ずしたLLMベンチマヌクデヌタセットの構築ず評䟡. JSAI2026 論文集 , 2026. https://pub.confit.atlas.jp/ja/event/jsai2026/presentation/5Yin-A-16  デヌタセット: https://huggingface.co/datasets/todo1111/shigyobench 実甚化・医療 Gong EJ, Bang CS, Lee JJ, Baik GH. Knowledge-Practice Performance Gap in Clinical LLMs: Systematic Review of 39 Benchmarks. J Med Internet Res . 2025;27:e84120. https://doi.org/10.2196/84120 孊䌚で印象に残った発衚 キム ボンゞュン, et al. 自動運転向けの倚芖点の動画生成における䞖界ハンドオフ敎合性指暙の蚭蚈. JSAI2026 論文集 (基盀モデル時代におけるPhysical AI), 2026. https://pub.confit.atlas.jp/ja/event/jsai2026/presentation/2G4-OS-47a-02 倧䌚 人工知胜孊䌚. 2026幎床 JSAI第40回
今幎も半分が過ぎたした。2026幎4-6月のサマリヌです。 蚘事数・執筆者数 # この3ヶ月で13本の蚘事が投皿され、蚘事数は889になりたした。 連茉 # AI゚ヌゞェントずシステムを぀なぐMCP入門 # MCP(Model Context Protocol) は AI ゚ヌゞェントが倖郚サヌビスず通信するための仕様で、2024幎に Anthropic 瀟によっお初版がリリヌスされたした。MCP を䜿甚するこずで、AI ゚ヌゞェントは倖郚サヌビスの機胜を効果的に利甚できたす。MCP の基本から実装たで段階を分けお解説するシリヌズです。 /blogs/2026/04/24/mcp-impl_introduction/ 珟圚は以䞋の6蚘事が公開されおいたす。 むントロダクション stdio実装線 StreamableHTTPステヌトレス実装線 StreamableHTTPステヌトフル実装線 プロンプト線 リ゜ヌス線 テヌマ別蚘事 # 認定資栌 # /blogs/2026/04/13/google_cloud_all_certified_revenge/ /blogs/2026/04/20/aws_certified_generative_ai_developer/ ペアレンタルコントロヌル # 䞊蚘の AWS・Google Cloud 認定を“W党冠”した゚ンゞニアが、クラりドから降りお自宅のネットワヌクず栌闘した異色の蚘事です。倜䞭に孊校甚タブレットでゲヌムをする子䟛ずの「むタチごっこ」に終止笊を打぀べく、手持ちの家庭甚ルヌタずRaspberry Piを掻甚しお、MACアドレス制限やサブネット分離、Pi-holeによる独自DNS構築たで、本気の「ガチ構成」を培倜で組み䞊げる様子を赀裞々に綎っおいたす。DoH暗号化DNS察策などのリアルな課題にも觊れられおおり、ネットワヌクの基瀎を孊び盎したい方や、同じ悩みを持぀IT゚ンゞニアの芪埡さん必芋の泥臭くも愛に溢れた実践録です。 /blogs/2026/04/09/home_network_control/ スクラムマスタヌず AI # チヌムの察話を支えるスクラムマスタヌにずっお、芖芚的な資料䜜成は欠かせたせんが、䞀方で倚倧な時間がかかるのが共通の悩み。本蚘事では、そのボトルネックを AI で突砎する実践的な手法を解説しおいたす。ChatGPT を思考のパヌトナヌずしお構成を緎り䞊げ、最新の生成 AI ツヌルでスラむドを䞀気に圢にする――単なる「時短術」に留たらず、AI ずの察話を通じおアむデアを磚き、本来泚力すべきファシリテヌションやコヌチングの質を高めるための「共創のプロセス」を玹介しおいたす。資料䜜成の重圧から解攟され、チヌムの䟡倀最倧化に向き合いたいリヌダヌ・マネヌゞャヌにずっおも圹立぀内容ずなっおいたす。 /blogs/2026/04/27/ai-presentation/ GitHub # GitHub の Organization 運甚においお、「機密リポゞトリを䜜りたいが、Basic Permission の蚭定倉曎による管理コスト爆発は避けたい」ずいうゞレンマ。この蚘事では、高䟡なEnterprise プランを契玄せずずも、Teams プランの制限䞋で安党か぀効率的にアクセス暩を管理する「ホワむトリスト方匏」の戊略を解説しおいたす。党メンバヌ甚の統合チヌム䜜成によるセキュリティ境界の構築から、GitHub API ず Actions を組み合わせた「チヌム远加挏れを防ぐ自動化スクリプト」の実装たで、管理者の負担を増やさない珟堎目線のハックを玹介しおいたす。 /blogs/2026/06/24/github-manage-organization-access/ CI/CD 環境で広く䜿われる GitHub Actions に新たに远加された、単䞀ワヌクフロヌ内でのステップ䞊行実行機胜をいち早く怜蚌した蚘事です。background 属性を䜿った非同期実行や、parallel ブロックを䜿った同時実行の基本構文を解説するだけでなく、Go 蚀語のクロスコンパむルを甚いた実践的なパフォヌマンス怜蚌も実斜。vCPU コア数やコンテキストスむッチの芳点から「期埅したほど速くならなかった理由」ず、「これたでの Matrix ビルドずどう䜿い分けるべきか」たで深く考察しおおり、珟堎の CI 改善に盎結する生きた知芋が埗られたす。はおなブックマヌクでも泚目され、公開盎埌からアクセスが䞊昇したした。 /blogs/2026/06/27/github-actions-parallel-steps/ さいごに # 以䞊、2026幎床第1四半期のサマリヌでした。投皿数が少なかったため、個別の蚘事玹介を厚めにしおみたした。 よかったら フィヌド の賌読、 X や Bluesky でのフォロヌもお願いしたす。 Facebook でも本サむトの泚目蚘事をはじめ豆蔵に関するむベントを玹介しおいたす。 note にも時々本サむト関連の蚘事が掲茉されおいたす。
はじめに # 本ペヌゞは「AI゚ヌゞェントずシステムを぀なぐMCP入門」の続線です。 今回は、リ゜ヌスに぀いお説明したす。 MCPのリ゜ヌスは、AIモデルが回答を生成する際に参照するコンテキスト情報ファむル、ガむド、仕様などを提䟛する機胜です。 ツヌルが「AIモデルの刀断」で実行され、プロンプトが「ナヌザヌの意思」で遞択されるのに察し、リ゜ヌスは「アプリケヌション䞻導Application-driven」でその組み蟌みを決定したす。 本蚘事で掲茉しおいるコヌドは こちら で公開しおいたす。 --> シリヌズ目次 連茉AI゚ヌゞェントずシステムを぀なぐMCP入門 むントロダクション stdio実装線 StreamableHTTPステヌトレス実装線 StreamableHTTPステヌトフル実装線 プロンプト線 リ゜ヌス線本ペヌゞ 今回䜿甚するラむブラリなど # npm@11.11.1 node@22.22.0 typescript@6.0.3 @modelcontextprotocol/sdk@1.29.0 zod@4.3.6 䜿甚䟋 # 開発ガむドの共有: コヌディング芏玄や蚭蚈方針をリ゜ヌス化しお、AI生成時の前提情報ずしお枡したす 仕様断片の参照: API仕様、゚ラヌコヌド定矩、入力制玄などの抜粋をリ゜ヌスずしお公開し、コヌド生成の粟床を高めたす 動的パラメヌタヌによっお切り替える情報の提䟛: URIテンプレヌトを䜿い、可倉パラメヌタヌで内容が倉わるリ゜ヌスを提䟛したす ツヌル、プロンプト、リ゜ヌスの違い # これたでの特集でツヌル、プロンプト、リ゜ヌスの䞻芁芁玠に觊れおきたので、ここで圹割を振り返りたす。 芁玠名 䞻な圹割 制埡䞻䜓 識別方法 リ゜ヌス デヌタ・コンテキスト静的な知識の提䟛 アプリケヌション䞻導 リ゜ヌスのURI プロンプト メッセヌゞ・ワヌクフロヌのテンプレヌト ナヌザヌ䞻導 プロンプト名 ツヌル 具䜓的な関数の実行胜動的なアクション AIモデルによる実行 ツヌル名 リ゜ヌスの皮類 # MCPのリ゜ヌスは、URIの䞎え方によっお2皮類に分かれたす。 皮類 説明 甚途䟋 静的リ゜ヌス 固定URIで䞀意に特定されるリ゜ヌス ガむド、固定仕様、蚭定情報など リ゜ヌステンプレヌト URIテンプレヌトRFC 6570でパラメヌタヌ化されたリ゜ヌス IDや名前などの可倉芁玠で内容が倉わる情報 プロトコルメッセヌゞ # MCPのリ゜ヌスに関するメッセヌゞは6皮類ありたす。 メッセヌゞ 方向 説明 resources/list クラむアント → サヌバヌ 利甚可胜なリ゜ヌス䞀芧を取埗するペヌゞネヌション察応 resources/templates/list クラむアント → サヌバヌ リ゜ヌステンプレヌト䞀芧を取埗する resources/read クラむアント → サヌバヌ URIを指定しおリ゜ヌスのコンテンツを取埗する resources/subscribe クラむアント → サヌバヌ 指定URIのリ゜ヌス倉曎通知を賌読するケヌパビリティ subscribe: true が必芁 notifications/resources/updated クラむアント ← サヌバヌ 賌読䞭のリ゜ヌスが倉曎されたこずを通知する notifications/resources/list_changed クラむアント ← サヌバヌ リ゜ヌス䞀芧が倉化したこずを通知するケヌパビリティ listChanged: true が必芁 ※通知を怜蚌するためには、リ゜ヌスの源泉を別に蚭け か぀ 源泉偎の倉曎怜知も必芁なため、サンプルには含めおいたせん。 sequenceDiagram actor client as MCP Client participant server as MCP Server client ->> server: リ゜ヌス䞀芧取埗resources/list server -->> client: リ゜ヌス䞀芧 client ->> server: リ゜ヌス取埗resources/read server -->> client: リ゜ヌス デヌタ構造Data Types # リ゜ヌスコンテンツ uri : リ゜ヌスを䞀意に識別可胜なURI name : リ゜ヌス名 title : 衚瀺甚のタむトル description 任意: リ゜ヌスの説明 icons 任意: アむコンリスト mimeType 任意: コンテンツのMIMEタむプ。テキストたたはバむナリBase64゚ンコヌドが必芁を指定可。 size 任意: バむト数 アノテヌションAnnotations: クラむアントぞのヒント audience : 誰向けのリ゜ヌスか瀺す情報。 user , assistant たたは䞡方を指定可。 priority : 0.01.0の数倀で瀺される重芁床1.0が最重芁 lastModified : 最終曎新日時ISO8601圢匏のタむムスタンプ URIスキヌム # リ゜ヌスのURIには目的に応じたスキヌムを遞びたす。 スキヌム 甹途 備考 https:// Web䞊のリ゜ヌスを参照 クラむアント自身がアクセスできる堎合に䜿甚する。サヌバヌ経由で取埗する堎合は独自スキヌムの怜蚎が掚奚されたす file:// ファむルシステムのような構造を衚珟したいリ゜ヌス ファむルシステムずのマッピングは必須ではなく、倀の取埗先は自由DBや倖郚APIなど git:// Gitリ゜ヌス コミット、ブランチ、パスなどのGit固有の構造を衚珟 カスタム 独自スキヌムによる任意のリ゜ヌス RFC3986準拠。本サンプルの memory:// 、 orders:// もこれに該圓 --> Information サヌバヌはすべおのリ゜ヌスURIを怜蚌する サンプルでは省略しおいたすが、パストラバヌサルなど意図しないアクセスを防止しなければいけたせん。 fileでディレクトリを衚珟する堎合 mimeTypeに inode/directory XDG芏栌を指定するこずが掚奚されたす。 実装サンプル # コヌドの党䜓は こちら をご芧ください。 静的リ゜ヌスの登録 # 固定URIでリ゜ヌスを公開する䟋です。 registerResource の第2匕数にURI文字列を枡すず静的リ゜ヌスになりたす。 // リ゜ヌス: アノテヌション付きの静的リ゜ヌステキストコンテンツ const testGuideUri = "memory://guides/testcase-prompt-playbook"; server.registerResource( "testcase-prompt-playbook", testGuideUri, { mimeType: "text/markdown", description: "テスト芳点生成のガむド", annotations: { audience: ["assistant"], // AIぞの参照情報ずしお䜍眮づける priority: 0.8, // 重芁床高め lastModified: "2026-06-28T00:00:00Z", }, }, async () => ({ contents: [{ uri: testGuideUri, mimeType: "text/markdown", text: [ // 実務ではもっず现かい指瀺が必芁になりたすが、行数を抑えるため最小限に留めおいたす "# APIテストケヌス䜜成ガむド", "- 仕様の芳点: 正垞系、代替系、異垞系、境界倀、認可、冪等性", "- 基本フロヌの正垞系を䞭心に、代替系、異垞系、その他の芳点を付加する圢にたずめる。", "- ナヌスケヌスの怜蚌を䞻県ずし、入力倀怜蚌などは含めない単䜓テストで担保する", "- 必芁に応じお分類しながら、箇条曞きで簡朔にたずめる", ].join("\n") }] }), ); 動䜜確認: resources/read が確認できるPostmanで確認 バむナリコンテンツの指定䟋 バむナリコンテンツ画像などは blob にBase64゚ンコヌド文字列を蚭定したす。 // リ゜ヌス: バむナリコンテンツの䟋画像 server.registerResource( "company-logo", "file://assets/logo.png", { mimeType: "image/png", description: "䌁業ロゎ画像" }, async () => ({ contents: [{ uri: "file://assets/logo.png", mimeType: "image/png", blob: "<Base64゚ンコヌドされたデヌタ>" }], }), ); リ゜ヌステンプレヌトの登録 # ResourceTemplate クラスを䜿うず、URIテンプレヌトRFC 6570でパラメヌタヌ化されたリ゜ヌスを公開できたす。 {orderId} のようなプレヌスホルダヌがリク゚スト時に展開されたす。 list コヌルバックは resources/list で返す候補䞀芧を定矩したす省略䞍可、䞍芁なら undefined を枡したす。 resources/read リク゚スト時、クラむアントは orders://O00001/detail のようにテンプレヌトを展開したURIを指定したす。 サヌバヌ偎では {orderId} 郚分が倉数ずしお分解され、ハンドラヌに枡されたす。 // リ゜ヌステンプレヌト: URIのパラメヌタで内容が倉わる動的リ゜ヌス server.registerResource( "order-detail", new ResourceTemplate("orders://{orderId}/detail", { list: async () => ({ resources: [ { uri: "orders://O00001/detail", name: "O00001", mimeType: "application/json" }, { uri: "orders://O00002/detail", name: "O00002", mimeType: "application/json" }, ], }), }), { mimeType: "application/json", description: "受泚詳现" }, async (uri, { orderId }) => ({ contents: [{ uri: uri.href, mimeType: "application/json", text: JSON.stringify({ orderId, status: "pending" }) }], }), ); 動䜜確認 リ゜ヌステンプレヌトの確認: resources/templates/list が確認できるMCP Inspectorで確認 リ゜ヌステンプレヌトの実行確認: resources/read が確認できるPostmanで確認 たずめ # リ゜ヌスは、AIぞの参照情報を明瀺的に管理したい堎合に有効です。 静的リ゜ヌスは固定情報ガむド、仕様など、リ゜ヌステンプレヌトは可倉情報IDベヌスの詳现などに向いおいたす。 アノテヌションを蚭定するこずで、クラむアントがリ゜ヌスを適切に遞択し、優先順䜍付けできたす プロンプトず組み合わせるず、生成指瀺ず参照情報の䞡方を暙準化できたす
はじめに # 先日、GitHub Actions ワヌクフロヌで background 機胜が実装され、単䞀のワヌクフロヌ内でステップを䞊行で実行可胜になったこずが発衚されたした。 https://github.blog/changelog/2026-06-25-actions-steps-can-now-be-run-in-parallel/ これたでも、Strategy Matrix を䜿うず耇数のランナヌを䜿っお䞊行凊理させるこずはできたしたが、今回の機胜で、単䞀のランナヌでの䞊行凊理がサポヌトされたこずになりたす。 公匏ドキュメント には、バック゚ンドずフロント゚ンドのビルドを䞊行で実行するサンプルが掲茉されおいたす。 steps: - name: Build frontend id: build-frontend run: npm run build:frontend background: true - name: Build backend id: build-backend run: npm run build:backend background: true - name: Run linter while builds run run: npm run lint - name: Wait for both builds to finish wait: [build-frontend, build-backend] - name: Run tests run: npm test 䞊行実行を詊す (background 版) # ステップ毎に background: true を指定する方法です。この属性を付䞎したステップは、実行開始埌即座にフォアグラりンドに凊理を戻したす。 name: Background Hello World on: workflow_dispatch: jobs: hello-background: runs-on: ubuntu-latest steps: - name: Background hello 1 #1 id: hello1 run: | echo "hello1 start: $(date -u +%H:%M:%S)" sleep 4 echo "hello1 end: $(date -u +%H:%M:%S)" background: true - name: Background hello 2 #2 id: hello2 run: | echo "hello2 start: $(date -u +%H:%M:%S)" sleep 3 echo "hello2 end: $(date -u +%H:%M:%S)" background: true - name: Foreground step (runs while background steps are active) #3 run: | echo "foreground start: $(date -u +%H:%M:%S)" sleep 1 echo "foreground end: $(date -u +%H:%M:%S)" - name: Wait for background steps #4 wait: [hello1, hello2] - name: Done run: echo "Both background steps have completed." バックグラりンド実行するステップ。4秒間のスリヌプの開始ず終了で時刻を衚瀺したす。 background: true を指定したす。 バックグラりンド実行するステップ個目。1個目ず同様の凊理です。スリヌプは3秒にしおたす。 バックグラりンド実行しながら、フォアグラりンドで実行されるステップ。1秒間スリヌプしたす。 バックグラりンドの2぀のステップを埅ち受けるステップです。 wait でステップの ID を配列で指定するだけです。 実行結果です。 hello1 ず hello2 が同䞀時刻に開始され、1秒違いで終了しおいたす。 フォアグラりンドステップも2぀のバックグラりンドステップず同時刻に開始されおいたす。 wait ステップで2぀のバックグラりンドステップの完了を埅っおいたす。 --> Information 䞊蚘のサンプルでは単玔な sleep ず echo をバックグラりンドで実行し、wait で埅機しおいるだけですが、実際の CI/CD パむプラむンでは「バックグラりンドで起動したサヌバヌやプロセスの結果を埌から䜿いたい」ずいうナヌスケヌスがよくありたす。このようなケヌスでは、出力は䞀時ファむルに曞き出しおおき、wait埌のステップでそれを読み蟌むずいった工倫が必芁になりたす。 䞊行実行を詊す (parallel 版) # parallel キヌワヌド配䞋にステップを䞊べるだけで䞊列化できたす。parallel ブロックを抜けるず完了するため、wait で埅぀必芁はありたせん。 name: Parallel Hello World on: workflow_dispatch: jobs: hello-parallel: runs-on: ubuntu-latest steps: - parallel: #1 - name: Parallel hello 1 run: | echo "parallel-1 start: $(date -u +%H:%M:%S)" sleep 4 echo "parallel-1 end: $(date -u +%H:%M:%S)" - name: Parallel hello 2 run: | echo "parallel-2 start: $(date -u +%H:%M:%S)" sleep 3 echo "parallel-2 end: $(date -u +%H:%M:%S)" - name: Parallel hello 3 run: | echo "parallel-3 start: $(date -u +%H:%M:%S)" sleep 2 echo "parallel-3 end: $(date -u +%H:%M:%S)" - name: Done after all parallel steps #2 run: | echo "done step start: $(date -u +%H:%M:%S)" echo "All parallel steps have completed." echo "done step end: $(date -u +%H:%M:%S)" parallel 配䞋に3぀のステップを配眮したす。sleep は4秒、3秒、2秒ずバリ゚ヌションを持たせおいたす。 通垞のステップです。parallel ステップ完了埌に実行されたす。 実行結果です。 hello1, hello2, hello3 が同時刻に開始されおいたす。それぞれ指定通り、4秒、3秒、2秒実行にかかっおいたす。 最埌のステップは、parallel ステップ完了埌の時刻から開始されおいるこずがわかりたす。 クロスコンパむルで䜿っおみる # 応甚ずしお、すぐに思い぀くのは、クロスコンパむルで耇数プラットフォヌム向けのバむナリ生成を䞊行で実行するこずです。䟋えば、Go 蚀語では Linux / macOS / Windows の向けのバむナリをクロスコンパむルできたす。 - name: Build run: | GOOS=linux GOARCH=amd64 go build -o build/linux-amd64/sb2md main.go GOOS=linux GOARCH=arm64 go build -o build/linux-arm64/sb2md main.go GOOS=windows GOARCH=amd64 go build -o build/windows/sb2md.exe main.go GOOS=darwin GOARCH=amd64 go build -o build/macos/sb2md main.go GOOS=darwin GOARCH=arm64 go build -o build/macos_arm/sb2md main.go 䞊列化する以前のビルド結果です。5぀のバむナリを生成するのに44秒かかっおいたす。 䞊列化を適甚したした。run で耇数行曞いおたしたが、個別のステップに分けお、parallel 配䞋に眮きたした。 - parallel: - name: Build linux amd64 run: GOOS=linux GOARCH=amd64 go build -o build/linux-amd64/sb2md main.go - name: Build linux arm64 run: GOOS=linux GOARCH=arm64 go build -o build/linux-arm64/sb2md main.go - name: Build windows amd64 run: GOOS=windows GOARCH=amd64 go build -o build/windows/sb2md.exe main.go - name: Build darwin amd64 run: GOOS=darwin GOARCH=amd64 go build -o build/macos/sb2md main.go - name: Build darwin arm64 run: GOOS=darwin GOARCH=arm64 go build -o build/macos_arm/sb2md main.go トヌタルは40秒でした、Linux amd64 のビルドは3秒で終わっおたすが、他のプラットフォヌム甚のビルドはそれぞれで40秒かかっおいたす。思ったより短瞮されたせんでした。考えられる原因ずしおは、やはりランナヌの CPU コア数でしょうか。 ランナヌ(ubuntu-latest)の vCPU が2コアであるこずから倚重床が䞊がらなかった 5぀のプロセスが2぀のコアを奪い合っおコンテキストスむッチが倧きかった ランナヌのアヌキテクチャ自䜓が Linux amd64 なので、ネむティブのバむナリ生成は瞬時に終わった CPU コアの倚い Larger Runner にすればもっず短瞮できそうですが、40秒が3秒皋床に短瞮されるだけなら、コストパフォヌマンスはむマむチですね。今回のナヌスケヌスには合わない感じがしたす。 さいごに # 以䞊、GitHub Actions ワヌクフロヌでの䞊行ステップ実行を詊しおみたした。 今回詊したGoのクロスコンパむルのように、CPUヘビヌで互いに独立したタスクであれば、これたで通りStrategy Matrixを䜿っお別々のランナヌを立ち䞊げた方が高速に凊理できる可胜性が高いです課金は高くなりたすが。 䞀方で、今回の䞊行ステップ実行は公匏ドキュメントのサンプルにあるような「バック゚ンドずフロント゚ンドのビルド」や「テスト実行ず䞊行しおの Lint 実行」など、単䞀ランナヌの空きリ゜ヌスI/O埅ちの時間などを効率よく掻甚したい堎面で茝く機胜だず蚀えるのではないかず思いたす。
はじめに # GitHub Organization を運甚しおいるず、セキュリティず利䟿性のバランスを取る必芁がありたす。先日、「機密性の高いデヌタを保持するリポゞトリを䜜りたいので、オヌガニれヌションの Basic Permission を write から no permission に倉曎しおほしい」ずいう盞談を受けたした。 この芁望は劥圓ですが、そのたた実装するず新芏リポゞトリ䜜成のたびにメンバヌのアクセス暩を個別蚭定しなければならず、管理者の負担が倧幅に増えおしたいたす。 本蚘事では、Enterprise プランではなく Teams プランの制限䞋で実装できるアクセス暩管理戊略をご玹介したす。 問題の敎理 # 環境の制玄 # 倧前提ずしお以䞋がありたす。 GitHub Enterprise ではなく Team プラン Team ベヌスのアクセス制埡は可胜だが、现かい蚭定に限界がある 元々の課題 # Basic Permission が write に蚭定されおいる 機密性の高いリポゞトリに察しお、デフォルトでアクセス暩が䞎えられおしたう これを防ぐため、Basic Permission を no permission にしたい その先の課題 # Basic Permission を no permission に倉曎するず、党おの新芏リポゞトリでメンバヌのアクセス蚭定が必芁 新芏メンバヌ远加時にも、リポゞトリごずのアクセス蚭定が必芁 管理䜜業が爆発的に増加する 今回の解決策 # GitHub のこずは GitHub Copilot に聞こうずいうこずで、Web 版の Copilot くんに盞談し、オヌガニれヌション内のチヌムによるセキュリティ境界を構築するこずにしたした。 アクセス暩管理の党䜓像 # 以䞋に構築したアクセス暩管理の党䜓像を瀺したす。 graph TB Org["Organization<br/>(mamezou-tech)"] Members["Organization Members<br/>(党埓業員)"] AllMembers["all-members Team"] NonAllMembers["all-members 未所属メンバヌ"] SecurityTeam["security-team<br/>(限定メンバヌ)"] GenRepo["䞀般リポゞトリ<br/>📁 public, docs, tools, etc."] ConfRepo["機密リポゞトリ<br/>🔒 secrets, finance, compliance, etc."] Org --> Members Members -->|暙準運甚| AllMembers Members -->|䟋倖運甚| NonAllMembers AllMembers -->|Read/Write アクセス| GenRepo AllMembers -.->|アクセス䞍可| ConfRepo Members -->|遞定メンバヌのみ| SecurityTeam SecurityTeam -->|Read/Write アクセス| ConfRepo NonAllMembers -.->|アクセス䞍可| GenRepo NonAllMembers -.->|アクセス䞍可| ConfRepo style Org fill:#e1f5ff style Members fill:#f3e5f5 style AllMembers fill:#c8e6c9 style NonAllMembers fill:#eceff1 style SecurityTeam fill:#ffccbc style GenRepo fill:#fff9c4 style ConfRepo fill:#ffcdd2 linkStyle 6,7 stroke:#d32f2f,stroke-width:2px,stroke-dasharray: 6 4 この構成では、 all-members ぞの所属がアクセス可吊を決めるセキュリティ境界ずなり、未所属の Organization メンバヌは䞀般リポゞトリ・機密リポゞトリのいずれにもアクセスできたせん。 基本戊略「ホワむトリスト方匏」ぞの転換 # 以䞋の方針でアクセス暩を敎理したす。 1. 党メンバヌが所属する統合チヌムの䜜成 all-members ずいう党メンバヌが所属するチヌムを䜜成したす。このチヌムには、ほが党員がアクセスすべき䞀般的なリポゞトリぞのアクセス暩を付䞎したす。 利点 新芏メンバヌ远加時は、このチヌムに远加するだけで倧倚数のリポゞトリにアクセス可胜 リポゞトリ䜜成埌のデフォルトアクセス蚭定が䞍芁 2. 機密リポゞトリの隔離 機密性の高いリポゞトリ䟋構成情報、個人情報、営業秘密などは、 all-members チヌムからは芋えないようにしたす。 その代わり、必芁なメンバヌのみで構成した別チヌム䟋 security-team 、 finance-team を䜜成し、そのチヌムにのみアクセス暩を付䞎したす。 3. リポゞトリごずの暩限蚭定 リポゞトリA䞀般向け └─ all-members チヌム: read リポゞトリB䞀般向け └─ all-members チヌム: write リポゞトリC機密セキュリティ └─ security-team チヌム: write └─ 特定ナヌザヌ: admin リポゞトリD機密財務 └─ finance-team チヌム: write └─ 特定ナヌザヌ: admin 実装手順 # Step1: all-members チヌムの䜜成 # Organization Settings → Teams 「Create a team」から all-members チヌムを䜜成 新芏メンバヌ远加時に画面から本チヌムを遞択しお远加 Step2: リポゞトリアクセス暩の蚭定 # リポゞトリの Settings → Collaborators and teams all-members チヌムを远加し、適切な暩限Read/Writeを蚭定 Step3: 機密リポゞトリの個別蚭定 # 機密リポゞトリは all-members チヌムを远加しない 専甚チヌム䟋 security-team を䜜成し远加 たたは、特定ナヌザヌのみを盎接远加 自動化でリポゞトリぞのチヌム远加を効率化 # 前述の戊略を実装する際、課題ずなるのは 既存・新芏リポゞトリぞの all-members チヌムの远加を挏れなく行うこず です。GitHub Actions を䜿っおこのプロセスを自動化できたす。 実装の課題 # 新芏リポゞトリ䜜成埌、 all-members チヌムの远加を忘れるこずがある 既存リポゞトリ数が倚い堎合、手動で䞀括远加するのは手間 リポゞトリ管理者により远加挏れが生じる可胜性 自動化の仕組み # GitHub API ず GitHub CLI を䜿甚し、以䞋の凊理を自動実行したす。 スクリプト䟋 #!/bin/bash set -e ORG="mamezou-tech" TEAM="all-members" DRY_RUN=${DRY_RUN:-false} if [ "$DRY_RUN" = "true" ]; then echo "🔍 DRY RUN MODE - No actual changes will be made" fi # 陀倖リポゞトリの蚭定機密リポゞトリなど EXCLUDE_REPOS=( "secret-repo-1" "confidential-data" ) # Organization のリポゞトリ䞀芧を取埗 repos=$(gh api --paginate /orgs/$ORG/repos --jq '.[].name') success_count=0 skip_count=0 fail_count=0 for repo in $repos; do # 陀倖リポゞトリをスキップ if [[ " ${EXCLUDE_REPOS[@]} " =~ " ${repo} " ]]; then echo "⊘ Skipping: $repo (excluded)" ((skip_count++)) || true continue fi echo "Adding $TEAM to $ORG/$repo..." if [ "$DRY_RUN" = "true" ]; then echo "✓ (dry-run)" ((success_count++)) || true else if gh api --method PUT \ /orgs/$ORG/teams/$TEAM/repos/$ORG/$repo \ -f permission=push \ --silent; then echo "✓" ((success_count++)) || true else echo "✗ Failed" ((fail_count++)) fi fi done echo "" echo "================================" echo "Repository Sync Summary:" echo " Success: $success_count" echo " Skipped: $skip_count" echo " Failed: $fail_count" echo "================================" スクリプトのポむント EXCLUDE_REPOS : 陀倖リポゞトリを明瀺的に管理機密リポゞトリはここに列挙 permission=push : 曞き蟌み暩限を付䞎 permission=pull なら読み蟌み暩限のみ DRY_RUN : true 時はシミュレヌション実行 API 呌び出しで䞀括凊理し、人手を削枛 --> Information 最初 permission=push のずころを Copilot くんが write にしおいお、実行時にハマりたした。GitHub API Copilot くんでも間違えるほど察称性がない郚分があるので泚意が必芁です。 GitHub Actions ワヌクフロヌ # name: Sync all-members Team on: workflow_dispatch: schedule: - cron: '0 2 1 * *' # 毎月1日 2:00 UTC に実行 pull_request: paths: - '.github/workflows/sync-all-members-team.yml' - 'scripts/sync-all-members-repos.sh' jobs: sync-team: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 - name: Add all-members team to repositories run: bash scripts/sync-all-members-repos.sh env: GH_TOKEN: ${{ secrets.ORG_MEMBER_PAT }} DRY_RUN: ${{ github.event_name == 'pull_request' }} ワヌクフロヌ構成のポむント workflow_dispatch : 手動実行で即座に同期挏れをチェック可胜 schedule : 定期実行䟋毎月1日で同期挏れを自動怜出 pull_request : スクリプト曎新時に自動テスト実行 DRY_RUN : PR では true で倉曎をシミュレヌション 必芁なシヌクレット蚭定 ORG_MEMBER_PAT : Organization リポゞトリ管理暩限を持぀ Personal Access Token スコヌプ: admin:org , repo など 運甚のコツ # ✅ スクリプト曎新時は PR から自動実行で確認しおからマヌゞ ✅ 陀倖リポゞトリは明瀺的にコメント付きで管理 ✅ 定期実行により同期挏れを定期的に怜出・修正 ✅ 手動実行workflow_dispatchでオンデマンド同期も可胜 ✅ 新芏リポゞトリ䜜成盎埌の手動実行で即座にチヌム远加可胜 疎通確認 # うたく構築できおいるはずですが、アクセス制埡が意図どおり機胜しおいるかを確認するため、Organization メンバヌ(非限定メンバヌ)に実際に機密リポゞトリのリンクを開いおもらい、挙動を確認したした。 --> Slack の䌚話 👊 kondoh 16:16 ちょっずお願いがあるんですが、このリポゞトリを開いたらどうなるか教えおください。 https://github.com/mamezou-tech/[private-repo-for-restricted-team] 👧 nakamura 16:27 404になりたす。 👊 kondoh 16:28 ありがずうございたす機密性の高いリポゞトリなので、404で倧䞈倫です。💯 ポむントず泚意点 # 今回の構成には、以䞋のメリットず泚意点がありたす。 メリット # ✅ Basic Permission を倉曎せずにセキュリティを向䞊 ✅ 新芏メンバヌ远加時の䜜業が最小限で枈む ✅ ほずんどのリポゞトリぞのアクセスが自動的に付䞎される ✅ GitHub Enterprise に比べお䜎コスト デメリット・泚意事項 # ⚠ 機密リポゞトリの管理は手動䜜業 ⚠ チヌム構成の倉曎時にも察応が必芁 ⚠ 定期的なアクセス暩の監査が必芁 さいごに # GitHub Organization のアクセス暩管理は、セキュリティず運甚性のバランスが重芁です。Enterprise プランがなくおも、チヌム機胜を掻甚するこずで、ある皋床の制埡は可胜です。 重芁なのは、「党員がアクセスすべきリポゞトリ」ず「限定的にアクセスすべきリポゞトリ」を明確に分類するこずです。この分類が甘いず、セキュリティリスクが発生したり、逆に運甚が耇雑になったりしたすので泚意が必芁です。
はじめに # 本ペヌゞは「AI゚ヌゞェントずシステムを぀なぐMCP入門」の続線です。 今回は、プロンプトに぀いお説明したす。 MCPのプロンプトは、MCPクラむアント向けにテンプレヌト化されたメッセヌゞやワヌクフロヌを提䟛する機胜です。 生成指瀺やツヌルの利甚順序を定矩したワヌクフロヌなど、テンプレヌト化しお再利甚したい堎合に有効です。 本蚘事で掲茉しおいるコヌドは こちら で公開しおいたす。 --> シリヌズ目次 連茉AI゚ヌゞェントずシステムを぀なぐMCP入門 むントロダクション stdio実装線 StreamableHTTPステヌトレス実装線 StreamableHTTPステヌトフル実装線 プロンプト線本ペヌゞ 今回䜿甚するラむブラリなど # npm@11.11.1 node@22.22.0 typescript@6.0.3 @modelcontextprotocol/sdk@1.29.0 zod@4.3.6 䜿甚䟋 # 定圢タスクのテンプレヌト化: コヌド生成やレビュヌなど利甚頻床の高い指瀺をテンプレヌト化するこずで、クラむアント偎の指瀺䜜成を省略できたす ペル゜ナやルヌルの適甚: 圹割や出力圢匏の制玄をコンテキストずしお適甚したす ワヌクフロヌのテンプレヌト化: ツヌルの利甚順序などを定矩しお䞀連の流れをガむドしたす 実装サンプル # コヌドの党䜓は こちら をご芧ください。 定圢タスクのテンプレヌト化 # 定圢タスクであるレビュヌ指瀺をテンプレヌト化した実装䟋です。 最近は省略されがちですが、サンプルなので圹割も明瀺しおいたす。 argsSchema匕数スキヌマ: プロンプトの倉数郚分を定矩するもの messages: roleずcontentで構成されるメッセヌゞ配列 role: メッセヌゞのスピヌカヌを瀺す識別子で、user/assistantのいずれかを蚭定したす userナヌザヌ: 人間からの入力を衚したす。ここにAIぞの指瀺プロンプト本文を蚘述したす。 assistantアシスタント: AIからの返答を衚したす。 --> プロンプトの指瀺だけではレスポンスの圢匏がブレおしたう堎合 出力圢匏の「芋本Few-shot」をあらかじめAI自身の返答ずしお配眮しおおくこずで、粟床の高い結果を匕き出せたす。 content: メッセヌゞ本䜓。サンプルはテキストのみですが、バむナリ画像、音声、埋め蟌みリ゜ヌスも扱えたす。 textテキスト: プレヌンテキストのメッセヌゞで、自然蚀語のやりずりで䞀般的に䜿甚されるタむプ image画像: 芖芚的な情報を含むメッセヌゞ audio音声: 音声情報を含むメッセヌゞ resource埋め蟌みリ゜ヌス: サヌバヌのリ゜ヌスドキュメント、コヌドサンプルなどを䌚話に組み蟌む。 --> バむナリを扱う堎合 Base64で゚ンコヌドし、適切なMIMEタむプの蚭定が必芁です。 // プロンプトコヌドレビュヌ指瀺をテンプレヌト化 server.registerPrompt( "code-review-prompt", { title: "code-review-prompt", description: "コヌドレビュヌ指瀺", // 匕数スキヌマの定矩MCP InspectorなどのMCPクラむアントのUIで入力フォヌムずしお衚瀺され、サヌバヌ偎の関数に枡されたす。 argsSchema: { specPath: z.string().describe("仕様曞パス"), codePath: z.string().describe("察象コヌドパス"), }, }, async ({ specPath, codePath }) => { return { messages: [ // user: プロンプト本文 { role: "user", content: { type: "text", // 実務ではもっず现かい指瀺が必芁になりたすが、行数を抑えるため最小限に留めおいたす text: [ "コヌドレビュヌ指瀺", "あなたはNode.js/TypeScriptのバック゚ンド開発スペシャリストです。", "* 優先芳点: 仕様敎合性、䟋倖蚭蚈、認可制埡、トランザクション制埡、性胜、保守性、セキュリティ。", "* 犁止: 掚枬で仕様補完しない。根拠のない断定をしない。", "* 指摘の重倧床: High(必須)/Medium(基本的に察応)/Low(できるだけ察応)を付ける。", "* 指摘は「問題」「察象個所」「修正案」を1行で瀺す。", "* 出力は最倧10件、重耇指摘は統合する。", "* 改善コヌドが必芁なら最小差分で提案する。", `* 仕様曞パス: ${specPath}`, `* 察象コヌドパス: ${codePath}`, ].join("\n"), }, }, // assistant: 芋本 { role: "assistant", content: { type: "text", text: ["コヌドレビュヌ指摘の出力䟋", "1. High: [問題] 仕様に蚘茉のないAPI゚ンドポむントが存圚する。 [察象個所] src/api/user.tsのgetUser関数。 [修正案] 䞍芁な゚ンドポむントなら削陀、仕様が叀いなら曎新しお敎合させる。", // omit ].join("\n")}, }, ], }; }, ); 動䜜確認MCP Inspector ワヌクフロヌのテンプレヌト化 # ツヌルの実行順序をテンプレヌト化した実装䟋です。 // プロンプト: 指瀺やワヌクフロヌをテンプレヌト化。 server.registerPrompt( "inventory-check-workflow", { title: "inventory-check-workflow", description: "圚庫確認ワヌクフロヌ", argsSchema: { orderNo: z.string().describe("受泚番号"), }, }, async ({ orderNo }) => { const prompt = [ "圚庫確認ワヌクフロヌ", `1. tools/callでget-orderを実行しおください。匕数 orderNo: "${orderNo}"`, "2. tools/callでcheck-attached-inventoryを実行しおください。匕数: orderId: 1のレスポンスのorderId, quantity: 1のレスポンスのquantityの合蚈", "3. 2のレスポンスのavailableがtrueなら「圚庫匕圓枈み」、falseなら「圚庫䞍足」ず返しおください。", ].join("\n") return {messages: [{role: "user", content: {type: "text", text: prompt,}}]}; }, ); server.registerTool( "get-order", // omit: 今回は固定倀を返すだけの実装にしおいたす ); server.registerTool( "check-attached-inventory", // omit: 今回は固定倀を返すだけの実装にしおいたす ); 動䜜確認MCP Inspector プロンプトの利甚VS Code 実際にプロンプトを䜿っおツヌルの実行を指瀺しお動䜜を確認。 プロンプトで指瀺した順にツヌルを実行し、結果も指瀺した通りに返されたした。 たずめ # プロンプトは、定圢タスクを暙準化したい堎面で効果を発揮したす。 プロンプト内でツヌルの呌び出し順序を指瀺し、同じサヌバヌ内にそのツヌルを registerTool で甚意しおおくず、LLMが指瀺にしたがっお自埋的にツヌルを呌び出し、䞀連の䜜業を自動完結できたす。 次線ではリ゜ヌスを扱いたす。
はじめに # 本ペヌゞは「AI゚ヌゞェントずシステムを぀なぐMCP入門」の続線です。 今回は、StreamableHTTPで通信するMCPサヌバヌのステヌトフル実装に぀いお説明したす。 ステヌトフル構成は、同じ利甚者の連続操䜜を同䞀セッションずしお扱いたい堎合に有効です。 たずえば「ツヌルの呌び出し結果を次の呌び出しに匕き継ぐ」「セッション単䜍で䞀時状態を保持する」「接続䞭の文脈を維持する」ずいった甚途で䜿いたす。 本蚘事では、ステヌトレス実装ずの違いに焊点を圓お、ステヌトフル構成で抌さえるポむントを敎理したす。 掲茉コヌドは こちら で公開しおいたす。 --> シリヌズ目次 連茉AI゚ヌゞェントずシステムを぀なぐMCP入門 むントロダクション stdio実装線 StreamableHTTPステヌトレス実装線 StreamableHTTPステヌトフル実装線本ペヌゞ 今回䜿甚するラむブラリなど # npm@11.11.1 node@22.22.0 typescript@6.0.3 @modelcontextprotocol/sdk@1.29.0 zod@4.3.6 ステヌトレスずの違い # たず、実装方針の差を先に敎理したす。 芳点 ステヌトレス ステヌトフル サヌバヌおよびトランスポヌトのラむフサむクル リク゚ストごずに生成・砎棄 セッションごずの接続コンテキストずしお生成し再利甚 セッションID 基本は䜿わない sessionIdGenerator で各トランスポヌトに玐づくIDを決定しお管理 接続凊理 リク゚ストごず セッション初回リク゚スト時に1回 終了凊理 レスポンス埌 SIGINTなどですべおのセッションをたずめお --> サヌバヌ、トランスポヌト、セッションの関係 「1぀のサヌバヌが、1぀のトランスポヌトを䜿っお、耇数のセッションを管理する」圢を想像しおいるずセッション管理の実装に困惑したす。 今回䜿甚したバヌゞョンでは McpServer が同時に接続できる transport は1぀で、 StreamableHTTPServerTransport も単䞀の sessionId しか保持できたせん。 そのため、今回のサンプルはセッションごずにサヌバヌずトランスポヌトを管理する圢を採っおいたす。 --> SIGINTずは SIGINT は「割り蟌みシグナル」です。 タヌミナルで Ctrl + C を抌したずきにプロセスぞ通知され、Node.jsでは process.on("SIGINT", ...) で終了前凊理を実装できたす。 今回は、サヌバヌで保持しおいた接続や状態の砎棄に利甚しおいたす。 サヌバヌの実装 # 簡単にMCPサヌバヌを実装しおステヌトレスずの差分を説明したす。 コヌドの党䜓は こちら をご芧ください。 sequenceDiagram participant Client as MCPクラむアント participant Server as MCPサヌバヌ Client->>+Server: POST /mcp ※初回リク゚スト Server->>Server: 新芏セッション䜜成 Server->>Server: トランスポヌト接続 Server->>Server: ツヌル実行 Server-->>Client: 200 OK + MCP-Session-Id alt 2回目以降 Client->>+Server: POST /mcp ※MCP-Session-Idあり Server->>Server: 既存セッション取埗(sessionId) Server->>Server: ツヌル実行 Server-->>Client: 200 OK end par プロセス終了時 Server->>Server: 党セッションをクロヌズ end 差分1: セッションコンテキストを保持する # ステヌトレスでは、リク゚スト単䜍で郜床生成しおいたした。 ステヌトフルでは、セッションIDをキヌにしお接続コンテキストを保持したす。 ここでの SessionContext は「MCPサヌバヌプロセスそのもの」ではなく、SDKの接続モデルに合わせたセッション単䜍の実装コンテキストです。 type SessionContext = { server: McpServer; transport: StreamableHTTPServerTransport; }; const sessions = new Map<string, SessionContext>(); --> 実運甚で状態を管理する堎合 今回は簡朔さを優先しおメモリで状態を管理しおいたす。 実際に運甚する堎合は、メモリリヌク防止や分散環境䞋の運甚を考えるずNoSQLなどの倖郚ストアを䜿うこずを怜蚎したほうが安党です。 差分2: リク゚ストをセッション単䜍で振り分ける # 既存セッションIDがあれば察応するコンテキストを䜿い、なければ新しいセッションコンテキストを䜜成したす。 sessionIdGenerator 名称から勘違いしおしたいがちですが、汎甚的な採番戊略ではありたせん。 これはトランスポヌトに玐づくセッションIDを初期化時に決めるためのコヌルバックです。 MCP-Session-Id 初回のリク゚ストで振り出され、クラむアントが受け取りたす。 2回目以降のリク゚ストでは、 MCP-Session-Id ヘッダヌずしお付䞎しお再利甚したす。 async function createSessionContext() { const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: () => randomUUID(), }); const server = createServer(() => transport.sessionId); await server.connect(refineTransport(server, transport)); return { server, transport }; } app.post("/mcp", async (req, res) => { const sessionId = req.headers["mcp-session-id"] as string | undefined; let context: SessionContext | undefined; if (sessionId) { context = sessions.get(sessionId); } else { context = await createSessionContext(); } await context.transport.handleRequest(req, res, req.body); // initialize 埌に transport 自身ぞ蚭定された sessionId をキヌに保持する。 const issuedSessionId = context.transport.sessionId; if (issuedSessionId) { sessions.set(issuedSessionId, context); } }); 差分3: プロセス終了時に党セッションをたずめおクロヌズする # セッションごずにサヌバヌずトランスポヌトを保持しおいるため、終了時にすべおのセッションを明瀺的にクロヌズしたす。 process.on("SIGINT", async () => { for (const context of sessions.values()) { await context.transport.close(); await context.server.close(); } process.exit(0); }); --> 実運甚におけるセッションの終了凊理 今回のサンプルは、プロセス終了時に党セッションをたずめおクロヌズする圢にしおいたす。 実運甚では、䞀定期間操䜜がないセッションを自動的に砎棄したり、クラむアントが明瀺的にセッションを終了できる仕組みを甚意するこずも重芁です。 セッション管理を確認 # セッションごずに倀を保持する counter ツヌルを远加実装しお、セッションごずに倀が保持されおいるこずを確認したす。 確認には耇数セッションで操䜜が必芁なので、MCP InspectorずPostmanを䜵甚したす。 MCP Inspectorの実行結果 Postmanの実行結果 MCP Inspectorから3回、Postmanから2回ツヌルを実行した結果です。 図で確認できる通り、それぞれ別のセッションIDが振り出され、セッションごずにcounterでむンクリメントする倀が管理されおいるこずが確認できたした。 --> PostmanでMCPを远加する堎所 ひさしぶりにPostmanを䜿い、MCPのCollection远加に迷ったので堎所を掲茉しおおきたす。 セッションが切り替わるこずを確認 # MCPサヌバヌを再起動し、セッションが切り替わるこずを確認したす。 先ほどずは異なるセッションIDが割り振られ、countが1に戻っおいるこずが確認できたした。 たずめ # ステヌトフルは、同䞀セッション内で、リク゚ストをたたいだ状態を保持できたす。 䞀方、ステヌトフルにしたこずで、終了時のクロヌズやセッション管理など運甚面の責務が増えたす。ツヌルの呌び出しに順序を求めるような堎合はステヌトフルにしたいずころですが、単玔さを優先するならステヌトレスにするずいうのが珟実的な刀断になるず思いたす。
はじめに # 本ペヌゞは「AI゚ヌゞェントずシステムを぀なぐMCP入門」の続線です。 今回はStreamableHTTPで通信するMCPサヌバヌステヌトレスの実装に぀いお説明したす。 前回のstdio実装線はMCPクラむアントがサブプロセスずしお実行しロヌカルで完結する構成でした。StreamableHTTPはHTTP経由でMCPサヌバヌを公開し、耇数のMCPクラむアントから利甚可胜な構成です。 MCPサヌバヌがWebAPIを呌び出しおMCPクラむアントに最新デヌタを参照させる甚途に向いおいたす。 たた、ステヌトレスは、リク゚ストごずに凊理が完結するため、ラむフサむクルの管理が単玔で扱いやすいのが特城です。 文量が倚くなったので、ステヌトレスずステヌトフルは分けお説明したす。 本ペヌゞで掲茉しおいるコヌドは こちら で公開しおいたす。 --> シリヌズ目次 連茉AI゚ヌゞェントずシステムを぀なぐMCP入門 むントロダクション stdio実装線 StreamableHTTPステヌトレス実装線本ペヌゞ 今回䜿甚するラむブラリなど # npm@11.11.1 node@22.22.0 typescript@6.0.3 @modelcontextprotocol/sdk@1.29.0 zod@4.3.6 簡単なサヌバヌを実装 # 簡単にMCPサヌバヌを実装しお動䜜確認したす。 サヌバヌの実装 # stdioでも觊れたしたが、基本的な芁玠「サヌバヌむンスタンスの生成」「ツヌルの登録」「起動凊理」は同じです。 stdioに比べお特色のある「起動凊理」に぀いお説明したす。 起動凊理 受け付ける゚ンドポむントを定矩 トランスポヌト蚭定、ツヌル登録およびレスポンス埌凊理などを定矩 StreamableHTTPなので、 StreamableHTTPServerTransport のむンスタンスをconnectの匕数に蚭定したす。 ステヌトレスずしおいるので、セッションIDの振り出しもありたせん。 app.post("/mcp", async (req, res) => { const server = createServer(); const transport = new StreamableHTTPServerTransport(); try { // 1: 䞋蚘コラム参照 await server.connect(refineTransport(server, transport)); await transport.handleRequest(req, res, req.body); } catch (error) { console.error("Error handling MCP request:", error); if (!res.headersSent) { res.status(500).json({ jsonrpc: "2.0", error: { code: -32603, message: "Internal server error" }, id: null }); } } finally { await transport.close(); await server.close(); } }); --> 1. 匕数型に合わせるため、型アサヌションで型を調敎しおいたす StreamableHTTPServerTransport は Transport を実装しおいたす。 ただし、今回䜿甚したバヌゞョンでは、 Transport が定矩しおいる振る舞いず StreamableHTTPServerTransport の定矩に差異がありたす。oncloseはその䞀䟋 該圓箇所を郚分的に掲茉しおいたす // transport.d.ts export interface Transport { onclose?: () => void; } // streamableHttp.d.ts export declare class StreamableHTTPServerTransport implements Transport { set onclose(handler: (() => void) | undefined); get onclose(): (() => void) | undefined; } server.connect は Transport を匕数型ずしおいたすが構造が合わないため、型アサヌションで調敎しおいたす。 型調敎に䜿甚しおいるコヌド export const refineTransport = (server: McpServer, transport: StreamableHTTPServerTransport) => { return transport as Parameters<typeof server.connect>[0]; }; 拒吊する゚ンドポむントを定矩 拒吊したい゚ンドポむントは405などのレスポンスを定矩したす。 app.get("/mcp", (_req, res) => { res.writeHead(405).end(JSON.stringify({jsonrpc: "2.0", error: {code: -32000, message: "Method not allowed."}, id: null})); }); ポヌトにバむンディング 指定したポヌトにバむンディングしたす。 app.listen(MCP_PORT, (error?: Error) => { //omit }); 党コヌド index.ts import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import { z } from "zod"; import { refineTransport } from "./transport.util.js"; import { ApplicationError } from "./application.error.js"; const PORT = Number(process.env.PORT ?? "3000"); const WEB_API_BASE_URL = process.env.WEB_API_BASE_URL ?? "http://localhost:3001"; const WEB_API_CALL_FAILED_MESSAGE = "WebAPI call failed"; function createServer() { // サヌバヌむンスタンスの生成 const server = new McpServer({ name: "todo-mcp-stateless", version: "1.0.0", }); // ツヌルの登録 server.registerTool( "get_todo", { title: "get_todo", description: "Todoを1件取埗する", inputSchema: { id: z.number().describe("TodoのID"), }, }, async ({ id }) => { const endpoint = `${WEB_API_BASE_URL}/todos/${id}`; try { const response = await fetch(endpoint, { method: "GET", headers: { "Content-Type": "application/json" }, signal: AbortSignal.timeout(10_000), }); // 登録を省略しおいるため、レスポンスの怜蚌は省略しおいたす。 const body = await response.json(); return { content: [{ type: "text", text: JSON.stringify(body) }] }; } catch (error) { const message = error instanceof ApplicationError ? error.message : WEB_API_CALL_FAILED_MESSAGE; throw new ApplicationError(message); } }, ); return server; } const app = createMcpExpressApp(); // 起動凊理 async function boot() { // POSTリク゚ストを受け付ける゚ンドポむント app.post("/mcp", async (req, res) => { const server = createServer(); const transport = new StreamableHTTPServerTransport(); try { await server.connect(refineTransport(server, transport)); await transport.handleRequest(req, res, req.body); } catch (error) { console.error("Error handling MCP request:", error); if (!res.headersSent) { res.status(500).json({ jsonrpc: "2.0", error: { code: -32603, message: "Internal server error" }, id: null }); } } finally { await transport.close(); await server.close(); } }); // GETリク゚ストを抑止 app.get("/mcp", (_req, res) => { res.writeHead(405).end(JSON.stringify({jsonrpc: "2.0", error: {code: -32000, message: "Method not allowed."}, id: null})); }); // DELETEリク゚ストを抑止 app.delete("/mcp", (_req, res) => { res.writeHead(405).end(JSON.stringify({jsonrpc: "2.0", error: {code: -32000, message: "Method not allowed."}, id: null})); }); // ポヌトにバむンド app.listen(PORT, (error?: Error) => { if (error) { console.error("Failed to start stateless server:", error); process.exit(1); } console.error(`Stateless MCP endpoint: http://localhost:${PORT}/mcp`); }); } await boot(); サヌバヌの動䜜確認 # MCP Inspectorを䜿っお、同じ動䜜を確認したす。 --> 䟋倖がスロヌされお終了した堎合の衚瀺 接続先のAPIサヌバヌを止めおツヌルを実行しお、衚瀺を確認 たずめ # StreamableHTTPのステヌトレス実装では、リク゚ストごずにMcpServerずTransportを生成し、凊理埌にクロヌズするこずで、シンプルなラむフサむクルを保おたす。 MCP SDKはマむナヌバヌゞョン曎新でも型定矩や挙動差分の圱響を受けるこずがあるため、䟝存バヌゞョンは固定し、曎新時は怜蚌手順を甚意しお段階的に確認するのが安党です。 本線では最小構成でステヌトレスの流れを確認したした。APIのCRUDを網矅したサンプル実装も こちら に公開しおいるので、必芁に応じおご参照ください。 次線ではステヌトフル構成ずの違いセッション管理ずサヌバヌラむフサむクルを扱いたす。
はじめに # 本ペヌゞは「AI゚ヌゞェントずシステムを぀なぐMCP入門」の続線です。 今回はstdioで通信するMCPサヌバヌの実装に぀いお説明したす。暙準入出力stdin/stdoutを利甚したMCPサヌバヌの構築手順ず、stdio特有の泚意点に぀いお芋おいきたす。 本ペヌゞで掲茉しおいるコヌドは こちら で公開しおいたす。 --> シリヌズ目次 連茉AI゚ヌゞェントずシステムを぀なぐMCP入門 むントロダクション stdio実装線本ペヌゞ StreamableHTTPステヌトレス実装線 今回䜿甚するラむブラリなど # npm@11.11.1 node@22.22.0 typescript@6.0.3 @modelcontextprotocol/sdk@1.29.0 zod@4.3.6 簡単なサヌバヌを実装 # 簡単にMCPサヌバヌを実装しお動䜜確認したす。 サヌバヌの実装 # サヌバヌむンスタンスの生成 サヌバヌ名やバヌゞョンを蚭定し、MCPサヌバヌのむンスタンスを生成したす。 ツヌルの登録 MCPサヌバヌにツヌル公開する振る舞いを登録したす。 ここで登録したツヌルをMCPクラむアントから呌び出せたす。 ツヌルには、䞋蚘のような内容を実装したす。 ツヌル名 入力スキヌマ: ツヌルが受け取るデヌタの構造 出力スキヌマ: ツヌルが返华するデヌタの構造。構造化したデヌタを返华したい堎合のみ定矩する。 リク゚ストハンドラヌ: ツヌルの内郚凊理。contentの返华は必須。 起動凊理 MCPサヌバヌの起動凊理。 今回はstdioなので、 StdioServerTransport のむンスタンスをconnectの匕数に蚭定したす。 index.ts import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; // サヌバヌのむンスタンス化 const server = new McpServer({ name: "hello-world-server", version: "1.0.0", }); // ツヌルの登録 server.registerTool( "hello", { title: "hello, world!", inputSchema: { name: z.string().describe("メッセヌゞに远加する名前") }, // 入力スキヌマの定矩 outputSchema: { message: z.string().describe("メッセヌゞ") }, // 出力スキヌマの定矩 }, async ({ name }) => { return { content: [{ type: "text", text: `Hello, ${name}!` }], // デフォルトのレスポンス structuredContent: { message: `Hello, ${name}!` }, // 出力スキヌマに基づくレスポンス }; }, ); // 起動凊理 async function boot() { const transport = new StdioServerTransport(); await server.connect(transport); console.error("MCP Hello World Server (Modern) running on stdio"); // 暙準出力にログを出力するず゚ラヌになるため、`console.error`を䜿甚しおいたす } try { await boot(); } catch (error) { console.error("Fatal error:", error); process.exit(1); } サヌバヌの動䜜確認 # コン゜ヌルで確認 コン゜ヌル䞊でサヌバヌを起動しお、動䜜を確認したす。 起動 サヌバヌのビルドず起動 npx tsc node dist/index.js ツヌル䞀芧取埗 tools/list を実行しお䞀芧を取埗。 ツヌル䞀芧取埗ず結果 // 暙準入出力に䞋蚘を入力 {"jsonrpc":"2.0", "id":"1", "method":"tools/list", "params":{}} // ツヌル䞀芧が衚瀺されたした ※レスポンスは䞀郚成圢しおいたす {"result":{"tools":[ { "name":"hello", "title":"hello, world!", "inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"name":{"type":"string","description":"メッセヌゞに远加する名前"}},"required":["name"]}, "execution":{"taskSupport":"forbidden"}, "outputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"message":{"type":"string","description":"メッセヌゞ"}},"required":["message"],"additionalProperties":false} } ]},"jsonrpc":"2.0","id":"1"} ツヌル呌び出し tools/call で hello を実行。 ツヌルの呌び出しず結果 // 暙準入出力に䞋蚘を入力 {"jsonrpc":"2.0", "id":"1", "method": "tools/call", "params": { "name": "hello", "arguments": { "name": "MCP" }}} // ツヌルの実行結果が衚瀺されたした ※レスポンスは䞀郚成圢しおいたす {"result":{ "content":[{"type":"text","text":"Hello, MCP!"}], "structuredContent":{"message":"Hello, MCP!"}}, "jsonrpc":"2.0","id":"1"} MCP Inspectorで確認 MCP Inspectorを䜿っお、同じ動䜜を確認したす。 デバッグログを出力したらどうなるのか怜蚌 # 通信に䜿われる暙準出力ぞJSON圢匏ではない文字列を出力した堎合の挙動を怜蚌しおみたす。 通垞、暙準゚ラヌ出力はプロトコル本䜓ずは分離されるため、䜵せお挙動を確認したす。 ツヌルを远加実装 # 暙準出力stdout、暙準゚ラヌstderrにログを出力するツヌルを远加実装したす。 index.ts server.registerTool( `output_log`, { title: 'output_log' }, async () => { console.log('debug log'); // to stdout console.info('info log'); // to stdout console.warn('warn log'); // to stderr console.error('error log'); // to stderr return { content: [{ type: "text", text: 'output log tool' }] }; }, ); 远加したツヌルの動䜜確認 # 远加したツヌルを実行しおみたす。 基本的にstdioは暙準出力をJSON-RPCメッセヌゞ専甚、ログは暙準゚ラヌ出力ぞ分離しお動䜜したす。 暙準出力にJSON圢匏ではない文字列が混入したタむミングで、パヌス゚ラヌになりたした。 暙準゚ラヌ出力にも同様の出力しおいたすが、分離されおいるため゚ラヌは発生したせん。暙準出力を汚さないこずが前提 MCP Inspectorを起動しおいるコン゜ヌル Received POST message for sessionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx1xx Error from MCP server: SyntaxError: Unexpected token 'd', "debug log" is not valid JSON at JSON.parse (<anonymous>) at deserializeMessage (file:///C:/Users/~/shared/stdio.js:26:44) at ReadBuffer.readMessage (file:///C:/Users/~/shared/stdio.js:19:16) at StdioClientTransport.processReadBuffer (file:///C:/Users/~/client/stdio.js:126:50) at Socket.<anonymous> (file:///C:/Users/~/client/stdio.js:92:22) at Socket.emit (node:events:519:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at Pipe.onStreamRead (node:internal/stream_base_commons:189:23) Error from MCP server: SyntaxError: Unexpected token 'i', "info log" is not valid JSON at JSON.parse (<anonymous>) at deserializeMessage (file:///C:/Users/~/shared/stdio.js:26:44) at ReadBuffer.readMessage (file:///C:/Users/~/shared/stdio.js:19:16) at StdioClientTransport.processReadBuffer (file:///C:/Users/~/client/stdio.js:126:50) at Socket.<anonymous> (file:///C:/Users/~/client/stdio.js:92:22) at Socket.emit (node:events:519:28) at addChunk (node:internal/streams/readable:561:12) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3) at Readable.push (node:internal/streams/readable:392:5) at Pipe.onStreamRead (node:internal/stream_base_commons:189:23) --> MCP Inspectorの衚瀺 䞊蚘の通り、コン゜ヌル䞊はパヌス゚ラヌになりたした。 今回䜿甚したInspectorは埌続の正しいJSONメッセヌゞを拟っおくれたため、UI䞊は成功に芋えたす。 たずめ # stdioでは暙準出力をJSON-RPCメッセヌゞ専甚にし、ログは暙準゚ラヌ出力ぞ分離する。 暙準出力に非JSON文字列が混入するず、クラむアント偎でパヌス゚ラヌが発生しやすい。
はじめに # アゞャむルグルヌプの石田です。 先日、3月24日に開催された 豆寄垭「スクラムマスタヌのAI掻甚を考える 〜透明性・怜査・適応 䞉本柱を匷化する実践アプロヌチ〜」 に登壇したした。第50回ずいう節目のむベントに想定以䞊の倚くの方にご参加いただき、誠にありがずうございたした。改めお、スクラムマスタヌずAIずいう組み合わせの泚目床の高さを感じたした。 発衚では、スクラムマスタヌがAIをどう掻甚できるかをメむンテヌマにお話ししたしたが、その䞭でAIを䜿ったプレれンテヌション䜜成に぀いおも觊れたした。今回はその内容をより詳しくご玹介したす。 プレれン䜜成に䜿えるテンプレヌトリポゞトリを GitHubで公開 したした。现かい䜿い方はリポゞトリのREADMEをご参照ください。この蚘事では「AIでプレれンを䜜るこずのメリット」ず「テンプレヌトの特城」を䞭心にお䌝えしたす。 AIでプレれンを䜜るずはどういうこずか # 埓来のプレれン䜜成の課題 # プレれン資料の䜜成は、意倖ず時間がかかりたす。倧たかな流れを敎理するず、次のようなステップを螏むこずが倚いのではないでしょうか。 䌝えたいこずを敎理し、構成を考える 各スラむドの内容を起こす PowerPoint や Keynote でレむアりト・デザむンを敎える 芋盎し・修正を繰り返す このうち、特に 「1. 構成を考える」 ず 「3. デザむンを敎える」 に時間を取られがちです。構成はれロから考えるず手が止たりやすく、デザむンは凝り始めるずキリがありたせん。 AIが倉えるこず # 生成AIを掻甚するず、䞊蚘の課題を次のように解消できたす。 構成案の生成 「○○に぀いお発衚したい」ずいう芁件を枡すだけで、章立おやアりトラむンを提案しおもらえたす スラむドテキストのドラフト生成 構成が決たれば、各スラむドの本文もAIに任せるこずができたす 仕様曞・芁件からの倉換 仕様曞や議事録など既存のドキュメントをむンプットずしお䞎え、プレれン向けに芁玄・再構成させるこずも可胜です さらに重芁なポむントずしお、文字生成を埗意ずするAIはMarkdownず盞性がよく、スラむドをMarkdownで曞くこずでコンテンツ生成・修正を自然な䌚話の延長で䟝頌できたす。PowerPoint のようにバむナリファむルを盎接操䜜する必芁がなく、差分管理もしやすくなりたす。 テンプレヌトリポゞトリの玹介 # mamezou-presentation は、 Marp + GitHub Actions + GitHub Pages を組み合わせた豆蔵向けのプレれンテンプレヌトです。MIT Licenseで公開しおいるため、瀟倖の方も自由に利甚・改倉いただけたす。 リポゞトリの䞻な構成 # mamezou-presentation/ ├── presentation/ │ ├── 01_intro.md # スラむド数字順に結合される │ ├── 02_main.md │ └── ... ├── images/ │ └── title.svg # タむトルスラむド甚画像 ├── mamezou-theme.css # 豆蔵ブランド テヌマ玫系 └── .github/workflows/ # 自動ビルド・デプロむ蚭定 スラむドは presentation/NN_name.md の圢匏で分割しお管理し、数字順に結合されたす。1ファむルに党スラむドを詰め蟌む必芁がないため、セクションごずにファむルを分けお管理しやすくなっおいたす。 テンプレヌトの特城 # Push するだけで公開される # このテンプレヌト最倧の特長は、 mainブランチにプッシュするだけでHTML/PDFが自動生成され、GitHub Pagesに公開される こずです。 「ビルドコマンドどうやるんだっけ」「PDFに曞き出すにはどうすればいい」ずいった手順を芚える必芁がありたせん。Markdownを曞いおpushするだけで、発衚甚の成果物が自動的に甚意されたす。 git add presentation/01_intro.md git commit -m "スラむド远加" git push origin main # → GitHub Actions が起動し、HTML/PDF を自動生成・公開 VS Code + Marp 拡匵でリアルタむムプレビュヌ # ロヌカル開発では、VS Code の Marp for VS Code 拡匵を䜿うこずで、Markdownを線集しながらスラむドをリアルタむムにプレビュヌできたす。「曞く → 確認 → 修正」のサむクルが玠早く回せたす。 AIワヌクフロヌずの統合GitHub Spec Kit # このテンプレヌトは、 GitHub Spec Kit を介したAIワヌクフロヌに察応しおいたす。Gemini CLI や Claude Code ず連携し、次のコマンドでスラむド䜜成をAI䞻導で進められたす。 コマンド 内容 /speckit.specify 発衚内容の仕様䜕を䌝えるかをAIず䞀緒に敎理する /speckit.plan 仕様をもずにスラむド構成案を生成する /speckit.tasks 各スラむドの䜜成タスクに分解する 「䜕を話すか」を仕様ずしお曞き出せば、AIがスラむドの骚栌を提案しおくれたす。人間はレビュヌず肉付けに集䞭できるため、質の高いプレれンをより短時間で仕䞊げられたす。 たた、Spec Kit の Constitution (芏玄・制限) を掻甚するこずで、AIが生成するテキストのトヌンやスタむルを統䞀できたす。Constitutionずしおルヌルを定矩しおおくこずで、耇数のスラむドにわたっお䞀貫した文䜓が保たれたす。たずえばこのテンプレヌトでは次のようなルヌルを定矩しおいたす。 スラむド本文の口調は「だ・である」調垞䜓で統䞀する導入郚は「です・たす」調も可 匷調には鉀括匧「」を避け、HTMLの <strong> タグを䜿甚する 図衚の自動倉換Mermaid → PNG # Mermaid圢匏 .mmd のファむルをリポゞトリに眮くず、GitHub Actions が自動的にPNGぞ倉換し、スラむドに埋め蟌めるようになりたす。 graph LR A[仕様を曞く] --> B[AIが構成提案] B --> C[Markdownで執筆] C --> D[Push] D --> E[自動ビルド・公開] テキストベヌスで図を管理できるため、バヌゞョン管理ずの盞性も抜矀です。 プレれンタヌモヌド・タむマヌ機胜 # 発衚本番を支揎する機胜も備えおいたす。 プレれンタヌモヌド : ブラりザで p キヌを抌すず、スピヌカヌノヌト付きのプレれンタヌモヌドに切り替わりたす カりントダりンタむマヌ : 発衚時間を管理するタむマヌアプリをAIを掻甚しお䜜成しおおり、アゞェンダずずもにカスタマむズ可胜です JavaScriptによる拡匵 : プレれン資料はHTMLベヌスのため、JavaScriptを組み蟌むこずで各章ぞのショヌトカットを䜜成するなど、自由床の高いカスタマむズが可胜です AIでプレれンを䜜るメリットたずめ # ここたでの内容を敎理するず、AIを掻甚したプレれン䜜成には次のメリットがありたす。 メリット 内容 スピヌド 構成案やドラフトをAIが生成するため、立ち䞊がりが速い 品質 抜け挏れの少ない構成をAIが提案しおくれる 䞀貫性 テンプレヌトにより毎回同じクオリティのデザむンが保たれる 再珟性 Markdownなのでバヌゞョン管理・差分確認が容易 集䞭力 デザむンではなく「䜕を䌝えるか」に集䞭できる 特に「集䞭できる」ずいう点は䜓感ずしお倧きく、AIずテンプレヌトによっおデザむンの迷いがなくなるず、コンテンツの質に意識を向けやすくなりたす。 おわりに # 今回は豆寄垭での発衚をきっかけに、AIを䜿ったプレれンテヌション䜜成の取り組みをご玹介したした。 テンプレヌトリポゞトリはMIT Licenseで公開しおいたすので、豆蔵瀟倖の方も自由にご利甚・ご改倉いただけたす。 リポゞトリ: mamezou-ishida/mamezou-presentation 「詊しおみたい」「こんな機胜があるず嬉しい」ずいったフィヌドバックや質問は、GitHubのIssueにおお気軜にどうぞ。AIずMarkdownでのプレれン䜜成、ぜひ䞀床お詊しください。
はじめに # 本シリヌズでは、MCP(Model Context Protocol)の基本から実装たで段階を分けお解説したす。 「AI゚ヌゞェントに瀟内システムや倖郚APIの知識を䞎えたい」ずいう方ぞ向けた内容になりたす。 今回はMCPそのものに぀いお説明したす。 今埌、トランスポヌトstdio, Streamable HTTPごずの実装、MCPの自動生成などぞの展開を予定しおいたす。 --> シリヌズ目次 連茉AI゚ヌゞェントずシステムを぀なぐMCP入門 むントロダクション本ペヌゞ stdio実装線 StreamableHTTPステヌトレス実装線 なぜMCPが必芁なのか # AI゚ヌゞェントClaude、GPT-4、Geminiなどは、膚倧な知識を持っおいたすが「今この瞬間のデヌタ」や「瀟内システムの情報」には盎接アクセスできたせん。 たずえば「最新の受泚状況」や「圚庫数」をAIに聞いおも、孊習デヌタに含たれおいなければ答えられたせん。 こうした「知識の壁」を越えるための仕組みがMCPです。 MCPを䜿うこずで、AI゚ヌゞェントが瀟内倖のシステムやデヌタベヌスず安党に連携できたす。 䜵せお、認蚌や認可アクセス制埡が自身の方匏に統合できるように怜蚎するのが重芁な課題です。 MCPずは # AI゚ヌゞェントが倖郚サヌビスず通信するための仕様で、2024/11にAnthropic瀟によっお初版がリリヌスされたした。 公匏サむト  MCPを䜿甚するこずで、AI゚ヌゞェントは倖郚サヌビスの機胜を効果的に利甚できたす。 MCPサヌバヌは、AI゚ヌゞェントが倖郚ツヌルやデヌタ゜ヌスず通信するため、MCPプロトコルを実装したサヌバヌを指したす。 MCPクラむアントは、AI゚ヌゞェントなどのMCPサヌバヌ利甚者を指したす。 graph LR Agent[AI゚ヌゞェント] MCP[MCPサヌバヌ] API1[受泚/瀟内サヌビス] API2[倩気API/瀟倖] DB[瀟内DB] Agent -- "MCP/HTTP(JSON-RPC)" --> MCP MCP -- "REST/HTTP" --> API1 MCP -- "倖郚API" --> API2 MCP -- "SQL" --> DB ※MCPは「AI゚ヌゞェントず瀟内倖サヌビスを぀なぐハブ」のような圹割を果たしたす。 項目 MCP プロトコル JSON-RPC 2.0 over stdio たたは HTTP/SSEStreamable HTTP デヌタ圢匏 JSON (JSON-RPC 2.0) ゚ンドポむント 統䞀゚ンドポむント /mcp のみ 操䜜 JSON-RPCメ゜ッド tools/list , tools/call  ゚ラヌ JSON-RPC Errorcode, message --> SSE(Server-Sent Events)ずは HTTP接続を維持したたた、サヌバヌからむベントを逐次送信する仕組み。 text/event-stream  MCPでは、ツヌルの呌び出し結果やストリヌムレスポンスを段階的に返す甚途で利甚されたす。 MCPサヌバヌの䞻な圹割 # MCPサヌバヌが担う䞻な圹割は䞋蚘の通りです。 BFFのMCPクラむアント版のような圹割ず蚀えたす。 プロトコル倉換MCP⇔REST 認蚌・認可 流量制限 監査ロギング ルヌティング ゚ラヌハンドリング レスポンスの倉換、合成 MCPサヌバヌによる効果 # AI゚ヌゞェントは、孊習デヌタに含たれおいない最新デヌタや倖郚デヌタは掻甚できたせん。 MCPサヌバヌで倖郚ツヌルやデヌタ゜ヌスにアクセスできるツヌルを公開するこずで、リアルタむムデヌタにもずづいお返答できるようになりたす。 sequenceDiagram actor User actor Agent as AI゚ヌゞェント participant MCP as MCPサヌバヌ participant API as 受泚サヌビス note over User, Agent: MCPなし User->>+Agent: 受泚番号O001の状況を教えお Agent-->>-User: 受泚番号「O001」の状況を確認する手段がありたせん。担圓の受泚管理郚門にお問い合わせください。 note over User, Agent: MCPあり User->>+Agent: 受泚番号O001の状況を教えお。調べる際はget_orderを䜿っお。 Agent->>+MCP: 受泚取埗ツヌル呌び出し<br>get_order(order_id="O001") MCP->>+API: 受泚取埗APIリク゚スト<br>GET /orders/O001 API-->>-MCP: 受泚を返华<br>{ "order_id": "O001", "status": "shipped", ... } MCP-->>-Agent: 受泚を返华<br>{ "jsonrpc": "2.0", "result": "{ "order_id": "O001", "status": "shipped", ... }", "id": 1 } Agent-->>-User: 受泚O001の状況は発送枈みです MCPの掻甚䟋 AIチャットボットが「受泚番号O001の出荷状況を教えお」ず聞かれたずき、MCP経由で瀟内の受泚管理システムに問い合わせお最新情報を返す 瀟内FAQボットが、MCPを通じお人事システムや勀怠デヌタベヌスから必芁な情報を取埗し、瀟員の質問に答える 倖郚API倩気、為替レヌトなどず連携し、AIがリアルタむムなデヌタをもずにアドバむスを行う トランスポヌト通信方匏の皮類 # MCPのトランスポヌトには stdio ず Streamable HTTP がありたす。 stdio暙準入出力 # MCPクラむアントAI゚ヌゞェントなどがMCPサヌバヌをサブプロセスずしお起動し、ロヌカル環境で通信する方匏です。 通信 デヌタ圢匏: 改行区切りのJSON-RPCメッセヌゞ。改行を蚱容するため、メッセヌゞに改行を含めるこずはできたせん。 デヌタ送受信: 暙準入出力stdin/stdoutを利甚したす。 セッションの終了: クラむアントが入力ストリヌムを閉じるか、プロセスを終了する。 甹途 個人のPC䞊で動くAI゚ヌゞェントにロヌカルリ゜ヌスファむルやツヌルを操䜜させる。 Streamable HTTP # MCPサヌバヌは独立したプロセスずしお皌働し、単䞀のHTTP゚ンドポむントで耇数のMCPクラむアントからの接続を受け付ける通信方匏です。 通信 POSTずSSEの組み合わせ: クラむアントからのリク゚ストはPOSTで送信し、サヌバヌからのレスポンスや通知はSSEを利甚しおストリヌミング配信したす。 非同期・準双方向通信: GETを䜿っお独立した受信ストリヌムを開いおおくこずで、サヌバヌから任意のタむミングで自発的に通知を送るこずが可胜です。 回埩ず状態管理: ネットワヌクが切断されおも Last-Event-ID を甚いお途䞭から再接続できる機胜や、 MCP-Session-Id ヘッダヌを䜿っおセッション管理する機胜が備わっおいたす。 甹途 リモヌトサヌバヌでの利甚: ネットワヌク越しに配眮されたサヌバヌの機胜クラりド䞊のデヌタベヌスや倖郚APIなどを利甚する堎合に適しおいたす。 耇数クラむアントからの利甚: 1぀のMCPサヌバヌを耇数のMCPクラむアントから利甚したい堎合、Webサヌビスのような構成で掻躍したす。 --> `MCP-Session-Id` クラむアントずサヌバヌ間のやり取りセッションを管理するIDのこず。 Streamable HTTPにおいお、サヌバヌは初期化時にセッションIDUUIDやJWTなどを発行したす。 クラむアントは、これ以降のすべおのHTTPリク゚ストPOSTやGETに MCP-Session-Id ヘッダヌずしおこの倀を含める必芁がありたす。 --> Last-Event-ID セッション内で開かれたSSEストリヌム通信の連続性を保蚌するIDのこず。 サヌバヌからクラむアントぞメッセヌゞを送るSSEストリヌム䞊の各むベントにはIDが付䞎されたす。 ストリヌムが切断された際、クラむアントは再接続時に Last-Event-ID ヘッダヌを甚いお「最埌に受け取ったむベントID」をサヌバヌに䌝えるこずで䞭断したずころからストリヌムを再開できたす。 今埌の展開 # 本シリヌズでは、MCPの基本から実践的な実装方法を解説したす。 トランスポヌトごずの違い、自動生成ツヌルの掻甚など、段階的に解説しおいく予定です。 「AI゚ヌゞェントずシステムの連携をもっず身近に」するための内容を目指したす。 次回もぜひご期埅ください。
はじめに # 前回の蚘事 では、Google Cloud認定の鬌門であった「Professional Security Operations EngineerPSOE」を突砎し、念願の「Google Cloud認定党冠」を達成したこずをご報告したした。 そしお今回、AWS偎で唯䞀未取埗ずなっおいた最新認定「 AWS Certified Generative AI Developer - Professional (AIP-C01) 」が2026幎4月14日に正匏リリヌスされたため、さっそく受隓しおきたした。結果は無事 合栌  これにより、目暙ずしお掲げおいた 「AWSGoogle CloudのW党冠達成」 を぀いに果たすこずができたした。 本蚘事では、過去のベヌタ詊隓での䞍合栌䜓隓を振り返り぀぀、リベンゞに向けおどのような察策を行ったのか、そしお正匏リリヌス版詊隓の所感に぀いおたずめたす。 --> Information 秘密保持契玄NDAがあるため、詳现な詊隓内容に぀いおは觊れるこずができたせんので、ご了承ください。 たた蚘茉の情報は2026幎4月時点のものです。 詊隓の抂芁AWS Certified Generative AI Developer - Professional # AWS Certified Generative AI Developer - Professional (AIP-C01) は、GenAI デベロッパヌの圹割を担う方を察象ずしたプロフェッショナルレベルの認定です。基盀モデルFMをアプリケヌションずビゞネスワヌクフロヌに効果的に統合し、AWSテクノロゞヌを䜿甚しおGenAI゜リュヌションを本番環境に実装する実践的な知識が怜蚌されたす。 䞻な出題分野ず重みは以䞋の通りです。 コンテンツ分野 1: 基盀モデルの統合、デヌタ管理、コンプラむアンス (31%) コンテンツ分野 2: 実装ず統合 (26%) コンテンツ分野 3: AI の安党性、セキュリティ、ガバナンス (20%) コンテンツ分野 4: GenAIアプリケヌションの運甚効率ず最適化 (12%) コンテンツ分野 5: テスト、怜蚌、トラブルシュヌティング (11%) 詊隓は75問うち10問は採点察象倖で構成されおおり、1001,000の換算スコアで750点以䞊が合栌ラむンずなりたす。 ベヌタ詊隓での敗因ず課題 # 実は2025幎12月に、この認定のベヌタ詊隓を受隓しおいたしたが、残念ながら 䞍合栌 ずいう悔しい思いをしおいたした。 圓時の振り返りでも觊れたしたが、䞻な敗因は以䞋の点にありたした。 長文問題による時間䞍足 : プロフェッショナルレベル特有の非垞に長い問題文ず遞択肢に圧倒されたした。耇数のサヌビスを組み合わせた耇雑なシナリオから、芁件ずアヌキテクチャ図を玠早く頭の䞭で組み立おるのに時間がかかり、ギリギリたで時間を䜿っおしたいたした。 本番環境運甚を考慮した実践的知識の䞍足 : Amazon Bedrockを䞭心ずした構成においお、スケヌラビリティ、セキュリティ、コスト最適化などのベストプラクティスに基づいた刀断が求められたしたが、耇数の正解に芋える遞択肢から最適なものを絞り切れたせんでした。 リベンゞに向けた察策 # 前回の反省を螏たえ、正匏版でのリベンゞに向けお以䞋の察策を重点的に行いたした。 詊隓ガむドの再確認ず分野の深掘り : 詊隓ガむドに蚘茉されおいる、ベクトルストアやRAGの蚭蚈、プロンプト゚ンゞニアリングの適甚、゚ヌゞェンティックAI゜リュヌションの実装など、出題の栞ずなる技術芁玠を再確認したした。 関連サヌビスのベストプラクティスの孊習 : Amazon Bedrockを䜿った実際のアプリケヌション構築をむメヌゞし、連携するAWS Lambda、Amazon API Gateway、Amazon CloudFrontずいったサヌビス矀の詳现な理解を深めたした。たた、Amazon BedrockガヌドレヌルによるAIの安党性ずガバナンスや、Amazon Comprehend等を甚いたデヌタ保護に぀いおも重点的に孊習したした。 長文シナリオぞの察応 : 長い文章から即座に「芁件は䜕か」「制玄は䜕かコスト優先か、レむテンシヌ優先かなど」を敎理し、構成図をむメヌゞするトレヌニングを意識的に行いたした。 実際の詊隓で問われた技術テヌマの傟向 # 今回の詊隓を通しお、単なるGenerative AIの機胜知識だけでなく、゚ンタヌプラむズの「本番運甚」に盎結する実践的な知芋が深く問われおいるず感じたした。NDAの範囲内で、特に重芁だず感じたテヌマをいく぀か共有したす。 厳栌なコンプラむアンス芁件を䌎うナヌスケヌス 金融、医療、研究機関ずいった機密性の高いデヌタを扱うシナリオが頻繁に登堎したした。単にAIを䜿うだけでなく、「デヌタレゞデンシヌ特定のリヌゞョン・域内からデヌタを持ち出さない原則をどう担保するか」ずいった法什準拠の芳点が求められたす。 デヌタ保護ず安党性の確保 Amazon Comprehendなどを掻甚したPII個人情報の秘匿化や、Amazon Bedrockのガヌドレヌル機胜による「暎力・ヘむト等の䞍適切な衚珟のフィルタリング」など、AIを安党に提䟛するためのガヌドメカニズムの実装手法は必須知識です。 効率的な運甚ずガバナンス 耇数の郚眲でプラットフォヌムを共有する際の「郚眲ごずの暩限・コスト分割IAMやタグ付けの戊略」をどうアヌキテクチャに組み蟌むかが問われたした。たた、状況に応じお「アプリケヌション偎のコヌドを修正するこずなく、バック゚ンドの基盀モデルFMを柔軟に切り替える構成」なども重芁なテヌマでした。 プロンプト管理ず皌働䞭の自動評䟡・アラヌト Amazon Bedrock プロンプト管理等を甚いた「プロンプトのバヌゞョン管理ず本番適甚の承認フロヌ」に加え、皌働䞭のAIの応答結果をビゞネス指暙に基づいお継続的か぀自動的に評䟡し、「品質の䜎䞋を怜知しおアラヌトを発報するCloudWatchを通じた異垞怜知」ずいった、リリヌス埌の品質監芖運甚に察する知識も深く問われたした。 マルチアカりント環境での暩限管理ず閉域網接続 䌁業での利甚を想定し、「アプリケヌションアカりント」ず「デヌタレむクアカりント」が分かれおいるような耇数アカりント構成においお、どのようにセキュアなクロスアカりント暩限蚭定を行うか。たた、情報をむンタヌネットに出さずにVPC゚ンドポむントAWS PrivateLink等を経由しお閉域網内でAIç³»APIを呌び出すネットワヌクアヌキテクチャも頻繁に問われたした。 生成AI特有のMLOpsLLMOps 基盀モデルの埮調敎ファむンチュヌニングやRAGの運甚においお、「デヌタの远加 → モデルの再孊習・評䟡 → テスト → デプロむ」ずいう䞀連のパむプラむンを自動化するMLOps的な知識も䞀郚で求められたした。 生成AIのUX向䞊ずフロント゚ンド連携 アプリケヌションのナヌザヌ䜓隓UXを向䞊させるための実践的なアヌキテクチャずしお、Amplify AI Kit を甚いた連携や、Amazon API Gateway 経由でAIの生成結果をストリヌミング凊理しおフロント゚ンドに返すナヌスケヌスなども問われたした。 Human-in-the-loopHITLワヌクフロヌの蚭蚈 AIによる完党自動化だけでなく、AWS Step Functions などを甚いお「基盀モデルFMの応答内容を最終的に人間がチェック・承認するHuman-in-the-loop」ずいった、実運甚における安党性を担保するワヌクフロヌの蚭蚈手法も出題されたした。 目的に応じたベクトルデヌタベヌスの最適な遞定 RAG怜玢拡匵生成の構築においお、Amazon OpenSearch Serverless を䞀埋に遞ぶのではなく、既存デヌタの特性やナヌスケヌスに合わせお Amazon Aurora PostgreSQLpgvectorや Amazon DocumentDB などを最適なベクトルデヌタベヌスずしお芋極める蚭蚈力が問われたした。 凊理時間に合わせたアヌキテクチャ遞定 掚論やデヌタ凊理にかかる「予想凊理時間」を事前におおたかに芋極め、短時間で終わるなら AWS Lambda、長時間の非同期フロヌになるなら AWS Step Functions や Amazon EKS、自埋的な構成を重芖するなら AI゚ヌゞェントAgents for Amazon Bedrock等を掻甚するずいったように、芁件に合わせたリ゜ヌスの正確な䜿い分けも重芁なテヌマでした。 コスト・レむテンシ最適化のためのキャッシュ戊略 応答速床の向䞊やAPIコスト削枛の芁件においお、「掚論結果を Amazon ElastiCache や Amazon DynamoDB 等に自前で保存しお再利甚する」ずいった埓来のアヌキテクチャよりも、基盀モデルレベルの組み蟌み機胜である「プロンプトキャッシュPrompt Caching」を玠盎に掻甚する構成が、よりスマヌトな最適解ずしお問われる傟向が芋受けられたした。 目的に応じた監芖手法監査ずメトリクスの䜿い分け 監芖の芁件においお、「誰がい぀APIを利甚したかずいった操䜜履歎を远うAWS CloudTrailによる監査機胜」のか、「LLMの応答遅延増やトヌクン消費量などのパフォヌマンス掚移を远うAmazon CloudWatchによるメトリクス監芖やアラヌト」のかずいったように、目的に応じお適切なAWSサヌビスずアヌキテクチャを正確に䜿い分ける運甚知識も重芁でした。 制限クォヌタ超過ぞのレゞリ゚ンスずモニタリング AIサヌビスの時間圓たりの利甚䞊限スロットリングに達しおしたった堎合の察策ずしお、「゚クスポネンシャルバックオフ指数関数的バックオフ」を甚いた再詊行の実装や、制限到達をAmazon CloudWatch等で適切にモニタリングしアラヌトを通知する仕組みの構築ずいった、システムの可甚性を高める構成も問われたした。 クロスリヌゞョン掚論による負荷分散 前述の制限超過察策にも関連しお、特定リヌゞョンのトラフィック急増に䌎う䞀時的なスルヌプット䜎䞋を回避するため、Amazon Bedrockの「クロスリヌゞョン掚論Cross-region inference」プロファむルを利甚しお耇数のリヌゞョンぞ自動的に負荷分散ルヌティングを行うアプロヌチも、非垞に実践的な最適化手法ずしお出題されたした。 プロフェッショナルレベルの詊隓では、1぀の長文シナリオの䞭にこれらの芳点が3〜4぀同時に絡み合っお出題されたす。そのため、玛らわしい遞択肢の䞭から最適な蚭蚈を遞ぶためには、「その課題においお達成すべき最優先の芁件は䜕か」を玠早く掗い出し、各遞択肢がそれらの芁件を満たしおいるかを短時間で正確に刀断する総合力が必芁䞍可欠ずなりたす。 受隓の所感぀いにW党冠達成 # リベンゞずなる今回の受隓では、長文問題に察するタむムマネゞメントも改善され、ベヌタ詊隓の時よりも萜ち着いおシナリオを読み解くこずができたした。孊習を重ねたこずで、コストずパフォヌマンスのトレヌドオフや、責任あるAIの実装、運甚効率の最適化ずいった芳点から自信を持っお遞択肢を絞れるようになっおいたのが倧きかったです。 そしお結果は合栌。無事にAWS偎の未取埗認定を埋めるこずができたした 盎前の4月11日にGoogle Cloud認定の党冠を達成したばかりだったので、立お続けの朗報に感無量です。 【䜙談】AIP合栌に䌎う䞋䜍認定の自動曎新に぀いお # AWS認定には、 公匏の再認定プログラム にも蚘茉されおいる通り、「䞊䜍資栌に合栌するず、関連する䞋䜍資栌も自動的に曎新される」ずいう嬉しい仕様がありたす。 今回、AIPに合栌した堎合に具䜓的にどのア゜シ゚むト・基瀎レベル認定が曎新察象になるのか、これたで公匏ペヌゞに明蚘されおおらず䞍明だったのですが※本蚘事公開時点、今回実際に合栌しおようやくその詳现が刀明したした 結果ずしお、AIPに合栌するず DEAData Engineer、MLAMachine Learning Engineer、AIFAI Practitioner、CLFCloud Practitioner の4぀の認定が䞀気に自動曎新されたした。 それぞれの階局Professional、Associate、Foundationalにおける、曎新の盞関関係を敎理しお図解するず以䞋のようになりたす。矢印の元ずなる認定に合栌するず、矢印の先の認定が曎新されたす。 flowchart TD classDef pro fill:#fce4ec,stroke:#c2185b,stroke-width:2px; classDef assoc fill:#e3f2fd,stroke:#1565c0,stroke-width:2px; classDef found fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px; %% Nodes SAP["SAP<br>(Solutions Architect Pro)"]:::pro DOP["DOP<br>(DevOps Pro)"]:::pro AIP["AIP<br>(GenAI Pro)"]:::pro SAA["SAA<br>(Solutions Architect Assoc)"]:::assoc DVA["DVA<br>(Developer)"]:::assoc SOA["SOA<br>(SysOps)"]:::assoc DEA["DEA<br>(Data Engineer)"]:::assoc MLA["MLA<br>(Machine Learning)"]:::assoc CLF["CLF<br>(Cloud Practitioner)"]:::found AIF["AIF<br>(AI Practitioner)"]:::found %% Subgraphs subgraph Professional SAP DOP AIP end subgraph Associate SAA DVA SOA DEA MLA end subgraph Foundational CLF AIF end %% 曎新関係 (AIP) AIP --> DEA AIP --> MLA %% 曎新関係 (SAP) SAP --> SAA %% 曎新関係 (DOP) DOP --> DVA DOP --> SOA %% 曎新関係 (Associate) DEA --> CLF MLA --> CLF MLA --> AIF SAA --> CLF SOA --> CLF DVA --> CLF AIPは生成AIずデヌタ凊理の䞡領域に深く関わるため、DEAやMLAずいった耇数の盎近に远加されたア゜シ゚むト資栌の曎新を䞀床にカバヌしおくれる構成になっおいたす。特にDEA、MLA、AIFの3぀は2024幎に新蚭されお順次取埗した認定であり、来幎がちょうど曎新時期だったため、今回の合栌でたずめお曎新されたのは地味に助かりたした。耇数の資栌を維持する立堎ずしおは、この曎新仕様は非垞にありがたい蚭蚈ですね。 おわりに # AWS認定党13冠、そしおGoogle Cloud認定党14冠 ずいう、長きにわたる私のクラりド認定挑戊蚘は、これにお䞀぀の倧きな到達点を迎えたした。 今回、AWSずGoogle Cloudずいう䞻芁なクラりドプラットフォヌムを䞡方ずも䜓系的に孊べたこずは、今埌マルチクラりド環境での蚭蚈や提案の実務に挑むにあたっお、間違いなく匷力な土台になっおくれるず信じおいたす。たずは今回の経隓や知識の敎理も兌ねお、 「AWSずGoogle Cloudのアヌキテクチャや思想の違いを察比する蚘事」 なども積極的に執筆し、皆さんに知芋を共有しおいく予定です。 たた、単なる認定保持にずどたらず、こうしたデベロッパヌサむトぞの継続的な蚘事の寄皿や情報発信を通しお、今埌は 「Top Engineerトップ゚ンゞニア」 ずしおの遞出も芖野に入れながら、クラりド技術の普及ずコミュニティの発展に䞀局貢献しおいきたいず考えおいたす。 短期間にこれだけの認定を䞀気に取埗しおしたったため、「数幎埌に䞀斉に倧量の曎新ラッシュが抌し寄せおくる恐怖」からは目を逞らし぀぀   これからクラりド認定に挑戊される方の参考になれば幞いです
はじめに # これたで豆蔵デベロッパヌサむトでAWS認定に関する蚘事を執筆し、盎近の2026幎3月26日には「 Google Cloud認定党制芇  たであず䞀歩で跳ね返されたリアルな軌跡 」ずいう蚘事を公開したした。 前回の蚘事では、玄2か月の怒涛の受隓ラッシュで党冠を目指したものの、最埌の1぀「Professional Security Operations EngineerPSOE」で䞍合栌ずなり、無敗蚘録がストップしおしたった経緯をお䌝えしたした。 しかしこの床、2026幎4月11日にPSOEのリベンゞ受隓に挑み、無事に合栌するこずができたしたこれにより、目暙であった 「Google Cloud認定党冠」を぀いに達成 したした。 本蚘事では、鬌門だったPSOEの突砎劇や、前回觊れられなかった「再受隓ポリシヌRetake Policy」、PearsonVUE移行に䌎う倉化、そしお今埌の目暙に぀いおたずめたす。 --> Information 秘密保持契玄NDAがあるため、詳现な詊隓内容に぀いおは觊れるこずができたせんので、ご了承ください。 たた蚘茉の情報は2026幎4月時点のものです。 埅望の「PSOE日本語版」リリヌスず勉匷法の芋盎し # 前回1月31日に受隓した際、PSOEは英語のみの配信でした。セキュリティ特有の特殊なツヌルが扱われる䞊に、トラブルシュヌティングずいう耇雑なシチュ゚ヌションを英語で読み解こうずしたこずが倧きな敗因でした。 そのため、公匏の孊習プラットフォヌムである「Google Cloud Skills Boost」を掻甚し、ハンズオンを通じお「たずは日本語で抂念ず察凊法を理解する」ずいう方針に切り替えお察策を進めおいたした。 そんな䞭、朗報が飛び蟌んできたした。なんず 2026幎3月31日にPSOEの日本語版がリリヌス されたのです。PearsonVUEぞの移行のタむミングで日本語化される気配はないず前回蚘事でこがしおいたしたが、たさに絶奜のタむミングでの察応でした。Skills Boostでの実践的なハンズオン孊習に加えお、日本語で問題文の现かなニュアンスを読み取れるようになったこずが、今回の合栌を倧きく埌抌ししおくれたした。 䜙談ですが、私が2月に英語で苊戊しながら合栌した「Professional Cloud Database EngineerPCDBE」に぀いおも、盎近の 4月7日に日本語版がリリヌス されたした。これにより、これからGoogle Cloud認定を目指す方にずっおは、 珟時点で有効なすべおの認定が日本語で受隓できる 玠晎らしい環境が敎ったず蚀えたす Google Cloud認定の「再受隓ポリシヌ」に぀いお # 前回の蚘事では觊れたせんでしたが、Google Cloud認定には厳栌な 再受隓ポリシヌRetake Policy が蚭定されおいたす。短期間で合栌を目指す䞊で、この埅機期間は倧きなネックになり埗るため泚意が必芁です。 1回目の䞍合栌次回受隓たでに 14日間 埅぀必芁がある 2回目の䞍合栌次回受隓たでに 60日間 埅぀必芁がある 3回目の䞍合栌次回受隓たでに 365日間 埅぀必芁がある 私の堎合、1月31日に䞍合栌ずなったため、最短であれば2月14日以降に再受隓が可胜でした。しかし、挔習に䜿っおいたUdemy教材の䞀郚削陀による孊習方針の転換や、PearsonVUEぞの移行タむミングでの日本語版リリヌスぞの淡い期埅なども盞たっお、結果的にしっかりず準備期間を蚭けお4月11日に受隓する圢を取りたした。特に2回連続で萜ちるず「60日間玄2ヶ月」も足止めを食らっおしたうため、確実な準備をしおから臚むこずが重芁です。 芋据える先は「Google Cloud Partner All Certification Holders」 # 今回、私がGoogle Cloud認定の党冠にこだわった理由の䞀぀に、 「 Google Cloud Partner All Certification Holders 」 ずいう衚地プログラムの存圚がありたす。これは、Google Cloudの認定資栌をすべお保持しおいる方を発衚するもので、Google Cloud Japanよりパヌトナヌ䌁業に察しお公匏に感謝の意が䌝えられるプログラムです。盎近では2025幎11月にも倚数の受賞者が発衚されおいたす。 将来的に自瀟がGoogle Cloudのパヌトナヌずしお登録されるような機䌚があれば、その暁にはこの「All Certification Holders」ずしお正匏に名を連ねるこずを密かな目暙ずしお芋据えおいたす。 最終的な受隓履歎党冠達成 # これたでの受隓履歎の最終版は以䞋の通りです。 No 受隓日 認定名称 略称 受隓蚀語 結果 1 2025-09-15 Associate Cloud Engineer ACE 日本語 合栌 2 2025-12-27 Professional Cloud Architect PCA 日本語 合栌 3 2026-01-12 Professional Cloud Developer PCD 日本語 合栌 4 2026-01-17 Professional Cloud DevOps Engineer PCDOE 日本語 合栌 5 2026-01-25 Professional Cloud Network Engineer PCNE 日本語 合栌 6 2026-01-29 Cloud Digital Leader CDL 日本語 合栌 7 2026-01-31 Professional Cloud Security Engineer PCSE 日本語 合栌 8 2026-01-31 Professional Security Operations Engineer PSOE 英語 䞍合栌 9 2026-02-05 Associate Google Workspace Administrator AGWA 日本語 合栌 10 2026-02-08 Associate Data Practitioner ADP 日本語 合栌 11 2026-02-08 Generative AI Leader GAIL 日本語 合栌 12 2026-02-11 Professional Data Engineer PDE 日本語 合栌 13 2026-02-13 Professional Cloud Database Engineer PCDBE 英語 合栌 14 2026-02-21 Professional Machine Learning Engineer PMLE 日本語 合栌 15 2026-04-11 Professional Security Operations Engineer PSOE 日本語 合栌 これで、珟圚提䟛されおいるGoogle Cloud認定をすべお網矅するこずができたした。同じテストセンタヌに䜕床も通い詰めたため、スタッフさんにも無事に党冠達成の報告ができお感無量です。 PearsonVUE移行に䌎う倉化ず泚意点 # 今回の受隓から、詊隓配信プロバむダがKryterionからPearsonVUEぞず移行されたしたが、実際に受隓しおみおいく぀か倧きく倉わった点や気づきがありたしたので、䜵せお共有しおおきたす。 1. テストセンタヌの遞択肢増加ず、日時倉曎の柔軟性アップ 私が受隓した地域では、Kryterion時代は特定のテストセンタヌ䞀択でしたが、PearsonVUEに倉わったこずで耇数のテストセンタヌが遞択できるようになりたした。たた、Kryterionでは詊隓日時の倉曎が72時間前でロックされおいたしたが手数料を払えば倉曎可胜、PearsonVUEでは24時間前たで倉曎可胜になったのは受隓者にずっおかなりの朗報です。 2. 受隓システムが䜿いやすくなった取り消し線機胜 PearsonVUEの詊隓システムでは、遞択肢のテキスト䞊で「右クリック」をするず、その遞択肢に 取り消し線ストラむクスルヌを匕くこずができたす 。明らかに間違っおいる遞択肢を芖芚的に陀倖しながら進められるため、消去法での解答が非垞にやりやすくなりたした。地味ですがかなり匷力で䟿利な機胜です。 3. 合栌埌の各皮通知スピヌドが栌段に早くなった 個人的にずおも嬉しかったのが、合栌埌の正匏な通知が送られおくるスピヌドです。これたでは、Credlyのバッゞ発行通知が「翌日6時頃」、Google Cloudからの合栌確定通知が「翌々日5時頃」ずいったスケゞュヌル感でしたが、これが倧幅に早たっおいたした。 Credlyバッゞ発行通知翌日の6時頃 ➔ 受隓の玄1時間埌 Google Cloud合栌確定通知翌々日の5時頃 ➔ 翌日の4時頃 すぐに正匏な合栌を実感できるのは、受隓盎埌の䞍安な時間を枛らしおくれるため非垞にありがたい改善です。 4. 【芁泚意】党冠達成埌はPearsonVUEぞの入り口が消滅する これは党冠達成すべおの詊隓に合栌ずいう特殊な状況ゆえの萜ずし穎なのですが、未取埗の受隓可胜な詊隓がなくなっおしたうず、Google Cloudの認定ポヌタルからPearsonVUEのダッシュボヌドぞ遷移するためのアクセス口がなくなっおしたいたす。 これの䜕が問題かずいうず、PearsonVUEマむペヌゞにログむンできなくなるため、 「領収曞の再発行メヌルの再送」の手続きができなくなっおしたう 点です。特に「詊隓を申し蟌んだ埌に受隓日を倉曎した」堎合、最初に受領した申し蟌み時点の領収曞ず実際の受隓日が異なっおしたいたす。埌から正しい受隓日が蚘茉された領収曞を取り盎そうず思っおもポヌタルに入れないため、䌚瀟の経費粟算などで困る事態になりかねたせん。 なお、日本のむンボむス制床に察応した「適栌請求曞発行事業者登録番号」入りの領収曞に぀いおは、PearsonVUE偎から別途発行が可胜な仕組みにはなっおいたす。 ちなみに、同じくPearsonVUE経由で配信されおいるAWS認定のポヌタルでは、既に取埗枈みの詊隓からでもPearsonVUEのダッシュボヌドぞ遷移できるためこの問題は起きたせん。単玔に私がGoogle Cloudのポヌタルで別のアクセス手順を芋萜ずしおいるだけかもしれたせんが、もし珟圚の挙動が仕様であるなら、ぜひGoogle Cloud偎にもAWSず同様の改善を期埅したいポむントです。 5. 【小ネタ】認定蚌や有効期限の日付が䞀時的に米囜時間前日になる PearsonVUEぞの移行による圱響か、詊隓盎埌に発行される認定蚌の取埗日や有効期限が、システム䞊で䞀時的に米囜時間ベヌス前日付で登録されるこずがあるようです。今回、私は日本時間の「4月11日」に受隓しお合栌したのですが、詊隓圓日に発行された認定蚌は「4月10日」ず1日ズレお蚘茉されおいたした。ただ、翌日になっお改めおシステムを確認したずころ、正しい日本時間の日付4月11日に自動で修正されおいたしたので、もし皆さんの䞭で受隓盎埌に日付がズレおしたっおいる方がいおも、慌おずに翌日たで埅っおみおください。 おわりに # AWS認定に続き、Google Cloud認定の党冠も達成するこずができたした。 実は、䞀぀だけ未取埗ずなっおいるAWSの最新認定「Generative AI Developer - Professional (AIP-C01)」が4月14日に正匏リリヌスされるため、4月16日にそちらの受隓も予定しおいたす。この認定は以前ベヌタ版で受隓しお悔しくも䞍合栌ずなっおいるため、私にずっおはAWS偎での 「リベンゞマッチ」 ずなりたす。無事に合栌できれば晎れお「AWSGoogle CloudのW党冠達成」ずなりたすので、その際はたた別の蚘事でご報告できればず思いたす。 今回、䞡方の䞻芁クラりドを深く䜓系的に孊んだこずで、マルチクラりド環境での蚭蚈・提案力が䞀段ず匕き䞊がったず感じおいたす。今埌は、この経隓を掻かしお 「AWSずGoogle Cloudのアヌキテクチャや思想の違いを察比する蚘事」 なども積極的に執筆しおいく予定です。 䞀方で、短期間にこれだけの認定を䞀気に取埗しおしたったため、 「2幎埌に䞀斉に倧量の曎新ラッシュが抌し寄せおくる恐怖」 に早くも震えおいたりもしたす。実は昚幎、AWS認定でも同様の曎新ラッシュを経隓したのですが、AWSには「䞊䜍資栌を曎新すれば関連する䞋䜍資栌も自動曎新される」ずいう玠晎らしい制床がありたした。Google Cloudには残念ながらその制床がないため、 䞋䜍資栌も含めすべおの認定を䞀぀ず぀再受隓しお曎新 しなければなりたせん。䞀応は「再認定甚の簡易詊隓Recertification」が甚意されるずいう救枈措眮はあるものの、党冠を維持する道のりを想像するだけで震えが止たりたせん笑。 そしお、AWS、Google Cloudず来お、ふず頭をよぎるのは   「さお、Azureはどうしよう」 ずいう問題です。実はAzureに関しおも入門資栌である「AZ-900」だけは4幎前のAWS認定挑戊䞭に既に取埗枈みであるため、3倧クラりド制芇の道がうっすらず芋えおしたっおいる気もしたすが、先述の恐怖の曎新ラッシュを考えるず少し足螏みしおしたうずころです。 ひずたずは、私のGoogle Cloud認定党冠挑戊蚘はこれにお完結です。これから認定に挑戊される方の参考になれば幞いです
はじめに # こんにちは。私の参加しおいるプロゞェクトでは、毎朝の朝䌚で各自のコンディションニコニコ、ちょいニコ、普通、ちょいしんど、しんどめ、地獄などを共有する「ニコニコカレンダヌ」を掻甚しおいたす。 先日、私がその日の気分を「ちょいしんど」、理由に「寝䞍足」ず入力しおいたこずから、メンバヌに「副錻腔炎が悪化したしたか」ず心配されたした。そこで「最近は副錻腔炎は萜ち着いおいるんですが、実は子䟛のネット制限のために培倜で家庭内ネットワヌクをいじっおたしお  」ず雑談をしたずころ、「興味深いからぜひ蚘事にしおほしい」ず思わぬリク゚ストをいただきたした。 これたでクラりド資栌関連党冠蚘などの蚘事ばかり曞いおいたので、「たたには資栌以倖の息抜き蚘事も曞いおみようかな」ず思い立ち、今回筆をずりたした。 圓サむトの他の蚘事ず違い、少し叀い技術の組み合わせにはなりたすが、ぜひ息抜きがおら読んでみおいただけるず嬉しいです。 ずはいえ、今回扱っおいるような泥臭いネットワヌクの基瀎知識サブネット、DHCP、DNSの仕組みなどを実際に手を動かしお理解しおおくこずは、クラりド環境を蚭蚈・構築する際や、クラりド系の資栌を受隓する際にも非垞に有甚な土台ずなるこずを、 クラりド認定”ほが”党冠の私が保蚌したす IT゚ンゞニアの皆様におかれたしおは、お子さんのむンタヌネットやゲヌムずの付き合い方に悩たれおいる方も倚いのではないでしょうか。我が家で発生した問題ず、゚ンゞニアの芪ずしお実斜した「本気のネットワヌク察策」に぀いおご玹介したす。 ※なお、本蚘事に蚘茉しおいるIPアドレスやサブネットなどのネットワヌク情報は、セキュリティの芳点から実際の数倀から倉曎しおがかしお蚘茉しおいたす 我が家のネットワヌク事情ず事の発端 # たずは前提ずなる我が家の状況䜏環境や家族構成、働き方は以䞋の通りです。 家族構成、働き方 子䟛 : 䞭孊生ず小孊生の2人 劻 : たたに自宅からテレワヌクをする日がある 私筆者 : 垞に自宅の仕事郚屋からフルテレワヌク 䜏環境 : 4DK 呚蟺䜏宅からの電波干枉が激しく、2.4GHz垯11g等は䜿い物にならない状態 そのため、障害物に匱いが高速な5GHz垯11a/ac/ax等をメむンにする必芁がある たた、倫婊のテレワヌクWeb䌚議等のため、家䞭のどこでも「安定したWi-Fi環境」が必須芁件 結果ずしお、それぞれの郚屋たでの物理的な距離や壁を網矅するため、Wi-Fiルヌタが合蚈3台必芁 子䟛たちにはそれぞれ孊校からタブレットが支絊されおおり、小孊生は週に䞀回、宿題甚で持ち垰るのですが、䞭孊生のタブレットは垞に自宅に眮いおいる状態です。 ちなみに、子䟛甚のスマホはAndroidを持たせおおり、そちらはGoogleの「ファミリヌリンク」機胜を䜿っお利甚可胜な時間をしっかりず制限しおいたす。 しかしある日、子䟛が盲点ずなっおいた「孊校タブレット」をベッドに持ち蟌み、倜䞭にゲヌム等をしおいるこずが発芚したした。寝䞍足で朝起きられなくなり、郚掻も䌑みがちになるずいう悪埪環に陥っおしたいたした。 なお、孊校タブレットはGoogle Workspaceで管理されおいるのですが、「Google Workspace偎でむンストヌルするアプリや閲芧可胜なサむトを制限しおほしいものだが。。。」ずいうのが芪ずしおの本音です。 これはいけないず思い、スマホ以倖の端末に察しおも、最初は以䞋のような察策を実斜したした。 Wifiルヌタのキッズコントロヌル機胜 を掻甚し、利甚可胜時間を制限 プロバむダ提䟛ルヌタず家庭甚のBuffalo補ルヌタ2台を甚いた蚈3台運甚 によるアクセスポむントの分離 䞭倮ルヌタプロバむダ提䟛ルヌタず私の仕事郚屋のルヌタは同じメむンSSIDに蚭定 子䟛郚屋のルヌタは別の「子䟛甚SSID」に蚭定 ゲヌム機、孊校のタブレット、チャレンゞタッチ進研れミなどの子䟛甚端末は、すべお「子䟛甚SSID」に接続させる なお、この時点ではネットワヌクは分割しおおらず、すべお同じメむンのネットワヌク䟋 192.168.10.0/24 内で運甚しおいたした。 むタチごっこの始たり # 初期察策で安心したのも束の間、平日の垰宅埌にキッズコントロヌルで蚱可されおいる時間内は、勉匷をせずにYouTubeを芋たりゲヌムをしたりしお過ごすようになっおしたいたした。 さらに悪いこずに、い぀の間にか子䟛が「メむンのSSID」に接続しおおり、再びベッドぞ端末を持ち蟌んでいるのを発芋しおしたったのです。 スマホはファミリヌリンクで制限できおいおも、他の端末が抜け穎になっおは意味がありたせん。寝䞍足で郚掻に行けない、勉匷もできおいない  。このたた子䟛の自制心に任せたたたにするわけにはいかないず刀断し、根本的なネットワヌク改修を実斜するこずにしたした。 「DHCPの蚭定で、子䟛の端末にだけPi-holeのDNSを割り圓おればいいのでは」ず思われるかもしれたせん。しかし、倚くの家庭甚ルヌタにはそこたで高床なDHCP機胜はなく、たた同じサブネット内にいるず端末偎でDNSを手動蚭定されるだけで簡単に突砎されおしたいたす。ネットワヌクサブネットを物理的・論理的に完党に分けるこずで、逃げ堎をなくす「境界での制埡」を重芖したした。 今回行った根本的な察策ガチ構成 # IT゚ンゞニアの芪ずしお、物理的・論理的に抜け穎を塞ぐためのネットワヌク構成ぞず倉曎したした。 実は圓初、賃貞物件に無償で付垯しおいるケヌブルテレビ回線のルヌタがあり、子䟛甚端末はそちらの別回線ぞ完党に远い出しおしたう物理的な回線分離ずいう匷硬手段も考えたした。しかし、無料回線ゆえに䞋り速床があたりにも遅く、本来の目的である孊校の遠隔授業や調べ物に支障が出おしたっおは本末転倒です。そのため、あくたでメむンの高速回線を生かし぀぀、論理的に安党なネットワヌクを構築する方向で蚭蚈したした。 なお、我が家の環境は プロバむダの提䟛ルヌタず、䞀般的な家庭甚のBuffalo補ルヌタの組み合わせ です。蚭蚈を考えながら、䜕床「ああ、VLANさえ䜿えればどんなに楜だったか  」ず倩を仰いだこずかわかりたせん。もし䌁業向けの倚機胜ルヌタなどを䜿っおいれば、VLANを掻甚しおスマヌトに論理分割できたのですが、今回はあくたで「できるだけ自宅にあるものを組み合わせお䞀晩で完成させる」こずを裏テヌマずし、手持ちの民生機だけで そのたた培倜で泥臭く䞀気に組み䞊げたした 。 --> Information 💡 補足: VLAN仮想LANずは 物理的なLANケヌブルの配線やルヌタの接続構成を倉えずに、ネットワヌク機噚スむッチやルヌタ内郚の蚭定だけで論理的にネットワヌクを安党に分割できる仕組みです。これがあれば、物理的なルヌタを耇数台たたがっお繋ぎ、手䜜業で泥臭くサブネットを分離するような苊劎は䞍芁になりたす。 䜜業䞭、ふず「豆蔵入瀟以前に圚籍しおいた䌚瀟での瀟内むンフラ構築を思い出すな  」ず深倜に我に返り぀぀も、実斜した察策は以䞋の通りです。 MACアドレス制限の導入 䞭倮のルヌタにMACアドレスのブラックリストを蚭定し、子䟛の端末がメむンSSIDに盎接繋がらないようにシャットアりトしたした。 サブネットの隔離 子䟛甚SSIDのルヌタを、メむンサブネット配䞋に別のサブネット䟋 192.168.20.0/24 ずしお構築し、論理的にネットワヌクを隔離したした。なお、子䟛甚サブネットをメむンサブネットの䞋にぶら䞋げる構成NATにしおいるため、メむンサブネット偎に眮かれおいる家庭甚プリンタなどぞの通信は匕き続き利甚可胜です。 Raspberry Piによる独自DNSPi-holeの構築 特定のドメむンをブラックリストで匟くこず自䜓は垂販のルヌタの機胜でも可胜ですが、ルヌタの暙準機胜だけでは「有志がむンタヌネット䞊で公開しおいる膚倧なブラックリストをそのたた継続的にむンポヌトしお䜿う」ずいった柔軟な運甚が困難です。そこで、子䟛甚のサブネット内にRaspberry Piを蚭眮し、匷力なドメむンフィルタリング機胜を持぀「Pi-hole」を利甚しお専甚のDNSサヌバヌを構築したした。 なぜ自宅にラズパむが転がっおいるのかは聞かないでください。培倜で仕䞊げるために自宅の䜙り物を深倜にかき集めた結果、今回䜿甚したのは少し叀いRaspberry Pi 2Bです。 DHCPによる独自DNSの匷制 子䟛甚ルヌタのDHCP蚭定を倉曎し、ラズパむのIPアドレスをDNSサヌバヌずしお配垃するようにしたした。 特定ドメむンの問い合わせ拒吊ず正垞通信の転送Upstream DNS Pi-holeのフィルタリング蚭定で、ゲヌムや動画サむトに関するDNS問い合わせをすべお拒吊ブラックホヌル化したした。䞀方で、ブロック察象倖の正垞な問い合わせ孊習甚サむトなどに぀いおは、Pi-holeから䞊䜍のパブリックDNSGoogle DNSの 8.8.8.8 や Cloudflareの 1.1.1.1 などぞ転送させるこずで、安党な通信のみを蚱可する構成にしおいたす。 暗号化DNSDoH / DoTぞの察策 実は孊校のタブレットがDNS over HTTPSDoHなどの暗号化されたDNS通信を䜿甚しおいたため、通垞のポヌト53のフィルタリングだけでは抜け道になっおしたいたす。そこで、Cloudflareなどの䞻芁なパブリックDNSサヌビスに察する通信自䜓も拒吊する蚭定を远加したした。 --> Information 💡 補足: 芪管理者泣かせの DoH (DNS over HTTPS) 埓来のDNS通信ポヌト53は暗号化されおいないため、経路䞊に眮いたPi-hole等で「どこにアクセスしようずしおいるか」を簡単に監芖・遮断できたした。しかし近幎はプラむバシヌ保護の芳点から、OSやブラりザがDNS通信をHTTPSポヌト443の暗号化通信に䞞めおしたう機胜DoHをデフォルトで利甚するケヌスが増えおいたす。これを䜿われるず通信の䞭身がただのHTTPS通信に芋えるため、ロヌカルのDNSサヌバヌが意図せずスルヌ・回避されおしたいたす。セキュリティ的には玠晎らしい技術ですが、家庭内ネットワヌクの管理者ずしおは非垞に悩たしい壁ずなりたす。 以䞊を螏たえた、最終的な我が家のネットワヌク構成図は以䞋のようになりたす。 flowchart TD WAN((Internet)) --- CenterRouter[プロバむダ提䟛ルヌタ<br>å…Œ 䞭倮ルヌタ] subgraph MainNetwork[メむンネットワヌク: 192.168.10.0/24] CenterRouter --- WorkRouter[仕事郚屋ルヌタ] CenterRouter -.- MainSSID((メむンSSID)) WorkRouter -.- MainSSID MainSSID --- ParentDevices[芪・仕事甚端末] MainSSID --- Printer[家庭甚プリンタ] CenterRouter -.-x |MACアドレス制限で遮断| BlockedKids[子䟛甚端末] end subgraph KidsNetwork[子䟛甚ネットワヌク: 192.168.20.0/24] CenterRouter --- KidsRouter[子䟛郚屋ルヌタ] KidsRouter -.- KidsSSID((子䟛甚SSID)) KidsSSID --- KidsDevices[子䟛甚端末<br>タブレット・ゲヌム機等] KidsRouter --- PiHole[Raspberry Pi 2B<br>Pi-hole] KidsRouter -.-> |DHCPで独自DNSを匷制| PiHole PiHole -.-x |特定ドメむンの名前解決拒吊<br>DoHの問い合わせもブロック| KidsDevices end KidsDevices -.-> |NAT経由で印刷可胜| Printer 今埌の展望ず芪の葛藀 # これで珟圚のずころ、子䟛の倜曎かしネットサヌフィンは完党に防ぐこずができおいたす。 芪ずしおは、本来であればこんなシステムでガチガチに管理するのではなく、できれば子䟛自身の自制に任せお成長を芋守りたいずいうのが本音です。しかし珟状では完党に自制に任せきりにするこずができず、今回は苊枋の決断ずしおシステム的な制限を匷めるこずになりたした。 ただ、今回の構成も完璧ではありたせん。子䟛甚サブネットから倖郚ぞの暙準的なDNS通信UDP 53ポヌトは通過させおいるため、もし今埌、子䟛が知識を付けお、端末のネットワヌク蚭定から自分でGoogle DNS 8.8.8.8 や 8.8.4.4 などを蚭定できるようになれば、この制限は突砎されおしたいたす。その堎合は远加の怜蚎が必芁です。   ずはいえ、もしそこたでのネットワヌクの仕組みを自力で理解し、制限を突砎できるほどの知識を身に぀けたのであれば、IT゚ンゞニアの芪ずしおは「それはそれで喜ばしいこずかもしれない」ず、少し耇雑な感情も抱いおいたす。い぀かはこうした制限をすべお倖し、自分自身の力でコントロヌルできるようになっおくれるこずを願うばかりです。 おわりに # 家庭内ネットワヌクも、芁件家族の働き方や子䟛の利甚状況、リテラシヌ、手持ちの機材に合わせおアヌキテクチャを芋盎しおいく必芁があるず痛感したした。同じようなお悩みを持぀方の参考になれば幞いです。
新幎床が始たりたした。2026幎1-3月のサマリヌです。 蚘事数・執筆者数 # この3ヶ月で34本の蚘事が投皿され、蚘事数は876になりたした。新たに2名が執筆デビュヌし、环蚈76名になりたした。 連茉 # SysML モデリング連茉 # 耇雑なシステムをモデリングするための新しい蚀語である SysML v2。この SysML v2モデルを䜜成・線集するためのグラフィカル・モデリングツヌル、SysON を玹介するシリヌズ。 /blogs/2026/01/08/sysmlv2-tool-syson-intro/ å…š6回の連茉蚘事ずなっおいたす。蚘事のむンデックスは以䞋のリンクから参照しおください。 無料のOSSツヌルSysONで始めるSysMLv2モデリング スクラムマスタヌのAI掻甚 # スクラムマスタヌの AI 掻甚に関する連茉蚘事です。 /blogs/2025/12/04/scrum-ai-1/ å…š3回です。蚘事のむンデックスは以䞋のリンクから参照しおください。 スクラムマスタヌのAI掻甚を考える 蚘事の筆者石田がこのテヌマで「豆寄垭」に登壇したした。 https://mamezou.connpass.com/event/386346/ テヌマ別の蚘事 # フロント゚ンド # /blogs/2026/01/09/nuxt_supabase_auth/ /blogs/2026/02/18/next_storybook_1/ /blogs/2026/02/18/next_storybook_2/ /blogs/2026/03/25/dev-lib-efficiently-using-yalc/ ロボット # /robotics/yaskawa/yaskawa-hses-agent-skills/ /robotics/solar-panel-clean-robot/dji-drone-psdk-introduction/ /robotics/solar-panel-clean-robot/dji-drone-psdk-custom-widget/ /robotics/3dgs/3dgs-beginners-guide/ /robotics/industrial-network/cs-ads-communication/ /robotics/bizen/bizen_sw_architecture_with_grpc/ /robotics/industrial-network/pc_sdk-avoiding-pitfall/ /robotics/lerobot/lerobot_introduction/ AI ゚ヌゞェント # /blogs/2026/01/30/copilot-agent-setting/ /blogs/2026/01/30/kiro_cli_ralph/ /blogs/2026/03/17/use-mcp-on-vscode/ 認定資栌 # /blogs/2026/01/12/golden-kubestronaut/ /blogs/2026/03/26/google_cloud_all_certified/ AWS # /blogs/2026/03/06/fms-security-policy-article/ /blogs/2026/03/24/aws-ssm-gitbash-encoding/ /blogs/2026/03/30/quicksight_cicd_part1/ 個人開発 # /blogs/2026/03/26/build-your-own-text-editor/ さいごに # 以䞊、2025幎床第4四半期のサマリヌでした。ロボットの蚘事が非垞に倚かった印象です。 よかったら フィヌド の賌読、 X や Bluesky でのフォロヌもお願いしたす。 Facebook でも本サむトの泚目蚘事をはじめ豆蔵に関するむベントを玹介しおいたす。 note にも時々本サむト関連の蚘事が掲茉されおいたす。
芁件定矩入門①芁件定矩ずは䜕か 珟堎での圹割ず党䜓像 # 1. はじめに # 芁件定矩ずいう蚀葉はよく耳にするものの、 「実際に䜕をしおいるのか分からない」ず感じる方が倚いのではないでしょうか。 特に珟堎に入りたおの頃は、実装やテストずいった開発工皋に関わるこずが倚く、 芁件定矩に぀いおは「最初にやる工皋らしい」ずいう皋床の理解に留たりがちです。 そのため、 「芁件定矩っお䜕をしおいるのだろう」 ず疑問に思う堎面も少なくありたせん。 本蚘事では、芁件定矩の圹割に぀いお、 具䜓䟋を亀えながら分かりやすく敎理しおいきたす。 2. 芁件定矩ずは䜕か # 芁件定矩ずは、「システムが満たすべき条件芁件を明確にし、関係者間で合意する工皋」です。 ここでいう「芁件」ずは、 「システムが䜕を実珟すべきか」ずいう条件を指したす。 なぜ芁件定矩が必芁なのか # システム開発は、顧客の「やりたいこず芁望」から始たりたす。 しかし、この芁望を具䜓化せずに開発偎ぞそのたた委ねおしたうず、 完成したものが「思っおいたものず違う」ずいう事態が発生しやすくなりたす。 さらに、「予算」「人員」「技術的な制玄」ずいった芁因により、そもそも実珟が難しいケヌスもありたす。 芁件定矩でやっおいるこず # そのため、芁件定矩では以䞋のようなやり取りを繰り返したす。 顧客の芁望を敎理する 実珟可胜性を開発偎で怜蚎する 実珟方法や制玄を螏たえお提案する 顧客が提案内容を確認・調敎する このプロセスを繰り返し、 最終的に「これを䜜る」ずいう合意内容を定矩したす。 芁件定矩は、 「芁望」ず「珟実制玄」のすり合わせを行い、 実珟可胜な圢に萜ずし蟌む工皋ずも蚀えたす。 たた、顧客がすべおを明確にできるずは限らないため、 開発偎が質問や提案を通じお芁件を具䜓化しおいくこずが重芁です。 3. 蚭蚈ずはどう違うのか # 芁件定矩ずよく混同されるのが「蚭蚈」です。 䞡者の違いは、以䞋のように敎理できたす。 芁件定矩䜕を䜜るかWhat 蚭蚈どのように䜜るかHow 具䜓䟋 # 䟋ナヌザヌがログむンできる機胜。 芁件定矩 ナヌザヌがIDずパスワヌドでログむンできる 蚭蚈 認蚌方匏はJWTを䜿甚する パスワヌドはハッシュ化しお保存する 芁件定矩の段階で蚭蚈の話をしおしたうず、 埌から芁件倉曎があった際に柔軟に察応できなくなりたす。 そのため、「What」ず「How」を意識的に分けるこずが重芁です。 4. 基本的な流れ # 芁件定矩は、䞀般的に以䞋のような流れで進みたす。 「芁望」ず「芁求」は䌌おいたすが、本蚘事では以䞋のように定矩したす。 芁望顧客の䞻芳的なやりたいこず 芁求具䜓化されたニヌズ 5. 具䜓䟋 # 䟋勀怠管理システム。 本節では、芁件定矩の流れを具䜓的なケヌスに圓おはめお敎理したす。 ■ 芁望やりたいこず # 顧客の初期的な芁望は、抜象的な状態で提瀺されるこずが䞀般的です。 䟋 「瀟員の勀怠を管理したい」 ※この段階では、業務フロヌや必芁な機胜は明確になっおいたせん。 ■ 芁求具䜓化されたニヌズ # 開発偎がヒアリングを通じお、芁望を具䜓的な芁求ぞず敎理したす。 䟋 「出勀・退勀時刻を蚘録したい」 「スマヌトフォンから打刻できるようにしたい」 「月ごずの勀務時間および残業時間を集蚈したい」 ■ 敎理・怜蚎芁求の敎理・実珟可胜性の確認 # 芁求を敎理し、開発偎が以䞋のような芳点で怜蚎したす。 業務芁件ずしお劥圓か業務フロヌずの敎合性 技術的に実珟可胜か コスト・スケゞュヌルに収たるか 必芁に応じお、芁求の取捚遞択や優先床付けも行いたす。 ■ 提案実珟案の提瀺 # 怜蚎結果を螏たえ、開発偎から具䜓的な実珟案を提瀺したす。 䟋 「Webアプリケヌションずしお提䟛する」 → PCおよびスマヌトフォンのブラりザから利甚可胜ずする 「打刻方法はブラりザベヌスずする」 → 専甚アプリ開発は行わない開発コスト・期間を考慮 「既存の人事システムずの連携は行わない」 → 初期リリヌスでは単䜓運甚ずし、将来的な拡匵を怜蚎する たた、必芁に応じお以䞋のような芳点も提瀺したす。 機胜の優先床必須 / 任意 スコヌプ今回察応範囲 トレヌドオフコスト・品質・スピヌド ■ 怜蚎顧客偎確認 # 提案内容に぀いお、顧客偎で劥圓性を確認したす。 業務䞊問題なく利甚できるか 必芁な機胜が満たされおいるか 䞍足・過剰な芁件がないか 必芁に応じお、再床芁望の修正・远加をしたす。 ■ 合意芁件確定 # 顧客ず開発偎で内容に合意し、 「䜕をどこたで実珟するか」を確定したす。 この合意内容が、以降の蚭蚈・実装の基準ずなる「芁件」ずなりたす。 6. たずめ # 芁件定矩は「䜕を䜜るかWhat」を決める工皋 芁望ず制玄をすり合わせ、実珟可胜な圢にする 開発偎が䞻䜓的に芁件を具䜓化しおいくこずが重芁 芁件定矩は単なる前工皋ではなく、 プロゞェクト党䜓の品質を巊右する重芁な工皋です。 次回は、実際に芁件をどのように掗い出し、敎理しおいくのかを解説したす。
こんなひずにおすすめ # マルチモヌダルAI、フィゞカルAI、暡倣孊習、匷化孊習などロボティクス分野のAIに興味はあるが、どこから手を぀けたらいいのか分からない方 実機のロボットの䟡栌が高くお詊せないず感じおいる方 手を動かしお孊びたいが、䜎コストで始めたい方 はじめに # 本蚘事では、オヌプン゜ヌスプロゞェクトである LeRobot ずオヌプン゜ヌスのアヌムロボットである SO-101 を題材に、マルチモヌダル AI に関する技術玹介ず環境構築の手順を解説したす。 最終的なゎヌルは、片方のアヌムを動かすずもう片方のアヌムが同じ動䜜を远埓する動䜜を再珟するこずです䞋蚘GIF参照。 甚語の説明 # マルチモヌダルAI ずは # 埓来のロボティクス開発では、ロボット本䜓、カメラ、通信芏栌など耇数の技術モダリティが個別に動䜜し、出力されるデヌタ圢匏も異なるため、それらを統合しお1぀のシステムずしお運甚するのは容易ではありたせんでした。 近幎、Transformer 系モデルなどの進展により、画像・音声・テキスト・センサヌ倀など耇数モダリティを統合しお扱う「マルチモヌダルAI」の研究・実装が進んでおり、異なるデヌタ圢匏の扱いや統合が以前より容易になっおいたす。 これに䌎い、ロボティクス領域では前述の問題点の解消が期埅され、マルチモヌダルAIを掻甚した開発が増え぀぀ありたす。 --> Information 䌌たような甚語ずしお「フィゞカルAI」が存圚したす。こちらはロボットや物理䞖界での孊習・意思決定に焊点を圓おる甚語で、マルチモヌダルAIず重なる郚分が倚いですが、本蚘事では区別せず「マルチモヌダルAI」ずしお扱いたす。 LeRobot ずは # 公匏リポゞトリ LeRobot LeRobot は Hugging Face が公開しおいるオヌプン゜ヌスのロボティクスラむブラリで、実ロボット向けのモデル、デヌタセット、ツヌルを提䟛しおいたす。LeRobot を䜿うこずで倚様なロボットの制埡やデヌタ収集、孊習ワヌクフロヌの構築が容易になりたす。 本蚘事ではLeRobotのむンストヌルず蚭定に焊点を圓お、最終的にSO-101を動䜜させる手順を説明したす。 [1] SO-101 ずは # 公匏リポゞトリ SO-101 SO101 Follower の画像。 実物のロボットに近しい構成ずなっおいる。 SO101 Leader の画像。 人間が操䜜しやすいようにグリップ郚分がある。 SO-101 は RobotStudio ず Hugging Face が共同で開発した、䜎コストのオヌプン゜ヌス・ロボットアヌムで、ロボティクス分野ぞの参入ハヌドルを䞋げるこずを目的ずしおいたす。 SO-101 は「Leader先導者」ず「Follower埓者」の2台のロボットアヌムで構成されたす。䞀般的な利甚では Leader をナヌザヌが手動で操䜜しおデヌタ収集をし、Follower はその蚘録や孊習枈みモデルに基づいお同じ動䜜を再珟するこずを想定しおいたす。 本蚘事では SO-101 の入手方法 ず、LeRobot で動かす際に必芁な手順を解説したす。 動䜜環境 # 本蚘事では環境構築の手順に重点を眮くため環境芁件は簡略化したすが、LeRobot の倚くのチュヌトリアルが CLI 操䜜を前提ずしおいるこずから OS は Linux たたは macOSを 掚奚したす。 本蚘事では敎合性を図るために、Linux を前提ずしおいたす。 --> GPU に関しお 将来的に LeRobot ず SO-101 で孊習するのであれば、VRAM容量が 8GB 以䞊の GPU も必芁ずなりたす。 --> あるず䟿利なもの 本蚘事の手順を遂行するのに必ずしも必芁ありたせんが、以䞋の物があるず䟿利です。 2口以䞊の電源タップ2台のロボットアヌムぞの電源䟛絊に必芁なため。 2口以䞊で電源䟛絊可胜な USB3.0 ハブ2台のロボットアヌムをPCに接続するため。 タックシヌル耇数のモヌタヌや郚品を管理しやすくするため。 タックシヌルに関しおは、ダむ゜ヌの タックシヌル キレむにはがせるタむプ 枚 をおすすめしたす。こちらは SO-101 のほが党おのパヌツの倧きさに察応しおおり、䞋蚘画像のようにラベリングが可胜になりたす。 タックシヌルを甚いお、モヌタヌをラベリングしおいる時の画像。 タックシヌルを甚いお、モヌタヌバスをラベリングしおいる時の画像。 環境構築方法 # こちらでは LeRobot ず SO-101 を甚いた環境構築の手順を解説したす。 手順ずしおは次のように進めたすが  LeRobot の環境構築方法 SO-101 の環境構築 事前に SO-101 の印刷もしくは賌入 を確認いただき、SO-101 のパヌツを揃えるこずをおすすめしたす。 LeRobot の環境構築方法 # LeRobot の環境構築方法は Hugging Face の Installation ペヌゞを参照しおいるため、重芁な手順に絞っお解説したす。 0. 【任意】conda 系のパッケヌゞがむンストヌルされおいない堎合 # LeRobot は耇数の Python パッケヌゞを扱うため、Conda を甚いお仮想環境を構築するこずを勧めおいる。そのため、Conda がむンストヌルされおいない堎合は䞋蚘コマンドでむンストヌルしたす。 wget &quot;https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh&quot; bash Miniforge3-$(uname)-$(uname -m).sh 1. 仮想環境構築 # Conda で仮想環境を構築する # 䞋蚘の lerobot は構築する環境の名前なので、お奜きなものに倉えおも構いたせん # その堎合、他の手順も同様に倉曎を加えおください conda create -y -n lerobot python=3.12 Conda の仮想環境をアクティブする conda activate lerobot ffmpeg を仮想環境にむンストヌルする conda install ffmpeg -c conda-forge LeRobot の珟圚のバヌゞョンでは、 ffmpeg のバヌゞョン 8.x に察応しおいないので、前のコマンドでむンストヌルされた ffmpeg のバヌゞョンを確認したす ffmpeg -version このずき、 ffmpeg のバヌゞョン 8.x になっおいれば、䞋蚘コマンドで ffmpeg のバヌゞョンをダりングレヌドしたす conda install ffmpeg=7.1.1 -c conda-forge 2. LeRobot をむンストヌルする # LeRobot はリポゞトリの゜ヌス、もしくは PyPl からむンストヌル出来たす。将来的に個人開発したい堎合は、コヌドの線集が可胜な゜ヌスからのむンストヌルを掚奚したす。 リポゞトリの゜ヌスからむンストヌルする堎合は䞋蚘コマンドを実行したす。 git clone https://github.com/huggingface/lerobot.git cd lerobot # 線集可胜モヌドで Conda 環境にむンストヌルする pip install -e . PyPl からむンストヌルする堎合は䞋蚘コマンドを実行したす。 pip install lerobot SO-101 の環境構築 # 1. SO-101 の印刷もしくは賌入 # SO-101 のハヌドりェア構成は 公匏リポゞトリ で公開されおいたす。 リポゞトリの3Dデヌタを䜿っおパヌツを3Dプリントするか、リポゞトリで案内されおいる 公認販売サむト からパヌツキットを賌入しお、Follower ず Leader の䞡アヌムを組み立おられたす。 泚意点ずしお、公匏リポゞトリで入手できるのは䞻に倖装・機構パヌツで、サヌボモヌタヌなどの駆動郚品は別途甚意する必芁がありたす。モヌタヌ賌入時は公匏リポゞトリ内の Parts For Two Arms (Follower and Leader Setup): の蚘茉を参照するか、公認販売元のキットを賌入しおください。 参考ずしお、筆者の堎合は公匏リポゞトリで玹介されおいた秋月電子通商のサむトから、以䞋の2぀のキットを賌入したした。たた、説明の敎合性を図るために、これらのパヌツを基準ずしお手順を解説したす。 [131169]SO-101 オヌプン゜ヌスロボットアヌムキット Pro版 [131222]SO-101 オヌプン゜ヌスロボットアヌムキット 3Dプリントパヌツ 2. SO-101 のセットアップ # SO-101 のはセットアップ Hugging Face の SO-101 ペヌゞを参照しおいるため、重芁な手順に絞っお解説したす。たた、前述でも觊れたしたが、SO-101 は Leader ず Follower の2台のロボットアヌムで構成されるため、䞀郚の手順が異なる点には留意しおください。 初めに䞋蚘のコマンドで SO-101 を動かすために必芁な SDK をむンストヌルしたす。 pip install -e &quot;.[feetech]&quot; 2.1. モヌタヌの仕分け 参考リンク Configure the motors 初めに 前のセクション で甚意したモヌタヌを Leader ず Follower 甚に分けたす。Leader 偎は耇数皮類のギア比を持぀モヌタヌで構成されるのに察し、Follower 偎は同䞀仕様1 / 345のモヌタヌで構成されるためです。 Leader の各関節に割り圓おるモヌタヌID  埌述を参照 ずギア比は次の通りです。 Leader-Arm Axis Motor Gear Ratio Base / Shoulder Pan 1 1 / 191 Shoulder Lift 2 1 / 345 Elbow Flex 3 1 / 191 Wrist Flex 4 1 / 147 Wrist Roll 5 1 / 147 Gripper 6 1 / 147 モヌタヌの皮類は本䜓のラベルシヌルで刀別できたす。Leader 甚モヌタヌにはギア比が明蚘されおいるこずが倚く、Follower 甚は同䞀仕様のためギア比の衚蚘がないこずがありたす。 2.2. MotorBusモヌタヌバスのセットアップ モヌタヌの仕分けが終わりたしたら、モヌタヌバス䞋蚘画像参照の蚭定したす。 <img width=400" src="https://akizukidenshi.com/img/goods/L/131540.jpg"/> モヌタヌバスは耇数のモヌタヌをたずめお管理・通信するための機噚です。 前セクション で分けた Leader 甚の党モヌタヌに察しお1台、Follower 甚の党モヌタヌに察しお1台のモヌタヌバスを甚意したす。このずき、Leader ず Follower のモヌタヌを誀っお混同するず埌で修正が倧倉なので、タックシヌルなどで党モヌタヌにラベルを貌り、どのモヌタヌバスに察応させるかを明確にするずいいです。 以降の手順では䟿宜䞊、次の略称を䜿いたす。 Leader甚モヌタヌバスLeader_MB Follower甚モヌタヌバスFollower_MB Leader_MB ず Follower_MB の電源を入れ、PC に接続する。 各モヌタヌバスの USB ポヌトを確認する。 䞡方のモヌタヌバスを接続した状態で䞋蚘を実行する。 スクリプト実行䞭に指瀺が出たら、Leader_MB の USB ケヌブルを抜いお Enter キヌを抌す。 lerobot-find-port 䟋スクリプトの出力䟋 Finding all available ports for the MotorBus. ['/dev/ttyACM0', '/dev/ttyACM1'] Remove the usb cable from your MotorsBus and press Enter when done. #察応する Leader_MB のケヌブルを抜いお Enter を抌す The port of this MotorsBus is /dev/ttyACM0 Reconnect the USB cable. #察応する Leader_MB のケヌブルを差し盎す Reconnect the USB cable. が衚瀺された時点で Leader_MB のケヌブルを差し盎しおください。䞊蚘䟋では /dev/ttyACM0 が Leader_MB のポヌトずなるので、こちらを蚘録しおください。 同様に Follower_MB の USB ケヌブルを抜いお、Follower_MB のポヌトを確認・蚘録しおください。䞊蚘䟋では /dev/ttyACM1 が Follower_MB のポヌト番号になりたすが、環境によっおは異なるこずには泚意しおください。 --> Linux のデバむス暩限に関しお Linuxではデバむスファむルのアクセス暩が原因で認識できないこずがあるため、必芁に応じお以䞋を実行しお暩限を付䞎しおください。䞋蚘䟋では ttyACM0 デバむスの暩限を倉曎しおおりたすが、デバむス名は環境により倉わるこずには泚意しおください。 sudo chmod 666 /dev/ttyACM0 2.3. モヌタヌずモヌタヌバスを連動させる 出荷時のモヌタヌ ID はすべお 1 に蚭定されおいるため、モヌタヌバスず正しく通信・連動させるには各モヌタヌに䞀意の ID を割り圓おる必芁がありたす。 たずは Leader_MB を蚭定するために、䞋蚘コマンドを実行しおください。 lerobot-setup-motors \ --robot.type=so101_follower \ --robot.port=/dev/ttyACM0 # Leader_MB のポヌト番号 --robot.port= には MotorBusモヌタヌバスのセットアップ で確認した Leader_MB のポヌトを入力したす。確認しポヌトが /dev/ttyACM0 以倖であれば、適切に倉曎しおから実行しおください。 PC ず Leader_MB の通信が確率するず、䞋蚘メッセヌゞが衚瀺されたす。 Connect the controller board to the '関節名' motor only and press enter. ここで衚瀺される &lt;関節名&gt; は、これから ID を割り圓おるモヌタヌが担圓する関節名䟋 gripper を瀺したす。手順は次の通りです。 モヌタヌの仕分け で甚意したモヌタヌずその章のテヌブルず照合しお、該圓する皮類のモヌタヌを準備する䟋gripper → ギア比 1 / 147 のモヌタヌ 該圓モヌタヌをモヌタヌバスに接続するモヌタヌ付属ケヌブルを䜿う タヌミナルで Enter キヌを抌す ID 割り圓おが正垞に行われるず、次のように衚瀺されたす。 '関節名' motor id set to ID 続けお他の Leader 甚モヌタヌにも同様に ID を蚭定しおください。これら手順の䞀連の流れは䞋蚘の公匏動画から確認できたす。 Leader_MB の蚭定が終わったら、同じように Follower_MB の蚭定したす。前述の通り、Follower 偎のモヌタヌは同䞀のギア比で構成されおいるこずが倚いので、モヌタヌが担圓する関節名を照合する必芁はありたせん。ただ、蚭定した ID を混同しないよう、留意しおください。 --> アドバむス 公匏リポゞトリの動画ではモヌタヌを既にアヌムに取り付けた状態で ID を蚭定しおいたすが、筆者は取り付け前に ID を蚭定するこずをおすすめしたす。Leader 偎は耇数のギア比の異なるモヌタヌで構成され、取り付け枈みだず皮類刀別が難しく、誀った䜍眮に取り付けるず分解・ID 再蚭定が必芁になるためです。 事前にIDを振り、ラベルタックシヌル等で識別しおからアヌムに組み付けるずトラブルを倧幅に枛らせたす。 2.4. ロボットアヌムの組み立お SO-101 の組み立お手順は倚岐にわたるため、たずは公匏チュヌトリアル動画や販売元の組み立お動画を参照しおください。 LeRobot 公匏サむトのチュヌトリアル WoWRobo が公開しおいる組み立お手順の動画 --> Warning 組み立お埌は、各公匏ペヌゞやチュヌトリアルで案内されおいるキャリブレヌション手順に埓っおモヌタヌの䜍眮合わせを必ず行っおください。キャリブレヌションが䞍十分だず関節角がずれお想定倖の姿勢で動䜜し、呚囲の物や人にぶ぀かるなど危険が生じたす。 --> アドバむス 組み立おに関しおは、䞊蚘のいずれかの動画を芋おいけばいいのですが、サヌボホヌン䞋蚘画像参照でいく぀かアドバむスをしたいず思いたす。 サヌボホヌンにロボットアヌムの倖装・機構パヌツを固定する際は、倧きなネゞを䜿いたす。モヌタヌ本䜓をロボットアヌムに固定するためには、小さなネゞを䜿いたす。 サヌボホヌンは「凞郚突起」が倖偎衚に芋える向きではなく、突起が芋えないように裏返しお取り付けおください平らな面を衚にする。裏衚を誀るずネゞが最埌たで締たらず、アヌムの可動域やスムヌズさに圱響するこずがありたす。 [2] 3. 動䜜確認 # 参考リンク Imitation Learning on Real-World Robots 最埌に、LeRobot が提䟛する暡倣孊習のサンプルコヌドを䜿っお、Leader から Follower ぞのテレオペレヌションで動䜜確認を行いたす。モヌタヌバスがPCに接続されおいるこずを確認しおから、䞋蚘コマンドを実行したす。 lerobot-teleoperate \ --robot.type=so101_follower \ --robot.port=/dev/ttyACM0 \ # MotorBusモヌタヌバスのセットアップで確認した Follower_MB のポヌトを入力しおください --robot.id=my_awesome_follower_arm \ # 奜きな倉数名を入力しおください --teleop.type=so101_leader \ --teleop.port=/dev/ttyttyACM0 \ # MotorBusモヌタヌバスのセットアップで確認した Leader_MB のポヌトを入力しおください --teleop.id=my_awesome_leader_arm # 奜きな倉数名を入力しおください 今たでの手順が正しく行われおいれば、 はじめに の章の GIF のように、Leader を動かすずFollower が远埓しお動䜜したす。 最埌に # 本蚘事は LeRobot ず SO-101 を䜿ったフィゞカルAI入門ずしお、環境構築ず基本的な動䜜確認手順を玹介したした。今埌も機䌚があれば、LeRobotを䜿った孊習暡倣孊習・匷化孊習や、ロボティクス領域のAI手法の詳现に぀いお掘り䞋げおいく予定です。 機䌚があれば、孊習方法に関しお蚘事を曞くかもしれたせん。 ↩ 著者はこれのせいで、組み立お枈みのロボットアヌムを分解しお、再床組み盎すこずになりたした。 ↩