[{"data":1,"prerenderedAt":706},["ShallowReactive",2],{"/ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way":3,"navigation-ja-jp":35,"banner-ja-jp":449,"footer-ja-jp":462,"footer-source-/ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way/":672,"Sam Morris":678,"next-steps-ja-jp":691},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":16,"config":25,"_id":28,"_type":29,"title":30,"_source":31,"_file":32,"_stem":33,"_extension":34},"/ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","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 CI/CDパイプラインを簡単に構築する方法","単一のリポジトリで複数のアプリケーションをホストするモノレポ用に、GitLab CI/CDパイプラインを作成する方法についてご紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660151/Blog/Hero%20Images/blog-image-template-1800x945__26_.png","https://about.gitlab.com/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"モノレポ用のGitLab CI/CDパイプラインを簡単に構築する方法\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sam Morris\"}],\n        \"datePublished\": \"2024-07-30\",\n      }",{"title":9,"description":10,"authors":17,"heroImage":11,"date":19,"body":20,"category":21,"tags":22},[18],"Sam Morris","2024-07-30","モノレポを使用すると、単一のリポジトリで複数のアプリケーションのコードをホストできます。GitLabでこれを実現しようとすると、プロジェクト内の各ディレクトリに異なるアプリケーションのソースコードを配置することになります。この方法だとコードの保存場所をバージョン管理できるものの、GitLabの[CI/CD](https://about.gitlab.com/ja-jp/topics/ci-cd/)パイプライン機能を最大限に活用するのは困難でした。しかしながら、新たな方法が登場しました！\n\n\n## モノレポにおけるCI/CDの理想的な実例\n\n\n通常、リポジトリには複数のアプリケーションのコードが格納されているため、複数のパイプライン設定が必要となります。たとえば、.NETアプリケーションとSpringアプリケーションがあるプロジェクトの場合、アプリケーションごとに異なるビルドジョブとテストジョブを実施している可能性があります。この場合、パイプラインを完全に切り離し、特定のアプリケーションのソースコードの変更が発生した場合のみ、各パイプラインを実行するのが理想的です。\n\n\nこのようなプロセスを技術的に実現するには、特定のディレクトリの変更に基づいて特定のYAMLファイルをインクルードする、プロジェクトレベルのパイプライン設定ファイル`.gitlab-ci.yml`を用意します。`.gitlab-ci.yml`パイプラインは、コードに加えられた変更に基づき、適切なパイプラインをトリガーするコントロールプレーンとして機能します。\n\n\n## 従来のアプローチ\n\n\nGitLab\n16.4より前のバージョンでは、プロジェクト内のディレクトリまたはファイルへの変更に基づいてYAMLファイルをインクルードすることはできませんでした。ただし、回避策を使えばこの機能を実現することは可能でした。\n\n\nこれからご紹介するモノレポプロジェクトの例では、異なるアプリケーション用に2つのディレクトリがあるとします。それぞれJavaアプリ用の`java`ディレクトリとPythonアプリ用の`python`ディレクトリがあります。それぞれのディレクトリには、各アプリをビルドするためのアプリケーション固有のYAMLファイルが含まれています。シンプルにプロジェクトのパイプラインファイルに両アプリケーションのパイプラインファイルをインクルードし、それらのファイルで直接ロジック処理を行います。\n\n\n`.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\ntop-level-job:\n  stage: build\n  script:\n    - echo \"Hello world...\"\n\ninclude:\n  - local: '/java/j.gitlab-ci.yml'\n  - local: '/python/py.gitlab-ci.yml'\n\n```\n\n\nアプリケーション固有の各パイプラインファイルで「.java-common」もしくは「.python-common」という名前の非表示ジョブを作成します。これらのジョブは対応するアプリのディレクトリに変更が加えられた場合にのみ実行されます。デフォルトでは[非表示ジョブ](https://docs.gitlab.com/ee/ci/jobs/#hide-jobs)は実行されず、通常は特定のジョブ設定を再利用するために使用されます。各パイプラインは、非表示ジョブを拡張して変更がないか監視するファイルを定めたルールを継承してから、パイプラインジョブを開始します。\n\n\n`j.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\n.java-common:\n  rules:\n    - changes:\n      - '../java/*'\n\njava-build-job:\n  extends: .java-common\n  stage: build\n  script:\n    - echo \"Javaのビルド\"\n\njava-test-job:\n  extends: .java-common\n  stage: test\n  script:\n    - echo \"Javaのテスト\"\n\n```\n\n\n`py.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\n.python-common:\n  rules:\n    - changes:\n      - '../python/*'\n\npython-build-job:\n  extends: .python-common\n  stage: build\n  script:\n    - echo \"Pythonのビルド\"\n\npython-test-job:\n  extends: .python-common\n  stage: test\n  script:\n    - echo \"Pythonのテスト\"\n\n```\n\n\nこの方法にはいくつかのデメリットがあります。たとえば、確実にルールに準拠するために、YAMLファイル内の他のジョブ用にそれぞれジョブを拡張しなければならないため、多くの冗長なコードが発生し、ヒューマンエラーが起きやすくなります。さらに拡張されたジョブでは重複するキーは持てないため、各ジョブにおいて独自の`rules`ロジックを定義できません。定義しようとした場合、キーの競合が発生し、[キーの値はマージされません](https://docs.gitlab.com/ee/ci/yaml/index.html#extends)。\n\n\n結果として、`java/`が更新されると、j.gitlab-ci.ymlジョブを含むパイプラインが実行され、`python/`が更新されると、py.gitlab-ci.ymlジョブを含むパイプラインが実行されます。\n\n\n## 新たなアプローチ：パイプラインファイルを条件付きでインクルードする\n\n\n\u003C!-- 空白行 -->\n\n\u003Cfigure class=\"video_container\">\n  \u003Ciframe src=\"https://www.youtube.com/embed/6phvk8jioAo?si=y6ztZODvUtM-cHmZ\" frameborder=\"0\" allowfullscreen=\"true\"> \u003C/iframe>\n\u003C/figure>\n\n\u003C!-- 空白行 -->\n\n\nGitLab\n16.4では、[パイプライン向けに`rules:changes`を含む`include`](https://docs.gitlab.com/ee/ci/yaml/includes.html#include-with-ruleschanges)が導入されました。それまでは`include`に`rules:if`を使用することはできたものの、`rules:changes`は使用できませんでした。これは非常に強力なアップデートです。これにより、プロジェクトのパイプライン設定で`include`キーワードを使用するだけで、モノレポのルールを定義できるようになりました。\n\n\n新たな`.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n\ntop-level-job:\n  stage: build\n  script:\n    - echo \"Hello world...\"\n\ninclude:\n  - local: '/java/j.gitlab-ci.yml'\n    rules:\n      - changes:\n        - 'java/*'\n  - local: '/python/py.gitlab-ci.yml'\n    rules:\n      - changes:\n        - 'python/*'\n\n```\n\n\nその後、各アプリケーションのYAMLファイルにおいて非表示ジョブを何度も拡張せずに済むため、アプリケーションコードのビルドとテストだけに集中できます。これによって、より柔軟にジョブを定義できるようになり、エンジニアによるコードの書き直し作業が軽減します。\n\n\n新たな`j.gitlab-ci.yml`：\n\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\njava-build-job:\n  stage: build\n  script:\n    - echo \"Javaのビルド\"\n\njava-test-job:\n  stage: test\n  script:\n    - echo \"Javaのテスト\"\n\n```\n\n\n新たな`py.gitlab-ci.yml`：\n\n```\n\nstages:\n  - build\n  - test\n  - deploy\n\npython-build-job:\n  stage: build\n  script:\n    - echo \"Pythonのビルド\"\n\npython-test-job:\n  stage: test\n  script:\n    - echo \"Pythonのテスト\"\n\n```\n\n\n上記の設定により、JavaとPythonのディレクトリがそれぞれ変更された場合にのみ、JavaまたはPythonのジョブをインクルードするという同じタスクを実行できます。実装時に考慮すべき点は、[`changes`を使用すると、ジョブが予期せぬタイミングで実行される可能性がある](https://docs.gitlab.com/ee/ci/jobs/job_troubleshooting.html#jobs-or-pipelines-run-unexpectedly-when-using-changes)ということです。新しいブランチやタグをGitLabにプッシュすると、changesルールは必ず「true」と評価されるため、`rules:changes`の定義内容にかかわらず、ブランチへの最初のプッシュ時に、含まれるすべてのジョブが実行されます。こういった事態がなるべく起こらないようにするために、まずはフィーチャーブランチを作成してからマージリクエストを開いて開発を始めることをおすすめします。ブランチの作成時に最初にプッシュすることで、すべてのジョブが強制的に実行されるためです。\n\n\n総括すると、モノレポはGitLabおよびCI/CDと組み合わせて、戦略的に利用できる手法です。新たな`rules:changes`機能を含む`include`キーワードの登場により、GitLab\nCIにおいてモノレポを使う際に適用できる優れたベストプラクティスができました。モノレポの利用をお考えの場合は、ぜひGitlab\nUltimateの無料トライアルをご利用ください。\n\n\n## CI/CDに関するその他のリソース\n\n\n*\n[GitLabでモノレポを管理するためのヒント5選](https://about.gitlab.com/blog/tips-for-managing-monorepos-in-gitlab/)\n\n*\n[CI/CDについて素早く学ぶ方法](https://about.gitlab.com/blog/how-to-learn-ci-cd-fast/)\n","engineering",[23,24],"CI/CD","tutorial",{"slug":26,"featured":6,"template":27},"building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","BlogPost","content:ja-jp:blog:building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way.yml","yaml","Building A Gitlab Ci Cd Pipeline For A Monorepo The Easy Way","content","ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way.yml","ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","yml",{"_path":36,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"data":38,"_id":445,"_type":29,"title":446,"_source":31,"_file":447,"_stem":448,"_extension":34},"/shared/ja-jp/main-navigation","ja-jp",{"logo":39,"freeTrial":44,"sales":49,"login":54,"items":59,"search":389,"minimal":423,"duo":436},{"config":40},{"href":41,"dataGaName":42,"dataGaLocation":43},"/ja-jp/","gitlab logo","header",{"text":45,"config":46},"無料トライアルを開始",{"href":47,"dataGaName":48,"dataGaLocation":43},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":50,"config":51},"お問い合わせ",{"href":52,"dataGaName":53,"dataGaLocation":43},"/ja-jp/sales/","sales",{"text":55,"config":56},"サインイン",{"href":57,"dataGaName":58,"dataGaLocation":43},"https://gitlab.com/users/sign_in/","sign in",[60,104,201,206,311,371],{"text":61,"config":62,"cards":64,"footer":87},"プラットフォーム",{"dataNavLevelOne":63},"platform",[65,71,79],{"title":61,"description":66,"link":67},"最も包括的かつAIで強化されたDevSecOpsプラットフォーム",{"text":68,"config":69},"プラットフォームを詳しく見る",{"href":70,"dataGaName":63,"dataGaLocation":43},"/ja-jp/platform/",{"title":72,"description":73,"link":74},"GitLab Duo（AI）","開発のすべてのステージでAIを活用し、ソフトウェアをより迅速にビルド",{"text":75,"config":76},"GitLab Duoのご紹介",{"href":77,"dataGaName":78,"dataGaLocation":43},"/ja-jp/gitlab-duo/","gitlab duo ai",{"title":80,"description":81,"link":82},"GitLabが選ばれる理由","GitLabが大企業に選ばれる理由10選",{"text":83,"config":84},"詳細はこちら",{"href":85,"dataGaName":86,"dataGaLocation":43},"/ja-jp/why-gitlab/","why gitlab",{"title":88,"items":89},"利用を開始：",[90,95,100],{"text":91,"config":92},"プラットフォームエンジニアリング",{"href":93,"dataGaName":94,"dataGaLocation":43},"/ja-jp/solutions/platform-engineering/","platform engineering",{"text":96,"config":97},"開発者の経験",{"href":98,"dataGaName":99,"dataGaLocation":43},"/ja-jp/developer-experience/","Developer experience",{"text":101,"config":102},"MLOps",{"href":103,"dataGaName":101,"dataGaLocation":43},"/ja-jp/topics/devops/the-role-of-ai-in-devops/",{"text":105,"left":106,"config":107,"link":109,"lists":113,"footer":183},"製品",true,{"dataNavLevelOne":108},"solutions",{"text":110,"config":111},"すべてのソリューションを表示",{"href":112,"dataGaName":108,"dataGaLocation":43},"/ja-jp/solutions/",[114,139,161],{"title":115,"description":116,"link":117,"items":122},"自動化","CI/CDと自動化でデプロイを加速",{"config":118},{"icon":119,"href":120,"dataGaName":121,"dataGaLocation":43},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[123,126,130,135],{"text":23,"config":124},{"href":125,"dataGaLocation":43,"dataGaName":23},"/ja-jp/solutions/continuous-integration/",{"text":127,"config":128},"AIアシストによる開発",{"href":77,"dataGaLocation":43,"dataGaName":129},"AI assisted development",{"text":131,"config":132},"ソースコード管理",{"href":133,"dataGaLocation":43,"dataGaName":134},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":136,"config":137},"自動化されたソフトウェアデリバリー",{"href":120,"dataGaLocation":43,"dataGaName":138},"Automated software delivery",{"title":140,"description":141,"link":142,"items":147},"セキュリティ","セキュリティを損なうことなくコードをより迅速に完成",{"config":143},{"href":144,"dataGaName":145,"dataGaLocation":43,"icon":146},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[148,152,157],{"text":149,"config":150},"Application Security Testing",{"href":144,"dataGaName":151,"dataGaLocation":43},"Application security testing",{"text":153,"config":154},"ソフトウェアサプライチェーンの安全性",{"href":155,"dataGaLocation":43,"dataGaName":156},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":158,"config":159},"Software Compliance",{"href":160,"dataGaName":158,"dataGaLocation":43},"/ja-jp/solutions/software-compliance/",{"title":162,"link":163,"items":168},"測定",{"config":164},{"icon":165,"href":166,"dataGaName":167,"dataGaLocation":43},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[169,173,178],{"text":170,"config":171},"可視性と測定",{"href":166,"dataGaLocation":43,"dataGaName":172},"Visibility and Measurement",{"text":174,"config":175},"バリューストリーム管理",{"href":176,"dataGaLocation":43,"dataGaName":177},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":179,"config":180},"分析とインサイト",{"href":181,"dataGaLocation":43,"dataGaName":182},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":184,"items":185},"GitLabが活躍する場所",[186,191,196],{"text":187,"config":188},"Enterprise",{"href":189,"dataGaLocation":43,"dataGaName":190},"/ja-jp/enterprise/","enterprise",{"text":192,"config":193},"スモールビジネス",{"href":194,"dataGaLocation":43,"dataGaName":195},"/ja-jp/small-business/","small business",{"text":197,"config":198},"公共機関",{"href":199,"dataGaLocation":43,"dataGaName":200},"/ja-jp/solutions/public-sector/","public sector",{"text":202,"config":203},"価格",{"href":204,"dataGaName":205,"dataGaLocation":43,"dataNavLevelOne":205},"/ja-jp/pricing/","pricing",{"text":207,"config":208,"link":210,"lists":214,"feature":298},"関連リソース",{"dataNavLevelOne":209},"resources",{"text":211,"config":212},"すべてのリソースを表示",{"href":213,"dataGaName":209,"dataGaLocation":43},"/ja-jp/resources/",[215,248,270],{"title":216,"items":217},"はじめに",[218,223,228,233,238,243],{"text":219,"config":220},"インストール",{"href":221,"dataGaName":222,"dataGaLocation":43},"/ja-jp/install/","install",{"text":224,"config":225},"クイックスタートガイド",{"href":226,"dataGaName":227,"dataGaLocation":43},"/ja-jp/get-started/","quick setup checklists",{"text":229,"config":230},"学ぶ",{"href":231,"dataGaLocation":43,"dataGaName":232},"https://university.gitlab.com/","learn",{"text":234,"config":235},"製品ドキュメント",{"href":236,"dataGaName":237,"dataGaLocation":43},"https://docs.gitlab.com/","product documentation",{"text":239,"config":240},"ベストプラクティスビデオ",{"href":241,"dataGaName":242,"dataGaLocation":43},"/ja-jp/getting-started-videos/","best practice videos",{"text":244,"config":245},"インテグレーション",{"href":246,"dataGaName":247,"dataGaLocation":43},"/ja-jp/integrations/","integrations",{"title":249,"items":250},"検索する",[251,256,260,265],{"text":252,"config":253},"お客様成功事例",{"href":254,"dataGaName":255,"dataGaLocation":43},"/ja-jp/customers/","customer success stories",{"text":257,"config":258},"ブログ",{"href":259,"dataGaName":5,"dataGaLocation":43},"/ja-jp/blog/",{"text":261,"config":262},"リモート",{"href":263,"dataGaName":264,"dataGaLocation":43},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":266,"config":267},"TeamOps",{"href":268,"dataGaName":269,"dataGaLocation":43},"/ja-jp/teamops/","teamops",{"title":271,"items":272},"つなげる",[273,278,283,288,293],{"text":274,"config":275},"GitLabサービス",{"href":276,"dataGaName":277,"dataGaLocation":43},"/ja-jp/services/","services",{"text":279,"config":280},"コミュニティ",{"href":281,"dataGaName":282,"dataGaLocation":43},"/community/","community",{"text":284,"config":285},"フォーラム",{"href":286,"dataGaName":287,"dataGaLocation":43},"https://forum.gitlab.com/","forum",{"text":289,"config":290},"イベント",{"href":291,"dataGaName":292,"dataGaLocation":43},"/events/","events",{"text":294,"config":295},"パートナー",{"href":296,"dataGaName":297,"dataGaLocation":43},"/ja-jp/partners/","partners",{"backgroundColor":299,"textColor":300,"text":301,"image":302,"link":306},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":303,"config":304},"ソースプロモカード",{"src":305},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":307,"config":308},"最新情報を読む",{"href":309,"dataGaName":310,"dataGaLocation":43},"/ja-jp/the-source/","the source",{"text":312,"config":313,"lists":315},"会社情報",{"dataNavLevelOne":314},"company",[316],{"items":317},[318,323,329,331,336,341,346,351,356,361,366],{"text":319,"config":320},"GitLabについて",{"href":321,"dataGaName":322,"dataGaLocation":43},"/ja-jp/company/","about",{"text":324,"config":325,"footerGa":328},"採用情報",{"href":326,"dataGaName":327,"dataGaLocation":43},"/jobs/","jobs",{"dataGaName":327},{"text":289,"config":330},{"href":291,"dataGaName":292,"dataGaLocation":43},{"text":332,"config":333},"経営陣",{"href":334,"dataGaName":335,"dataGaLocation":43},"/company/team/e-group/","leadership",{"text":337,"config":338},"チーム",{"href":339,"dataGaName":340,"dataGaLocation":43},"/company/team/","team",{"text":342,"config":343},"ハンドブック",{"href":344,"dataGaName":345,"dataGaLocation":43},"https://handbook.gitlab.com/","handbook",{"text":347,"config":348},"投資家向け情報",{"href":349,"dataGaName":350,"dataGaLocation":43},"https://ir.gitlab.com/","investor relations",{"text":352,"config":353},"トラストセンター",{"href":354,"dataGaName":355,"dataGaLocation":43},"/ja-jp/security/","trust center",{"text":357,"config":358},"AI Transparency Center",{"href":359,"dataGaName":360,"dataGaLocation":43},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":362,"config":363},"ニュースレター",{"href":364,"dataGaName":365,"dataGaLocation":43},"/company/contact/","newsletter",{"text":367,"config":368},"プレス",{"href":369,"dataGaName":370,"dataGaLocation":43},"/press/","press",{"text":50,"config":372,"lists":373},{"dataNavLevelOne":314},[374],{"items":375},[376,379,384],{"text":50,"config":377},{"href":52,"dataGaName":378,"dataGaLocation":43},"talk to sales",{"text":380,"config":381},"サポートを受ける",{"href":382,"dataGaName":383,"dataGaLocation":43},"/support/","get help",{"text":385,"config":386},"カスタマーポータル",{"href":387,"dataGaName":388,"dataGaLocation":43},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":390,"login":391,"suggestions":398},"閉じる",{"text":392,"link":393},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":394,"config":395},"GitLab.com",{"href":57,"dataGaName":396,"dataGaLocation":397},"search login","search",{"text":399,"default":400},"提案",[401,404,409,411,415,419],{"text":72,"config":402},{"href":77,"dataGaName":403,"dataGaLocation":397},"GitLab Duo (AI)",{"text":405,"config":406},"コード提案（AI）",{"href":407,"dataGaName":408,"dataGaLocation":397},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":23,"config":410},{"href":125,"dataGaName":23,"dataGaLocation":397},{"text":412,"config":413},"GitLab on AWS",{"href":414,"dataGaName":412,"dataGaLocation":397},"/ja-jp/partners/technology-partners/aws/",{"text":416,"config":417},"GitLab on Google Cloud",{"href":418,"dataGaName":416,"dataGaLocation":397},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":420,"config":421},"GitLabを選ぶ理由",{"href":85,"dataGaName":422,"dataGaLocation":397},"Why GitLab?",{"freeTrial":424,"mobileIcon":428,"desktopIcon":433},{"text":45,"config":425},{"href":426,"dataGaName":48,"dataGaLocation":427},"https://gitlab.com/-/trials/new/","nav",{"altText":429,"config":430},"GitLabアイコン",{"src":431,"dataGaName":432,"dataGaLocation":427},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":429,"config":434},{"src":435,"dataGaName":432,"dataGaLocation":427},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"freeTrial":437,"mobileIcon":441,"desktopIcon":443},{"text":438,"config":439},"GitLab Duoの詳細について",{"href":77,"dataGaName":440,"dataGaLocation":427},"gitlab duo",{"altText":429,"config":442},{"src":431,"dataGaName":432,"dataGaLocation":427},{"altText":429,"config":444},{"src":435,"dataGaName":432,"dataGaLocation":427},"content:shared:ja-jp:main-navigation.yml","Main Navigation","shared/ja-jp/main-navigation.yml","shared/ja-jp/main-navigation",{"_path":450,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"title":451,"button":452,"config":457,"_id":459,"_type":29,"_source":31,"_file":460,"_stem":461,"_extension":34},"/shared/ja-jp/banner","GitLab Duo Agent Platformがパブリックベータ版で利用可能になりました！",{"text":453,"config":454},"ベータ版を試す",{"href":455,"dataGaName":456,"dataGaLocation":43},"/ja-jp/gitlab-duo/agent-platform/","duo banner",{"layout":458},"release","content:shared:ja-jp:banner.yml","shared/ja-jp/banner.yml","shared/ja-jp/banner",{"_path":463,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"data":464,"_id":668,"_type":29,"title":669,"_source":31,"_file":670,"_stem":671,"_extension":34},"/shared/ja-jp/main-footer",{"text":465,"source":466,"edit":472,"contribute":477,"config":482,"items":487,"minimal":660},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":467,"config":468},"ページのソースを表示",{"href":469,"dataGaName":470,"dataGaLocation":471},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":473,"config":474},"このページを編集",{"href":475,"dataGaName":476,"dataGaLocation":471},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":478,"config":479},"ご協力をお願いします",{"href":480,"dataGaName":481,"dataGaLocation":471},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":483,"facebook":484,"youtube":485,"linkedin":486},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[488,511,565,597,632],{"title":61,"links":489,"subMenu":494},[490],{"text":491,"config":492},"DevSecOpsプラットフォーム",{"href":70,"dataGaName":493,"dataGaLocation":471},"devsecops platform",[495],{"title":202,"links":496},[497,501,506],{"text":498,"config":499},"プランの表示",{"href":204,"dataGaName":500,"dataGaLocation":471},"view plans",{"text":502,"config":503},"Premiumを選ぶ理由",{"href":504,"dataGaName":505,"dataGaLocation":471},"/ja-jp/pricing/premium/","why premium",{"text":507,"config":508},"Ultimateを選ぶ理由",{"href":509,"dataGaName":510,"dataGaLocation":471},"/ja-jp/pricing/ultimate/","why ultimate",{"title":512,"links":513},"ソリューション",[514,519,522,524,529,534,538,541,544,549,551,553,555,560],{"text":515,"config":516},"デジタルトランスフォーメーション",{"href":517,"dataGaName":518,"dataGaLocation":471},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":520,"config":521},"セキュリティとコンプライアンス",{"href":144,"dataGaName":151,"dataGaLocation":471},{"text":136,"config":523},{"href":120,"dataGaName":121,"dataGaLocation":471},{"text":525,"config":526},"アジャイル開発",{"href":527,"dataGaName":528,"dataGaLocation":471},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":530,"config":531},"クラウドトランスフォーメーション",{"href":532,"dataGaName":533,"dataGaLocation":471},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":535,"config":536},"SCM",{"href":133,"dataGaName":537,"dataGaLocation":471},"source code management",{"text":23,"config":539},{"href":125,"dataGaName":540,"dataGaLocation":471},"continuous integration & delivery",{"text":174,"config":542},{"href":176,"dataGaName":543,"dataGaLocation":471},"value stream management",{"text":545,"config":546},"GitOps",{"href":547,"dataGaName":548,"dataGaLocation":471},"/ja-jp/solutions/gitops/","gitops",{"text":187,"config":550},{"href":189,"dataGaName":190,"dataGaLocation":471},{"text":192,"config":552},{"href":194,"dataGaName":195,"dataGaLocation":471},{"text":197,"config":554},{"href":199,"dataGaName":200,"dataGaLocation":471},{"text":556,"config":557},"教育",{"href":558,"dataGaName":559,"dataGaLocation":471},"/ja-jp/solutions/education/","education",{"text":561,"config":562},"金融サービス",{"href":563,"dataGaName":564,"dataGaLocation":471},"/ja-jp/solutions/finance/","financial services",{"title":207,"links":566},[567,569,571,573,576,578,581,583,585,587,589,591,593,595],{"text":219,"config":568},{"href":221,"dataGaName":222,"dataGaLocation":471},{"text":224,"config":570},{"href":226,"dataGaName":227,"dataGaLocation":471},{"text":229,"config":572},{"href":231,"dataGaName":232,"dataGaLocation":471},{"text":234,"config":574},{"href":236,"dataGaName":575,"dataGaLocation":471},"docs",{"text":257,"config":577},{"href":259,"dataGaName":5},{"text":579,"config":580},"お客様の成功事例",{"href":254,"dataGaLocation":471},{"text":252,"config":582},{"href":254,"dataGaName":255,"dataGaLocation":471},{"text":261,"config":584},{"href":263,"dataGaName":264,"dataGaLocation":471},{"text":274,"config":586},{"href":276,"dataGaName":277,"dataGaLocation":471},{"text":266,"config":588},{"href":268,"dataGaName":269,"dataGaLocation":471},{"text":279,"config":590},{"href":281,"dataGaName":282,"dataGaLocation":471},{"text":284,"config":592},{"href":286,"dataGaName":287,"dataGaLocation":471},{"text":289,"config":594},{"href":291,"dataGaName":292,"dataGaLocation":471},{"text":294,"config":596},{"href":296,"dataGaName":297,"dataGaLocation":471},{"title":598,"links":599},"Company",[600,602,604,606,608,610,612,616,621,623,625,627],{"text":319,"config":601},{"href":321,"dataGaName":314,"dataGaLocation":471},{"text":324,"config":603},{"href":326,"dataGaName":327,"dataGaLocation":471},{"text":332,"config":605},{"href":334,"dataGaName":335,"dataGaLocation":471},{"text":337,"config":607},{"href":339,"dataGaName":340,"dataGaLocation":471},{"text":342,"config":609},{"href":344,"dataGaName":345,"dataGaLocation":471},{"text":347,"config":611},{"href":349,"dataGaName":350,"dataGaLocation":471},{"text":613,"config":614},"Sustainability",{"href":615,"dataGaName":613,"dataGaLocation":471},"/sustainability/",{"text":617,"config":618},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":619,"dataGaName":620,"dataGaLocation":471},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":352,"config":622},{"href":354,"dataGaName":355,"dataGaLocation":471},{"text":362,"config":624},{"href":364,"dataGaName":365,"dataGaLocation":471},{"text":367,"config":626},{"href":369,"dataGaName":370,"dataGaLocation":471},{"text":628,"config":629},"現代奴隷制の透明性に関する声明",{"href":630,"dataGaName":631,"dataGaLocation":471},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":50,"links":633},[634,636,638,640,645,650,655],{"text":50,"config":635},{"href":52,"dataGaName":53,"dataGaLocation":471},{"text":380,"config":637},{"href":382,"dataGaName":383,"dataGaLocation":471},{"text":385,"config":639},{"href":387,"dataGaName":388,"dataGaLocation":471},{"text":641,"config":642},"ステータス",{"href":643,"dataGaName":644,"dataGaLocation":471},"https://status.gitlab.com/","status",{"text":646,"config":647},"利用規約",{"href":648,"dataGaName":649,"dataGaLocation":471},"/terms/","terms of use",{"text":651,"config":652},"プライバシーに関する声明",{"href":653,"dataGaName":654,"dataGaLocation":471},"/ja-jp/privacy/","privacy statement",{"text":656,"config":657},"Cookieの設定",{"dataGaName":658,"dataGaLocation":471,"id":659,"isOneTrustButton":106},"cookie preferences","ot-sdk-btn",{"items":661},[662,664,666],{"text":646,"config":663},{"href":648,"dataGaName":649,"dataGaLocation":471},{"text":651,"config":665},{"href":653,"dataGaName":654,"dataGaLocation":471},{"text":656,"config":667},{"dataGaName":658,"dataGaLocation":471,"id":659,"isOneTrustButton":106},"content:shared:ja-jp:main-footer.yml","Main Footer","shared/ja-jp/main-footer.yml","shared/ja-jp/main-footer",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":673,"content":674,"config":677,"_id":28,"_type":29,"title":30,"_source":31,"_file":32,"_stem":33,"_extension":34},{"title":9,"description":10,"ogTitle":9,"ogDescription":10,"noIndex":6,"ogImage":11,"ogUrl":12,"ogSiteName":13,"ogType":14,"canonicalUrls":12,"schema":15},{"title":9,"description":10,"authors":675,"heroImage":11,"date":19,"body":20,"category":21,"tags":676},[18],[23,24],{"slug":26,"featured":6,"template":27},[679],{"_path":680,"_dir":681,"_draft":6,"_partial":6,"_locale":7,"content":682,"config":686,"_id":688,"_type":29,"title":18,"_source":31,"_file":689,"_stem":690,"_extension":34},"/en-us/blog/authors/sam-morris","authors",{"name":18,"config":683},{"headshot":684,"ctfId":685},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660148/Blog/Author%20Headshots/sam_morris.png","6JTrhUIqSCU30Y9KZOaan8",{"template":687},"BlogAuthor","content:en-us:blog:authors:sam-morris.yml","en-us/blog/authors/sam-morris.yml","en-us/blog/authors/sam-morris",{"_path":692,"_dir":37,"_draft":6,"_partial":6,"_locale":7,"header":693,"eyebrow":694,"blurb":695,"button":696,"secondaryButton":700,"_id":702,"_type":29,"title":703,"_source":31,"_file":704,"_stem":705,"_extension":34},"/shared/ja-jp/next-steps","より優れたソフトウェアをより速く提供","フォーチュン100企業の50%以上がGitLabを信頼","インテリジェントなDevSecOpsプラットフォームで\n\n\nチームの可能性を広げましょう。\n",{"text":45,"config":697},{"href":698,"dataGaName":48,"dataGaLocation":699},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":50,"config":701},{"href":52,"dataGaName":53,"dataGaLocation":699},"content:shared:ja-jp:next-steps.yml","Next Steps","shared/ja-jp/next-steps.yml","shared/ja-jp/next-steps",1761814466907]