[{"data":1,"prerenderedAt":1761},["ShallowReactive",2],{"/ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way":3,"navigation-ja-jp":981,"banner-ja-jp":1410,"footer-ja-jp":1418,"blog-post-authors-ja-jp-Sam Morris":1660,"blog-related-posts-ja-jp-building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way":1675,"blog-promotions-ja-jp":1698,"next-steps-ja-jp":1752},{"id":4,"title":5,"authors":6,"body":8,"category":961,"date":962,"description":963,"extension":964,"externalUrl":965,"faq":965,"featured":966,"heroImage":967,"meta":968,"navigation":125,"path":969,"seo":970,"slug":974,"stem":975,"tags":976,"template":978,"updatedDate":979,"__hash__":980},"blogPosts/ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way.md","モノレポ用のGitLab CI/CDパイプラインを簡単に構築する方法",[7],"Sam Morris",{"type":9,"value":10,"toc":955},"minimark",[11,27,32,35,46,49,52,67,72,201,210,215,369,374,516,529,540,544,557,585,590,717,720,724,813,817,906,920,929,933,951],[12,13,14,20,21,26],"p",{},[15,16,19],"a",{"href":17,"rel":18},"https://about.gitlab.com/ja-jp/blog/what-is-monorepo/",[],"モノレポ","を使用すると、単一のリポジトリで複数のアプリケーションのコードをホストできます。GitLabでこれを実現しようとすると、プロジェクト内の各ディレクトリに異なるアプリケーションのソースコードを配置することになります。この方法だとコードの保存場所をバージョン管理できるものの、GitLabの",[15,22,25],{"href":23,"rel":24},"https://about.gitlab.com/ja-jp/topics/ci-cd/",[],"CI/CD","パイプライン機能を最大限に活用するのは困難でした。しかしながら、新たな方法が登場しました！",[28,29,31],"h2",{"id":30},"モノレポにおけるcicdの理想的な実例","モノレポにおけるCI/CDの理想的な実例",[12,33,34],{},"通常、リポジトリには複数のアプリケーションのコードが格納されているため、複数のパイプライン設定が必要となります。たとえば、.NETアプリケーションとSpringアプリケーションがあるプロジェクトの場合、アプリケーションごとに異なるビルドジョブとテストジョブを実施している可能性があります。この場合、パイプラインを完全に切り離し、特定のアプリケーションのソースコードの変更が発生した場合のみ、各パイプラインを実行するのが理想的です。",[12,36,37,38,42,43,45],{},"このようなプロセスを技術的に実現するには、特定のディレクトリの変更に基づいて特定のYAMLファイルをインクルードする、プロジェクトレベルのパイプライン設定ファイル",[39,40,41],"code",{},".gitlab-ci.yml","を用意します。",[39,44,41],{},"パイプラインは、コードに加えられた変更に基づき、適切なパイプラインをトリガーするコントロールプレーンとして機能します。",[28,47,48],{"id":48},"従来のアプローチ",[12,50,51],{},"GitLab 16.4より前のバージョンでは、プロジェクト内のディレクトリまたはファイルへの変更に基づいてYAMLファイルをインクルードすることはできませんでした。ただし、回避策を使えばこの機能を実現することは可能でした。",[12,53,54,55,58,59,62,63,66],{},"これからご紹介する",[15,56,19],{"href":17,"rel":57},[],"プロジェクトの例では、異なるアプリケーション用に2つのディレクトリがあるとします。それぞれJavaアプリ用の",[39,60,61],{},"java","ディレクトリとPythonアプリ用の",[39,64,65],{},"python","ディレクトリがあります。それぞれのディレクトリには、各アプリをビルドするためのアプリケーション固有のYAMLファイルが含まれています。シンプルにプロジェクトのパイプラインファイルに両アプリケーションのパイプラインファイルをインクルードし、それらのファイルで直接ロジック処理を行います。",[12,68,69,71],{},[39,70,41],{},"：",[73,74,79],"pre",{"className":75,"code":76,"language":77,"meta":78,"style":78},"language-yaml shiki shiki-themes github-light","stages:\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","yaml","",[39,80,81,94,104,112,120,127,135,146,154,163,168,176,189],{"__ignoreMap":78},[82,83,86,90],"span",{"class":84,"line":85},"line",1,[82,87,89],{"class":88},"shJU0","stages",[82,91,93],{"class":92},"sgsFI",":\n",[82,95,97,100],{"class":84,"line":96},2,[82,98,99],{"class":92},"  - ",[82,101,103],{"class":102},"sYBdl","build\n",[82,105,107,109],{"class":84,"line":106},3,[82,108,99],{"class":92},[82,110,111],{"class":102},"test\n",[82,113,115,117],{"class":84,"line":114},4,[82,116,99],{"class":92},[82,118,119],{"class":102},"deploy\n",[82,121,123],{"class":84,"line":122},5,[82,124,126],{"emptyLinePlaceholder":125},true,"\n",[82,128,130,133],{"class":84,"line":129},6,[82,131,132],{"class":88},"top-level-job",[82,134,93],{"class":92},[82,136,138,141,144],{"class":84,"line":137},7,[82,139,140],{"class":88},"  stage",[82,142,143],{"class":92},": ",[82,145,103],{"class":102},[82,147,149,152],{"class":84,"line":148},8,[82,150,151],{"class":88},"  script",[82,153,93],{"class":92},[82,155,157,160],{"class":84,"line":156},9,[82,158,159],{"class":92},"    - ",[82,161,162],{"class":102},"echo \"Hello world...\"\n",[82,164,166],{"class":84,"line":165},10,[82,167,126],{"emptyLinePlaceholder":125},[82,169,171,174],{"class":84,"line":170},11,[82,172,173],{"class":88},"include",[82,175,93],{"class":92},[82,177,179,181,184,186],{"class":84,"line":178},12,[82,180,99],{"class":92},[82,182,183],{"class":88},"local",[82,185,143],{"class":92},[82,187,188],{"class":102},"'/java/j.gitlab-ci.yml'\n",[82,190,192,194,196,198],{"class":84,"line":191},13,[82,193,99],{"class":92},[82,195,183],{"class":88},[82,197,143],{"class":92},[82,199,200],{"class":102},"'/python/py.gitlab-ci.yml'\n",[12,202,203,204,209],{},"アプリケーション固有の各パイプラインファイルで「.java-common」もしくは「.python-common」という名前の非表示ジョブを作成します。これらのジョブは対応するアプリのディレクトリに変更が加えられた場合にのみ実行されます。デフォルトでは",[15,205,208],{"href":206,"rel":207},"https://docs.gitlab.com/ja-jp/ci/jobs/#hide-jobs",[],"非表示ジョブ","は実行されず、通常は特定のジョブ設定を再利用するために使用されます。各パイプラインは、非表示ジョブを拡張して変更がないか監視するファイルを定めたルールを継承してから、パイプラインジョブを開始します。",[12,211,212,71],{},[39,213,214],{},"j.gitlab-ci.yml",[73,216,218],{"className":75,"code":217,"language":77,"meta":78,"style":78},"stages:\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",[39,219,220,226,232,238,244,248,255,262,271,279,283,290,300,308,315,323,328,336,345,354,361],{"__ignoreMap":78},[82,221,222,224],{"class":84,"line":85},[82,223,89],{"class":88},[82,225,93],{"class":92},[82,227,228,230],{"class":84,"line":96},[82,229,99],{"class":92},[82,231,103],{"class":102},[82,233,234,236],{"class":84,"line":106},[82,235,99],{"class":92},[82,237,111],{"class":102},[82,239,240,242],{"class":84,"line":114},[82,241,99],{"class":92},[82,243,119],{"class":102},[82,245,246],{"class":84,"line":122},[82,247,126],{"emptyLinePlaceholder":125},[82,249,250,253],{"class":84,"line":129},[82,251,252],{"class":88},".java-common",[82,254,93],{"class":92},[82,256,257,260],{"class":84,"line":137},[82,258,259],{"class":88},"  rules",[82,261,93],{"class":92},[82,263,264,266,269],{"class":84,"line":148},[82,265,159],{"class":92},[82,267,268],{"class":88},"changes",[82,270,93],{"class":92},[82,272,273,276],{"class":84,"line":156},[82,274,275],{"class":92},"      - ",[82,277,278],{"class":102},"'../java/*'\n",[82,280,281],{"class":84,"line":165},[82,282,126],{"emptyLinePlaceholder":125},[82,284,285,288],{"class":84,"line":170},[82,286,287],{"class":88},"java-build-job",[82,289,93],{"class":92},[82,291,292,295,297],{"class":84,"line":178},[82,293,294],{"class":88},"  extends",[82,296,143],{"class":92},[82,298,299],{"class":102},".java-common\n",[82,301,302,304,306],{"class":84,"line":191},[82,303,140],{"class":88},[82,305,143],{"class":92},[82,307,103],{"class":102},[82,309,311,313],{"class":84,"line":310},14,[82,312,151],{"class":88},[82,314,93],{"class":92},[82,316,318,320],{"class":84,"line":317},15,[82,319,159],{"class":92},[82,321,322],{"class":102},"echo \"Javaのビルド\"\n",[82,324,326],{"class":84,"line":325},16,[82,327,126],{"emptyLinePlaceholder":125},[82,329,331,334],{"class":84,"line":330},17,[82,332,333],{"class":88},"java-test-job",[82,335,93],{"class":92},[82,337,339,341,343],{"class":84,"line":338},18,[82,340,294],{"class":88},[82,342,143],{"class":92},[82,344,299],{"class":102},[82,346,348,350,352],{"class":84,"line":347},19,[82,349,140],{"class":88},[82,351,143],{"class":92},[82,353,111],{"class":102},[82,355,357,359],{"class":84,"line":356},20,[82,358,151],{"class":88},[82,360,93],{"class":92},[82,362,364,366],{"class":84,"line":363},21,[82,365,159],{"class":92},[82,367,368],{"class":102},"echo \"Javaのテスト\"\n",[12,370,371,71],{},[39,372,373],{},"py.gitlab-ci.yml",[73,375,377],{"className":75,"code":376,"language":77,"meta":78,"style":78},"stages:\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",[39,378,379,385,391,397,403,407,414,420,428,435,439,446,455,463,469,476,480,487,495,503,509],{"__ignoreMap":78},[82,380,381,383],{"class":84,"line":85},[82,382,89],{"class":88},[82,384,93],{"class":92},[82,386,387,389],{"class":84,"line":96},[82,388,99],{"class":92},[82,390,103],{"class":102},[82,392,393,395],{"class":84,"line":106},[82,394,99],{"class":92},[82,396,111],{"class":102},[82,398,399,401],{"class":84,"line":114},[82,400,99],{"class":92},[82,402,119],{"class":102},[82,404,405],{"class":84,"line":122},[82,406,126],{"emptyLinePlaceholder":125},[82,408,409,412],{"class":84,"line":129},[82,410,411],{"class":88},".python-common",[82,413,93],{"class":92},[82,415,416,418],{"class":84,"line":137},[82,417,259],{"class":88},[82,419,93],{"class":92},[82,421,422,424,426],{"class":84,"line":148},[82,423,159],{"class":92},[82,425,268],{"class":88},[82,427,93],{"class":92},[82,429,430,432],{"class":84,"line":156},[82,431,275],{"class":92},[82,433,434],{"class":102},"'../python/*'\n",[82,436,437],{"class":84,"line":165},[82,438,126],{"emptyLinePlaceholder":125},[82,440,441,444],{"class":84,"line":170},[82,442,443],{"class":88},"python-build-job",[82,445,93],{"class":92},[82,447,448,450,452],{"class":84,"line":178},[82,449,294],{"class":88},[82,451,143],{"class":92},[82,453,454],{"class":102},".python-common\n",[82,456,457,459,461],{"class":84,"line":191},[82,458,140],{"class":88},[82,460,143],{"class":92},[82,462,103],{"class":102},[82,464,465,467],{"class":84,"line":310},[82,466,151],{"class":88},[82,468,93],{"class":92},[82,470,471,473],{"class":84,"line":317},[82,472,159],{"class":92},[82,474,475],{"class":102},"echo \"Pythonのビルド\"\n",[82,477,478],{"class":84,"line":325},[82,479,126],{"emptyLinePlaceholder":125},[82,481,482,485],{"class":84,"line":330},[82,483,484],{"class":88},"python-test-job",[82,486,93],{"class":92},[82,488,489,491,493],{"class":84,"line":338},[82,490,294],{"class":88},[82,492,143],{"class":92},[82,494,454],{"class":102},[82,496,497,499,501],{"class":84,"line":347},[82,498,140],{"class":88},[82,500,143],{"class":92},[82,502,111],{"class":102},[82,504,505,507],{"class":84,"line":356},[82,506,151],{"class":88},[82,508,93],{"class":92},[82,510,511,513],{"class":84,"line":363},[82,512,159],{"class":92},[82,514,515],{"class":102},"echo \"Pythonのテスト\"\n",[12,517,518,519,522,523,528],{},"この方法にはいくつかのデメリットがあります。たとえば、確実にルールに準拠するために、YAMLファイル内の他のジョブ用にそれぞれジョブを拡張しなければならないため、多くの冗長なコードが発生し、ヒューマンエラーが起きやすくなります。さらに拡張されたジョブでは重複するキーは持てないため、各ジョブにおいて独自の",[39,520,521],{},"rules","ロジックを定義できません。定義しようとした場合、キーの競合が発生し、",[15,524,527],{"href":525,"rel":526},"https://docs.gitlab.com/ja-jp/ci/yaml/#extends",[],"キーの値はマージされません","。",[12,530,531,532,535,536,539],{},"結果として、",[39,533,534],{},"java/","が更新されると、j.gitlab-ci.ymlジョブを含むパイプラインが実行され、",[39,537,538],{},"python/","が更新されると、py.gitlab-ci.ymlジョブを含むパイプラインが実行されます。",[28,541,543],{"id":542},"新たなアプローチパイプラインファイルを条件付きでインクルードする","新たなアプローチ：パイプラインファイルを条件付きでインクルードする",[545,546,549,550],"figure",{"className":547},[548],"video_container","\n  ",[551,552,556],"iframe",{"src":553,"frameBorder":554,"allowFullScreen":555},"https://www.youtube.com/embed/6phvk8jioAo?si=y6ztZODvUtM-cHmZ","0","true"," ",[12,558,559,560,571,572,574,575,578,579,581,582,584],{},"GitLab 16.4では、",[15,561,564,565,568,569],{"href":562,"rel":563},"https://docs.gitlab.com/ja-jp/ci/yaml/includes/#include-with-ruleschanges",[],"パイプライン向けに",[39,566,567],{},"rules:changes","を含む",[39,570,173],{},"が導入されました。それまでは",[39,573,173],{},"に",[39,576,577],{},"rules:if","を使用することはできたものの、",[39,580,567],{},"は使用できませんでした。これは非常に強力なアップデートです。これにより、プロジェクトのパイプライン設定で",[39,583,173],{},"キーワードを使用するだけで、モノレポのルールを定義できるようになりました。",[12,586,587,588,71],{},"新たな",[39,589,41],{},[73,591,593],{"className":75,"code":592,"language":77,"meta":78,"style":78},"stages:\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",[39,594,595,601,607,613,617,623,631,637,643,647,653,663,670,678,686,696,702,710],{"__ignoreMap":78},[82,596,597,599],{"class":84,"line":85},[82,598,89],{"class":88},[82,600,93],{"class":92},[82,602,603,605],{"class":84,"line":96},[82,604,99],{"class":92},[82,606,103],{"class":102},[82,608,609,611],{"class":84,"line":106},[82,610,99],{"class":92},[82,612,111],{"class":102},[82,614,615],{"class":84,"line":114},[82,616,126],{"emptyLinePlaceholder":125},[82,618,619,621],{"class":84,"line":122},[82,620,132],{"class":88},[82,622,93],{"class":92},[82,624,625,627,629],{"class":84,"line":129},[82,626,140],{"class":88},[82,628,143],{"class":92},[82,630,103],{"class":102},[82,632,633,635],{"class":84,"line":137},[82,634,151],{"class":88},[82,636,93],{"class":92},[82,638,639,641],{"class":84,"line":148},[82,640,159],{"class":92},[82,642,162],{"class":102},[82,644,645],{"class":84,"line":156},[82,646,126],{"emptyLinePlaceholder":125},[82,648,649,651],{"class":84,"line":165},[82,650,173],{"class":88},[82,652,93],{"class":92},[82,654,655,657,659,661],{"class":84,"line":170},[82,656,99],{"class":92},[82,658,183],{"class":88},[82,660,143],{"class":92},[82,662,188],{"class":102},[82,664,665,668],{"class":84,"line":178},[82,666,667],{"class":88},"    rules",[82,669,93],{"class":92},[82,671,672,674,676],{"class":84,"line":191},[82,673,275],{"class":92},[82,675,268],{"class":88},[82,677,93],{"class":92},[82,679,680,683],{"class":84,"line":310},[82,681,682],{"class":92},"        - ",[82,684,685],{"class":102},"'java/*'\n",[82,687,688,690,692,694],{"class":84,"line":317},[82,689,99],{"class":92},[82,691,183],{"class":88},[82,693,143],{"class":92},[82,695,200],{"class":102},[82,697,698,700],{"class":84,"line":325},[82,699,667],{"class":88},[82,701,93],{"class":92},[82,703,704,706,708],{"class":84,"line":330},[82,705,275],{"class":92},[82,707,268],{"class":88},[82,709,93],{"class":92},[82,711,712,714],{"class":84,"line":338},[82,713,682],{"class":92},[82,715,716],{"class":102},"'python/*'\n",[12,718,719],{},"その後、各アプリケーションのYAMLファイルにおいて非表示ジョブを何度も拡張せずに済むため、アプリケーションコードのビルドとテストだけに集中できます。これによって、より柔軟にジョブを定義できるようになり、エンジニアによるコードの書き直し作業が軽減します。",[12,721,587,722,71],{},[39,723,214],{},[73,725,727],{"className":75,"code":726,"language":77,"meta":78,"style":78},"stages:\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",[39,728,729,735,741,747,753,757,763,771,777,783,787,793,801,807],{"__ignoreMap":78},[82,730,731,733],{"class":84,"line":85},[82,732,89],{"class":88},[82,734,93],{"class":92},[82,736,737,739],{"class":84,"line":96},[82,738,99],{"class":92},[82,740,103],{"class":102},[82,742,743,745],{"class":84,"line":106},[82,744,99],{"class":92},[82,746,111],{"class":102},[82,748,749,751],{"class":84,"line":114},[82,750,99],{"class":92},[82,752,119],{"class":102},[82,754,755],{"class":84,"line":122},[82,756,126],{"emptyLinePlaceholder":125},[82,758,759,761],{"class":84,"line":129},[82,760,287],{"class":88},[82,762,93],{"class":92},[82,764,765,767,769],{"class":84,"line":137},[82,766,140],{"class":88},[82,768,143],{"class":92},[82,770,103],{"class":102},[82,772,773,775],{"class":84,"line":148},[82,774,151],{"class":88},[82,776,93],{"class":92},[82,778,779,781],{"class":84,"line":156},[82,780,159],{"class":92},[82,782,322],{"class":102},[82,784,785],{"class":84,"line":165},[82,786,126],{"emptyLinePlaceholder":125},[82,788,789,791],{"class":84,"line":170},[82,790,333],{"class":88},[82,792,93],{"class":92},[82,794,795,797,799],{"class":84,"line":178},[82,796,140],{"class":88},[82,798,143],{"class":92},[82,800,111],{"class":102},[82,802,803,805],{"class":84,"line":191},[82,804,151],{"class":88},[82,806,93],{"class":92},[82,808,809,811],{"class":84,"line":310},[82,810,159],{"class":92},[82,812,368],{"class":102},[12,814,587,815,71],{},[39,816,373],{},[73,818,820],{"className":75,"code":819,"language":77,"meta":78,"style":78},"stages:\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",[39,821,822,828,834,840,846,850,856,864,870,876,880,886,894,900],{"__ignoreMap":78},[82,823,824,826],{"class":84,"line":85},[82,825,89],{"class":88},[82,827,93],{"class":92},[82,829,830,832],{"class":84,"line":96},[82,831,99],{"class":92},[82,833,103],{"class":102},[82,835,836,838],{"class":84,"line":106},[82,837,99],{"class":92},[82,839,111],{"class":102},[82,841,842,844],{"class":84,"line":114},[82,843,99],{"class":92},[82,845,119],{"class":102},[82,847,848],{"class":84,"line":122},[82,849,126],{"emptyLinePlaceholder":125},[82,851,852,854],{"class":84,"line":129},[82,853,443],{"class":88},[82,855,93],{"class":92},[82,857,858,860,862],{"class":84,"line":137},[82,859,140],{"class":88},[82,861,143],{"class":92},[82,863,103],{"class":102},[82,865,866,868],{"class":84,"line":148},[82,867,151],{"class":88},[82,869,93],{"class":92},[82,871,872,874],{"class":84,"line":156},[82,873,159],{"class":92},[82,875,475],{"class":102},[82,877,878],{"class":84,"line":165},[82,879,126],{"emptyLinePlaceholder":125},[82,881,882,884],{"class":84,"line":170},[82,883,484],{"class":88},[82,885,93],{"class":92},[82,887,888,890,892],{"class":84,"line":178},[82,889,140],{"class":88},[82,891,143],{"class":92},[82,893,111],{"class":102},[82,895,896,898],{"class":84,"line":191},[82,897,151],{"class":88},[82,899,93],{"class":92},[82,901,902,904],{"class":84,"line":310},[82,903,159],{"class":92},[82,905,515],{"class":102},[12,907,908,909,916,917,919],{},"上記の設定により、JavaとPythonのディレクトリがそれぞれ変更された場合にのみ、JavaまたはPythonのジョブをインクルードするという同じタスクを実行できます。実装時に考慮すべき点は、",[15,910,913,915],{"href":911,"rel":912},"https://docs.gitlab.com/ja-jp/ci/jobs/job_troubleshooting/#jobs-or-pipelines-run-unexpectedly-when-using-changes",[],[39,914,268],{},"を使用すると、ジョブが予期せぬタイミングで実行される可能性がある","ということです。新しいブランチやタグをGitLabにプッシュすると、changesルールは必ず「true」と評価されるため、",[39,918,567],{},"の定義内容にかかわらず、ブランチへの最初のプッシュ時に、含まれるすべてのジョブが実行されます。こういった事態がなるべく起こらないようにするために、まずはフィーチャーブランチを作成してからマージリクエストを開いて開発を始めることをおすすめします。ブランチの作成時に最初にプッシュすることで、すべてのジョブが強制的に実行されるためです。",[12,921,922,923,925,926,928],{},"総括すると、モノレポはGitLabおよびCI/CDと組み合わせて、戦略的に利用できる手法です。新たな",[39,924,567],{},"機能を含む",[39,927,173],{},"キーワードの登場により、GitLab CIにおいてモノレポを使う際に適用できる優れたベストプラクティスができました。モノレポの利用をお考えの場合は、ぜひGitlab Ultimateの無料トライアルをご利用ください。",[28,930,932],{"id":931},"cicdに関するその他のリソース","CI/CDに関するその他のリソース",[934,935,936,944],"ul",{},[937,938,939],"li",{},[15,940,943],{"href":941,"rel":942},"https://about.gitlab.com/blog/tips-for-managing-monorepos-in-gitlab/",[],"GitLabでモノレポを管理するためのヒント5選",[937,945,946],{},[15,947,950],{"href":948,"rel":949},"https://about.gitlab.com/blog/how-to-learn-ci-cd-fast/",[],"CI/CDについて素早く学ぶ方法",[952,953,954],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":78,"searchDepth":96,"depth":96,"links":956},[957,958,959,960],{"id":30,"depth":96,"text":31},{"id":48,"depth":96,"text":48},{"id":542,"depth":96,"text":543},{"id":931,"depth":96,"text":932},"engineering","2024-07-30","単一のリポジトリで複数のアプリケーションをホストするモノレポ用に、GitLab CI/CDパイプラインを作成する方法についてご紹介します。","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660151/Blog/Hero%20Images/blog-image-template-1800x945__26_.png",{},"/ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way",{"ogTitle":5,"ogImage":967,"ogDescription":963,"ogSiteName":971,"noIndex":966,"ogType":972,"ogUrl":973,"title":5,"canonicalUrls":973,"description":963},"https://about.gitlab.com","article","https://about.gitlab.com/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","ja-jp/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way",[25,977],"tutorial","BlogPost","2026-06-12","m_JSAdxCB0YtxP2xJSfFXIhyig-EkuWzxPqQ8-nsKt8",{"logo":982,"freeTrial":987,"sales":992,"login":997,"items":1002,"search":1330,"minimal":1363,"duo":1380,"switchNav":1389,"pricingDeployment":1400},{"config":983},{"href":984,"dataGaName":985,"dataGaLocation":986},"/ja-jp/","gitlab logo","header",{"text":988,"config":989},"無料トライアルを開始",{"href":990,"dataGaName":991,"dataGaLocation":986},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":993,"config":994},"デモをリクエスト",{"href":995,"dataGaName":996,"dataGaLocation":986},"/ja-jp/sales/?contact-topic=request-demo","sales",{"text":998,"config":999},"サインイン",{"href":1000,"dataGaName":1001,"dataGaLocation":986},"https://gitlab.com/users/sign_in/","sign in",[1003,1032,1133,1138,1252,1308],{"text":1004,"config":1005,"menu":1007},"プラットフォーム",{"dataNavLevelOne":1006},"platform",{"type":1008,"columns":1009},"cards",[1010,1016,1024],{"title":1004,"description":1011,"link":1012},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":1013,"config":1014},"プラットフォームの詳細はこちら",{"href":1015,"dataGaName":1006,"dataGaLocation":986},"/ja-jp/platform/",{"title":1017,"description":1018,"link":1019},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":1020,"config":1021},"GitLab Duoのご紹介",{"href":1022,"dataGaName":1023,"dataGaLocation":986},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1025,"description":1026,"link":1027},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":1028,"config":1029},"詳細はこちら",{"href":1030,"dataGaName":1031,"dataGaLocation":986},"/ja-jp/why-gitlab/","why gitlab",{"text":1033,"left":125,"config":1034,"menu":1036},"製品",{"dataNavLevelOne":1035},"solutions",{"type":1037,"link":1038,"columns":1042,"feature":1112},"lists",{"text":1039,"config":1040},"すべてのソリューションを表示",{"href":1041,"dataGaName":1035,"dataGaLocation":986},"/ja-jp/solutions/",[1043,1067,1090],{"title":1044,"description":1045,"link":1046,"items":1051},"自動化","CI/CDと自動化でデプロイを加速",{"config":1047},{"icon":1048,"href":1049,"dataGaName":1050,"dataGaLocation":986},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[1052,1055,1058,1063],{"text":25,"config":1053},{"href":1054,"dataGaLocation":986,"dataGaName":25},"/ja-jp/solutions/continuous-integration/",{"text":1017,"config":1056},{"href":1022,"dataGaLocation":986,"dataGaName":1057},"gitlab duo agent platform - product menu",{"text":1059,"config":1060},"ソースコード管理",{"href":1061,"dataGaLocation":986,"dataGaName":1062},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":1064,"config":1065},"自動化されたソフトウェアデリバリー",{"href":1049,"dataGaLocation":986,"dataGaName":1066},"Automated software delivery",{"title":1068,"description":1069,"link":1070,"items":1075},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":1071},{"href":1072,"dataGaName":1073,"dataGaLocation":986,"icon":1074},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1076,1080,1085],{"text":1077,"config":1078},"アプリケーションセキュリティテスト",{"href":1072,"dataGaName":1079,"dataGaLocation":986},"Application security testing",{"text":1081,"config":1082},"ソフトウェアサプライチェーンセキュリティ",{"href":1083,"dataGaLocation":986,"dataGaName":1084},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":1086,"config":1087},"ソフトウェアコンプライアンス",{"href":1088,"dataGaName":1089,"dataGaLocation":986},"/ja-jp/solutions/software-compliance/","software compliance",{"title":1091,"link":1092,"items":1097},"測定",{"config":1093},{"icon":1094,"href":1095,"dataGaName":1096,"dataGaLocation":986},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[1098,1102,1107],{"text":1099,"config":1100},"可視性と測定",{"href":1095,"dataGaLocation":986,"dataGaName":1101},"Visibility and Measurement",{"text":1103,"config":1104},"バリューストリーム管理",{"href":1105,"dataGaLocation":986,"dataGaName":1106},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":1108,"config":1109},"分析とインサイト",{"href":1110,"dataGaLocation":986,"dataGaName":1111},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":1113,"type":1037,"items":1114},"GitLabが活躍する場所",[1115,1121,1127],{"text":1116,"config":1117},"大企業",{"icon":1118,"href":1119,"dataGaLocation":986,"dataGaName":1120},"Building","/ja-jp/enterprise/","enterprise",{"text":1122,"config":1123},"スモールビジネス",{"icon":1124,"href":1125,"dataGaLocation":986,"dataGaName":1126},"Work","/ja-jp/small-business/","small business",{"text":1128,"config":1129},"公共部門",{"icon":1130,"href":1131,"dataGaLocation":986,"dataGaName":1132},"Organization","/ja-jp/solutions/public-sector/","public sector",{"text":1134,"config":1135},"価格",{"href":1136,"dataGaName":1137,"dataGaLocation":986,"dataNavLevelOne":1137},"/ja-jp/pricing/","pricing",{"text":1139,"config":1140,"menu":1142},"関連リソース",{"dataNavLevelOne":1141},"resources",{"type":1037,"link":1143,"columns":1147,"feature":1241},{"text":1144,"config":1145},"すべてのリソースを表示",{"href":1146,"dataGaName":1141,"dataGaLocation":986},"/ja-jp/resources/",[1148,1181,1208],{"title":1149,"items":1150},"はじめに",[1151,1156,1161,1166,1171,1176],{"text":1152,"config":1153},"インストール",{"href":1154,"dataGaName":1155,"dataGaLocation":986},"/ja-jp/install/","install",{"text":1157,"config":1158},"クイックスタートガイド",{"href":1159,"dataGaName":1160,"dataGaLocation":986},"/ja-jp/get-started/","quick setup checklists",{"text":1162,"config":1163},"学ぶ",{"href":1164,"dataGaLocation":986,"dataGaName":1165},"https://university.gitlab.com/","learn",{"text":1167,"config":1168},"製品ドキュメント",{"href":1169,"dataGaName":1170,"dataGaLocation":986},"https://docs.gitlab.com/ja-jp/","product documentation",{"text":1172,"config":1173},"ベストプラクティスビデオ",{"href":1174,"dataGaName":1175,"dataGaLocation":986},"/ja-jp/getting-started-videos/","best practice videos",{"text":1177,"config":1178},"インテグレーション",{"href":1179,"dataGaName":1180,"dataGaLocation":986},"/ja-jp/integrations/","integrations",{"title":1182,"items":1183},"検索する",[1184,1189,1194,1199,1203],{"text":1185,"config":1186},"お客様成功事例",{"href":1187,"dataGaName":1188,"dataGaLocation":986},"/ja-jp/customers/","customer success stories",{"text":1190,"config":1191},"ブログ",{"href":1192,"dataGaName":1193,"dataGaLocation":986},"/ja-jp/blog/","blog",{"text":1195,"config":1196},"Demo Hub",{"href":1197,"dataGaName":1198,"dataGaLocation":986},"/ja-jp/demo-hub/","demo hub",{"text":1200,"config":1201},"The Source",{"href":1202,"dataGaName":1193,"dataGaLocation":986},"/ja-jp/the-source/",{"text":1204,"config":1205},"リモート",{"href":1206,"dataGaName":1207,"dataGaLocation":986},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1209,"items":1210},"つなげる",[1211,1216,1221,1226,1231,1236],{"text":1212,"config":1213},"GitLabサービス",{"href":1214,"dataGaName":1215,"dataGaLocation":986},"/ja-jp/services/","services",{"text":1217,"config":1218},"コントリビュート",{"href":1219,"dataGaName":1220,"dataGaLocation":986},"https://contributors.gitlab.com","contribute",{"text":1222,"config":1223},"コミュニティ",{"href":1224,"dataGaName":1225,"dataGaLocation":986},"/community/","community",{"text":1227,"config":1228},"フォーラム",{"href":1229,"dataGaName":1230,"dataGaLocation":986},"https://forum.gitlab.com/","forum",{"text":1232,"config":1233},"イベント",{"href":1234,"dataGaName":1235,"dataGaLocation":986},"/events/","events",{"text":1237,"config":1238},"パートナー",{"href":1239,"dataGaName":1240,"dataGaLocation":986},"/ja-jp/partners/","partners",{"config":1242,"title":1245,"text":1246,"link":1247},{"background":1243,"textColor":1244},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","GitLabの最新情報","最新の機能と改善点に関する情報をお届けします。",{"text":1248,"config":1249},"最新情報を読む",{"href":1250,"dataGaName":1251,"dataGaLocation":986},"/ja-jp/whats-new/","whats new",{"text":1253,"config":1254,"menu":1256},"企業情報",{"dataNavLevelOne":1255},"company",{"type":1037,"columns":1257},[1258],{"items":1259},[1260,1265,1271,1273,1278,1283,1288,1293,1298,1303],{"text":1261,"config":1262},"GitLabについて",{"href":1263,"dataGaName":1264,"dataGaLocation":986},"/ja-jp/company/","about",{"text":1266,"config":1267,"footerGa":1270},"採用情報",{"href":1268,"dataGaName":1269,"dataGaLocation":986},"/jobs/","jobs",{"dataGaName":1269},{"text":1232,"config":1272},{"href":1234,"dataGaName":1235,"dataGaLocation":986},{"text":1274,"config":1275},"経営陣",{"href":1276,"dataGaName":1277,"dataGaLocation":986},"/company/team/e-group/","leadership",{"text":1279,"config":1280},"ハンドブック",{"href":1281,"dataGaName":1282,"dataGaLocation":986},"https://handbook.gitlab.com/","handbook",{"text":1284,"config":1285},"投資家向け情報",{"href":1286,"dataGaName":1287,"dataGaLocation":986},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1289,"config":1290},"トラストセンター",{"href":1291,"dataGaName":1292,"dataGaLocation":986},"/ja-jp/security/","trust center",{"text":1294,"config":1295},"AI Transparency Center",{"href":1296,"dataGaName":1297,"dataGaLocation":986},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":1299,"config":1300},"ニュースレター",{"href":1301,"dataGaName":1302,"dataGaLocation":986},"/company/contact/#contact-forms","newsletter",{"text":1304,"config":1305},"プレス",{"href":1306,"dataGaName":1307,"dataGaLocation":986},"/press/","press",{"text":1309,"config":1310,"menu":1311},"お問い合わせ",{"dataNavLevelOne":1255},{"type":1037,"columns":1312},[1313],{"items":1314},[1315,1320,1325],{"text":1316,"config":1317},"お問い合わせはこちら",{"href":1318,"dataGaName":1319,"dataGaLocation":986},"/ja-jp/sales/","talk to sales",{"text":1321,"config":1322},"サポートを受ける",{"href":1323,"dataGaName":1324,"dataGaLocation":986},"https://support.gitlab.com/hc/en-us","support portal",{"text":1326,"config":1327},"カスタマーポータル",{"href":1328,"dataGaName":1329,"dataGaLocation":986},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1331,"login":1332,"suggestions":1339},"閉じる",{"text":1333,"link":1334},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":1335,"config":1336},"GitLab.com",{"href":1000,"dataGaName":1337,"dataGaLocation":1338},"search login","search",{"text":1340,"default":1341},"提案",[1342,1344,1349,1351,1355,1359],{"text":1017,"config":1343},{"href":1022,"dataGaName":1017,"dataGaLocation":1338},{"text":1345,"config":1346},"コード提案（AI）",{"href":1347,"dataGaName":1348,"dataGaLocation":1338},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":25,"config":1350},{"href":1054,"dataGaName":25,"dataGaLocation":1338},{"text":1352,"config":1353},"GitLab on AWS",{"href":1354,"dataGaName":1352,"dataGaLocation":1338},"/ja-jp/partners/technology-partners/aws/",{"text":1356,"config":1357},"GitLab on Google Cloud",{"href":1358,"dataGaName":1356,"dataGaLocation":1338},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":1360,"config":1361},"GitLabを選ぶ理由",{"href":1030,"dataGaName":1362,"dataGaLocation":1338},"Why GitLab?",{"freeTrial":1364,"mobileIcon":1368,"desktopIcon":1373,"secondaryButton":1376},{"text":988,"config":1365},{"href":1366,"dataGaName":991,"dataGaLocation":1367},"https://gitlab.com/-/trials/new/","nav",{"altText":1369,"config":1370},"GitLabアイコン",{"src":1371,"dataGaName":1372,"dataGaLocation":1367},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1369,"config":1374},{"src":1375,"dataGaName":1372,"dataGaLocation":1367},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1149,"config":1377},{"href":1378,"dataGaName":1379,"dataGaLocation":1367},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":1381,"mobileIcon":1385,"desktopIcon":1387},{"text":1382,"config":1383},"GitLab Duoの詳細について",{"href":1022,"dataGaName":1384,"dataGaLocation":1367},"gitlab duo",{"altText":1369,"config":1386},{"src":1371,"dataGaName":1372,"dataGaLocation":1367},{"altText":1369,"config":1388},{"src":1375,"dataGaName":1372,"dataGaLocation":1367},{"button":1390,"mobileIcon":1395,"desktopIcon":1397},{"text":1391,"config":1392},"/switch",{"href":1393,"dataGaName":1394,"dataGaLocation":1367},"#contact","switch",{"altText":1369,"config":1396},{"src":1371,"dataGaName":1372,"dataGaLocation":1367},{"altText":1369,"config":1398},{"src":1399,"dataGaName":1372,"dataGaLocation":1367},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1401,"mobileIcon":1406,"desktopIcon":1408},{"text":1402,"config":1403},"料金ページに戻る",{"href":1136,"dataGaName":1404,"dataGaLocation":1367,"icon":1405},"back to pricing","GoBack",{"altText":1369,"config":1407},{"src":1371,"dataGaName":1372,"dataGaLocation":1367},{"altText":1369,"config":1409},{"src":1375,"dataGaName":1372,"dataGaLocation":1367},{"title":1411,"button":1412,"config":1416},"GitLab Orbitが登場: AIエージェントのためのコンテキストレイヤー",{"text":1028,"config":1413},{"href":1414,"dataGaName":1415,"dataGaLocation":986},"/ja-jp/gitlab-orbit/","orbit",{"layout":1417,"disabled":966},"release",{"data":1419},{"text":1420,"source":1421,"edit":1427,"contribute":1432,"config":1437,"items":1442,"minimal":1651},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":1422,"config":1423},"ページのソースを表示",{"href":1424,"dataGaName":1425,"dataGaLocation":1426},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1428,"config":1429},"このページを編集",{"href":1430,"dataGaName":1431,"dataGaLocation":1426},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1433,"config":1434},"ご協力をお願いします",{"href":1435,"dataGaName":1436,"dataGaLocation":1426},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1438,"facebook":1439,"youtube":1440,"linkedin":1441},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1443,1488,1541,1584,1618],{"title":1134,"links":1444,"subMenu":1459},[1445,1449,1454],{"text":1446,"config":1447},"プランの表示",{"href":1136,"dataGaName":1448,"dataGaLocation":1426},"view plans",{"text":1450,"config":1451},"Premiumを選ぶ理由",{"href":1452,"dataGaName":1453,"dataGaLocation":1426},"/ja-jp/pricing/premium/","why premium",{"text":1455,"config":1456},"Ultimateを選ぶ理由",{"href":1457,"dataGaName":1458,"dataGaLocation":1426},"/ja-jp/pricing/ultimate/","why ultimate",[1460],{"title":1309,"links":1461},[1462,1464,1466,1468,1473,1478,1483],{"text":1309,"config":1463},{"href":1318,"dataGaName":996,"dataGaLocation":1426},{"text":1321,"config":1465},{"href":1323,"dataGaName":1324,"dataGaLocation":1426},{"text":1326,"config":1467},{"href":1328,"dataGaName":1329,"dataGaLocation":1426},{"text":1469,"config":1470},"ステータス",{"href":1471,"dataGaName":1472,"dataGaLocation":1426},"https://status.gitlab.com/","status",{"text":1474,"config":1475},"利用規約",{"href":1476,"dataGaName":1477,"dataGaLocation":1426},"/terms/","terms of use",{"text":1479,"config":1480},"プライバシーに関する声明",{"href":1481,"dataGaName":1482,"dataGaLocation":1426},"/ja-jp/privacy/","privacy statement",{"text":1484,"config":1485},"Cookie 優先設定",{"dataGaName":1486,"dataGaLocation":1426,"id":1487,"isOneTrustButton":125},"cookie preferences","ot-sdk-btn",{"title":1033,"links":1489,"subMenu":1498},[1490,1494],{"text":1491,"config":1492},"DevSecOpsプラットフォーム",{"href":1015,"dataGaName":1493,"dataGaLocation":1426},"devsecops platform",{"text":1495,"config":1496},"AI支援開発",{"href":1022,"dataGaName":1497,"dataGaLocation":1426},"ai-assisted development",[1499],{"title":1500,"links":1501},"トピック",[1502,1506,1511,1516,1521,1526,1531,1536],{"text":25,"config":1503},{"href":1504,"dataGaName":1505,"dataGaLocation":1426},"/ja-jp/topics/ci-cd/","cicd",{"text":1507,"config":1508},"GitOps",{"href":1509,"dataGaName":1510,"dataGaLocation":1426},"/ja-jp/topics/gitops/","gitops",{"text":1512,"config":1513},"DevOps",{"href":1514,"dataGaName":1515,"dataGaLocation":1426},"/ja-jp/topics/devops/","devops",{"text":1517,"config":1518},"バージョン管理",{"href":1519,"dataGaName":1520,"dataGaLocation":1426},"/ja-jp/topics/version-control/","version control",{"text":1522,"config":1523},"DevSecOps",{"href":1524,"dataGaName":1525,"dataGaLocation":1426},"/ja-jp/topics/devsecops/","devsecops",{"text":1527,"config":1528},"クラウドネイティブ",{"href":1529,"dataGaName":1530,"dataGaLocation":1426},"/ja-jp/topics/cloud-native/","cloud native",{"text":1532,"config":1533},"コーディングのためのAI",{"href":1534,"dataGaName":1535,"dataGaLocation":1426},"/ja-jp/topics/devops/ai-for-coding/","ai for coding",{"text":1537,"config":1538},"エージェント型AI",{"href":1539,"dataGaName":1540,"dataGaLocation":1426},"/ja-jp/topics/agentic-ai/","agentic ai",{"title":1542,"links":1543},"ソリューション",[1544,1547,1549,1554,1558,1561,1564,1567,1569,1571,1574,1579],{"text":1077,"config":1545},{"href":1072,"dataGaName":1546,"dataGaLocation":1426},"Application Security Testing",{"text":1064,"config":1548},{"href":1049,"dataGaName":1050,"dataGaLocation":1426},{"text":1550,"config":1551},"アジャイル開発",{"href":1552,"dataGaName":1553,"dataGaLocation":1426},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":1555,"config":1556},"SCM",{"href":1061,"dataGaName":1557,"dataGaLocation":1426},"source code management",{"text":25,"config":1559},{"href":1054,"dataGaName":1560,"dataGaLocation":1426},"continuous integration & delivery",{"text":1103,"config":1562},{"href":1105,"dataGaName":1563,"dataGaLocation":1426},"value stream management",{"text":1507,"config":1565},{"href":1566,"dataGaName":1510,"dataGaLocation":1426},"/ja-jp/solutions/gitops/",{"text":1116,"config":1568},{"href":1119,"dataGaName":1120,"dataGaLocation":1426},{"text":1122,"config":1570},{"href":1125,"dataGaName":1126,"dataGaLocation":1426},{"text":1572,"config":1573},"公共機関",{"href":1131,"dataGaName":1132,"dataGaLocation":1426},{"text":1575,"config":1576},"教育",{"href":1577,"dataGaName":1578,"dataGaLocation":1426},"/ja-jp/solutions/education/","education",{"text":1580,"config":1581},"金融サービス",{"href":1582,"dataGaName":1583,"dataGaLocation":1426},"/ja-jp/solutions/finance/","financial services",{"title":1585,"links":1586},"リソース",[1587,1589,1591,1593,1597,1599,1602,1604,1606,1608,1610,1612,1614,1616],{"text":1152,"config":1588},{"href":1154,"dataGaName":1155,"dataGaLocation":1426},{"text":1157,"config":1590},{"href":1159,"dataGaName":1160,"dataGaLocation":1426},{"text":1162,"config":1592},{"href":1164,"dataGaName":1165,"dataGaLocation":1426},{"text":1167,"config":1594},{"href":1595,"dataGaName":1596,"dataGaLocation":1426},"https://docs.gitlab.com/ja-jp","docs",{"text":1190,"config":1598},{"href":1192,"dataGaName":1193,"dataGaLocation":1426},{"text":1600,"config":1601},"最新リリース",{"href":1250,"dataGaName":1251,"dataGaLocation":1426},{"text":1185,"config":1603},{"href":1187,"dataGaName":1188,"dataGaLocation":1426},{"text":1204,"config":1605},{"href":1206,"dataGaName":1207,"dataGaLocation":1426},{"text":1212,"config":1607},{"href":1214,"dataGaName":1215,"dataGaLocation":1426},{"text":1217,"config":1609},{"href":1219,"dataGaName":1220,"dataGaLocation":1426},{"text":1222,"config":1611},{"href":1224,"dataGaName":1225,"dataGaLocation":1426},{"text":1227,"config":1613},{"href":1229,"dataGaName":1230,"dataGaLocation":1426},{"text":1232,"config":1615},{"href":1234,"dataGaName":1235,"dataGaLocation":1426},{"text":1237,"config":1617},{"href":1239,"dataGaName":1240,"dataGaLocation":1426},{"title":1619,"links":1620},"会社情報",[1621,1623,1625,1627,1629,1631,1635,1640,1642,1644,1646],{"text":1261,"config":1622},{"href":1263,"dataGaName":1255,"dataGaLocation":1426},{"text":1266,"config":1624},{"href":1268,"dataGaName":1269,"dataGaLocation":1426},{"text":1274,"config":1626},{"href":1276,"dataGaName":1277,"dataGaLocation":1426},{"text":1279,"config":1628},{"href":1281,"dataGaName":1282,"dataGaLocation":1426},{"text":1284,"config":1630},{"href":1286,"dataGaName":1287,"dataGaLocation":1426},{"text":1632,"config":1633},"Sustainability",{"href":1634,"dataGaName":1632,"dataGaLocation":1426},"/sustainability/",{"text":1636,"config":1637},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":1638,"dataGaName":1639,"dataGaLocation":1426},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1289,"config":1641},{"href":1291,"dataGaName":1292,"dataGaLocation":1426},{"text":1299,"config":1643},{"href":1301,"dataGaName":1302,"dataGaLocation":1426},{"text":1304,"config":1645},{"href":1306,"dataGaName":1307,"dataGaLocation":1426},{"text":1647,"config":1648},"現代奴隷制の透明性に関する声明",{"href":1649,"dataGaName":1650,"dataGaLocation":1426},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1652},[1653,1655,1658],{"text":1474,"config":1654},{"href":1476,"dataGaName":1477,"dataGaLocation":1426},{"text":1656,"config":1657},"Cookieの設定",{"dataGaName":1486,"dataGaLocation":1426,"id":1487,"isOneTrustButton":125},{"text":1479,"config":1659},{"href":1481,"dataGaName":1482,"dataGaLocation":1426},[1661],{"id":1662,"title":7,"body":965,"config":1663,"content":1665,"description":965,"extension":1669,"meta":1670,"navigation":125,"path":1671,"seo":1672,"stem":1673,"__hash__":1674},"blogAuthors/en-us/blog/authors/sam-morris.yml",{"template":1664},"BlogAuthor",{"name":7,"config":1666},{"headshot":1667,"ctfId":1668},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660148/Blog/Author%20Headshots/sam_morris.png","6JTrhUIqSCU30Y9KZOaan8","yml",{},"/en-us/blog/authors/sam-morris",{},"en-us/blog/authors/sam-morris","DfL241G6FQ5wNU6XYJLCEQLvnWBnyKnAi3wCPxOqBzE",[1676,1683,1690],{"title":1677,"description":1677,"heroImage":1678,"category":961,"date":1679,"authors":1680,"slug":1682,"externalUrl":965},"MCPサーバーとは？仕組みやソフトウェア開発の活用例をわかりやすく解説","https://res.cloudinary.com/about-gitlab-com/image/upload/v1786001428/qedvughylmeposoqm5zs.jpg","2026-08-07",[1681],"GitLab Team","what-is-mcp-server",{"title":1684,"description":1685,"heroImage":1686,"category":961,"date":1687,"authors":1688,"slug":1689,"externalUrl":965},"イテレーションとは？意味や進め方、おすすめの支援ツールを紹介","イテレーションとは、アジャイル開発における「反復」を意味する開発単位です。本記事では、イテレーションの意味やスプリントとの違い、具体的な進め方、成功のポイントをわかりやすく解説します。アジャイル開発を支援するツールもあわせて紹介します。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785816755/mj23yaguu0gxvbztd6pl.jpg","2026-08-06",[1681],"what-is-iteration",{"title":1691,"description":1692,"heroImage":1693,"category":961,"date":1687,"authors":1694,"slug":1697,"externalUrl":965},"GitLab Self-Hostedで実現するコンフィデンシャルAI","ソースコードをハードウェアで暗号化された境界の外に出すことなく、GitLab DuoのAIコーディングエージェントを開発者に提供します。GPUは不要です。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png",[1695,1696],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"promotions":1699},[1700,1714,1726,1738],{"id":1701,"categories":1702,"header":1704,"text":1705,"button":1706,"image":1711},"ai-modernization",[1703],"ai","AIの真価、組織全体で発揮できていますか？","所要時間は5分以内です",{"text":1707,"config":1708},"AI成熟度スコアを確認する",{"href":1709,"dataGaName":1710,"dataGaLocation":1193},"/ja-jp/assessments/ai-modernization-assessment/","modernization assessment",{"config":1712},{"src":1713},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1715,"categories":1716,"header":1718,"text":1705,"button":1719,"image":1723},"devops-modernization",[1717,1525],"product","単にツールを管理するだけでなく、イノベーションを提供していますか？",{"text":1720,"config":1721},"DevOps成熟度スコアを確認しましょう",{"href":1722,"dataGaName":1710,"dataGaLocation":1193},"/ja-jp/assessments/devops-modernization-assessment/",{"config":1724},{"src":1725},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1727,"categories":1728,"header":1730,"text":1705,"button":1731,"image":1735},"security-modernization",[1729],"security","スピードのためにセキュリティを犠牲にしていませんか？",{"text":1732,"config":1733},"セキュリティ成熟度スコアを確認しましょう",{"href":1734,"dataGaName":1710,"dataGaLocation":1193},"/ja-jp/assessments/security-modernization-assessment/",{"config":1736},{"src":1737},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1739,"paths":1740,"header":1743,"text":1744,"button":1745,"image":1750},"github-azure-migration",[1741,1742],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","チームはGitHubのAzure移行に対応できていますか？","GitHubはすでにAzureを基盤として再構築を進めています。それがあなたのチームにとって何を意味するのか、ご確認ください。",{"text":1746,"config":1747},"GitLabとGitHubの比較を見る",{"href":1748,"dataGaName":1749,"dataGaLocation":1193},"/ja-jp/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1751},{"src":1725},{"header":1753,"blurb":1754,"button":1755,"secondaryButton":1759},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":988,"config":1756},{"href":1757,"dataGaName":991,"dataGaLocation":1758},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/ja-jp/","feature",{"text":1309,"config":1760},{"href":1318,"dataGaName":996,"dataGaLocation":1758},1786803770323]