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