[{"data":1,"prerenderedAt":717},["ShallowReactive",2],{"/ja-jp/blog/developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities/":3,"navigation-ja-jp":41,"banner-ja-jp":456,"footer-ja-jp":469,"Michael Friedrich-Alana Bellucci":679,"next-steps-ja-jp":702},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":30,"_id":34,"_type":35,"title":36,"_source":37,"_file":38,"_stem":39,"_extension":40},"/ja-jp/blog/developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities","blog",false,"",{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},"GitLab Duo開発の現場から：AIを活用したセキュリティ脆弱性の修正","このチュートリアルでは、GitLab Duoの脆弱性の説明と脆弱性の修正、その他のAI搭載機能が、脆弱性に迅速に対処するのにどのように役立つのかをご説明します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098106/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750098106040.png","https://about.gitlab.com/blog/developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Duo開発の現場から：AIを活用したセキュリティ脆弱性の修正\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"},{\"@type\":\"Person\",\"name\":\"Alana Bellucci\"}],\n        \"datePublished\": \"2024-07-15\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":20,"body":21,"category":22,"tags":23,"updatedDate":29},[18,19],"Michael Friedrich","Alana Bellucci","2024-07-15","新しい仕事を始めたばかりの初日、大規模な本番環境でのインシデントが発生し、全員での対応が求められる状況に直面したとします。いくつもの重大な脆弱性が新たに発覚し、即時の対応、分析、軽減、そして修正が必要です。こうした場合、どこから調査を始めるべきでしょうか？\n\nこの記事では、GitLab Duoの脆弱性の説明や脆弱性の修正、その他のAI機能を活用し、たった数分以内に脆弱性への対応を開始する方法を解説していきます。実践的な例を通じて、AI搭載のアシスト機能を活用して効果的に脆弱性を分析し、説明するアプローチを習得しましょう。追加の修正として、AIが生成したコード修正がMR（マージリクエスト）に示され、脆弱性の修正を迅速化します。\n\n> [GitLab Duoの無料トライアル](https://about.gitlab.com/ja-jp/gitlab-duo/#free-trial)を始めて、脆弱性の修正機能を組織に取り入れてみませんか。\n\n## はじめ方：分析\n\n最初のステップは、脆弱性の影響と重大度を分析することです。GitLabのUIを開き、`セキュリティ > 脆弱性レポート` の順に進み、メニューから[Vulnerability Report（脆弱性レポート）](https://docs.gitlab.com/ee/user/application_security/vulnerability_report/)にアクセスします。脆弱性リストを `SAST` でフィルタリングし、対応を必要とする最も致命的な脆弱性を特定します。\n\n![脆弱性レポートの概要](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/vulnerability_reports_overview_aHR0cHM6_1750098116056.png)\n\nSASTのスキャン結果は詳細ビューで要約され、ソースコードへのリンクが表示されます。また、公開されているセキュリティアドバイザリからの詳細情報も提示されます。攻撃の範囲や技術的な詳細、脆弱な環境を十分に把握していない限り、デベロッパーがセキュリティレポートから分析を始めるのは難しい場合が多いでしょう。\n\n## 脆弱性の説明に基づく理解と軽減策\n\n脆弱性を理解し、最良かつ最も効率的な修正方法を知ることは不可欠です。また、修正により既存の機能に影響を与えないようにする必要があります。もし影響する場合は、保守担当者（メンテナー）やプロダクトオーナーとの議論が必要となり、その際には全体像を要約し、代替の軽減策を用意しなければなりません。また、離職した社員が作成したコードやテストを実施していないコードの場合、修正計画を立てるのがさらに難しくなることもあります。\n\nAI搭載の脆弱性の説明機能は、攻撃者がどのように脆弱性を悪用（エクスプロイト）できるかについて要約し、その影響や修正方法についての詳細な説明も行います。\n\n以下の例は、OSコマンドインジェクションの脆弱性を示しており、次のコードスニペットを使用しています。\n\n```php\n\u003C?php \n\n// Read variable name from GET request\n$name = $_GET['name'];\n\n// Use the variable name to call eval and print its value \neval('echo $' . $name . ';');\n```\n\n脆弱性レポートには詳細な説明がないため、全体の内容や影響について理解する必要があります。画面右上の `Explain Vulnerability`（脆弱性の説明）オプションを選択すると、事前に定義されたプロンプトアクションでGitLab Duo Chatが開きます。Chat内に脆弱性の追加の概要が表示され、脆弱性がどのように悪用されるかの説明や、推奨される修正方法が提示されます。\n\n![OSコマンドで使用される特殊文字の適切な無害化が行われていない（'OSコマンドインジェクション'）](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image9_aHR0cHM6_1750098116057.png)\n\n### 脆弱性の説明を文脈に沿った会話にする\n\n脆弱性の説明に関するUXの改善もされています。以前は、脆弱性の説明がオーバーレイとして右側に表示されていましたが、説明内容をGitLab Duo Chatのワークフローに統合しました。脆弱性が複雑である場合は、それに対して複数の軽減ステップに分かれたり、ソースコードの経路が不明瞭になることもあります。\n\nソースコードツリーを参照しながら、同じChatの文脈でコードの説明、修正、リファクタリング、そしてテストを続けられます。\n\nC言語の例で全体的なワークフローに取り組んでみましょう。この例では、セキュリティスキャンによってバッファオーバーフローが検出されています。\n\n1. セキュリティの脆弱性の詳細ビューを開き、右上にある「Explain Vulnerability」（脆弱性の説明）ボタンを選択します。Chatプロンプトが開き、問題の概要、潜在的な攻撃ベクター、および提案された修正が表示されます。\n\n![脆弱性のためのAI - 画像4](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image11_aHR0cHM6_1750098116059.png)\n\n2. 提案された修正を確認し、続けて `Can you show an alternative fix using a different function` （日本語：別の関数を使った代替修正方法を見せてくれますか？）というプロンプトで、Chatに尋ねます。この目的は、`strcpy()` に代わるより安全な関数がないか調べることです。\n\n![脆弱性のためのAI - 画像3](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image4_aHR0cHM6_1750098116060.png)\n\n3. `strlcpy()` を使用した代替修正がChat内で提案されます（下図参照）。この関数は、ターゲット文字列に許容される文字数のみをコピーし、常に文字列をnullで終端します。また、ソース文字列の長さを返し、文字列が切り詰められたかどうかを判断します。\n\n![脆弱性のためのAI - 画像5](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image10_aHR0cHM6_1750098116062.png)\n\n4. 次に、`Location file` URLをクリックし、ソースコードビューに移動します。再度Chatを開き、前の脆弱性の説明の文脈が保持されていることを確認します。次のステップでは、修正を続ける前にテストを追加していきます。これにより、機能の破損やリグレッションの発生を防ぐことができます。たとえば、`Based on the vulnerability context and opened source code, how would you add tests for it?` （日本語：脆弱性のコンテキストと表示されたソースコードに基づいて、テストを追加するにはどうしますか？）などのプロンプトを使用します。\n\n![脆弱性のためのAI - 画像7](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image8_aHR0cHM6_1750098116063.png)\n\n5. テストが生成され（仮に追加されたとして）、同じセッションで `Can you refactor the source code too?` （日本語：ソースコードもリファクタリングできますか？）というプロンプトを使用して、Chatにソースコードのリファクタリングも依頼できます。\n\n![脆弱性のためのAI - 画像6](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image2_aHR0cHM6_1750098116063.png)\n\nこのワークフローでは、脆弱性の分析、理解、軽減、代替アプローチの発見、テストの追加、さらには脆弱性の修正に対するリファクタリングを行う手順が示されています。\n\nChatを使ってこのプロセスを続けた後、Web IDEに切り替えて、学んだことを基にソースコードを修正できます。さらに、変更をコミットし、CI/CDやセキュリティスキャンをトリガーして、DevSecOpsライフサイクル全体のループを完結させる継続的なワークフローも含まれています。\n\n## AIアシストによる脆弱性の修正\n\nセキュリティ脆弱性を理解し、軽減するには、問題の修正を作成し、新しいマージリクエストでパイプラインを実行し、再度セキュリティスキャンを実施するなどのエンジニアリング作業が必要になります。また、修正をステージング（staging）環境にデプロイし、一定期間テストすることも必要な場合があります。\n\nAIを活用し、脆弱性とソースコードに基づいた提案修正を生成することで、脆弱性修正プロセスを迅速化します。\n\nヒント：これまでの経験の中で最も厄介だった脆弱性を思い出し、そのユースケースを再現してGitLab Duoの導入に活用してみましょう。ちなみに、[MITREのCWE Top 25（最も危険なソフトウェアの脆弱性）](https://cwe.mitre.org/top25/archive/2023/2023_top25_list.html)も、ユースケースとしてはよい例です。\n\n次の例は、[CWE-328：弱いハッシュ関数の使用](https://cwe.mitre.org/data/definitions/328.html)を実装したもので、`md5` を使用しています。これは[SASTスキャン](https://docs.gitlab.com/ee/user/application_security/sast/)によって正しく識別されます。\n\n```python\nimport hashlib\n\nclass User:\n    def __init__(self, username, password):\n        self.username = username\n        self.password = password\n\n    def set_password(self, password):\n        self.password = hashlib.md5(password.encode()).hexdigest()\n```\n\n![脆弱性のためのAI -画像8](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image7_aHR0cHM6_1750098116064.png)\n\n右上の `Resolve with merge request`（マージリクエストで解決）ボタンをクリックすると、AIを活用して修正を提案するMRが開きます。この脆弱性に対する修正として、別のハッシュ関数を使用することが考えられます。\n\n![脆弱性のためのAI - 画像9](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image1_aHR0cHM6_1750098116065.png)\n\nもうひとつの一般的な脆弱性の例として、関数のエラーコードや潜在的な例外をチェックしないケースがあります。以下のCコードスニペットは、`fopen()` や `chmod()` の呼び出しに対する[CWE-362](https://cwe.mitre.org/data/definitions/362.html)に関連するファイル操作におけるタイミング攻撃の例を実装しています。\n\n```c\n#include \u003Cstdio.h>\n#include \u003Cstring.h>\n#include \u003Csys/mman.h>\n#include \u003Csys/stat.h>\n#include \u003Cunistd.h>\n\nint main(int argc, char **argv) {##$_0A$####$_0A$##    // File operations##$_0A$##    char *fname = \"gitlab.keksi\";##$_0A$####$_0A$##    FILE *fp;##$_0A$##    fp = fopen(fname, \"r\");##$_0A$##    fprintf(fp, \"Hello from GitLab Duo Vulnerability Resolution Challenge\");##$_0A$##    fclose(fp);##$_0A$####$_0A$##    // Potential chmod() timing attacks    ##$_0A$####$_0A$##    // Make the file world readable##$_0A$##    chmod(fname, S_IRWXU|S_IRWXG|S_IRWXO);##$_0A$####$_0A$##    return 0;##$_0A$##}\n```\n\n`chmod()` に関するSASTレポートは、次のように表示される場合があります。\n\n![脆弱性のためのAI - 画像10](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image6_aHR0cHM6_1750098116065.png)\n\n提案された `chmod()` のマージリクエストにはエラーハンドリングが含まれており、ファイルが世界中で書き込み可能になる潜在的な問題も修正されて、権限が `777` から `600` に変更されています。\n\n![脆弱性のためのAI - 画像11](https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098116/Blog/Content%20Images/Blog/Content%20Images/image3_aHR0cHM6_1750098116066.png)\n\n> 次に`fopen()` 関数の脆弱性も特定し、分析した上で修正してみてください。\n\n ## GitLab DuoによるさらなるAI支援\n\nセキュリティ問題は、簡単な修正や回避策で解決できることがよくあり、それによって開発チームが長期的な解決策を議論し、計画する時間を確保できます。他のケースでは、問題がより複雑になり、適切な修正が本番環境に反映されるまで、機能[API](https://about.gitlab.com/ja-jp/blog/what-is-an-api)を無効にしたり、ファイアウォールでの軽減策が必要になることもあります。\n\nGitLab Duoは、こうした問題の解決に役立つAIを活用した追加機能を提供しています。\n\n**コードの説明**：デベロッパーやセキュリティエンジニアとして、行った変更に自信を持つことが重要です。IDE内で[コードの説明機能](https://docs.gitlab.com/ee/user/gitlab_duo_chat/examples.html#explain-code-in-the-ide)を使用することで、AIが提案した脆弱性修正をより深く理解できます。この機能により、どのような調整が行われたか、そしてその理由を正確に把握できます。\n\n**根本原因分析：** 修正によりCI/CDパイプラインがエラーを起こしてしまった場合、[根本原因分析機能](https://about.gitlab.com/ja-jp/blog/developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd/)を利用できます。このツールは、根本的な問題を特定し、説明するのに役立ち、効果的に問題に対処できます。必要な修正を加えた後、テストを再実行して問題が解決したか確認できます。\n\n**リファクタリング**：脆弱性の修正が済んでも、より安全なコードにできないか検討する価値があります。IDE内でGitLab Duo Chatを開き、[リファクタリング機能](https://docs.gitlab.com/ee/user/gitlab_duo_chat/examples.html#refactor-code-in-the-ide)を使用して、コードをより安全に書くための代替方法を探ることができます。この事前対策的なアプローチにより、堅牢でセキュアなコードベースを維持できます。\n\nこれらのGitLab Duoの機能を活用することで、脆弱性に自信を持って対処し、コードのセキュリティと効率を確保できます。\n\n## 今後の取り組み\n\n脆弱性の説明と修正の機能をMRのプロセスに直接組み込むことで、シフトレフト（より早い段階に移行）させることを計画しています。この統合により、開発サイクルの初期段階で脆弱性に対処し、解決できるようになり、ワークフローが効率化され、シフトレフトによりコードのセキュリティが強化された状態になります。\n\n## GitLab Duoを始める\n\nGitLab Ultimateで利用可能な機能を有効化する方法を説明する[ドキュメント](https://docs.gitlab.com/ee/user/gitlab_duo/turn_on_off.html)をご参照ください。また、GitLab Duoの[脆弱性の説明](https://docs.gitlab.com/ee/user/application_security/vulnerabilities/#explaining-a-vulnerability)および[脆弱性の修正](https://docs.gitlab.com/ee/user/application_security/vulnerabilities/#vulnerability-resolution)は、GitLabのSelf-Managed環境やGitLab Dedicatedでも利用可能です。\n\n[「GitLab Duo開発の現場から」ブログシリーズ](https://about.gitlab.com/ja-jp/blog/developing-gitlab-duo-series/)をチェックすることで、GitLab Duoの最新情報についてご確認いただけます。\n\n*監修：伊藤 俊廷 [@toshitakaito](https://gitlab.com/toshitakaito) \u003Cbr>\n（GitLab合同会社 ソリューションアーキテクト本部 スタッフソリューションアーキテクト）*\n\n> [GitLab Duoの無料トライアル](https://about.gitlab.com/ja-jp/gitlab-duo/#free-trial)を始めて、脆弱性の修正機能を組織に取り入れてみませんか。\n","ai-ml",[24,25,26,27,28],"AI/ML","security","product","features","tutorial","2025-01-21",{"slug":31,"featured":32,"template":33},"developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities",true,"BlogPost","content:ja-jp:blog:developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities.yml","yaml","Developing Gitlab Duo Use Ai To Remediate Security Vulnerabilities","content","ja-jp/blog/developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities.yml","ja-jp/blog/developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities","yml",{"_path":42,"_dir":43,"_draft":6,"_partial":6,"_locale":7,"data":44,"_id":452,"_type":35,"title":453,"_source":37,"_file":454,"_stem":455,"_extension":40},"/shared/ja-jp/main-navigation","ja-jp",{"logo":45,"freeTrial":50,"sales":55,"login":60,"items":65,"search":396,"minimal":430,"duo":443},{"config":46},{"href":47,"dataGaName":48,"dataGaLocation":49},"/ja-jp/","gitlab logo","header",{"text":51,"config":52},"無料トライアルを開始",{"href":53,"dataGaName":54,"dataGaLocation":49},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":56,"config":57},"お問い合わせ",{"href":58,"dataGaName":59,"dataGaLocation":49},"/ja-jp/sales/","sales",{"text":61,"config":62},"サインイン",{"href":63,"dataGaName":64,"dataGaLocation":49},"https://gitlab.com/users/sign_in/","sign in",[66,110,208,213,318,378],{"text":67,"config":68,"cards":70,"footer":93},"プラットフォーム",{"dataNavLevelOne":69},"platform",[71,77,85],{"title":67,"description":72,"link":73},"最も包括的かつAIで強化されたDevSecOpsプラットフォーム",{"text":74,"config":75},"プラットフォームを詳しく見る",{"href":76,"dataGaName":69,"dataGaLocation":49},"/ja-jp/platform/",{"title":78,"description":79,"link":80},"GitLab Duo（AI）","開発のすべてのステージでAIを活用し、ソフトウェアをより迅速にビルド",{"text":81,"config":82},"GitLab Duoのご紹介",{"href":83,"dataGaName":84,"dataGaLocation":49},"/ja-jp/gitlab-duo/","gitlab duo ai",{"title":86,"description":87,"link":88},"GitLabが選ばれる理由","GitLabが大企業に選ばれる理由10選",{"text":89,"config":90},"詳細はこちら",{"href":91,"dataGaName":92,"dataGaLocation":49},"/ja-jp/why-gitlab/","why gitlab",{"title":94,"items":95},"利用を開始：",[96,101,106],{"text":97,"config":98},"プラットフォームエンジニアリング",{"href":99,"dataGaName":100,"dataGaLocation":49},"/ja-jp/solutions/platform-engineering/","platform engineering",{"text":102,"config":103},"開発者の経験",{"href":104,"dataGaName":105,"dataGaLocation":49},"/ja-jp/developer-experience/","Developer experience",{"text":107,"config":108},"MLOps",{"href":109,"dataGaName":107,"dataGaLocation":49},"/ja-jp/topics/devops/the-role-of-ai-in-devops/",{"text":111,"left":32,"config":112,"link":114,"lists":118,"footer":190},"製品",{"dataNavLevelOne":113},"solutions",{"text":115,"config":116},"すべてのソリューションを表示",{"href":117,"dataGaName":113,"dataGaLocation":49},"/ja-jp/solutions/",[119,145,168],{"title":120,"description":121,"link":122,"items":127},"自動化","CI/CDと自動化でデプロイを加速",{"config":123},{"icon":124,"href":125,"dataGaName":126,"dataGaLocation":49},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[128,132,136,141],{"text":129,"config":130},"CI/CD",{"href":131,"dataGaLocation":49,"dataGaName":129},"/ja-jp/solutions/continuous-integration/",{"text":133,"config":134},"AIアシストによる開発",{"href":83,"dataGaLocation":49,"dataGaName":135},"AI assisted development",{"text":137,"config":138},"ソースコード管理",{"href":139,"dataGaLocation":49,"dataGaName":140},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":142,"config":143},"自動化されたソフトウェアデリバリー",{"href":125,"dataGaLocation":49,"dataGaName":144},"Automated software delivery",{"title":146,"description":147,"link":148,"items":153},"セキュリティ","セキュリティを損なうことなくコードをより迅速に完成",{"config":149},{"href":150,"dataGaName":151,"dataGaLocation":49,"icon":152},"/ja-jp/solutions/security-compliance/","security and compliance","ShieldCheckLight",[154,158,163],{"text":155,"config":156},"セキュリティとコンプライアンス",{"href":150,"dataGaLocation":49,"dataGaName":157},"Security & Compliance",{"text":159,"config":160},"ソフトウェアサプライチェーンの安全性",{"href":161,"dataGaLocation":49,"dataGaName":162},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":164,"config":165},"コンプライアンスとガバナンス",{"href":166,"dataGaLocation":49,"dataGaName":167},"/ja-jp/solutions/continuous-software-compliance/","Compliance and governance",{"title":169,"link":170,"items":175},"測定",{"config":171},{"icon":172,"href":173,"dataGaName":174,"dataGaLocation":49},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[176,180,185],{"text":177,"config":178},"可視性と測定",{"href":173,"dataGaLocation":49,"dataGaName":179},"Visibility and Measurement",{"text":181,"config":182},"バリューストリーム管理",{"href":183,"dataGaLocation":49,"dataGaName":184},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":186,"config":187},"分析とインサイト",{"href":188,"dataGaLocation":49,"dataGaName":189},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":191,"items":192},"GitLabが活躍する場所",[193,198,203],{"text":194,"config":195},"Enterprise",{"href":196,"dataGaLocation":49,"dataGaName":197},"/ja-jp/enterprise/","enterprise",{"text":199,"config":200},"スモールビジネス",{"href":201,"dataGaLocation":49,"dataGaName":202},"/ja-jp/small-business/","small business",{"text":204,"config":205},"公共機関",{"href":206,"dataGaLocation":49,"dataGaName":207},"/ja-jp/solutions/public-sector/","public sector",{"text":209,"config":210},"価格",{"href":211,"dataGaName":212,"dataGaLocation":49,"dataNavLevelOne":212},"/ja-jp/pricing/","pricing",{"text":214,"config":215,"link":217,"lists":221,"feature":305},"関連リソース",{"dataNavLevelOne":216},"resources",{"text":218,"config":219},"すべてのリソースを表示",{"href":220,"dataGaName":216,"dataGaLocation":49},"/ja-jp/resources/",[222,255,277],{"title":223,"items":224},"はじめに",[225,230,235,240,245,250],{"text":226,"config":227},"インストール",{"href":228,"dataGaName":229,"dataGaLocation":49},"/ja-jp/install/","install",{"text":231,"config":232},"クイックスタートガイド",{"href":233,"dataGaName":234,"dataGaLocation":49},"/ja-jp/get-started/","quick setup checklists",{"text":236,"config":237},"学ぶ",{"href":238,"dataGaLocation":49,"dataGaName":239},"https://university.gitlab.com/","learn",{"text":241,"config":242},"製品ドキュメント",{"href":243,"dataGaName":244,"dataGaLocation":49},"https://docs.gitlab.com/","product documentation",{"text":246,"config":247},"ベストプラクティスビデオ",{"href":248,"dataGaName":249,"dataGaLocation":49},"/ja-jp/getting-started-videos/","best practice videos",{"text":251,"config":252},"インテグレーション",{"href":253,"dataGaName":254,"dataGaLocation":49},"/ja-jp/integrations/","integrations",{"title":256,"items":257},"検索する",[258,263,267,272],{"text":259,"config":260},"お客様成功事例",{"href":261,"dataGaName":262,"dataGaLocation":49},"/ja-jp/customers/","customer success stories",{"text":264,"config":265},"ブログ",{"href":266,"dataGaName":5,"dataGaLocation":49},"/ja-jp/blog/",{"text":268,"config":269},"リモート",{"href":270,"dataGaName":271,"dataGaLocation":49},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":273,"config":274},"TeamOps",{"href":275,"dataGaName":276,"dataGaLocation":49},"/ja-jp/teamops/","teamops",{"title":278,"items":279},"つなげる",[280,285,290,295,300],{"text":281,"config":282},"GitLabサービス",{"href":283,"dataGaName":284,"dataGaLocation":49},"/ja-jp/services/","services",{"text":286,"config":287},"コミュニティ",{"href":288,"dataGaName":289,"dataGaLocation":49},"/community/","community",{"text":291,"config":292},"フォーラム",{"href":293,"dataGaName":294,"dataGaLocation":49},"https://forum.gitlab.com/","forum",{"text":296,"config":297},"イベント",{"href":298,"dataGaName":299,"dataGaLocation":49},"/events/","events",{"text":301,"config":302},"パートナー",{"href":303,"dataGaName":304,"dataGaLocation":49},"/ja-jp/partners/","partners",{"backgroundColor":306,"textColor":307,"text":308,"image":309,"link":313},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":310,"config":311},"ソースプロモカード",{"src":312},"/images/navigation/the-source-promo-card.svg",{"text":314,"config":315},"最新情報を読む",{"href":316,"dataGaName":317,"dataGaLocation":49},"/ja-jp/the-source/","the source",{"text":319,"config":320,"lists":322},"Company",{"dataNavLevelOne":321},"company",[323],{"items":324},[325,330,336,338,343,348,353,358,363,368,373],{"text":326,"config":327},"GitLabについて",{"href":328,"dataGaName":329,"dataGaLocation":49},"/ja-jp/company/","about",{"text":331,"config":332,"footerGa":335},"採用情報",{"href":333,"dataGaName":334,"dataGaLocation":49},"/jobs/","jobs",{"dataGaName":334},{"text":296,"config":337},{"href":298,"dataGaName":299,"dataGaLocation":49},{"text":339,"config":340},"経営陣",{"href":341,"dataGaName":342,"dataGaLocation":49},"/company/team/e-group/","leadership",{"text":344,"config":345},"チーム",{"href":346,"dataGaName":347,"dataGaLocation":49},"/company/team/","team",{"text":349,"config":350},"ハンドブック",{"href":351,"dataGaName":352,"dataGaLocation":49},"https://handbook.gitlab.com/","handbook",{"text":354,"config":355},"投資家向け情報",{"href":356,"dataGaName":357,"dataGaLocation":49},"https://ir.gitlab.com/","investor relations",{"text":359,"config":360},"トラストセンター",{"href":361,"dataGaName":362,"dataGaLocation":49},"/ja-jp/security/","trust center",{"text":364,"config":365},"AI Transparency Center",{"href":366,"dataGaName":367,"dataGaLocation":49},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":369,"config":370},"ニュースレター",{"href":371,"dataGaName":372,"dataGaLocation":49},"/company/contact/","newsletter",{"text":374,"config":375},"プレス",{"href":376,"dataGaName":377,"dataGaLocation":49},"/press/","press",{"text":56,"config":379,"lists":380},{"dataNavLevelOne":321},[381],{"items":382},[383,386,391],{"text":56,"config":384},{"href":58,"dataGaName":385,"dataGaLocation":49},"talk to sales",{"text":387,"config":388},"サポートを受ける",{"href":389,"dataGaName":390,"dataGaLocation":49},"/support/","get help",{"text":392,"config":393},"カスタマーポータル",{"href":394,"dataGaName":395,"dataGaLocation":49},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":397,"login":398,"suggestions":405},"閉じる",{"text":399,"link":400},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":401,"config":402},"GitLab.com",{"href":63,"dataGaName":403,"dataGaLocation":404},"search login","search",{"text":406,"default":407},"提案",[408,411,416,418,422,426],{"text":78,"config":409},{"href":83,"dataGaName":410,"dataGaLocation":404},"GitLab Duo (AI)",{"text":412,"config":413},"コード提案（AI）",{"href":414,"dataGaName":415,"dataGaLocation":404},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":129,"config":417},{"href":131,"dataGaName":129,"dataGaLocation":404},{"text":419,"config":420},"GitLab on AWS",{"href":421,"dataGaName":419,"dataGaLocation":404},"/ja-jp/partners/technology-partners/aws/",{"text":423,"config":424},"GitLab on Google Cloud",{"href":425,"dataGaName":423,"dataGaLocation":404},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":427,"config":428},"GitLabを選ぶ理由",{"href":91,"dataGaName":429,"dataGaLocation":404},"Why GitLab?",{"freeTrial":431,"mobileIcon":435,"desktopIcon":440},{"text":51,"config":432},{"href":433,"dataGaName":54,"dataGaLocation":434},"https://gitlab.com/-/trials/new/","nav",{"altText":436,"config":437},"GitLabアイコン",{"src":438,"dataGaName":439,"dataGaLocation":434},"/images/brand/gitlab-logo-tanuki.svg","gitlab icon",{"altText":436,"config":441},{"src":442,"dataGaName":439,"dataGaLocation":434},"/images/brand/gitlab-logo-type.svg",{"freeTrial":444,"mobileIcon":448,"desktopIcon":450},{"text":445,"config":446},"GitLab Duoの詳細について",{"href":83,"dataGaName":447,"dataGaLocation":434},"gitlab duo",{"altText":436,"config":449},{"src":438,"dataGaName":439,"dataGaLocation":434},{"altText":436,"config":451},{"src":442,"dataGaName":439,"dataGaLocation":434},"content:shared:ja-jp:main-navigation.yml","Main Navigation","shared/ja-jp/main-navigation.yml","shared/ja-jp/main-navigation",{"_path":457,"_dir":43,"_draft":6,"_partial":6,"_locale":7,"title":458,"button":459,"config":464,"_id":466,"_type":35,"_source":37,"_file":467,"_stem":468,"_extension":40},"/shared/ja-jp/banner","GitLab Duo Agent Platformがパブリックベータ版で利用可能に！",{"text":460,"config":461},"詳しく見る",{"href":462,"dataGaName":463,"dataGaLocation":49},"/gitlab-duo/agent-platform/","duo banner",{"layout":465},"release","content:shared:ja-jp:banner.yml","shared/ja-jp/banner.yml","shared/ja-jp/banner",{"_path":470,"_dir":43,"_draft":6,"_partial":6,"_locale":7,"data":471,"_id":675,"_type":35,"title":676,"_source":37,"_file":677,"_stem":678,"_extension":40},"/shared/ja-jp/main-footer",{"text":472,"source":473,"edit":479,"contribute":484,"config":489,"items":494,"minimal":667},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":474,"config":475},"ページのソースを表示",{"href":476,"dataGaName":477,"dataGaLocation":478},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":480,"config":481},"このページを編集",{"href":482,"dataGaName":483,"dataGaLocation":478},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":485,"config":486},"ご協力をお願いします",{"href":487,"dataGaName":488,"dataGaLocation":478},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":490,"facebook":491,"youtube":492,"linkedin":493},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[495,518,572,605,639],{"title":67,"links":496,"subMenu":501},[497],{"text":498,"config":499},"DevSecOpsプラットフォーム",{"href":76,"dataGaName":500,"dataGaLocation":478},"devsecops platform",[502],{"title":209,"links":503},[504,508,513],{"text":505,"config":506},"プランの表示",{"href":211,"dataGaName":507,"dataGaLocation":478},"view plans",{"text":509,"config":510},"Premiumを選ぶ理由",{"href":511,"dataGaName":512,"dataGaLocation":478},"/ja-jp/pricing/premium/","why premium",{"text":514,"config":515},"Ultimateを選ぶ理由",{"href":516,"dataGaName":517,"dataGaLocation":478},"/ja-jp/pricing/ultimate/","why ultimate",{"title":519,"links":520},"ソリューション",[521,526,529,531,536,541,545,548,551,556,558,560,562,567],{"text":522,"config":523},"デジタルトランスフォーメーション",{"href":524,"dataGaName":525,"dataGaLocation":478},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":155,"config":527},{"href":150,"dataGaName":528,"dataGaLocation":478},"security & compliance",{"text":142,"config":530},{"href":125,"dataGaName":126,"dataGaLocation":478},{"text":532,"config":533},"アジャイル開発",{"href":534,"dataGaName":535,"dataGaLocation":478},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":537,"config":538},"クラウドトランスフォーメーション",{"href":539,"dataGaName":540,"dataGaLocation":478},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":542,"config":543},"SCM",{"href":139,"dataGaName":544,"dataGaLocation":478},"source code management",{"text":129,"config":546},{"href":131,"dataGaName":547,"dataGaLocation":478},"continuous integration & delivery",{"text":181,"config":549},{"href":183,"dataGaName":550,"dataGaLocation":478},"value stream management",{"text":552,"config":553},"GitOps",{"href":554,"dataGaName":555,"dataGaLocation":478},"/ja-jp/solutions/gitops/","gitops",{"text":194,"config":557},{"href":196,"dataGaName":197,"dataGaLocation":478},{"text":199,"config":559},{"href":201,"dataGaName":202,"dataGaLocation":478},{"text":204,"config":561},{"href":206,"dataGaName":207,"dataGaLocation":478},{"text":563,"config":564},"教育",{"href":565,"dataGaName":566,"dataGaLocation":478},"/ja-jp/solutions/education/","education",{"text":568,"config":569},"金融サービス",{"href":570,"dataGaName":571,"dataGaLocation":478},"/ja-jp/solutions/finance/","financial services",{"title":214,"links":573},[574,576,578,580,583,585,589,591,593,595,597,599,601,603],{"text":226,"config":575},{"href":228,"dataGaName":229,"dataGaLocation":478},{"text":231,"config":577},{"href":233,"dataGaName":234,"dataGaLocation":478},{"text":236,"config":579},{"href":238,"dataGaName":239,"dataGaLocation":478},{"text":241,"config":581},{"href":243,"dataGaName":582,"dataGaLocation":478},"docs",{"text":264,"config":584},{"href":266,"dataGaName":5},{"text":586,"config":587},"お客様の成功事例",{"href":588,"dataGaLocation":478},"/customers/",{"text":259,"config":590},{"href":261,"dataGaName":262,"dataGaLocation":478},{"text":268,"config":592},{"href":270,"dataGaName":271,"dataGaLocation":478},{"text":281,"config":594},{"href":283,"dataGaName":284,"dataGaLocation":478},{"text":273,"config":596},{"href":275,"dataGaName":276,"dataGaLocation":478},{"text":286,"config":598},{"href":288,"dataGaName":289,"dataGaLocation":478},{"text":291,"config":600},{"href":293,"dataGaName":294,"dataGaLocation":478},{"text":296,"config":602},{"href":298,"dataGaName":299,"dataGaLocation":478},{"text":301,"config":604},{"href":303,"dataGaName":304,"dataGaLocation":478},{"title":319,"links":606},[607,609,611,613,615,617,619,623,628,630,632,634],{"text":326,"config":608},{"href":328,"dataGaName":321,"dataGaLocation":478},{"text":331,"config":610},{"href":333,"dataGaName":334,"dataGaLocation":478},{"text":339,"config":612},{"href":341,"dataGaName":342,"dataGaLocation":478},{"text":344,"config":614},{"href":346,"dataGaName":347,"dataGaLocation":478},{"text":349,"config":616},{"href":351,"dataGaName":352,"dataGaLocation":478},{"text":354,"config":618},{"href":356,"dataGaName":357,"dataGaLocation":478},{"text":620,"config":621},"Sustainability",{"href":622,"dataGaName":620,"dataGaLocation":478},"/sustainability/",{"text":624,"config":625},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":626,"dataGaName":627,"dataGaLocation":478},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":359,"config":629},{"href":361,"dataGaName":362,"dataGaLocation":478},{"text":369,"config":631},{"href":371,"dataGaName":372,"dataGaLocation":478},{"text":374,"config":633},{"href":376,"dataGaName":377,"dataGaLocation":478},{"text":635,"config":636},"現代奴隷制の透明性に関する声明",{"href":637,"dataGaName":638,"dataGaLocation":478},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":56,"links":640},[641,643,645,647,652,657,662],{"text":56,"config":642},{"href":58,"dataGaName":59,"dataGaLocation":478},{"text":387,"config":644},{"href":389,"dataGaName":390,"dataGaLocation":478},{"text":392,"config":646},{"href":394,"dataGaName":395,"dataGaLocation":478},{"text":648,"config":649},"ステータス",{"href":650,"dataGaName":651,"dataGaLocation":478},"https://status.gitlab.com/","status",{"text":653,"config":654},"利用規約",{"href":655,"dataGaName":656,"dataGaLocation":478},"/terms/","terms of use",{"text":658,"config":659},"プライバシーに関する声明",{"href":660,"dataGaName":661,"dataGaLocation":478},"/ja-jp/privacy/","privacy statement",{"text":663,"config":664},"Cookieの設定",{"dataGaName":665,"dataGaLocation":478,"id":666,"isOneTrustButton":32},"cookie preferences","ot-sdk-btn",{"items":668},[669,671,673],{"text":653,"config":670},{"href":655,"dataGaName":656,"dataGaLocation":478},{"text":658,"config":672},{"href":660,"dataGaName":661,"dataGaLocation":478},{"text":663,"config":674},{"dataGaName":665,"dataGaLocation":478,"id":666,"isOneTrustButton":32},"content:shared:ja-jp:main-footer.yml","Main Footer","shared/ja-jp/main-footer.yml","shared/ja-jp/main-footer",[680,692],{"_path":681,"_dir":682,"_draft":6,"_partial":6,"_locale":7,"content":683,"config":687,"_id":689,"_type":35,"title":18,"_source":37,"_file":690,"_stem":691,"_extension":40},"/en-us/blog/authors/michael-friedrich","authors",{"name":18,"config":684},{"headshot":685,"ctfId":686},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659879/Blog/Author%20Headshots/dnsmichi-headshot.jpg","dnsmichi",{"template":688},"BlogAuthor","content:en-us:blog:authors:michael-friedrich.yml","en-us/blog/authors/michael-friedrich.yml","en-us/blog/authors/michael-friedrich",{"_path":693,"_dir":682,"_draft":6,"_partial":6,"_locale":7,"content":694,"config":698,"_id":699,"_type":35,"title":19,"_source":37,"_file":700,"_stem":701,"_extension":40},"/en-us/blog/authors/alana-bellucci",{"name":19,"config":695},{"headshot":696,"ctfId":697},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664907/Blog/Author%20Headshots/abellucci-headshot.jpg","abellucci",{"template":688},"content:en-us:blog:authors:alana-bellucci.yml","en-us/blog/authors/alana-bellucci.yml","en-us/blog/authors/alana-bellucci",{"_path":703,"_dir":43,"_draft":6,"_partial":6,"_locale":7,"header":704,"eyebrow":705,"blurb":706,"button":707,"secondaryButton":711,"_id":713,"_type":35,"title":714,"_source":37,"_file":715,"_stem":716,"_extension":40},"/shared/ja-jp/next-steps","より優れたソフトウェアをより速く提供","フォーチュン100企業の50%以上がGitLabを信頼","インテリジェントなDevSecOpsプラットフォームで\n\n\nチームの可能性を広げましょう。\n",{"text":51,"config":708},{"href":709,"dataGaName":54,"dataGaLocation":710},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":56,"config":712},{"href":58,"dataGaName":59,"dataGaLocation":710},"content:shared:ja-jp:next-steps.yml","Next Steps","shared/ja-jp/next-steps.yml","shared/ja-jp/next-steps",1754424544114]