<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://about.gitlab.com/blog</id>
    <title>GitLab</title>
    <updated>2026-08-14T19:14:06.007Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>The GitLab Team</name>
    </author>
    <link rel="alternate" href="https://about.gitlab.com/blog"/>
    <link rel="self" href="https://about.gitlab.com/ja-jp/atom.xml"/>
    <subtitle>GitLab Blog RSS feed</subtitle>
    <icon>https://about.gitlab.com/favicon.ico</icon>
    <rights>All rights reserved 2026</rights>
    <entry>
        <title type="html"><![CDATA[Monday Merge 8月号：信頼こそが、新たなAI時代の競争優位]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/monday-merge-2026-aug-10/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/monday-merge-2026-aug-10/"/>
        <updated>2026-08-10T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Monday Mergeへようこそ！</p><p>今月もAI業界ではさまざまな出来事がありましたが、その理由は必ずしも予想どおりではなく、「速いだけでは十分ではない」ということを改めて認識させられる出来事がありました。</p><p>大きく報じられたのは、あるAIモデルが目的を達成しようとして管理された評価環境から逸脱し、サイバーセキュリティのベンチマーク中に外部インフラへ影響を及ぼした前例のない事例です。</p><p>この出来事は、多くのエンジニアリングリーダーがすでに実感していることを改めて示しました。</p><p><strong>AIの未来を決めるのは、エージェントが「何ができるか」ではありません。</strong></p><p><strong>「何をすべきか」を、私たちがどう統制するかです。</strong></p><p>今月のMonday Mergeは、まさにこのテーマから始まります。</p><p>今回は、企業がAIの実験段階を超え、その先にある「実際のビジネス価値」「より強固なガバナンス」、そして人とAIエージェントが自信を持ってソフトウェアを開発するために欠かせない「コンテキスト」に焦点を当てます。</p><p>それでは見ていきましょう 🤿</p><h1 id="新しいforrester調査エージェント型ソフトウェア開発がもたらすビジネス価値"><strong>新しいForrester調査：エージェント型ソフトウェア開発がもたらすビジネス価値</strong></h1><p><img alt="新しいForrester調査：エージェント型ソフトウェア開発がもたらすビジネス価値" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785998264/okbh2bbtau2vfmdt1tn0.jpg" /></p><p>「AIは本当にビジネス価値を生み出しているのか？」</p><p>そう感じている方は、GitLab Duo Agent Platformを対象とした最新の<strong>Forrester Total Economic Impact™（TEI）調査</strong>をぜひご覧ください。</p><p>実際にGitLab Duo Agent Platformを導入している企業へのインタビューをもとに、次のような効果が見込まれることが明らかになりました。</p><ul><li><strong>ROI（投資対効果）400%</strong></li><li><strong>開発者の生産性20%向上</strong></li><li><strong>セキュリティ修正作業を40%削減</strong></li><li><strong>新規開発者のオンボーディングを80%高速化</strong></li><li><strong>投資回収期間は6か月未満</strong></li></ul><p>数字も印象的ですが、それ以上に重要だったのは次のメッセージです。</p><p>“企業は単にコードを書くスピードを上げているのではありません。</p><p>エンジニアリングに費やす時間を取り戻し、手作業を減らし、開発者がより価値の高い課題に集中できるようになっています。”</p><p>まだ読まれていない方には、ぜひダウンロードをおすすめします。</p><p>エージェント型ソフトウェア開発が実際の現場でどのような成果を生み出しているかを示す、非常に分かりやすい調査です。</p><p>👉 <strong>Forrester TEI調査はこちらからダウンロード</strong></p><h2 id="gitlab-192がリリース"><strong>GitLab 19.2がリリース</strong></h2><p><img alt="GitLab 19.2がリリース" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785998259/tsotwsqckivfghwcxthl.jpg" /></p><p>GitLab 19.2では、エージェント型ソフトウェア開発のビジョンをさらに推し進める新機能が追加されました。</p><p>開発者が繰り返し作業に費やす時間を減らし、より多くの時間をソフトウェア開発に充てられるよう支援すると同時に、エンタープライズに求められるガバナンスも実現します。</p><p>主な新機能をご紹介します。</p><h3 id="gitlab-duo-cliが正式リリース"><strong>💻 GitLab Duo CLIが正式リリース</strong></h3><p>GitLab Duo Agent Platformをターミナルから直接利用できます。</p><p>パイプライン障害の診断やコードベースへの質問、問題解決まで、コマンドラインを離れることなく行えます。</p><h3 id="日常業務を再利用可能なaiワークフローへ"><strong>🔄 日常業務を再利用可能なAIワークフローへ</strong></h3><p><strong>カスタムフロー</strong>が正式リリース。</p><p>複数ステップにわたるソフトウェア開発プロセスを、自動化されたワークフローとして再利用できるようになりました。</p><p>承認フローや人が介在するチェックポイントも組み込めます。</p><h3 id="️-コードを理解するより高度なセキュリティレビュー"><strong>🛡️ コードを理解する、より高度なセキュリティレビュー</strong></h3><p>新しい<strong>セキュリティレビューフロー</strong>は、従来のスキャナーとは異なり、「コードが何を実現しようとしているのか」を理解した上で解析します。</p><p>そのため、パターンマッチングだけでは検出できない業務ロジックの欠陥や認可の問題も見つけ出せます。</p><h3 id="開発スピードを落とさないセキュリティ修正"><strong>⚡ 開発スピードを落とさないセキュリティ修正</strong></h3><p><strong>依存関係スキャン自動修正</strong>では、脆弱な依存関係が見つかると、自動でマージリクエストを作成。</p><p>更新によって互換性の問題が発生した場合も、GitLab Duoが原因を分析し、修正を適用し、パイプラインが成功するまで自動的に再実行します。</p><p>開発を止めることなく、セキュリティ負債の削減を支援します。</p><h3 id="aiのすべての操作を可視化"><strong>🔍 AIのすべての操作を可視化</strong></h3><p>AIエージェントの利用が広がる中、生産性だけでなくガバナンスも重要になっています。</p><p>新しい<strong>AI監査イベントレポート</strong>では、GitLab Duoのすべてのセッションをダウンロード可能な監査ログとして保存。</p><p>セキュリティ・コンプライアンス担当者は、「何が」「なぜ」「どのポリシーのもとで」実行されたのかを把握できます。</p><p>コード作成からマージリクエストレビュー、セキュリティ強化、自動化まで、GitLab 19.2はソフトウェア開発ライフサイクル全体にインテリジェントな支援を提供します。</p><p>👉 <strong>GitLab 19.2のリリースノート・注目機能・デモ・ブログはこちら</strong></p><h2 id="デモを見逃した方へ"><strong>デモを見逃した方へ</strong></h2><p><img alt="デモを見逃した方へ" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785998259/pa8ambtfheplriqmmahw.jpg" /></p><p>GitLab Transcend Londonでは、GitLabが描くエージェント型ソフトウェア開発の未来が数多く紹介されました。</p><p>参加できなかった方や、もう一度見返したい方のために、基調講演やデモをまとめています。</p><p>主な内容はこちらです。</p><ul><li>次世代Source Code Management（エージェント時代に最適化）</li><li>GitLab Orbit（開発ライフサイクル全体にわたるリッチなコンテキストを提供）</li><li>Governance for Agents（AIエージェント向けのID・ポリシー・監査・承認）</li><li>GitLab Flex（AI導入に合わせた新しいライセンスモデル）</li></ul><p>AI活用を始めたばかりの企業から、大規模展開を進める企業まで、今後のソフトウェア開発の方向性を知ることができる内容です。</p><p>👉 <strong>Transcendのハイライトとデモはこちら</strong></p><h2 id="お客様事例mercedes-benz"><strong>お客様事例：Mercedes-Benz</strong></h2><p><img alt="お客様事例：Mercedes-Benz" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785998263/iazwhojoywfvxlqdtr5i.jpg" /></p><p>Transcendで特に印象に残ったセッションの一つが、Mercedes-Benzによる講演でした。</p><p>同社は、GitLabを活用しながら<strong>20,000人以上のエンジニア</strong>によるソフトウェア開発を変革しています。</p><p>印象的だったのは、その規模だけではありません。</p><p>AIエージェントは、与えられるコンテキストの質によって初めて力を発揮します。</p><p>そして、安全性が求められるシステムでは、人間が最終的な責任を持ち続けることの重要性を強調していました。</p><p>AIが開発を加速し、人間が重要な意思決定に責任を持つ。</p><p>これこそが、業界が向かっている未来を象徴するセッションでした。</p><h2 id="black-hat-usaを開催しました"><strong>Black Hat USAを開催しました</strong></h2><p><img alt="Black Hat USAを開催しました" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785998263/dri5edyppgg0iahrriza.jpg" /></p><p>8月といえば、Black Hat USAです。</p><p>GitLabは今年も参加しました。</p><p>最新のサイバーセキュリティ研究に触れ、業界の専門家と交流し、AI時代の安全なソフトウェア開発について議論できる絶好の機会でした！</p><h2 id="今月のおすすめコンテンツ"><strong>今月のおすすめコンテンツ</strong></h2><p>今月もおすすめの記事やコンテンツが数多くありますが、特におすすめしたいのは次の2つです。</p><ul><li><strong>Manav Khurana</strong>
AIアカウンタビリティが、現代のソフトウェア開発における最重要課題になりつつある理由を解説しています。AI生成だけでなく、ガバナンスの重要性にも焦点を当てています。</li><li><strong>Andrew Haschka（Cyber Voices Podcast）</strong>
AI、ソフトウェアデリバリー、そしてDevSecOpsの次なる進化について語っています。</li></ul><p>そのほかにも、今月のおすすめ記事をぜひチェックしてみてください。</p><h2 id="最後に"><strong>最後に</strong></h2><p>スパイ小説家ジョン・ル・カレ氏は、こんな言葉を残しています。</p><blockquote><p><strong>「あらゆる作戦には、『表の仕事』と『裏の仕事』がある。表はマニュアルどおりに行うこと。裏は、その仕事をどうやってやり遂げるかだ。」</strong></p></blockquote><p>この言葉は、今のAI時代にも驚くほど当てはまります。</p><p>AIエージェントが信頼できる開発パートナーになりつつある今も、ガバナンスやポリシー、承認プロセスは欠かせません。</p><p>しかし、本当に差を生むのは単にルールを守ることではなく、人とAIが正しい判断を下せるだけの<strong>コンテキスト</strong>を提供することです。</p><p>AIで成功する組織は、最も多くのAIエージェントを導入している企業ではありません。</p><p><strong>AIを支える適切な仕組みを構築している企業</strong>なのです。</p><p>最後までお読みいただき、ありがとうございました。
今月号が、皆さんのチームで新しい取り組みを考えるきっかけになれば幸いです。
それでは、また次回お会いしましょう。</p><p>それでは、Happy Merging!</p><p><img alt="Fatima" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1770180580/nz0ipehzgtcb757kl0ux.png" /></p><p><a href="https://www.linkedin.com/in/sugaroverflow/?lipi=urn%3Ali%3Apage%3Ad_flagship3_pulse_read%3B3ix%2FZ9%2BgTBmIWuSHZsMZRw%3D%3D" rel="">Fatima Sarah Khalid</a>｜Senior Developer Advocate, GitLab</p><p>このニュースレターが気に入ったら、ぜひチームに共有してください。
そして👉<a href="https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg" rel="">YouTubeチャンネル</a>の登録もお忘れなく！</p>]]></content>
        <author>
            <name>GitLab Japan Team</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/gitlab-japan-team/</uri>
        </author>
        <published>2026-08-10T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[MCPサーバーとは？仕組みやソフトウェア開発の活用例をわかりやすく解説]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/what-is-mcp-server/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/what-is-mcp-server/"/>
        <updated>2026-08-07T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>近年、多くの企業や業界で業務効率化や顧客満足度向上などを目的にAI活用が進んでいます。現在では「MCPサーバー」と呼ばれる技術に注目が集まっており、ソフトウェア開発の領域においても作業の効率化や自動化に役立てることができます。</p><p>実際に開発現場でMCPサーバーの活用を検討している担当者も多いのではないでしょうか。</p><p>この記事では、MCPサーバーの基礎知識や仕組み、メリット、注意点などを詳しく解説します。ソフトウェア開発における活用例やポイントも紹介するので、ぜひ参考にして下さい。</p><h2 id="_1-mcpサーバーの基礎知識">1. MCPサーバーの基礎知識</h2><p><img alt="MCPサーバーの基礎知識" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001468/j7zz5feed8zjokbw6bcz.jpg" /></p><p>そもそも「MCP」とは、「Model Context Protocol（モデル・コンテキスト・プロトコル）」の略語であり、LLMを利用する AIアプリケーションと外部システムを安全かつ効率的につなげるための標準プロトコルのことです。2024年11月にAnthropic社によって開発され、AIアプリケーションがさまざまなデータソースやシステムに接続するための方法を提供しています。</p><p>そしてMCPサーバーはMCPの共通規格に沿って、実際にAIアプリケーションと外部システムをつなぐための接続用のプログラムを指します。</p><p>なお、MCPサーバーとAPIにははっきりとした違いがあります。APIは、異なるシステム間でデータをやりとりするための汎用的な仕組みであり、人間（開発者）が操作することを前提に設計されています。一方MCPサーバーは、AIアプリケーションに特化した仕組みで、「手足」のような位置付けになります。これにより、エージェントをはじめとした AI アプリケーションが「自律的に判断・操作すること」が可能になります。</p><h2 id="_2-mcpサーバーが注目されている背景">2. MCPサーバーが注目されている背景</h2><p><img alt="MCPサーバーが注目されている背景" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001469/ezib0bdwthpnpgw9kc0a.jpg" /></p><p>なぜMCPサーバーはソフトウェア開発の領域を含め、さまざまな業務シーンで注目されているのでしょうか。その背景や理由は「AIと外部システム連携に対するニーズの高まり」と「AI連携に伴う開発・保守コスト削減の必要性」にあります。</p><p>これまでのAIの業務活用においては生成AIと会話して「学習済みのAIに対して指示を出し、アウトプットされた情報を参照・活用する」という使い方が中心でしたが、現在はAIエージェントと呼ばれる自律型AIの普及により、「AIに特定のツールを操作させて業務を自動化したい」といった外部システム連携のニーズが高まっています。</p><p>しかし、AIと外部システムの連携においては、各ツールのAPI仕様が異なるため、接続のたびに毎回個別での対応が必要になるというコスト面での課題が浮き彫りとなっていました。接続したいツールが増えるほど保守コストも増大し、安全な運用が難しいこともあり、こうした課題がAI活用の障壁となっていたのです。</p><p>MCPサーバーは「プロトコル」であり共通的な通信規格を定めているため、この規格に準拠したプログラムを利用することでAIと外部システムの連携を効率化できることからさまざまな業務シーンにおいて活用されているのです。</p><h2 id="_3-mcpサーバーの仕組み">3. MCPサーバーの仕組み</h2><p><img alt="MCPサーバーの仕組み" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001465/p2emvurnjib6axidpbho.jpg" /></p><p>MCPサーバーは具体的にどのような仕組みで動作するのでしょうか。ここでは、以下を踏まえてMCPサーバーの全体像を掴みましょう。</p><ul><li>MCPホスト・クライアントとの関係性</li><li>MCPサーバーが提供する主要機能</li><li>MCPサーバー利用時の処理フロー</li><li>MCPサーバーの通信方式</li></ul><h3 id="_3-1-mcpホストクライアントとの関係性">3-1. MCPホスト・クライアントとの関係性</h3><p>MCPは「MCPホスト」「MCPクライアント」「MCPサーバー」の3つの役割で構成されており、MCPサーバーはMCPホストとMCPクライアントの通信を仲介する役割を担います。</p><p>MCPホストは、ChatGPTやCursor、Claude DesktopなどのAIアプリケーション本体を指し、ユーザーからの指示を受け取り、必要な処理を判断します。</p><p>MCPクライアントは、MCPホスト内でMCPサーバーと1:1 のコネクションを張って通信を行う役割を担います。</p><h3 id="_3-2-mcpサーバーが提供する主要機能">3-2. MCPサーバーが提供する主要機能</h3><p>MCPサーバーがAIに提供する主要機能として以下の3つがあります。</p><ul><li>ツール（Tools）</li><li>リソース（Resources）</li><li>プロンプト（Prompts）</li></ul><h4 id="_321-ツール">3−2−1. ツール</h4><p>MCPサーバーのツールは、AIが外部システムを操作するための機能を指します。つまり、AIが能動的に「何らかの操作」を実行するための仕組みです。</p><p>例えば、以下のようなアクションを提供します。</p><ul><li>Web APIの呼び出し</li><li>データベースの操作</li><li>メッセージ送信</li><li>ドキュメント作成・検索</li><li>計算の実行 など</li></ul><h4 id="_322-リソース">3−2−2. リソース</h4><p>リソースは、AIが参照できるデータを提供する機能です。つまり、AIがデータを読み込むための機能になります。</p><p>例えば、以下のようなデータをAIに提供します。</p><ul><li>設計書や仕様書などのドキュメント</li><li>ソースコード</li><li>Issue</li><li>CIログ など</li></ul><p>AIはこれらのデータを参照し、意思決定やアウトプットに利用します。</p><h4 id="_323-プロンプト">3−2−3. プロンプト</h4><p>プロンプトは、AIに対して「どのような処理を実行するか」を指示する対話テンプレートです。あらかじめよく使用する指示をサーバー側で事前に設定できます。</p><p>例えば、コードレビュー依頼やバグ調査などの定型的な指示をテンプレート化できるため、開発チーム全体で効果的なプロンプトを再利用することが可能です。</p><h3 id="_3-3-mcpサーバー利用時の処理フロー">3-3. MCPサーバー利用時の処理フロー</h3><p>実際にMCPサーバーを利用した際、AIはどのように動作するのでしょうか。簡潔にまとめると以下のような流れになります。</p><ol><li>ユーザーがAI（ホスト）に対して特定の指示を出す</li><li>ホスト内のクライアントがMCPサーバーへ利用可能なツールやリソースを問い合わせ、MCPサーバーからの返答を受ける</li><li>AIが使用するツールを判断し、クライアント経由でMCPサーバーへリクエストを依頼する</li><li>MCPサーバーはリクエストに従って処理を実行し、結果を生成する</li><li>MCPサーバーからクライアント経由で、AIに結果が返される</li><li>AIが最終的な回答を生成し、ユーザーへ情報を返す</li></ol><h3 id="_3-4-mcpサーバーの通信方式">3-4. MCPサーバーの通信方式</h3><p>MCPサーバーの通信方式には「ローカル版」と「リモート版」の2つの種類があります。ここではそれぞれの特徴について解説します。</p><h4 id="_3-4-1-ローカルサーバー">3-4-1. ローカルサーバー</h4><p>ローカルサーバーは、ユーザー個人のマシン上で直接動作するMCPサーバーのことです。インターネット環境に依存することなくオフラインで処理を実行できることから、作業の継続性やパフォーマンスを維持することが可能です。</p><p>ただし、ローカル環境であるため、チーム全体で活用する場合は適していません。</p><h4 id="_342-リモートサーバー">3−4−2. リモートサーバー</h4><p>リモートサーバーは、クラウドなどインターネットや閉域環境など、何らかのネットワーク上で稼働しており、処理を実施するMCPサーバーを指します。リモートサーバーなら個別マシンでの設定が最小限で済み、ネットワーク上で稼働するため、チーム全体で共通のMCPサーバーを利用できます。</p><p>ただし、ネットワーク経由でデータ通信を行うため、接続状況によってはAIの処理スピードに影響が出る可能性があります。また、情報漏えいや不正アクセスを防止するために適切なセキュリティ対策が必要です。</p><h2 id="_4-mcpサーバーのメリット">4. MCPサーバーのメリット</h2><p><img alt="MCPサーバーのメリット" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001469/imouowalter2bwgbbisp.jpg" /></p><p>MCPサーバーを利用することで以下のようなメリットを享受できます。</p><ul><li>開発効率の向上</li><li>AIの処理能力の向上</li><li>柔軟かつ拡張性のあるAI活用の実現</li></ul><h3 id="_4-1-開発効率の向上">4-1. 開発効率の向上</h3><p>MCPサーバーを活用するメリットの一つ目が、共通規格によってAIと外部システムの接続を標準化・効率化できることです。従来であれば、AIと外部システムを連携させる際にAIモデルやツールごとに個別での接続処理が求められ、開発や保守に大きな負担がかかっていました。これを「M×N問題」と呼んでいます。</p><p>MCPサーバーなら一度サーバーを構築すれば、MCPに対応した複数のAIアプリケーションに対応できるため、「M×N問題」の解消に繋げられます。これにより、開発者はソフトウェア開発における機能設計や実装など、本来注力すべき業務に専念しやすくなります。</p><h3 id="_4-2-aiの処理能力の向上">4-2. AIの処理能力の向上</h3><p>MCPサーバーの活用は、AIの処理能力の向上にも繋がります。これまでのAI活用においては、ユーザーの指示（プロンプト）に対してAIが情報提供のみを行うという受動的な処理がメインでした。</p><p>MCPサーバーを使えば、人間の指示を前提とした単一の処理だけでなく、目的に応じてAIアプリケーションが自ら考えて特定の作業を完了させることができます。</p><p>こうした処理能力の向上により、ソフトウェア開発における一連の作業工程においても自動化・効率化できる範囲が増え、開発スピードの向上に繋がります。</p><h3 id="_4-3-柔軟かつ拡張性のあるai活用の実現">4-3. 柔軟かつ拡張性のあるAI活用の実現</h3><p>MCPサーバーによるAIと外部システム連携においては、必要に応じて利用するAIを柔軟に切り替えられます。共通の通信ルールがあることにより、MCPに対応しているAIであれば同様のMCPサーバーで対応できるためです。</p><p>また、新しいデータソースを追加したい場合は、対応したMCPサーバーを接続するだけで済むため、拡張性にも優れています。</p><p>近年システムの大規模化や技術進化により、ソフトウェア開発プロセスが複雑化している中で、MCPサーバーが持つ柔軟性と拡張性は、開発者の負担削減に大きく貢献すると言えるでしょう。</p><h2 id="_5-mcpサーバーを活用する際の注意点">5. MCPサーバーを活用する際の注意点</h2><p><img alt="MCPサーバーを活用する際の注意点" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001465/r93kgoqvnpnlwznndvoc.jpg" /></p><p>MCPサーバーの活用においてはさまざまなメリットがある一方で、注意したい要素もあります。</p><ul><li>一定の学習コスト・運用ノウハウの蓄積が必要</li><li>セキュリティリスクへの対策が必要</li></ul><h3 id="_5-1-一定の学習コスト運用ノウハウの蓄積が必要">5-1. 一定の学習コスト・運用ノウハウの蓄積が必要</h3><p>冒頭でも説明しましたが、MCPは2024年に開発された比較的新しい技術です。導入や活用の際に参考となる事例や情報がまだ少ない中で、開発者はMCPの概念や仕組みを深く理解しなければなりません。企業によっては技術者の育成や採用のためのコストが発生するでしょう。</p><p>また、技術自体がまだ発展途中の段階にあり、今後仕様変更や機能追加の発生が予想されるため、導入する際には長期的なアップデートに対応できる体制を構築する必要があります。</p><p>なお、現時点の最新情報として2026年7月28日に大きな仕様変更（2026-07-28 Release Candidate）が発生しており、最大の変更点はプロトコル層がステートレスになっていることです。詳しくは以下のページをご確認下さい。</p><p><a href="https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/" rel="">The 2026-07-28 MCP Specification Release Candidate</a></p><h3 id="_5-2-セキュリティリスクへの対策が必要">5-2. セキュリティリスクへの対策が必要</h3><p>MCPサーバーの活用によってAIが外部システムを操作することから、外部システムの認証情報を必要とします。つまり、セキュリティリスクが発生するため、対策を検討しなければなりません。ここでは、具体的なセキュリティ対策について解説します。</p><ul><li>信頼できるMCPサーバーの活用</li><li>適切な権限管理とアクセス制御</li><li>プロンプトインジェクション対策の実施</li></ul><h4 id="_521-信頼できるmcpサーバーの活用">5−2−1. 信頼できるMCPサーバーの活用</h4><p>MCPサーバーは概念や仕組みを理解していれば、誰でも自作することができます。中には、なりすましや、信頼を得てから悪意ある挙動へと切り替わる「Rug Pull」などを目的としたサーバーも存在します。</p><p>出所不明な怪しいMCPサーバーを安易に AI アプリケーションに連動させることはセキュリティリスクを高めてしまいます。</p><p>そのため、MCPサーバーを探す際には信頼できる発行元が提供するMCPサーバーに絞って導入を進める必要があります。</p><h4 id="_522-適切な権限管理とアクセス制御">5−2−2. 適切な権限管理とアクセス制御</h4><p>MCPサーバーに対して過剰な権限を付与してしまうと、AIが予期しない危険な処理を自動で実行してしまう可能性があるため、適切な権限管理とアクセス制御が必要です。</p><p>一般的なクラウド運用などで言われるような「最小権限の原則（PoLP）」は MCP サーバの利用においても適用されます。最小権限の原則とは、ユーザーやシステムに対して目的達成のために本当に必要なアクセス権限のみを付与するというセキュリティ対策における基本的な考え方になります。</p><p>例えば、Issueや実行ログを確認したいだけなら、「読み取り専用」の権限を基本とするなどの対応を行います。</p><p>また、MCPサーバーに対して付与する権限を最小限にする対策と並行して、MCPサーバーの操作対象となるシステム側をインフラ側で制御することも大切です。</p><p>なお、権限管理とアクセス制御については業務上のニーズの変化に応じて定期的な見直しを行うことも大切な取り組みです。</p><h4 id="_523-プロンプトインジェクション対策の実施">5−2−3. プロンプトインジェクション対策の実施</h4><p>AI活用における特有のリスクとして、プロンプトインジェクション攻撃があります。プロンプトインジェクション攻撃とは、AIに対して正規のユーザーを装った不正な入力を行い、意図しない動作を引き起こすサイバー攻撃のことです。</p><p>プロンプトインジェクション対策としては、人間による確認や承認、サニタイゼーションの実装などが求められます。また、インシデント発生時にすぐに対応できるようログの記録や監視も大切な取り組みです。</p><h2 id="_6-ソフトウェア開発におけるmcpサーバーの活用例">6. ソフトウェア開発におけるMCPサーバーの活用例</h2><p><img alt="ソフトウェア開発におけるMCPサーバーの活用例" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001464/jf5e29tk93adzzzp9xpl.jpg" /></p><p>ここではソフトウェア開発におけるMCPサーバーの活用例を紹介します。</p><ul><li>要件定義・設計の効率化</li><li>コードレビュー・品質管理の自動化</li><li>Issue管理・タスク管理の効率化</li><li>CI/CD・運用業務の自動化</li><li>ナレッジ管理・情報検索</li></ul><h3 id="_6-1-要件定義設計の効率化">6-1. 要件定義・設計の効率化</h3><p>まず要件定義書や設計書が格納されているストレージサービスやバージョン管理システムのMCPサーバーを活用することで、要件定義や設計業務を効率化できます。例えば、AIが過去の仕様書などの開発に関わる情報を参照にして、新機能の設計書のたたき台を作成するといった活用が可能です。</p><p>その他、AIに過去の類似案件を参照させて、現状の要件定義書に抜け漏れなどのミスや問題がないかを比較検証させることもできます。</p><p>AIが作成・検証したものをそのまま鵜呑みにするのは危険ですが、全体像の把握や内容のチェックなどを効率よく進められます。</p><h3 id="_6-2-コードレビュー品質管理の自動化">6-2. コードレビュー・品質管理の自動化</h3><p>前述のMCPサーバーが提供するリソースとして開発で利用されるコード規約などを AI アプリケーションに対して提供することにより、コードレビューの負担を大幅に削減することができます。</p><p>例えば、AIにコーディング規約を参照させて違反がないかどうかのチェックや、セキュリティの脆弱性の確認、バグの検出などを自律的に実行させられます。</p><p>さらにAIはコードの分析結果をもとに、改善案の提示も行うことができるため、担当者はAIの情報を参考にしながらコード品質の向上と作業の効率化を図れます。</p><h3 id="_6-3-issue管理タスク管理の効率化">6-3. Issue管理・タスク管理の効率化</h3><p>課題管理システムやタスク管理システムのMCPサーバーを活用することで、AIがIssueやタスク情報にもアクセスできるようになるため、進捗状況の確認や管理作業の効率化も図れます。</p><p>例えば、開発途中で発生したバグ対応において未対応タスクのみを一覧で表示させたり、急な仕様変更などを理由にタスクの優先度の組み直しをさせたりといった活用が可能です。</p><p>AIの支援によって適切なIssueやタスク管理を実現できれば、複数のツールを参照する必要がなくなり、コーディングを行う流れの中で情報ソースやコンテキストとして活用できるため、スムーズにプロジェクトを進めることができるでしょう。</p><h3 id="_6-4-cicd運用業務の自動化">6-4. CI/CD・運用業務の自動化</h3><p>MCPサーバーとCI/CDの自動化は相性が良く、代表的な活用例の一つです。CI/CD パイプラインを提供するプラットフォームのMCPサーバーを活用することにより、AIがCI/CDツールを直接操作・分析できるようになるため、パイプラインの実行や状況確認を効率よく行えます。</p><p>また、パイプラインが失敗した際には、AIに原因の一次調査を指示できることから、開発者によるログ確認の手間を軽減し、スピーディーな障害対応に繋げられます。</p><h3 id="_6-5-ナレッジ管理情報検索">6-5. ナレッジ管理・情報検索</h3><p>社内には社内Wikiや議事録などさまざまなナレッジが蓄積されているケースが多いです。</p><p>これらのナレッジを活用する際によくありがちな課題として、「対象のデータがどこに保管されているかわからない」「いつ時点のデータなのか特定できない」というような悩みが挙げられます。</p><p>MCPサーバーを活用してAIが社内ナレッジにアクセスできるようにすれば、必要な情報を素早く検索・参照することができます。これにより、例えば新人エンジニアが開発ルールを確認したい時にも、自身で必要な情報を確認できるようになるため教育コストの削減に繋げられます。また、メンバー同士のナレッジ共有や引き継ぎなどにも役立てられ、属人化の解消を実現する強い味方になるでしょう。</p><h2 id="_7-ソフトウェア開発におけるmcpサーバーの選び方">7. ソフトウェア開発におけるMCPサーバーの選び方</h2><p><img alt="ソフトウェア開発におけるMCPサーバーの選び方" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001469/ljrhnvo0kojfx3d1xv2f.jpg" /></p><p>MCPサーバーには目的に応じてさまざまな種類があります。実際にソフトウェア開発において、一般に公開されているMCPサーバーを利用する場合には、選定時に以下のポイントを意識することが大切です。</p><ul><li>実現したいユースケースへの対応</li><li>開発環境とAIツールとの互換性</li><li>サポート体制・ドキュメントの充実度</li></ul><h3 id="_7-1-実現したいユースケースへの対応">7-1. 実現したいユースケースへの対応</h3><p>まずは、自社の開発現場において目的や課題に合った機能を搭載しているかを確認します。ソフトウェア開発では多岐にわたる業務が存在するため、以下のようにどのプロセスをAIで効率化したいかを検討します。</p><ul><li>プロジェクト管理（Issue・タスクなど）</li><li>コードレビュー支援</li><li>CI/CDパイプラインの実行・原因調査</li><li>ナレッジ共有 など</li></ul><p>MCPサーバーごとにAIが操作できる範囲（ツール）は異なるため、実現したいユースケースを明確化した上で選定しましょう。</p><h3 id="_7-2-開発環境とaiツールとの互換性">7-2. 開発環境とAIツールとの互換性</h3><p>自社の開発環境（ツール群）や利用するAIアプリケーションと連携できるかどうかも重要な観点です。MCPサーバーによって連携できる開発ツールやAIは異なるため、互換性を事前に確認しておくと導入後の運用がスムーズです。</p><p>なお、MCPサーバーの導入を検討するタイミングで、既存の開発環境の見直しも必要に応じて行うとよいでしょう。</p><h3 id="_7-3-サポート体制ドキュメントの充実度">7-3. サポート体制・ドキュメントの充実度</h3><p>MCPサーバーを長期的に安定して活用していくためには、サポート体制やドキュメントが充実していることも大切です。例えば、専用の窓口やFAQ、設定ガイドなどの有無を確認しましょう。</p><p>サポート体制やドキュメントが充実していれば、導入・運用時にトラブルや不明点が発生した場合でも迅速に対応を進められます。</p><p>また、継続的なメンテナンスやアップデートが実施されているかどうかも長期的な運用において重要なポイントです。</p><h2 id="_8-ソフトウェア開発でaiを効果的に活用するためのポイント">8. ソフトウェア開発でAIを効果的に活用するためのポイント</h2><p><img alt="ソフトウェア開発でAIを効果的に活用するためのポイント" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001465/kahnwrjtveghlqsqrctz.jpg" /></p><p>ソフトウェア開発におけるAI活用においては、開発ライフサイクル全体の情報に効率よくアクセスできるかという点が、AIによる成果を生み出す上で重要な要素になってきます。</p><p>というのは、実際の現場ではソースコードやIssue、CI/CDなどの多くの情報が、複数のツールに点在しているケースが少なくありません。開発情報が複数のツールに分散されていると、AIと連携する際にMCPサーバーも必要に応じて複数組み合わせる必要があり、開発者の管理負荷やセキュリティリスクを増やすことに繋がります。</p><p>多くの開発情報を一元的に管理できる開発基盤を事前に構築し、それに対応したMCPサーバーを導入すれば連携や管理もシンプルになり、AIは横断的に必要な情報にアクセスできます。</p><h2 id="_9-ai活用を前提とした開発基盤としてgitlabがおすすめな理由">9. AI活用を前提とした開発基盤としてGitLabがおすすめな理由</h2><p><img alt="AI活用を前提とした開発基盤としてGitLabがおすすめな理由" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1757988295/ldz4szcwrxwnpfl0bfnk.png" /></p><p>上記のAI活用のポイントを踏まえて、多くの開発情報を一元管理できる開発基盤を構築し、AI連携を効率よく進めたいなら「<a href="https://about.gitlab.com/ja-jp/" rel="">GitLab</a>」の導入がおすすめです。</p><h3 id="_9-1-主要な開発プロセスを単一のプラットフォームで統合">9-1. 主要な開発プロセスを単一のプラットフォームで統合</h3><p>GitLabは、ソースコード管理やタスク管理、CI/CD、セキュリティ診断などソフトウェア開発の全工程を単一のプラットフォームで統合して実行できるサービスです。そして、GitLabならソースやタスクなど開発に関わる全ての情報がGitLabに格納されます。つまり、多くの開発情報を複数のツールに分けて管理する必要がなくなり、コストや管理負担の削減に繋げられます。</p><p>GitLabで全ての開発情報を管理できるため、次で解説するGitLab MCPサーバーによるAI連携も効率よく進められます。</p><h3 id="_9-2-gitlab-mcpサーバーによるaiアプリとの連携">9-2. GitLab MCPサーバーによるAIアプリとの連携</h3><p>「<a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo/model_context_protocol/mcp_server/" rel="">GitLab MCPサーバー</a>」は、AIアプリケーションとGitLabで管理されている開発情報をつなぐためのMCPサーバーです。GitLab MCPサーバーを活用することで、AIアプリケーションがGitLabで管理しているデータソースにアクセスでき、GitLab内のデータを SSoT（Single Source of Truth）として参照しながらユーザーに代わって特定の操作を実行します。既存のGitLab内にある資産（ソースやタスクなどソフトウェア開発に関わるすべての情報）をそのまま活かすことができるため、迅速かつ高品質なソフトウェア開発の実現に繋げられます。</p><p>なお、GitLab MCPサーバーでは、CursorやClaude Code、Claude DesktopなどさまざまなAIアプリケーションとの連携が可能で、設定ガイドも用意しています。</p><h2 id="_10-mcpサーバーの今後の展望将来性">10. MCPサーバーの今後の展望・将来性</h2><p><img alt="MCPサーバーの今後の展望・将来性" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001466/xzia6gaea3vkfyqtbsjb.jpg" /></p><p>MCPサーバーは登場して間もない新しい技術であり、その利便性からソフトウェア開発を含めさまざまな業務シーンで活用されていくと予想されます。今後も仕様の進化や対応ツールの拡大が期待され、多くの企業が導入を進めることで事例や運用ノウハウも充実していくでしょう。</p><p>また、MCPサーバーのようなAI時代の新しい技術がソフトウェア開発の領域で浸透することで、AI連携・活用をより効果的に進めていくという観点から「<a href="https://about.gitlab.com/ja-jp/" rel="">GitLab</a>」のような開発情報の全てを管理できるプラットフォームの必要性も高まっていくと考えられます。</p><h2 id="_11-mcpサーバーに関するqa">11. MCPサーバーに関するQ＆A</h2><p><img alt="MCPサーバーに関するQ＆A" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001465/fdh1zesup466xnciyuck.jpg" /></p><p>最後にMCPサーバーに関するよくある質問と回答を紹介します。</p><h3 id="_11-1-mcpとrag検索拡張生成との違いは">11-1. MCPとRAG（検索拡張生成）との違いは？</h3><p>RAGは、「Retrieval-Augmented Generation」の略語で、生成AIが学習していない専門的な知識や情報を、外部の社内文書や資料などから検索して根拠ある回答を作成する技術になります。</p><p>一方、MCPはAIと外部システムを安全に接続するための標準規格であり、必要な操作や情報取得を自律的に実行させる仕組みです。</p><p>両者の技術は対立するものではなく、必要に応じて組み合わせて使うケースも見られます。</p><h3 id="_11-2-mcpサーバーが使える主なaiアプリは">11-2. MCPサーバーが使える主なAIアプリは？</h3><p>MCPサーバーに対応している主なAIアプリを挙げると以下の通りです。</p><ul><li>ChatGPT（対話型の生成AIサービス）</li><li>Claude Code（コーディング支援ツール）</li><li>Claude Desktop（Claudeのデスクトップ版）</li><li>Cursor（エンジニア向けのコードエディタ） など</li></ul><p>なお、実際に利用予定のMCPサーバーが対応しているAIアプリについては確認が必要です。</p><h3 id="_11-3-mcpサーバーは複数利用できる">11-3. MCPサーバーは複数利用できる？</h3><p>MCPサーバーは必要に応じて複数のサーバーを組み合わせて利用できます。拡張性に優れているため、複雑なタスクやニーズの変化に対応しやすいメリットがあります。</p><p>ただし、管理対象が増えるためセキュリティや運用負担も考慮しながらMCPサーバーの追加を行うことが大切です。</p><h2 id="まとめ-mcpサーバーを積極的に活用してソフトウェア開発の効率化を図ろう">まとめ MCPサーバーを積極的に活用してソフトウェア開発の効率化を図ろう</h2><p>MCPサーバーを自社のソフトウェア開発で積極的に活用することで、安全かつ効率的にAIと外部システムを連携できるようになり、多くの作業を迅速に進められます。</p><p>また、AI活用をよりスムーズに進めるには、開発情報をまとめて管理できる統合プラットフォームの導入もおすすめです。</p><p><a href="https://about.gitlab.com/ja-jp/" rel="">GitLab</a>は、ソフトウェア開発に関わるすべての情報を単一のツールで管理することができ、GitLab MCPサーバーによってGitLabで蓄積したデータとAIと連携させて、さまざまな操作を自動で実行できます。</p><p>MCPサーバーの活用を検討している企業の担当者は、ぜひGitLabの導入も検討してみてはいかがでしょうか。</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/pricing/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_apac_brand_x_x_ja_gitlabjapanblogseo_what-is-mcp-server" rel="">お問い合わせはこちら</a></p></blockquote><p>監修：若林 寛之 <a href="https://gitlab.com/hwakabayashi" rel="">@hwakabayashi</a><br />
GitLab合同会社 カスタマーサクセス本部プロフェッショナルサービス部シニア テクニカルアーキテクト</p>]]></content>
        <author>
            <name>GitLab Team</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/gitlab-team/</uri>
        </author>
        <published>2026-08-07T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[イテレーションとは？意味や進め方、おすすめの支援ツールを紹介]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/what-is-iteration/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/what-is-iteration/"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>ソフトウェア開発プロジェクトにおいてアジャイル開発の採用を検討している中で、「イテレーション」という言葉を見聞きし、その言葉の意味を詳しく知りたいと考えている担当者も多いのではないでしょうか。</p><p>アジャイル開発を成功に導く上では、「イテレーションをうまく回せるかどうか」が重要なポイントの一つになります。</p><p>この記事では、イテレーションの意味やメリット、進め方などを詳しく解説します。アジャイル開発を支援するおすすめのツールも紹介するので、ぜひ参考にして下さい。</p><h2 id="_1-イテレーションの意味とは">1. イテレーションの意味とは</h2><p><img alt="イテレーションの意味とは" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816787/oobcptmivup4ap3kcqxr.jpg" /></p><p>イテレーション（iteration）は、「反復」や「繰り返し」を意味し、ソフトウェア開発において「設計・開発・テスト・リリース・改善」といった一連の工程を、短期間で繰り返す開発単位のことです。各イテレーションでは、実際に使用可能な成果物の完成を目指し、レビューや改善活動を行います。</p><p>このイテレーションを適切に回すことで、開発プロセスの中で早期の課題発見や、柔軟なニーズ対応などが可能になります。</p><h2 id="_2-アジャイル開発とイテレーションの関係性">2. アジャイル開発とイテレーションの関係性</h2><p><img alt="アジャイル開発とイテレーションの関係性" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816785/n5sxoukowxolo844hw7u.jpg" /></p><p>アジャイル開発は、ソフトウェア開発手法の一つで、機能を小さく分割した上で機能単位ごとに短期間のサイクル（イテレーション）を回しながら開発を進めます。つまり、イテレーションはアジャイル開発の中で採用される概念であり、両者は切り離せない関係性となります。</p><p>アジャイル開発はソフトウェア開発手法であり、イテレーションはアジャイル開発を実現するための中心的な役割として機能する概念と理解しておくとよいでしょう。</p><p>イテレーションを深く理解するためには、アジャイル開発の基礎知識も網羅しておくことが大切です。以下の記事でアジャイル開発について詳しく解説しているので、あわせて参考にして下さい。</p><p><a href="https://about.gitlab.com/ja-jp/blog/what-is-agile-development/" rel="">アジャイル開発とは？意味や進め方、DevSecOpsとの関係性を解説</a></p><h2 id="_3-イテレーションとスプリントとの違い">3. イテレーションとスプリントとの違い</h2><p><img alt="3. イテレーションとスプリントとの違い" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816787/alsfbak8g9zwwphsw7w3.jpg" /></p><p>アジャイル開発においてイテレーションの他によく使用される言葉として「スプリント」があります。</p><p>結論、イテレーションとスプリントは、ほぼ同じ意味で使用される言葉であり、両者ともアジャイル開発における短期間の開発サイクルを指します。</p><p>細かな違いとしてはその言葉が使用されるシーン・文脈にあります。イテレーションはアジャイル全般で使われることが多く、主にエクストリームプログラミング（XP）で採用される言葉です。一方、スプリントは、「スクラム」と呼ばれるアジャイル開発のフレームワークの文脈で使われるケースが多い言葉になります。</p><h2 id="_4-イテレーションが使用されるエクストリームプログラミング-xp-とは">4. イテレーションが使用されるエクストリームプログラミング (XP) とは</h2><p><img alt="イテレーションが使用されるエクストリームプログラミング (XP) とは" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816787/kkbq6vphgdg5xd6wtv2d.jpg" /></p><p>ここでは、イテレーションが使用されるエクストリームプログラミング (XP) の特徴やスクラムとの違いについて詳しく解説します。</p><h3 id="_4-1-エクストリームプログラミングの概要5つの価値">4-1. エクストリームプログラミングの概要・5つの価値</h3><p>エクストリームプログラミングとは、仕様変更が頻繁に発生することを前提として、変化する顧客のニーズへの対応力を高めながらプロダクトの品質向上を目指すアジャイル開発手法になります。</p><p>1990年代にケント・ベック氏らによって提唱され、エクストリームプログラミングでは重視すべき要素として以下の5つの価値を取り上げています。</p><table><thead><tr><th>5つの価値</th><th>詳細</th></tr></thead><tbody><tr><td>コミュニケーション</td><td>・プロジェクト失敗の原因はコミュニケーション不足にあることが多い ・そのため、開発メンバーだけでなく顧客とのコミュニケーションも重要視する</td></tr><tr><td>シンプル</td><td>・現時点で本当に必要な機能・設計を意識する ・オーバーエンジニアリングを避ける</td></tr><tr><td>フィードバック</td><td>・顧客からのフィードバックを受け取り、プロダクトに反映する ・フィードバックは頻繁かつ早期に受け取る</td></tr><tr><td>勇気</td><td>・仕様の大幅な変更などに対して恐れずに前向きに対応する ・恐れを克服することで、開発におけるさまざまな壁を乗り越えられる</td></tr><tr><td>尊重</td><td>・顧客を含め全ての関係者の意見や姿勢を尊重する ・経験やスキルに左右されず対等な関係性を築く</td></tr></tbody></table><h3 id="_4-2-エクストリームプログラミングとスクラムとの違い">4-2. エクストリームプログラミングとスクラムとの違い</h3><p>スクラムとは、最大10人程度の少人数のチームで短期間のサイクル（スプリント）を繰り返しながら、プロダクトの完成を目指すアジャイル開発のフレームワークです。</p><p>エクストリームプログラミングとスクラムはどちらもアジャイル開発手法ではありますが、主に重視する要素に違いがあります。エクストリームプログラミングは、テスト駆動開発やペアプログラミングなどの技術的な手法を重視しているのに対して、スクラムはデイリースクラムやレトロスペクティブなどのイベントを通したチーム内でのコミュニケーションや、プロジェクト管理に焦点が当てられています。</p><h2 id="_5-イテレーションの目的とメリット">5. イテレーションの目的とメリット</h2><p><img alt="イテレーションの目的とメリット" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816787/h7q1mgrqbciwzgurw9nt.jpg" /></p><p>次はイテレーションの具体的な目的やメリットについて解説していきます。</p><ul><li>顧客ニーズに対して柔軟な対応ができる</li><li>手戻りやミスの軽減に繋がる</li><li>プロダクトの価値向上やチームの成長に繋がる</li></ul><h3 id="_5-1-顧客ニーズに対して柔軟な対応ができる">5-1. 顧客ニーズに対して柔軟な対応ができる</h3><p>短期間の開発サイクルを繰り返し、顧客のフィードバックを受けながら開発を進めることで、顧客のニーズを満たした品質の高いソフトウェア開発を実現できます。これにより顧客満足度の向上にも繋げられるでしょう。</p><p>短いスパンで顧客からのフィードバックを受けられるため、変化が激しい市場ニーズへの対応も柔軟に行うことが可能です。つまり、ニーズが漠然としているプロジェクトや、最初から仕様変更が予想されるケースでは、アジャイル開発でイテレーションを回しながら作業を進めると対応がスムーズに運びます。</p><h3 id="_5-2-手戻りやミスの軽減に繋がる">5-2. 手戻りやミスの軽減に繋がる</h3><p>イテレーションは、通常1～4週間の短い期間で開発からテストまで実施するため、途中問題が発生しても大きな手戻りがなく、早い段階で対応できるメリットがあります。各イテレーション内で問題への対応が完了するため、プロジェクト全体への影響も最小限に抑えられます。</p><p>また、イテレーションを繰り返す中で、開発メンバーや顧客など関係者全員が密なコミュニケーションや振り返りを積み上げることで、、認識のズレがなくなり、大きなミスやトラブルの予防、プロセスの改善による効率化に繋げることができます。</p><h3 id="_5-3-プロダクトの価値向上やチームの成長に繋がる">5-3. プロダクトの価値向上やチームの成長に繋がる</h3><p>1つのイテレーションが完了すると、そのまま次のイテレーションに進むのではなく、振り返りが行われます。今回のイテレーションで障害になったことや課題点を洗い出し、次のイテレーションに向けて改善策を検討することでプロダクト品質の向上を図れます。</p><p>また、イテレーションごとにチームがリアルタイムに課題に向き合うことでメンバー全員が現状を把握でき、自らの役割を主体的に判断して動けるようになります。</p><h2 id="_6-イテレーションの進め方">6. イテレーションの進め方</h2><p><img alt="イテレーションの進め方" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816787/ovnbfopbgcwdaaszex0m.jpg" /></p><p>実際にイテレーションはどのような流れで進めるのでしょうか。ここでは、具体的な進め方について解説します。</p><ol><li>イテレーションごとの要件・計画を策定する</li><li>要件・計画をもとに開発を進める</li><li>成果物のレビュー・テストを行う</li><li>振り返りと次のイテレーションの計画</li></ol><h3 id="_6-1-1イテレーションごとの要件計画を策定する">6-1. 1.イテレーションごとの要件・計画を策定する</h3><p>まずは、イテレーション内で「何をやるか（何を開発するか）」「なぜそれをやるのか」を決め、具体的な目標やタスクに落とし込みます。</p><p>その際ポイントになるのが、作業を進める中で急な市場ニーズの変化に対応できるよう、取り組むべき価値のある必要最小限の要件に絞り込むことです。</p><p>また、各イテレーションの計画を立てる際には、顧客の要望も積極的に取り入れ、関係者全体で認識の擦り合わせを行った上で共通理解をつくっておくことも大切です。</p><h3 id="_6-2-2要件計画をもとに開発を進める">6-2. 2.要件・計画をもとに開発を進める</h3><p>イテレーションの計画に基づいて、実際に開発を進めていきます。その際、顧客とコミュニケーションを取りやすい体制を構築し、仕様の詳細化のやり取りや情報共有を行いながらプロジェクトを進めることが重要なポイントです。</p><p>例えば、チャットツールでプロジェクト専用のチャンネルを作成し、顧客と開発チームがいつでも直接やり取りできるような環境を構築して情報共有を行うといった方法が挙げられます。</p><h3 id="_6-3-3成果物のレビューテストを行う">6-3. 3.成果物のレビュー・テストを行う</h3><p>イテレーション内での開発が終了したら、成果物のレビュー・テストを実施します。完成したプロダクトにおいて「正しく動作するのか」「顧客のニーズを満たした仕様になっているか」などの事項を関係者全員で確認し、改善点や課題点を洗い出します。</p><p>ここで実施するレビューやテストの内容は、次回のイテレーションに反映する必要があるため、顧客からのフィードバックを漏れなく拾い上げるなど丁寧に進める意識を持つことが大切です。</p><h3 id="_6-4-4振り返りと次のイテレーションの計画">6-4. 4.振り返りと次のイテレーションの計画</h3><p>イテレーションの最後には、振り返りを実施します。ここでの振り返りは、チーム連携の強化やプロジェクトの進捗管理などを目的として行います。</p><p>振り返りの際には、以下のような手法を活用しながら、現状を分析すると良いでしょう。</p><table><thead><tr><th>手法</th><th>目的</th></tr></thead><tbody><tr><td>KPT</td><td>「Keep（継続）」「Problem（問題）」「Try（挑戦）」の３つの要素を用いて、チームの現状を分析する</td></tr><tr><td>OKR</td><td>チームが達成すべき目標と、目標のマイルストーンを設定し進捗を管理する</td></tr></tbody></table><p>振り返りが終われば、これまでの顧客の要望や外部環境の変化も踏まえて改善策を改めて整理し、次のイテレーションに進みます。</p><h2 id="_7-イテレーションを成功させるためのポイント">7. イテレーションを成功させるためのポイント</h2><p><img alt="イテレーションを成功させるためのポイント" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816794/gigsnf62bjjiner961xq.jpg" /></p><p>イテレーションを成功させるためには、以下のようなポイントを意識することが大切です。</p><ul><li>適切な期間と現実的な計画を立てる</li><li>チーム内でのコミュニケーションを活性化させる</li><li>開発プロセスを自動化できるツールを活用する</li></ul><h3 id="_7-1-適切な期間と現実的な計画を立てる">7-1. 適切な期間と現実的な計画を立てる</h3><p>イテレーションの期間は、チームメンバーの経験やスキル、顧客のニーズなどを踏まえて適切な期間を設定することが大切です。</p><p>期間が極端に短すぎるとメンバーの負担が大きくなり、反対に長すぎると問題発生時に大きな手戻りが発生したり、顧客からのフィードバックが遅れるなどイテレーションのメリットを享受できなくなります。</p><p>メンバーの負担を軽減し、スムーズに開発を進めるには、各イテレーションの開発量を偏りなく均等に配分した上で無理のない期間設定を行います。そうすることで、一定の開発ペースを保てるようになり、安定した運用を実現できるでしょう。また、一度設定した期間は、基本的に変えないことがポイントです。期間を固定化することでベロシティ（一定期間にチームがどれだけの仕事（作業量）をこなせたかを示す数字）を明らかにし、生産性の改善にも活用することができます。</p><h3 id="_7-2-チーム内でのコミュニケーションを活性化させる">7-2. チーム内でのコミュニケーションを活性化させる</h3><p>イテレーションをうまく回していくためには、メンバーや顧客を含めた関係者全員での密なコミュニケーションが欠かせません。</p><p>開発途中で発生した課題や日々の進捗、顧客からの要望などプロジェクトにおける情報を共有し合える体制を構築することで、短期間のサイクルの中で問題の早期発見・改善に繋げられます。</p><p>状況共有を行うために、オンサイト顧客や集団的コードオーナーシップ、ペアプログラミングなどのプラクティスが存在しますが、よりチームでの情報共有を円滑に行うためにDaily Stand-Upなどを実施することも増えています。</p><h3 id="_7-3-開発プロセスを自動化できるツールを活用する">7-3. 開発プロセスを自動化できるツールを活用する</h3><p>アジャイル開発では短期間のサイクルを繰り返します。つまり、その特性によって繰り返し作業の量が相対的に増加するため、CI/CDなどの自動化を進めることが必須となります。</p><p>面倒な繰り返しの手作業は無駄なミスや精神的な負担を生み出すケースもあるため、自動化できるプロセスは積極的にツール活用で実現していきましょう。</p><p>イテレーション内で自動化できる作業の対象としては以下が挙げられます。</p><ul><li>ビルドやテスト、デプロイ</li><li>データ入力</li><li>コードレビュー</li><li>プロジェクト管理 など</li></ul><h2 id="_8-イテレーションを成功に導く開発ツールの選び方">8. イテレーションを成功に導く開発ツールの選び方</h2><p><img alt="イテレーションを成功に導く開発ツールの選び方" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816793/r6jtzal40qzsbfijvnkd.jpg" /></p><p>開発を支援するツールはさまざまな種類がありますが、イテレーション内での作業を自動化し、開発の迅速化や品質の向上を実現するなら、CI/CDや開発情報の可視化・共有、セキュリティ強化などを実現できるツールを選ぶと良いでしょう。</p><p>ただし、一度にたくさんのツールを導入してしまうとチーム内での混乱や不適切な管理を招く恐れがあるため、多機能のオールインワンプラットフォームを検討するのもおすすめです。</p><p>開発ツールには無料トライアルを設けているサービスも多いため、まずは小さく試験的に導入してみましょう。</p><h2 id="_9-gitlabならアジャイル開発の実践からdevsecopsまで一元化できる">9. GitLabならアジャイル開発の実践からDevSecOpsまで一元化できる</h2><p><img alt="GitLabならアジャイル開発の実践からDevSecOpsまで一元化できる" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1757988295/ldz4szcwrxwnpfl0bfnk.png" /></p><p>イテレーションを効率よく回し、プロジェクトを成功に導くなら「<a href="https://about.gitlab.com/ja-jp/" rel="">GitLab</a>」の活用がおすすめです。GitLabなら、アジャイル開発の実践からDevSecOpsまで一元化することが可能です。</p><h3 id="_9-1-gitlabとは">9-1. GitLabとは</h3><p>GitLabは、ソフトウェア開発ライフサイクルに必要な機能を単一のプラットフォームで活用できるDevSecOpsプラットフォームです。</p><p>多機能を搭載したGitLabを活用することで、複数のツールを使い分けて管理する必要がなくなり、開発者の負担を軽減できます。</p><p>提供形態にはSaaS版とSelf-Managed版の2種類があり、無料トライアルやドキュメント、サポート体制もご用意しているので、お気軽にお試しいただけます。</p><h3 id="_9-2-gitlabがアジャイル開発を支援する理由">9-2. GitLabがアジャイル開発を支援する理由</h3><p>GitLabはアジャイル開発と親和性が高く、開発を支援する「ソースコード管理」「プロジェクト管理」「CI/CD」「セキュリティ」など多様な機能を搭載しています。</p><p>例えば、GitLabの「イテレーション機能」を使用することで、チームはイテレーションのスケジュール全体を可視化でき、進捗を確認しながら開発を進められます。</p><p>その他、GitLab CI/CDによってビルド、テスト、デプロイといった一連の工程を自動化できるため、アジャイル開発の価値を最大化しながら品質の高いプロダクト開発を実現することが可能です。</p><h3 id="_9-3-gitlab活用事例">9-3. GitLab活用事例</h3><p>GitLab活用事例として、Airwallex社を紹介します。Airwallex社は、グローバルな金融プラットフォームを提供する企業で、2022年に大手航空会社を自社の顧客として迎え入れるチャンスがありました。しかし、その案件では顧客のニーズに応えるために、競合他社よりも優れたソフトウェア機能を迅速に提供する必要がありました。</p><p>そこでDevSecOpsプラットフォームのGitLabを導入し、厳しい期限がある中で迅速な反復を繰り返すことで、多数の機能開発を成功に導いたのです。Airwallex社では、GitLab活用により、チーム間のコラボレーションやコスト効率の向上も実現しています。</p><p>本事例の詳細は以下の記事をご覧下さい。</p><p><a href="https://about.gitlab.com/ja-jp/customers/airwallex/" rel="">グローバルなフィンテック企業Airwallex社が、GitLabによって顧客のニーズにより迅速に対応</a></p><h2 id="_10-イテレーションに関するqa">10. イテレーションに関するQ＆A</h2><p>最後にイテレーションに関するよくある質問と回答を紹介します。</p><h3 id="_10-1-イテレーションとウォーターフォール開発の違いは">10-1. イテレーションとウォーターフォール開発の違いは？</h3><p>イテレーションは、アジャイル開発で使われる短期間の開発単位を指します。イテレーションを繰り返しながら開発を進めることで、仕様変更にも対応しやすいメリットがあります。</p><p>一方、ウォーターフォール開発は要件定義から開発、テストといった一連の工程において、事前に細かな計画を立てた上で開発を進める手法です。アジャイル開発とは異なり、要件が明確でかつ、納期厳守を求められるような案件に向いています。</p><h3 id="_10-2-イテレーションがうまく回らない原因は">10-2. イテレーションがうまく回らない原因は？</h3><p>アジャイル開発においてイテレーションがうまく回らないケースも発生します。考えられる原因は以下の通りです。</p><ul><li>イテレーションの目的が「タスクの完了」になっており、「動くプロダクト」が完成しない</li><li>イテレーションの期間設定が不適切で開発ペースが乱れる</li><li>メンバー同士のコミュニケーション不足による認識のズレが生じる</li><li>自動化できる作業が手作業のままになっている など</li></ul><p>イテレーションが失敗してしまう時には、原因を特定し適切な対策を検討することが大切です。例えば、開発サイクルの中で手作業が多い場合、無駄なコストが発生するためうまくイテレーションが回らないでしょう。その場合は、「<a href="https://about.gitlab.com/ja-jp/" rel="">GitLab</a>」のような開発ツールを積極的に活用すると良いでしょう。</p><h3 id="_10-3-イテレーション中に仕様変更があった場合はどうすればいい">10-3. イテレーション中に仕様変更があった場合はどうすればいい？</h3><p>イテレーション中に顧客から新たな要望を受けるなど仕様変更が生じた場合は、基本的に対応は次のイテレーションで行います。現在のイテレーション内でその都度対応していると、開発ペースが乱れてしまうからです。</p><p>なお、セキュリティ上の重大なリスクがあるなど緊急性が高い問題が発生した場合は、作業の優先順位を調整しチーム全体で擦り合わせを行った上で、現在のイテレーション内での対応を検討します。</p><h2 id="まとめ-イテレーションをうまく回してアジャイル開発を成功させよう">まとめ イテレーションをうまく回してアジャイル開発を成功させよう</h2><p>イテレーションはアジャイル開発における中心的な位置付けとして使われる概念であるため、イテレーションの進め方やポイントについては事前に理解しておくことが大切です。</p><p>イテレーションをうまく回すためには、関係者同士のコミュケーションの活性化や開発ツールの導入などを実施しましょう。開発ツールの導入においては、複数のツールを導入してしまうと管理の手間やコストが発生するため、多機能を搭載したプラットフォームの活用がおすすめです。イテレーションをうまく回すことで、開発のリズムを作り、効率的かつ安定的な開発を行うことが可能です。</p><p><a href="https://about.gitlab.com/ja-jp/" rel="">GitLab</a>は、ソフトウェア開発ライフサイクルに必要な機能を搭載しており、貴社のアジャイル開発やDevSecOpsの実現を支援します。アジャイル開発を成功に導きたいと考えているなら、ぜひお気軽にお問い合わせ下さい。</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/sales/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_apac_brand_x_x_ja_gitlabjapanblogseo_what-is-iteration" rel="">お問い合わせはこちら</a></p></blockquote><hr /><p>監修：米沢 弘樹 <a href="https://gitlab.com/hyonezawa" rel="">@hyonezawa</a><br />
（GitLab合同会社ソリューションアーキテクト本部シニアソリューションアーキテクト）</p>]]></content>
        <author>
            <name>GitLab Team</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/gitlab-team/</uri>
        </author>
        <published>2026-08-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Secrets ManagerがESO、Terraform、APIに対応]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/gitlab-secrets-manager-add-eso-terraform-api-support/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/gitlab-secrets-manager-add-eso-terraform-api-support/"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>CI/CDにはCI/CD用、KubernetesにはKubernetes用、Terraformにはまた別のシークレットストア。こうした分散した状態は、決して珍しくありません。ただ、増え続ける管理対象のツール、そしてアクセス制御の整合性を取り続ける負担。何か問題が起きたときには、ばらばらの監査証跡を突き合わせるところから始めることになります。</p><p>GitLab Secrets Managerが、External Secrets Operator（ESO）とTerraformに対応しました。<a href="https://docs.gitlab.com/ja-jp/ci/secrets/secrets_manager/non_cicd_access/" rel="">CI/CDパイプラインの外側でも、安全にシークレットを取得できる</a>ようになります。OpenBaoを基盤とするGitLab Secrets Managerは、ソフトウェアデリバリーチェーン全体でシークレットの信頼できる唯一の情報源となる存在。1つのシークレットストアを、次のすべての用途で共有できます。</p><ul><li>ESOを経由したKubernetesワークロード</li><li>TerraformまたはOpenTofuの実行</li><li>OpenBaoまたはVault CLI</li><li>GitLabのCI/CDジョブ（バージョン19.0以降）</li><li><a href="https://docs.gitlab.com/ja-jp/api/secrets_manager/" rel="">Secrets Manager API</a>を利用した外部の自動化処理</li></ul><h3 id="kubernetesexternal-secrets-operator">Kubernetes：External Secrets Operator</h3><p>ESOは、Vaultプロバイダーを介してGitLab Secrets Managerからシークレットを同期します。流れはシンプルです。クラスター内のワークロードが有効期間の短いJSON Web Token（JWT）を保持し、ESOがそれを使ってOpenBaoに認証。取得したシークレットは、Kubernetes Secretへ書き込まれます。</p><p><img alt="External Secrets Operator" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785953823/ojlr4rv1r34oflo4fynv.png" /></p><p><a href="https://external-secrets.io/latest/api/secretstore/" rel="">SecretStore</a>は、「どこからシークレットを取得し、どう認証するか」をESOに伝えるためのリソースです。GitLab Secrets ManagerはVault互換のKV v2 APIを公開しているため、設定にはVaultプロバイダーを指定します。namespaceフィールドが対応するのはGitLabの階層（Organization、グループ、プロジェクト）で、このストアから参照できるシークレットの範囲を決めるもの。認証に使うのは、GitLabが発行しKubernetes Secretに格納したJWTです。secretRefから参照します。</p><pre className="language-text" code="apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
  name: gitlab-secrets-manager
  namespace: my-app
spec:
  provider:
    vault:
      server: https://secrets.gitlab.com      # provider.vault.server
      path: secrets/kv                        # provider.vault.path
      version: v2
      namespace: org_5/group_42/project_99    # provider.vault.namespace
      auth:
        jwt:
          path: api_jwt/cel                   # provider.vault.auth.jwt.path
          role: all_api                       # provider.vault.auth.jwt.role
          secretRef:
            name: gitlab-access-token         # Kubernetes secret holding the minted token
            key: token
" language="text"><code>apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
  name: gitlab-secrets-manager
  namespace: my-app
spec:
  provider:
    vault:
      server: https://secrets.gitlab.com      # provider.vault.server
      path: secrets/kv                        # provider.vault.path
      version: v2
      namespace: org_5/group_42/project_99    # provider.vault.namespace
      auth:
        jwt:
          path: api_jwt/cel                   # provider.vault.auth.jwt.path
          role: all_api                       # provider.vault.auth.jwt.role
          secretRef:
            name: gitlab-access-token         # Kubernetes secret holding the minted token
            key: token
</code></pre><p><a href="https://external-secrets.io/latest/api/externalsecret/" rel="">ExternalSecret</a>で定義するのは、「どのシークレットを取得し、どこに配置するか」です。先ほど作成したSecretStoreを参照し、リモートのシークレットをKubernetes Secretへマッピングします。あとはワークロードから、マウントまたは環境変数として参照するだけ。</p><p>ターゲットとなるシークレット（synced-secret）を作成し、管理するのはESOです。refreshIntervalで指定した間隔ごとにGitLabから再取得するため、値をローテーションしても再デプロイは不要。data配下の各エントリは、リモートのシークレット1つをターゲット側のキー1つに対応付けます。remoteRef.keyがGitLab Secrets Manager上のパス、propertyがそのシークレット内のフィールド、secretKeyがKubernetes側での格納先キーです。</p><pre className="language-text" code="apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: my-secret
  namespace: my-app
spec:
  refreshInterval: 45m
  secretStoreRef:
    name: gitlab-secrets-manager
    kind: SecretStore
  target:
    name: synced-secret
  data:
    - secretKey: value
      remoteRef:
        key: explicit/&lt;secret_name&gt;           # &lt;secrets_path&gt;/&lt;secret_name&gt;
        property: value
" language="text"><code>apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
  name: my-secret
  namespace: my-app
spec:
  refreshInterval: 45m
  secretStoreRef:
    name: gitlab-secrets-manager
    kind: SecretStore
  target:
    name: synced-secret
  data:
    - secretKey: value
      remoteRef:
        key: explicit/&lt;secret_name&gt;           # &lt;secrets_path&gt;/&lt;secret_name&gt;
        property: value
</code></pre><p>GitLab Secrets ManagerとESOを実際に組み合わせる手順は、<a href="https://gitlab.com/guided-explorations/secrets-management/gitlab-secrets-manager-with-eso-and-k3s" rel="">チュートリアル</a>で紹介しています。</p><h3 id="infrastructure-as-codeterraformとopentofu">Infrastructure as Code：TerraformとOpenTofu</h3><p>Terraformのstateや<code>.tfvars</code>ファイルは、認証情報の流出経路になりやすい場所です。シークレットがそのままディスクに書き出されたり、気づかないうちにバージョン管理へコミットされたりするためです。回避策となるのが、GitLabのシークレットをデータソースとして読み込む方法。planやapplyの実行時に発行したJWTで認証します。Terraformから直接参照する形にすれば、<code>.tfvars</code>ファイルにもCI/CD変数にも認証情報を残さずに済みます。</p><pre className="language-shell shiki shiki-themes github-light" code="data &quot;external&quot; &quot;gitlab_secrets_token&quot; {
  program = [&quot;bash&quot;, &quot;${path.module}/scripts/mint_token.sh&quot;]

  query = {
    project_id = var.gitlab_project_id
  }
}

provider &quot;vault&quot; {
  address   = data.external.gitlab_secrets_token.result.server
  namespace = data.external.gitlab_secrets_token.result.namespace

  auth_login_jwt {
    mount = data.external.gitlab_secrets_token.result.auth_path
    role  = data.external.gitlab_secrets_token.result.role
    jwt   = data.external.gitlab_secrets_token.result.jwt
  }
}

data &quot;vault_kv_secret_v2&quot; &quot;my_secret&quot; {
  mount = data.external.gitlab_secrets_token.result.mount
  name  = &quot;${data.external.gitlab_secrets_token.result.secrets_path}/&lt;secret_name&gt;&quot;
}

output &quot;secret_value&quot; {
  value     = data.vault_kv_secret_v2.my_secret.data[&quot;value&quot;]
  sensitive = true
}
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">data</span><span class="sYBdl"> &quot;external&quot;</span><span class="sYBdl"> &quot;gitlab_secrets_token&quot;</span><span class="sYBdl"> {
</span></span><span class="line" line="2"><span class="s7eDp">  program</span><span class="sYBdl"> =</span><span class="sgsFI"> [</span><span class="sYBdl">&quot;bash&quot;</span><span class="sgsFI">, </span><span class="sYBdl">&quot;${</span><span class="sgsFI">path</span><span class="sYBdl">.</span><span class="sgsFI">module</span><span class="sYBdl">}/scripts/mint_token.sh&quot;]
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="s7eDp">  query</span><span class="sYBdl"> =</span><span class="sYBdl"> {
</span></span><span class="line" line="5"><span class="s7eDp">    project_id</span><span class="sYBdl"> =</span><span class="sYBdl"> var.gitlab_project_id
</span></span><span class="line" line="6"><span class="sgsFI">  }
</span></span><span class="line" line="7"><span class="sgsFI">}
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span class="s7eDp">provider</span><span class="sYBdl"> &quot;vault&quot;</span><span class="sYBdl"> {
</span></span><span class="line" line="10"><span class="s7eDp">  address</span><span class="sYBdl">   =</span><span class="sYBdl"> data.external.gitlab_secrets_token.result.server
</span></span><span class="line" line="11"><span class="s7eDp">  namespace</span><span class="sYBdl"> =</span><span class="sYBdl"> data.external.gitlab_secrets_token.result.namespace
</span></span><span class="line" line="12"><span emptyLinePlaceholder>
</span></span><span class="line" line="13"><span class="s7eDp">  auth_login_jwt</span><span class="sYBdl"> {
</span></span><span class="line" line="14"><span class="s7eDp">    mount</span><span class="sYBdl"> =</span><span class="sYBdl"> data.external.gitlab_secrets_token.result.auth_path
</span></span><span class="line" line="15"><span class="s7eDp">    role</span><span class="sYBdl">  =</span><span class="sYBdl"> data.external.gitlab_secrets_token.result.role
</span></span><span class="line" line="16"><span class="s7eDp">    jwt</span><span class="sYBdl">   =</span><span class="sYBdl"> data.external.gitlab_secrets_token.result.jwt
</span></span><span class="line" line="17"><span class="sgsFI">  }
</span></span><span class="line" line="18"><span class="sgsFI">}
</span></span><span class="line" line="19"><span emptyLinePlaceholder>
</span></span><span class="line" line="20"><span class="s7eDp">data</span><span class="sYBdl"> &quot;vault_kv_secret_v2&quot;</span><span class="sYBdl"> &quot;my_secret&quot;</span><span class="sYBdl"> {
</span></span><span class="line" line="21"><span class="s7eDp">  mount</span><span class="sYBdl"> =</span><span class="sYBdl"> data.external.gitlab_secrets_token.result.mount
</span></span><span class="line" line="22"><span class="s7eDp">  name</span><span class="sYBdl">  =</span><span class="sYBdl"> &quot;${</span><span class="sgsFI">data</span><span class="sYBdl">.</span><span class="sgsFI">external</span><span class="sYBdl">.</span><span class="sgsFI">gitlab_secrets_token</span><span class="sYBdl">.</span><span class="sgsFI">result</span><span class="sYBdl">.</span><span class="sgsFI">secrets_path</span><span class="sYBdl">}/&lt;secret_name&gt;&quot;
</span></span><span class="line" line="23"><span class="sgsFI">}
</span></span><span class="line" line="24"><span emptyLinePlaceholder>
</span></span><span class="line" line="25"><span class="s7eDp">output</span><span class="sYBdl"> &quot;secret_value&quot;</span><span class="sYBdl"> {
</span></span><span class="line" line="26"><span class="s7eDp">  value</span><span class="sYBdl">     =</span><span class="sYBdl"> data.vault_kv_secret_v2.my_secret.data[&quot;value&quot;]
</span></span><span class="line" line="27"><span class="s7eDp">  sensitive</span><span class="sYBdl"> =</span><span class="sYu0t"> true
</span></span><span class="line" line="28"><span class="sgsFI">}
</span></span></code></pre><p><a href="https://docs.gitlab.com/ja-jp/ci/secrets/secrets_manager/non_cicd_access/#use-with-terraform" rel="">Terraformでシークレットを読み取る方法</a>は、ドキュメントで詳しく解説しています。</p><h3 id="コマンドラインopenbaoまたはvault-cli">コマンドライン：OpenBaoまたはVault CLI</h3><p>すべてのワークフローがAPIを直接呼び出すわけではありません。Vault互換のツールを前提にスクリプトを組んでいるチームなら、OpenBaoまたはVault CLIがそのまま使えます。手順はVaultから読み取るときと同じ。GitLab Secrets Managerのシークレットをそのまま取得できます。</p><pre className="language-shell shiki shiki-themes github-light" code="export VAULT_ADDR=&quot;&lt;server&gt;&quot;
export VAULT_NAMESPACE=&quot;&lt;namespace&gt;&quot;

# Exchange the minted JWT for an OpenBao token, then export it.
vault write &quot;auth/&lt;auth_jwt_path&gt;/login&quot; role=&lt;role&gt; jwt=&lt;token&gt;
export VAULT_TOKEN=&quot;&lt;client_token&gt;&quot;

# Read the secret value.
vault kv get -mount=&lt;path&gt; &quot;&lt;secrets_path&gt;/&lt;secret_name&gt;&quot;
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="sD7c4">export</span><span class="sgsFI"> VAULT_ADDR</span><span class="sD7c4">=</span><span class="sYBdl">&quot;&lt;server&gt;&quot;
</span></span><span class="line" line="2"><span class="sD7c4">export</span><span class="sgsFI"> VAULT_NAMESPACE</span><span class="sD7c4">=</span><span class="sYBdl">&quot;&lt;namespace&gt;&quot;
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="sAwPA"># Exchange the minted JWT for an OpenBao token, then export it.
</span></span><span class="line" line="5"><span class="s7eDp">vault</span><span class="sYBdl"> write</span><span class="sYBdl"> &quot;auth/&lt;auth_jwt_path&gt;/login&quot;</span><span class="sYBdl"> role=</span><span class="sD7c4">&lt;</span><span class="sYBdl">rol</span><span class="sgsFI">e</span><span class="sD7c4">&gt;</span><span class="sYBdl"> jwt=</span><span class="sD7c4">&lt;</span><span class="sYBdl">toke</span><span class="sgsFI">n</span><span class="sD7c4">&gt;
</span></span><span class="line" line="6"><span class="sD7c4">export</span><span class="sgsFI"> VAULT_TOKEN</span><span class="sD7c4">=</span><span class="sYBdl">&quot;&lt;client_token&gt;&quot;
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span class="sAwPA"># Read the secret value.
</span></span><span class="line" line="9"><span class="s7eDp">vault</span><span class="sYBdl"> kv</span><span class="sYBdl"> get</span><span class="sYu0t"> -mount=</span><span class="sD7c4">&lt;</span><span class="sYu0t">path</span><span class="sD7c4">&gt;</span><span class="sYBdl"> &quot;&lt;secrets_path&gt;/&lt;secret_name&gt;&quot;
</span></span></code></pre><h3 id="secrets-manager-apiを使うケース">Secrets Manager APIを使うケース</h3><p>GitLab CI/CD、Kubernetes、Terraformのどれにも当てはまらない自動化には、<a href="https://docs.gitlab.com/ja-jp/api/secrets_manager/" rel="">Secrets Manager API</a>という選択肢があります。認証情報をハードコーディングしたり、変数ファイルを別途用意したりしなくても、任意の外部システムからSecrets Managerのシークレットを取得できます。</p><pre className="language-shell shiki shiki-themes github-light" code="# Request JWT token using Service Account
RESPONSE=$(curl --silent --request POST \
  --header &quot;PRIVATE-TOKEN: &lt;your_access_token&gt;&quot; \
  --url &quot;https://gitlab.example.com/api/v4/projects/&lt;project_id&gt;/secrets_manager/access_token&quot;)

SERVER=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.server)
NAMESPACE=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.namespace)
MOUNT=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.path)
SECRETS_PATH=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.secrets_path)
AUTH_PATH=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.auth.jwt.path)
ROLE=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.auth.jwt.role)
JWT=$(echo &quot;$RESPONSE&quot; | jq --raw-output .provider.vault.auth.jwt.token)

# Exchange the JWT for a short-lived OpenBao token.
VAULT_TOKEN=$(curl --silent --request POST \
  --header &quot;X-Vault-Namespace: $NAMESPACE&quot; \
  --data &quot;{\&quot;role\&quot;:\&quot;$ROLE\&quot;,\&quot;jwt\&quot;:\&quot;$JWT\&quot;}&quot; \
  &quot;$SERVER/v1/auth/$AUTH_PATH/login&quot; | jq --raw-output .auth.client_token)

# Read the secret value.
curl --silent \
  --header &quot;X-Vault-Token: $VAULT_TOKEN&quot; \
  --header &quot;X-Vault-Namespace: $NAMESPACE&quot; \
  &quot;$SERVER/v1/$MOUNT/data/$SECRETS_PATH/&lt;secret_name&gt;&quot;
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="sAwPA"># Request JWT token using Service Account
</span></span><span class="line" line="2"><span class="sgsFI">RESPONSE</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="s7eDp">curl</span><span class="sYu0t"> --silent</span><span class="sYu0t"> --request</span><span class="sYBdl"> POST</span><span class="sYu0t"> \
</span></span><span class="line" line="3"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;PRIVATE-TOKEN: &lt;your_access_token&gt;&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="4"><span class="sYu0t">  --url</span><span class="sYBdl"> &quot;https://gitlab.example.com/api/v4/projects/&lt;project_id&gt;/secrets_manager/access_token&quot;</span><span class="sgsFI">)
</span></span><span class="line" line="5"><span emptyLinePlaceholder>
</span></span><span class="line" line="6"><span class="sgsFI">SERVER</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.server</span><span class="sgsFI">)
</span></span><span class="line" line="7"><span class="sgsFI">NAMESPACE</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.namespace</span><span class="sgsFI">)
</span></span><span class="line" line="8"><span class="sgsFI">MOUNT</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.path</span><span class="sgsFI">)
</span></span><span class="line" line="9"><span class="sgsFI">SECRETS_PATH</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.secrets_path</span><span class="sgsFI">)
</span></span><span class="line" line="10"><span class="sgsFI">AUTH_PATH</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.auth.jwt.path</span><span class="sgsFI">)
</span></span><span class="line" line="11"><span class="sgsFI">ROLE</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.auth.jwt.role</span><span class="sgsFI">)
</span></span><span class="line" line="12"><span class="sgsFI">JWT</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="sYu0t">echo</span><span class="sYBdl"> &quot;</span><span class="sgsFI">$RESPONSE</span><span class="sYBdl">&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .provider.vault.auth.jwt.token</span><span class="sgsFI">)
</span></span><span class="line" line="13"><span emptyLinePlaceholder>
</span></span><span class="line" line="14"><span class="sAwPA"># Exchange the JWT for a short-lived OpenBao token.
</span></span><span class="line" line="15"><span class="sgsFI">VAULT_TOKEN</span><span class="sD7c4">=</span><span class="sgsFI">$(</span><span class="s7eDp">curl</span><span class="sYu0t"> --silent</span><span class="sYu0t"> --request</span><span class="sYBdl"> POST</span><span class="sYu0t"> \
</span></span><span class="line" line="16"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;X-Vault-Namespace: </span><span class="sgsFI">$NAMESPACE</span><span class="sYBdl">&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="17"><span class="sYu0t">  --data</span><span class="sYBdl"> &quot;{</span><span class="sYu0t">\&quot;</span><span class="sYBdl">role</span><span class="sYu0t">\&quot;</span><span class="sYBdl">:</span><span class="sYu0t">\&quot;</span><span class="sgsFI">$ROLE</span><span class="sYu0t">\&quot;</span><span class="sYBdl">,</span><span class="sYu0t">\&quot;</span><span class="sYBdl">jwt</span><span class="sYu0t">\&quot;</span><span class="sYBdl">:</span><span class="sYu0t">\&quot;</span><span class="sgsFI">$JWT</span><span class="sYu0t">\&quot;</span><span class="sYBdl">}&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="18"><span class="sYBdl">  &quot;</span><span class="sgsFI">$SERVER</span><span class="sYBdl">/v1/auth/</span><span class="sgsFI">$AUTH_PATH</span><span class="sYBdl">/login&quot;</span><span class="sD7c4"> |</span><span class="s7eDp"> jq</span><span class="sYu0t"> --raw-output</span><span class="sYBdl"> .auth.client_token</span><span class="sgsFI">)
</span></span><span class="line" line="19"><span emptyLinePlaceholder>
</span></span><span class="line" line="20"><span class="sAwPA"># Read the secret value.
</span></span><span class="line" line="21"><span class="s7eDp">curl</span><span class="sYu0t"> --silent</span><span class="sYu0t"> \
</span></span><span class="line" line="22"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;X-Vault-Token: </span><span class="sgsFI">$VAULT_TOKEN</span><span class="sYBdl">&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="23"><span class="sYu0t">  --header</span><span class="sYBdl"> &quot;X-Vault-Namespace: </span><span class="sgsFI">$NAMESPACE</span><span class="sYBdl">&quot;</span><span class="sYu0t"> \
</span></span><span class="line" line="24"><span class="sYBdl">  &quot;</span><span class="sgsFI">$SERVER</span><span class="sYBdl">/v1/</span><span class="sgsFI">$MOUNT</span><span class="sYBdl">/data/</span><span class="sgsFI">$SECRETS_PATH</span><span class="sYBdl">/&lt;secret_name&gt;&quot;
</span></span></code></pre><h3 id="始めるには">始めるには</h3><p><a href="https://about.gitlab.com/ja-jp/blog/secrets-manager-in-public-beta/" rel="">GitLab Secrets Managerは、PremiumおよびUltimateのお客様向けにパブリックベータとして提供中</a>です。ESO、Terraform、APIによるシークレットへのアクセスに対応しているのは、現時点でGitLab.comとGitLab Self-Managed。GitLab Dedicatedへの対応も近日中を予定しています。</p><p>ベータ期間中は無料でご利用いただけます。一般提供の開始後は、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/" rel="">GitLabクレジット</a>による課金対象の有料機能となる予定。課金が始まる前にはオプトインが必要で、事前にご案内します。</p><p>まずは<a href="https://docs.gitlab.com/ja-jp/ci/secrets/secrets_manager/non_cicd_access/" rel="">ドキュメント</a>をご覧ください。足りない点やご要望があれば、<a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/598100" rel="">こちらのイシュー</a>へお寄せください。一般提供に向けて、フィードバックを集めています。</p><style>html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}</style>]]></content>
        <author>
            <name>Erick Bajao</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/erick-bajao/</uri>
        </author>
        <author>
            <name>Joe Randazzo</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/joe-randazzo/</uri>
        </author>
        <published>2026-08-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Self-Hostedで実現するコンフィデンシャルAI]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/confidential-ai-for-gitlab-self-hosted/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/confidential-ai-for-gitlab-self-hosted/"/>
        <updated>2026-08-06T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>開発者はAIコーディングエージェントを使いたがっています。しかしソースコードは規制対象の知的財産であり、外部のAIサービスには送れません。コンプライアンス部門からも、書面でそう伝えられています。よくある逃げ道は、自前のGPUクラスターを立てて自社でモデルを動かすことです。しかしそこには、品薄のハードウェアを買い、運用チームを抱え、それでもフロンティアモデルから数か月遅れ続けるという代償が伴います。結局何も手を打てないまま時間が過ぎ、1年前にAIを導入したチームとの差だけが開いていきます。</p><p>GitLab Duo Self-Hostedのモデルプロバイダーとして、<a href="https://www.privatemode.ai/" rel="">Privatemode AI</a>を利用できるようになりました。Privatemodeは最先端のモデルをコンフィデンシャルコンピューティング対応のハードウェア上で動かします。プロンプトもソースコードも生成結果も、推論の最中を含めてエンドツーエンドで暗号化されたままです。設定は、GitLab DuoのAIゲートウェイをPrivatemodeプロキシに向けるだけ。開発者が使えるDuoの機能は、ほかのモデルを使う場合と変わりません。違うのは一点、規制業界の組織にとって最も重要な点です。コードが暗号化された境界の外に出ることはなく、第三者がそれを読むこともできません。</p><h2 id="規制業界のチームだけが手にできない生産性">規制業界のチームだけが手にできない生産性</h2><p>AIによるコーディング支援は、すでに自動補完の域をはるかに超えています。<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>が担うのは、複数のステップにまたがる作業です。マージリクエストのレビュー、ファイルをまたいだリファクタリング、テストの生成と実行、CIジョブとしてのエージェントフローの実行など、その範囲は広がり続けています。これはチームの開発の進め方そのものを変える変化であり、効果は使うほどに積み上がります。実際に導入したチームは、レビューが速くなり、定型作業にかける時間が減っています。</p><p>ただし、これらの機能はどれもプロンプトとソースコードをモデルプロバイダーに送ります。プロプライエタリなコード、規制対象のソフトウェア、機密性の高い知的財産を扱うチームにとっては、それだけで検討の対象から外れてしまいます。</p><h2 id="規制業界の組織がセルフホストを選ぶ理由">規制業界の組織がセルフホストを選ぶ理由</h2><p>こうした組織にとって、ソースコードは事業の中核をなす知的財産です。それをどこで処理するかは、利便性の問題ではなく、契約上・業界上・規制上の問題になります。銀行のトレーディングアルゴリズム、医療機器メーカーのファームウェア、防衛関連企業の制御ソフトウェア。これらを外部のAIサービスに送れば、知的財産の保護、データ処理契約、業界規則を一度に破りかねません。</p><p>しかも、圧力は複数の方向から同時にかかります。NIS2とデジタルオペレーショナルレジリエンス法（DORA）は、重要インフラと金融サービスに対して、運用のレジリエンスとサードパーティリスクの要求水準を引き上げました。GDPRは、コードやログに含まれる個人データの扱いを規定します。ドイツ金融業界におけるBaFinの監督、調達基準としてのBSI C5、医療データの規則など、業界ごとの制度も独自の制約を課します。加えて欧州では、特定の規制の有無にかかわらず、データ主権を最優先の要件と位置づける組織が少なくありません。</p><p>影響が最も大きいのは、金融サービス、ヘルスケア・製薬、防衛、公共部門、重要インフラです。GitLab Self-Hostedは、まさにこうしたコードを信頼された境界の内側にとどめるために存在しています。AIを組み込んだ結果その前提が知らないうちに崩れるようでは、本末転倒です。</p><h2 id="なぜaiはセルフホストと相性が悪いのか">なぜAIはセルフホストと相性が悪いのか</h2><p>AIコーディング支援を導入したいセルフホストのチームには、従来3つの選択肢がありました。ただし、どれも規制業界のユーザーには支払いにくいコストを伴います。</p><table><thead><tr><th></th><th>パブリックAI SaaS</th><th>VPC / プライベートクラウドAI</th><th>自前のLLMスタック</th></tr></thead><tbody><tr><td>ソースコードが境界の外に出るか</td><td>出る</td><td>出る（運用事業者へ）</td><td>出ない</td></tr><tr><td>保証の種類</td><td>契約（利用規約）</td><td>契約（運用事業者＋クラウド）</td><td>自社で担保</td></tr><tr><td>平文を見られるのは誰か</td><td>プロバイダー</td><td>運用事業者とクラウドプロバイダー</td><td>自社だけ</td></tr><tr><td>インフラ運用の負担</td><td>なし</td><td>低い</td><td>高い：GPU、モデル運用、更新</td></tr><tr><td>フロンティアモデルへの追随</td><td>できる</td><td>おおむねできる</td><td>ほぼ無理。遅れ続ける</td></tr></tbody></table><br /><p>表のとおり、パブリックAI SaaSとVPCはいずれもコードを外部に露出させ、契約上の保証に頼ることになります。自前でスタックを運用すればコードは手元に残りますが、GPUとモデル運用の負担が重くのしかかります。</p><p>もう少し率直に書きます。パブリックSaaSは、コードが社外に出る時点で検討対象外です。VPCで隔離したサービスやプライベートクラウドは露出を減らせますが、平文が運用事業者と基盤クラウドに渡ることは変わりません。契約は約束であって、暗号技術による保証ではないのです。自前でモデルを運用すればコードは守れますが、導入にも人材にもコストがかかり、構造的に最良のモデルから遅れていきます。こうして多くの規制業界の組織が、AIの導入を限定的にとどめるか、まったく手をつけないという結論に至ります。</p><p>ここで問われるのは、次の点です。ソースコードを境界の外に出さず、自社でLLMスタックも抱えずに、最新のAIコーディングエージェントを開発者に届けるにはどうすればいいのか。答えるには、契約では出せない種類の保証、つまりハードウェアが強制する保証が必要になります。</p><h2 id="コンフィデンシャルコンピューティングアーキテクチャによる答え">コンフィデンシャルコンピューティング：アーキテクチャによる答え</h2><p>コンフィデンシャルコンピューティングは、ハードウェアベースの信頼実行環境（TEE）を使い、処理中のデータを_メモリ上で暗号化したまま_扱う技術です。TEEはCPUやGPU上に設けられた隔離領域で、OSもハイパーバイザーもマシンの運用者も、その中を読み取れません。ここで使われるのは、CPU側のAMD SEVまたはIntel TDXと、GPU側のNVIDIA Confidential Computingの組み合わせです。データは転送中も保存時もAES-256で暗号化され、復号されるのはTEEの_内側だけ_です。</p><p>これを「約束」から「保証」に変えるのが<strong>リモートアテステーション</strong>です。クライアントはデータを送る前に、TEEに対して自分が何者かを証明するよう求めます。ハードウェアは、エンクレーブの中で動いているコードが何であるかを示す、署名付きの暗号学的な証跡を返します。クライアントはそれを既知の正しい値と照合し、確認できてはじめて暗号化チャネルを張り、リクエストを送ります。まず検証、そのあとに送信、という順番です。</p><p><img alt="データフロー図" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1786033561/tjh50p5pliyu1oyftdtn.png" /></p><p>この図は、プロンプトがクライアント側で暗号化され、暗号文のまま送られ、サービス運用事業者にもクラウドプロバイダーにも読めないハードウェアTEEの中でだけ復号される流れを示しています。</p><p>ここから得られるセキュリティ特性が、この仕組みの核心です。AIサービスの運用事業者も、基盤となるクラウドプロバイダーも、プロンプトも生成結果もコンテキストも見られません。「見ないと約束しているから」ではなく、「ハードウェアが見せないから」です。</p><h2 id="privatemode-ai">Privatemode AI</h2><p><a href="https://docs.privatemode.ai/" rel="">Privatemode AI</a>を開発しているのは、コンフィデンシャルコンピューティングソフトウェアを専門とするドイツの企業<a href="https://edgeless.systems/" rel="">Edgeless Systems</a>です。<a href="https://images.nvidia.com/aem-dam/Solutions/Data-Center/confidential-computing/hpc-solution-brief-edgeless-systems-3427281.pdf?ncid=no-ncid" rel="">NVIDIAは</a>Privatemodeを「プロンプトを常に暗号化したまま扱う初の生成AIフレームワーク」と紹介しています。</p><p>開発者がこの仕組みを意識する場面はありません。PrivatemodeはOpenAI互換のAPIを提供し、アテステーションと暗号化はクライアント側のプロキシが裏側で処理します。標準の<code>/v1</code> APIに対応したツールやSDKは、そのまま動きます。コーディング向けの現行フラッグシップは256Kコンテキストに対応したKimi K2.6で、Kimi K3やGLMなども近く追加される予定です。</p><p>これは実験段階の話ではありません。Privatemodeは、ここまで述べてきたような制約を抱える組織で、すでに本番運用されています。Capgeminiは機密性の高いコーディングを含む規制業界の案件で使い、ドイツ連邦雇用庁は公共部門で運用しています。銀行、保険会社、防衛関連組織も、ソースコードやデータを信頼された境界の外に出せない領域で採用しています。暗号方式はポスト量子安全で、「今のうちに集めて、あとで復号する（harvest now, decrypt later）」型の攻撃にも耐えます。将来のハードウェアで解読するつもりで今日の暗号文を盗んでも、攻撃者の手には何も残りません。</p><h2 id="統合の仕組み">統合の仕組み</h2><p>GitLab Duo Self-Hostedを使えば、GitLabが管理するゲートウェイではなく、自社が管理するモデルからDuoのAI機能を提供できます。Privatemodeは、その「自社が管理するモデル」として組み込まれます。</p><p>流れはシンプルです。GitLab Duoはセルフホストの<strong>AIゲートウェイ</strong>と通信し、AIゲートウェイが推論をOpenAI互換のエンドポイントに転送します。そのエンドポイントの正体が、Privatemodeプロキシです。プロキシは標準の<code>/v1</code> APIを公開し、Privatemodeサービスとのあいだで暗号化とアテステーションを担います。リクエストが届くと、プロキシはそれが自社ネットワークを出る前に暗号化し、アテステーションでリモートTEEを検証し、そのうえで転送します。復号が行われるのは、コンフィデンシャルコンピューティング環境の中だけです。Duo側では、コード提案、チャット、コードレビュー、エージェントフローのいずれも、開発者から見た使い勝手は変わりません。</p><pre className="language-mermaid shiki shiki-themes github-light" code="sequenceDiagram
    autonumber
    actor Dev as 開発者 /&lt;br&gt;Duo Agent Platform
    participant GW as セルフホストのGitLab&lt;br&gt;AIゲートウェイ
    participant Proxy as Privatemode&lt;br&gt;プロキシ
    participant TEE as リモートTEE&lt;br&gt;(CPU + GPU)

    Dev-&gt;&gt;GW: 推論リクエスト（コード提案、&lt;br&gt;チャット、コードレビュー、&lt;br&gt;エージェントフロー）
    GW-&gt;&gt;Proxy: OpenAI互換&lt;br&gt;エンドポイントへ&lt;br&gt;リクエストを転送

    rect rgb(255, 244, 214)
        Note over Proxy,TEE: コードを送る前にアテステーションを実施
        Proxy-&gt;&gt;TEE: アテステーション証跡を要求
        TEE--&gt;&gt;Proxy: エンクレーブのコードに対する署名付き証跡
        Proxy-&gt;&gt;Proxy: 既知の正しい値と証跡を照合
        Proxy-&gt;&gt;TEE: 暗号化チャネルを確立（AES-256、ポスト量子安全）
    end

    Proxy-&gt;&gt;TEE: 暗号化したリクエストを転送
    Note over TEE: 復号と推論はエンクレーブ&lt;br&gt;の中だけで実行される
    TEE--&gt;&gt;Proxy: 暗号化されたレスポンス
    Proxy--&gt;&gt;GW: 暗号化されたレスポンス
    GW--&gt;&gt;Dev: 生成結果（開発者の&lt;br&gt;使い勝手は変わらない）
" language="mermaid" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">sequenceDiagram
</span></span><span class="line" line="2"><span class="sgsFI">    autonumber
</span></span><span class="line" line="3"><span class="sgsFI">    actor Dev as 開発者 /&lt;br&gt;Duo Agent Platform
</span></span><span class="line" line="4"><span class="sgsFI">    participant GW as セルフホストのGitLab&lt;br&gt;AIゲートウェイ
</span></span><span class="line" line="5"><span class="sgsFI">    participant Proxy as Privatemode&lt;br&gt;プロキシ
</span></span><span class="line" line="6"><span class="sgsFI">    participant TEE as リモートTEE&lt;br&gt;(CPU + GPU)
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span class="sgsFI">    Dev-&gt;&gt;GW: 推論リクエスト（コード提案、&lt;br&gt;チャット、コードレビュー、&lt;br&gt;エージェントフロー）
</span></span><span class="line" line="9"><span class="sgsFI">    GW-&gt;&gt;Proxy: OpenAI互換&lt;br&gt;エンドポイントへ&lt;br&gt;リクエストを転送
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sgsFI">    rect rgb(255, 244, 214)
</span></span><span class="line" line="12"><span class="sgsFI">        Note over Proxy,TEE: コードを送る前にアテステーションを実施
</span></span><span class="line" line="13"><span class="sgsFI">        Proxy-&gt;&gt;TEE: アテステーション証跡を要求
</span></span><span class="line" line="14"><span class="sgsFI">        TEE--&gt;&gt;Proxy: エンクレーブのコードに対する署名付き証跡
</span></span><span class="line" line="15"><span class="sgsFI">        Proxy-&gt;&gt;Proxy: 既知の正しい値と証跡を照合
</span></span><span class="line" line="16"><span class="sgsFI">        Proxy-&gt;&gt;TEE: 暗号化チャネルを確立（AES-256、ポスト量子安全）
</span></span><span class="line" line="17"><span class="sgsFI">    end
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sgsFI">    Proxy-&gt;&gt;TEE: 暗号化したリクエストを転送
</span></span><span class="line" line="20"><span class="sgsFI">    Note over TEE: 復号と推論はエンクレーブ&lt;br&gt;の中だけで実行される
</span></span><span class="line" line="21"><span class="sgsFI">    TEE--&gt;&gt;Proxy: 暗号化されたレスポンス
</span></span><span class="line" line="22"><span class="sgsFI">    Proxy--&gt;&gt;GW: 暗号化されたレスポンス
</span></span><span class="line" line="23"><span class="sgsFI">    GW--&gt;&gt;Dev: 生成結果（開発者の&lt;br&gt;使い勝手は変わらない）
</span></span></code></pre><br /><p>シーケンス図が示すのは、GitLab DuoのリクエストがセルフホストのAIゲートウェイからPrivatemodeプロキシに渡り、プロキシがリモートエンクレーブをアテステーションして暗号化チャネルを確立したうえで、信頼実行環境での推論にリクエストを回すまでの流れです。
AIゲートウェイとプロキシは自社で運用します。デプロイ方式は問いません（Linuxパッケージ、Docker、Kubernetesのいずれでも構いません）。手順はバージョンごとにドキュメント化されているので、ここで繰り返すのではなく、<a href="https://www.privatemode.ai/coding-tool/gitlab-duo" rel="">PrivatemodeのGitLab Duo統合ガイド</a>をご覧ください。</p><h2 id="トレードオフ">トレードオフ</h2><p>ただで手に入るアーキテクチャはありません。技術者の読者には、コストも正直にお伝えします。</p><p><strong>ゲートウェイとプロキシは自社で運用します。</strong> これは実際のインフラ作業です。適切なホスト名でAIゲートウェイをデプロイし、アップグレードのたびにイメージのバージョンをGitLabのリリースに合わせ、JWTキーと証明書を設定し、プロキシを到達可能な状態に保つ必要があります。とはいえ、これは通常のインフラ運用の範囲であって、GPUの調達でもモデル運用でもありません。この違いが重要です。コードを守るもう一つの選択肢である自前のLLMスタックは、品薄のGPUを買い、モデルの運用と更新を担うチームを抱え、それでもフロンティアに遅れ続けることを意味します。Privatemodeはホスト型SaaSとしてモデル運用を引き受けるため、手元に残る負担はプロキシとゲートウェイだけです。</p><p><strong>汎用のOpenAI互換モデルは、GitLab Duo Self-Hostedではまだ成熟の途上です。</strong> 現時点ではベータ機能のため、モデル固有の問題へのサポートはまだ保証されていません。強化はロードマップに入っていますが、いますぐ完全にサポートされた構成が必要なら、そのタイムラインを展開計画に織り込んでください。</p><p><strong>アテステーションと暗号化には、多少のオーバーヘッドが伴います。</strong> 追加のラウンドトリップと暗号処理のぶん、リクエストごとに時間がかかります。私たちのテストでは実用上の問題にはなっていませんが、統合ガイドでは応答の遅いセルフホストバックエンド向けにAIゲートウェイのタイムアウトを延ばすことを推奨しています。自社のレイテンシ要件に照らして、一度計測しておくと安心です。</p><p><strong>信頼する対象はなくなりませんが、その範囲は狭まります。</strong> この保証は、ハードウェアTEEとアテステーションチェーンが健全であることを前提にしています。「運用事業者が覗かないと信じる」よりもはるかに小さく、検証しやすい前提であり、アテステーションの証跡は自分の手で確かめられます。それでもゼロではありません。コンフィデンシャルコンピューティングは信頼の範囲をシリコンまで狭めますが、信頼そのものを消し去るわけではないのです。</p><h2 id="実務にとっての意味">実務にとっての意味</h2><ul><li><strong>規制業界の組織にとって：</strong> 既存の知的財産保護・データ保護ポリシーを崩さずに、最新のAIコーディングエージェントを使えるようになります。コードはハードウェアで暗号化された境界の内側にとどまり、GPUの購入もモデル運用体制の構築も必要ありません。</li><li><strong>開発者にとって：</strong> GitLab Duoの使い勝手はこれまでどおり、モデルは同等かそれ以上、新しく覚えるツールもありません。モデルの選択はインスタンス側で管理されるため、GitLab Workflow拡張機能を通じたエディタ内のチャットとコード提案も、同じコンフィデンシャルな構成をそのまま引き継ぎます。</li><li><strong>コンプライアンス・セキュリティチームにとって：</strong> このアーキテクチャは、コンフィデンシャルコンピューティングとリモートアテステーションへ向かうBSI C5:2026の方向性と合致します。NIS2、DORA、GDPRをめぐる議論には、「使用中のデータが暗号化されている」「実行がアテステーションされている」という具体的な技術的根拠を持ち込めます。もちろん、これだけでコンプライアンスが満たされるわけではありません。コンプライアンスは組織的かつ継続的な取り組みだからです。それでも、AI導入をそもそも止めている「自社のコードが境界の外に出てしまう」という反対理由は、これで取り除けます。</li></ul><h2 id="privatemodeを使ってみる">Privatemodeを使ってみる</h2><p>PrivatemodeをGitLab Duoのセルフホストモデルプロバイダーとして使うには、GitLab Self-Managedのバージョン17.9以降（PremiumまたはUltimate）と、GitLab Duo Enterpriseアドオンが必要です。エージェントフローを使う場合は、さらにGitLab Duo Agent Platform（バージョン18.8以降で一般提供）が必要になります。利用時には、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/" rel="">GitLabクレジットのドキュメント</a>に記載されたBYOM（Bring Your Own Model）のルールと係数に従って、GitLabクレジットが消費されます。</p><h2 id="さらに詳しく">さらに詳しく</h2><ul><li><a href="https://docs.privatemode.ai/" rel="">Privatemodeのドキュメント</a></li><li><a href="https://www.privatemode.ai/coding-tool/gitlab-duo" rel="">GitLab Duo統合ガイド</a></li><li><a href="https://docs.privatemode.ai/guides/coding-assistants/" rel="">コーディングアシスタントガイド</a></li><li><a href="https://www.privatemode.ai/case-studies/capgemini-case-study" rel="">Capgeminiの事例</a></li><li><a href="https://images.nvidia.com/aem-dam/Solutions/Data-Center/confidential-computing/hpc-solution-brief-edgeless-systems-3427281.pdf?ncid=no-ncid" rel="">NVIDIAソリューションブリーフ</a></li></ul><style>html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Mathias Ewald</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/mathias-ewald/</uri>
        </author>
        <author>
            <name>Martin Paloncy, Edgeless Systems</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/martin-paloncy-edgeless-systems/</uri>
        </author>
        <published>2026-08-06T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[ミドルウェアとは？役割や種類、メリット、ユースケースを解説]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/what-is-middleware/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/what-is-middleware/"/>
        <updated>2026-08-05T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>システム開発に今まで関わってこなかった方の中には、「ミドルウェアってなぜ必要なの？」「ソフトウェアやOSとどう違うの？」と疑問を感じる方も少なくないでしょう。ミドルウェアは、OSとアプリケーションの間で必要な「共通処理」を仲介する縁の下の力持ちのような存在であり、システムやアプリケーション開発の効率化に欠かせない基盤技術です。</p><p>本記事では、ミドルウェアの定義や役割、主な種類、導入するメリット、具体的なユースケースまでわかりやすく解説します。</p><h2 id="_1-ミドルウェアとは">1. ミドルウェアとは</h2><p><img alt="ミドルウェアとは" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785815303/fxww5mk47eurmpdwiz2b.jpg" /></p><p>ここでは、ミドルウェアについて以下の4点で見ていきます。</p><ul><li>ミドルウェアの定義</li><li>ソフトウェアとの違い</li><li>ミドルウェアの役割</li><li>ミドルウェアの歴史</li></ul><h3 id="_1-1-ミドルウェアの定義">1-1. ミドルウェアの定義</h3><p>ミドルウェアとは、OS（オペレーティングシステム）とアプリケーションの中間に位置し、両者をつなぐ役割を担うソフトウェアです。OSとアプリケーションの間で処理を仲介し、通信やデータ管理などの共通機能を提供します。</p><p>単体で利用されることは少なく、他のソフトウェアを支える裏方的な存在として機能する点が特徴です。データベースとの接続処理や通信処理など、複数のアプリケーションが共通して必要とする機能をミドルウェアが担うことで、開発の効率化や品質の安定化につながります。</p><p>たとえば、複数のアプリケーションがそれぞれ個別にデータベースへの接続処理を実装すると、コードの重複や保守性の低下につながりかねません。こうした共通処理をミドルウェアに集約することで、開発者はアプリケーション固有のロジックに専念でき、開発全体の生産性向上にもつながります。</p><h3 id="_1-2-ソフトウェアとの違い">1-2. ソフトウェアとの違い</h3><p>ミドルウェアとソフトウェアの違いがよくわからないという方も多いでしょう。</p><p>「ソフトウェア」は、OSやアプリケーション、ミドルウェアなどを含む、コンピュータ上で動作するプログラム全般を指す広い概念です。一方、ミドルウェアはそのソフトウェアの一種であり、OSとアプリケーションの間で連携や通信を担う役割に特化している点が異なります。</p><p>つまり、ソフトウェアという大きな枠組みの中に、OS・アプリケーション・ミドルウェアがそれぞれ異なる役割を持って存在していると捉えると理解しやすいでしょう。ミドルウェアは、OSが提供する基本機能とアプリケーションが求める機能との橋渡し役として位置付けられます。</p><p>具体的には、OSはハードウェアの制御やファイル管理といった基盤的な機能を提供し、アプリケーションは文書作成やWeb閲覧など、ユーザーが目的に応じて利用する個別の機能を提供します。この両者の間に立ち、通信やデータ連携などの共通処理を担うのがミドルウェアの役割であり、開発現場では「OSとアプリケーションの橋渡し役」として説明されることが多いです。</p><h3 id="_1-3-ミドルウェアの役割">1-3. ミドルウェアの役割</h3><p>ミドルウェアが果たす主な役割について、もう少し詳しく見ていきましょう。</p><p>ミドルウェアの役割の1つ目は、アプリケーション開発で共通して必要になる機能をまとめて提供することです。データベースへの接続やユーザー認証、通信処理など、多くのアプリケーションで繰り返し必要となる機能をミドルウェアが担うことで、開発者は各アプリケーション固有の機能開発に集中できます。</p><p>2つ目の役割は、OSやハードウェアの違いを吸収し、開発負担を軽減することです。異なるOSやハードウェア環境でも同じように動作するようミドルウェアが差異を吸収するため、開発者は環境ごとの個別対応に追われることなく開発を進められます。近年はクラウド環境や複数のOSを併用するケースも増えており、こうした差異を意識せずに開発できる点は大きな利点といえるでしょう。</p><p>3つ目は、データ連携や通信などの複雑な処理を仲介する役割です。システム間やアプリケーション間でのデータのやり取りを安定的に行えるようにすることで、大規模で複雑なシステムの構築や運用を支えています。特に、複数のシステムが連携し合う大規模なエンタープライズシステムにおいては、ミドルウェアが処理の一貫性や整合性を保つ要として機能します。</p><h3 id="_1-4-ミドルウェアの歴史">1-4. ミドルウェアの歴史</h3><p>ミドルウェアという概念は、1960年代後半に登場したとされています。当初は大型コンピュータによる集中型システムが主流でしたが、その後クライアント・サーバー型システムや分散システムへの移行が進む中で、異なるOSやハードウェアを連携させる必要性が高まり、ミドルウェアの重要性が増していきました。</p><p>1990年代以降は、企業システムの分散化やインターネットの普及に伴い、トランザクション処理やメッセージングを担うミドルウェア製品が数多く登場しました。異なるベンダーのシステムやプラットフォームをつなぐ標準的な仕組みとして、ミドルウェアは急速に普及していきます。</p><p>現在では、クラウドコンピューティングやモバイルアプリケーション、IoTなど幅広い領域のシステムで利用される基盤技術として定着しています。技術の多様化が進むにつれ、異なる環境や仕組みをつなぐミドルウェアの役割はより重要になっているといえるでしょう。</p><h2 id="_2-ミドルウェアの主な種類">2. ミドルウェアの主な種類</h2><p><img alt="ミドルウェアの主な種類" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785815303/iniicqifgevru1czd4zb.jpg" /></p><p>ミドルウェアにはさまざまな種類があり、それぞれ異なる役割を担っています。ここでは代表的な以下3つの種類をご紹介します。</p><ul><li>Webサーバー</li><li>アプリケーションサーバー</li><li>データベース管理サーバー</li></ul><h3 id="_2-1-webサーバー">2-1. Webサーバー</h3><p>Webサーバーは、ブラウザからのリクエストに応答し、Webページやデータを返す役割を担うミドルウェアです。HTTP・HTTPS通信を処理し、Webサイトの表示を実現する基盤として機能します。</p><p>代表的なWebサーバーソフトウェアとしては、ApacheやNginxなどが広く利用されています。Webページや画像などのコンテンツをブラウザへ配信する役割を担うほか、リバースプロキシや負荷分散などの機能を備えており、大規模なWebサービスの運用に欠かせない存在です。</p><p>特にNginxは、大量の同時アクセスを効率的に処理できる非同期処理の仕組みを備えており、アクセス数の多いWebサービスで広く採用されています。用途やアクセス規模に応じて適切なWebサーバーを選定することが、安定したサービス運用の鍵となります。</p><h3 id="_2-2-アプリケーションサーバー">2-2. アプリケーションサーバー</h3><p>アプリケーションサーバーは、ビジネスロジックなどの動的な処理を実行するミドルウェアです。Webサーバーから受け取ったリクエストを処理し、必要に応じてデータベースと連携する役割を担います。</p><p>会員情報の照合や決済処理などの複雑な業務ロジックを実行するため、動的な処理が多いアプリケーションほど重要な役割を果たします。システムの規模や処理量に応じて、処理性能や拡張性に優れた製品を選ぶことが重要です。</p><p>代表的な製品には、TomcatやJBoss（WildFly）、WebLogic Serverなどがあり、扱う言語や既存システムとの相性に応じて選定されるケースが多く見られます。</p><p>また、複数のアプリケーションサーバーを並列に配置し、ロードバランサーによってリクエストを振り分けることで、大量のアクセスにも安定して対応できます。可用性が求められるシステムでは、障害発生時にもサービスを継続できるよう、冗長構成を採用するのが一般的です。</p><h3 id="_2-3-データベース管理サーバー">2-3. データベース管理サーバー</h3><p>データベース管理サーバーは、データの保存・検索・更新を効率的に管理するミドルウェアです。複数のユーザーやアプリケーションから同時にアクセスされるデータを、整合性を保ちながら管理する役割を担います。</p><p>代表的な製品には、MySQLやPostgreSQLなどがあります。大量のデータを扱うシステムでは、処理性能や可用性、拡張性に優れたミドルウェアを選定することが重要です。</p><p>また、データベース管理サーバーはトランザクション処理によってデータの整合性を維持する機能も備えています。複数の処理が同時に実行された場合でも、データの矛盾や欠損を防ぎながら、安全にデータを更新できる点が大きな特徴です。</p><h2 id="_3-ミドルウェアを利用するメリット">3. ミドルウェアを利用するメリット</h2><p><img alt="ミドルウェアを利用するメリット" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785815303/xnnhxfrlmrxvlm4gf7eu.jpg" /></p><p>ミドルウェアを活用することで、開発現場にはさまざまなメリットが生まれます。ここでは代表的な以下3つのメリットをご紹介します。</p><ul><li>開発コストを削減できる</li><li>OS・ハードウェアによる違いを補完できる</li><li>高度な処理を実現しやすくなる</li></ul><h3 id="_3-1-開発コストを削減できる">3-1. 開発コストを削減できる</h3><p>ミドルウェアを利用する大きなメリットの1つが、開発コストの削減です。共通機能を一から開発する必要がなくなるため、工数を大幅に削減できます。</p><p>また、すでに実績のあるミドルウェアを活用することで、品質や安定性を確保しやすくなる点もメリットです。開発期間の短縮とコスト削減の両方につながるため、多くの開発現場で積極的に採用されています。</p><p>特にスタートアップや小規模チームでは、開発リソースが限られている中で多くの機能を実装する必要があるため、実績のあるミドルウェアを活用することで開発スピードと品質を両立しやすくなります。</p><h3 id="_3-2-osハードウェアによる違いを補完できる">3-2. OS・ハードウェアによる違いを補完できる</h3><p>ミドルウェアは、OSやハードウェアごとの違いを吸収し、システムの移植性を高める役割も果たします。異なる環境であっても、同じアプリケーションを安定して動作させやすくなる点が特徴です。</p><p>環境ごとの個別対応が減ることで、開発や保守にかかる負担を効率化できます。複数の環境で同一のサービスを展開する場合には、特に大きなメリットとなるでしょう。</p><p>たとえば、オンプレミス環境とクラウド環境の両方でサービスを提供する場合でも、ミドルウェアが差異を吸収することで、開発者は環境ごとに個別のコードを用意する必要がなくなります。</p><h3 id="_3-3-高度な処理を実現しやすくなる">3-3. 高度な処理を実現しやすくなる</h3><p>ミドルウェアを活用することで、分散処理や大量データ処理といった高度な機能を利用しやすくなります。専門性の高い機能をミドルウェアに任せることで、複雑なシステム要件にも対応しやすくなります。</p><p>その結果、アプリケーション側の実装をシンプルに保つことができ、開発者は本来注力すべき機能開発に集中しやすくなるでしょう。高度な非同期処理やメッセージングといった機能も、ミドルウェアを介することで比較的容易に組み込めるようになります。</p><p>なお、こうしたメリットがある一方で、導入時にはライセンス費用や保守サポート費用が発生する製品も多く、特定のミドルウェアに依存しすぎるとバージョンアップや乗り換えの際に手間がかかる点には注意が必要です。自社の要件や将来的な拡張性を踏まえたうえで選定することが望ましいでしょう。</p><h2 id="_4-システムアプリケーション開発におけるミドルウェア">4. システム・アプリケーション開発におけるミドルウェア</h2><p><img alt="システム・アプリケーション開発におけるミドルウェア" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785815304/hlw2p7yavubf8lrf9xkd.jpg" /></p><p>ミドルウェアは、システム開発とアプリケーション開発のそれぞれの場面で異なる役割を担っています。ここでは両者に分けて解説します。</p><h3 id="_4-1-システム開発におけるミドルウェア">4-1. システム開発におけるミドルウェア</h3><p>システム開発、特にリリース後の安定運用の場面では、ミドルウェアが下記のような機能を通じて重要な役割を担います。</p><ul><li>バックアップ</li><li>運用効率化</li><li>監視</li><li>予備サーバーへの切り替え</li></ul><h4 id="_4-1-1-バックアップ">4-1-1. バックアップ</h4><p>ミドルウェアは、データを定期的に複製し、消失や破損に備えるバックアップ機能を提供します。障害やシステム障害が発生した際にも迅速な復旧を可能にし、バックアップの自動実行によって運用負担や人的ミスの軽減にもつながります。世代管理を組み合わせることで、任意の時点の状態に復元できる点も実務上のメリットです。</p><h4 id="_4-1-2-運用効率化">4-1-2. 運用効率化</h4><p>定型的な運用作業を自動化することで、日々の作業負担を軽減できる点もミドルウェアの重要な機能です。複数のシステムやサーバーを効率的に管理できるため、人的ミスを減らし、安定したシステム運用につなげられます。運用担当者は定型作業から解放され、より付加価値の高い業務に注力しやすくなります。</p><h4 id="_4-1-3-監視">4-1-3. 監視</h4><p>ミドルウェアは、システムやサーバーの稼働状況を監視する機能も担っています。異常や障害の兆候を早期に検知し通知することで、トラブルの未然防止や迅速な障害対応が可能になります。CPUやメモリの使用率、通信状況といった複数の指標を横断的に監視できる点も強みです。</p><h4 id="_4-1-4-予備サーバーへの切り替え">4-1-4. 予備サーバーへの切り替え</h4><p>障害発生時に予備サーバーへ自動で切り替える機能も、ミドルウェアが担う重要な役割の1つです。サービス停止時間を最小限に抑えられるため、システムの可用性や安定性の向上に直結します。この仕組みは一般に「フェイルオーバー」と呼ばれ、24時間365日の稼働が求められるシステムでは特に重要な機能とされています。</p><h3 id="_4-2-アプリケーション開発におけるミドルウェア">4-2. アプリケーション開発におけるミドルウェア</h3><p>アプリケーション開発の場面でも、ミドルウェアはさまざまな形で活用されています。以下2つの観点で見ていきましょう。</p><ul><li>4つのレイヤー</li><li>ツール</li></ul><h4 id="_4-2-1-4つのレイヤー">4-2-1. 4つのレイヤー</h4><p>アプリケーション開発におけるミドルウェアは、コンテナ、ランタイム、インテグレーション、プロセス自動化・意思決定管理という4つのレイヤーに分けることが可能です。</p><p>コンテナはアプリケーションの実行環境を標準化し、ランタイムはプログラムの実行を支え、インテグレーションは異なるシステム間の連携を担うなど、それぞれが専門的な役割を果たします。各レイヤーが連携して機能することで、効率的なアプリケーション開発を実現できます。</p><h4 id="_4-2-2-ツール">4-2-2. ツール</h4><p>テンプレートやコンテナを活用した開発支援ツールの利用により、ミドルウェアを通じた開発作業の効率化が可能です。コードの共有や共同開発を円滑に進められるようになり、開発全体の生産性や品質向上に貢献します。標準化されたテンプレートを使うことで、環境構築にかかる時間を削減し、開発初期の立ち上げをスムーズに進められる点もメリットです。</p><h2 id="_5-ミドルウェアのユースケース">5. ミドルウェアのユースケース</h2><p><img alt="ミドルウェアのユースケース" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785815303/xx7ybvdjqp5ycuap8xit.jpg" /></p><p>ミドルウェアは、さまざまな開発現場で活用されています。ここでは、以下4つのユースケースをご紹介します。</p><ul><li>ソフトウェア開発</li><li>データ送受信</li><li>分散アプリケーション</li><li>ゲーム開発</li></ul><h3 id="_5-1-ソフトウェア開発">5-1. ソフトウェア開発</h3><p>ソフトウェア開発においては、ミドルウェアが提供する共通機能を活用することで、効率的に開発を進められます。通信やデータ管理などの処理をミドルウェアに任せられるため、開発者はアプリケーション本来の機能開発に集中できます。汎用性の高いミドルウェアを土台にすることで、開発期間の短縮にもつながります。</p><h3 id="_5-2-データ送受信">5-2. データ送受信</h3><p>システム間のデータのやり取りを仲介する場面でも、ミドルウェアは重要な役割を果たします。異なるシステムやアプリケーション間の連携を円滑にし、大量のデータであっても安定して送受信できる環境を実現します。金融システムやEC基盤など、リアルタイム性が求められる領域で特に重視されています。</p><h3 id="_5-3-分散アプリケーション">5-3. 分散アプリケーション</h3><p>複数のサーバーやアプリケーションを連携して動作させる分散アプリケーションにおいても、ミドルウェアは欠かせない存在です。各システム間の通信やデータ連携をミドルウェアが担うことで、大規模かつ高負荷なシステムでも安定した運用が可能になります。近年では、マイクロサービスアーキテクチャを採用する企業も増えており、サービス同士の通信を仲介するミドルウェアの重要性は今後さらに高まっていくと考えられます。</p><h3 id="_5-4-ゲーム開発">5-4. ゲーム開発</h3><p>ゲーム開発の分野でも、ミドルウェアの活用が進んでいます。画像処理や音声処理、ネットワーク機能などを効率よく利用できるほか、共通機能を活用することで開発期間を短縮し、高度な機能を短期間で実装できる点がメリットです。</p><p>オンライン対戦機能や物理演算エンジンなど、専門性の高い機能をミドルウェアとして組み込むことで、開発チームは企画やゲーム体験の作り込みにより多くの時間を割けるようになります。</p><h2 id="_6-ミドルウェアを使うシステムアプリ開発ならgitlab">6. ミドルウェアを使うシステム・アプリ開発ならGitLab</h2><p><img alt="ミドルウェアを使うシステム・アプリ開発ならGitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785815302/ldlbjh4ykbweotqupiou.jpg" /></p><p>ミドルウェアを活用したシステムやアプリケーションの開発では、ソースコード管理からCI/CDまでを一元的に管理できる開発プラットフォームの活用が有効です。<a href="https://about.gitlab.com/ja-jp/pricing/" rel="">GitLab</a>は、こうした一連の開発プロセスを1つのプラットフォーム上で完結できるのが特徴。開発からテスト、リリースまでのワークフローを網羅的にカバーできるため、情報の分断を防ぎやすくなります。</p><p>ミドルウェアを含むシステムの開発・テスト・デプロイを<a href="https://about.gitlab.com/ja-jp/pricing/" rel="">GitLab</a>上でまとめて運用することで、チーム開発の生産性向上やコード品質の管理にも役立てられます。バージョン管理からデプロイまでの一連の流れを可視化できるため、開発チーム全体の状況把握もしやすくなるのがメリットです。</p><p>開発環境の統合を検討している企業担当者の方は、<a href="https://about.gitlab.com/ja-jp/pricing/" rel="">GitLab</a>の活用を選択肢の1つとしてぜひご検討ください。</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/pricing/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_apac_brand_x_x_ja_gitlabjapanblogseo_what-is-middleware" rel="">もっとも包括的でインテリジェントなDevSecOpsプラットフォーム「GitLab」</a></p></blockquote><h2 id="_7-ミドルウェアの役割を理解してスムーズな開発を実現しよう">7. ミドルウェアの役割を理解してスムーズな開発を実現しよう</h2><p>ミドルウェアは、OSとアプリケーションをつなぐ重要なソフトウェアであり、Webサーバーやアプリケーションサーバー、データベース管理サーバーなど、さまざまな種類が存在します。それぞれの種類や役割を理解することで、システムやアプリケーション開発をより効率的に進められるようになります。</p><p>また、開発コストの削減やOS・ハードウェアの違いの補完、高度な処理の実現など、ミドルウェアを導入するメリットはさまざまです。バックアップや監視、予備サーバーへの切り替えといった運用面の機能も充実しているため、システムの安定稼働にも大きく貢献します。</p><p>自社の開発体制に適したミドルウェアを選定し、適切に活用することで、安定したシステム運用と効率的な開発の両立を目指しましょう。<a href="https://about.gitlab.com/ja-jp/pricing/" rel="">GitLab</a>のような開発プラットフォームと組み合わせることで、ミドルウェアを含むシステム全体の開発・運用効率をさらに高められます。ソースコード管理からCI/CDまでを一貫して行える環境を整えることは、開発チームの生産性と品質の両方を底上げする有効な手段です。</p><hr /><p>監修：小松原 つかさ <a href="https://gitlab.com/tkomatsubara" rel="">@tkomatsubara</a></p><p>（GitLab合同会社 ソリューションアーキテクト本部 シニアソリューションアーキテクト）</p>]]></content>
        <author>
            <name>GitLab Team</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/gitlab-team/</uri>
        </author>
        <published>2026-08-05T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Linuxとは？仕組みやメリット・デメリット、主要なディストリビューションを紹介]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/what-is-linux/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/what-is-linux/"/>
        <updated>2026-08-04T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>Linuxは、サーバーやクラウド、アプリケーション開発、IoT機器まで幅広く利用されているオープンソースのOSです。一方で、ディストリビューションの種類が多く、WindowsやMacなど他のOSとの違いも分かりにくいため、導入に迷う方は少なくありません。</p><p>本記事では、Linuxの仕組みやメリット・デメリット、主なディストリビューションの特徴、活用方法を分かりやすく解説します。目的に合ったLinux環境を選ぶ際の参考にしてください。</p><h2 id="_1-linuxの基本情報">1. Linuxの基本情報</h2><p><img alt="Linuxの基本情報" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785723897/mkrd36czuqcjczbf8epm.jpg" /></p><p>Linuxを活用するには、まずOSやオープンソースといった基本的な仕組みを理解することが重要です。ここでは、Linuxの概要や特徴、歴史について以下4つのポイントで分かりやすく解説します。</p><ul><li>Linuxとは</li><li>OSとは</li><li>オープンソースとは</li><li>Linuxの歴史</li></ul><h3 id="_1-1-linuxとは">1-1. Linuxとは</h3><p>Linuxは、1991年に登場したオープンソースのOSです。厳密にはOSの中核を担う「カーネル」を指しますが、一般にはディストリビューションを含めたOS全体を意味する言葉として使われています。ディストリビューションは、Linuxカーネルにアプリケーションやライブラリ、各種ツールなどを組み合わせ、まとめたパッケージのことです（詳しくは後述）。</p><p>Linuxでは、多くのディストリビューションが無償で利用できる一方、企業向けにはサポートが付いた有償版も提供されています。サーバーやクラウド、組み込み機器、スーパーコンピューターなど幅広い分野で利用されており、自由に改良・再配布できるため、世界中の開発者によって継続的に進化を続けています。</p><h3 id="_1-2-osとは">1-2. OSとは</h3><p>Linuxを理解する上では、そもそもOSとは何かを理解する必要があります。OS（Operating System）は、コンピューターのハードウェアとアプリケーションを仲介する基本ソフトウェアです。</p><p>キーボードやマウスからの入力を受け付けたり、CPUやメモリ、ストレージなどのハードウェア機能を管理したりする役割を担っています。OSがあることで、アプリケーションはハードウェアの違いを意識せずに動作できます。代表的なOSにはWindowsやMacがあり、Linuxもそれらと並ぶOSの一つです。</p><h3 id="_1-3-オープンソースとは">1-3. オープンソースとは</h3><p><a href="/ja-jp/blog/what-is-open-source/">オープンソース</a>とは、ソフトウェアの設計図にあたるソースコードが公開され、利用・改変・再配布を一定のライセンス条件のもとで自由に行える仕組みです。世界中の開発者が改善や機能追加に参加できるため、不具合や脆弱性が発見・修正されやすく、品質や安全性の向上につながっています。Linuxはオープンソースソフトウェアの代表例として知られ、多くの企業や開発者に利用・改良されながら発展してきました。</p><h3 id="_1-4-linuxの歴史">1-4. Linuxの歴史</h3><p>Linuxは、1991年にフィンランドの大学生だったリーナス・トーバルズ氏が開発を開始したOSカーネルです。ソースコードがオープンソースとして公開されたことで、世界中の開発者が改良や機能追加に参加し、現在のLinuxへと発展しました。現在では、サーバーやクラウド環境をはじめ、Androidの基盤、スーパーコンピューター、IoT機器など幅広い分野で利用されており、現代のITインフラを支える重要な技術の一つとなっています。</p><h2 id="_2-linuxの仕組み">2. Linuxの仕組み</h2><p><img alt="Linuxの仕組み" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785723900/uyubwlbfm6oahziqtl2o.jpg" /></p><p>Linuxを適切に活用するには、OSがどのような構成で動作しているのかを理解することも重要です。ここでは、Linuxを構成する要素や、ディストリビューションの仕組みについて解説します。</p><h3 id="_2-1-linuxの構成要素">2-1. Linuxの構成要素</h3><p>Linuxは、カーネルだけでなく、アプリケーションやユーザースペースなど複数の要素で構成されています。それぞれの役割を理解することで、Linuxの仕組みをより深く理解できます。以下3つの要素について、それぞれ見ていきましょう。</p><ul><li>カーネル</li><li>アプリケーション</li><li>ユーザースペース</li></ul><h4 id="_2-1-1-カーネル">2-1-1. カーネル</h4><p>カーネルは、OSの中核としてハードウェアを制御するソフトウェアです。CPUやメモリ、ストレージ、ネットワーク機器などのリソースを管理し、アプリケーションからの要求に応じて適切な処理を実行します。一般的にはOS全体を「Linux」と呼びますが、本来Linuxとは、このカーネルそのものを指す名称です。</p><h4 id="_2-1-2-アプリケーション">2-1-2. アプリケーション</h4><p>アプリケーションは、ユーザーが直接的に操作するソフトウェアのことです。Webブラウザやテキストエディター、メールソフト、データベースなど、用途に応じてさまざまなアプリケーションがLinux上で動作します。アプリケーションはユーザースペースで実行され、ハードウェアへの直接アクセスは行わず、システムコールを通じてカーネルに必要な処理を依頼する仕組みになっています。</p><h4 id="_2-1-3-ユーザースペース">2-1-3. ユーザースペース</h4><p>ユーザースペースは、アプリケーションや各種サービスが動作する領域のことです。ハードウェアを直接制御するカーネル空間とは分離されているため、アプリケーションで問題が発生してもシステム全体には影響が及びにくい設計となっています。ハードウェアで必要な処理は、システムコールを通じてカーネルへ依頼されるため、安全性と安定性が確保されています。</p><h3 id="_2-2-ディストリビューションとは">2-2. ディストリビューションとは</h3><p>Linuxを理解する上で欠かせないのが、ディストリビューションという概念です。ディストリビューションは、Linuxカーネルにアプリケーションやライブラリ、各種ツールなどを組み合わせ、すぐに利用できるようにまとめたOSパッケージのことです。</p><p>UbuntuやRed Hat Enterprise Linux、Debianなど多くの種類があり、それぞれ使いやすさやサポート体制、用途が異なります。利用目的や運用環境に合わせて選択できる点は、Linuxの大きな特徴の一つです。記事の後半ではLinuxディストリビューションの主な種類をご紹介しているので、ぜひチェックしてみてください。</p><h2 id="_3-linuxを利用するメリットデメリット">3. Linuxを利用するメリット・デメリット</h2><p><img alt="Linuxを利用するメリット・デメリット" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785723899/dd5qugbpwehowrstljhl.jpg" /></p><p>Linuxには多くのメリットがある一方で、導入前に理解しておきたい注意点もあります。ここでは、Linuxを利用するメリットとデメリットをそれぞれご紹介します。</p><h3 id="_3-1-linuxを利用するメリット">3-1. Linuxを利用するメリット</h3><p>Linuxはコストを抑えやすく、柔軟性や安定性にも優れていることから、個人利用から企業のシステムまで幅広く採用されています。ここでは、Linuxを利用する主なメリットとして以下の5点をご紹介します。</p><ul><li>無料で使えるものが多い</li><li>情報が豊富である</li><li>幅広い用途に使える</li><li>セキュリティに優れている</li><li>スペックの低いPCでも使える</li></ul><h4 id="_3-1-1-無料で使えるものが多い">3-1-1. 無料で使えるものが多い</h4><p>Linuxは、多くのディストリビューションを無償で利用できます。そのため、OSのライセンス費用を抑えながらサーバーや開発環境を構築できる点が大きなメリットです。個人での学習や検証環境の構築にも導入しやすく、必要に応じて有償サポート付きのディストリビューションを選択することもできます。</p><h4 id="_3-1-2-情報が豊富である">3-1-2. 情報が豊富である</h4><p>Linuxは世界中で広く利用されているため、インターネット上に技術情報やトラブルの解決方法が数多く公開されています。公式ドキュメントやコミュニティ、技術ブログなども充実しており、エラーが発生した場合でも解決策を見つけやすい環境が整っています。そのため、学習を進めやすく、導入後の運用もしやすいOSだと言えるでしょう。</p><h4 id="_3-1-3-幅広い用途に使える">3-1-3. 幅広い用途に使える</h4><p>Linuxは、Webサーバーやデータベースサーバー、クラウド環境だけでなく、デスクトップPCやIoT機器、組み込みシステムまで幅広い用途で利用されています。用途に応じて必要な機能だけを組み込めるため、シンプルな構成から大規模システムまで柔軟に対応できます。一つのOSでさまざまな用途に活用できることは、大きな魅力です。</p><h4 id="_3-1-4-セキュリティに優れている">3-1-4. セキュリティに優れている</h4><p>Linuxはオープンソースであり、多くの開発者がソースコードを確認できることから、脆弱性の発見や修正が継続的に行われています。また、ユーザーやファイルごとの権限管理が充実しており、不正なアクセスや意図しない変更を防ぎやすい仕組みが備わっています。適切に運用すれば、安全性の高いシステム環境を構築しやすい点もLinuxの強みです。</p><h4 id="_3-1-5-スペックの低いpcでも使える">3-1-5. スペックの低いPCでも使える</h4><p>Linuxには軽量なディストリビューションが数多くあり、比較的古いPCや性能の高くない機器でも快適に動作する場合があります。そのため、使わなくなったPCをサーバーや学習用端末として再活用することも可能です。ハードウェアの性能を有効活用できるため、導入コストや運用コストの削減にもつながります。</p><h3 id="_3-2-linuxを利用するデメリット">3-2. Linuxを利用するデメリット</h3><p>Linuxには多くのメリットがありますが、利用する環境や目的によっては注意すべき点もあります。導入後に困らないよう、事前に主なデメリットとして以下の4点も理解しておきましょう。</p><ul><li>サポートを受けにくい</li><li>他OS向けのソフトウェアが使えない</li><li>システムへの慣れが必要である</li><li>周辺機器がうまく動作しないことがある</li></ul><h4 id="_3-2-1-サポートを受けにくい">3-2-1. サポートを受けにくい</h4><p>無償で利用できるLinuxディストリビューションでは、公式のサポートが提供されない場合があります。そのため、トラブルが発生した際は、公式ドキュメントやコミュニティの情報を参考にしながら、自分で解決する必要があります。企業で利用する場合は、有償サポート付きのディストリビューションを選択することで、安心して運用しやすくなります。</p><h4 id="_3-2-2-他os向けのソフトウェアが使えない">3-2-2. 他OS向けのソフトウェアが使えない</h4><p>WindowsやMac専用に開発されたソフトウェアは、Linuxではそのまま動作しない可能性があります。業務で利用したいアプリケーションがLinuxに対応していない場合は、代替ソフトや互換レイヤーを利用する必要があります。そのため、導入前には必要なソフトウェアや業務システムがLinuxに対応しているかを確認しておくことが重要です。</p><h4 id="_3-2-3-システムへの慣れが必要である">3-2-3. システムへの慣れが必要である</h4><p>LinuxはGUI（画面操作）でも利用できますが、設定変更やシステム管理ではコマンドラインを使う場面が少なくありません。WindowsやMacとは操作方法やファイル構成が異なるため、使い始めは戸惑うこともあります。実務で活用するには基本的なコマンドやLinux特有の仕組みを学ぶ必要があり、一定の学習コストを見込んでおくことが大切です。</p><h4 id="_3-2-4-周辺機器がうまく動作しないことがある">3-2-4. 周辺機器がうまく動作しないことがある</h4><p>Linuxでは、プリンターやスキャナーなど一部の周辺機器が正常に動作しない場合があります。これは、メーカーがLinux向けドライバーを提供していないことや、最新機器への対応が遅れることがあるためです。導入後のトラブルを避けるためにも、利用予定の周辺機器がLinuxに対応しているか事前に確認しておくことをおすすめします。</p><h2 id="_4-linuxでできること使い方">4. Linuxでできること・使い方</h2><p><img alt="Linuxでできること・使い方" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785723899/vtehdniuq8vtcmlpiknp.jpg" /></p><p>Linuxは高い柔軟性と安定性を備えており、サーバー運用からアプリケーション開発、IoT機器まで幅広い分野で活用されています。ここでは、Linuxの代表的な活用例として以下の4つをご紹介します。</p><ul><li>サーバーの構築</li><li>アプリケーションの開発</li><li>IoT機器への組み込み</li><li>開発・学習環境の構築</li></ul><h3 id="_4-1-サーバーの構築">4-1. サーバーの構築</h3><p>Linuxは、Webサーバーやファイルサーバー、データベースサーバーなど、さまざまなサーバーの構築に利用されています。安定性が高く、長時間の連続稼働に適していることから、多くの企業やクラウドサービスで採用されているOSです。また、<a href="/ja-jp/blog/what-is-docker/">Docker</a>や<a href="/ja-jp/blog/what-is-kubernetes/">Kubernetes</a>といったコンテナ技術の基盤でもあり、効率的なシステム運用やアプリケーションの実行環境として広く活用されています。</p><h3 id="_4-2-アプリケーションの開発">4-2. アプリケーションの開発</h3><p>Linuxは、さまざまなプログラミング言語での開発が可能な上、コンパイラやライブラリなどの開発ツールも充実しており、アプリケーション開発に適した環境です。本番環境でもLinuxが採用されることが多いため、開発環境と運用環境を揃えやすく、動作検証を効率的に行えます。また、オープンソースフレームワークも豊富に利用できるため、開発の効率化につながります。</p><h3 id="_4-3-iot機器への組み込み">4-3. IoT機器への組み込み</h3><p>Linuxは軽量かつ高いカスタマイズ性を備えたOSであるため、IoT機器や組み込みシステムでも広く利用されています。家電製品や産業機器、センサー機器、ネットワーク機器など、用途に合わせて必要な機能を組み込める点が特徴です。限られたハードウェア資源でも動作しやすく、柔軟に機能を追加・変更できることから、多様な製品開発に活用されています。</p><h3 id="_4-4-開発学習環境の構築">4-4. 開発・学習環境の構築</h3><p>Linuxは、<a href="/ja-jp/blog/what-is-vm/">仮想マシン</a>やDockerなどのコンテナ環境を利用することで、手軽に開発・学習環境を構築できます。多くのディストリビューションを無償で利用できるため、コストを抑えながらプログラミングやサーバー構築を学ぶことが可能です。実務で利用される環境に近い構成を試せるため、スキル習得や技術検証に適しています。</p><h2 id="_5-linuxの主なディストリビューションの種類">5. Linuxの主なディストリビューションの種類</h2><p><img alt=" Linuxの主なディストリビューションの種類" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785723899/pbzql7cz8itwmqp0wljc.jpg" /></p><p>Linuxには、用途や目的に応じて選べるさまざまなディストリビューションがあります。それぞれ特徴やサポート体制が異なるため、利用シーンに合ったものを選ぶことが重要です。ここでは、主なディストリビューションとして以下の8つをご紹介します。</p><ul><li>Ubuntu</li><li>Amazon Linux</li><li>Red Hat Enterprise Linux</li><li>CentOS Linux</li><li>MIRACLE LINUX</li><li>AlmaLinux</li><li>Rocky Linux</li><li>Debian</li></ul><h3 id="_5-1-ubuntu">5-1. Ubuntu</h3><p>Ubuntuは、初心者から開発者まで幅広いユーザーに利用されている人気のLinuxディストリビューションです。操作しやすいデスクトップ環境が用意されており、初めてLinuxを利用する方でも比較的扱いやすいのが特徴です。デスクトップ用途だけでなく、サーバー向けのエディションも提供されており、情報量やコミュニティが充実しているため、学習から実務まで幅広く活用されています。</p><h3 id="_5-2-amazon-linux">5-2. Amazon Linux</h3><p>Amazon Linuxは、Amazon Web Services（AWS）上での利用に最適化されたLinuxディストリビューションです。AWSの各種サービスとの親和性が高く、クラウド環境でサーバーやアプリケーションを構築・運用する際によく利用されています。もっとも利用者が多いLinuxディストリビューションの一つと言えるでしょう。</p><p>また、AWS環境向けに継続的なセキュリティ更新や性能改善が提供されるため、安定したクラウド運用を実現しやすい点も特徴です。</p><h3 id="_5-3-red-hat-enterprise-linux">5-3. Red Hat Enterprise Linux</h3><p>Red Hat Enterprise Linux（RHEL）は、企業向けに提供されている商用Linuxディストリビューションです。長期サポートやセキュリティアップデート、公式サポートが充実しており、業務システムや大規模なサーバー環境で広く採用されています。なお、個人開発者や学習用途向けには、一定条件のもとで利用できる無償のDeveloper Subscriptionも提供されています。</p><h3 id="_5-4-centos-linux">5-4. CentOS Linux</h3><p>CentOS Linuxは、Red Hat Enterprise Linuxと高い互換性を持つ無償のディストリビューションとして、長年サーバー用途を中心に広く利用されてきました。しかし、従来のCentOS Linuxはサポートを終了しており、CentOS 8は2021年12月末、CentOS 7は2024年6月末にEOL（サポート終了）を迎えました。</p><p>一方で、Red Hatが提供する「CentOS Stream」（Red Hat Enterprise Linuxの開発版という位置づけ）は現在も継続しています。また、CentOSの移行先としては、この後ご紹介するMIRACLE LINUXやAlmaLinux、Rocky Linuxなど様々なディストリビューションが普及しています。</p><h3 id="_5-5-miracle-linux">5-5. MIRACLE LINUX</h3><p>MIRACLE LINUXは、日本企業の利用を想定して開発・提供されている国産のLinuxディストリビューションです。日本語によるサポートやドキュメントが充実しており、国内企業への導入のしやすさが特徴です。また、CentOS Linuxのサポート終了に伴う移行先としても人気があり、商用環境で利用しやすい無償のOSとして提供されています。</p><h3 id="_5-6-almalinux">5-6. AlmaLinux</h3><p>AlmaLinuxは、CentOS Linuxの後継候補として登場した無償のLinuxディストリビューションです。Red Hat Enterprise Linuxと高い互換性を持ち、既存のCentOS環境から比較的スムーズに移行できます。コミュニティ主導で開発・運営されており、安定した運用と継続的なアップデートが期待できることから、企業のサーバー環境でも広く採用されています。</p><h3 id="_5-7-rocky-linux">5-7. Rocky Linux</h3><p>Rocky Linuxは、CentOSの創設者であるグレゴリー・カーツァー氏によって立ち上げられたLinuxディストリビューションです。Red Hat Enterprise Linuxと高い互換性を備え、CentOS Linuxの移行先として多くの企業で利用されています。無償で利用できるほか、安定性や長期的な運用を重視して開発が進められており、企業システムにも適したディストリビューションです。</p><h3 id="_5-8-debian">5-8. Debian</h3><p>Debianは、安定性を重視して開発が続けられている歴史あるLinuxディストリビューションです。Ubuntuをはじめ、多くの派生ディストリビューションのベースとなっており、Linuxの発展にも大きく貢献しています。堅牢性の高さから、サーバー環境や開発環境を中心に幅広く利用されており、豊富なソフトウェアパッケージを利用できるのも特徴です。</p><h2 id="_6-linuxでのソフトウェア開発にはgitlab">6. Linuxでのソフトウェア開発にはGitLab</h2><p><img alt=" Linuxでのソフトウェア開発にはGitLab" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785723900/sqvacsbdzqs6ycbayswa.jpg" /></p><p>開発者の手元がWindowsやMacであっても、本番環境や<a href="/ja-jp/blog/what-is-ci-cd/">CI/CD</a>の実行基盤にLinuxを使うケースは少なくありません。そうしたLinux環境でのビルド・テスト・デプロイをGitLabと組み合わせることで、ソースコード管理からCI/CDやセキュリティチェック、コードレビューまでを一つのプラットフォームで完結でき、開発から運用までを効率化できます。</p><p>また、GitLab自体もLinux上で動作することを前提に設計されており、Linux環境との親和性の高さが特徴です。LinuxOSでの開発から運用まで一元的に管理できるため、開発チームの生産性向上に役立ちます。</p><p>参考：<a href="https://docs.gitlab.com/ja-jp/install/" rel="">Install GitLab</a>、<a href="https://docs.gitlab.com/ja-jp/devsecops/" rel="">GitLab: The DevSecOps platform</a></p><p>Linux開発環境の構築や改善を検討されている企業担当者の方は、<a href="https://about.gitlab.com/ja-jp/pricing/" rel="">GitLab</a>の活用を選択肢の一つとしてぜひご検討ください。</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/pricing/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_apac_brand_x_x_ja_gitlabjapanblogseo_what-is-linux" rel="">もっとも包括的でインテリジェントなDevSecOpsプラットフォーム「GitLab」</a></p></blockquote><h2 id="_7-linuxを理解して用途に合った環境を選ぼう">7. Linuxを理解して用途に合った環境を選ぼう</h2><p>Linuxは、オープンソースならではの高い柔軟性と安定性を備え、サーバーやクラウド、アプリケーション、IoT機器の開発など幅広い用途で利用されているOSです。一方で、ディストリビューションごとに特徴やサポート体制が異なるため、利用目的に合わせて選ぶことが重要です。</p><p>まずはUbuntuなど扱いやすいディストリビューションから試し、自分に合った環境を見つけてみましょう。開発環境として活用する場合は、DevSecOpsプラットフォームである<a href="https://about.gitlab.com/ja-jp/pricing/" rel="">GitLab</a>と組み合わせて運用することで、ソースコード管理からCI/CDまでの開発業務を効率化できます。</p><hr /><p>監修：吉瀬　淳一 <a href="https://gitlab.com/jyoshise1" rel="">@jyoshise1</a><br />
（GitLab合同会社 ソリューションアーキテクト本部 シニアソリューションアーキテクト）</p>]]></content>
        <author>
            <name>GitLab Team</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/gitlab-team/</uri>
        </author>
        <published>2026-08-04T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claudeが書き、GitLabがつなぐ：本番環境まで途切れないセキュリティ]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/claude-security-and-gitlab/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/claude-security-and-gitlab/"/>
        <updated>2026-08-03T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>エージェント型コーディングの進化は速く、多くの企業のガバナンス体制が追いつけていないのが実情です。<a href="https://code.claude.com/docs/en/security-guidance" rel="">Claude security guidanceプラグイン</a>や<a href="https://code.claude.com/docs/en/claude-security" rel="">Claude Security</a>のようなコーディングアシスタントは、コードが書かれるのと同じセッション内で、よくある脆弱性を検出し修正できます。これはより安全なコードを書くうえで大きな価値がありますが、セキュリティはそこで終わりません。コミットは本番環境に至る道のりの一段階に過ぎず、マージ、依存関係の更新、インフラの変更、監査は、セッションが終わった後に発生します。</p><p>GitLabは、本番環境に至るまでの残りの工程のセキュリティを担います。Anthropic ClaudeからGitLabへと至る典型的なセキュリティワークフローには5つのハンドオフが存在し、本記事ではその一つひとつを取り上げながら、エージェント型コーディングを大規模に統制する方法を解説します。</p><p>すでにClaude security guidanceやClaude Securityを利用しているチームであれば、<a href="https://docs.gitlab.com/ja-jp/user/model_context_protocol/mcp_server/" rel="">GitLab MCPサーバー</a>を通じてそのコンテキストをGitLabに直接連携させ、既存のワークフローをそのまま維持できます。Claudeがコードを書く瞬間を担当し、そこから本番環境に至るまでのすべてを、単一のプラットフォーム上でGitLabが引き受けます。</p><h2 id="検出から実効性のある統制へ">検出から実効性のある統制へ</h2><p>Claude security guidanceプラグインは、開発者一人ひとりのセッション内でコードをレビューし、エージェントの手を止めないほどの速さで問題を検出します。しかし、そのコードがセッションを離れた後は、セキュリティチームはセッション内で何が起きたかの記録と、次に何が起きるかを制御する仕組みを必要とします。</p><p>GitLabが提供するのは、コードの出どころを問わず、本番環境に届く前の段階で安全なコーディングのためのガードレールを定義できるだけの可視性と制御力です。</p><ul><li><strong>一度定義し、全社に適用：</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/configuration/security_configuration_profiles/" rel="">セキュリティ設定プロファイル</a>により、必要なスキャンをリポジトリの外側からすべてのプロジェクトとパイプラインに適用できるため、カバレッジが一貫し、回避される心配もありません。</li><li><strong>エージェントにも職務分掌を適用：</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/policies/merge_request_approval_policies/" rel="">マージリクエスト承認ポリシー</a>により、変更を書いたエージェント自身がそれを承認することはできません。エージェントも、それを指示した開発者自身も、指定された承認者なしに自分の作業をマージすることはできません。</li><li><strong>重大な脆弱性を出荷前にブロック：</strong> マージリクエスト承認ポリシーは、未解決の重大な検出結果があるマージを、指名された承認者が承認するまで保留します。これにより、見過ごされた、あるいは却下された脆弱性が気づかれないまま本番環境に届くことはありません。</li><li><strong>すべての検出結果のステータスを、恒久的に追跡：</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/vulnerability_report/" rel="">脆弱性レポート</a>と<a href="https://docs.gitlab.com/ja-jp/user/application_security/security_dashboard/" rel="">セキュリティダッシュボード</a>により、各検出結果が検出済みか、理由付きで却下されたか、解決済みかを確認できます。</li></ul><p><img alt="対象となるすべてのプロジェクトでスキャナーを大規模に有効化し、回避できない仕組みにする" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/b29bi5eu71wuowipzskr.png" title="対象となるすべてのプロジェクトでスキャナーを大規模に有効化し、回避できない仕組みにする" /></p><h2 id="セッション内のスキャンから監査証跡へ">セッション内のスキャンから監査証跡へ</h2><p>変更管理における監査要件は、エージェントも対象に含む形へと広がっています。SOC 2、PCI DSS、FedRAMPといったコンプライアンスフレームワークでは、あらゆる変更が出荷前にテスト・レビュー・承認されたことを示す文書化されたエビデンスが求められます。</p><p>GitLabは、コンプライアンス統制を実効性のあるものにし、監査人向けのエビデンス収集を自動化します：</p><ul><li><strong>スキャンとレビューの実施を証明：</strong> <a href="https://docs.gitlab.com/ja-jp/user/compliance/compliance_frameworks/#gitlab-compliance-controls" rel="">コンプライアンス統制</a>は、すべてのマージリクエストでスキャンが実行されることを保証し、検出結果はマージリクエストと脆弱性レポートの両方に表示され、人の目で確認できます。</li><li><strong>監査人への回答は数分で完了：</strong> <a href="https://docs.gitlab.com/ja-jp/ci/jobs/job_logs/" rel="">パイプラインログ</a>、<a href="https://docs.gitlab.com/ja-jp/user/project/merge_requests/approvals/" rel="">承認記録</a>、<a href="https://docs.gitlab.com/ja-jp/user/compliance/audit_events/" rel="">監査イベント</a>により、何がスキャンされ、誰が承認したかを変更ごとに再現可能な履歴として確認でき、関わった人やエージェントとも紐づけられます。</li><li><strong>監査人が求めるフレームワークにエビデンスを対応付け：</strong> <a href="https://docs.gitlab.com/ja-jp/user/compliance/compliance_frameworks/#gitlab-compliance-controls" rel="">コンプライアンスフレームワーク</a>は、SOC 2や独自フレームワークなど、名前の付いた要件ごとにエビデンスをグループ化し、それぞれ特定の統制から構成されます。<a href="https://docs.gitlab.com/ja-jp/user/compliance/compliance_center/compliance_status_report/" rel="">コンプライアンスステータスレポート</a>では、フレームワークごとにどの統制が合格・保留・不合格かを確認できます。</li></ul><p><img alt="エージェントの活動を記録した監査ログ。セッション単位のイベントと開始時刻を表示" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/xehdn27jhyv1tb0agrjt.png" title="エージェントの活動を記録した監査ログ。セッション単位のイベントと開始時刻を表示" /></p><h2 id="送信するデータをコントロールする">送信するデータをコントロールする</h2><p>レビューのためにコードやその背景にあるビジネスコンテキストを送る相手は、人よりもモデルのほうが多いかもしれません。規制業界、政府機関、知的財産に敏感な組織にとっては、認証情報や独自のロジック、規制対象データなど、何を環境の外に出すかを自ら決める必要があります。この判断は、スキャンが実行される前に、コードに触れるすべてのツールにわたって行われなければなりません。</p><p>GitLabを使えば、データが環境の外に出る前に、モデルに届く内容を自ら決められます：</p><ul><li><strong>シークレットや機密コードをモデル送信の対象外に：</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/context/" rel="">コンテキスト除外設定</a>により、シークレットや機密ファイルを、エージェントがモデルに送るすべての内容から除外できます。</li><li><strong>コードと推論を自社の境界内に、承認済みのモデルだけで完結：</strong> Self-Managed環境でセルフホストモデルを実行すれば、何も外部に出ることはありません。<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/model_selection/" rel="">フローごとにモデルを選択し</a>、許可するモデルを制限して、コードが学習データに使われないようにできます。</li><li><strong>送信内容をフィルタリング：</strong> <a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo/prompt_guardrails/" rel="">GitLab Duoのプロンプトガードレール</a>は、コード提案がモデルに届く前にシークレットをスキャンし、プロンプトが操作できるコンテンツを分離することでプロンプトインジェクションのリスクを抑えます。これは、すでに除外設定した内容に加えて機能します。</li></ul><p><img alt="AIモデルへの送信から除外するファイルやディレクトリを定義する" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/uvgikegtzsabqdqahg04.png" title="AIモデルへの送信から除外するファイルやディレクトリを定義する" /></p><h2 id="単発のスキャンから開発ライフサイクル全体を網羅するスキャン体制へ">単発のスキャンから、開発ライフサイクル全体を網羅するスキャン体制へ</h2><p>Anthropicの<a href="https://github.com/anthropics/claude-plugins-official/tree/main/plugins/security-guidance" rel="">ドキュメント</a>でも、Claude security guidanceプラグインはベストエフォート型の支援ツールであり、人によるコードレビューや各種セキュリティスキャナーに置き換わるものではなく、それらと並行して使うものだと明記されています。この位置づけは重要です。なぜなら、出荷した時点では存在しない脆弱性もあるからです。今日出荷した依存関係に、来年、自分のコードには一切変更がないまま重大な脆弱性が公表されることもあります。<a href="https://www.cisa.gov/news-events/cybersecurity-advisories/aa21-356a" rel="">Log4Shell</a>はその典型例で、何年も前に出荷されたアプリケーションが、2021年12月に脆弱性が公になった瞬間、突然攻撃可能な状態になりました。</p><p>依存関係、コンテナイメージ、インフラ構成、そしてすでにコミット履歴に残っているシークレットには、特定のセッションから独立して実行されるスキャンが必要です。</p><p>GitLabは、ソフトウェア配信ライフサイクル全体を保護します：</p><ul><li><strong>アタックサーフェス全体をカバー：</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/dependency_scanning/" rel="">依存関係</a>、<a href="https://docs.gitlab.com/ja-jp/user/application_security/container_scanning/" rel="">コンテナ</a>、<a href="https://docs.gitlab.com/ja-jp/user/application_security/iac_scanning/" rel="">Infrastructure as Code</a>、<a href="https://docs.gitlab.com/ja-jp/user/application_security/secret_detection/" rel="">シークレット</a>、そして<a href="https://docs.gitlab.com/ja-jp/user/application_security/dast/" rel="">動的アプリケーションセキュリティテスト（DAST）</a>のスキャンが、セッション単位のレビューでは決して届かない領域をチェックします。取り込む依存関係、出荷するイメージ、プロビジョニングするインフラ、コミットに紛れ込むシークレット、そして稼働中のアプリケーションです。</li><li><strong>スキャナーが見逃す欠陥も検出：</strong> 決定論的なスキャナーでは、ビジネスロジックの誤りや認証の不備、競合状態を検出できません。<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/security_review/" rel="">Security Review Flow</a>は意図を推論することでこのカテゴリーを直接捉え、該当コードへのコメントとして投稿し、人が対応できるようにします。</li><li><strong>結果がぶれない、決定論的なスキャンを併用：</strong> LLMによるレビューは、同じコードでも実行のたびに異なる検出結果を返すことがあります。アドバンストSASTのような決定論的スキャンは、固定のアルゴリズムで関数境界を越えて汚染データを追跡し、CWEにマッピングされた再現性のある結果を返します。これこそ、コンプライアンス監査に必要な一貫したエビデンスです。</li></ul><p><img alt="SAST、DAST、依存関係、コンテナ、シークレットの各スキャンをパイプラインで必須実行" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525382/tmmgtxgnlivwhjmx6uz7.png" title="SAST、DAST、依存関係、コンテナ、シークレットの各スキャンをパイプラインで必須実行" /></p><h2 id="すべてのエージェントと開発者に共通のガードレールを">すべてのエージェントと開発者に、共通のガードレールを</h2><p>Claude security guidanceプラグインがレビューするのは、Claudeがセッション内で書いてコミットしたコードです。セッション内の「!」によるシェルエスケープを含め、開発者自身のシェルから行われたコミットは、<a href="https://code.claude.com/docs/en/security-guidance" rel="">プラグインのレビュー対象外</a>です。Claude Securityは、開発者や管理者がオンデマンドで実行することで、コードベース全体や人が書いたコードにもレビューの範囲を広げます。</p><p>GitLabのスキャン実行ポリシーとマージリクエスト承認ポリシーは、すべての変更に対してパイプライン上で実行されます。そのため、コードを書いたのが人かエージェントか、スキャンを実行し忘れていないかといった事情に、カバレッジが左右されることはありません。</p><p><img alt="デフォルトブランチごとにセキュリティスキャンが実行されるよう設定する" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785525383/hs2u66vp2c7fbxemwvbt.png" title="デフォルトブランチごとにセキュリティスキャンが実行されるよう設定する" /></p><h2 id="本番に届くものを統制する">本番に届くものを統制する</h2><p>Claude security guidanceとClaude Securityは、コードが書かれたその瞬間に問題を検出し、修正することを助けます。しかし、そのコードがセッションを離れた後は、本番環境まで安全に届けることの責任は、エンタープライズのセキュリティチームとプラットフォームチームが負います。そこで必要になるのが、エージェントが何をしたかの可視性、セキュリティ手順が守られたことの証明、そして問題のある変更を出荷前に止められる仕組みです。</p><p>GitLabは、Claudeのワークフローをそこにつなぎます。GitLab側でガードレールを一度設定すれば、あらゆるエージェントも開発者も、その内側でより速く、より安全に出荷できるようになります。Claudeの役割は、安全なコードを書く手助けをすることです。GitLabはそこから本番環境までのすべてを、チームの速度を落とすことなく統制します。</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/free-trial/?utm_medium=native&amp;utm_source=integrate-market&amp;utm_campaign=eg_global_cmp_content-syndication_security_en_" rel="">GitLab Ultimateの無料トライアルを始める！</a></p><p>すでにUltimateをご利用の場合は、<a href="https://docs.gitlab.com/ja-jp/user/application_security/policies/" rel="">スキャン実行ポリシーとマージリクエスト承認ポリシー</a>を設定し、今日からガードレールの適用を始めましょう。</p></blockquote><h2 id="関連リンク">関連リンク</h2><ul><li><a href="https://about.gitlab.com/ja-jp/blog/claude-code-and-gitlab/" rel="">Claude CodeとGitLab：リリースまでの3つのワークフロー</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-duo-agent-platform-with-claude-accelerates-development/" rel="">GitLab Duo Agent PlatformとClaudeで開発を加速する</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/how-to-use-gitlabs-custom-compliance-frameworks-in-your-devsecops/" rel="">GitLabのカスタムコンプライアンスフレームワークをDevSecOps環境で活用する方法</a></li></ul>]]></content>
        <author>
            <name>Alisa Ho</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/alisa-ho/</uri>
        </author>
        <published>2026-08-03T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Loop Engineeringの実践方法：GitLab × Claude Codeでの実装例]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/loop-engineering-gitlab-claude-code/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/loop-engineering-gitlab-claude-code/"/>
        <updated>2026-07-31T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p><em><strong>編集部注：私たちは時折、パートナーコミュニティのメンバーにGitLabブログへの寄稿をお願いしています。今回、ソニービズネットワークス社のエンジニアである濱田一成氏に、執筆いただきました。<a href="https://about.gitlab.com/ja-jp/blog/authors/issei-hamada-sony-biz-networks-corporation/" rel="">過去の寄稿はこちら</a>でご覧いただけます。</strong></em></p><p>ソニービズネットワークスの<a href="https://handbook.gitlab.com/handbook/resellers/partner-champions-program/" rel="">GitLab Partner Champions</a>の濱田です。<br /><br />
最近、最先端のAIエンジニアの間でLoop Engineeringという概念が流行っています。名付け親であるAddy Osmani氏は、「これが、コーディングエージェントとの協働方法の未来になるかもしれないと考えています。」と述べています。（同時に「しかし、まだ初期段階であり、私は懐疑的です。」とも述べていますが）</p><p>Loop Engineeringとは、簡単に表現するなら「AIエージェントに、目的を達成するまで自律的に動いてもらえる仕組みを作る事」です。私自身も、AIコーディングエージェントを使っているうちに人間がボトルネックであると感じてきており、どうにかAIエージェントに自律的に動いてもらえないか最近試行錯誤していました。</p><p>そこで、本日は<a href="https://about.gitlab.com/ja-jp/blog/claude-code-and-gitlab/" rel="">GitLabとClaude Code</a>を使って、Loop Engineeringを実装する例をご紹介します。</p><h2 id="この記事でわかること">この記事でわかること</h2><ul><li>Loop Engineeringとは何か</li><li>GitLabとClaude Codeを使った実装例（cron起動、Skills活用、ラベルベースのフロー）</li><li>AIエージェントを自律稼働させる際に必要なガードレールの設計方法</li></ul><h2 id="loop-engineeringとは">Loop Engineeringとは</h2><p>先ほども簡単にお話ししましたが、Loop Engineeringとは「<strong>AIエージェントに、目的を達成するまで自律的に動いてもらえる仕組みを作る事</strong>」です。</p><p>Claude Codeを使った時の一番簡単な例は、以下です。</p><pre className="language-sh shiki shiki-themes github-light" code="#!/bin/bash
claude -p &quot;ログを確認して、エラーがあったら分析して報告して下さい。&quot;
" language="sh" meta="" style=""><code><span class="line" line="1"><span class="sAwPA">#!/bin/bash
</span></span><span class="line" line="2"><span class="s7eDp">claude</span><span class="sYu0t"> -p</span><span class="sYBdl"> &quot;ログを確認して、エラーがあったら分析して報告して下さい。&quot;
</span></span></code></pre><p>このシェルスクリプトをcronで10分毎に実行すれば、立派なLoopの完成です。Claudeが10分毎にログを確認して、何かあったら報告してくれるようになります。</p><p>この例のプロンプトは定型ですが、都度、任意のプロンプトを組み込めたら柔軟に動いてもらえそうです。<br /><br />
これを、GitLabで実装します。</p><h2 id="gitlabでのloop-engineering実践例">GitLabでのLoop Engineering実践例</h2><p>今回の構成は、ざっくり以下となっています。</p><p><img alt="GitLabでのLoop Engineering実践例" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785223631/cnzdokaplj8bvcmsyikr.png" /></p><p>ポイントは以下です。</p><ol><li>エージェントの種類別にシェルスクリプトを用意し、10分毎にcronで起動</li><li>エージェントの作業別にSkillsを用意し、Spec駆動開発を実施する</li><li>各エージェントの種類に応じたIssue/MRのラベルを確認し、動作対象なら <code>claude -p &quot;/sdd-*** Issue/MR番号&quot;</code> というコマンドでエージェントを起動</li></ol><p>特に、2のSkillsで<strong>IssueやMRの起票を明示する</strong>事で、人間はラベルの貼り替えのみでClaude Codeに作業を依頼出来ます。<br /><br />
Skillsの中身も踏まえると、以下のようなフローとなります。</p><p><img alt="Loop Engineeringフロー" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785223630/pwczzabmhncrdc03u8aj.png" /></p><ol><li>人間: <code>plan::go</code> ラベルを貼る<ul><li>エージェント: Spec作成フローを開始<ul><li>不明点あり: ユーザへの質問をissueコメントに記載し、<code>plan::question</code> ラベルを貼る<ul><li>人間は質問へ回答し、<code>plan::go</code> ラベルを貼る</li></ul></li><li>不明点なし: Draft版MRを作成</li></ul></li></ul></li><li>人間: MRをレビューする<ul><li>問題あり: エージェントへの改善点をissueに記載し、<code>plan::go</code> ラベルを貼って差し戻す</li><li>問題なし: MRに <code>loop::ready</code> ラベルを貼る</li></ul></li><li>エージェント: Spec駆動開発フローに従って実装<ul><li>実装完了後、<code>loop::needs review</code> ラベルを貼る</li></ul></li><li>エージェント: コードレビューを実施<ul><li>問題あり: 指摘をコメント後、<code>loop::change-requested</code> で差し戻す</li><li>問題なし: <code>loop::approve</code> ラベルを付与</li></ul></li><li>人間: MRをマージ</li></ol><p><img alt="Loop Engineeringフロー" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785223630/woidonzh6prpijq1zwvn.png" /></p><ol start="6"><li>developパイプライン: ビルド・デプロイ・テストを実施<ul><li>問題なし: release watcherエージェントが <code>develop -&gt; main</code> MRを作成</li><li>問題あり: release watcherエージェントが対応用MRを作成し、<code>loop::change-requested</code> ラベルを付与</li></ul></li><li>MRをマージ<ul><li>問題なし: issueの実装完了</li><li>問題あり: release watcherエージェントが対応用MRを作成し、<code>loop::change-requested</code> ラベルを付与</li></ul></li></ol><p>以上です。<br /><br />
結果、人間に残されたタスクは、以下に絞られます。</p><ul><li>計画を進めたいissueにラベルを貼る</li><li>開発を進めたいMRにラベルを貼る</li><li>完成したMRをマージする</li><li>mainへのMRをマージする</li></ul><p>これくらいなら、PCの前に座っている必要すら無いですよね。正直、スマホからGitLabにアクセス出来れば十分です。<br /><br />
ちなみに、<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo</a>はスマホからでも呼べるので、エージェントにトラブルがあって人間が呼ばれても、簡単なものであればDuoに修正依頼出来ます。</p><h2 id="loop-engineeringの実装において重要なポイント">Loop Engineeringの実装において重要なポイント</h2><p>今回ご紹介したものは私のアーキテクチャ例ですが、もちろん他にも様々なパターンがあると思います。どんなパターンでも共通のポイントは、「AIエージェントのガードレールの作り方」です。AIエージェントを自律的に動かそうと思うと、無限ループや本番環境への意図しない作業を防ぐ仕組みが必要です。<br /><br />
今回のケースでは、以下をガードレールとして実装しています。</p><ul><li><strong>全てのエージェントに、タイムアウトを設定する:</strong> 無限ループによるトークンのバーストを防ぐ</li><li><strong>エージェントは必ずSkillsを呼び出し、手順に沿ってSpec駆動開発する:</strong> 開発手順をフロー化する事で、予期しない作業を防ぐ</li><li><strong>AWS環境へのデプロイは、パイプラインで行う:</strong> エージェントには一切AWS認証情報を持たせない事で、本番環境への影響を防ぐ</li></ul><p>特に、エージェントと本番環境の認証情報を分離する事は非常に重要です。開発中のテストにはdockerを使わせて、認証情報が必要な作業はRunbook化してGitLab Runner上で実行する、など、様々な手法が考えられます。ぜひご自分の環境にあった手法を検討してみて下さい。</p><h2 id="最後に">最後に</h2><p>最近AI-DLCの伴走支援の引き合いを多数頂くのですが、この領域が最終的にたどり着くのは、AIエージェントによる完全自律稼働だと考えています。<br />
今回Loop Engineeringを実践してみて、AIエージェントを自律稼働させる為の手法の一つとして可能性を感じました。<br /><br />
特にGitLabとLoop Engineeringの相性は非常に良く、この仕組みなら大概のシステムを自動化出来そうです。例えば、定期的にScheduled Pipelineとしてエージェントを起動し、プロダクトのログを分析。改善の為のIssueを作成させ、そのままラベルを貼って開発プロセスに投入する。他には問い合わせ対応をIssueベースにしてもらう事で、FAQのような使い方も出来るかもしれません。個人的には、AWS環境のメンテナンス作業をIssue化して、今回の仕組みで自動化してみようと思っています。</p><p>以上です。最後までお読みくださり、ありがとうございました！<br /><br />
AI-DLCの推進にパートナーが欲しいということでしたら、ぜひお気軽にGitLab社 &amp; ソニービズネットワークスまでご相談ください！</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/sales/?utm_medium=blog&amp;utm_source=blog&amp;utm_campaign=eg_apac_brand_x_x_ja_gitlabjapanblogseo_loop-engineering-gitlab-claude-code" rel="">お問い合わせはこちら</a></p><p><code>お問い合わせ内容をご記入ください</code>欄に、<a href="https://about.gitlab.com/ja-jp/blog/loop-engineering-gitlab-claude-code" rel="">https://about.gitlab.com/ja-jp/blog/loop-engineering-gitlab-claude-code</a>をご覧になったと記入いただくとスムーズです。</p></blockquote><style>html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Issei Hamada, Sony Biz Networks Corporation</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/issei-hamada-sony-biz-networks-corporation/</uri>
        </author>
        <published>2026-07-31T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[エージェント型AI、MCP、AIコードアシスタントを統制する方法]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/govern-agentic-ai-mcps-code-assistants/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/govern-agentic-ai-mcps-code-assistants/"/>
        <updated>2026-07-31T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>AIによるコード補完は、設計の段階から人によるレビューをプロセスに組み込んできました。開発者がコードを入力すると提案が表示され、それを採用するかどうかは人が判断します。リリース前には、すべての行を必ず人の目で確認していました。</p><p>エージェント型AIは、このレビューのループを崩します。エージェントはマージリクエストを作成し、ツールを呼び出し、CI/CD設定を変更し、変更をプッシュすることができますが、その一つひとつの操作を人がレビューするとは限りません。さらに、エージェントが外部のツールやデータソースに自ら接続できるようにする<a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">Model Context Protocol（MCP）</a>が加わることで、エンジニアリングリーダーが向き合う問いも変化します。もはや「どのモデルが最も優れたコードを書くか」ではなく、「このエージェントに何が許可されているのか、そしてその行動を事後に証明できるのか」が問われているのです。</p><p>1,500人を超える開発者およびテクノロジーリーダーを対象とした<a href="https://about.gitlab.com/ja-jp/resources/ai-accountability-survey-2026/" rel="">GitLab独自の調査</a>では、回答者の73%がコードの長期的な保守性に懸念を抱いており、86%が「明確なガバナンスがなければ、AI生成コードは従来の開発手法よりも速く技術的負債を積み上げてしまう」という点に同意していることが明らかになりました。</p><p>この記事では、エージェント型AIのガバナンスにおいて各組織が直面し始めている課題に、どう先手を打って対応すればよいかを解説します。ソフトウェア開発におけるエージェント型AIのガバナンスフレームワークを紹介し、何を制御すべきか、人によるレビューがどこに残るべきか、導入状況をどう測定するか、そして<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>への標準化を進めるチームのための実践的なチェックリストを取り上げます。</p><h2 id="エージェント型aiのガバナンスに異なるアプローチが必要な理由">エージェント型AIのガバナンスに異なるアプローチが必要な理由</h2><p>対話型のコーディングアシスタントにおけるセキュリティモデルは、あらゆる段階に人が関与しているため、シンプルです。開発者が質問を投げかけ、提案をレビューし、採用するか却下するかを判断します。</p><p>自動化されたワークフローにおける<a href="https://about.gitlab.com/ja-jp/topics/agentic-ai/" rel="">エージェント型AI</a>には、異なるガバナンスアプローチが求められます。エージェントがテストを実行し、設定を変更し、<a href="https://about.gitlab.com/ja-jp/blog/multi-step-software-delivery-with-agentic-flows/" rel="">ソフトウェア提供ライフサイクル全体にわたる複数ステップの操作</a>を、人がその都度レビューすることなく行えるようになると、問うべき論点は次のように変わります。</p><ul><li>このエージェントは何にアクセスできるか</li><li>何を行う権限を持っているか</li><li>どのような操作を行い、それを事後に証明できるか</li></ul><p>すでに多くのチームがこの課題を実感しています。<a href="https://about.gitlab.com/resources/ai-accountability-survey-2026/" rel="">DevSecOps専門家の92%</a>が、AI生成コードに関して何らかのガバナンス上の課題を抱えていると回答しており、具体的な懸念は上記の論点に直結しています。</p><p>主な懸念事項は次のとおりです。</p><ul><li><strong>コードの帰属：</strong> そもそも、どのコードがAI生成で、どのコードが人間による記述かを判別できるかどうか。</li><li><strong>意図へのトレーサビリティ：</strong> AI生成コードを、それが満たすべきだったビジネス要件に遡って紐づけられるかどうか。</li><li><strong>スケールするドキュメント化：</strong> エージェントがコードベースの生成に占める割合を増やしていくにつれ、手作業によるドキュメント化では対応しきれなくなる点。</li></ul><p>いったんプロジェクトでエージェントの利用が承認されると、多くの場合、そのエージェントは誰かが事前にレビューすることなく、コードの記述、削除、変更のプッシュを行えるようになります。しかし、コードベースに反映される内容については、それを行ったのが人間かエージェントかにかかわらず、組織が責任を負うことに変わりはありません。</p><p><strong>エージェント型AIのガバナンスは、コード補完のガバナンスに単に追加されるものではありません。ID、権限、監査可能性を軸に据えた、まったく異なるアプローチです。</strong></p><h2 id="mcpエージェントモデルアクセスツール権限の制御方法">MCP、エージェント、モデルアクセス、ツール権限の制御方法</h2><p>エージェントがMCPのようなプロトコルを通じてツールを呼び出し、外部システムに接続できるようになると、権限管理こそが制御の要となります。実効性のあるガバナンスモデルは、エージェントを実行する前に、次の3つの問いに答えられるものです。</p><ol><li>どのエージェントとフローの利用が許可されているか</li><li>どこでの稼働が許可されているか</li><li>エージェントはどのモデルを使用できるか</li></ol><p>実際には、これはいくつかのレイヤーが連携して機能する形になります。</p><ul><li><a href="https://about.gitlab.com/ja-jp/blog/ai-catalog-discover-and-share-agents/" rel=""><strong>エージェントとフローの一元管理カタログ</strong></a>：各チームが個別にエージェント連携を構築するのではなく、共有のAIカタログを通じて、組織の既存のロールやグループ構造に沿った形で、何を公開するかを管理者が判断できるようにします。</li><li><a href="https://about.gitlab.com/blog/improve-ai-security-in-gitlab-with-composite-identities/" rel=""><strong>コンポジットアイデンティティ</strong></a><strong>：</strong> すべてのAIエージェントのIDは、その操作を要求した人間ユーザーに紐づけられるべきであり、活動がエージェント単体に帰属することがないようにします。エージェントがリソースへのアクセスを試みる際は、エージェントとそれを指示した人間の両方の主体が、アクセスを許可される前に認証・認可される必要があります。</li><li><a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/tool-governance/" rel=""><strong>ツール承認ガードレール</strong></a><strong>：</strong> 個々のエージェントツールは、自律的に実行する、人によるレビューのために一時停止する、あるいは完全にブロックするといった設定が可能です。これにより、ファイルの書き込みやリソースの削除といった機微な操作は、実行前に承認を待つようになります。</li><li><a href="https://about.gitlab.com/blog/how-gitlab-uses-prompt-guardrails-to-help-protect-customers/" rel=""><strong>プロンプトガードレール</strong></a><strong>：</strong> エージェントはWebページ、Issueのコメント、攻撃者が操作するファイルなど、信頼できない入力を処理することがあるため、プラットフォーム側では、事後にログを残すだけでなく、ワークフローの途中でエージェントの挙動を乗っ取ろうとする試みを検知する必要があります。</li></ul><p>目指すべきは、エージェントの権限を、組織がすでに人間の権限に対して行っているのと同じように扱う制御基盤です。つまり、ロールベースで、監査可能であり、すべてのプロジェクトで一貫している状態です。</p><h2 id="データプライバシーとセルフホストai問うべきこと">データプライバシーとセルフホストAI：問うべきこと</h2><p>ソースコードは企業が持つ最も機微な資産の一つであり、それを読み取るAI機能はすべて、データの取り扱いに関する問いを生じさせます。エージェント型AIを本格的に展開する前に、エンジニアリングおよびセキュリティのリーダーは、通常、いくつかの重要な問いに対して明確な答えを求めます。</p><ul><li>ベンダーは自社のコードでモデルを学習させているか</li><li>入出力データの所有権はどこにあるか</li><li>サブプロセッサはどこに所在し、そのリストが変更された際には通知を受けられるか</li></ul><p>規制の厳しい業界の組織にとって、「サブプロセッサはどこに所在するか」という問いへの答えは、多くの場合「自社のインフラの外には一切存在しない」でなければなりません。だからこそ、セルフホストは単なる導入方式の好みではなく、ガバナンス上の重要なレバーとなります。<a href="https://about.gitlab.com/ja-jp/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/" rel="">セルフホストの選択肢</a>を利用すれば、チームは自らが制御するインフラ上でAIエージェントを完全に運用しながら、利用状況を正確に追跡し、規制当局の要件も満たすことができます。</p><p>自社モデル持ち込み（BYOM）への対応は、これをさらに一歩進めるものです。管理者は、社内ですでに検証済みのモデルを接続し、特定のモデルを特定のエージェントフローに割り当てることができます。この方法により、機微なワークフローは組織が信頼するモデルに固定しつつ、機微性の低いワークフローではマネージド型のオプションを利用するといった使い分けが可能になります。</p><h2 id="human-in-the-loop人によるレビューをどこに残すか">Human-in-the-Loop：人によるレビューをどこに残すか</h2><p>ガバナンスとは、エージェントの自律的な行動を一律に禁じることではありません。自律性がどこで終わり、レビューがどこから始まるのかを、意図的に決めることを意味します。実効性のあるポリシーは、通常、次の2つのモードを区別します。</p><ul><li><strong>対話型の作業：</strong> 開発者がその場にいて、それぞれの提案を確認し、直接承認または却下します。これは、<a href="https://about.gitlab.com/topics/devops/ai-powered-code-completion/" rel="">AIコード補完</a>を通じて多くのチームがすでに理解しているモードです。</li><li><strong>自動化・ヘッドレス型の作業：</strong> CI/CDパイプライン内でエージェントが稼働するなど、開発者がリアルタイムで見ていない状況です。この場合、レビューは操作の実行前（ツール承認ガードレールによる）、または実行直後（人が確認できる<a href="https://about.gitlab.com/ja-jp/blog/one-vulnerability-view/" rel="">監査証跡</a>による）のいずれかで行う必要があります。</li></ul><h3 id="定義しておくべき重要な意思決定ポイント">定義しておくべき重要な意思決定ポイント</h3><p>コードレビュー、テストと検証、デプロイ承認は、いずれも次のような問いへの答えを通じて定義しておくべきです。</p><ul><li>これらのうち、エージェントが単独で完了できるものはどれか</li><li>変更を進める前に、特定の担当者による承認が必要なものはどれか</li></ul><p>実際には、各チェックポイントにはそれぞれ固有の実施メカニズムが必要です。例えば次のような形が考えられます。</p><ul><li><a href="https://docs.gitlab.com/ja-jp/user/application_security/policies/merge_request_approval_policies/" rel="">マージリクエスト承認ポリシー</a>は、マージリクエストを開いたのがエージェントか開発者かにかかわらず、着地前に誰の承認が必要かを定めます。</li><li>エージェント向けの<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/tool-governance/" rel="">ツール承認ガードレール</a>は、ツールごとに、エージェントの操作を自律的に実行するか、レビューのために一時停止するか、あるいはブロックしたままにするかを決定します。</li><li><a href="https://docs.gitlab.com/ja-jp/user/application_security/policies/scan_execution_policies/" rel="">スキャナーの強制適用</a>は、組織が求めるセキュリティおよび品質チェックをクリアするまで、パイプラインの段階で変更を保持します。</li></ul><p>各チームの慣習に委ねるのではなく、組織全体で統一した<a href="https://about.gitlab.com/blog/a-developers-guide-to-building-an-ai-security-governance-framework/" rel="">AIガバナンスポリシー</a>を策定することをおすすめします。これにより、利用方法とポリシーの一貫性が保たれるとともに、監査担当者がAIの利用状況を検証しやすくなります。</p><h3 id="ディシジョンレイヤーが加える文脈">ディシジョンレイヤーが加える文脈</h3><p>こうした承認を、チャットのスレッドやレビュー担当者の記憶の中に消えていくままにするのではなく、構造化された記録として残しておくことには、長期的なメリットがあります。前四半期に認められた例外や、それがどのポリシーバージョンのもとで承認されたか、誰が承認したかといった情報は、監査担当者と将来のエージェントの双方が参照すべき、組織としての判断そのものです。</p><p>意思決定を、永続的でクエリ可能なイベントとして扱う企業には、次にレビューを行う人間またはエージェントが、ゼロからではなく、追加の文脈を踏まえた状態で始められるという利点もあります。</p><blockquote><p><a href="https://learn.gitlab.com/transcend-evergreen/whitepaper-use-case-for-context-graphs" rel="">ディシジョンレイヤー</a>について詳しく知り、意思決定イベントの記録がソフトウェア開発にどのような影響を与えうるかをご覧ください。</p></blockquote><h2 id="ai導入の成果を測る5つの指標">AI導入の成果を測る5つの指標</h2><p>最初から追跡しておくべき指標は5つのカテゴリーに分かれており、これらは個別にではなく、併せてレビューすべきものです。リスク指標を伴わない導入率の急上昇自体が、一つの警告サインとなるためです。</p><ol><li><strong>導入状況：</strong> AI機能の週次アクティブユーザー数、実行されたフローやエージェントの数、そしてどのチームがエージェント機能を有効化していて、どのチームがまだ有効化していないか。</li><li><strong>採用状況と品質：</strong> AI支援による変更のリバート率や、AIが作成したマージリクエストが手戻りなしでレビューを通過する頻度といった、後続工程の指標です。採用率単体の数値は、採用後にそのコードがどうなったかを示さないため、効果を測る指標としては単体では不十分です。</li><li><strong>リスク：</strong> ツール承認ガードレールが操作をレビューのために一時停止させた頻度、その一時停止がブロックまたは操作の修正につながった頻度、そしてエージェントの活動がポリシー違反を引き起こしたかどうかを追跡します。</li><li><strong>修正対応：</strong> プロジェクト全体のスキャナーカバレッジ、自動修正された脆弱性と手動でトリアージされた脆弱性の割合、そして検出後に問題を解消するまでの時間に注目します。</li><li><strong>ROI：</strong> 四半期分のデータが揃ったら、AI投資のROIを検証しましょう。エージェントが担うようになったタスクで開発者がどれだけの時間を削減できているかを追跡し、それを解決済みIssueやマージ済み変更あたりのコスト（クレジットや計算リソースの消費量）と比較します。<a href="https://about.gitlab.com/blog/measuring-ai-roi-at-scale-a-practical-guide-to-gitlab-duo-analytics/" rel="">AIのROIを詳しく知るためのチュートリアル</a>では、生の利用データをビジネス上のインサイトやROI計算に変換する方法を学べます。</li></ol><p>これら5つの指標をすべて併せて追跡することで、AI導入の問題を早期に発見できます。導入率や採用状況の面では順調に見えても、水面下でリスクが蓄積し、半年後の監査で初めて表面化するというケースもあります。上記の指標を用いることで、組織にとってのAIの価値を総合的に把握できます。</p><h2 id="gitlab-duo-agent-platformのガバナンスチェックリスト">GitLab Duo Agent Platformのガバナンスチェックリスト</h2><p>GitLab Duo Agent Platformへの標準化を進めるチームに向けて、パイロットの範囲を超えてエージェント型AIを拡大する前に確認しておきたい、実践的なチェックリストを紹介します。</p><ul className="contains-task-list"><li className="task-list-item"><input disabled type="checkbox" /> <a href="https://about.gitlab.com/ja-jp/ai-transparency-center/" rel="">AI Transparency Center</a>を確認し、データの利用方法、モデルベンダー、サブプロセッサに関するコミットメントを理解しておく。</li><li className="task-list-item"><input disabled type="checkbox" /> どのエージェントとフローの利用を承認するかをプラットフォームレベルで決定し、各チームに個別設定させるのではなく、GitLabの<a href="https://about.gitlab.com/ja-jp/blog/ai-catalog-discover-and-share-agents/#creating-sharing-and-managing-visibility" rel="">AIカタログ</a>を通じて公開する。</li><li className="task-list-item"><input disabled type="checkbox" /> ツールの機微性に応じて、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/tool-governance/" rel="">ツール承認ガードレール</a>を「常に許可」「常に確認」「常に拒否」のいずれかに設定する。</li><li className="task-list-item"><input disabled type="checkbox" /> <a href="https://docs.gitlab.com/ja-jp/development/ai_features/composite_identity/" rel="">コンポジットアイデンティティ</a>を設定し、すべてのエージェントの操作を要求元の人間に紐づけ、アクセスには両者の認可を必須とする。</li><li className="task-list-item"><input disabled type="checkbox" /> 規制対象のワークロードについては、データレジデンシー要件に照らして<a href="https://about.gitlab.com/ja-jp/blog/agentic-ai-enterprise-control-self-hosted-duo-agent-platform-and-byom/" rel="">セルフホスト展開と自社モデル持ち込みの選択肢</a>を評価する。</li><li className="task-list-item"><input disabled type="checkbox" /> コードレビュー、テストと検証、デプロイ承認について、明確なHuman-in-the-Loopのチェックポイントを文書化する。</li><li className="task-list-item"><input disabled type="checkbox" /> エージェントの活動について<a href="https://docs.gitlab.com/ja-jp/user/compliance/audit_event_streaming/" rel="">監査イベントストリーミング</a>を有効化し、すべての操作を組織がすでにレビューしている監査証跡に集約する。</li><li className="task-list-item"><input disabled type="checkbox" /> パイロットの範囲を超えて拡大する前に、<a href="https://docs.gitlab.com/ja-jp/user/analytics/" rel="">導入指標</a>（導入状況、採用状況、リスク、修正対応、ROI）を定義し、継続的なサイクルで併せてレビューする。</li></ul><p>このチェックリストは、リリースサイクルごとに見直しましょう。エージェント型AIのガバナンスは、一度設定すれば終わりというものではありません。新しいエージェント、新しいツール、新しいモデルが登場するたびに、ガバナンス上の論点が再び浮上することが少なくないためです。</p><h2 id="エージェント型aiのスピードとエンタープライズの統制が交わる場所">エージェント型AIのスピードとエンタープライズの統制が交わる場所</h2><p>エージェント型AIは、ガバナンスの対象そのものを変えます。コード補完が問うていたのは、その提案が良いものかどうかを開発者に確認することでした。エージェント型AIが問うのは、エージェントが何に触れることを許されているのか、誰がそれを承認したのか、そして後からそれを証明できるのか、という点です。</p><p>これらの問いに十分に答えるには、後から積み上げるのではなく、プラットフォーム自体に組み込まれたガバナンスが必要です。<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>は、実際に作業が行われるプラットフォームに、AIカタログ、承認ガードレール、監査イベントストリーミングを直接組み込んでいるため、ガバナンスが後付けになることはありません。ガードレールはワークフローと並行して動く別プロセスではなく、ワークフローそのものの一部であるため、チームはAIによるスピードとエンタープライズレベルの統制を同時に得られます。</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platformの無料トライアル</a>を今すぐ始めましょう。Freeプランでは、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">簡単な手順でサインアップ</a>できます。すでにGitLab PremiumまたはUltimateをご利用の場合は、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platformを有効化</a>し、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#included-credits/" rel="">サブスクリプションに含まれるGitLabクレジット</a>をご利用いただけます。</p></blockquote>]]></content>
        <author>
            <name>Julie Griffin</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/julie-griffin/</uri>
        </author>
        <published>2026-07-31T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLabが「Open Weights and American AI Leadership」の書簡に署名した理由]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/open-weight-model-letter/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/open-weight-model-letter/"/>
        <updated>2026-07-29T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>今週、GitLabは<a href="https://www.microsoft.com/en-us/corporate-responsibility/topics/open-weight/" rel="">Open Weights and American AI Leadershipの書簡</a>に署名しました。強くオープンなAIエコシステムを支持する、数多くのテクノロジー企業に名を連ねる形です。</p><p>書簡では、オープンウェイトがイノベーションを促し、顧客により大きなコントロールをもたらし、AIの安全性とセキュリティを実現する重要な道筋になると論じられています。これはGitLabも共有する政策的立場であり、エージェント型エンジニアリングに対する考え方の核心でもあります。チームが最高の成果を出せるのは、仕事に合った適切なモデルを自ら選べるときです。</p><p>GitLabは、スピードとコントロールを両立させるエージェント型ソフトウェアエンジニアリングのためのDevSecOpsインテリジェントオーケストレーションプラットフォームです。ソフトウェアライフサイクル全体をオーケストレーションし、チームのワークフローを通じて複数のモデルをサポートすることで、顧客の選択を第一に考えています。</p><h2 id="顧客がaiモデルを選択できるようにする">顧客がAIモデルを選択できるようにする</h2><p>最高クラスの基盤モデルとオープンウェイトモデル、その両方にガバナンスの効いたアクセスを持ちたいというニーズが、多くの組織で高まっています。GitLabはこの両方をサポートします。</p><p>基盤モデルは汎用的な能力で先行することが多く、オープンウェイトモデルはコスト、デプロイメント、データレジデンシーの面で顧客にコントロールをもたらします。両者を必要に応じて組み合わせられるようにすること、それがGitLabの目指すところです。</p><p>企業のリーダーにとって特に重い意思決定の1つが、ソフトウェアや戦略的知的財産を、セキュリティ・プライバシー・競争上の脅威からどう守るかという問題です。特定のクラウドや特定のAIモデルプロバイダーに縛られるべきではありません。</p><p>GitLabは、クラウドニュートラルかつAIモデルニュートラルを実現する唯一のプラットフォームです。ただし、この選択肢が意味を持つのは、モデル市場がオープンであり続けてこそ。オープンウェイトモデルがあるからこそ、開発チームはコードのコントロールを保ちながら、必要であればエアギャップ環境も含め、AIモデルの実行場所を自由に選べます。</p><h2 id="私たちのスタンス">私たちのスタンス</h2><p>政策立案者と同じく、GitLabも安全でセキュアなAIエコシステムを望んでおり、オープン性はその実現に欠かせない要素だと考えています。真の悪用に対処するための、的を絞ったリスクベースの保護策とツールを前提としながら、オープンウェイトモデルを開発・配布・利用する能力を維持する政策を支持します。こうした介入があってこそ、オープン・プロプライエタリを問わず複数のモデルプロバイダーが実力で競い合える、健全なエコシステムが育ちます。その先にあるのが、イノベーションとセキュリティ、そして顧客の選択という利益です。</p><h2 id="関連リンク">関連リンク</h2><ul><li><a href="https://about.gitlab.com/ja-jp/ai-transparency-center/" rel="">GitLab AI Transparency Center</a></li><li><a href="https://about.gitlab.com/blog/securing-ai-together-gitlabs-partnership-with-security-researchers/" rel="">Securing AI together: GitLab&#39;s partnership with security researchers</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/why-enterprise-independence-matters-more-than-ever-in-devsecops/" rel="">DevSecOpsにおける企業の独立性がこれまで以上に重要な理由</a></li></ul>]]></content>
        <author>
            <name>Bill Staples</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/bill-staples/</uri>
        </author>
        <published>2026-07-29T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Claude Opus 5、GitLabで最難関タスクに挑む]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/claude-opus-5-on-gitlab-duo-agent-platform/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/claude-opus-5-on-gitlab-duo-agent-platform/"/>
        <updated>2026-07-27T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>日常的なタスクでのミスは、せいぜい数分の損失で済みます。しかし、大規模なリファクタリングや、数ヶ月分のコミット履歴にまたがるデバッグ作業でのミスは、その代償がはるかに大きくなります。何百ものやり取りの中で静かに積み重なっていくためです。気づいた頃には、その上に積み上げられたすべてのステップをやり直さなければなりません。これこそが、スピードが評価される作業と、最初から正確さが求められる高難易度の作業との違いです。</p><p>Anthropicの最新AIモデルであるClaude Opus 5が、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/" rel="">GitLab Duo Agent Platform</a>で利用可能になりました。エージェントに最も高い能力が求められるタスクのために構築されたモデルです。Opus 5を使えば、エンジニアリングチームはより複雑で重要な作業をエージェントに任せられるようになります。GitLabの社内評価では、Opus 5はベンチマークタスクの93.3%を解決し、Opus 4.8の解決率73.0%から20.3ポイント向上しました。</p><blockquote><p><strong>「AIエージェントから最大の価値を引き出しているチームは、最も難易度が高く、重要度の高い作業を任せても、最初から最後まで推論が破綻しないと信頼できています」</strong></p><p>— Stuart Moncada、GitLab AI Product Management担当VP</p></blockquote><h2 id="複雑な状況でも揺るがない推論力">複雑な状況でも揺るがない推論力</h2><p>最も難易度の高い作業をエージェントに任せることをためらうチームも少なくありません。ミスをやり直すコストが大きいためです。長時間にわたる高難易度のタスクでは、エージェントの推論が最初から最後まで一貫していなければなりません。Opus 5のより深い推論力により、複数ファイルにまたがる機能追加や大規模なリファクタリングといった複雑なタスクの多くが、一度で正しく解決されるようになります。これにより、失敗した実行結果を診断し、再度プロンプトを入力する時間を削減できます。GitLab Duo Agent PlatformでOpus 5を利用しているチームでは、部分的な修正パッチが減り、より多くの作業がマージ可能な状態で戻ってくることが期待できます。</p><p>この信頼性は、完遂率にも表れています。GitLabの社内テストでは、Opus 5は着手したタスクの100%を完了しており、これはOpus 4.8の完了率と同水準です。差が表れるのはその成果物の質です。Opus 5が生成したソリューションはより多くが正しいと検証されており、解決率は93.3%に達し、Opus 4.8の73.0%を上回りました。</p><p>GitLabの評価に含まれるあるタスクでは、CLI認証フローにモック可能なSSOログインサポートを実装することが求められました。新しいエクスポート型や設定フィールドを含む、5つのファイルにまたがる変更です。テストした他の複数のモデルは修正を試みることすらできませんでした。Opus 5は実装全体を構築し、コミットを行い、マージリクエストをオープンしました。</p><p>コードレビューにおいても、同様の精度が期待できます。Opus 5は実際のバグを検出し、誤検出はわずかです。そのため、チームは本当に対処すべき脆弱性に集中でき、ノイズの選別に費やす時間を減らせます。</p><p>複数のエージェントを同時に実行するワークロードでも、エージェント間の競合を解消する手間が減ります。Opus 5はサブエージェント同士の連携を保ち、互いの作業領域に干渉しないようにします。ライターと検証役を分けるパターンにより、あるエージェントが別のエージェントの出力を承認前にチェックする仕組みが働き、問題がユーザーの手元に届く前にエージェント間で検出されます。より長時間かつ自律性の高いセッションを、より多くのエージェントを並列稼働させて実行しているチームほど、その効果を強く実感できます。</p><p>複数のエージェントを並列実行するコストに敏感なワークロードでは、<a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-11-budget-guardrails-for-gitlab-credits/" rel="">GitLabクレジットの利用上限</a>を設定することで支出に上限を設けられるため、並列作業が予算を超えて実行されることはありません。</p><h2 id="速度と深さを両立">速度と深さを両立</h2><p>GitLabの最も難易度が高いベンチマークタスクにおいても、Opus 5は信頼性と速度を両立しています。実行時間が長くなる95パーセンタイル値で見ると、Opus 5はOpus 4.8より2.2%速く完了し(768秒 対 784.98秒)、Sonnet 4.6より21.9%速く完了しました(768秒 対 982.57秒)。信頼性と速度は連動して向上します。チームにとっては、最も時間のかかる実行であっても、より予測しやすいターンアラウンドタイムを意味します。</p><h2 id="タスクに応じて最適なモデルを選択">タスクに応じて最適なモデルを選択</h2><p>最適なモデルは組織全体で一律に決めるものではなく、目の前のタスクによって異なります。Sonnetクラスのモデルは日々の開発作業の大部分を担い、速く、コストを抑えられ、多くのチームが日常的に実行する作業に対して信頼性があります。より深い推論力が求められる作業、たとえば最も難易度の高いデバッグや大規模なリファクタリング、やり直したくない重要な意思決定には、Opus 5を選んでください。</p><p>この選択は、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/model_selection/" rel="">モデル選択</a>機能を通じて、GitLabインスタンス上で直接設定できます。どのモデルを選んでも、GitLab Duo Agent Platform上のすべてのモデルに共通するコンテキストレイヤー、ポリシーチェック、監査証跡といった同一のインフラストラクチャ内で実行されます。</p><p><img alt="GitLab上のOpus 5" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1785170335/jjimrfrttyyskwa96lnk.png" /></p><h2 id="opus-5を使ってみる">Opus 5を使ってみる</h2><p>Claude Opus 5は現在、GitLab Duo Agent Platformで利用可能です。他のモデルと同様に、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#models" rel="">GitLabクレジット</a>で利用します。Duo Agent Platformをまだお使いでない方は、今すぐ<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">無料トライアルを開始</a>してください。すでにGitLab PremiumまたはUltimateをご利用の方は、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platformを有効化</a>し、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#included-credits" rel="">サブスクリプションに含まれるGitLabクレジット</a>をご利用ください。</p>]]></content>
        <author>
            <name>Brittany Lutz</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/brittany-lutz/</uri>
        </author>
        <published>2026-07-27T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cursor×GitLabで、安全に速くJavaをモダナイズする]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/modernize-java-with-cursor-and-gitlab/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/modernize-java-with-cursor-and-gitlab/"/>
        <updated>2026-07-22T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>「Java 8をJava 21にモダナイズする」と言うと、単一のタスクのように聞こえます。しかし実際はそうではありません。ビルド、ランタイム、依存関係、API、並行処理、テスト、コンテナ、本番環境での挙動など、複数の要素が同時に絡み合う作業です。これらすべてを1つのプロンプトでエージェントに任せてしまうと、誰も安全にレビューできないほど巨大なマージリクエストができあがってしまいます。</p><p>AIコーディングエージェントであるCursorは、こうした問題のうち焦点を絞った部分を得意としています。失敗しているテストや範囲が限定されたイシューを1つ渡せば、実装を調査し、何が問題だったのかを説明し、修正案を提示し、開発フローから離れることなくテストを実行できます。しかし、複数ステップにわたる移行全体で「安全」が何を意味するかは、Cursorが単独で判断できるものではありません。</p><p>ここで登場するのがGitLabです。<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">Duo Agent Platform</a>がソフトウェアライフサイクルの残りの部分でAIワークフローをオーケストレーションし、コーディングエージェントの作業を検証できるよう設計されています。エピックによるイシューの階層構造により、計画は永続的でレビュー可能なものになります。GitLab Model Context Protocol（<a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">MCP</a>）サーバーは、こうしたソフトウェア開発ライフサイクルのコンテキストをCursorに取り込みます。CI/CD、セキュリティスキャン、コードレビュー、影響分析、そしてサービス横断的なテストが、本番環境での挙動を変更する前に必要となるエビデンスを提供します。</p><p>このチュートリアルでは、CursorとGitLabを使った3つのユースケースを解説します。</p><ol><li><a href="#fix-a-failing-end-to-end-test-with-cursor">Cursorで失敗しているJavaのエンドツーエンドテストを修正する</a></li><li><a href="#prepare-quality-gates-for-java-21-modernization">Java 8から21へのモダナイズに向けて品質ゲートを準備する</a></li><li><a href="#modernize-http-connection-handling-with-java-21">Java 21でHTTP接続処理をモダナイズする</a></li></ol><p>この進め方には意味があります。まず小さく始め、プロジェクトのコンテキストを加え、そのうえで1つの境界をモダナイズする。Cursorはその境界の中で高速に動きます。そのスピードを安全に保っているのが、Code Review Flow、Developer Flow、CI/CD、コードオーナーの承認、そして影響分析です。これらは省略可能なチェックポイントではなく、エージェントが作成したすべてのマージリクエストを他と同じ基準に保つための仕組みです。</p><p>3つのユースケースすべてで、Tanuki IoT Platformの<a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">Java HTTPメトリクスコレクター</a>を使用します。このコレクターはHTTPエンドポイントをチェックし、レスポンスステータスや応答時間などのメトリクスを記録して、<a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/backend/rust-metrics-store" rel="">Rustメトリクスバックエンド</a>に読み取り値を送信します。これにより、モダナイズ対象となる目に見えるアプリケーション境界と、検証すべき実際のバックエンド契約が得られます。以前、<a href="https://about.gitlab.com/ja-jp/blog/fix-bugs-with-codex-and-gitlab/" rel="">Codex and GitLabのチュートリアル</a>でこのRustバックエンドを構築しており、現在は本番アーキテクチャの一部として機能しています。</p><pre className="language-mermaid shiki shiki-themes github-light" code="flowchart LR
  subgraph sources[&quot;HTTP metric sources&quot;]
    direction TB
    health[&quot;Health endpoint&quot;]
    maintenance[&quot;Maintenance endpoint&quot;]
  end

  java[&quot;Java HTTP metrics collector&quot;]
  rust[(&quot;Rust metrics-store backend&quot;)]

  java --&gt;|&quot;GET&quot;| health
  java --&gt;|&quot;GET&quot;| maintenance
  java --&gt;|&quot;POST /api/metrics&quot;| rust
  rust --&gt;|&quot;HTTP response&quot;| java

  classDef source fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#0f172a
  classDef focus fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
  classDef backend fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a

  class health,maintenance source
  class java focus
  class rust backend
" language="mermaid" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">flowchart LR
</span></span><span class="line" line="2"><span class="sgsFI">  subgraph sources[&quot;HTTP metric sources&quot;]
</span></span><span class="line" line="3"><span class="sgsFI">    direction TB
</span></span><span class="line" line="4"><span class="sgsFI">    health[&quot;Health endpoint&quot;]
</span></span><span class="line" line="5"><span class="sgsFI">    maintenance[&quot;Maintenance endpoint&quot;]
</span></span><span class="line" line="6"><span class="sgsFI">  end
</span></span><span class="line" line="7"><span emptyLinePlaceholder>
</span></span><span class="line" line="8"><span class="sgsFI">  java[&quot;Java HTTP metrics collector&quot;]
</span></span><span class="line" line="9"><span class="sgsFI">  rust[(&quot;Rust metrics-store backend&quot;)]
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sgsFI">  java --&gt;|&quot;GET&quot;| health
</span></span><span class="line" line="12"><span class="sgsFI">  java --&gt;|&quot;GET&quot;| maintenance
</span></span><span class="line" line="13"><span class="sgsFI">  java --&gt;|&quot;POST /api/metrics&quot;| rust
</span></span><span class="line" line="14"><span class="sgsFI">  rust --&gt;|&quot;HTTP response&quot;| java
</span></span><span class="line" line="15"><span emptyLinePlaceholder>
</span></span><span class="line" line="16"><span class="sgsFI">  classDef source fill:#f8fafc,stroke:#64748b,stroke-width:2px,color:#0f172a
</span></span><span class="line" line="17"><span class="sgsFI">  classDef focus fill:#dcfce7,stroke:#16a34a,stroke-width:3px,color:#0f172a
</span></span><span class="line" line="18"><span class="sgsFI">  classDef backend fill:#e0f2fe,stroke:#0284c7,stroke-width:2px,color:#0f172a
</span></span><span class="line" line="19"><span emptyLinePlaceholder>
</span></span><span class="line" line="20"><span class="sgsFI">  class health,maintenance source
</span></span><span class="line" line="21"><span class="sgsFI">  class java focus
</span></span><span class="line" line="22"><span class="sgsFI">  class rust backend
</span></span></code></pre><h2 id="前提条件">前提条件</h2><ol><li><a href="https://www.cursor.com/" rel="">Cursor</a>がインストール・設定済みであること。本チュートリアルではCursor IDEを使用します。</li><li>Javaコレクターのソース、イシュー、モダナイズ用の作業アイテムを含むGitLabプロジェクト。<a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">Tanuki IoT PlatformのJava HTTPメトリクスコレクター</a>を使用できます。</li><li>最初のユースケース用にJava 8、モダナイズ作業用にJava 21</li><li>ローカルビルドと機能テスト用のMaven、Docker、Docker Compose</li><li>GitLabインスタンスまたはトップレベルグループで<a href="https://docs.gitlab.com/user/model_context_protocol/mcp_server/" rel="">有効化</a>されたGitLab MCPサーバー</li><li>Javaコレクタープロジェクトで有効化された<a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">GitLab Duo Code Review Flow</a>、<a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/developer/" rel="">Developer Flow</a>、そして<a href="#automate-impact-analysis-for-modernization-breaking-changes">破壊的変更の影響分析用カスタムフロー</a>。これらのフローは、エージェントが作成するすべてのマージリクエストにプロジェクトのガードレールを適用します。</li></ol><h3 id="gitlabプロジェクトを準備する">GitLabプロジェクトを準備する</h3><p>自分の環境でこのワークフローを再現したい場合は、まずプロジェクトをインポート・クローンし、Cursorでプロジェクトを開くところから始めます。</p><ol><li><a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector" rel="">Tanuki IoT PlatformのJava HTTPメトリクスコレクター</a>を、未解決のイシューも含めてGitLab環境にインポートします。</li><li>プロジェクトをローカル環境にクローンし、そのディレクトリに移動します。</li><li>Cursorでプロジェクトを開きます。</li></ol><pre className="language-shell shiki shiki-themes github-light" code="git clone https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector.git
cd java-http-metrics-collector

cursor .
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">git</span><span class="sYBdl"> clone</span><span class="sYBdl"> https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector.git
</span></span><span class="line" line="2"><span class="sYu0t">cd</span><span class="sYBdl"> java-http-metrics-collector
</span></span><span class="line" line="3"><span emptyLinePlaceholder>
</span></span><span class="line" line="4"><span class="s7eDp">cursor</span><span class="sYBdl"> .
</span></span></code></pre><p>このプロジェクトには、リポジトリの指示とMavenコマンドが記載された<code>AGENTS.md</code>ファイルが含まれています。Cursorはこのローカルの指示を利用して、プロジェクトの構成や変更のテスト方法を理解できます。</p><p><img alt="CursorでAGENTS.mdの指示とともに開かれたJava HTTPメトリクスコレクター" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733478/l4hqhlzxekmhobu2qg0v.png" /></p><h2 id="cursorで失敗しているエンドツーエンドテストを修正する">Cursorで失敗しているエンドツーエンドテストを修正する</h2><p>このコレクターでは、エンドポイントから期待するHTTPステータスコードをユーザーが設定できます。しかし実装上は、すべての<code>2xx</code>レスポンスを成功として扱ってしまい、<code>503</code>エラーは期待どおりに設定されていても常に失敗として扱われていました。</p><p>エンドツーエンドテストはすでにこの不整合を検出していますが、CI/CDジョブは失敗が許容される設定になっています。そのため、本来役立つはずのシグナルが、当たり前に受け入れられる背景ノイズになってしまっていました。</p><p><img alt="失敗しているエンドツーエンドテストと、失敗が許容されているCI/CDジョブ" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733536/uaxqalqoceujyja7usmv.png" /></p><h3 id="cursorで再現修正する">Cursorで再現・修正する</h3><p>この問題はローカル環境で再現できます。Cursor IDEで新しいチャットを開き、まずはプロンプトで観測された問題を直接説明することから始めます。</p><pre className="language-markdown shiki shiki-themes github-light" code="Can you help me fix the end-to-end tests in this project? Please create an analysis first, then fix it, and run the tests again.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Can you help me fix the end-to-end tests in this project? Please create an analysis first, then fix it, and run the tests again.
</span></span></code></pre><p>Cursorはまず、エンドポイントの設定を<code>HttpCollector</code>と失敗しているエンドツーエンドテストまで遡って調査し、根本原因を特定します。</p><p><img alt="問題と根本原因を分析するCursor" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733605/ojz2pzcftwjfcfscjtwg.png" /></p><p>対象のテストとMavenのテストスイート全体が通過したら、ブランチとマージリクエストを作成します。これまで失敗が許容されていたエンドツーエンドジョブは、決定的に成功する状態になれば、必須ジョブに変更できます。</p><pre className="language-markdown shiki shiki-themes github-light" code="Can you create a git branch and merge request?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Can you create a git branch and merge request?
</span></span></code></pre><h3 id="レビューとマージ">レビューとマージ</h3><p>マージリクエストを作成すると、CI/CDのビルドとテスト、セキュリティスキャンが自動的にトリガーされます。</p><p><img alt="エンドツーエンドテストが修正されたマージリクエスト" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733663/koz3yb3zq5ewwl6vrbgk.png" /></p><p>続いて、<a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">GitLab Duo Code Review</a>が、プロジェクト固有のJavaレビュー指示に基づいて、対象の変更をレビューします。</p><p><img alt="コードレビューのフィードバック" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733717/cjxeoecb4fa7yrvy7i90.png" /></p><p>レビューで具体的な問題が指摘された場合は、マージする前にDeveloper Flowを通じて対応します。ここが重要なポイントです。Code Review Flowは、Cursorがどれだけ速く生成したものであっても、エージェントが作成したすべてのマージリクエストが他と同じ基準を満たすことを保証します。マージリクエストは、あくまでコラボレーションと意思決定の場であり続けます。</p><p><img alt="レビューのフィードバックに対応するDeveloper Flow" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733848/wehjrbkhhyhze8vtkaby.png" /></p><p>この修正により、動作面のベースラインが得られます。ランタイムの移行と混在させることなく、実際のバグを修正できたことで、テストは今後のモダナイズ作業を通じて期待ステータスの契約を守ってくれます。</p><p>Cursorが期待どおりのエンドツーエンドテストをどのように調査・修正するかは、以下の動画で確認できます。</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/vpPt8TICiZY" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="java-21へのモダナイズに向けて品質ゲートを準備する">Java 21へのモダナイズに向けて品質ゲートを準備する</h2><p>最初の修正は、リポジトリのコンテキストだけで完結しました。次のリクエストははるかに大規模です。コレクターをJava 8からJava 21へモダナイズすることです。</p><p>この作業については、すでに<a href="https://gitlab.com/groups/gitlab-da/demo-environments/tanuki-iot-platform/-/work_items/13" rel="">Javaモダナイズのエピック</a>に計画のコンテキストがそろっています。子の作業アイテム、チームでの議論、マージリクエストを伴う調査、パイプラインの履歴、依存関係、セキュリティの検出結果などです。これらの詳細はローカルのチェックアウトには存在しません。そのすべてを1つの巨大なプロンプトにコピーするのではなく、MCPを使ってGitLabのコンテキストをCursorに取り込むことができます。</p><h3 id="cursorでgitlab-mcpサーバーを設定する">CursorでGitLab MCPサーバーを設定する</h3><p>GitLab MCPサーバーが、自分のインスタンスまたはトップレベルグループで<a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#prerequisites" rel="">有効化されている</a>ことを確認してください。Cursorは、追加の依存関係なしに直接接続できるHTTPトランスポートを使用します。</p><p><a href="https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#connect-cursor-to-the-gitlab-mcp-server" rel="">CursorをGitLab MCPサーバーに接続する</a>には、以下の手順に従います。</p><ol><li>Cursorで、<strong>Settings &gt; Cursor Settings &gt; Tools &amp; MCP</strong>に移動します。</li><li><strong>Installed MCP Servers</strong>の下にある<strong>New MCP Server</strong>を選択します。</li><li>開かれた<code>mcp.json</code>ファイルの<code>mcpServers</code>キーに、以下の定義を追加します。GitLab.comの場合は<code>&lt;gitlab.example.com&gt;</code>を<code>gitlab.com</code>に置き換えてください。GitLab Self-ManagedまたはDedicatedの場合は、自分のGitLabインスタンスのURLを使用してください。</li></ol><pre className="language-json shiki shiki-themes github-light" code="{
  &quot;mcpServers&quot;: {
    &quot;GitLab&quot;: {
      &quot;type&quot;: &quot;http&quot;,
      &quot;url&quot;: &quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
    }
  }
}
" language="json" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">{
</span></span><span class="line" line="2"><span class="sYu0t">  &quot;mcpServers&quot;</span><span class="sgsFI">: {
</span></span><span class="line" line="3"><span class="sYu0t">    &quot;GitLab&quot;</span><span class="sgsFI">: {
</span></span><span class="line" line="4"><span class="sYu0t">      &quot;type&quot;</span><span class="sgsFI">: </span><span class="sYBdl">&quot;http&quot;</span><span class="sgsFI">,
</span></span><span class="line" line="5"><span class="sYu0t">      &quot;url&quot;</span><span class="sgsFI">: </span><span class="sYBdl">&quot;https://&lt;gitlab.example.com&gt;/api/v4/mcp&quot;
</span></span><span class="line" line="6"><span class="sgsFI">    }
</span></span><span class="line" line="7"><span class="sgsFI">  }
</span></span><span class="line" line="8"><span class="sgsFI">}
</span></span></code></pre><ol start="4"><li>ファイルを保存し、ブラウザでOAuth認証ページが開くのを待ちます。開かない場合は、Cursorを終了して再起動してください。</li><li>ブラウザで認証リクエストを確認し、承認します。</li><li>Cursorに戻り、表示されているツールの一覧を確認します。</li></ol><p><img alt="OAuth認証後、Cursorに接続されたGitLab MCPサーバー" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733928/anreghjemkrnuezohhzh.png" /></p><p>これで新しいチャットを開始し、利用可能なGitLab MCPツールに基づいて質問できるようになります。</p><p>CursorがGitLab MCPで認証すると、既存のGitLabアイデンティティとして動作します。アクセスできるのは、自分がすでにアクセス権を持つプロジェクトやリソースに限られます。MCPは承認済みのコンテキストをIDEに取り込むものであり、GitLabの権限をバイパスするものではありません。</p><h3 id="java-21モダナイズに向けて環境を準備する">Java 21モダナイズに向けて環境を準備する</h3><p><a href="https://gitlab.com/groups/gitlab-da/demo-environments/tanuki-iot-platform/-/work_items/13" rel="">Java 8から21へのモダナイズのエピック</a>では、必要な計画がより小さなイテレーションに分割されており、各成果物と変更がそれぞれ単独でテスト可能になっています。</p><p><img alt="子イシューを持つGitLabエピック" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784733989/thwfzpvbs7tcm0un2xg6.png" /></p><p>最初のステップは、CI/CDインフラでJava 8と21の両方を並行してテストできるようにすることです。各モダナイズタスクの開始時点からテストカバレッジを高めていくことも必須です。</p><p>Cursor IDEを開き、以下のプロンプトを使って計画のコンテキストを取得します。</p><pre className="language-markdown shiki shiki-themes github-light" code="Please help me modernize this sensor from Java 8 to 21. We want to start with the base line for CI/CD builds in work item 14, and then also look into test coverage from 21. Start the implementation in a new Git branch called `maint-java-21` so we can continue testing different scenarios.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">Please help me modernize this sensor from Java 8 to 21. We want to start with the base line for CI/CD builds in work item 14, and then also look into test coverage from 21. Start the implementation in a new Git branch called </span><span class="sYu0t">`maint-java-21`</span><span class="sgsFI"> so we can continue testing different scenarios.
</span></span></code></pre><p>CIビルドの可視化に関するイシューの作業が完了したら、Cursorは<code>create_workitem_note</code>のMCPツールを使って、イシューに要約コメントを追加することもできます。</p><p><img alt="GitLab MCPサーバーのツール呼び出しによるCursorの要約" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734071/bks4lwnncddardc05r3e.png" /></p><p>新しいマージリクエストは、CI/CDパイプラインとCode Review Flowの両方をトリガーします。Code Review Flowは、開発スタイルガイドが要求するドキュメント化についてコメントを残します。</p><p><img alt="マージリクエストにおけるコードレビューのフィードバック" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734168/z7ootq0wqmom3yxmdexj.png" /></p><p>Developer Flowのサービスアカウントにメンションすることで、GitLabのUI上でフィードバックにすぐ対応できます。</p><pre className="language-markdown shiki shiki-themes github-light" code="@duo-developer-&lt;group-name&gt; Can you help address the review feedback?
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">@duo-developer-&lt;group-name&gt; Can you help address the review feedback?
</span></span></code></pre><p>このプロンプトによって新しいバックグラウンドセッションが開始されるため、その間は他のタスクに集中できます。あるいは、Cursor IDEに戻り、チャットでマージリクエストのレビューフィードバックに対応するよう指示することもできます。</p><p><img alt="Cursor IDEのプロンプト「MRにレビューフィードバックがあります。修正を手伝ってください」" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734264/n5ky8nj73bpb1imzrj6h.png" /></p><p>Cursorは変更を実装し、<code>create_merge_request_note</code>のMCPツールを使って、マージリクエストのスレッドにコメントを追加します。</p><p><img alt="コードレビューのコメントに対応したGitLabマージリクエスト" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734337/hah0qxe8ei5h6iefzqz4.png" /></p><p>この変更では、一時的なJava 8のベースラインを維持しつつ、Java 21向けの独立したビルドとテスト検証を追加します。これにより、ソースコードがJava 21専用のAPIを使い始める前の段階で、互換性がパイプライン上で可視化されます。こうした品質ゲートが整えば、以降のエージェント主導のすべての変更は、レビューされ、テストされ、追跡可能になります。これは他のマージリクエストと同じ基準であり、だからこそCursorを安心して高速に動かせるのです。</p><p>CursorがGitLab MCPを使って品質ゲートを準備し、コードレビューのフィードバックに対応する様子は、以下の動画で確認できます。</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/bqT2exfE5Go" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="java-21でhttp接続処理をモダナイズする">Java 21でHTTP接続処理をモダナイズする</h2><p>Java HTTPメトリクスコレクターは現在、Java 8の従来型API<code>HttpURLConnection</code>を使用しています。Java 21ではHTTPライブラリが<code>java.net.http.HttpClient</code>にモダナイズされましたが、これは単なる機械的なリネームではありません。リダイレクト、制限付きヘッダー、タイムアウトの範囲、レスポンスボディ、割り込み、接続の再利用など、挙動が異なりうる要素は多岐にわたります。だからこそ、この実装は1つの範囲が限定された作業アイテム、<a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/work_items/16" rel="">Replace HttpURLConnection with java.net.http.HttpClient</a>に閉じています。実際にやってみましょう。</p><p>Cursor IDEで新しいチャットを開き、変更の実装を依頼します。</p><p><strong>注:</strong> このユースケースでは、変更の検証にローカルのDocker Compose環境を使用します。この挙動を再現したい場合はDockerとDocker Composeをインストールしてください。不要な場合は2つ目のプロンプトを省略してください。</p><pre className="language-markdown shiki shiki-themes github-light" code="We want to continue modernizing the app to Java 21 - use the same maint-java-21 branch, and start implementing issue 16.

Verify the changes locally using the docker compose setup, after making the changes.
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">We want to continue modernizing the app to Java 21 - use the same maint-java-21 branch, and start implementing issue 16.
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="sgsFI">Verify the changes locally using the docker compose setup, after making the changes.
</span></span></code></pre><p>GitLab MCPサーバーは、イシューのコンテキスト、受け入れ基準、依存関係、関連する議論を提供します。最初のコードモダナイズのイシューは、意図的に同期的かつ限定的な範囲にとどめています。<code>HttpURLConnection</code>を、再利用可能な1つの<code>HttpClient</code>に置き換えるだけで、仮想スレッドの追加や時間モデルの変更、関連のない依存関係の修正は行いません。これらは価値のあるフォローアップですが、一緒に行ってしまうと、挙動の変更を切り分けてレビューし、ロールバックすることが難しくなります。</p><h3 id="ローカルで実装検証する">ローカルで実装・検証する</h3><p>対象を絞ったローカルのHTTPサーバーテストでは、メソッド、ヘッダー、期待されるステータスコードと想定外のステータスコード、リダイレクト、タイムアウト、レスポンスのメタデータ、接続の失敗、割り込みをカバーします。</p><p><img alt="ローカルのMavenテストを実行するCursor" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734391/fuxi3jcrcg5alhuqcrje.png" /></p><p>続いてDocker Composeの機能テストにより、認証済みの読み取り値が<code>rust-metrics-store</code>バックエンドに引き続き到達することを確認します。</p><p><img alt="Rustバックエンドを使ってローカルのDocker Composeを実行するCursor" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734439/w83djmi4df9dfynb9dfj.png" /></p><p>変更後にCI/CDパイプラインが失敗している場合は、GitLab MCPサーバーのツールを活用し、コンテキストを切り替えることなくCursor IDE上で直接調査・修正できます。</p><p><img alt="CI/CDジョブのログを取得するGitLab MCPサーバーのツール呼び出しを含むCursor IDE" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734501/g4mfs2zdrffzb9pd8v09.png" /></p><p>GitLabのUIでは、<a href="https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/fix_pipeline/" rel="">Fix CI/CD Pipeline Flow</a>を使用するか、<a href="https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/ci_expert_agent/" rel="">CI Expertエージェント</a>に助けを求めることができます。</p><h3 id="cicdとレビューのエビデンス">CI/CDとレビューのエビデンス</h3><p>GitLab CI/CD、GitLab Duo Code Review、セキュリティスキャン、そしてAIによる影響分析が、マージリクエストにおける最終的なエビデンスとなります。それでも、微妙な境界においては人によるレビューが最も重要です。意図的な挙動の違いは、デプロイ後に発覚するのではなく、マージリクエストの時点で明示されているべきです。</p><p><img alt="影響分析を伴うDeveloper Flow" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734549/jxqds2bwzcedn7yafdvr.png" /></p><p>CursorとGitLabがコレクターのHTTPライブラリをJava 21にどのようにモダナイズするかは、以下の動画で確認できます。</p><figure className="video_container">
  <iframe src="https://www.youtube.com/embed/AZEDvb474n0" frameBorder="0" allowFullScreen="true"> </iframe></figure><h2 id="cursorとgitlabを使うためのヒント">CursorとGitLabを使うためのヒント</h2><p>CursorとGitLabを組み合わせて使うためのヒントを紹介します。</p><h3 id="モダナイズに伴う破壊的変更の影響分析を自動化する">モダナイズに伴う破壊的変更の影響分析を自動化する</h3><p><a href="https://www.youtube.com/watch?v=AZEDvb474n0" rel="">3つ目のユースケース</a>では、Developer Flowが破壊的変更の影響分析を行う様子を紹介しました。このワークフローは、マージリクエストの準備が整ったとき、あるいはパイプラインが正常なときにトリガーされる自動化された<a href="https://docs.gitlab.com/user/duo_agent_platform/flows/custom/" rel="">カスタムフロー</a>に変えることができます。追加のコンテキストは、コード、作業アイテム、マージリクエスト、脆弱性などを横断するコンテキストグラフを提供する<a href="https://about.gitlab.com/ja-jp/blog/introducing-gitlab-orbit/" rel="">GitLab Orbit</a>から取得できます。</p><p>サンプルのフローは、AI Catalogの<a href="https://gitlab.com/explore/ai-catalog/flows/1013017/" rel="">MR Impact analysis (Orbit)</a>から確認できます。着想をくれたチームメイトのFatima Sarah Kalidに感謝します。カスタムフローは<a href="https://about.gitlab.com/ja-jp/blog/multi-step-software-delivery-with-agentic-flows/" rel="">GitLab 19.2</a>で一般提供されています。</p><p><img alt="AI Catalogにおけるカスタムフロー" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734604/nk2faraxdhghiktndrs5.png" /></p><p><img alt="GitLab Duo Agent PlatformとOrbitにおけるカスタムフローを使ったマージリクエストの影響分析" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784734740/app3pnjwqzoyulojkomq.png" /></p><h3 id="エージェント向けにガイドラインと境界を明文化する">エージェント向けにガイドラインと境界を明文化する</h3><h4 id="javaのためのagentsmd">JavaのためのAGENTS.md</h4><p><a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/" rel=""><code>AGENTS.md</code></a>ファイルは、プロジェクトのアーキテクチャ、コマンド、コードスタイル、テストに関する期待、境界をCursorや他のコーディングエージェントが理解する助けとなります。こうした指示はコードのそばに置き、検証できる程度に具体的にしておきましょう。</p><p><a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/AGENTS.md?ref_type=heads" rel="">Java HTTPメトリクスコレクタープロジェクトの<code>AGENTS.md</code></a>からの例です。</p><pre className="language-markdown shiki shiki-themes github-light" code="# Java HTTP Metrics Collector - Agent Instructions

## Overview

The Java HTTP Metrics Collector is a REST API metrics collection sensor for the Tanuki IoT Platform. It monitors HTTP endpoints, collects performance metrics (response time, status codes, content length), and exports them in Prometheus text format. The application runs continuously with configurable collection intervals and supports concurrent endpoint monitoring.

## Code Style and Standards

### Java 8 Compatibility

- Do not modernize Java 8 code to Java 11+ features unless there is a GitLab issue or task specifically requesting modernization
- Target Java 8 for source and compilation: `maven.compiler.source=1.8` and `maven.compiler.target=1.8`
- Use Java 8 compatible patterns (e.g., anonymous inner classes instead of lambdas where appropriate)

### Documentation

- All public classes must have Javadoc describing purpose and usage
- All public methods must have Javadoc with `@param` and `@return` tags
- Include code examples in main class Javadoc

### Class Organization

- **Main entry point**: `HttpMetricsCollector` - orchestrates configuration loading, metric collection, and export
- **Collector**: `HttpCollector` - performs HTTP requests and collects metrics
- **Exporter**: `PrometheusExporter` - exports metrics in Prometheus text format
- **Models**: `CollectorConfig`, `EndpointConfig`, `HttpMetric` - data transfer objects

### Dependency Management

- Always use Maven for dependency management
- Use property-based version management for dependencies (e.g., `${jackson.version}`)
- Keep dependencies up-to-date in `pom.xml`

### Error Handling

- Use try-catch blocks with proper resource management (try-with-resources where applicable)
- Log errors using SLF4J Logger
- Gracefully handle configuration loading failures
- Implement proper shutdown hooks for resource cleanup

### Concurrency

- Use `ExecutorService` for concurrent HTTP requests
- Thread pool size is limited to the minimum of endpoint count and 10
- Properly shutdown executor service with timeout handling
- Use `Future` objects to collect results from concurrent tasks
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="surfw"># Java HTTP Metrics Collector - Agent Instructions
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="surfw">## Overview
</span></span><span class="line" line="4"><span emptyLinePlaceholder>
</span></span><span class="line" line="5"><span class="sgsFI">The Java HTTP Metrics Collector is a REST API metrics collection sensor for the Tanuki IoT Platform. It monitors HTTP endpoints, collects performance metrics (response time, status codes, content length), and exports them in Prometheus text format. The application runs continuously with configurable collection intervals and supports concurrent endpoint monitoring.
</span></span><span class="line" line="6"><span emptyLinePlaceholder>
</span></span><span class="line" line="7"><span class="surfw">## Code Style and Standards
</span></span><span class="line" line="8"><span emptyLinePlaceholder>
</span></span><span class="line" line="9"><span class="surfw">### Java 8 Compatibility
</span></span><span class="line" line="10"><span emptyLinePlaceholder>
</span></span><span class="line" line="11"><span class="sqxcx">-</span><span class="sgsFI"> Do not modernize Java 8 code to Java 11+ features unless there is a GitLab issue or task specifically requesting modernization
</span></span><span class="line" line="12"><span class="sqxcx">-</span><span class="sgsFI"> Target Java 8 for source and compilation: </span><span class="sYu0t">`maven.compiler.source=1.8`</span><span class="sgsFI"> and </span><span class="sYu0t">`maven.compiler.target=1.8`
</span></span><span class="line" line="13"><span class="sqxcx">-</span><span class="sgsFI"> Use Java 8 compatible patterns (e.g., anonymous inner classes instead of lambdas where appropriate)
</span></span><span class="line" line="14"><span emptyLinePlaceholder>
</span></span><span class="line" line="15"><span class="surfw">### Documentation
</span></span><span class="line" line="16"><span emptyLinePlaceholder>
</span></span><span class="line" line="17"><span class="sqxcx">-</span><span class="sgsFI"> All public classes must have Javadoc describing purpose and usage
</span></span><span class="line" line="18"><span class="sqxcx">-</span><span class="sgsFI"> All public methods must have Javadoc with </span><span class="sYu0t">`@param`</span><span class="sgsFI"> and </span><span class="sYu0t">`@return`</span><span class="sgsFI"> tags
</span></span><span class="line" line="19"><span class="sqxcx">-</span><span class="sgsFI"> Include code examples in main class Javadoc
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="surfw">### Class Organization
</span></span><span class="line" line="22"><span emptyLinePlaceholder>
</span></span><span class="line" line="23"><span class="sqxcx">-</span><span class="sbYKK"> **Main entry point**</span><span class="sgsFI">: </span><span class="sYu0t">`HttpMetricsCollector`</span><span class="sgsFI"> - orchestrates configuration loading, metric collection, and export
</span></span><span class="line" line="24"><span class="sqxcx">-</span><span class="sbYKK"> **Collector**</span><span class="sgsFI">: </span><span class="sYu0t">`HttpCollector`</span><span class="sgsFI"> - performs HTTP requests and collects metrics
</span></span><span class="line" line="25"><span class="sqxcx">-</span><span class="sbYKK"> **Exporter**</span><span class="sgsFI">: </span><span class="sYu0t">`PrometheusExporter`</span><span class="sgsFI"> - exports metrics in Prometheus text format
</span></span><span class="line" line="26"><span class="sqxcx">-</span><span class="sbYKK"> **Models**</span><span class="sgsFI">: </span><span class="sYu0t">`CollectorConfig`</span><span class="sgsFI">, </span><span class="sYu0t">`EndpointConfig`</span><span class="sgsFI">, </span><span class="sYu0t">`HttpMetric`</span><span class="sgsFI"> - data transfer objects
</span></span><span class="line" line="27"><span emptyLinePlaceholder>
</span></span><span class="line" line="28"><span class="surfw">### Dependency Management
</span></span><span class="line" line="29"><span emptyLinePlaceholder>
</span></span><span class="line" line="30"><span class="sqxcx">-</span><span class="sgsFI"> Always use Maven for dependency management
</span></span><span class="line" line="31"><span class="sqxcx">-</span><span class="sgsFI"> Use property-based version management for dependencies (e.g., </span><span class="sYu0t">`${jackson.version}`</span><span class="sgsFI">)
</span></span><span class="line" line="32"><span class="sqxcx">-</span><span class="sgsFI"> Keep dependencies up-to-date in </span><span class="sYu0t">`pom.xml`
</span></span><span class="line" line="33"><span emptyLinePlaceholder>
</span></span><span class="line" line="34"><span class="surfw">### Error Handling
</span></span><span class="line" line="35"><span emptyLinePlaceholder>
</span></span><span class="line" line="36"><span class="sqxcx">-</span><span class="sgsFI"> Use try-catch blocks with proper resource management (try-with-resources where applicable)
</span></span><span class="line" line="37"><span class="sqxcx">-</span><span class="sgsFI"> Log errors using SLF4J Logger
</span></span><span class="line" line="38"><span class="sqxcx">-</span><span class="sgsFI"> Gracefully handle configuration loading failures
</span></span><span class="line" line="39"><span class="sqxcx">-</span><span class="sgsFI"> Implement proper shutdown hooks for resource cleanup
</span></span><span class="line" line="40"><span emptyLinePlaceholder>
</span></span><span class="line" line="41"><span class="surfw">### Concurrency
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`ExecutorService`</span><span class="sgsFI"> for concurrent HTTP requests
</span></span><span class="line" line="44"><span class="sqxcx">-</span><span class="sgsFI"> Thread pool size is limited to the minimum of endpoint count and 10
</span></span><span class="line" line="45"><span class="sqxcx">-</span><span class="sgsFI"> Properly shutdown executor service with timeout handling
</span></span><span class="line" line="46"><span class="sqxcx">-</span><span class="sgsFI"> Use </span><span class="sYu0t">`Future`</span><span class="sgsFI"> objects to collect results from concurrent tasks
</span></span></code></pre><h4 id="javaのコードレビュー指示">Javaのコードレビュー指示</h4><p>GitLab Duo Code Review Flowは、スタイルガイドと境界を維持する助けとなります。そのためには、<a href="https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/" rel=""><code>.gitlab/duo/mr-review-instructions.yaml</code>ファイル</a>に具体的な指示が必要です。例えば<a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/.gitlab/duo/mr-review-instructions.yaml?ref_type=heads" rel="">Java向け</a>は次のとおりです。</p><pre className="language-yaml shiki shiki-themes github-light" code="# Custom instructions for GitLab Duo Code Review

instructions:
  # General guidelines

  - name: Code Review
    instructions: |
      1. Focus on correctness and performance
      2. Ensure code comments and documentation are clear and concise
      3. Be respectful and constructive in comments

  - name: CI/CD Configuration
    fileFilters:
      - &quot;.gitlab-ci.yml&quot;
    instructions: |
      1. Do not use YAML anchors
      2. Always use rules in jobs, avoid using `only`

  # Java style guide

  - name: Java Style Guide
    fileFilters:
      - &quot;**/*.java&quot;
    instructions: |
      1. Do not modernize Java 8 code to Java 11+ features, unless there is a GitLab issue or task specifically requesting modernization
      2. All public classes must have Javadoc describing purpose and usage
      3. All public methods must have Javadoc with @param and @return tags
      4. Include code examples in main class Javadoc
      5. All public methods must have at least one test case
      6. Use httpbun.com for test endpoints (status codes, delays, JSON responses)
" language="yaml" meta="" style=""><code><span class="line" line="1"><span class="sAwPA"># Custom instructions for GitLab Duo Code Review
</span></span><span class="line" line="2"><span emptyLinePlaceholder>
</span></span><span class="line" line="3"><span class="shJU0">instructions</span><span class="sgsFI">:
</span></span><span class="line" line="4"><span class="sAwPA">  # General guidelines
</span></span><span class="line" line="5"><span emptyLinePlaceholder>
</span></span><span class="line" line="6"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">Code Review
</span></span><span class="line" line="7"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="8"><span class="sYBdl">      1. Focus on correctness and performance
</span></span><span class="line" line="9"><span class="sYBdl">      2. Ensure code comments and documentation are clear and concise
</span></span><span class="line" line="10"><span class="sYBdl">      3. Be respectful and constructive in comments
</span></span><span class="line" line="11"><span emptyLinePlaceholder>
</span></span><span class="line" line="12"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">CI/CD Configuration
</span></span><span class="line" line="13"><span class="shJU0">    fileFilters</span><span class="sgsFI">:
</span></span><span class="line" line="14"><span class="sgsFI">      - </span><span class="sYBdl">&quot;.gitlab-ci.yml&quot;
</span></span><span class="line" line="15"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="16"><span class="sYBdl">      1. Do not use YAML anchors
</span></span><span class="line" line="17"><span class="sYBdl">      2. Always use rules in jobs, avoid using `only`
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sAwPA">  # Java style guide
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="sgsFI">  - </span><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">Java Style Guide
</span></span><span class="line" line="22"><span class="shJU0">    fileFilters</span><span class="sgsFI">:
</span></span><span class="line" line="23"><span class="sgsFI">      - </span><span class="sYBdl">&quot;**/*.java&quot;
</span></span><span class="line" line="24"><span class="shJU0">    instructions</span><span class="sgsFI">: </span><span class="sD7c4">|
</span></span><span class="line" line="25"><span class="sYBdl">      1. Do not modernize Java 8 code to Java 11+ features, unless there is a GitLab issue or task specifically requesting modernization
</span></span><span class="line" line="26"><span class="sYBdl">      2. All public classes must have Javadoc describing purpose and usage
</span></span><span class="line" line="27"><span class="sYBdl">      3. All public methods must have Javadoc with @param and @return tags
</span></span><span class="line" line="28"><span class="sYBdl">      4. Include code examples in main class Javadoc
</span></span><span class="line" line="29"><span class="sYBdl">      5. All public methods must have at least one test case
</span></span><span class="line" line="30"><span class="sYBdl">      6. Use httpbun.com for test endpoints (status codes, delays, JSON responses)
</span></span></code></pre><p>コードのモダナイズを進める過程で、Java 8の強制に関する最初のガイドラインは更新が必要になります。</p><h3 id="実証済みのワークフローをエージェントスキルにする">実証済みのワークフローをエージェントスキルにする</h3><p>専門的なワークフローが繰り返し使えるようになったら、それを<a href="https://docs.gitlab.com/user/duo_agent_platform/customize/agent_skills/" rel="">エージェントスキル</a>として記録します。スキルはオンデマンドで読み込まれ、デフォルトではコンテキストウィンドウを占有しません。</p><p>エージェントスキルが、未検証の計画ではなく実証済みの実践を反映したものになるよう、まずは動作するCI/CD、テスト、レビュー済みの意思決定から始めましょう。モダナイズのエピックにおける<a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/work_items/24" rel="">イシュー24</a>は、このアプローチを、範囲を絞ったJava 21以降向けのモダナイズ用エージェントスキルとしてまとめています。これは、現在のマージリクエストを超えた価値をもたらします。今後のエージェントセッションは、過去の議論から再構築するのではなく、同じ安全境界を再利用できるのです。</p><p>既存の<a href="https://gitlab.com/gitlab-da/demo-environments/tanuki-iot-platform/sensors/java-http-metrics-collector/-/blob/main/skills/java8-maven-maintenance/SKILL.md?ref_type=heads" rel="">Java 8 Maven保守スキル</a>に着想を得た、以下のサンプルスキル実装を試してみてください。</p><pre className="language-markdown shiki shiki-themes github-light" code="---
name: java21-modernization
description: &gt;-
  Guide incremental Java 8 to Java 21+ modernization for the HTTP metrics
  collector. Use when a GitLab work item asks for Java 21 CI visibility,
  runtime/image upgrades, HttpClient migration, dependency or source API
  modernization, or review of maint-java-21 style merge requests. Do not use
  for routine Java 8 maintenance; prefer java8-maven-maintenance instead.
compatibility: Requires Maven, Docker Compose, and access to the owning GitLab work item.
---

# Java 21 Modernization

## Overview

Modernize in small, reviewable steps. The owning work item is authoritative.
Preserve collector → Rust metrics-store behavior unless the issue says otherwise.

Companion skill: `skills/java8-maven-maintenance/` for the Java 8 default path.

## Before editing

1. Read the owning issue/epic, `AGENTS.md`, `.gitlab-ci.yml`, `pom.xml`,
   `Dockerfile`, and affected tests.
2. Record the current baseline:
   - `maven.compiler.source` / `target`
   - default CI image vs any `*:java-21` jobs
   - container base image
   - observable CLI/Compose behavior
3. Classify the change into **one** lane:
   - CI visibility only
   - runtime / image switch
   - source / API modernization
   - dependency upgrade
   - tests / contract checks

Do not combine lanes in one MR unless the work item explicitly requires it.

## Workflow

Copy and track:

```text
Modernization progress:
- [ ] Baseline recorded
- [ ] Scoped to owning work item
- [ ] Target-JDK CI evidence available before JDK-only APIs
- [ ] Java 8 lane preserved until exit criteria say otherwise
- [ ] Unit / IT / Compose checks run
- [ ] MR documents risks, rollback, human decisions
```

## Guardrails

- Do not remove Java 8 compatibility unless the work item authorizes it.
- Do not introduce Java 21-only APIs before target-JDK CI evidence exists.
- Do not mix runtime upgrades with unrelated refactors.
- Do not claim performance wins without measurements.
- Preserve the Java → Rust API and authentication contract.
- Stop for a human decision when support policy, rollback, data format, or downstream compatibility is unclear.

## Validation

```bash
mvn -Dmaven.repo.local=.m2/repository test
mvn -Dmaven.repo.local=.m2/repository clean package
```

If Compose or container files change:

```bash
docker compose config --quiet
TANUKI_INGESTION_TOKEN=replace-me docker compose up -d --build
# confirm metric_sample logs and authenticated ingest still work
docker compose down -v
```

## Completion report

In the MR description, include:

1. Baseline before the change
2. Lane changed (CI / runtime / source / deps / tests)
3. Evidence run (commands + CI jobs)
4. Remaining risks and rollback
5. Human decisions still open

## Out of scope

- Broad &quot;modernize everything to Java 21&quot; prompts
- HTTP endpoint semantics unrelated to the JDK migration
  (use `skills/http-endpoint-collector-behavior/`)
- Security triage unrelated to the migration slice
  (use `skills/security-triage-java-sensor/`)
" language="markdown" meta="" style=""><code><span class="line" line="1"><span class="sgsFI">---
</span></span><span class="line" line="2"><span class="shJU0">name</span><span class="sgsFI">: </span><span class="sYBdl">java21-modernization
</span></span><span class="line" line="3"><span class="shJU0">description</span><span class="sgsFI">: </span><span class="sD7c4">&gt;-
</span></span><span class="line" line="4"><span class="sYBdl">  Guide incremental Java 8 to Java 21+ modernization for the HTTP metrics
</span></span><span class="line" line="5"><span class="sYBdl">  collector. Use when a GitLab work item asks for Java 21 CI visibility,
</span></span><span class="line" line="6"><span class="sYBdl">  runtime/image upgrades, HttpClient migration, dependency or source API
</span></span><span class="line" line="7"><span class="sYBdl">  modernization, or review of maint-java-21 style merge requests. Do not use
</span></span><span class="line" line="8"><span class="sYBdl">  for routine Java 8 maintenance; prefer java8-maven-maintenance instead.
</span></span><span class="line" line="9"><span class="shJU0">compatibility</span><span class="sgsFI">: </span><span class="sYBdl">Requires Maven, Docker Compose, and access to the owning GitLab work item.
</span></span><span class="line" line="10"><span class="sgsFI">---
</span></span><span class="line" line="11"><span emptyLinePlaceholder>
</span></span><span class="line" line="12"><span class="surfw"># Java 21 Modernization
</span></span><span class="line" line="13"><span emptyLinePlaceholder>
</span></span><span class="line" line="14"><span class="surfw">## Overview
</span></span><span class="line" line="15"><span emptyLinePlaceholder>
</span></span><span class="line" line="16"><span class="sgsFI">Modernize in small, reviewable steps. The owning work item is authoritative.
</span></span><span class="line" line="17"><span class="sgsFI">Preserve collector → Rust metrics-store behavior unless the issue says otherwise.
</span></span><span class="line" line="18"><span emptyLinePlaceholder>
</span></span><span class="line" line="19"><span class="sgsFI">Companion skill: </span><span class="sYu0t">`skills/java8-maven-maintenance/`</span><span class="sgsFI"> for the Java 8 default path.
</span></span><span class="line" line="20"><span emptyLinePlaceholder>
</span></span><span class="line" line="21"><span class="surfw">## Before editing
</span></span><span class="line" line="22"><span emptyLinePlaceholder>
</span></span><span class="line" line="23"><span class="sqxcx">1.</span><span class="sgsFI"> Read the owning issue/epic, </span><span class="sYu0t">`AGENTS.md`</span><span class="sgsFI">, </span><span class="sYu0t">`.gitlab-ci.yml`</span><span class="sgsFI">, </span><span class="sYu0t">`pom.xml`</span><span class="sgsFI">,
</span></span><span class="line" line="24"><span class="sYu0t">   `Dockerfile`</span><span class="sgsFI">, and affected tests.
</span></span><span class="line" line="25"><span class="sqxcx">2.</span><span class="sgsFI"> Record the current baseline:
</span></span><span class="line" line="26"><span class="sqxcx">   -</span><span class="sYu0t"> `maven.compiler.source`</span><span class="sgsFI"> / </span><span class="sYu0t">`target`
</span></span><span class="line" line="27"><span class="sqxcx">   -</span><span class="sgsFI"> default CI image vs any </span><span class="sYu0t">`*:java-21`</span><span class="sgsFI"> jobs
</span></span><span class="line" line="28"><span class="sqxcx">   -</span><span class="sgsFI"> container base image
</span></span><span class="line" line="29"><span class="sqxcx">   -</span><span class="sgsFI"> observable CLI/Compose behavior
</span></span><span class="line" line="30"><span class="sqxcx">3.</span><span class="sgsFI"> Classify the change into </span><span class="sbYKK">**one**</span><span class="sgsFI"> lane:
</span></span><span class="line" line="31"><span class="sqxcx">   -</span><span class="sgsFI"> CI visibility only
</span></span><span class="line" line="32"><span class="sqxcx">   -</span><span class="sgsFI"> runtime / image switch
</span></span><span class="line" line="33"><span class="sqxcx">   -</span><span class="sgsFI"> source / API modernization
</span></span><span class="line" line="34"><span class="sqxcx">   -</span><span class="sgsFI"> dependency upgrade
</span></span><span class="line" line="35"><span class="sqxcx">   -</span><span class="sgsFI"> tests / contract checks
</span></span><span class="line" line="36"><span emptyLinePlaceholder>
</span></span><span class="line" line="37"><span class="sgsFI">Do not combine lanes in one MR unless the work item explicitly requires it.
</span></span><span class="line" line="38"><span emptyLinePlaceholder>
</span></span><span class="line" line="39"><span class="surfw">## Workflow
</span></span><span class="line" line="40"><span emptyLinePlaceholder>
</span></span><span class="line" line="41"><span class="sgsFI">Copy and track:
</span></span><span class="line" line="42"><span emptyLinePlaceholder>
</span></span><span class="line" line="43"><span class="sgsFI">```text
</span></span><span class="line" line="44"><span class="sgsFI">Modernization progress:
</span></span><span class="line" line="45"><span class="sgsFI">- [ ] Baseline recorded
</span></span><span class="line" line="46"><span class="sgsFI">- [ ] Scoped to owning work item
</span></span><span class="line" line="47"><span class="sgsFI">- [ ] Target-JDK CI evidence available before JDK-only APIs
</span></span><span class="line" line="48"><span class="sgsFI">- [ ] Java 8 lane preserved until exit criteria say otherwise
</span></span><span class="line" line="49"><span class="sgsFI">- [ ] Unit / IT / Compose checks run
</span></span><span class="line" line="50"><span class="sgsFI">- [ ] MR documents risks, rollback, human decisions
</span></span><span class="line" line="51"><span class="sgsFI">```
</span></span><span class="line" line="52"><span emptyLinePlaceholder>
</span></span><span class="line" line="53"><span class="surfw">## Guardrails
</span></span><span class="line" line="54"><span emptyLinePlaceholder>
</span></span><span class="line" line="55"><span class="sqxcx">-</span><span class="sgsFI"> Do not remove Java 8 compatibility unless the work item authorizes it.
</span></span><span class="line" line="56"><span class="sqxcx">-</span><span class="sgsFI"> Do not introduce Java 21-only APIs before target-JDK CI evidence exists.
</span></span><span class="line" line="57"><span class="sqxcx">-</span><span class="sgsFI"> Do not mix runtime upgrades with unrelated refactors.
</span></span><span class="line" line="58"><span class="sqxcx">-</span><span class="sgsFI"> Do not claim performance wins without measurements.
</span></span><span class="line" line="59"><span class="sqxcx">-</span><span class="sgsFI"> Preserve the Java → Rust API and authentication contract.
</span></span><span class="line" line="60"><span class="sqxcx">-</span><span class="sgsFI"> Stop for a human decision when support policy, rollback, data format, or downstream compatibility is unclear.
</span></span><span class="line" line="61"><span emptyLinePlaceholder>
</span></span><span class="line" line="62"><span class="surfw">## Validation
</span></span><span class="line" line="63"><span emptyLinePlaceholder>
</span></span><span class="line" line="64"><span class="sgsFI">```bash
</span></span><span class="line" line="65"><span class="s7eDp">mvn</span><span class="sYu0t"> -Dmaven.repo.local=.m2/repository</span><span class="sYBdl"> test
</span></span><span class="line" line="66"><span class="s7eDp">mvn</span><span class="sYu0t"> -Dmaven.repo.local=.m2/repository</span><span class="sYBdl"> clean</span><span class="sYBdl"> package
</span></span><span class="line" line="67"><span class="sgsFI">```
</span></span><span class="line" line="68"><span emptyLinePlaceholder>
</span></span><span class="line" line="69"><span class="sgsFI">If Compose or container files change:
</span></span><span class="line" line="70"><span emptyLinePlaceholder>
</span></span><span class="line" line="71"><span class="sgsFI">```bash
</span></span><span class="line" line="72"><span class="s7eDp">docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> config</span><span class="sYu0t"> --quiet
</span></span><span class="line" line="73"><span class="sgsFI">TANUKI_INGESTION_TOKEN</span><span class="sD7c4">=</span><span class="sYBdl">replace-me</span><span class="s7eDp"> docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> up</span><span class="sYu0t"> -d</span><span class="sYu0t"> --build
</span></span><span class="line" line="74"><span class="sAwPA"># confirm metric_sample logs and authenticated ingest still work
</span></span><span class="line" line="75"><span class="s7eDp">docker</span><span class="sYBdl"> compose</span><span class="sYBdl"> down</span><span class="sYu0t"> -v
</span></span><span class="line" line="76"><span class="sgsFI">```
</span></span><span class="line" line="77"><span emptyLinePlaceholder>
</span></span><span class="line" line="78"><span class="surfw">## Completion report
</span></span><span class="line" line="79"><span emptyLinePlaceholder>
</span></span><span class="line" line="80"><span class="sgsFI">In the MR description, include:
</span></span><span class="line" line="81"><span emptyLinePlaceholder>
</span></span><span class="line" line="82"><span class="sqxcx">1.</span><span class="sgsFI"> Baseline before the change
</span></span><span class="line" line="83"><span class="sqxcx">2.</span><span class="sgsFI"> Lane changed (CI / runtime / source / deps / tests)
</span></span><span class="line" line="84"><span class="sqxcx">3.</span><span class="sgsFI"> Evidence run (commands + CI jobs)
</span></span><span class="line" line="85"><span class="sqxcx">4.</span><span class="sgsFI"> Remaining risks and rollback
</span></span><span class="line" line="86"><span class="sqxcx">5.</span><span class="sgsFI"> Human decisions still open
</span></span><span class="line" line="87"><span emptyLinePlaceholder>
</span></span><span class="line" line="88"><span class="surfw">## Out of scope
</span></span><span class="line" line="89"><span emptyLinePlaceholder>
</span></span><span class="line" line="90"><span class="sqxcx">-</span><span class="sgsFI"> Broad &quot;modernize everything to Java 21&quot; prompts
</span></span><span class="line" line="91"><span class="sqxcx">-</span><span class="sgsFI"> HTTP endpoint semantics unrelated to the JDK migration
</span></span><span class="line" line="92"><span class="sgsFI">  (use </span><span class="sYu0t">`skills/http-endpoint-collector-behavior/`</span><span class="sgsFI">)
</span></span><span class="line" line="93"><span class="sqxcx">-</span><span class="sgsFI"> Security triage unrelated to the migration slice
</span></span><span class="line" line="94"><span class="sgsFI">  (use </span><span class="sYu0t">`skills/security-triage-java-sensor/`</span><span class="sgsFI">)
</span></span></code></pre><h2 id="まとめ">まとめ</h2><p>このチュートリアルで紹介した3つのユースケースは、それぞれが積み重なっています。まずCursorは、リポジトリのコンテキストだけを使って、受け入れられていたエンドツーエンドテストの失敗を修正しました。次にGitLab MCPサーバーがモダナイズ計画を取り込み、Cursorは品質ゲートを整備しつつ、IDEから直接Duoのレビューフィードバックへの対応を完結させることができました。そして最後に、Cursorは<code>HttpURLConnection</code>を再利用可能な<code>HttpClient</code>に置き換えるという、1つの範囲が限定されたJava 21の変更を行い、対象を絞ったテスト、サービス横断的な取り込みの実行、パイプライン、セキュリティスキャン、ソフトウェア部品表、レビューのエビデンス、影響分析によって裏付けました。</p><p>レガシーなJava 8のコードベースは、エージェントがコードを書いているからといって、モダナイズが安全になるわけではありません。安全になるのは、すべての変更が範囲を限定され、レビューされ、Java 8とJava 21の両方に対してテストされ、その背後にある意思決定とエビデンスとともに作業アイテムまで追跡できるからです。実装を担うのはCursorです。そして、その証明を担うのがGitLabです。両者が組み合わさることで、この移行はチームが信頼できるものになります。</p><p>このワークフローを試してみたい場合は、レガシーなアプリケーションで受け入れられている失敗を明らかにする1つのテストから始めてください。そのテストを信頼できるものにし、より大きなモダナイズ計画をGitLabに記録し、独立して変更・証明できる1つの境界を選びます。そうすることで、エージェントには焦点を絞ったタスクが、チームにはレビューできるエビデンスが与えられます。</p><blockquote><p>もしまだGitLab Duo Agent Platformを利用していない場合は、<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">無料トライアル</a>から始められます。</p><p>すでに無料プランでGitLabを利用している場合は、<a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">簡単な手順</a>に沿って、GitLab Duo Agent Platformに申し込めます。</p><p>そして、すでにGitLab PremiumまたはUltimateをご利用中の場合は、<a href="https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platformを有効化</a>するだけで、サブスクリプションに<a href="https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits" rel="">含まれているGitLabクレジット</a>を使い始められます。</p></blockquote><style>html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .surfw, html code.shiki .surfw{--shiki-default:#005CC5;--shiki-default-font-weight:bold}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}html pre.shiki code .sbYKK, html code.shiki .sbYKK{--shiki-default:#24292E;--shiki-default-font-weight:bold}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}</style>]]></content>
        <author>
            <name>Michael Friedrich</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/michael-friedrich/</uri>
        </author>
        <published>2026-07-22T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[「作業アイテム作成」トリガーで割り当てを自動化する方法]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/how-to-use-a-work-item-created-trigger/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/how-to-use-a-work-item-created-trigger/"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p><a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>に新しく追加されたイベント駆動型のトリガーにより、作業アイテムが作成された瞬間にフローを起動できるようになりました。これまで一日がかりだったトリアージと割り当てという手作業が、わずか数秒で完了する自動化へと変わります。この包括的なガイドでは、「作業アイテム作成」トリガーの使い方を、以下の動画とあわせて解説します。</p><iframe width="560" height="315" src="https://www.youtube.com/embed/WNDYRZpOeOo?si=o_n6IBoyeQO5UhDp" title="YouTube video player" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerPolicy="strict-origin-when-cross-origin" allowFullScreen></iframe><p>フローがリアルタイムで発火し、ルーティングと割り当てを行う様子をご覧いただき、継続的でハンズオフな自動化が自分のプロジェクトにどのような効果をもたらすか、ぜひ想像してみてください。</p><h2 id="課題手作業による割り当てはスケールしない">課題：手作業による割り当てはスケールしない</h2><p>プロジェクトをまたいで作業を手作業で割り当てるのは、見た目以上に大変な作業です。単発の意思決定ではなく、毎日何十回も繰り返される判断の連続だからです。新しいイシューが発生するたびに、誰かが手を止めてチームのキャパシティを確認し、現在のワークロードと新規タスクを比較検討したうえで、担当先を決めなければなりません。会議や休憩、PTO（有給休暇）なども考慮に入れると、このプロセスはさらに長引きます。小規模であればこの方法でも機能しますが、量が増えるにつれて一気に破綻し、トリアージの遅延や作業配分の偏り、そしてチームリードが本来取り組むべき価値の高い仕事ではなく振り分け作業に時間を奪われるといった問題を引き起こします。</p><p>つい最近まで、こうした摩擦はフローの仕組みそのものに組み込まれていました。あらゆる<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/" rel="">GitLab Duo Flow</a>は、開始するためにUI上での人間によるアクション（メンションや担当者の割り当て、レビュアー割り当てイベントなど）を必要としていました。プログラムからフローを駆動したり、何かが起きた瞬間に発火させたりすることは、誰かが手動でトリガーを引かない限り不可能だったのです。そのため、どれほどよく作り込まれた割り当てフローであっても、起動には人の手を待つ必要がありました。</p><h2 id="作業アイテム作成トリガーが解決策になる仕組み">「作業アイテム作成」トリガーが解決策になる仕組み</h2><p>「作業アイテム作成」トリガーは、このギャップを埋めます。プロジェクト内で新しい作業アイテムが作成された瞬間に自動で発火し、手動での引き継ぎは一切不要です。誰かがイシューに気づき、チームのワークロードを評価してから割り当てるのではなく、フローが自らアクションを起こしてルーティングを代行します。トリガーを使えば、組織が定めた条件が満たされた時点でフローがバックグラウンドで継続的に実行されるため、開発者は本当に判断力が求められる作業に集中し続けられます。</p><h2 id="メリットと効果">メリットと効果</h2><p>「作業アイテム作成」トリガーには、次のようなメリットがあります。</p><p><strong>即時かつハンズオフなトリアージ</strong><br />
作業アイテムが作成された瞬間に割り当てとルーティングが行われ、誰かの手が空くのを待つ必要はありません。</p><p><strong>どんな量にも対応するスケーラビリティ</strong><br />
1件でも数百件でも、トリガーが誰の負担を増やすこともなく数秒で処理します。</p><p><strong>よりスマートでバランスの取れた割り当て</strong><br />
フローは割り当て前に各メンバーの現在の負荷や稼働状況を考慮できます。人間が下すのと同じ判断を、一貫して適用します。</p><p><strong>単純作業からチームを解放</strong><br />
未処理の作業アイテムを手作業で仕分けして誰に余裕があるかを判断する必要はもうありません。エージェントが、人間と同じ情報をもとに判断を下します。</p><h2 id="自動割り当ての実例ステップバイステップチュートリアル">自動割り当ての実例：ステップバイステップ・チュートリアル</h2><p>具体的なイメージをつかんでいただくため、<strong>Intra-account-transfers</strong>というプロジェクトを使った実際のシナリオを見ていきましょう。</p><h3 id="_1-トリガーの設定">1. トリガーの設定</h3><p>「Work item assigner」という名前のフローを作成し、そのプロジェクトで作業アイテムが作成されるたびに実行されるよう設定しました。</p><p><img alt="「Work item assigner」フローがプロジェクトintra-account-transfersで有効化されている画面" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210850/Blog/Imported/test-work-item-trigger-blog-workflow-test/image5.png" title="「Work item assigner」フローがプロジェクトintra-account-transfersで有効化されている画面" /></p><h3 id="_2-フローの構成">2. フローの構成</h3><p>「Work item assigner」フローは2つのエージェントで構成されており、それぞれに従うべき手順と使用するツールを詳細に定めたプロンプトが設定されています。1つ目のエージェントは<a href="https://about.gitlab.com/ja-jp/blog/introducing-gitlab-orbit/" rel="">GitLab Orbit</a>を使用して、組織内の各リソースの現在のワークロードを把握します。GitLab Orbitは、ソフトウェアエンジニアリングのためのライフサイクルコンテキストグラフであり、Duo Agent Platform内のAIエージェントをより高速かつ高精度にします。</p><p><img alt="1つ目のエージェント「determine_resource_with_least_open_work」の定義" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210858/Blog/Imported/test-work-item-trigger-blog-workflow-test/image8.png" title="1つ目のエージェント「determine_resource_with_least_open_work」の定義" /></p><p><img alt="1つ目のエージェントのプロンプト" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210866/Blog/Imported/test-work-item-trigger-blog-workflow-test/image9.png" title="1つ目のエージェントのプロンプト" /></p><p>2つ目のエージェントは、未処理の作業アイテムが最も少ないメンバーを特定し、新しい作業アイテムをそのメンバーに割り当てます。</p><p><img alt="2つ目のエージェント「assign_work_item_prompt」の定義" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210875/Blog/Imported/test-work-item-trigger-blog-workflow-test/image4.png" title="2つ目のエージェント「assign_work_item_prompt」の定義" /></p><p><img alt="2つ目のエージェントのプロンプト" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210883/Blog/Imported/test-work-item-trigger-blog-workflow-test/image7.png" title="2つ目のエージェントのプロンプト" /></p><p>割り当てロジックはフロー内に組み込まれているため、プロセス全体を動かすにはトリガーさえあれば十分です。</p><h3 id="_3-トリガーが発火する様子">3. トリガーが発火する様子</h3><p>3.1. まったく新しい作業アイテムを作成します。</p><p><img alt="新しいイシューを作成している画面" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210892/Blog/Imported/test-work-item-trigger-blog-workflow-test/image2.png" title="新しいイシューを作成している画面" /></p><p>3.2. イシューが作成された瞬間にトリガーが発火し、「Work item assigner」フローが自動的に開始します。フローのアクティビティログでは、その進行状況をステップごとに確認できます。1つ目のエージェントがプロジェクト情報を取得し、GitLab Orbitのツールを使ってトップレベルグループ全体の各ユーザーの未処理の作業アイテム数をカウントします。</p><p><img alt="1つ目のエージェントが、トップグループの各ユーザーの未処理作業アイテム数を返している画面" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210901/Blog/Imported/test-work-item-trigger-blog-workflow-test/image6.png" title="1つ目のエージェントが、トップグループの各ユーザーの未処理作業アイテム数を返している画面" /></p><p>続いて2つ目のエージェントが最も負荷の低いメンバー（このデモではWilliam）を特定し、実際の割り当てを実行します。</p><p><img alt="2つ目のエージェントが、新しく作成されたイシューの担当者としてWilliamを選択している画面" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210908/Blog/Imported/test-work-item-trigger-blog-workflow-test/image1.png" title="2つ目のエージェントが、新しく作成されたイシューの担当者としてWilliamを選択している画面" /></p><h3 id="_4-最も負荷の低いメンバーへの割り当てを確認">4. 最も負荷の低いメンバーへの割り当てを確認</h3><p>イシューに戻って確認すると、新しい作業アイテムがWilliamに自動的に割り当てられていることがわかります。</p><p><img alt="更新後のイシュー画面。担当者としてWilliamが表示されている" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1784210914/Blog/Imported/test-work-item-trigger-blog-workflow-test/image3.png" title="更新後のイシュー画面。担当者としてWilliamが表示されている" /></p><h3 id="_5-一連の流れで見るメリット">5. 一連の流れで見るメリット</h3><p>このシナリオが物語っているのは、作業を担う主体そのものの変化です。人間が未処理の作業アイテムを仕分けて誰に余裕があるかを判断し、手作業でイシューを割り当てる代わりに、「作業アイテム作成」トリガーによって呼び出されるGitLab Duo Agent Platformの<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/custom/" rel="">カスタムフロー</a>が、そのすべてをわずか数秒でこなします。人間が使うのとまったく同じ情報をもとにエージェントが判断できる定型業務からチームを解放し、人はここぞという場面に注意を向けられるようになります。</p><h3 id="_6-さらなる応用">6. さらなる応用</h3><p>このカスタムフローには、次のような拡張の余地も考えられます。</p><ul><li>Model Context Protocol（<a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">MCP</a>）連携を人事システム（またはPTOシステム）に追加し、作業アイテムの割り当て時に各リソースのPTO予定を考慮できるようエージェントを拡張する。</li><li>リソースのカレンダーへのMCP連携を追加し、作業アイテムの割り当て時に各リソースの空き状況を考慮できるようエージェントを拡張する。</li></ul><h2 id="今すぐ始める">今すぐ始める</h2><p>大量に発生する作業の割り当ては、これまで静かにチームの体力を奪ってきました。1日に何十回も、ワークロードと空き状況を確認してからイシューを振り分けるという細かな判断が必要で、量が増えるほどこのプロセスは破綻していきます。GitLab Duo Agent Platformの「作業アイテム作成」トリガーは、作業アイテムが作成された瞬間にフローを発火させ、手動での引き継ぎを一切不要にすることで、このボトルネックを解消します。上記のステップバイステップ・チュートリアルで示したとおり、GitLab Orbitを活用した2エージェント構成のフローは、チームの実際のワークロードを把握し、最適な担当者に各新規アイテムを数秒で割り当てられます。その結果、トリアージが迅速化し、ワークロードのバランスが改善され、チームは本当に人間の判断が必要な仕事に集中できるようになります。</p><blockquote><p><a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">今すぐGitLab Duo Agent Platformの無料トライアルを始める。</a></p></blockquote>]]></content>
        <author>
            <name>Cesar Saavedra</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/cesar-saavedra/</uri>
        </author>
        <published>2026-07-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[1,500人が挑んだGitLab Transcendハッカソン：開発者たちがGitLab Orbitで作ったもの]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/gitlab-transcend-hackathon-orbit/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/gitlab-transcend-hackathon-orbit/"/>
        <updated>2026-07-20T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>数千人の開発者にGitLab Orbitを渡し、あとは自由に使ってもらいました。返ってきたのは、本番環境でチームの手を止めている課題に対する、驚くほど創造的な解決策の数々です。<strong>しかもそれらは、皆さんが毎週のように直面している問題そのものでした。この変更で何が壊れるのか。本当に重要なテストはどれか。そして、この移行には結局いくらかかるのか。</strong></p><p><a href="https://about.gitlab.com/ja-jp/gitlab-orbit/" rel="">GitLab Orbit</a>は、コード、マージリクエスト、パイプライン、デプロイメント、所有権をひとつのグラフとして常に最新の状態で保持し、いつでもクエリできるようにする仕組みです。エージェントはコードを書くのは得意ですが、その周りのシステムを理解するのはあまり得意ではありません。「これは何に依存しているのか」「どのテストがカバーしているのか」「影響の責任を負うのは誰なのか」——こうしたつながりを問う質問に答えるには、これまでエージェントがファイルをかき集めるか、エンジニアが4つものツールを行き来して調べるしかありませんでした。Orbitがあれば、それが一度のクエリで済みます。エージェントはModel Context Protocol（<a href="https://about.gitlab.com/topics/ai/model-context-protocol/" rel="">MCP</a>）経由でOrbitにアクセスし、エンジニアは直接クエリを実行でき、答えは数時間ではなく数秒で返ってきます。詳しくは<a href="https://about.gitlab.com/ja-jp/gitlab-orbit/" rel="">Orbitのホームページ</a>をご覧ください。私たちが見たかったのは、そのグラフが自分たちのものになったとき、人々が何を作り出すかということでした。</p><p>登録者数は1,576人。ショーケーストラックでは、GitLab Orbit上に作られたエージェントやフロー、スキルなど、応募資格を満たす265のプロジェクトが完成しました。それとは別に、26名のコントリビューターがOrbitのコードベースに61件の改善を直接マージしています。言語サポートの追加、バグ修正、ドキュメントの改善——コミュニティはOrbitの上に何かを作っただけでなく、Orbitそのものをより良くしてくれました。</p><h2 id="開発者たちを引きつけた課題">開発者たちを引きつけた課題</h2><p>審査に入る前、ひとつ気づいたことがあります。応募作品を「実際に何をするか」で並べ替えると、分布が大きく偏るということです。</p><p><strong>70チーム</strong>が同じ発想のツール、つまり「マージする前に、この変更が何を壊すか教えてほしい」を形にしています。30を超えるチームが取り組んだのは、オンボーディングや理解を助けるツール——「このコードベースを理解する手助けをしてほしい」という課題です。その後に続くのが、インシデントの根本原因分析、アーキテクチャのドリフト、不安定なパイプラインの診断、複数リポジトリにまたがるCVEの追跡でした。</p><p>これは偶然ではありません。エンジニアはこうした問いを日常的に投げかけながらも、答えがGit、CI、デプロイツール、そして誰も信頼していないダッシュボードのあちこちに散らばっていたせいで、うまく答えられずにいました。ひとつのグラフにまとめてしまえば、人は迷わずそこへ向かうものです。</p><p>これは、コンテキストを伴ったオーケストレーションです。単なる自動化ではなく、スピードに制御が組み込まれている。そして、誰に指示されたわけでもないのに何十もの独立したチームが同じクエリにたどり着く——これこそ、プラットフォームのオーナーが読み取るべきシグナルです。仕事の実体は、コンテキストの中にあるということです。応募が集中したカテゴリーほど、基準は高くなりました。他の68チームを上回るか、誰も足を踏み入れなかった領域に進むか。プロジェクトが際立つ道は、そのどちらかでした。</p><h2 id="技術実装">技術実装</h2><p><strong>優勝：<a href="https://gitlab-transcend.devpost.com/submissions/1054521-sankofa" rel="">Sankofa</a></strong>
1日のなかの異なる瞬間をきっかけに動く3つのエージェントが、いずれもGitLab Orbitからデータを読み取ります。マージリクエストを開けば、Radarが影響範囲——下流の呼び出し元、影響を受けるパイプライン、責任を負うチーム——を提示します。issueがアサインされれば、着手する前にGuideが概要をまとめてくれる。脆弱性が見つかれば、Shieldがそこに至るすべての経路を洗い出します。コンテキストはこちらから探しに行かなくても届き、役目を終えれば静かに姿を消します。</p><blockquote><p>「セキュリティの脆弱性が報告されると、自動的に点と点をつなぐ仕組みがないため、チームはその影響範囲を手作業で追跡するのに何日も費やすことになります」</p><p>Lester K氏、Sankofa</p></blockquote><p>Shieldは、それをグラフ上のたった一度の走査でやってのけます。</p><p><strong>準優勝：</strong><a href="https://gitlab-transcend.devpost.com/submissions/1054106-stayed-shipped" rel="">Stayed Shipped</a><br />
問いかけるのは、どのダッシュボードにも答えられないことです。先月AIエージェントがマージした変更のうち、今も本番環境で生きているのはいくつあるか。マージされた変更が生き残っているのか、それともシニアエンジニアの手で静かに直され続けているのか——これは、どんな標準的な指標にも表れない動きを追跡する試みです。</p><h2 id="デザインと使いやすさ">デザインと使いやすさ</h2><p><strong>優勝：<a href="https://gitlab-transcend.devpost.com/submissions/1062163-carver-the-migration-quoting-agent" rel="">Carver</a></strong><br />
Carverは、着手を決める前にレガシー移行の見積もりを出してくれるツールです。何を移行したいかを伝えるだけで、GitLab Orbitの依存関係グラフを読み取り、対象の単位数、所要期間、進める順序、リスクの所在まで見積もってくれます。このカテゴリーで評価を集めたのは、その出力の見せ方でした。単位ごとに1行、規模とリスクを添えて提示し、詳細は必要なときだけ展開する。AngularJSからAngularへの移行なら、生成コスト10ドルに対しておよそ9週間の人的作業と見積もられ、テストされていない基幹サービスは赤で示されるので、まず何を確認すべきかが一目でわかります。</p><blockquote><p>「Orbitを確認し、そのサービスが見つからない場合は、実際のコードがどこにあるかを尋ねます」</p><p>Anes Mulalic氏、Carver</p></blockquote><p>根拠のない数字を並べることを、このエージェントは拒むのです。</p><p><strong>準優勝：</strong><a href="https://gitlab-transcend.devpost.com/submissions/1062651-marshal-autonomous-migration-assistant" rel="">Marshal</a><br />
同じ領域を、まったく逆のアプローチで攻めます。目指すのは完全な自律性。組織全体の目標をひとつ宣言すれば、あとはGitLab Orbitを通じて影響を受けるすべてのリポジトリを特定し、作業の順序を組み立て、対象を取りこぼすことなく波状にマージリクエストを着地させていきます。</p><h2 id="波及効果">波及効果</h2><p><strong>優勝：<a href="https://gitlab-transcend.devpost.com/submissions/1061837-crosscut" rel="">CrossCut</a></strong><br />
CrossCutが実行するのは、変更が実際に壊しうるテストだけです。マージリクエストを開けば、変更されたシンボルを取得し、GitLab Orbitのコールグラフをたどって真の推移的影響を割り出し、そのテストだけを走らせるパイプラインを組み立てます。モデルは介在しません。推測もしません。ただグラフをたどるだけです。規模の大きいスイートやリポジトリ横断のスイートなら、CIの処理量を90%以上削減でき、導入コストはほぼ即座に回収できます。</p><blockquote><p>「変更がどのテストに到達しうるかを知るには、コードベース全体のコールグラフが必要です。それはまさにGitLab Orbitが構築しているものなので、私たちは推測する代わりに、グラフに尋ねるだけです」</p><p>Pritesh Kumar氏、CrossCut</p></blockquote><p><strong>準優勝：</strong><a href="https://gitlab-transcend.devpost.com/submissions/1061548-orbitweaver" rel="">OrbitWeaver</a><br />
ベクトル類似度ではなく、GitLab Orbitが示す正確な影響範囲をもとに自律的なリファクタリングを行います。影響を受けるすべてのファイルをマッピングし、依存関係の順序に沿って編集していく。一歩間違えればパイプラインが赤くなる場面で、本物のグラフが曖昧な検索に勝る理由を、これほど明快に示す例はありません。</p><h2 id="アイデアの質">アイデアの質</h2><p><strong>優勝：<a href="https://gitlab-transcend.devpost.com/submissions/1056751-transcend" rel="">Transcend</a></strong><br />
多くのチームがGitLab Orbitに直接クエリを投げており、たいていの問いに対してはそれで十分です。Transcendが作ったのは、その上にもう一段重ねた推論エンジンでした。セマンティックウェブのスタック——OWL、SPARQL、RDF——を使い、ネイティブAPIが一度の呼び出しでは表現しきれない問いに届かせる仕組みです。推移閉包。コードベースの外へ出て、世界の構造化された知識を引き込むジョイン。デモでは、あるコードベースがどの知識グラフ埋め込み手法を実装しているかを尋ねると、クラス名だけでなく、その着想元となった論文、著者、発表年までが、コードとライブにつながった形で返ってきます。Orbitを「呼び出すAPI」ではなく「その上に築く基盤」として扱ったこと——このカテゴリーが評価したのは、まさにその視点の新しさでした。</p><p><strong>準優勝：</strong><a href="https://gitlab-transcend.devpost.com/submissions/1053916-universal-agent-os" rel="">Universal Agent OS</a><br />
エージェントそのものではなく、それを取り巻くガバナンス層を作りました。まずヒアリングし、コーディングの前に計画を立て、証跡を残し、検証を強制する。エージェントが書くコードの割合が増えるほど、説明責任をどう保つかが本当の課題になっていきます。これは、このリストのほかの項目でもGitLab Orbitのコンテキストが浮かび上がらせている問題そのものです。エージェントは速く動く。それでも、その行動に誰かが責任を持たなければなりません。</p><h2 id="コントリビュートラック">コントリビュートラック</h2><p>コントリビュートラックはショーケーストラックと並行して行われ、決して片手間の取り組みではありませんでした。26名のコントリビューターが、GitLab Orbitのコードベースに61件のマージリクエストを直接マージしています。C++20のconcepts、Goのパッケージ宣言、Kotlinのコルーチン、Rubyのラムダへの言語サポート、オントロジーの修正、CIにおけるSIGPIPEバグの修正、最初のOrbitクエリチュートリアル、そして次の人が<code>max_depth</code>と<code>max_hops</code>の違いでつまずかないためのドキュメント整備——内容は多岐にわたります。19名が賞金を獲得し、26名全員がグッズクレジットを受け取りました。</p><p>賞金は最初にマージされた40件のコントリビューションに贈られました。つまりこのリストは、質だけでなくスピードも映し出しています。ここに名前が挙がるのは、誰よりも早く動作する変更のレビューとマージにこぎ着けた人たちです。今回の賞金受賞者の皆さん、おめでとうございます。</p><p><a href="https://gitlab.com/achalbajpai" rel="">achalbajpai</a>, <a href="https://gitlab.com/aishahsofea" rel="">aishahsofea</a>, <a href="https://gitlab.com/AlphaTheGoat27" rel="">AlphaTheGoat27</a>, <a href="https://gitlab.com/anushkrishnav" rel="">anushkrishnav</a>, <a href="https://gitlab.com/bartekp854" rel="">bartekp854</a>, <a href="https://gitlab.com/bhandari.varun04" rel="">bhandari.varun04</a>, <a href="https://gitlab.com/ChaitanyaManik17" rel="">ChaitanyaManik17</a>, <a href="https://gitlab.com/fa220" rel="">fa220</a>, <a href="https://gitlab.com/fongse" rel="">fongse</a>, <a href="https://gitlab.com/gatlavishweshwarreddy26" rel="">gatlavishweshwarreddy26</a>, <a href="https://gitlab.com/gkepas" rel="">gkepas</a>, <a href="https://gitlab.com/JonstonChan" rel="">JonstonChan</a>, <a href="https://gitlab.com/koves" rel="">koves</a>, <a href="https://gitlab.com/MattGaiser" rel="">MattGaiser</a>, <a href="https://gitlab.com/MatthewOscar" rel="">MatthewOscar</a>, <a href="https://gitlab.com/nexpectArpit" rel="">nexpectArpit</a>, <a href="https://gitlab.com/priyansh3133" rel="">priyansh3133</a>, <a href="https://gitlab.com/Vinayreddy765" rel="">Vinayreddy765</a>, <a href="https://gitlab.com/zidanesalim" rel="">zidanesalim</a>。</p><p>マージされたコントリビューションの全体は、<a href="https://gitlab.com/gitlab-org/orbit/knowledge-graph/-/merge_requests?scope=all&amp;state=merged&amp;label_name%5B%5D=orbit::hackathon" rel="">こちら</a>からご確認いただけます。</p><h2 id="コミュニティから学んだこと">コミュニティから学んだこと</h2><p>あるツールの本質は、使い方を誰かに教わるより前に、人々が実際に何を作るかを見ることで見えてくるものです。</p><p>チャットボットを作ったチームは、ひとつもありませんでした。優れた応募作品には、すべて同じ動きが根底にありました。かつては4つのツールを行き来して午後いっぱいかけて調べていた問いを、一度のクエリで答えてしまったのです。</p><ul><li>このマージで何が壊れるのか</li><li>実際に重要なテストはどれか</li><li>この移行には本当はいくらかかるのか</li><li>先月の変更は今も生きているのか</li></ul><p><strong>私たちが機能として用意したわけではありません。</strong> グラフに手が届いた瞬間、コミュニティが自らそれを見つけ出したのです。これは、どんなベンチマークよりも雄弁にGitLab Orbitを物語っています。</p><p>全応募作品は<a href="https://gitlab-transcend.devpost.com/project-gallery" rel="">プロジェクトギャラリー</a>でご覧いただけます。優れたプロジェクトの数々が、8つの枠には到底収まりきりませんでした。</p><h2 id="gitlab-orbitで構築できること">GitLab Orbitで構築できること</h2><p>ここまでの優勝プロジェクトはどれも、同じ問いに対するひとつの答えです。断片から推測するのではなく、システム全体のファーストパーティのコンテキストから推論するとき、エージェントには何ができるのか。GitLab Orbitは、コード、作業アイテム、マージリクエスト、パイプライン、デプロイメント、所有権を絶えずひとつのグラフへとマッピングし、エージェントとエンジニアが同じ信頼できる唯一の情報源を参照できるようにします。始めるのに、ハッカソンは必要ありません。ここからは、コミュニティが実証したパターンを、Orbit本来のユースケースに沿って紹介します。</p><ul><li><strong>変更を意識した配信：プッシュする前に何が壊れるかを知る。</strong> ある関数の下流の呼び出し元、影響するパイプライン、それらを所有するチーム——これらをGitLab Orbitに一度のクエリで尋ねられます。SankofaのRadarはこれをマージリクエスト上で行い、CrossCutは同じコールグラフを使って変更が到達しうるテストだけを実行し、CIの実行時間を90%削減します。隠れた依存関係を、CIの最後で発見するのではなく、早い段階で見つけられるのです。</li><li><strong>システム全体のコンテキストで、移行をより安全に。</strong> 移行したいサービスに何が依存しているか、どの順序で進めるべきか、リスクはどこにあるか——これをOrbitに尋ねます。Carverはそれを価格付きの見積もりに変え、Marshalはリポジトリごとに移行を進めます。どちらも実際の依存関係グラフから影響範囲を割り出すため、プラットフォームチームは3週間後に隠れた依存先を発見するのではなく、最初から移行日程にコミットできます。</li><li><strong>脆弱性に対する迅速な影響範囲分析。</strong> 脆弱性のある関数から、到達可能なすべてのエンドポイント、それらをビルドするパイプライン、それらを所有するチームまで、グラフをたどります。SankofaのShieldは、これまで数日かけてプロジェクトごとに行っていた相関分析を、一度の走査で完了させます。</li></ul><p>共通しているのは、答えが決してコードだけの中になかったという点です。答えは、コードがパイプライン、デプロイメント、脆弱性、所有権とどうつながっているかの中にあります。GitLab Orbitはそのつながりを常に最新に保つことで、一度のクエリでそれを引き出せるようにしています。<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>上のエージェントはOrbitをネイティブにクエリし、外部のエージェントはMCPを通じて接続し、エンジニアはData Explorerを通じて同じグラフに直接アクセスできます。ひとつのグラフ、ひとつの信頼できる唯一の情報源が、あらゆるエージェントと、チームのすべてのメンバーのためにあります。</p><h2 id="gitlab-orbitを試す">GitLab Orbitを試す</h2><p>ご参加いただいた皆さん、ありがとうございました。自分でも作ってみたいという方は、<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platform</a>上の<a href="https://about.gitlab.com/ja-jp/gitlab-orbit/" rel="">GitLab Orbit</a>から始めてみてください。これらのチームが使ったのと同じコンテキストは、すでに皆さんのソフトウェア開発ライフサイクルの中で動いています。このハッカソンは、また開催する予定です。いち早く知りたい方は、<a href="https://contributors.gitlab.com" rel="">contributors.gitlab.com</a>からご登録ください。</p><p>すでにGitLab Duo Agent PlatformとGitLab Orbitをお使いの環境をお持ちで、どこまで活用できるか試してみたい方は、<a href="https://about.gitlab.com/community/co-create/" rel="">Co-Createにお申し込み</a>ください。</p>]]></content>
        <author>
            <name>Mattias Michaux</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/mattias-michaux/</uri>
        </author>
        <published>2026-07-20T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[複数ステップのソフトウェア開発を、信頼できるエージェント型フローに]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/multi-step-software-delivery-with-agentic-flows/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/multi-step-software-delivery-with-agentic-flows/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>ソフトウェア開発において、次に何をすべきかを把握すること自体は、それほど難しくありません。難しいのは、イシューの実装、パイプラインの修正、マージリクエストのレビューといった同じ手順を、毎回繰り返し実行することです。回答を返すだけのチャットでは、引き継ぎ作業がすべて自分に残ってしまいます。自作のスクリプトも、アクセス制御の変更や新しいトリガー、更新されたレビューゲートを自動的には反映しません。いずれの方法でも、チームが頼りにしている複数ステップの手順は、結局は誰かの頭の中にある手順書のまま留まってしまいます。</p><p><a href="https://docs.gitlab.com/ja-jp/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2</a>では、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/custom/" rel="">カスタムフロー</a>が一般提供（GA）に達し、このギャップを埋めます。カスタムフローとは、一度定義すればGitLabネイティブのイベントからトリガーでき、CI/CDパイプライン内で実行できるAI駆動のワークフローです。<em>失敗したテストを分析 → 修正を生成 → コミット → チームに通知</em>といった自己修復型のパイプラインパターンも、プラットフォームがエンドツーエンドで実行できるようになります。</p><p>さらに、<a href="https://docs.gitlab.com/ja-jp/releases/19/gitlab-19-2-released/#start-foundational-flows-from-agentic-chat" rel="">基本フロー</a>は、ボタン操作やメンション、アサインからしか開始できないという制約がなくなりました。GitLab Duo Agentic Chatで送るリクエストが、変更の実装、マージリクエストのレビュー、失敗したパイプラインの修正といった専門的な作業に該当する場合、Duoが適切なフローを提案します。引き継ぎを承認すれば、そのまま会話の中で処理を追っていけます。</p><p>この結果、エージェント型のソフトウェア開発は、単発のチャットのやり取りにとどまらなくなります。チームはすでに信頼している一連の手順をフローとして定義し、イベントやチャットから起動しながら、すべての中間ステップではなく承認プロセスに人の判断を集中させられます。</p><h2 id="複数ステップのソフトウェア開発が手作業のままである理由">複数ステップのソフトウェア開発が手作業のままである理由</h2><p>エージェント型のデモは、単発のやり取りを前提にしがちです。しかし実際の開発作業は連鎖的なプロセスです。コンテキストを集め、コードを変更し、マージリクエストを開き、CIの結果を待ち、レビューに対応する。フローがなければ、この連鎖の一つひとつを人がクリックし、コピー＆ペーストし、暗黙知として覚えている手順を頼りにこなすことになります。</p><p>GitLab Duo Agent Platform内のカスタムフローがまだ成熟途上だった頃は、こうした連鎖を構築すること自体が暫定的な取り組みに感じられていました。本番運用に耐える完成度やイベントの網羅性がまだ十分でなかったため、チームはすでに信頼している自己修復型パイプラインや「このイシューを実装する」、イベント駆動のフォローアップといった手順をフロー化することを見送っていたのです。</p><h2 id="エージェント型フローがエンジニアリングチームにもたらす変化">エージェント型フローがエンジニアリングチームにもたらす変化</h2><ul><li><strong>すでに信頼している手順を自動化</strong> カスタムフローは、メンション、アサイン、パイプライン、マージリクエストのライフサイクル、作業アイテムの変更など、すでに使い慣れたGitLabのイベントをトリガーとして、プロジェクトをまたいだ複数ステップのタスクを実行します。コンポジットID（複合ID）のもとで実行されるため、アクセス範囲は限定され、実行したアクションの帰属も明確なままです。</li><li><strong>専門的な作業をチャットから開始</strong> Agentic Chatに、デベロッパーフローで作業を実装させたり、コードレビューフローでマージリクエストをレビューさせたり、CI/CDパイプライン修正フローで失敗したパイプラインを診断・修復させたりできます。引き継ぎを承認すれば、進捗はインラインで表示され、その間も作業を続けられます。</li><li><strong>自動レビューを意図的にコントロール</strong> GitLab 19.2では、除外ルールにより、ボットが作成したマージリクエストや特定のブランチパターンのマージリクエストなど、クレジットを消費させたくない対象を自動レビューの対象から外せます。<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/customize/review_instructions/" rel="">レビュー指示のカスタマイズ</a>により、レビューが何を確認するかを調整できるため、<em>どの</em>マージリクエストをレビューするかだけでなく、<em>どのように</em>レビューするかも選べます。</li></ul><p><strong>Duoのエージェント型フローの動作をご覧ください：</strong></p><iframe src="https://player.vimeo.com/video/1210303097?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="19.2 Custom Flows Reach GA Status"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="仕組み">仕組み</h2><p><strong>カスタムフロー</strong> プロジェクトまたは<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/ai_catalog/" rel="">AIカタログ</a>から作成し、公開範囲を選び、必要な場所で有効化して、適切なGitLabイベントで開始されるように<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/triggers/" rel="">トリガー</a>を設定します。重要なステップには、人が確認・承認するチェックポイントを追加できます。19.2では、カスタムフローに「作業アイテムのステータス変更」トリガーが追加されたほか、最大100プロジェクトにわたる公開フローの一括有効化にも対応しました。今後のロードマップには、チームが自然言語でフローを説明するだけで、スキーマを一から書かなくても実行可能な定義を得られるFlow Creation Agentも予定されています。</p><p><strong>Agentic Chatにおける基本フロー</strong> リクエストが専門的な作業に該当する場合、それを基本フローに引き継ぐことができます。実行前に承認するだけで、処理が進む間も会話の中にとどまれます。これが、回答を返すだけのチャットとの違いです。複数ステップの作業は手を離れますが、GitLabの外に出ることはありません。</p><p><strong>コードレビューフローの自動化を更新</strong> 除外ルールにより、ボット駆動や対象外のマージリクエストが、意図しないコードレビューサイクルを消費することを防げます。また、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/customize/review_instructions/" rel="">レビュー指示のカスタマイズ</a>により、チームにとっての「良いレビュー」の基準を定義できるため、自動化を拡大しても、すべてを同じ方法でレビューすることにはなりません。</p><h2 id="すでに実践している手順をフロー化する">すでに実践している手順をフロー化する</h2><p>カスタムフローは一般提供（GA）となり、基本フローもAgentic Chatから開始できるようになりました。必要な内容を伝えるだけで、適切な専門フローにリクエストが振り分けられます。これにより、チームがすでに信頼しているエージェント型のソフトウェア開発の手順を、暗黙知に頼ることなく、予測可能な自動化へと落とし込めます。</p><p>さらに詳しく知りたい方は、まず<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/custom/" rel="">カスタムフロー</a>と<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/" rel="">基本フロー</a>のドキュメントをご確認ください。一点ご注意いただきたいのは、イベント駆動型のフローは、実行する作業内容に応じてクレジットを消費するという点です。大規模なグループ全体に展開する前に、まずはいくつかのプロジェクトで試してみることをおすすめします。</p><p>Duo Agent Platformの他の機能と同様、エージェント型フローも<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platformの無料トライアル</a>からご利用いただけます。Freeプランでは、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom" rel="">簡単な手順でお申し込みいただけます</a>。</p><p>すでにGitLab PremiumまたはUltimateをご利用の方は、まず<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platformを有効化</a>し、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#included-credits/" rel="">サブスクリプションに含まれるGitLabクレジット</a>をご活用ください。</p>]]></content>
        <author>
            <name>Ozer Dondurmacioglu</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/ozer-dondurmacioglu/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Duoセキュリティレビューでスキャナーが見逃すロジックの欠陥を検出]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/gitlab-duo-security-review-flow/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/gitlab-duo-security-review-flow/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>静的スキャナーは、サニタイズされていないクエリ入力やハードコードされたシークレット、安全でないデシリアライゼーションのような、既知のパターンに当てはまる脆弱性の検出を得意としています。一方で、アプリケーションのロジックに潜む欠陥には弱く、そこには一致させるパターンは存在しません。あるのはただ、ドメインの文脈では誤った動作をする、構文的には正しいコードだけです。こうした欠陥は検出されないまま後工程で表面化し、修正コストを押し上げます。</p><p>パブリックベータ版として提供が始まったセキュリティレビューフローは、セキュリティエンジニアと同じ視点でコードの変更を精査します。シグネチャの一致ではなく意図を読み取ることで、ロジックの欠陥を本番環境に到達する前に捉えます。スキャナーが見逃しがちな危険な欠陥を発見するための、大きな一歩です。</p><h2 id="パターンベーススキャナーの盲点">パターンベーススキャナーの盲点</h2><p>アプリケーションに最も大きな被害をもたらす脆弱性は、多くの場合、1行ずつ見れば正しいコードでありながら、認可モデルやデータの機密区分、意図されたワークフローといった、コード自体には含まれない文脈に違反しています。ここでは、代表的な3つの脆弱性クラスを見ていきましょう。</p><p><strong>アクセスと認可：</strong> ユーザーがリソースを読み取ったり変更したりできるかどうかは、言語仕様ではなく認可モデルによって定義されます。オブジェクトレベル認可の不備（IDを変更するだけで他ユーザーのデータにアクセスできてしまう問題）は、2019年以降<a href="https://owasp.org/API-Security/editions/2023/en/0x11-t10/" rel="">OWASP API Security Top 10</a>で常に上位を占めています。</p><p><strong>データの露出：</strong> オブジェクトをシリアライズして返す処理自体は、ごく普通の、一見正しいコードです。それが情報漏えいになるかどうかは、どのフィールドが機密で誰がそれを受け取るかという、構文ではなくドメインの事実によって決まります。</p><p><strong>制御フローとワークフロー：</strong> ビジネスロジックやレース条件に起因する欠陥は、有効な操作が誤った順序で実行されたり、想定外に繰り返されたり、操作されたりすることで発生します。例えば、支払いなしでチェックアウトに到達できてしまう、競合状態で同じ状態に再突入してしまう、パラメーターを改ざんして価格を変更してしまう、といったケースが挙げられます。</p><p>こうした欠陥を捉えるには、これまで手動でのセキュリティレビューが必要でした。しかし、これをすべてのマージリクエスト（MR）に対してスケールさせるにはコストがかかります。また、ペネトレーションテストやバグバウンティは有効な手段ですが、実施のタイミングが遅すぎます。その結果、開発のスピードとセキュリティの専門知識を適用できる速さとの間で、ギャップが広がり続けています。</p><h2 id="すべてのmrにセキュリティの判断を">すべてのMRにセキュリティの判断を</h2><p>GitLab Duo Agent Platformの基本フローであるセキュリティレビューフローは、コードが本来何をすべきかを推論することで、このギャップを埋めます。上述した脆弱性クラスを的確に検出します。具体的には、オブジェクトレベルおよび機能レベルの認可の不備、状態変更操作における認可の欠如、情報開示、マスアサインメント、ビジネスロジックのエラー、そしてステートフルなワークフローにおけるレース条件です。</p><p>従来のスキャナーや人間による分析を置き換えるのではなく補完するものであり、修正コストが最も低い変更の時点でコードをレビューします。GitLab自身のアプリケーションセキュリティチームも、開発期間を通じて社内のMR全体でセキュリティレビューフローを活用してきました。</p><p><strong>セキュリティレビューフローの実際の動作を見る：</strong></p><iframe src="https://player.vimeo.com/video/1209923383?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="19.2 Security Review Flow"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="仕組み">仕組み</h2><p>MRの準備が整ったら、人にレビューを依頼するのと同じ要領で<code>Duo Security Review</code>にレビューを依頼します。元のファイル、変更された行、MRでの議論、関連コードといった文脈の中で差分を解析します。その推論は精度を重視して最適化されており、さらに独立した検証パスが各所見を確認し、誤検出の可能性が高いものを除外します。</p><p>検出結果は、該当する行への差分スレッドとして表示されるほか、内部ノートにも要約が記載されます。パブリックプロジェクトでは、内部ノートのみに限定されるため、セキュリティの詳細が外部に露出することはありません。</p><p>各所見には、レビュアーに必要な次のような文脈が付与されます。</p><ul><li><strong>脆弱性の種類</strong>（CWE参照付き）</li><li><strong>重大度</strong>：Critical、High、Medium、Low のいずれか</li><li><strong>ティア</strong>：Tier 1（悪用可能）、Tier 2（ロジックの欠陥）、Tier 3（設計上の問題）のいずれか</li><li><strong>問題の平易な説明</strong></li><li><strong>修正案</strong>（利用可能な場合）</li></ul><p>重大度によってレビュアーの状態が決まります。CriticalまたはHighの所見があった場合は<em>変更をリクエスト</em>に、MediumまたはLowの所見の場合は<em>コメント</em>になります。何も検出されなかった場合でも、このフローが承認することはありません。最終判断は常に人間が担います。</p><p>その後は、コメントスレッドで組織のDuo Security Reviewサービスアカウントにメンションすることで、質問したり、修正方法を議論したり、所見に異議を唱えたりできます。各所見は、通常のMR提案として修正を適用する、誤検出として却下する、リスクを許容する、のいずれかの方法で解決します。修正をコミットしたら、変更内容を確認するために改めてレビューを依頼してください。</p><h2 id="セキュリティレビューフローを始める">セキュリティレビューフローを始める</h2><p>セキュリティレビューフローは、GitLab Ultimateのお客様向けにパブリックベータ版として提供されています。GitLab.com、GitLab Self-Managed、GitLab Dedicatedでご利用いただけます。</p><p>詳しい始め方は、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/security_review/" rel="">セキュリティレビューフローのドキュメント</a>をご覧ください。</p><p><a href="https://gitlab.com/-/trials/new?glm_content=default-saas-trial&amp;glm_source=about.gitlab.com/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platformの無料トライアル</a>から、セキュリティレビューフローをご利用いただけます。すでにGitLab Ultimateをご契約中の方は、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platformを有効にして</a>、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#included-credits" rel="">サブスクリプションに含まれるGitLabクレジット</a>をご利用ください。</p><p>コストは差分の複雑さや選択するモデルによって変動するため、本格的に展開する前にいくつかのMRで試してみることをおすすめします。価格は一般提供（GA）時に変更される場合があります。</p><p>気づいた点があれば、ぜひ<a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/600304" rel="">フィードバック用のイシュー</a>で共有してください。</p>]]></content>
        <author>
            <name>Mark Settle</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/mark-settle/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab Duo Agent Platformがターミナルに対応]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/gitlab-duo-cli-generally-available/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/gitlab-duo-cli-generally-available/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>ソフトウェアデリバリーに関わる作業の多くは、エディタの中だけでは完結しません。パイプラインは失敗し、テストは壊れ、脆弱性も見つかります。そうした作業の多くは、コマンドラインで始まり、コマンドラインで終わります。</p><p>コードしか理解できないターミナル上のエージェント型AIでは、こうした課題には対応できません。単体のアシスタントは、ソフトウェアライフサイクル全体にわたるエージェントのことも、組織内の複数のプロジェクトにまたがる権限のことも、GitLab上ですでに設定済みの特定のプロジェクトコンテキストのことも把握していないからです。</p><p><a href="https://docs.gitlab.com/ja-jp/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2</a>では、その状況が変わります。<a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo_cli/" rel="">GitLab Duo CLI</a>が一般提供となり、<a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo_chat/agentic_chat/" rel="">GitLab Duo Agentic Chat</a>をそのままターミナルに持ち込めるようになりました。外部から後付けされたツールとは異なり、GitLab Duo CLIはプロジェクトやパイプライン、エージェントの設定をすでに把握しています。調査や構築を行う際はインタラクティブに、ジョブやスクリプトで実行したい場合はヘッドレスに使えます。</p><p>その結果、デベロッパーは障害が発生したシェルにとどまったまま作業を続けられ、その作業はターミナル、UI、エディタをまたいで継続します。プラットフォームチームは、GitLab上の他の機能と同様にロールアウトを管理でき、エージェントによる支援も「この関数を書いて」にとどまらず、デリバリーライフサイクルのより広い範囲をカバーするようになりました。</p><h2 id="ターミナル上のエージェント型aiがコードで止まっていた理由">ターミナル上のエージェント型AIがコードで止まっていた理由</h2><p>エージェント型ツールは、デモ映えする領域、つまりファイル編集からまず成熟していきました。しかし、コミット後のライフサイクルはもっと煩雑で、運用色の強いものです。障害の原因がパイプラインや依存関係、CI設定にある場合、そのコンテキストはGitLabの中にあり、コーディングエージェントの学習データやローカルコンテキストの中にはありません。</p><p>汎用的なCLIアシスタントでこのギャップを埋めようとしたチームは、別の代償を払うことになりました。管理コントロールを共有できず、プラットフォームと連携したMCP／セットアップの診断もできず、エージェント型のソフトウェアライフサイクルの他の部分と単一のIDモデルを共有することもできなかったのです。結果として、ターミナル上のエージェント作業はコーディングにとどまり、デリバリーの他の領域を支援するには至りませんでした。</p><h2 id="duo-cliが一般提供されることでチームが得られるもの">Duo CLIが一般提供されることでチームが得られるもの</h2><ul><li><strong>すでにターミナルで行っている作業は、そのままターミナルで完結できます。</strong> コードベース全体の構造を把握し、ビルドやリファクタリングを行い、パイプラインの失敗を追跡し、CI/CDを整理し、複数ステップのタスクをこなせます。すべての答えを求めてブラウザに切り替える必要はありません。</li><li><strong>どの画面からでも、続きから再開できます。</strong> セッションはGitLab Duo CLI、GitLab UI、エディタ拡張機能の間で共有されます。ブラウザで始めて、シェルで続きを進められます。会話はそのままです。</li><li><strong>まず計画を立て、それから実装します。</strong> インタラクティブモードはAgentic Chatと同様の仕組みです。プランモードでは変更を加えずに状況を確認し、ビルドモードで実際の変更を行います。無人で実行したい場合は、ヘッドレスモードでCIジョブやスクリプトに組み込めます。</li><li><strong>準備が整ったタイミングで有効化できます。</strong> Duo CLIはGitLab.com、GitLab Self-Managed、GitLab Dedicatedで利用できます。Self-ManagedおよびDedicatedでは、管理者がインスタンス単位でアクセスのオン・オフを切り替えられます。どの環境でも、デベロッパーは<code>/doctor</code>を実行してセットアップを確認したり、<code>/mcp</code>でMCPの設定を確認したりできます。</li></ul><p><strong>GitLab Duo CLIの実際の動作を見る：</strong></p><iframe src="https://player.vimeo.com/video/1210314517?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479" frameBorder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerPolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="Demo - Duo CLI goes GA with 19.2"></iframe><script src="https://player.vimeo.com/api/player.js"></script><h2 id="duo-cliの仕組み">Duo CLIの仕組み</h2><p>最も簡単な方法は<a href="https://docs.gitlab.com/ja-jp/cli/duo/cli/" rel="">GitLab CLI</a>経由です。<code>glab duo cli</code>を実行すれば、認証は<code>glab</code>が代わりに処理してくれます。個人アクセストークンを使って<code>duo</code>をスタンドアロンツールとしてインストールし、実行することもできます。どちらの構成でも、同じモードと機能を利用できます。</p><ul><li><strong>インタラクティブモード</strong> — ターミナル上でチャットしながら、実行前にツールを承認できます。コードベースを調査し、修正案を計画してから、変更を加える準備ができたらビルドモードに切り替えます。</li><li><strong>ヘッドレスモード</strong> — Runner、スクリプト、自動化向けの非対話型実行です。<code>glab duo cli run --goal</code>または<code>duo run --goal</code>を使用します。</li></ul><p>たとえば、パイプラインが失敗したときは、同じシェルからこう尋ねられます。</p><pre className="language-shell shiki shiki-themes github-light" code="$ glab duo cli
&gt; The pipelines in MR 23 are failing. Please help me fix them.
" language="shell" meta="" style=""><code><span class="line" line="1"><span class="s7eDp">$</span><span class="sYBdl"> glab</span><span class="sYBdl"> duo</span><span class="sYBdl"> cli
</span></span><span class="line" line="2"><span class="sD7c4">&gt;</span><span class="sgsFI"> The pipelines in MR 23 are failing. Please help me fix them.
</span></span></code></pre><p>Duo CLIは状況を確認し、原因を特定したうえで、適用前にレビューできる変更案を提示します。規模が大きくなっても、カスタム指示（<code>chat-rules.md</code>、<code>AGENTS.md</code>、<a href="http://SKILL.md" rel=""><code>SKILL.md</code></a>）に従って動作し、<a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo_cli/#custom-slash-commands" rel="">カスタムスラッシュコマンド</a>を使ってインタラクティブセッションを拡張できます。</p><h2 id="今すぐduo-cliを使ってみる">今すぐDuo CLIを使ってみる</h2><p>インストールと認証については<a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo_cli/" rel="">GitLab Duo CLIのドキュメント</a>をご覧ください。すでにGitLab CLIをお使いの場合は、<a href="https://docs.gitlab.com/ja-jp/cli/duo/cli/" rel=""><code>glab duo cli</code></a>から始められます。</p><p>GitLabを初めてお使いですか？<a href="https://about.gitlab.com/ja-jp/gitlab-duo-agent-platform/" rel="">GitLab Duo Agent Platformの無料トライアルを開始</a>できます。すでにPremiumまたはUltimateをご利用の場合は、<a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/turn_on_off/" rel="">Duo Agent Platformを有効化</a>し、<a href="https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#included-credits/" rel="">サブスクリプションに含まれるGitLabクレジット</a>をご活用ください。</p><style>html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}</style>]]></content>
        <author>
            <name>Ozer Dondurmacioglu</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/ozer-dondurmacioglu/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[フォレスターコンサルティング調査：GitLab Duo Agent Platformが400%のROIを実現]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>新しい<a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">フォレスターコンサルティングのTotal Economic Impact™（TEI）調査</a>によると、GitLab Duo Agent Platformを利用する組織は、3年間で400%の投資対効果（ROI）と750万米ドルの正味現在価値（NPV）を達成し、投資回収期間は6ヶ月未満であることが分かりました。</p><p>エージェント型コーディングは開発者の生産性を高めます。しかし、より難しい課題は、企業がそのスピードをいかにリターンへと転換するかという点です。プロダクションレベルのソフトウェアを出荷する上で、コミットの高速化だけでは十分ではありません。保険・金融サービス業界のあるシニアシステムエンジニアは率直にこう述べています。かつては数時間を要していたコードレビューが今ではわずかな時間で完了し、コード生成の80～90%をプラットフォームが担っているとのことです。</p><p>GitLabの導入によって得られるリターンをリーダーが理解できるよう、フォレスターは金融サービス、ソフトウェア開発、エンターテインメント、保険の各業界でGitLab Duo Agent Platformを本番環境で利用する4名の意思決定者にインタビューを実施しました。そして、その経験を1つの複合企業（コンポジット組織）として統合しました。これは、年間売上高30億米ドル、従業員数3,000人のグローバル企業を想定したもので、3年間でGitLab Duo Agent Platformの利用者数を150人から250人へと拡大するというシナリオです。</p><h2 id="コストとroiを比較する">コストとROIを比較する</h2><p>この調査では、必要な投資についても明確に示されています。3年間のリスク調整後コストは、消費型クレジットで130万米ドル、導入・運用管理（パイロットプログラムのための社内労働、トレーニング、サポートを含む）で58万9,000米ドルです。これを940万米ドルの便益と比較した結果が、400%のROIおよび750万米ドルの正味現在価値の根拠となっています。</p><p><img alt="Graphic showing benefits of GitLab Duo Agent Platform" src="https://res.cloudinary.com/about-gitlab-com/image/upload/v1783954053/j8qizamomxpvqcxjabeu.png" /></p><h2 id="導入前手作業中断コードレビューのボトルネック">導入前：手作業、中断、コードレビューのボトルネック</h2><p>GitLab Duo Agent Platformを導入する前、インタビュー対象者たちは、よく見られるボトルネックについて語りました。ソフトウェアの構築、レビュー、セキュリティ確保を、手作業のプロセス、シニアエンジニアの専門知識、その場しのぎの知識共有に依存していたチームです。新入社員は、シニアエンジニアを本来の業務から引き離さない限り、行き詰まりを解消できませんでした。セキュリティの修正は、適切な知見を持つ少数の担当者が対応できるまで、キューに滞留していました。そして、コードを書くことではなく、コードレビューこそが、多くの場合出荷の妨げとなっていました。こうした依存関係こそが、フォレスターの複合企業が取り組み、解決し、測定した対象です。</p><h2 id="導入後オンボーディングの迅速化移行の迅速化セキュリティ修復の迅速化時間の節約">導入後：オンボーディングの迅速化、移行の迅速化、セキュリティ修復の迅速化、時間の節約</h2><p><a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">フォレスターは、複合企業における4つの便益領域を定量化しました</a>。リスク調整後の便益は合計940万米ドルで、コスト190万米ドルに対する結果です。</p><p><strong>新入社員のオンボーディングが80%高速化。</strong> 同僚を本来の業務から引き離す代わりに、新しいチームメンバーはIDEやリポジトリに組み込まれたエージェント型チャットを活用し、不慣れなコードベースや規約を自力で理解するためのコンテキストを取得できるようになりました。これにより58万2,000米ドルの削減を実現しています。</p><p><strong>8ヶ月を見込んでいた移行作業が2ヶ月で完了し、期間を75%短縮。</strong> 複合企業は、オンプレミスのGitLab環境からGitLab SaaSへの大規模移行において、GitLab Duo Agent Platformを活用してパイプラインの失敗をリアルタイムで診断・解決し、人件費を15万7,000米ドル削減しました。</p><p><strong>セキュリティおよびQAエンジニアの時間を40%削減。</strong> QAおよびセキュリティエンジニアは、GitLab Duo Agent Platformが提供するコンテキストに応じた説明や修正提案を活用することで修復時間を短縮し、シニアエンジニアへの依存を軽減しました。これにより、3年間で130万米ドルの人件費削減を実現しています。</p><p><strong>すべての開発者が、機能開発に充てられる時間を週あたり20%増加。</strong> エージェント型チャットとAIエージェントが、これまでビルド時間を圧迫していたコードレビュー、テスト、トラブルシューティングを引き継ぎました。3年間で導入が拡大するにつれ、全開発者を合わせた効果は740万米ドルに達しています。</p><p>フォレスターは、本調査で定量化しなかった便益についても確認しています。重複するAI開発ツールの統合によるコスト削減、開発者満足度の向上、チーム間の知識共有の改善などが含まれます。</p><blockquote><p><em>「以前は数週間かかっていた機能リリースが、今では数日で完了しています。生産性の面で非常に高い倍率の向上を実感しています」－ 金融サービス企業のオートメーション責任者</em></p></blockquote><h2 id="セキュアなソフトウェアをより速く出荷することで複利的なリターンを実現">セキュアなソフトウェアをより速く出荷することで複利的なリターンを実現</h2><p>インタビュー対象者たちは、単にコーディングを高速化しただけではありません。機能を数週間ではなく数日で出荷し、脆弱性を数分で修復し、新入社員のオンボーディングをわずかな時間で完了させ、8ヶ月の移行作業を2ヶ月に圧縮しました。本調査が示すパターンは、エージェント型コーディングが個々のアウトプットを加速させる一方で、そのスピードがソフトウェアライフサイクル全体を支えるインフラを通過して初めて、リターンが複利的に積み重なるということです。</p><p>自組織におけるソフトウェアエンジニアリング向けのエージェント型インフラのビジネスケースを構築しようとしている場合、本調査は、4つの企業が実際に行ったことに基づくフレームワークを提供し、予測を現実へと転換する助けとなります。</p><blockquote><p><a href="https://about.gitlab.com/resources/study-forrester-tei-gitlab-dap" rel="">GitLab Duo Agent PlatformのフォレスターTotal Economic Impact™調査の全文を読む</a>。完全な調査手法、財務モデル、インタビュー結果をご確認いただけます。</p></blockquote><p><em>本調査はGitLabの委託によりフォレスターコンサルティングが実施したものです。競合分析としての利用を意図したものではありません。フォレスターは、他組織が得られる可能性のあるROIについて一切の前提を置いていません。本調査の結果は、インタビューに応じた組織およびそれらを基にした複合企業の経験を代表するものです。GitLabはインタビューの対象となる顧客名を提供しましたが、インタビュー自体には関与しておらず、フォレスターが調査結果の編集管理を行っています。</em></p>]]></content>
        <author>
            <name>Jessica Taylor</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/jessica-taylor/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
    <entry>
        <title type="html"><![CDATA[GitLab 19.2リリース]]></title>
        <id>https://about.gitlab.com/ja-jp/blog/gitlab-19-2-release/</id>
        <link href="https://about.gitlab.com/ja-jp/blog/gitlab-19-2-release/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <content type="html"><![CDATA[<p>本ブログは、<a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2 release notes</a>の抄訳です。内容に相違がある場合は、原文が優先されます。</p><blockquote><p><strong>お知らせ：リリースノートの掲載先が変わりました</strong><br />
GitLabのリリースノートは、GitLab Docsでの公開が正式な掲載先となりました。最新の情報は下記をご覧ください。<br /><a href="https://docs.gitlab.com/releases/19/gitlab-19-2-released/" rel="">GitLab 19.2</a></p><p>本ブログでもしばらくの間は日本語訳の投稿を続けますが、将来的にはDocsのみでの公開に切り替わる予定です。ぜひDocsの方もチェックしてみてください！</p></blockquote><h1 id="gitlab-192-リリースノート">GitLab 19.2 リリースノート</h1><p>2026年7月16日、GitLab 19.2が以下の機能とともにリリースされました。</p><p>今月の<a href="https://contributors.gitlab.com/notable-contributors" rel="">注目コントリビューター</a>として、<a href="https://gitlab.com/vivekshukl007" rel="">vivekshukl007</a>さんをご紹介できることを嬉しく思います。</p><p>VivekさんはEmiratesのシニアデータエンジニアで、GitLab OrbitへのScala言語サポート追加という大きなインパクトをもたらすコントリビュートを行いました。この変更により、ScalaコードベースでWork in Progressのデベロッパーのコードグラフ機能が向上します。</p><h2 id="主要な機能">主要な機能</h2><h3 id="gitlab-duo-cliが一般提供開始">GitLab Duo CLIが一般提供開始</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo_cli" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/19717" rel="">関連イシュー</a></li></ul><p>GitLab Duo CLIは、GitLab Duo Agent Platformをターミナルから直接利用できるツールです。</p><p>CLIを使用して、コードベースに関する複雑な質問を行ったり、ユーザーに代わって自律的にアクションを実行したりできます。 外部ツールとは異なり、CLIはGitLabプロジェクト、パイプライン、エージェント設定に関するコンテキストを保持しています。</p><p>主な機能は次のとおりです。</p><ul><li>2つのモード: インタラクティブチャットモードとCI/CD向けヘッドレスモード</li><li>GitLab Self-ManagedおよびGitLab Dedicated向けの管理者によるオン/オフ制御</li><li>モデルの選択と共有セッション</li><li>ツールの承認</li><li>Model Context Protocol（MCP）接続</li><li>スラッシュコマンド（コンテキストの使用状況確認やコンテキストのコンパクションコマンドを含む）</li><li>スキルおよび<code>AGENTS.md</code>カスタマイズファイルのサポート</li></ul><p>GitLab Duo CLIは、GitLab CLI（<code>glab</code>）経由またはスタンドアロンツールとしてインストールできます。</p><h3 id="gitlab-duoのカスタムフローが一般提供を開始">GitLab Duoのカスタムフローが一般提供を開始</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/custom/" rel="">ドキュメント</a> · <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/602415" rel="">関連イシュー</a></li></ul><p>カスタムフローは、GitLabプロジェクト全体にわたる複雑なマルチステップタスクを自動化するために、ユーザーが作成・設定できるAI駆動のワークフローです。チームはワークフローのステップ、コンポーネント、トリガーを定義することで、繰り返し発生する開発・運用作業をGitLabイベントに応じて自動実行できます。GitLab UIでは、フローがGitLab CI/CD上で直接実行されるため、GitLabを離れることなく一般的なタスクを自動化できます。</p><p>主な機能は次のとおりです。</p><ul><li>チーム固有の自動化に対応した、YAMLで定義された再利用可能なワークフロー</li><li>複雑なマルチステップタスクに対応するマルチエージェントオーケストレーション</li><li>重要なステップでの承認やフィードバックのために、ユーザーが定義できるヒューマン・イン・ザ・ループ（HITL）チェックポイント</li><li>メンション、割り当て、パイプラインイベント、マージリクエストのライフサイクルイベントを含むネイティブGitLabトリガー</li><li>プロジェクトまたはAIカタログからのフローの作成と管理</li><li>パブリックおよびプライベートの表示レベル制御</li><li>サービスアカウントと複合IDを使用したセキュアな実行</li><li>実行前に設定の問題を検出するYAML検証</li></ul><h3 id="スケジュールされたパイプライン実行ポリシーがga開始">スケジュールされたパイプライン実行ポリシーがGA開始</h3><ul><li><strong>プラン:</strong> Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/policies/scheduled_pipeline_execution_policies/" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/17875" rel="">関連イシュー</a></li></ul><p>スケジュールされたパイプライン実行ポリシーが一般提供（GA）になりました。セキュリティポリシープロジェクトでスケジュールを一度定義するだけで、対象となるすべてのプロジェクトに適用できます。各プロジェクトの <code>.gitlab-ci.yml</code> を個別に編集する必要はありません。要件が変更された場合も、多数のCI/CD設定ファイルを横断して変更を調整する代わりに、ポリシーを一か所で更新するだけで対応できます。</p><p>スケジュールポリシーを使用すると、コミットの有無に関わらず、コンプライアンススクリプト、セキュリティスキャン、またはその他のカスタムCI/CDジョブを日次・週次・月次のケイデンスで実行できます。これは、定期的なコード変更がないリポジトリ（新たに発見された脆弱性を検出するための依存スキャンの実行など）に特に有効です。各ポリシーは独立したパイプラインとして実行され、タイムゾーンのサポート、時間帯分散、およびブランチターゲティングに対応しています。</p><h3 id="agentic-chatから基本フローを開始可能に">Agentic Chatから基本フローを開始可能に</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo_chat/agentic_chat" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/20484" rel="">関連イシュー</a></li></ul><p>これまでのバージョンのGitLabでは、基本フローは特定のUI操作、メンション、割り当てからのみ開始できました。 現在は、GitLabのUI上でAgentic Chatとの会話の一部として、これらのフローを開始できるようになりました。</p><p>リクエストがスペシャリストワークフローに一致すると、Agentic Chatは以下のフローのいずれかにハンドオフします。</p><ul><li><a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/developer/" rel="">デベロッパーフロ</a>: 変更を実装するか、マージリクエストを作成します</li><li><a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/code_review/" rel="">コードレビューフロ</a>: マージリクエストをレビューします</li><li><a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/fix_pipeline/" rel="">CI/CDパイプライン修正フロー</a>: 失敗したパイプラインを診断して修復します</li></ul><p>チャットでハンドオフを承認すると、会話内または <strong>AI</strong> &gt; <strong>セッション</strong> から進捗を確認できます。</p><h3 id="サブグループへのgitlab-duo利用可否の選択的設定">サブグループへのGitLab Duo利用可否の選択的設定</h3><ul><li><strong>プラン:</strong> Ultimate</li><li><strong>提供形態:</strong> GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo/turn_on_off/#lock-gitlab-duo-off-for-selected-subgroups" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/22389" rel="">関連イシュー</a></li></ul><p>GitLab Dedicatedインスタンスの管理者は、特定のサブグループに対してGitLab DuoおよびGitLab Duo Agent Platformを利用不可に設定しながら、他のサブグループでは引き続き有効化できるようにすることが可能です。</p><p>これまでは、インスタンス全体でGitLab DuoとAgent Platformを無効化するか、すべてのサブグループで利用可能にするかのいずれかしか選択できませんでした。</p><p>今回のリリースで、デフォルト拒否のサブグループ単位の許可リストを適用できるようになりました。特定のサブグループを <strong>常にオフ（ロック済み）</strong> に設定すると、その子孫グループおよびプロジェクトではGitLab DuoとAgent Platformを有効化できなくなります。一方、他のサブグループについてはオーナーロールを持つユーザーの判断に委ねることができます。ロックの適用・解除は管理者のみが行え、影響を受けるオーナーには、GitLab Duoが親グループによってロックされている旨のメッセージが明確に表示されます。</p><p>この機能は、コンプライアンスおよびプラットフォームガバナンスチームが厳格なデータ分類要件を満たすうえで役立ちます。</p><h3 id="デフォルト以外のブランチのトラッキングベータ版">デフォルト以外のブランチのトラッキング（ベータ版）</h3><ul><li><strong>プラン:</strong> Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/vulnerability_report/" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/3430" rel="">関連エピック</a></li></ul><p>デフォルトブランチ以外のブランチでも脆弱性を追跡できるようになりました。最良の結果を得るには、特定の環境（<code>project-qa</code>、<code>project-prod</code>）やデプロイプラットフォーム（<code>project-iOS</code>、<code>project-android</code>）向けのブランチなど、長期間維持されるリリースブランチを少数に絞って対象にすることをお勧めします。</p><p>このベータ版には以下の機能が含まれています。</p><ul><li>セキュリティ設定ページで追跡ブランチを追加できます（ネームスペース内のプロジェクト数の2倍まで）。</li><li>脆弱性レポートでブランチによるフィルタリングが可能です。</li><li>プロジェクトレベルのセキュリティダッシュボードでブランチによるフィルタリングが可能です。</li><li>追跡ブランチ上のすべての脆弱性タイプ（以前は対象外だったCVEを含む）を追跡できます。</li><li>ブランチがデフォルトブランチにマージされた際に、脆弱性ステータスのメタデータの整合性を維持します。</li><li>追跡ブランチ上の脆弱性ステータスを更新できます。</li></ul><h3 id="依存関係スキャン自動修正ベータ版">依存関係スキャン自動修正（ベータ版）</h3><ul><li><strong>プラン:</strong> Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/remediate/dependency_scanning_auto_remediation/" rel="">ドキュメント</a> · <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/604799" rel="">関連イシュー</a></li></ul><p>GitLab 19.2では、依存関係スキャン自動修正をベータ版として導入しました。この機能は、依存関係スキャンのワークフローに自動化された脆弱性修正を直接組み込むもので、2つの機能を提供します。</p><ul><li>依存関係バージョンの自動更新：GitLab.com、GitLab Self-Managed、GitLab Dedicatedで利用可能。</li><li>エージェント型による破壊的変更の解決：GitLab.com、GitLab Self-Managed、GitLab Dedicatedで利用可能。GitLabクレジットを消費します。</li></ul><p>依存関係バージョンの自動更新は、脆弱な依存関係を安全なバージョンに更新するマージリクエストを自動的に作成します。有効にすると、GitLabはプロジェクト内の脆弱な依存関係を監視し、手動での介入なしに修正用MRを作成します。デフォルトでは、パッチバージョンとマイナーバージョンへの更新が対象です。</p><p>エージェント型による破壊的変更の解決は、複雑な更新を処理するために修正フローを拡張します。依存関係のバージョンを更新するマージリクエストのパイプラインが破壊的変更によって失敗した場合、GitLab Duoはパイプラインのエラー、依存関係の変更履歴、およびコードでの依存関係の使用方法を分析します。</p><p>GitLab Duoは同じMRに修正をコミットし、パイプラインが成功するまで再実行します。エージェント型による破壊的変更の解決を有効にすると、バージョン更新の対象がメジャーバージョンにも拡張されます。</p><p>2つの機能を組み合わせることで、完全な修正ループが形成されます。GitLabがMRを作成し、更新が複雑な場合はGitLab Duoが解決します。</p><p>セットアップ手順については、<a href="https://docs.gitlab.com/ja-jp/user/application_security/remediate/dependency_scanning_auto_remediation/" rel="">依存関係スキャン自動修正</a>を参照してください。</p><p>フィードバックは<a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/605599" rel="">ベータ版フィードバックイシュー</a>でお寄せください。</p><h3 id="ai監査イベントレポートベータ版">AI監査イベントレポート（ベータ版）</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/ai-audit-events/" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/20237" rel="">関連イシュー</a></li></ul><p>AI監査イベントレポートがベータ版として利用可能になりました。セキュリティおよびコンプライアンスチームは、GitLab Duoエージェントのアクティビティを一元的にダウンロード可能な記録として確認できます。</p><p>これまで、エージェントのアクティビティはパイプラインジョブやイベント履歴に分散しており、以下の目的でセッションを再構成することが困難でした。</p><ul><li>インシデント調査。</li><li>コンプライアンスレビュー。</li><li>AIガバナンスレポート。</li></ul><p>今回のリリースで、各エージェントセッションが以下の情報を含む包括的な監査アーティファクトを生成するようになりました。</p><ul><li>入力。</li><li>モデルおよび設定コンテキスト。</li><li>時系列のイベントタイムライン。</li><li>出力。</li></ul><p><strong>ガバナンス</strong>ページからAI監査イベントを参照し、エージェントやセッションの詳細でフィルタリングして、個々のイベントを詳しく確認したり、基となるセッションアーティファクトをダウンロードしたりできます。</p><h3 id="セキュリティレビューフローベータ版">セキュリティレビューフロー（ベータ版）</h3><ul><li><strong>プラン:</strong> Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/security_review/" rel="">ドキュメント</a> · <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/600477" rel="">関連イシュー</a></li></ul><p>セキュリティレビューフローは、マージリクエスト内のビジネスロジックの脆弱性を直接検出します。既知のパターンをスキャンする静的解析ツールとは異なり、セキュリティレビューフローはコードの意図を推論し、パターンベースのスキャナーが見落としがちな認可のバイパス、データの露出、ロジックエラーを特定します。</p><p>レビューをリクエストするには、マージリクエストのレビュアーとして <strong>Duo Security Review</strong> サービスアカウントを割り当てます。フローは差分を分析し、脆弱性が発生している正確な行にスレッド形式のコメントとして結果を投稿します。各コメントには、Common Weakness Enumeration（CWE）の分類、重大度の評価、および可能な場合はマージリクエストを離れることなく適用できるインラインの修正候補が含まれます。</p><p>各レビューは、マージリクエストの差分の複雑さに基づいてGitLabクレジットを消費します。</p><h2 id="agent-platformの中核機能">Agent Platformの中核機能</h2><h3 id="aiカタログアイテムの一括有効化">AIカタログアイテムの一括有効化</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/custom" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/22486" rel="">関連イシュー</a></li></ul><p>AIカタログでパブリックカスタムエージェント、外部エージェント、およびパブリックカスタムフローを有効化する際、プロジェクトを1つずつ選択する代わりに、1回の操作で最大100件のプロジェクトを選択できるようになりました。</p><h3 id="カスタムエージェントの検証">カスタムエージェントの検証</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/custom" rel="">ドキュメント</a> · <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/601986" rel="">関連イシュー</a></li></ul><p>以前は、実行時にプロンプトが失敗するカスタムエージェントをAIカタログに保存できました。たとえば、セキュリティルールに抵触するプロンプトを使用すると、エージェントは使用中に何も行わず、エラーも表示されませんでした。</p><p>カスタムエージェントを作成または更新する際、GitLabがプロンプトの設定を検証し、エージェントを保存する前にエラーを通知するようになりました。</p><h3 id="フローでidトークンを設定する">フローでIDトークンを設定する</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/execution/#configure-id-tokens" rel="">ドキュメント</a> · <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/591140" rel="">関連イシュー</a></li></ul><p>IDトークンを使用すると、長期間有効な認証情報を保存することなく、サードパーティのOpenID Connect（OIDC）サービスで認証できます。たとえば、バイナリやコミットのキーレス署名、またはシークレットマネージャーからのシークレットの取得にIDトークンを活用できます。</p><p>この機能を使用するには、エージェントの設定に<code>id_tokens</code>キーワードを追加し、GitLab Duo Agent Platformが発行するトークンを信頼するようにサービスを設定してください。</p><h3 id="gitlab-duo-agent-platform-self-hostedの使用量課金チェック">GitLab Duo Agent Platform Self-Hostedの使用量課金チェック</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab Self-Managed, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/administration/gitlab_duo/configure/#run-a-health-check-for-gitlab-duo" rel="">ドキュメント</a> · <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/603196" rel="">関連イシュー</a></li></ul><p>オンラインライセンスでセルフホストモデルを使用しているGitLab Self-Managedのお客様向けに、GitLab Duoヘルスチェックが以下のエンドポイントへの接続を確認するようになりました。</p><ul><li>カスタマーポータル</li><li>AIゲートウェイ</li><li>Duoワークフローサービス</li></ul><p>これらのエンドポイントへの接続は、使用量課金に必要です。</p><p>これまでは、ファイアウォールによってこれらのコンポーネントへの接続がブロックされていても、ユーザーが機能を使用できなくなるまで管理者は接続の問題を把握できませんでした。管理者はこの新しい検証チェックを使用して、ユーザーへの影響が生じる前に問題を診断し、ファイアウォールの許可リストを確認できるようになりました。</p><h3 id="gitlab-duo-enterpriseシートのコードレビューフロー">GitLab Duo Enterpriseシートのコードレビューフロー</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/project/merge_requests/duo_in_merge_requests/#turn-on-code-review-flow-for-gitlab-duo-enterprise-seats" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/22247" rel="">関連イシュー</a></li></ul><p>以前のバージョンのGitLabでは、GitLab Duo Enterpriseシートを持つユーザーがGitLab Duoにコードレビューをリクエストすると、GitLab Duoコードレビューがレビューを実行していました。 これは、グループに対してコードレビューフローが有効になっている場合でも同様でした。すべてのユーザーに対してエージェント型フローを有効にする方法はありませんでした。</p><p>今回のリリースで、トップレベルグループのオーナーがこのデフォルト設定を変更し、ユーザーのシートに関わらず、すべてのコードレビューでコードレビューフローを使用するよう設定できるようになりました。 すべてのレビューはGitLabクレジットを消費します。</p><p>この変更により、GitLab Duo Enterpriseシートを持つユーザーも、他のユーザーと同様に、リポジトリ全体のコンテキスト認識、マルチステップの推論、およびレビューセッションを利用できるようになります。</p><h3 id="マージリクエストを自動コードレビューから除外するベータ版">マージリクエストを自動コードレビューから除外する（ベータ版）</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/code_review/#exclude-merge-requests-from-automatic-reviews" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/21585" rel="">関連イシュー</a></li></ul><p>以前のバージョンのGitLabでは、プロジェクトまたはグループで自動レビューが有効になっている場合、GitLab Duoはすべての対象マージリクエストをレビューしていました。 これには、ボットが作成した依存関係の更新、フィーチャーブランチ、実験的な作業など、チームが実際にフィードバックを求めていない変更も含まれていました。</p><p>除外ルールを使用して、特定のマージリクエストを自動レビューから除外できるようになりました。 プロジェクトまたはグループに <code>.gitlab/duo/mr-review-automated-rules.yaml</code> ファイルを作成し、作成者、ソースブランチ、またはターゲットブランチに基づいた除外ルールを定義します。 ルールでは <code>dependabot/*</code> や <code>*-bot</code> のようなグロブパターンをサポートしています。</p><p>除外されたマージリクエストに対しても、手動でレビューをリクエストすることは引き続き可能です。</p><p>この機能はベータ版であり、<code>duo_code_review_automated_rules</code> 機能フラグによって制御されています（デフォルトで有効）。</p><h3 id="マージ前の自動リベース">マージ前の自動リベース</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/project/merge_requests/methods/#automatic-rebase-before-merge" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/16803" rel="">関連イシュー</a></li></ul><p>以前のバージョンのGitLabでは、プロジェクトで半線形または早送りマージ方式を使用している場合、ソースブランチがターゲットブランチより遅れると追加の手順が必要でした。 マージするには、<strong>リベース</strong>を選択して完了を待ち、その後マージリクエストに戻って<strong>マージ</strong>を選択する必要がありました。 この2段階の操作により、すべてのマージに余分な手間が生じていました。</p><p>プロジェクトのマージリクエスト設定で<strong>マージ前の自動リベースを有効にする</strong>を選択できるようになりました。 この設定を有効にすると、GitLabはマージ時にソースブランチをターゲットブランチにリベースするため、1回の操作でマージできます。 個々のコミットのGPG署名を保持することが重要な場合は、この設定をオフのままにしておくことができます。</p><h3 id="インスタンスレベルのカスタムレビュー指示">インスタンスレベルのカスタムレビュー指示</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/customize/review_instructions#configure-custom-review-instructions-for-an-instance" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/22616" rel="">関連イシュー</a></li></ul><p>以前のバージョンのGitLabでは、GitLab Duoのカスタムレビュー指示はプロジェクトレベルまたはグループレベルでのみ定義できました。 インスタンス全体で一貫したレビューガイダンス（セキュリティルールや社内コーディング標準など）を適用したい管理者は、すべてのプロジェクトに同じ指示を重複して設定する必要がありました。</p><p>今回のリリースで、インスタンス全体に対してカスタムレビュー指示を設定できるようになりました。</p><p>管理者はインスタンス内のプロジェクトをテンプレートとして選択できます。GitLab Duoがコードレビューを実行する際、インスタンスレベルの <code>.gitlab/duo/mr-review-instructions.yaml</code> ファイルの指示が、グループレベルおよびプロジェクトレベルの指示と組み合わせて適用されます。これにより、組織はインスタンス全体のレビュー標準に対して信頼できる唯一の情報源を持つことができます。</p><p>コードレビューフローとGitLab Duoコードレビューはいずれも、インスタンスレベルのカスタム指示をサポートしています。</p><h3 id="レビューディスカッションをgitlab-duoで解決ベータ版">レビューディスカッションをGitLab Duoで解決（ベータ版）</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/project/merge_requests/duo_in_merge_requests/#resolve-a-discussion-with-gitlab-duo" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/22117" rel="">関連イシュー</a></li></ul><p>以前のバージョンのGitLabでは、コードレビューのコメントを解決するには、エディタに切り替えて修正を実装し、変更をコミットしてプッシュしてから、スレッドを手動でクローズする必要がありました。 未解決のディスカッションごとにこのサイクルを繰り返す必要があり、コンテキストスイッチのオーバーヘッドが多忙なレビュー全体で積み重なっていました。</p><p>任意のレビューディスカッションで<strong>GitLab Duoで解決</strong>を選択できるようになりました。 GitLab Duoはレビューコメントとその周辺のコードを読み取り、レビュアーが説明した変更を実装して、ブランチにコミットします。その後、GitLab Duoは変更内容と理由の簡単なサマリーをディスカッションに返信し、スレッドを解決します。変更内容を確認し、修正がコメントに正しく対応していない場合はスレッドを再オープンできます。</p><h2 id="統合devopsとセキュリティ">統合DevOpsとセキュリティ</h2><h3 id="ciエキスパートエージェントの一般提供開始">CIエキスパートエージェントの一般提供開始</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/foundational_agents/ci_expert_agent" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/21405" rel="">関連イシュー</a></li></ul><p>CIエキスパートエージェントが一般提供開始になりました。このAI搭載アシスタントは、GitLab CI/CDパイプラインの作成、デバッグ、最適化を支援します。リポジトリを分析し、パイプライン設定に関するガイダンスを提供します。</p><p>今回の一般提供（GA）は、ベータ版およびデザインパートナープログラムでの実績を踏まえたものであり、実際の顧客ワークロードでの本番運用にエージェントを対応させることで、プロジェクトにおけるCI/CD導入のハードルを下げます。</p><p>このエージェントは<a href="https://docs.gitlab.com/ja-jp/orbit/" rel="">Orbit</a>と統合されています。OrbitとそのKnowledge Graphを有効にすると、エージェントはグラフベースのコードインテリジェンスを活用し、より文脈に即したパイプラインの推奨を提供します。OrbitとKnowledge Graphはベータ版です。</p><h3 id="cicdパイプライン修正フローによるターゲットを絞った修正の提案">CI/CDパイプライン修正フローによるターゲットを絞った修正の提案</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/fix_pipeline" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/21837" rel="">関連イシュー</a></li></ul><p>GitLab DuoのCI/CDパイプライン修正フローに、2つの主要な改善が加わりました。</p><ul><li>マージリクエストの差分に関連ファイルが既に含まれている場合、そのマージリクエストに対してコード提案として直接修正が提示されます。</li><li>フローがパイプラインの失敗を分類してから対処するため、より的を絞った診断が得られます。</li></ul><p>また、フローはパイプライン階層全体にわたって子パイプラインの失敗を分析し、<code>AGENTS.md</code>ファイルを使用してプロジェクトに合わせた動作のカスタマイズが可能になりました。さらに、マージリクエストのコメントをすっきり保つため、AIの推論プロセスはデフォルトで折りたたまれて表示されます。</p><p>フィードバックは<a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/601991" rel="">フィードバックイシュー</a>にお寄せください。</p><h3 id="gitlabアチーブメントでコントリビューターを表彰">GitLabアチーブメントでコントリビューターを表彰</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/profile/achievements/" rel="">ドキュメント</a>
· <a href="https://gitlab.com/groups/gitlab-org/-/work_items/9429" rel="">関連イシュー</a></li></ul><p>これまでGitLabには、チームメンバー、顧客、コントリビューターの功績を正式に称える組み込みの仕組みがありませんでした。多くの努力が認められないまま終わり、コミュニティにはプロジェクトを支える人々を称えるための一貫した手段がありませんでした。</p><p>グループレベルでカスタムアチーブメントを作成し、コントリビューションに応じてユーザーに授与できるようになりました。各アチーブメントには名前、説明、アバターを設定できます。授与されたユーザーは、プロフィールに表示するアチーブメントを選択できます。アチーブメントにより、メンテナーは参加を目に見える形で報いることができ、より強固でモチベーションの高いコミュニティの構築に役立ちます。</p><p>この機能へのコントリビュートに感謝します。<a href="https://gitlab.com/Taucher2003" rel="">Niklas van Schrick</a>さん、ありがとうございました！</p><h3 id="パーソナルスニペットでのgitlab-flavored-markdownリファレンス">パーソナルスニペットでのGitLab Flavored Markdownリファレンス</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/markdown/#gitlab-specific-references" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/4185" rel="">関連 イシュー</a></li></ul><p>パーソナルスニペットでGitLab Flavored Markdown（GFM）リファレンスを使用できるようになりました。使用方法は次の2通りです。</p><ul><li>GitLabは、プロジェクトスニペットやGitLabの他の領域と同様に、パーソナルスニペットの説明とコメント内のGFMリファレンスを処理します。</li><li>コメントやイシュー・マージリクエストの説明など、GFMがサポートされている場所であればどこからでも、プロジェクトスニペットで既に使用できる <code>$&lt;id&gt;</code> 構文を使用してパーソナルスニペットを参照できます。</li></ul><p>スニペットIDはパーソナルスニペットとプロジェクトスニペット全体で一意であるため、各IDは単一のスニペットに解決されます。</p><h3 id="セキュリティマネージャーがエージェント型フローを設定可能に">セキュリティマネージャーがエージェント型フローを設定可能に</h3><ul><li><strong>プラン:</strong> Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/vulnerabilities/agentic_vulnerability_resolution/" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/21725" rel="">関連イシュー</a></li></ul><p>セキュリティマネージャーロールを持つユーザーは、プロジェクトに対してSAST VR、SAST FP、シークレットFP、および依存関係スキャンVRを設定できるようになりました。</p><h3 id="ビルトインのプロジェクトテンプレートの無効化">ビルトインのプロジェクトテンプレートの無効化</h3><ul><li><strong>プラン:</strong> Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/administration/project_templates#built-in-project-templates" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/21356" rel="">関連イシュー</a></li></ul><p>組織がカスタムプロジェクトテンプレートを使用している場合、ビルトインのベンダーテンプレートがテンプレート選択画面に不要な項目を追加したり、サーバーサイドフックやその他のリポジトリ制御を回避したりする可能性があります。</p><p>管理者は、<strong>管理者</strong>エリアからグローバルに、またはサブグループのグループレベルで、プロジェクトテンプレートを無効化できるようになりました。この設定は自動的にカスケードされるため、グループごとに個別に設定する必要はありません。管理者は設定値を強制することで、グループやサブグループが設定を上書きできないようにすることも可能です。インスタンスおよびグループの設定は、REST APIおよびGraphQL APIでも管理できます。 GitLab.comでは、グループレベルの設定のみ利用可能です。</p><h3 id="詳細権限patが一般提供開始">詳細権限PATが一般提供開始</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/auth/tokens/fine_grained_access_tokens/" rel="">ドキュメント</a>
· <a href="https://gitlab.com/groups/gitlab-org/-/work_items/18554" rel="">関連 イシュー</a></li></ul><p>詳細権限パーソナルアクセストークン（PAT）が一般提供（GA）になりました。従来のPATは所属するすべてのプロジェクトとグループへのアクセスを付与しますが、詳細権限PATでは各トークンを特定のリソースとアクションに限定できます。これにより、自動化やインテグレーションに最小権限の原則を適用しやすくなり、トークンが漏洩または不正利用された場合の潜在的な影響を軽減できます。</p><p>セットアップを簡単にするために、トークン作成時に<strong>Duoで権限を追加</strong>機能を使用して適切なパーミッションを選択できます。既存の従来のPATは引き続き従来どおり機能します。新しいトークンについては、各トークンが必要なリソースとアクションのみにスコープされるよう、GitLabは詳細権限PATを推奨しています。</p><p>GAリリースにより、詳細権限PATはREST APIエンドポイントの完全なカバレッジと、最もよく使用されるGraphQLタイプおよびミューテーションのカバレッジを備えるようになりました。</p><h3 id="脆弱性レポートのエクスポートでフィルターが正しく適用されるように">脆弱性レポートのエクスポートでフィルターが正しく適用されるように</h3><ul><li><strong>プラン:</strong> Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/application_security/vulnerability_report/" rel="">ドキュメント</a> · <a href="https://gitlab.com/groups/gitlab-org/-/work_items/17601" rel="">関連 イシュー</a></li></ul><p>フィルターを適用した状態で脆弱性レポートをエクスポートすると、エクスポートされたCSVファイルにはフィルター済みのデータのみが含まれます。</p><h3 id="gitlab-runner-192">GitLab Runner 19.2</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/runner/" rel="">ドキュメント</a> · <a href="https://gitlab.com/gitlab-org/gitlab-runner/-/issues/?milestone_title=19.2&amp;state=closed" rel="">関連イシュー</a></li></ul><p>本日、GitLab Runner 19.2もリリースしました。GitLab Runnerは、CI/CDジョブを実行してその結果をGitLabインスタンスに送信する、高いスケーラビリティを持つビルドエージェントです。GitLab Runnerは、GitLabに含まれるオープンソースの継続的インテグレーションサービスであるGitLab CI/CDと連携して動作します。</p><p><strong>新機能</strong></p><ul><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39463" rel="">GitLab Runnerがジョブ完了PUTリクエスト時に環境キーを送信するようになりました</a></li><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39389" rel="">GitLab RunnerにKASジョブリクエストが連続して失敗した場合にRailsへ自動的にフォールバックするサーキットブレーカーが追加されました</a></li></ul><p><strong>バグ修正</strong></p><ul><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39573" rel="">シークレットの解決失敗が<code>runner_system_failure</code>として誤って分類される</a></li><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39556" rel="">GitLab Runnerを19.1.0にアップデートするとジョブが<code>context deadline exceeded</code>で失敗する</a></li><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39555" rel="">DockerのexecutorでジョブがときどきContext deadline exceededで失敗する</a></li><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39475" rel=""><code>FF_CONCRETE</code>が有効な場合にアーティファクトのダウンロードが失敗する</a></li><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39388" rel="">KAS Job RouterのGetJobレイテンシーヒストグラムにステージング環境でデータが表示されない</a></li><li><a href="https://gitlab.com/gitlab-org/gitlab-runner/-/work_items/39380" rel="">Runnerトークンの自動ローテーションによりDocker Autoscalerのexecutorがアクティブなインスタンスを削除し、実行中のジョブが失敗する</a></li></ul><p>すべての変更点はGitLab Runnerの<a href="https://gitlab.com/gitlab-org/gitlab-runner/blob/19-2-stable/CHANGELOG.md" rel="">変更履歴</a>をご覧ください。</p><h2 id="スケールとデプロイ">スケールとデプロイ</h2><h3 id="gitlab-duoがマージリクエストのレビューをaiで読み取り返信">GitLab DuoがマージリクエストのレビューをAIで読み取り、返信</h3><ul><li><strong>プラン:</strong> Free, Premium, Ultimate</li><li><strong>提供形態:</strong> GitLab.com, GitLab Self-Managed, GitLab Dedicated, GitLab Dedicated for Government</li><li><strong>リンク:</strong> <a href="https://docs.gitlab.com/ja-jp/user/gitlab_duo/model_context_protocol/mcp_server_tools/" rel="">ドキュメント</a> ·  <a href="https://gitlab.com/gitlab-org/gitlab/-/work_items/597494" rel="">関連 イシュー</a></li></ul><p>GitLab DuoとMCPベースのエージェントを使用して、マージリクエストのレビューディスカッションを読み取れるようになりました。 これにより、AIアシスタントがレビュアーのフィードバック、未解決のスレッド、ディスカッションの履歴を完全に把握できます。</p><p>エージェントに対して、レビューコメントの要約、フィードバックへの返信の下書き作成、そしてワークフローを離れることなくマージリクエストのディスカッションへの直接返信投稿を依頼できます。</p><hr /><h3 id="インストール">インストール</h3><p>新規にGitLabをセットアップする場合は、<a href="https://about.gitlab.com/ja-jp/install/" rel="">GitLabダウンロードページ</a>をご覧ください。</p><h3 id="アップデート">アップデート</h3><p><a href="https://about.gitlab.com/update/" rel="">アップデートページ</a>をご確認ください。</p><h3 id="ご不明な点がある場合">ご不明な点がある場合</h3><p>ご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、<a href="https://forum.gitlab.com/" rel="">GitLabフォーラム</a>にアクセスして質問を投稿してください。</p><h3 id="gitlabサブスクリプションプラン">GitLabサブスクリプションプラン</h3><ul><li><a href="https://about.gitlab.com/pricing/" rel="">Free</a>
ユーザー向けの永久無料機能を提供</li><li><a href="https://about.gitlab.com/pricing/premium/" rel="">Premium</a>
チームの生産性と調整を強化</li><li><a href="https://about.gitlab.com/pricing/ultimate/" rel="">Ultimate</a>
組織全体のセキュリティ、コンプライアンス、プランニングに対応
GitLabのすべての機能を<a href="https://about.gitlab.com/ja-jp/free-trial/?hosted=saas" rel="">無料</a>でお試しいただけます。</li></ul><p><em>--------------------</em></p><h3 id="過去の日本語リリース情報">過去の日本語リリース情報</h3><ul><li><a href="https://docs.gitlab.com/ja-jp/releases/19/gitlab-19-1-released/" rel="">GitLab 19.1</a></li><li><a href="https://docs.gitlab.com/ja-jp/releases/19/gitlab-19-0-released/" rel="">GitLab 19.0</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-11-release/" rel="">GitLab 18.11</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-10-release/" rel="">GitLab 18.10</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-09-release/" rel="">GitLab 18.9</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-08-release/" rel="">GitLab 18.8</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-07-release/" rel="">GitLab 18.7</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-06-release/" rel="">GitLab 18.6</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-05-release/" rel="">GitLab 18.5</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-04-release/" rel="">GitLab 18.4</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-03-release/" rel="">GitLab 18.3</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-02-release/" rel="">GitLab 18.2</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release/" rel="">GitLab 18.1</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/" rel="">GitLab 18.0</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/" rel="">GitLab 17.11</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/" rel="">GitLab 17.10</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/" rel="">GitLab 17.9</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/" rel="">GitLab 17.8</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/" rel="">GitLab 17.7</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/" rel="">GitLab 17.6</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/" rel="">GitLab 17.5</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/" rel="">GitLab 17.4</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/" rel="">GitLab 17.3</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/" rel="">GitLab 17.2</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/" rel="">GitLab 17.1</a></li><li><a href="https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/" rel="">GitLab 16.11</a></li></ul>]]></content>
        <author>
            <name>GitLab Japan Team</name>
            <uri>https://about.gitlab.com/ja-jp/blog/authors/gitlab-japan-team/</uri>
        </author>
        <published>2026-07-16T00:00:00.000Z</published>
    </entry>
</feed>