[{"data":1,"prerenderedAt":2014},["ShallowReactive",2],{"/ja-jp/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code":3,"navigation-ja-jp":1235,"banner-ja-jp":1664,"footer-ja-jp":1672,"blog-post-authors-ja-jp-David O'Regan":1913,"blog-related-posts-ja-jp-how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code":1929,"blog-promotions-ja-jp":1953,"next-steps-ja-jp":2005},{"id":4,"title":5,"authors":6,"body":8,"category":1212,"date":1213,"description":1214,"extension":1215,"externalUrl":1216,"faq":1216,"featured":1217,"heroImage":1218,"meta":1219,"navigation":458,"path":1220,"seo":1221,"slug":1225,"stem":1226,"tags":1227,"template":1232,"updatedDate":1233,"__hash__":1234},"blogPosts/ja-jp/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code.md","GitLab Duo開発の現場から： AI生成コードに対するセキュリティ確保と徹底的なテスト",[7],"David O'Regan",{"type":9,"value":10,"toc":1206},"minimark",[11,21,37,48,53,56,69,78,82,85,94,99,124,128,147,151,154,161,165,173,178,189,195,199,202,212,218,221,225,228,234,240,243,276,280,290,418,437,441,449,690,693,697,700,856,865,869,875,1126,1137,1140,1148,1159,1170,1174,1202],[12,13,14],"p",{},[15,16,17],"em",{},[18,19,20],"strong",{},"生成系AIは、ソフトウェアの開発、保護、運用を容易にし、ソフトウェア開発業界に重要な変化をもたらしています。この新しいブログシリーズでは、GitLabの製品チームとエンジニアリングチームが、必要なAI機能をエンタープライズ全体に統合し、どのように作成、テスト、デプロイするかをご紹介します。GitLab Duoの新機能によってDevSecOpsチームがお客様にどんな価値をもたらせるようになるか、見ていきましょう！",[12,22,23,24,30,31,36],{},"ソフトウェア開発でAIがますます重要な役割を果たすようになる中、AI生成コードに対するセキュリティ確保や、徹底したテストの実施は極めて重要です。本記事では、AI機能を活用してDevSecOpsワークフローを強化できる",[25,26,29],"a",{"href":27,"rel":28},"https://about.gitlab.com/gitlab-duo-agent-platform/",[],"GitLab Duo","と、",[25,32,35],{"href":33,"rel":34},"https://docs.gitlab.com/ja-jp/user/project/pages/",[],"GitLab Pages","を組み合わせて、AI生成コードを安全にテストする手順をステップごとに説明しています。一般的なリスクを軽減する方法や、テストの自動生成、コードのテスト、テストレポートのデプロイなどのプロセスについても取り上げます。これらはすべて、AI生成コードの信頼性を高めるためのアプローチです。",[38,39,40],"blockquote",{},[12,41,42,43],{},"デモ動画公開！GitLab 17バーチャルローンチイベントで、AI主導のソフトウェア開発の未来を体験しませんか？",[25,44,47],{"href":45,"rel":46},"https://about.gitlab.com/ja-jp/eighteen/",[],"今すぐ登録する",[49,50,52],"h2",{"id":51},"ai生成コードの課題","AI生成コードの課題",[12,54,55],{},"AI生成コードは、次のような問題に頻繁に直面します。",[57,58,59,63,66],"ul",{},[60,61,62],"li",{},"アルゴリズムの不一致：不適切または最適化されていないアルゴリズムが生成される場合があります。",[60,64,65],{},"依存関係の問題： AIが生成するコードには、古い依存関係や互換性のない依存関係が含まれている可能性があります。",[60,67,68],{},"セキュリティ上の脆弱性：AIは、セキュリティ上の欠陥を伴うコードを生成することがあります。",[12,70,71,72,77],{},"上記のように、AI生成コードは、アルゴリズムの不一致、依存関係の問題、セキュリティの脆弱性などの問題によく直面します。プログラミング関連の質問に対するChatGPTの回答について、",[25,73,76],{"href":74,"rel":75},"https://dl.acm.org/doi/pdf/10.1145/3613904.3642596",[],"Association of Computing Machinery（計算機協会）が発表した最近の研究","（外部サイト）では、回答の52%に誤った情報が含まれており、77%が過度に冗長であることがわかりました。これらの欠点があるにもかかわらず、ユーザーはChatGPTの包括的でよく構成された回答を35%の割合で好み、誤情報が含まれていても39%の割合でそれを見過ごしました。これらの課題に対処するには、高度なツールとフレームワークを使用する必要があります。",[49,79,81],{"id":80},"aiセキュリティとテストに対するgitlabのアプローチ","AIセキュリティとテストに対するGitLabのアプローチ",[12,83,84],{},"GitLabでは、開発ワークフロー内にセキュリティ対策を組み込むことに焦点を当てた、包括的なコンテンツ戦略を採用しています。GitLab Duoを活用してAIによるコード生成を応用したり、GitLab Pagesを利用してテストレポートを（ウェブサイトに）埋め込んだりすることで、デベロッパーはAI生成コードのセキュリティと信頼性を確保できます。",[12,86,87,88,93],{},"以下は、GitLab DuoとGitLab Pagesを組み合わせて、",[25,89,92],{"href":90,"rel":91},"https://flask.palletsprojects.com/en/3.0.x/",[],"Flask webサーバー","（外部サイト）を実装することでAI生成コードを安全かつ徹底的にテストするための手順ガイドになります。",[95,96,98],"h4",{"id":97},"_1-gitlabcomで新しいプロジェクトを作成する","1. GitLab.comで新しいプロジェクトを作成する",[57,100,101,109,112,115,118,121],{},[60,102,103,108],{},[25,104,107],{"href":105,"rel":106},"http://GitLab.com",[],"GitLab.com","にアクセスします。",[60,110,111],{},"「新しいプロジェクト」ボタンをクリックします。",[60,113,114],{},"「空白のプロジェクトを作成」を選択します。",[60,116,117],{},"プロジェクト名を入力します（例：AI_CODE_SECURITY）。",[60,119,120],{},"表示レベル（公開、内部、非公開）を設定します。",[60,122,123],{},"「プロジェクトを作成」をクリックします。",[95,125,127],{"id":126},"_2-gitlab-duoのコード提案を有効にする","2. GitLab Duoのコード提案を有効にする",[57,129,130,133,136,139],{},[60,131,132],{},"プロジェクトに移動します。",[60,134,135],{},"「Web IDE」ボタンをクリックしてWeb IDEを開きます。",[60,137,138],{},"GitLab Duoの機能（コード提案、Duoチャットなど）が有効になっていることを確認します。",[60,140,141,146],{},[25,142,145],{"href":143,"rel":144},"https://docs.gitlab.com/ja-jp/user/project/web_ide/",[],"Web IDE","でコーディングを開始します。入力する際に、GitLab Duoによるコード提案が表示され、より効率的なコーディングを支援してくれます。",[95,148,150],{"id":149},"_3-flask-webサーバーを作成する","3. Flask Webサーバーを作成する",[12,152,153],{},"下のスクリーンショットのコメント（緑色のテキスト）を使用して、Flask Webサーバーを作成できます。",[12,155,156],{},[157,158],"img",{"alt":159,"src":160},"DGDテスト - 画像1","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750097192520.png",[95,162,164],{"id":163},"_4-gitlab-duoでテストを生成する","4. GitLab Duoでテストを生成する",[12,166,167,168,172],{},"ユニットテストは、生成されたコードの機能を検証する上で不可欠です。GitLab Duoの",[169,170,171],"code",{}," /tests","コマンドを使用して、直接Web IDE内でテストの提案を生成します。このコマンドは、具体的な側面（パフォーマンス、リグレッション、特定のフレームワークの使用など）に焦点を当てるために、指示を追加してカスタマイズできます。",[174,175,177],"h5",{"id":176},"web-ideでの使用例","Web IDEでの使用例：",[57,179,180,183],{},[60,181,182],{},"テストを生成したいコードを選択します。",[60,184,185,188],{},[169,186,187],{},"/tests","コマンドを使用し、必要に応じて指示を追加します。",[12,190,191],{},[157,192],{"alt":193,"src":194},"DGDテスト - 画像2","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750097192521.png",[95,196,198],{"id":197},"_5-gitlab-duoチャットを使用してai生成コードの問題を特定する","5. GitLab Duoチャットを使用してAI生成コードの問題を特定する",[12,200,201],{},"GitLab Duoチャットを使用して、AIが生成したコードのレビューと修正を行います。たとえば、Flask Webサーバーのコードにセキュリティ脆弱性がないか確認する場合は、以下のプロンプトを使用します。",[203,204,210],"pre",{"className":205,"code":207,"language":208,"meta":209},[206],"language-text","プロンプト：このコードをレビューして、潜在的なセキュリティ脆弱性と依存関係の問題を検証してください。\n","text","",[169,211,207],{"__ignoreMap":209},[12,213,214],{},[157,215],{"alt":216,"src":217},"DGDテスト - 画像3","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750097192523.png",[12,219,220],{},"GitLab Duoチャットを使用することで、上記のコード内の脆弱性を特定しやすくなります。",[95,222,224],{"id":223},"_6-テストレポートを生成する","6. テストレポートを生成する",[12,226,227],{},"テストを実行した後、GitLab Pagesを使用してデプロイするテストレポートを生成します。",[203,229,232],{"className":230,"code":231,"language":208,"meta":209},[206],"プロンプト：GitLab Pagesを使用してデプロイするテストレポートを生成するPythonスクリプトを作成してください。\n",[169,233,231],{"__ignoreMap":209},[12,235,236],{},[157,237],{"alt":238,"src":239},"DGDテスト - 画像4","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097192/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750097192525.png",[12,241,242],{},"ここでの処理内容は以下のとおりです。",[57,244,245,248,258,265],{},[60,246,247],{},"スクリプトは、test_reportsディレクトリが存在することを確認します。",[60,249,250,253,254,257],{},[169,251,252],{},"subprocess.run()","を使用して",[169,255,256],{},"test_server.py","ファイルを実行し、出力（テスト結果）をキャプチャします。",[60,259,260,261,264],{},"出力のRAWデータを",[169,262,263],{},"test_reports/test_output.txt","に保存します。",[60,266,267,268,271,272,275],{},"テスト結果を読みやすいように",[169,269,270],{},"\u003Cpre>","タグ内に埋め込んだHTMLレポートを生成し、",[169,273,274],{},"test_reports/index.html","として保存します。",[95,277,279],{"id":278},"_7-gitlab-pagesを使用してテストレポートをデプロイする","7. GitLab Pagesを使用してテストレポートをデプロイする",[12,281,282,285,286,289],{},[25,283,35],{"href":33,"rel":284},[],"を使用し、テストレポートを公開します。テストレポートをデプロイするための",[169,287,288],{},".gitlab-ci.yml","ファイルの構成は次のとおりです。",[203,291,295],{"className":292,"code":293,"language":294,"meta":209,"style":209},"language-python shiki shiki-themes github-light","stages:\n  - test\n  - deploy\ntest_job:\n  stage: test\n  script:\n    - python generate_test_report.py\n  artifacts:\n    paths:\n      - test_reports/\npages:\n  stage: deploy\n  script:\n    - mv test_reports public\n  artifacts:\n    paths:\n      - public\n\n","python",[169,296,297,306,316,324,330,336,342,351,357,363,375,381,387,392,400,405,410],{"__ignoreMap":209},[298,299,302],"span",{"class":300,"line":301},"line",1,[298,303,305],{"class":304},"sgsFI","stages:\n",[298,307,309,313],{"class":300,"line":308},2,[298,310,312],{"class":311},"sD7c4","  -",[298,314,315],{"class":304}," test\n",[298,317,319,321],{"class":300,"line":318},3,[298,320,312],{"class":311},[298,322,323],{"class":304}," deploy\n",[298,325,327],{"class":300,"line":326},4,[298,328,329],{"class":304},"test_job:\n",[298,331,333],{"class":300,"line":332},5,[298,334,335],{"class":304},"  stage: test\n",[298,337,339],{"class":300,"line":338},6,[298,340,341],{"class":304},"  script:\n",[298,343,345,348],{"class":300,"line":344},7,[298,346,347],{"class":311},"    -",[298,349,350],{"class":304}," python generate_test_report.py\n",[298,352,354],{"class":300,"line":353},8,[298,355,356],{"class":304},"  artifacts:\n",[298,358,360],{"class":300,"line":359},9,[298,361,362],{"class":304},"    paths:\n",[298,364,366,369,372],{"class":300,"line":365},10,[298,367,368],{"class":311},"      -",[298,370,371],{"class":304}," test_reports",[298,373,374],{"class":311},"/\n",[298,376,378],{"class":300,"line":377},11,[298,379,380],{"class":304},"pages:\n",[298,382,384],{"class":300,"line":383},12,[298,385,386],{"class":304},"  stage: deploy\n",[298,388,390],{"class":300,"line":389},13,[298,391,341],{"class":304},[298,393,395,397],{"class":300,"line":394},14,[298,396,347],{"class":311},[298,398,399],{"class":304}," mv test_reports public\n",[298,401,403],{"class":300,"line":402},15,[298,404,356],{"class":304},[298,406,408],{"class":300,"line":407},16,[298,409,362],{"class":304},[298,411,413,415],{"class":300,"line":412},17,[298,414,368],{"class":311},[298,416,417],{"class":304}," public\n",[12,419,420,421,424,425,428,429,432,433,436],{},"この構成では、",[169,422,423],{},"test_job","ステージでPythonスクリプトを実行してテストレポートを生成します。",[169,426,427],{},"pages","ステージでは、",[169,430,431],{},"test_reports","ディレクトリが",[169,434,435],{},"public","に移動され、GitLab Pagesがそのコンテンツを提供するために使用されます。",[95,438,440],{"id":439},"_8-mrウィジェットにテストレポートを埋め込む","8. MRウィジェットにテストレポートを埋め込む",[12,442,443,448],{},[25,444,447],{"href":445,"rel":446},"https://docs.gitlab.com/ja-jp/ci/testing/unit_test_reports/",[],"MRウィジェットにテストレポート","を埋め込むことで、テストの結果を即座に確認でき、透明性と信頼性を確保できます。これは、次のように、CI/CDパイプラインの構成にテストレポートをアーティファクトとして含めることで実現できます。",[203,450,452],{"className":292,"code":451,"language":294,"meta":209,"style":209},"\nstages:\n  - build\n  - test\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"Building the project...\"\n    - # Your build commands here\n\ntest_job:\n  stage: test\n  script:\n    - mkdir -p test-reports\n    - python test_server.py > test-reports/results.xml\n  artifacts:\n    when: always\n    reports:\n      junit: test-reports/results.xml\n    paths:\n      - test-reports/results.xml\n\npages:\n  stage: deploy\n  script:\n    - mkdir .public\n    - mv test-reports .public/\n  artifacts:\n    paths:\n      - .public\n\n",[169,453,454,460,464,471,477,483,487,492,497,501,512,520,524,528,532,536,554,578,583,589,595,609,614,629,634,639,644,649,657,672,677,682],{"__ignoreMap":209},[298,455,456],{"class":300,"line":301},[298,457,459],{"emptyLinePlaceholder":458},true,"\n",[298,461,462],{"class":300,"line":308},[298,463,305],{"class":304},[298,465,466,468],{"class":300,"line":318},[298,467,312],{"class":311},[298,469,470],{"class":304}," build\n",[298,472,473,475],{"class":300,"line":326},[298,474,312],{"class":311},[298,476,315],{"class":304},[298,478,479,481],{"class":300,"line":332},[298,480,312],{"class":311},[298,482,323],{"class":304},[298,484,485],{"class":300,"line":338},[298,486,459],{"emptyLinePlaceholder":458},[298,488,489],{"class":300,"line":344},[298,490,491],{"class":304},"build_job:\n",[298,493,494],{"class":300,"line":353},[298,495,496],{"class":304},"  stage: build\n",[298,498,499],{"class":300,"line":359},[298,500,341],{"class":304},[298,502,503,505,508],{"class":300,"line":365},[298,504,347],{"class":311},[298,506,507],{"class":304}," echo ",[298,509,511],{"class":510},"sYBdl","\"Building the project...\"\n",[298,513,514,516],{"class":300,"line":377},[298,515,347],{"class":311},[298,517,519],{"class":518},"sAwPA"," # Your build commands here\n",[298,521,522],{"class":300,"line":383},[298,523,459],{"emptyLinePlaceholder":458},[298,525,526],{"class":300,"line":389},[298,527,329],{"class":304},[298,529,530],{"class":300,"line":394},[298,531,335],{"class":304},[298,533,534],{"class":300,"line":402},[298,535,341],{"class":304},[298,537,538,540,543,546,549,551],{"class":300,"line":407},[298,539,347],{"class":311},[298,541,542],{"class":304}," mkdir ",[298,544,545],{"class":311},"-",[298,547,548],{"class":304},"p test",[298,550,545],{"class":311},[298,552,553],{"class":304},"reports\n",[298,555,556,558,561,564,567,569,572,575],{"class":300,"line":412},[298,557,347],{"class":311},[298,559,560],{"class":304}," python test_server.py ",[298,562,563],{"class":311},">",[298,565,566],{"class":304}," test",[298,568,545],{"class":311},[298,570,571],{"class":304},"reports",[298,573,574],{"class":311},"/",[298,576,577],{"class":304},"results.xml\n",[298,579,581],{"class":300,"line":580},18,[298,582,356],{"class":304},[298,584,586],{"class":300,"line":585},19,[298,587,588],{"class":304},"    when: always\n",[298,590,592],{"class":300,"line":591},20,[298,593,594],{"class":304},"    reports:\n",[298,596,598,601,603,605,607],{"class":300,"line":597},21,[298,599,600],{"class":304},"      junit: test",[298,602,545],{"class":311},[298,604,571],{"class":304},[298,606,574],{"class":311},[298,608,577],{"class":304},[298,610,612],{"class":300,"line":611},22,[298,613,362],{"class":304},[298,615,617,619,621,623,625,627],{"class":300,"line":616},23,[298,618,368],{"class":311},[298,620,566],{"class":304},[298,622,545],{"class":311},[298,624,571],{"class":304},[298,626,574],{"class":311},[298,628,577],{"class":304},[298,630,632],{"class":300,"line":631},24,[298,633,459],{"emptyLinePlaceholder":458},[298,635,637],{"class":300,"line":636},25,[298,638,380],{"class":304},[298,640,642],{"class":300,"line":641},26,[298,643,386],{"class":304},[298,645,647],{"class":300,"line":646},27,[298,648,341],{"class":304},[298,650,652,654],{"class":300,"line":651},28,[298,653,347],{"class":311},[298,655,656],{"class":304}," mkdir .public\n",[298,658,660,662,665,667,670],{"class":300,"line":659},29,[298,661,347],{"class":311},[298,663,664],{"class":304}," mv test",[298,666,545],{"class":311},[298,668,669],{"class":304},"reports .public",[298,671,374],{"class":311},[298,673,675],{"class":300,"line":674},30,[298,676,356],{"class":304},[298,678,680],{"class":300,"line":679},31,[298,681,362],{"class":304},[298,683,685,687],{"class":300,"line":684},32,[298,686,368],{"class":311},[298,688,689],{"class":304}," .public\n",[12,691,692],{},"テストレポートをアーティファクトとして含め、レポートセクションに指定することで、GitLabによってテスト結果が自動的にMRウィジェットに表示されます。これにより、テストの結果が即座に確認でき、透明性と信頼性が向上します。",[95,694,696],{"id":695},"ケーススタディセキュリティポリシーとスキャナーによるaiの信頼性","ケーススタディ：セキュリティポリシーとスキャナーによるAIの信頼性",[12,698,699],{},"AI生成コードのスニペットが、既知の脆弱性を持つ依存関係を取り込んだ状況を想定してみましょう。GitLab Duoとそのセキュリティポリシーを使用することで、この依存関係はコード生成プロセス中に検出されます。AIによって生成された以下のスニペットの例を見てみましょう。",[203,701,703],{"className":292,"code":702,"language":294,"meta":209,"style":209},"import os\nfrom flask import Flask, request\n\napp = Flask(__name__)\n\n@app.route('/search')\ndef search():\n    query = request.args.get('query')\n    execute_os_command(query)\n    return 'You searched for: ' + query\n\ndef execute_os_command(command):\n    os.system(command)\n\nif __name__ == '__main__':\n    app.run()\n\n",[169,704,705,713,726,730,748,752,766,777,792,797,811,815,825,830,834,851],{"__ignoreMap":209},[298,706,707,710],{"class":300,"line":301},[298,708,709],{"class":311},"import",[298,711,712],{"class":304}," os\n",[298,714,715,718,721,723],{"class":300,"line":308},[298,716,717],{"class":311},"from",[298,719,720],{"class":304}," flask ",[298,722,709],{"class":311},[298,724,725],{"class":304}," Flask, request\n",[298,727,728],{"class":300,"line":318},[298,729,459],{"emptyLinePlaceholder":458},[298,731,732,735,738,741,745],{"class":300,"line":326},[298,733,734],{"class":304},"app ",[298,736,737],{"class":311},"=",[298,739,740],{"class":304}," Flask(",[298,742,744],{"class":743},"sYu0t","__name__",[298,746,747],{"class":304},")\n",[298,749,750],{"class":300,"line":332},[298,751,459],{"emptyLinePlaceholder":458},[298,753,754,758,761,764],{"class":300,"line":338},[298,755,757],{"class":756},"s7eDp","@app.route",[298,759,760],{"class":304},"(",[298,762,763],{"class":510},"'/search'",[298,765,747],{"class":304},[298,767,768,771,774],{"class":300,"line":344},[298,769,770],{"class":311},"def",[298,772,773],{"class":756}," search",[298,775,776],{"class":304},"():\n",[298,778,779,782,784,787,790],{"class":300,"line":353},[298,780,781],{"class":304},"    query ",[298,783,737],{"class":311},[298,785,786],{"class":304}," request.args.get(",[298,788,789],{"class":510},"'query'",[298,791,747],{"class":304},[298,793,794],{"class":300,"line":359},[298,795,796],{"class":304},"    execute_os_command(query)\n",[298,798,799,802,805,808],{"class":300,"line":365},[298,800,801],{"class":311},"    return",[298,803,804],{"class":510}," 'You searched for: '",[298,806,807],{"class":311}," +",[298,809,810],{"class":304}," query\n",[298,812,813],{"class":300,"line":377},[298,814,459],{"emptyLinePlaceholder":458},[298,816,817,819,822],{"class":300,"line":383},[298,818,770],{"class":311},[298,820,821],{"class":756}," execute_os_command",[298,823,824],{"class":304},"(command):\n",[298,826,827],{"class":300,"line":389},[298,828,829],{"class":304},"    os.system(command)\n",[298,831,832],{"class":300,"line":394},[298,833,459],{"emptyLinePlaceholder":458},[298,835,836,839,842,845,848],{"class":300,"line":402},[298,837,838],{"class":311},"if",[298,840,841],{"class":743}," __name__",[298,843,844],{"class":311}," ==",[298,846,847],{"class":510}," '__main__'",[298,849,850],{"class":304},":\n",[298,852,853],{"class":300,"line":407},[298,854,855],{"class":304},"    app.run()\n",[12,857,858,859,864],{},"この例では、検索エンドポイントがOSコマンドインジェクションの脆弱性を持っています。GitLabの静的アプリケーションセキュリティテスト（",[25,860,863],{"href":861,"rel":862},"https://docs.gitlab.com/ja-jp/user/application_security/sast/",[],"SAST","）コンポーネントを活用することで、この脆弱性はCI/CDパイプライン中に検出されます。",[174,866,868],{"id":867},"sastスキャンを統合して脆弱性を検出する","SASTスキャンを統合して脆弱性を検出する",[12,870,871,872,874],{},"GitLab SASTは、自動的にコードを分析してセキュリティ脆弱性を検出します。以下は、",[169,873,288],{},"ファイルに統合して問題をスキャンする方法です。",[203,876,878],{"className":292,"code":877,"language":294,"meta":209,"style":209},"stages:\n  - build\n  - test\n  - sast\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"Building the project...\"\n    - # Your build commands here\n\ntest_job:\n  stage: test\n  script:\n    - python test_server.py > test-reports/results.xml\n  artifacts:\n    when: always\n    reports:\n      junit: test-reports/results.xml\n    paths:\n      - test-reports/results.xml\n\nsast_job:\n  stage: sast\n  script:\n    - echo \"Running SAST...\"\n  artifacts:\n    reports:\n      sast: gl-sast-report.json\n  only:\n    - branches\n\npages:\n  stage: deploy\n  script:\n    - mv test-reports public\n  artifacts:\n    paths:\n      - public\n\n",[169,879,880,884,890,896,903,909,913,917,921,925,933,939,943,947,951,955,973,977,981,985,997,1001,1015,1019,1024,1029,1033,1042,1046,1050,1065,1070,1077,1082,1087,1092,1097,1109,1114,1119],{"__ignoreMap":209},[298,881,882],{"class":300,"line":301},[298,883,305],{"class":304},[298,885,886,888],{"class":300,"line":308},[298,887,312],{"class":311},[298,889,470],{"class":304},[298,891,892,894],{"class":300,"line":318},[298,893,312],{"class":311},[298,895,315],{"class":304},[298,897,898,900],{"class":300,"line":326},[298,899,312],{"class":311},[298,901,902],{"class":304}," sast\n",[298,904,905,907],{"class":300,"line":332},[298,906,312],{"class":311},[298,908,323],{"class":304},[298,910,911],{"class":300,"line":338},[298,912,459],{"emptyLinePlaceholder":458},[298,914,915],{"class":300,"line":344},[298,916,491],{"class":304},[298,918,919],{"class":300,"line":353},[298,920,496],{"class":304},[298,922,923],{"class":300,"line":359},[298,924,341],{"class":304},[298,926,927,929,931],{"class":300,"line":365},[298,928,347],{"class":311},[298,930,507],{"class":304},[298,932,511],{"class":510},[298,934,935,937],{"class":300,"line":377},[298,936,347],{"class":311},[298,938,519],{"class":518},[298,940,941],{"class":300,"line":383},[298,942,459],{"emptyLinePlaceholder":458},[298,944,945],{"class":300,"line":389},[298,946,329],{"class":304},[298,948,949],{"class":300,"line":394},[298,950,335],{"class":304},[298,952,953],{"class":300,"line":402},[298,954,341],{"class":304},[298,956,957,959,961,963,965,967,969,971],{"class":300,"line":407},[298,958,347],{"class":311},[298,960,560],{"class":304},[298,962,563],{"class":311},[298,964,566],{"class":304},[298,966,545],{"class":311},[298,968,571],{"class":304},[298,970,574],{"class":311},[298,972,577],{"class":304},[298,974,975],{"class":300,"line":412},[298,976,356],{"class":304},[298,978,979],{"class":300,"line":580},[298,980,588],{"class":304},[298,982,983],{"class":300,"line":585},[298,984,594],{"class":304},[298,986,987,989,991,993,995],{"class":300,"line":591},[298,988,600],{"class":304},[298,990,545],{"class":311},[298,992,571],{"class":304},[298,994,574],{"class":311},[298,996,577],{"class":304},[298,998,999],{"class":300,"line":597},[298,1000,362],{"class":304},[298,1002,1003,1005,1007,1009,1011,1013],{"class":300,"line":611},[298,1004,368],{"class":311},[298,1006,566],{"class":304},[298,1008,545],{"class":311},[298,1010,571],{"class":304},[298,1012,574],{"class":311},[298,1014,577],{"class":304},[298,1016,1017],{"class":300,"line":616},[298,1018,459],{"emptyLinePlaceholder":458},[298,1020,1021],{"class":300,"line":631},[298,1022,1023],{"class":304},"sast_job:\n",[298,1025,1026],{"class":300,"line":636},[298,1027,1028],{"class":304},"  stage: sast\n",[298,1030,1031],{"class":300,"line":641},[298,1032,341],{"class":304},[298,1034,1035,1037,1039],{"class":300,"line":646},[298,1036,347],{"class":311},[298,1038,507],{"class":304},[298,1040,1041],{"class":510},"\"Running SAST...\"\n",[298,1043,1044],{"class":300,"line":651},[298,1045,356],{"class":304},[298,1047,1048],{"class":300,"line":659},[298,1049,594],{"class":304},[298,1051,1052,1055,1057,1060,1062],{"class":300,"line":674},[298,1053,1054],{"class":304},"      sast: gl",[298,1056,545],{"class":311},[298,1058,1059],{"class":304},"sast",[298,1061,545],{"class":311},[298,1063,1064],{"class":304},"report.json\n",[298,1066,1067],{"class":300,"line":679},[298,1068,1069],{"class":304},"  only:\n",[298,1071,1072,1074],{"class":300,"line":684},[298,1073,347],{"class":311},[298,1075,1076],{"class":304}," branches\n",[298,1078,1080],{"class":300,"line":1079},33,[298,1081,459],{"emptyLinePlaceholder":458},[298,1083,1085],{"class":300,"line":1084},34,[298,1086,380],{"class":304},[298,1088,1090],{"class":300,"line":1089},35,[298,1091,386],{"class":304},[298,1093,1095],{"class":300,"line":1094},36,[298,1096,341],{"class":304},[298,1098,1100,1102,1104,1106],{"class":300,"line":1099},37,[298,1101,347],{"class":311},[298,1103,664],{"class":304},[298,1105,545],{"class":311},[298,1107,1108],{"class":304},"reports public\n",[298,1110,1112],{"class":300,"line":1111},38,[298,1113,356],{"class":304},[298,1115,1117],{"class":300,"line":1116},39,[298,1118,362],{"class":304},[298,1120,1122,1124],{"class":300,"line":1121},40,[298,1123,368],{"class":311},[298,1125,417],{"class":304},[12,1127,1128,1129,1132,1133,1136],{},"この設定では、",[169,1130,1131],{},"sast_job","ステージがSASTを実行してコードの脆弱性を検出し、パイプラインアーティファクトに含まれるレポート（",[169,1134,1135],{},"gl-sast-report.json","）を生成します。GitLab Duoは、セキュリティポリシーと強力なテストフレームワークを統合することで、お客様がAI生成コードの効率性とセキュリティを確保することを支援します。",[49,1138,1139],{"id":1139},"始めてみよう",[12,1141,1142,1143,1146],{},"ソフトウェア開発におけるAIの統合は大きなメリットをもたらしますが、新たな課題も伴います。GitLab DuoやGitLab Pagesのようなツールを使用することで、デベロッパーはAI生成コードを徹底的にテストし、そのセキュリティと信頼性を確保できます。まずはこれらのツールをお試しになり、AIセキュリティとテストの強化を検討してみませんか？",[1144,1145],"br",{},[1144,1147],{},[12,1149,1150],{},[15,1151,1152,1153,1158],{},"監修：川瀬 洋平 ",[25,1154,1157],{"href":1155,"rel":1156},"https://gitlab.com/ykawase",[],"@ykawase","\n（GitLab合同会社 カスタマーサクセス本部 シニアカスタマーサクセスマネージャー）",[38,1160,1161],{},[12,1162,1163,1164,1169],{},"今すぐ",[25,1165,1168],{"href":1166,"rel":1167},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/blog&glm_content=default-saas-trial",[],"GitLab Ultimateのトライアルを開始","して、GitLab DuoとGitLab Pagesをご利用ください。",[49,1171,1173],{"id":1172},"gitlab-duo開発の現場からシリーズをもっと読む","「GitLab Duo開発の現場から」シリーズをもっと読む",[57,1175,1176,1183,1188,1195],{},[60,1177,1178],{},[25,1179,1182],{"href":1180,"rel":1181},"https://about.gitlab.com/ja-jp/blog/developing-gitlab-duo-ai-impact-analytics-dashboard-measures-the-roi-of-ai/",[],"GitLab Duo開発の現場から：AIインパクト分析ダッシュボードによるAIのROI測定",[60,1184,1185],{},[25,1186,1182],{"href":1180,"rel":1187},[],[60,1189,1190],{},[25,1191,1194],{"href":1192,"rel":1193},"https://about.gitlab.com/ja-jp/blog/developing-gitlab-duo-how-we-are-dogfooding-our-ai-features/",[],"GitLab Duo開発の現場から：GitLabにおけるAI機能のドッグフーディングの取り組み",[60,1196,1197],{},[25,1198,1201],{"href":1199,"rel":1200},"https://about.gitlab.com/ja-jp/blog/developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd/",[],"GitLab Duo開発の現場から：AIと根本原因分析を併用したCI/CDパイプラインの修正",[1203,1204,1205],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}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 .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}",{"title":209,"searchDepth":308,"depth":308,"links":1207},[1208,1209,1210,1211],{"id":51,"depth":308,"text":52},{"id":80,"depth":308,"text":81},{"id":1139,"depth":308,"text":1139},{"id":1172,"depth":308,"text":1173},"ai","2024-05-30","GitLab DuoとGitLab Pages、コードサンプルとプロンプトを使用して、AI生成コードの信頼性とセキュリティを強化する方法をステップごとにご紹介します。","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097183/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750097183481.png",{},"/ja-jp/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code",{"title":5,"description":1214,"ogTitle":5,"ogDescription":1214,"noIndex":1217,"ogImage":1218,"ogUrl":1222,"ogSiteName":1223,"ogType":1224,"canonicalUrls":1222},"https://about.gitlab.com/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code","https://about.gitlab.com","article","how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code","ja-jp/blog/how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code",[1228,1229,1230,1231],"AI","DevSecOps","tutorial","security","BlogPost","2024-10-10","FEnreX3WpxOGGEYRDL_w9CV7g1qORVhR2iuzFT-hDg8",{"logo":1236,"freeTrial":1241,"sales":1246,"login":1251,"items":1256,"search":1585,"minimal":1617,"duo":1634,"switchNav":1643,"pricingDeployment":1654},{"config":1237},{"href":1238,"dataGaName":1239,"dataGaLocation":1240},"/ja-jp/","gitlab logo","header",{"text":1242,"config":1243},"無料トライアルを開始",{"href":1244,"dataGaName":1245,"dataGaLocation":1240},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":1247,"config":1248},"デモをリクエスト",{"href":1249,"dataGaName":1250,"dataGaLocation":1240},"/ja-jp/sales/?contact-topic=request-demo","sales",{"text":1252,"config":1253},"サインイン",{"href":1254,"dataGaName":1255,"dataGaLocation":1240},"https://gitlab.com/users/sign_in/","sign in",[1257,1286,1388,1393,1507,1563],{"text":1258,"config":1259,"menu":1261},"プラットフォーム",{"dataNavLevelOne":1260},"platform",{"type":1262,"columns":1263},"cards",[1264,1270,1278],{"title":1258,"description":1265,"link":1266},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":1267,"config":1268},"プラットフォームの詳細はこちら",{"href":1269,"dataGaName":1260,"dataGaLocation":1240},"/ja-jp/platform/",{"title":1271,"description":1272,"link":1273},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":1274,"config":1275},"GitLab Duoのご紹介",{"href":1276,"dataGaName":1277,"dataGaLocation":1240},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1279,"description":1280,"link":1281},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":1282,"config":1283},"詳細はこちら",{"href":1284,"dataGaName":1285,"dataGaLocation":1240},"/ja-jp/why-gitlab/","why gitlab",{"text":1287,"left":458,"config":1288,"menu":1290},"製品",{"dataNavLevelOne":1289},"solutions",{"type":1291,"link":1292,"columns":1296,"feature":1367},"lists",{"text":1293,"config":1294},"すべてのソリューションを表示",{"href":1295,"dataGaName":1289,"dataGaLocation":1240},"/ja-jp/solutions/",[1297,1322,1345],{"title":1298,"description":1299,"link":1300,"items":1305},"自動化","CI/CDと自動化でデプロイを加速",{"config":1301},{"icon":1302,"href":1303,"dataGaName":1304,"dataGaLocation":1240},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[1306,1310,1313,1318],{"text":1307,"config":1308},"CI/CD",{"href":1309,"dataGaLocation":1240,"dataGaName":1307},"/ja-jp/solutions/continuous-integration/",{"text":1271,"config":1311},{"href":1276,"dataGaLocation":1240,"dataGaName":1312},"gitlab duo agent platform - product menu",{"text":1314,"config":1315},"ソースコード管理",{"href":1316,"dataGaLocation":1240,"dataGaName":1317},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":1319,"config":1320},"自動化されたソフトウェアデリバリー",{"href":1303,"dataGaLocation":1240,"dataGaName":1321},"Automated software delivery",{"title":1323,"description":1324,"link":1325,"items":1330},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":1326},{"href":1327,"dataGaName":1328,"dataGaLocation":1240,"icon":1329},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1331,1335,1340],{"text":1332,"config":1333},"アプリケーションセキュリティテスト",{"href":1327,"dataGaName":1334,"dataGaLocation":1240},"Application security testing",{"text":1336,"config":1337},"ソフトウェアサプライチェーンセキュリティ",{"href":1338,"dataGaLocation":1240,"dataGaName":1339},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":1341,"config":1342},"ソフトウェアコンプライアンス",{"href":1343,"dataGaName":1344,"dataGaLocation":1240},"/ja-jp/solutions/software-compliance/","software compliance",{"title":1346,"link":1347,"items":1352},"測定",{"config":1348},{"icon":1349,"href":1350,"dataGaName":1351,"dataGaLocation":1240},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[1353,1357,1362],{"text":1354,"config":1355},"可視性と測定",{"href":1350,"dataGaLocation":1240,"dataGaName":1356},"Visibility and Measurement",{"text":1358,"config":1359},"バリューストリーム管理",{"href":1360,"dataGaLocation":1240,"dataGaName":1361},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":1363,"config":1364},"分析とインサイト",{"href":1365,"dataGaLocation":1240,"dataGaName":1366},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":1368,"type":1291,"items":1369},"GitLabが活躍する場所",[1370,1376,1382],{"text":1371,"config":1372},"大企業",{"icon":1373,"href":1374,"dataGaLocation":1240,"dataGaName":1375},"Building","/ja-jp/enterprise/","enterprise",{"text":1377,"config":1378},"スモールビジネス",{"icon":1379,"href":1380,"dataGaLocation":1240,"dataGaName":1381},"Work","/ja-jp/small-business/","small business",{"text":1383,"config":1384},"公共部門",{"icon":1385,"href":1386,"dataGaLocation":1240,"dataGaName":1387},"Organization","/ja-jp/solutions/public-sector/","public sector",{"text":1389,"config":1390},"価格",{"href":1391,"dataGaName":1392,"dataGaLocation":1240,"dataNavLevelOne":1392},"/ja-jp/pricing/","pricing",{"text":1394,"config":1395,"menu":1397},"関連リソース",{"dataNavLevelOne":1396},"resources",{"type":1291,"link":1398,"columns":1402,"feature":1496},{"text":1399,"config":1400},"すべてのリソースを表示",{"href":1401,"dataGaName":1396,"dataGaLocation":1240},"/ja-jp/resources/",[1403,1436,1463],{"title":1404,"items":1405},"はじめに",[1406,1411,1416,1421,1426,1431],{"text":1407,"config":1408},"インストール",{"href":1409,"dataGaName":1410,"dataGaLocation":1240},"/ja-jp/install/","install",{"text":1412,"config":1413},"クイックスタートガイド",{"href":1414,"dataGaName":1415,"dataGaLocation":1240},"/ja-jp/get-started/","quick setup checklists",{"text":1417,"config":1418},"学ぶ",{"href":1419,"dataGaLocation":1240,"dataGaName":1420},"https://university.gitlab.com/","learn",{"text":1422,"config":1423},"製品ドキュメント",{"href":1424,"dataGaName":1425,"dataGaLocation":1240},"https://docs.gitlab.com/ja-jp/","product documentation",{"text":1427,"config":1428},"ベストプラクティスビデオ",{"href":1429,"dataGaName":1430,"dataGaLocation":1240},"/ja-jp/getting-started-videos/","best practice videos",{"text":1432,"config":1433},"インテグレーション",{"href":1434,"dataGaName":1435,"dataGaLocation":1240},"/ja-jp/integrations/","integrations",{"title":1437,"items":1438},"検索する",[1439,1444,1449,1454,1458],{"text":1440,"config":1441},"お客様成功事例",{"href":1442,"dataGaName":1443,"dataGaLocation":1240},"/ja-jp/customers/","customer success stories",{"text":1445,"config":1446},"ブログ",{"href":1447,"dataGaName":1448,"dataGaLocation":1240},"/ja-jp/blog/","blog",{"text":1450,"config":1451},"Demo Hub",{"href":1452,"dataGaName":1453,"dataGaLocation":1240},"/ja-jp/demo-hub/","demo hub",{"text":1455,"config":1456},"The Source",{"href":1457,"dataGaName":1448,"dataGaLocation":1240},"/ja-jp/the-source/",{"text":1459,"config":1460},"リモート",{"href":1461,"dataGaName":1462,"dataGaLocation":1240},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1464,"items":1465},"つなげる",[1466,1471,1476,1481,1486,1491],{"text":1467,"config":1468},"GitLabサービス",{"href":1469,"dataGaName":1470,"dataGaLocation":1240},"/ja-jp/services/","services",{"text":1472,"config":1473},"コントリビュート",{"href":1474,"dataGaName":1475,"dataGaLocation":1240},"https://contributors.gitlab.com","contribute",{"text":1477,"config":1478},"コミュニティ",{"href":1479,"dataGaName":1480,"dataGaLocation":1240},"/community/","community",{"text":1482,"config":1483},"フォーラム",{"href":1484,"dataGaName":1485,"dataGaLocation":1240},"https://forum.gitlab.com/","forum",{"text":1487,"config":1488},"イベント",{"href":1489,"dataGaName":1490,"dataGaLocation":1240},"/events/","events",{"text":1492,"config":1493},"パートナー",{"href":1494,"dataGaName":1495,"dataGaLocation":1240},"/ja-jp/partners/","partners",{"config":1497,"title":1500,"text":1501,"link":1502},{"background":1498,"textColor":1499},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":1503,"config":1504},"最新情報を読む",{"href":1505,"dataGaName":1506,"dataGaLocation":1240},"/ja-jp/whats-new/","whats new",{"text":1508,"config":1509,"menu":1511},"企業情報",{"dataNavLevelOne":1510},"company",{"type":1291,"columns":1512},[1513],{"items":1514},[1515,1520,1526,1528,1533,1538,1543,1548,1553,1558],{"text":1516,"config":1517},"GitLabについて",{"href":1518,"dataGaName":1519,"dataGaLocation":1240},"/ja-jp/company/","about",{"text":1521,"config":1522,"footerGa":1525},"採用情報",{"href":1523,"dataGaName":1524,"dataGaLocation":1240},"/jobs/","jobs",{"dataGaName":1524},{"text":1487,"config":1527},{"href":1489,"dataGaName":1490,"dataGaLocation":1240},{"text":1529,"config":1530},"経営陣",{"href":1531,"dataGaName":1532,"dataGaLocation":1240},"/company/team/e-group/","leadership",{"text":1534,"config":1535},"ハンドブック",{"href":1536,"dataGaName":1537,"dataGaLocation":1240},"https://handbook.gitlab.com/","handbook",{"text":1539,"config":1540},"投資家向け情報",{"href":1541,"dataGaName":1542,"dataGaLocation":1240},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1544,"config":1545},"トラストセンター",{"href":1546,"dataGaName":1547,"dataGaLocation":1240},"/ja-jp/security/","trust center",{"text":1549,"config":1550},"AI Transparency Center",{"href":1551,"dataGaName":1552,"dataGaLocation":1240},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":1554,"config":1555},"ニュースレター",{"href":1556,"dataGaName":1557,"dataGaLocation":1240},"/company/contact/#contact-forms","newsletter",{"text":1559,"config":1560},"プレス",{"href":1561,"dataGaName":1562,"dataGaLocation":1240},"/press/","press",{"text":1564,"config":1565,"menu":1566},"お問い合わせ",{"dataNavLevelOne":1510},{"type":1291,"columns":1567},[1568],{"items":1569},[1570,1575,1580],{"text":1571,"config":1572},"お問い合わせはこちら",{"href":1573,"dataGaName":1574,"dataGaLocation":1240},"/ja-jp/sales/","talk to sales",{"text":1576,"config":1577},"サポートを受ける",{"href":1578,"dataGaName":1579,"dataGaLocation":1240},"https://support.gitlab.com/hc/en-us","support portal",{"text":1581,"config":1582},"カスタマーポータル",{"href":1583,"dataGaName":1584,"dataGaLocation":1240},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1586,"login":1587,"suggestions":1593},"閉じる",{"text":1588,"link":1589},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":107,"config":1590},{"href":1254,"dataGaName":1591,"dataGaLocation":1592},"search login","search",{"text":1594,"default":1595},"提案",[1596,1598,1603,1605,1609,1613],{"text":1271,"config":1597},{"href":1276,"dataGaName":1271,"dataGaLocation":1592},{"text":1599,"config":1600},"コード提案（AI）",{"href":1601,"dataGaName":1602,"dataGaLocation":1592},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":1307,"config":1604},{"href":1309,"dataGaName":1307,"dataGaLocation":1592},{"text":1606,"config":1607},"GitLab on AWS",{"href":1608,"dataGaName":1606,"dataGaLocation":1592},"/ja-jp/partners/technology-partners/aws/",{"text":1610,"config":1611},"GitLab on Google Cloud",{"href":1612,"dataGaName":1610,"dataGaLocation":1592},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":1614,"config":1615},"GitLabを選ぶ理由",{"href":1284,"dataGaName":1616,"dataGaLocation":1592},"Why GitLab?",{"freeTrial":1618,"mobileIcon":1622,"desktopIcon":1627,"secondaryButton":1630},{"text":1242,"config":1619},{"href":1620,"dataGaName":1245,"dataGaLocation":1621},"https://gitlab.com/-/trials/new/","nav",{"altText":1623,"config":1624},"GitLabアイコン",{"src":1625,"dataGaName":1626,"dataGaLocation":1621},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1623,"config":1628},{"src":1629,"dataGaName":1626,"dataGaLocation":1621},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1404,"config":1631},{"href":1632,"dataGaName":1633,"dataGaLocation":1621},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":1635,"mobileIcon":1639,"desktopIcon":1641},{"text":1636,"config":1637},"GitLab Duoの詳細について",{"href":1276,"dataGaName":1638,"dataGaLocation":1621},"gitlab duo",{"altText":1623,"config":1640},{"src":1625,"dataGaName":1626,"dataGaLocation":1621},{"altText":1623,"config":1642},{"src":1629,"dataGaName":1626,"dataGaLocation":1621},{"button":1644,"mobileIcon":1649,"desktopIcon":1651},{"text":1645,"config":1646},"/switch",{"href":1647,"dataGaName":1648,"dataGaLocation":1621},"#contact","switch",{"altText":1623,"config":1650},{"src":1625,"dataGaName":1626,"dataGaLocation":1621},{"altText":1623,"config":1652},{"src":1653,"dataGaName":1626,"dataGaLocation":1621},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1655,"mobileIcon":1660,"desktopIcon":1662},{"text":1656,"config":1657},"料金ページに戻る",{"href":1391,"dataGaName":1658,"dataGaLocation":1621,"icon":1659},"back to pricing","GoBack",{"altText":1623,"config":1661},{"src":1625,"dataGaName":1626,"dataGaLocation":1621},{"altText":1623,"config":1663},{"src":1629,"dataGaName":1626,"dataGaLocation":1621},{"title":1665,"button":1666,"config":1670},"GitLab Orbitが登場: AIエージェントのためのコンテキストレイヤー",{"text":1282,"config":1667},{"href":1668,"dataGaName":1669,"dataGaLocation":1240},"/ja-jp/gitlab-orbit/","orbit",{"layout":1671,"disabled":1217},"release",{"data":1673},{"text":1674,"source":1675,"edit":1681,"contribute":1686,"config":1691,"items":1696,"minimal":1904},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":1676,"config":1677},"ページのソースを表示",{"href":1678,"dataGaName":1679,"dataGaLocation":1680},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1682,"config":1683},"このページを編集",{"href":1684,"dataGaName":1685,"dataGaLocation":1680},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1687,"config":1688},"ご協力をお願いします",{"href":1689,"dataGaName":1690,"dataGaLocation":1680},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1692,"facebook":1693,"youtube":1694,"linkedin":1695},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1697,1742,1794,1837,1871],{"title":1389,"links":1698,"subMenu":1713},[1699,1703,1708],{"text":1700,"config":1701},"プランの表示",{"href":1391,"dataGaName":1702,"dataGaLocation":1680},"view plans",{"text":1704,"config":1705},"Premiumを選ぶ理由",{"href":1706,"dataGaName":1707,"dataGaLocation":1680},"/ja-jp/pricing/premium/","why premium",{"text":1709,"config":1710},"Ultimateを選ぶ理由",{"href":1711,"dataGaName":1712,"dataGaLocation":1680},"/ja-jp/pricing/ultimate/","why ultimate",[1714],{"title":1564,"links":1715},[1716,1718,1720,1722,1727,1732,1737],{"text":1564,"config":1717},{"href":1573,"dataGaName":1250,"dataGaLocation":1680},{"text":1576,"config":1719},{"href":1578,"dataGaName":1579,"dataGaLocation":1680},{"text":1581,"config":1721},{"href":1583,"dataGaName":1584,"dataGaLocation":1680},{"text":1723,"config":1724},"ステータス",{"href":1725,"dataGaName":1726,"dataGaLocation":1680},"https://status.gitlab.com/","status",{"text":1728,"config":1729},"利用規約",{"href":1730,"dataGaName":1731,"dataGaLocation":1680},"/terms/","terms of use",{"text":1733,"config":1734},"プライバシーに関する声明",{"href":1735,"dataGaName":1736,"dataGaLocation":1680},"/ja-jp/privacy/","privacy statement",{"text":1738,"config":1739},"Cookie 優先設定",{"dataGaName":1740,"dataGaLocation":1680,"id":1741,"isOneTrustButton":458},"cookie preferences","ot-sdk-btn",{"title":1287,"links":1743,"subMenu":1752},[1744,1748],{"text":1745,"config":1746},"DevSecOpsプラットフォーム",{"href":1269,"dataGaName":1747,"dataGaLocation":1680},"devsecops platform",{"text":1749,"config":1750},"AI支援開発",{"href":1276,"dataGaName":1751,"dataGaLocation":1680},"ai-assisted development",[1753],{"title":1754,"links":1755},"トピック",[1756,1760,1765,1770,1775,1779,1784,1789],{"text":1307,"config":1757},{"href":1758,"dataGaName":1759,"dataGaLocation":1680},"/ja-jp/topics/ci-cd/","cicd",{"text":1761,"config":1762},"GitOps",{"href":1763,"dataGaName":1764,"dataGaLocation":1680},"/ja-jp/topics/gitops/","gitops",{"text":1766,"config":1767},"DevOps",{"href":1768,"dataGaName":1769,"dataGaLocation":1680},"/ja-jp/topics/devops/","devops",{"text":1771,"config":1772},"バージョン管理",{"href":1773,"dataGaName":1774,"dataGaLocation":1680},"/ja-jp/topics/version-control/","version control",{"text":1229,"config":1776},{"href":1777,"dataGaName":1778,"dataGaLocation":1680},"/ja-jp/topics/devsecops/","devsecops",{"text":1780,"config":1781},"クラウドネイティブ",{"href":1782,"dataGaName":1783,"dataGaLocation":1680},"/ja-jp/topics/cloud-native/","cloud native",{"text":1785,"config":1786},"コーディングのためのAI",{"href":1787,"dataGaName":1788,"dataGaLocation":1680},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":1790,"config":1791},"エージェント型AI",{"href":1792,"dataGaName":1793,"dataGaLocation":1680},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":1795,"links":1796},"ソリューション",[1797,1800,1802,1807,1811,1814,1817,1820,1822,1824,1827,1832],{"text":1332,"config":1798},{"href":1327,"dataGaName":1799,"dataGaLocation":1680},"Application Security Testing",{"text":1319,"config":1801},{"href":1303,"dataGaName":1304,"dataGaLocation":1680},{"text":1803,"config":1804},"アジャイル開発",{"href":1805,"dataGaName":1806,"dataGaLocation":1680},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":1808,"config":1809},"SCM",{"href":1316,"dataGaName":1810,"dataGaLocation":1680},"source code management",{"text":1307,"config":1812},{"href":1309,"dataGaName":1813,"dataGaLocation":1680},"continuous integration & delivery",{"text":1358,"config":1815},{"href":1360,"dataGaName":1816,"dataGaLocation":1680},"value stream management",{"text":1761,"config":1818},{"href":1819,"dataGaName":1764,"dataGaLocation":1680},"/ja-jp/solutions/gitops/",{"text":1371,"config":1821},{"href":1374,"dataGaName":1375,"dataGaLocation":1680},{"text":1377,"config":1823},{"href":1380,"dataGaName":1381,"dataGaLocation":1680},{"text":1825,"config":1826},"公共機関",{"href":1386,"dataGaName":1387,"dataGaLocation":1680},{"text":1828,"config":1829},"教育",{"href":1830,"dataGaName":1831,"dataGaLocation":1680},"/ja-jp/solutions/education/","education",{"text":1833,"config":1834},"金融サービス",{"href":1835,"dataGaName":1836,"dataGaLocation":1680},"/ja-jp/solutions/finance/","financial services",{"title":1838,"links":1839},"リソース",[1840,1842,1844,1846,1850,1852,1855,1857,1859,1861,1863,1865,1867,1869],{"text":1407,"config":1841},{"href":1409,"dataGaName":1410,"dataGaLocation":1680},{"text":1412,"config":1843},{"href":1414,"dataGaName":1415,"dataGaLocation":1680},{"text":1417,"config":1845},{"href":1419,"dataGaName":1420,"dataGaLocation":1680},{"text":1422,"config":1847},{"href":1848,"dataGaName":1849,"dataGaLocation":1680},"https://docs.gitlab.com/ja-jp","docs",{"text":1445,"config":1851},{"href":1447,"dataGaName":1448,"dataGaLocation":1680},{"text":1853,"config":1854},"最新リリース",{"href":1505,"dataGaName":1506,"dataGaLocation":1680},{"text":1440,"config":1856},{"href":1442,"dataGaName":1443,"dataGaLocation":1680},{"text":1459,"config":1858},{"href":1461,"dataGaName":1462,"dataGaLocation":1680},{"text":1467,"config":1860},{"href":1469,"dataGaName":1470,"dataGaLocation":1680},{"text":1472,"config":1862},{"href":1474,"dataGaName":1475,"dataGaLocation":1680},{"text":1477,"config":1864},{"href":1479,"dataGaName":1480,"dataGaLocation":1680},{"text":1482,"config":1866},{"href":1484,"dataGaName":1485,"dataGaLocation":1680},{"text":1487,"config":1868},{"href":1489,"dataGaName":1490,"dataGaLocation":1680},{"text":1492,"config":1870},{"href":1494,"dataGaName":1495,"dataGaLocation":1680},{"title":1872,"links":1873},"会社情報",[1874,1876,1878,1880,1882,1884,1888,1893,1895,1897,1899],{"text":1516,"config":1875},{"href":1518,"dataGaName":1510,"dataGaLocation":1680},{"text":1521,"config":1877},{"href":1523,"dataGaName":1524,"dataGaLocation":1680},{"text":1529,"config":1879},{"href":1531,"dataGaName":1532,"dataGaLocation":1680},{"text":1534,"config":1881},{"href":1536,"dataGaName":1537,"dataGaLocation":1680},{"text":1539,"config":1883},{"href":1541,"dataGaName":1542,"dataGaLocation":1680},{"text":1885,"config":1886},"Sustainability",{"href":1887,"dataGaName":1885,"dataGaLocation":1680},"/sustainability/",{"text":1889,"config":1890},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":1891,"dataGaName":1892,"dataGaLocation":1680},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1544,"config":1894},{"href":1546,"dataGaName":1547,"dataGaLocation":1680},{"text":1554,"config":1896},{"href":1556,"dataGaName":1557,"dataGaLocation":1680},{"text":1559,"config":1898},{"href":1561,"dataGaName":1562,"dataGaLocation":1680},{"text":1900,"config":1901},"現代奴隷制の透明性に関する声明",{"href":1902,"dataGaName":1903,"dataGaLocation":1680},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1905},[1906,1908,1911],{"text":1728,"config":1907},{"href":1730,"dataGaName":1731,"dataGaLocation":1680},{"text":1909,"config":1910},"Cookieの設定",{"dataGaName":1740,"dataGaLocation":1680,"id":1741,"isOneTrustButton":458},{"text":1733,"config":1912},{"href":1735,"dataGaName":1736,"dataGaLocation":1680},[1914],{"id":1915,"title":1916,"body":1216,"config":1917,"content":1919,"description":1216,"extension":1923,"meta":1924,"navigation":458,"path":1925,"seo":1926,"stem":1927,"__hash__":1928},"blogAuthors/en-us/blog/authors/david-oregan.yml","David Oregan",{"template":1918},"BlogAuthor",{"name":7,"config":1920},{"headshot":1921,"ctfId":1922},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659853/Blog/Author%20Headshots/oregand-headshot.png","oregand","yml",{},"/en-us/blog/authors/david-oregan",{},"en-us/blog/authors/david-oregan","CX5gLc3Gs5FrmvpMNVkBtC5zRi3vj8l3wJGnW0iSa6Y",[1930,1938,1945],{"title":1931,"description":1932,"heroImage":1933,"category":1212,"date":1934,"authors":1935,"slug":1937,"externalUrl":1216},"Loop Engineeringの実践方法：GitLab × Claude Codeでの実装例","GitLabとClaude Codeで実践するLoop Engineeringの実装例をご紹介。AIエージェントを自律稼働させるcron起動・Skills活用・ラベルベースのフローと、必須のガードレール設計を解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785215335/oevhcbrbev1zyfubdfxz.jpg","2026-07-31",[1936],"Issei Hamada, Sony Biz Networks Corporation","loop-engineering-gitlab-claude-code",{"title":1939,"description":1940,"heroImage":1941,"category":1212,"date":1934,"authors":1942,"slug":1944,"externalUrl":1216},"エージェント型AI、MCP、AIコードアシスタントを統制する方法","AIエージェントは、各ステップで人によるレビューを介さずに、コードの記述、プッシュ、デプロイを行うことができます。アクセス、権限、監査証跡を統制する実践的なフレームワークを解説します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785337625/ifzlc2hyzaxhzmjgyymh.png",[1943],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":1946,"description":1947,"heroImage":1948,"category":1212,"date":1949,"authors":1950,"slug":1952,"externalUrl":1216},"Claude Opus 5、GitLabで最難関タスクに挑む","AnthropicのClaude Opus 5がGitLab Duo Agent Platformで利用可能になりました。速度を犠牲にすることなく、より深い推論力を提供します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-07-27",[1951],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":1954},[1955,1968,1980,1991],{"id":1956,"categories":1957,"header":1958,"text":1959,"button":1960,"image":1965},"ai-modernization",[1212],"AIの真価、組織全体で発揮できていますか？","所要時間は5分以内です",{"text":1961,"config":1962},"AI成熟度スコアを確認する",{"href":1963,"dataGaName":1964,"dataGaLocation":1448},"/ja-jp/assessments/ai-modernization-assessment/","modernization assessment",{"config":1966},{"src":1967},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1969,"categories":1970,"header":1972,"text":1959,"button":1973,"image":1977},"devops-modernization",[1971,1778],"product","単にツールを管理するだけでなく、イノベーションを提供していますか？",{"text":1974,"config":1975},"DevOps成熟度スコアを確認しましょう",{"href":1976,"dataGaName":1964,"dataGaLocation":1448},"/ja-jp/assessments/devops-modernization-assessment/",{"config":1978},{"src":1979},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1981,"categories":1982,"header":1983,"text":1959,"button":1984,"image":1988},"security-modernization",[1231],"スピードのためにセキュリティを犠牲にしていませんか？",{"text":1985,"config":1986},"セキュリティ成熟度スコアを確認しましょう",{"href":1987,"dataGaName":1964,"dataGaLocation":1448},"/ja-jp/assessments/security-modernization-assessment/",{"config":1989},{"src":1990},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1992,"paths":1993,"header":1996,"text":1997,"button":1998,"image":2003},"github-azure-migration",[1994,1995],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","チームはGitHubのAzure移行に対応できていますか？","GitHubはすでにAzureを基盤として再構築を進めています。それがあなたのチームにとって何を意味するのか、ご確認ください。",{"text":1999,"config":2000},"GitLabとGitHubの比較を見る",{"href":2001,"dataGaName":2002,"dataGaLocation":1448},"/ja-jp/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2004},{"src":1979},{"header":2006,"blurb":2007,"button":2008,"secondaryButton":2012},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":1242,"config":2009},{"href":2010,"dataGaName":1245,"dataGaLocation":2011},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":1564,"config":2013},{"href":1573,"dataGaName":1250,"dataGaLocation":2011},1786803770762]