[{"data":1,"prerenderedAt":777},["ShallowReactive",2],{"/ja-jp/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab":3,"navigation-ja-jp":43,"banner-ja-jp":442,"footer-ja-jp":452,"blog-post-authors-ja-jp-Benjamin Skierlak|James Wormwell":658,"blog-related-posts-ja-jp-from-code-to-production-a-guide-to-continuous-deployment-with-gitlab":684,"assessment-promotions-ja-jp":728,"next-steps-ja-jp":768},{"id":4,"title":5,"authorSlugs":6,"body":9,"categorySlug":10,"config":11,"content":15,"description":9,"extension":30,"isFeatured":13,"meta":31,"navigation":32,"path":33,"publishedDate":22,"seo":34,"stem":38,"tagSlugs":39,"__hash__":42},"blogPosts/ja-jp/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab.yml","From Code To Production A Guide To Continuous Deployment With Gitlab",[7,8],"benjamin-skierlak","james-wormwell",null,"product",{"slug":12,"featured":13,"template":14},"from-code-to-production-a-guide-to-continuous-deployment-with-gitlab",false,"BlogPost",{"heroImage":16,"body":17,"authors":18,"updatedDate":21,"date":22,"title":23,"tags":24,"description":29,"category":10},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659478/Blog/Hero%20Images/REFERENCE_-_Use_this_page_as_a_reference_for_thumbnail_sizes.png","継続的デプロイは、チームがより迅速かつ高い信頼性で価値を生み出せる画期的な手法です。しかし、GitOpsやKubernetesを用いたコンテナオーケストレーション、動的環境などの高度なデプロイワークフローに取り組むのは、継続的デプロイの導入を始めたばかりのチームにとってはハードルが高いと感じられるかもしれません。\n\nGitLabでは、シームレスかつスケーラブルなデリバリーを実現することに注力しています。チームが基本に集中できるようにすることで、時間をかけてより複雑な戦略へと発展できる、強固な基盤を構築できます。このガイドでは、GitLabを活用した継続的デプロイの導入に必要な基本的なステップを紹介し、長期的な成功のための土台作りをサポートします。\n\n## まずはワークフローの計画から\n\n技術的な実装に入る前に、デプロイワークフローをしっかりと設計する時間を取りましょう。成功の鍵は、慎重な計画と体系的なアプローチにあります。\n\n### アーティファクト管理戦略\n\n継続的デプロイにおいて、アーティファクトとは、ビルドプロセスによって生成されるパッケージ化された成果物を指し、保存、バージョン管理、デプロイが必要です。アーティファクトには、次のようなものが含まれます。\n\n* アプリケーション用のコンテナイメージ\n* パッケージ\n* コンパイル済みのバイナリや実行ファイル\n* ライブラリ\n* 設定ファイル\n* ドキュメントパッケージ\n* その他のアーティファクト\n\n各アーティファクトは、デプロイプロセスにおいて特定の役割を果たします。たとえば、一般的なWebアプリケーションでは、次のようなアーティファクトが生成されることがあります。\n\n* バックエンドサービス用のコンテナイメージ\n* コンパイル済みフロントエンドアセットのZIPアーカイブ\n* データベース変更用のSQLファイル\n* 環境ごとの設定ファイル\n\nアーティファクトの適切な管理はデプロイを成功させる鍵となります。ここからは、アーティファクト管理のアプローチについて詳しく見ていきましょう。\n\n#### アーティファクトとリリースのバージョニング戦略\n\nクリーンで整理された構造を保つためのベストプラクティスとして、アーティファクトの明確なバージョニング戦略を確立することが重要です。リリース作成時のポイントは以下のとおりです。\n\n* リリースタグにセマンティックバージョニング（major.minor.patch）を使用する\n\n  * 例：安定版リリースが`myapp:1.2.3`の場合\n  * 破壊的な変更がある場合は、メジャーバージョン変更（2.0.0）\n  * 新機能を追加する場合は、マイナーバージョン変更（1.3.0）\n  * バグ修正を行う場合は、パッチバージョン変更（1.2.4）\n* 最新の安定版を示す「latest」タグを維持する\n\n  * 例：`myapp:latest`（自動デプロイ用）\n* コミットSHAを含めることで、正確なバージョン追跡を行う\n\n  * 例：`myapp:1.2.3-abc123f`（デバッグ用）\n* 開発環境向けにブランチベースのタグを使用する\n\n  * 例：`myapp:feature-user-auth`（新機能テスト用）\n\n#### ビルドアーティファクトの保持\n\n明確な保持ルールを実装しましょう。\n\n* 一時的なアーティファクトの明確な有効期限を設定する\n* 永続的に保持する必要があるアーティファクトを定義する\n* ストレージ管理のためのクリーンアップポリシーを設定する\n\n#### レジストリアクセスと認証\n\n適切なアクセス制御でアーティファクトのセキュリティを確保しましょう。\n\n* デベロッパーのアクセス用にパーソナルアクセストークンを実装する\n* パイプラインの認証にCI/CD変数を設定する\n* 適切なアクセススコープを設定する\n\n### 環境戦略\n\n環境設計はデプロイパイプライン全体の構成に影響を与えるため、早い段階で検討しましょう。\n\n* 開発、ステージング環境、本番環境の設定\n* 環境ごとの変数とシークレットの管理\n* アクセス制御と保護ルールの設定\n* デプロイの追跡とモニタリングのアプローチ\n\n### デプロイターゲット\n\nどこに、どのようにデプロイするのかを慎重に検討しましょう。これらの決定は重要であり、それぞれのメリットとデメリットを考慮する必要があります。\n\n* インフラ要件（仮想マシン、コンテナ、クラウドサービス）\n* ネットワークアクセスとセキュリティ設定\n* 認証メカニズム（SSH鍵、アクセストークン）\n* リソースの割り当てとスケーリングの考慮\n\nこれで戦略が定まり、基盤となる決定が完了したので、これらの計画を実際に動作するパイプラインに落とし込んでいきます。それでは、実際に機能する例を作ることで概念を深掘りしていきましょう。まずはシンプルなアプリケーションから始め、徐々にデプロイの機能を追加していきます。\n\n## CDパイプラインの実装\n\n### 具体的な手順\n\nWebアプリケーション向けの基本的な継続的デプロイ（CD）パイプラインの実装手順を順を追って説明します。例としてシンプルなHTMLアプリケーションを使用しますが、ここで紹介する原則はどのタイプのアプリケーションにも応用できます。今回は、アプリケーションをDockerイメージとしてパッケージ化し、シンプルな仮想マシン上にデプロイします。これにより、最小限の依存関係を持つ厳選されたイメージを活用し、環境依存の要件が意図せず混入するのを防ぐことができます。また、仮想マシン上で動作させることで、GitLabのネイティブなインテグレーション機能を活用しない設定となります。複雑で本格的な環境ではなく、理解しやすい簡易的な環境から始めてみましょう。\n\n#### 前提条件\n\nこの例では、クラウドプロバイダーの仮想マシン上で実行するアプリケーションをコンテナ化することを目指します。また、ローカル環境でもこのアプリケーションをテストします。以下の前提条件は、このシナリオにおいてのみ必要なものです。\n\n##### [仮想マシン（VM）](https://about.gitlab.com/ja-jp/blog/what-is-vm/)のセットアップ\n\n* お好みのクラウドプロバイダーで[VM](https://about.gitlab.com/ja-jp/blog/what-is-vm/)をプロビジョニングします（例：GCP、AWS、Azure）\n* ネットワークルールを設定し、ポート22、80、443へのアクセスを許可します\n* デプロイ用にマシンのパブリックIPアドレスを記録します\n\n##### SSH認証のセットアップ：\n\n* マシン用の公開鍵と秘密鍵のペアを生成します\n* GitLabで**設定 > CI/CD > 変数**を開きます\n* `GITLAB_KEY`という変数を作成します\n* タイプを「ファイル」に設定します（SSH認証に必須）\n* 秘密鍵を「値」フィールドに貼り付けます\n* 「ユーザー」変数を定義します（VMにログインしてスクリプトを実行するユーザー）\n\n##### デプロイ変数の設定\n\n* デプロイターゲット用の変数を作成します\n\n  * `STAGING_TARGET`：ステージング環境のサーバーIPまたはドメイン\n  * `PRODUCTION_TARGET`：本番環境のサーバーIPまたはドメイン\n\n##### ローカル開発環境のセットアップ\n\n* デプロイのテスト用に、ローカルマシンにDockerをインストールします\n\n##### GitLabコンテナレジストリへのアクセス\n\n* レジストリパスを確認します：\n\n  * **デプロイ > コンテナレジストリ**を開きます\n  * レジストリパスをコピーします（例：registry.gitlab.com/group/project）\n* 認証の設定：\n\n  * **設定 > アクセストークン**を開きます\n  * レジストリアクセス権を持つ新しいトークンを作成します\n  * トークンの有効期限を最大1年に設定します\n  * トークンを安全に保存します\n* ローカルレジストリのアクセス設定：\n\n```shell\ndocker login registry.gitlab.com\n\n# パーソナルアクセストークンを使用する場合のユーザー名はgitlab-ci-tokenです\n\n# Password:（ここにアクセストークンを入力）\n```\n\n#### 1. アプリケーションを作成する\n\n基本的なWebアプリケーションから始めましょう。今回の例では、シンプルなHTMLページを使用します。\n\n```xml\n\u003C!|||UNTRANSLATED_CONTENT_START|||-- index.html -->\n\n\u003Chtml>\n  \u003Chead>\n    \u003Cstyle>\n      body {\n        background-color: #171321; /* GitLab dark */\n      }\n    \u003C/style>\n  \u003C/head>\n  \u003Cbody>\n    \u003C!|||UNTRANSLATED_CONTENT_END|||-- ここにコンテンツを追加 -->\n  \u003C/body>\n\u003C/html>\n```\n\n#### 2. アプリケーションをコンテナ化する\n\nアプリケーションをパッケージ化するために、Dockerfileを作成します：\n\n```text\nFROM nginx:1.26.2\n\nCOPY index.html /usr/share/nginx/html/index.html\n```\n\nこのDockerfileは\n\n* nginxをベースイメージとして使用し、Webコンテンツを配信できるようにします\n* 作成したindex.htmlをnginxのディレクトリ構造内の適切な場所にコピーします\n\n#### 3. CI/CDパイプラインを設定する\n\nGitLabのパイプラインステージを定義するために、`.gitlab-ci.yml`ファイル を作成します：\n\n```yaml\nvariables:\n  TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest\n  TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA\n\nstages:\n  - publish\n  - deploy\n\n```\n\n解説：\n\n`TAG_LATEST`は、次の3つの要素で構成されています：\n\n* `$CI_REGISTRY_IMAGE`：GitLabのプロジェクトのコンテナレジストリのパス\n\n例：`registry.gitlab.com/your-group/your-project`\n\n* `$CI_COMMIT_REF_NAME`：ブランチ名またはタグ名\n\n例：ブランチの場合は`/main`、フィーチャーブランチの場合は`/feature-login`\n\n* `:latest`：固定のサフィックス\n\nこれにより、mainブランチの`TAG_LATEST`は次のようになります：`registry.gitlab.com/your-group/your-project/main:latest`\n\n`TAG_COMMIT`は`TAG_LATEST`とほぼ同じですが、`:latest`の代わりにコミット識別子の`$CI_COMMIT_SHA`を使います。例：`:abc123def456`\n\nしたがって、同じmainブランチでの`TAG_COMMIT`は次のようになります：`registry.gitlab.com/your-group/your-project/main:abc123def456`\n\n両方のタグを使用する理由は、`TAG_LATEST`が常に最新バージョンを取得しやすくするのに対し、`TAG_COMMIT`は必要に応じて特定のバージョンに戻れるようにするためです。\n\n#### 4. コンテナレジストリに公開する\n\nパイプラインに公開ジョブを追加します：\n\n```yaml\npublish:\n  stage: publish\n  image: docker:latest\n  services:\n    - docker:dind\n  script:\n    - docker build -t $TAG_LATEST -t $TAG_COMMIT .\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker push $TAG_LATEST\n    - docker push $TAG_COMMIT\n\n```\n\nこのジョブは\n\n* Docker-in-Dockerを使用してイメージをビルドします\n* 2つのタグを付けたイメージを作成します\n* GitLabレジストリへの認証を行います\n* 両方のイメージをレジストリにプッシュします \n\nこれで、コンテナイメージが安全にレジストリに保存されました。次は、ターゲット環境へのデプロイを進めていきます。本番環境へ移行する前に、まずローカル環境でテストを行い、設定が正しく機能していることを確認しましょう。 \n\n#### 5. 環境へデプロイする\n\n本番環境にデプロイする前に、ローカル環境でテストできます。先ほどGitLabレジストリにイメージを公開したので、それをローカル環境でプルしてテストします。コンテナイメージのパスが分からない場合は、GitLabの\\*\\*デプロイ\n\n> コンテナレジストリ\\*\\*に移動し、該当のコンテナイメージの行末にあるアイコンをクリックすると、パスをコピーできます。\n\n```shell\ndocker login registry.gitlab.com \n\ndocker run -p 80:80 registry.gitlab.com/your-project-path/main:latest\n```\n\nこれにより、Webブラウザからlocalhostにアクセスし、ローカル環境でアプリケーションを確認できるようになります。\n\nそれでは、パイプラインにデプロイジョブを追加しましょう：\n\n```yaml\ndeploy:\n  stage: deploy\n  image: alpine:latest\n  script:\n    - chmod 400 $GITLAB_KEY\n    - apk add openssh-client\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - ssh -i $GITLAB_KEY -o StrictHostKeyChecking=no $USER@$TARGET_SERVER \n      docker pull $TAG_COMMIT &&\n      docker rm -f myapp || true &&\n      docker run -d -p 80:80 --name myapp $TAG_COMMIT\n\n```\n\nこのジョブは\n\n* デプロイ先のサーバーへのSSHアクセスを確立します\n* 最新のコンテナイメージをプルします\n* 既存のコンテナを削除します\n* 新しいバージョンのコンテナをデプロイします\n\n#### 6. デプロイを追跡する\n\n環境設定を追加してデプロイの追跡を有効にします：\n\n```yaml\ndeploy:\n  environment:\n    name: production\n    url: https://your-application-url.com \n\n```\n\nこれにより、GitLabの**オペレーション > 環境**セクションに環境オブジェクトが作成され、以下の情報が提供されます：\n\n* デプロイ履歴\n* 現在のデプロイ状況\n* アプリケーションへのクイックアクセス\n\n単一の環境向けのパイプラインは、最初のステップとしては有効ですが、ほとんどのチームでは適切なテストやステージングを行うために複数の環境を管理する必要があります。このより実践的なシナリオに対応するために、パイプラインを拡張していきましょう。\n\n#### 7. 複数環境をセットアップする\n\nより堅牢なパイプラインを構築するために、ステージング環境と本番環境のデプロイを設定します：\n\n```yaml\nstages:\n  - publish\n  - staging\n  - release\n  - version\n  - production\n\nstaging:\n  stage: staging\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\" && $CI_COMMIT_TAG == null\n  environment:\n    name: staging\n    url: https://staging.your-app.com\n  # デプロイスクリプトを記述\n\nproduction:\n  stage: production\n  rules:\n    - if: $CI_COMMIT_TAG\n  environment:\n    name: production\n    url: https://your-app.com\n  # デプロイスクリプトを記述\n\n```\n\nこの設定は\n\n* mainブランチからステージ環境へデプロイします\n* GitLabのタグを利用して本番環境へのデプロイをトリガーします\n* 環境ごとに分けてデプロイの状況を管理できるようにします\n\nこのステップと次のステップでは、GitLabの非常に便利な機能であるタグを活用しています。GitLabの**コード >\nタグ**セクションで手動でタグを作成すると、'$ CI_COMMMIT_TAG\n`変数が設定され、本番環境へのデプロイジョブが適切にトリガーされるようになります。\n\n#### 8. 自動リリースノートを作成する\n\nCI/CDパイプラインを通じてGitLabのリリース機能を使用します。まず、`.gitlab-ci.yml`のstagesを更新 します：\n\n```yaml\nstages:\n\n\n- publish\n\n- staging\n\n- release # New stage for releases\n\n- version\n\n- production\n```\n\n次に、リリースジョブを追加します：\n\n```yaml\nrelease_job:\n  stage: release\n  image: registry.gitlab.com/gitlab-org/release-cli:latest\n  rules:\n    - if: $CI_COMMIT_TAG                  # タグが作成された場合のみ実行する\n  script:\n    - echo \"Creating release for $CI_COMMIT_TAG\"\n  release:                                # リリース設定\n    name: 'Release $CI_COMMIT_TAG'\n    description: 'Release created from $CI_COMMIT_TAG'\n    tag_name: '$CI_COMMIT_TAG'           # タグを作成する\n    ref: '$CI_COMMIT_TAG'                # リリースのベースとなるタグ\n\n```\n\nコンテナイメージのリンクを追加することで、さらに内容を充実させることができます：\n\n```yaml\nrelease:\n  name: 'Release $CI_COMMIT_TAG'\n  description: 'Release created from $CI_COMMIT_TAG'\n  tag_name: '$CI_COMMIT_TAG'\n  ref: '$CI_COMMIT_TAG'\n  assets:\n    links:\n      - name: 'Container Image'\n        url: '$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG'\n        link_type: 'image'\n\n```\n\nコミットメッセージに基づいて自動リリースノートを生成する場合は次のようにします：\n\n```yaml\nrelease:\n  name: 'Release $CI_COMMIT_TAG'\n  description: 'Release notes for version $CI_COMMIT_TAG'\n  tag_name: '$CI_COMMIT_TAG'\n  ref: '$CI_COMMIT_TAG'\n  auto_generate_release_notes: true    # Enables automatic notes\n\n```\n\n自動リリースノートを充実させるには\n\n* 規則的なコミットメッセージを使用する（例：feat:, fix:）\n* イシュー番号を含める（例：#123）\n* 件名と本文の間に空行を入れる\n\nデプロイ時の情報をリリースノートに記載したい場合は、以下のように設定できます：\n\n```text\nrelease_job:\n  script:\n    - |\n      DEPLOY_TIME=$(date '+%Y-%m-%d %H:%M:%S')\n      CHANGES=$(git log $(git describe --tags --abbrev=0 @^)..@ --pretty=format:\"- %s\")\n      cat > release_notes.md \u003C\u003C EOF\n      ## デプロイ情報\n      - デプロイ日時: $DEPLOY_TIME\n      - 環境: 本番環境\n      - バージョン: $CI_COMMIT_TAG\n\n      ## 変更内容\n      $CHANGES\n\n      ## アーティファクト\n      - コンテナイメージ: \\`$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\\`\n      EOF\n  release:\n    description: './release_notes.md'\n\n```\n\nこの設定を行うと、Gitタグの作成時に自動でリリースが作成されるようになります。作成されたリリースは、GitLabの**デプロイ >\nリリース**で確認できます。\n\n#### 9. すべてをまとめる\n\n最終的なYAMLファイルは以下のようになります：\n\n```text\nvariables:\n  TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest\n  TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHA\n  STAGING_TARGET: $STAGING_TARGET    # CI/CD変数で設定\n  PRODUCTION_TARGET: $PRODUCTION_TARGET  # CI/CD変数で設定\n\nstages:\n  - publish\n  - staging\n  - release\n  - version\n  - production\n\n# ビルドとレジストリへの公開\n\npublish:\n  stage: publish\n  image: docker:latest\n  services:\n    - docker:dind\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\" && $CI_COMMIT_TAG == null\n  script:\n    - docker build -t $TAG_LATEST -t $TAG_COMMIT .\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker push $TAG_LATEST\n    - docker push $TAG_COMMIT\n\n# stagingへデプロイ\n\nstaging:\n  stage: staging\n  image: alpine:latest\n  rules:\n    - if: $CI_COMMIT_BRANCH == \"main\" && $CI_COMMIT_TAG == null\n  script:\n    - chmod 400 $GITLAB_KEY\n    - apk add openssh-client\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - ssh -i $GITLAB_KEY -o StrictHostKeyChecking=no $USER@$STAGING_TARGET \"\n        docker pull $TAG_COMMIT &&\n        docker rm -f myapp || true &&\n        docker run -d -p 80:80 --name myapp $TAG_COMMIT\"\n  environment:\n    name: staging\n    url: http://$STAGING_TARGET\n\n# リリースの作成\n\nrelease_job:\n  stage: release\n  image: registry.gitlab.com/gitlab-org/release-cli:latest\n  rules:\n    - if: $CI_COMMIT_TAG\n  script:\n    - |\n      DEPLOY_TIME=$(date '+%Y-%m-%d %H:%M:%S')\n      CHANGES=$(git log $(git describe --tags --abbrev=0 @^)..@ --pretty=format:\"- %s\")\n      cat > release_notes.md \u003C\u003C EOF\n      ## デプロイ情報\n      - デプロイ日時：$DEPLOY_TIME\n      - 環境：本番環境\n      - バージョン：$CI_COMMIT_TAG\n\n      ## 変更内容\n      $CHANGES\n\n      ## アーティファクト\n      - コンテナイメージ：\\`$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\\`\n      EOF\n  release:\n    name: 'Release $CI_COMMIT_TAG'\n    description: './release_notes.md'\n    tag_name: '$CI_COMMIT_TAG'\n    ref: '$CI_COMMIT_TAG'\n    assets:\n      links:\n        - name: 'コンテナイメージ'\n          url: '$CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG'\n          link_type: 'image'\n\n# リリースタグ付きのバージョンを作成\n\nversion_job:\n  stage: version\n  image: docker:latest\n  services:\n    - docker:dind\n  rules:\n    - if: $CI_COMMIT_TAG\n  script:\n    - docker pull $TAG_COMMIT\n    - docker tag $TAG_COMMIT $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - docker push $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\n\n# 本番環境へデプロイ\n\nproduction:\n  stage: production\n  image: alpine:latest\n  rules:\n    - if: $CI_COMMIT_TAG\n  script:\n    - chmod 400 $GITLAB_KEY\n    - apk add openssh-client\n    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n    - ssh -i $GITLAB_KEY -o StrictHostKeyChecking=no $USER@$PRODUCTION_TARGET \"\n        docker pull $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG &&\n        docker rm -f myapp || true &&\n        docker run -d -p 80:80 --name myapp $CI_REGISTRY_IMAGE/main:$CI_COMMIT_TAG\"\n  environment:\n    name: production\n    url: http://$PRODUCTION_TARGET\n\n```\n\n完成したパイプラインは\n\n* mainブランチでの変更をレジストリに公開します\n* mainブランチでの変更をstagingへデプロイします\n* タグが作成された際にリリースを作成します\n* リリースタグを付けたイメージを作成します\n* タグを基に本番環境へデプロイします\n\n主なメリット：\n\n* クリーンで再現性のあるローカル開発およびテスト環境が完成します\n* 構造化された本番環境へのデプロイフローにより、信頼性の高いデプロイを実現できます\n* 予期しない障害からの復旧パターンを確立します\n* より複雑なデプロイ戦略への拡張/導入に対応できます\n*\n\n### ベストプラクティス\n\n実装の際は、以下の原則を守りましょう：\n\n* 変数の使用方法からデプロイ手順まで、すべてを文書化する\n* GitLabのビルトイン機能（環境管理、リリース、レジストリ）を活用する\n* 適切なアクセス制御とセキュリティ対策を実施する\n* 強固なロールバック手順を計画し、障害に備える\n* パイプラインの設定はDRY（Don't Repeat Yourself：重複を避ける）を意識する\n\n## デプロイ戦略をスケールさせる\n\n次は何をすべきでしょうか？ここでは、継続的デプロイ戦略をさらに成熟させるために、検討すべきポイントを紹介します。\n\n### 高度なセキュリティ対策\n\n以下の方法でセキュリティを強化しましょう：\n\n* アクセスを制限した保護環境を設定する\n* 本番環境へのデプロイに承認を必須とする\n* セキュリティスキャンをパイプラインに統合する\n* 自動脆弱性評価を導入する\n* デプロイ関連の変更に対するブランチ保護ルールを適用する\n\n### 段階的なデリバリー戦略\n\n以下のような高度なデプロイ戦略を実装しましょう。\n\n* 機能フラグを活用して制御されたロールアウトを行う\n* リスクを軽減するためにカナリアデプロイを実施する\n* ブルーグリーンデプロイ戦略を導入する\n* A/Bテストを実施する\n* 動的環境管理を行う\n\n### モニタリングと最適化\n\n強固なモニタリング体制を確立しましょう：\n\n* デプロイ指標を追跡する\n* パフォーマンスモニタリングをセットアップする\n* デプロイアラートを設定する\n* デプロイのサービスレベル目標（SLO）を確立する\n* 定期的にパイプラインを最適化する\n\n## GitLabが選ばれる理由\n\nGitLabの継続的デプロイ機能は、現代のデプロイワークフローに最適です。GitLabは、コンテナレジストリ、環境管理、デプロイ追跡などの機能が1つのインターフェースに集約されており、コードから本番環境へのプロセスを効率化します。また、環境ごとの変数、デプロイ承認ゲート、ロールバック機能を備えており、本番環境へのデプロイ時に求められるセキュリティと管理を実現します。さらに、Review\nApps（レビューアプリ）や機能フラグを活用することで、段階的なデリバリー（プログレッシブデリバリー）戦略も可能です。GitLabのDevSecOpsプラットフォームの一部として、これらのCD機能はソフトウェアライフサイクル全体とシームレスに連携します。\n\n## 無料トライアルで今すぐスタート！\n\n継続的デプロイへの道のりは、革命ではなく進化のプロセスです。まずは基本を押さえ、しっかりとした基盤を築き、チームの成長に応じて徐々に高度な機能を取り入れていきましょう。GitLabは、最初の自動デプロイから、複数環境にまたがる複雑なデリバリーパイプラインまで、あらゆる段階でサポートするためのツールと柔軟性を提供します。 \n\n> [GitLab\n> Ultimateの無料トライアル](https://about.gitlab.com/ja-jp/free-trial/devsecops/)で、今日から継続的デプロイメントを始めましょう。\n\n\u003Cbr>\u003Cbr>\n\n\\*監修：川瀬 洋平 [@ykawase](https://gitlab.com/ykawase)\u003Cbr>\n\n（GitLab合同会社 カスタマーサクセス本部 シニアカスタマーサクセスマネージャー）*\n",[19,20],"Benjamin Skierlak","James Wormwell","2025-06-11","2025-01-28","コードから本番環境へ：GitLabを活用した継続的デプロイのガイド",[25,26,27,10,28],"CD","CI/CD","features","tutorial","GitLabを活用して堅牢な継続的デプロイパイプラインを構築する方法をご紹介します。具体的な手順や例、ベストプラクティスを通して段階的にプロセスを理解できます。","yml",{},true,"/ja-jp/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab",{"ogTitle":23,"ogImage":16,"ogDescription":29,"ogSiteName":35,"noIndex":13,"ogType":36,"ogUrl":37,"title":23,"canonicalUrls":37,"description":29},"https://about.gitlab.com","article","https://about.gitlab.com/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab","ja-jp/blog/from-code-to-production-a-guide-to-continuous-deployment-with-gitlab",[40,41,27,10,28],"cd","cicd","V0Ix1rSrH8kCfw3qA3cRCkXBo3Md-Iq3lmBSM5jswmk",{"data":44},{"logo":45,"freeTrial":50,"sales":55,"login":60,"items":65,"search":372,"minimal":405,"duo":422,"pricingDeployment":432},{"config":46},{"href":47,"dataGaName":48,"dataGaLocation":49},"/ja-jp/","gitlab logo","header",{"text":51,"config":52},"無料トライアルを開始",{"href":53,"dataGaName":54,"dataGaLocation":49},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":56,"config":57},"お問い合わせ",{"href":58,"dataGaName":59,"dataGaLocation":49},"/ja-jp/sales/","sales",{"text":61,"config":62},"サインイン",{"href":63,"dataGaName":64,"dataGaLocation":49},"https://gitlab.com/users/sign_in/","sign in",[66,93,188,193,294,354],{"text":67,"config":68,"cards":70},"プラットフォーム",{"dataNavLevelOne":69},"platform",[71,77,85],{"title":67,"description":72,"link":73},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":74,"config":75},"プラットフォームを詳しく見る",{"href":76,"dataGaName":69,"dataGaLocation":49},"/ja-jp/platform/",{"title":78,"description":79,"link":80},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":81,"config":82},"GitLab Duoのご紹介",{"href":83,"dataGaName":84,"dataGaLocation":49},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":86,"description":87,"link":88},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":89,"config":90},"詳細はこちら",{"href":91,"dataGaName":92,"dataGaLocation":49},"/ja-jp/why-gitlab/","why gitlab",{"text":94,"left":32,"config":95,"link":97,"lists":101,"footer":170},"製品",{"dataNavLevelOne":96},"solutions",{"text":98,"config":99},"すべてのソリューションを表示",{"href":100,"dataGaName":96,"dataGaLocation":49},"/ja-jp/solutions/",[102,126,148],{"title":103,"description":104,"link":105,"items":110},"自動化","CI/CDと自動化でデプロイを加速",{"config":106},{"icon":107,"href":108,"dataGaName":109,"dataGaLocation":49},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[111,114,117,122],{"text":26,"config":112},{"href":113,"dataGaLocation":49,"dataGaName":26},"/ja-jp/solutions/continuous-integration/",{"text":78,"config":115},{"href":83,"dataGaLocation":49,"dataGaName":116},"gitlab duo agent platform - product menu",{"text":118,"config":119},"ソースコード管理",{"href":120,"dataGaLocation":49,"dataGaName":121},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":123,"config":124},"自動化されたソフトウェアデリバリー",{"href":108,"dataGaLocation":49,"dataGaName":125},"Automated software delivery",{"title":127,"description":128,"link":129,"items":134},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":130},{"href":131,"dataGaName":132,"dataGaLocation":49,"icon":133},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[135,139,144],{"text":136,"config":137},"Application Security Testing",{"href":131,"dataGaName":138,"dataGaLocation":49},"Application security testing",{"text":140,"config":141},"ソフトウェアサプライチェーンの安全性",{"href":142,"dataGaLocation":49,"dataGaName":143},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":145,"config":146},"Software Compliance",{"href":147,"dataGaName":145,"dataGaLocation":49},"/ja-jp/solutions/software-compliance/",{"title":149,"link":150,"items":155},"測定",{"config":151},{"icon":152,"href":153,"dataGaName":154,"dataGaLocation":49},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[156,160,165],{"text":157,"config":158},"可視性と測定",{"href":153,"dataGaLocation":49,"dataGaName":159},"Visibility and Measurement",{"text":161,"config":162},"バリューストリーム管理",{"href":163,"dataGaLocation":49,"dataGaName":164},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":166,"config":167},"分析とインサイト",{"href":168,"dataGaLocation":49,"dataGaName":169},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":171,"items":172},"GitLabが活躍する場所",[173,178,183],{"text":174,"config":175},"Enterprise",{"href":176,"dataGaLocation":49,"dataGaName":177},"/ja-jp/enterprise/","enterprise",{"text":179,"config":180},"スモールビジネス",{"href":181,"dataGaLocation":49,"dataGaName":182},"/ja-jp/small-business/","small business",{"text":184,"config":185},"公共機関",{"href":186,"dataGaLocation":49,"dataGaName":187},"/ja-jp/solutions/public-sector/","public sector",{"text":189,"config":190},"価格",{"href":191,"dataGaName":192,"dataGaLocation":49,"dataNavLevelOne":192},"/ja-jp/pricing/","pricing",{"text":194,"config":195,"link":197,"lists":201,"feature":281},"関連リソース",{"dataNavLevelOne":196},"resources",{"text":198,"config":199},"すべてのリソースを表示",{"href":200,"dataGaName":196,"dataGaLocation":49},"/ja-jp/resources/",[202,235,253],{"title":203,"items":204},"はじめに",[205,210,215,220,225,230],{"text":206,"config":207},"インストール",{"href":208,"dataGaName":209,"dataGaLocation":49},"/ja-jp/install/","install",{"text":211,"config":212},"クイックスタートガイド",{"href":213,"dataGaName":214,"dataGaLocation":49},"/ja-jp/get-started/","quick setup checklists",{"text":216,"config":217},"学ぶ",{"href":218,"dataGaLocation":49,"dataGaName":219},"https://university.gitlab.com/","learn",{"text":221,"config":222},"製品ドキュメント",{"href":223,"dataGaName":224,"dataGaLocation":49},"https://docs.gitlab.com/","product documentation",{"text":226,"config":227},"ベストプラクティスビデオ",{"href":228,"dataGaName":229,"dataGaLocation":49},"/ja-jp/getting-started-videos/","best practice videos",{"text":231,"config":232},"インテグレーション",{"href":233,"dataGaName":234,"dataGaLocation":49},"/ja-jp/integrations/","integrations",{"title":236,"items":237},"検索する",[238,243,248],{"text":239,"config":240},"お客様成功事例",{"href":241,"dataGaName":242,"dataGaLocation":49},"/ja-jp/customers/","customer success stories",{"text":244,"config":245},"ブログ",{"href":246,"dataGaName":247,"dataGaLocation":49},"/ja-jp/blog/","blog",{"text":249,"config":250},"リモート",{"href":251,"dataGaName":252,"dataGaLocation":49},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":254,"items":255},"つなげる",[256,261,266,271,276],{"text":257,"config":258},"GitLabサービス",{"href":259,"dataGaName":260,"dataGaLocation":49},"/ja-jp/services/","services",{"text":262,"config":263},"コミュニティ",{"href":264,"dataGaName":265,"dataGaLocation":49},"/community/","community",{"text":267,"config":268},"フォーラム",{"href":269,"dataGaName":270,"dataGaLocation":49},"https://forum.gitlab.com/","forum",{"text":272,"config":273},"イベント",{"href":274,"dataGaName":275,"dataGaLocation":49},"/events/","events",{"text":277,"config":278},"パートナー",{"href":279,"dataGaName":280,"dataGaLocation":49},"/ja-jp/partners/","partners",{"backgroundColor":282,"textColor":283,"text":284,"image":285,"link":289},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":286,"config":287},"ソースプロモカード",{"src":288},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":290,"config":291},"最新情報を読む",{"href":292,"dataGaName":293,"dataGaLocation":49},"/ja-jp/the-source/","the source",{"text":295,"config":296,"lists":298},"会社情報",{"dataNavLevelOne":297},"company",[299],{"items":300},[301,306,312,314,319,324,329,334,339,344,349],{"text":302,"config":303},"GitLabについて",{"href":304,"dataGaName":305,"dataGaLocation":49},"/ja-jp/company/","about",{"text":307,"config":308,"footerGa":311},"採用情報",{"href":309,"dataGaName":310,"dataGaLocation":49},"/jobs/","jobs",{"dataGaName":310},{"text":272,"config":313},{"href":274,"dataGaName":275,"dataGaLocation":49},{"text":315,"config":316},"経営陣",{"href":317,"dataGaName":318,"dataGaLocation":49},"/company/team/e-group/","leadership",{"text":320,"config":321},"チーム",{"href":322,"dataGaName":323,"dataGaLocation":49},"/company/team/","team",{"text":325,"config":326},"ハンドブック",{"href":327,"dataGaName":328,"dataGaLocation":49},"https://handbook.gitlab.com/","handbook",{"text":330,"config":331},"投資家向け情報",{"href":332,"dataGaName":333,"dataGaLocation":49},"https://ir.gitlab.com/","investor relations",{"text":335,"config":336},"トラストセンター",{"href":337,"dataGaName":338,"dataGaLocation":49},"/ja-jp/security/","trust center",{"text":340,"config":341},"AI Transparency Center",{"href":342,"dataGaName":343,"dataGaLocation":49},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":345,"config":346},"ニュースレター",{"href":347,"dataGaName":348,"dataGaLocation":49},"/company/contact/#contact-forms","newsletter",{"text":350,"config":351},"プレス",{"href":352,"dataGaName":353,"dataGaLocation":49},"/press/","press",{"text":56,"config":355,"lists":356},{"dataNavLevelOne":297},[357],{"items":358},[359,362,367],{"text":56,"config":360},{"href":58,"dataGaName":361,"dataGaLocation":49},"talk to sales",{"text":363,"config":364},"サポートポータル",{"href":365,"dataGaName":366,"dataGaLocation":49},"https://support.gitlab.com","support portal",{"text":368,"config":369},"カスタマーポータル",{"href":370,"dataGaName":371,"dataGaLocation":49},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":373,"login":374,"suggestions":381},"閉じる",{"text":375,"link":376},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":377,"config":378},"GitLab.com",{"href":63,"dataGaName":379,"dataGaLocation":380},"search login","search",{"text":382,"default":383},"提案",[384,386,391,393,397,401],{"text":78,"config":385},{"href":83,"dataGaName":78,"dataGaLocation":380},{"text":387,"config":388},"コード提案（AI）",{"href":389,"dataGaName":390,"dataGaLocation":380},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":26,"config":392},{"href":113,"dataGaName":26,"dataGaLocation":380},{"text":394,"config":395},"GitLab on AWS",{"href":396,"dataGaName":394,"dataGaLocation":380},"/ja-jp/partners/technology-partners/aws/",{"text":398,"config":399},"GitLab on Google Cloud",{"href":400,"dataGaName":398,"dataGaLocation":380},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":402,"config":403},"GitLabを選ぶ理由",{"href":91,"dataGaName":404,"dataGaLocation":380},"Why GitLab?",{"freeTrial":406,"mobileIcon":410,"desktopIcon":415,"secondaryButton":418},{"text":51,"config":407},{"href":408,"dataGaName":54,"dataGaLocation":409},"https://gitlab.com/-/trials/new/","nav",{"altText":411,"config":412},"GitLabアイコン",{"src":413,"dataGaName":414,"dataGaLocation":409},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":411,"config":416},{"src":417,"dataGaName":414,"dataGaLocation":409},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":203,"config":419},{"href":420,"dataGaName":421,"dataGaLocation":409},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/compare/gitlab-vs-github/","get started",{"freeTrial":423,"mobileIcon":428,"desktopIcon":430},{"text":424,"config":425},"GitLab Duoの詳細について",{"href":426,"dataGaName":427,"dataGaLocation":409},"/ja-jp/gitlab-duo/","gitlab duo",{"altText":411,"config":429},{"src":413,"dataGaName":414,"dataGaLocation":409},{"altText":411,"config":431},{"src":417,"dataGaName":414,"dataGaLocation":409},{"freeTrial":433,"mobileIcon":438,"desktopIcon":440},{"text":434,"config":435},"料金ページに戻る",{"href":191,"dataGaName":436,"dataGaLocation":409,"icon":437},"back to pricing","GoBack",{"altText":411,"config":439},{"src":413,"dataGaName":414,"dataGaLocation":409},{"altText":411,"config":441},{"src":417,"dataGaName":414,"dataGaLocation":409},{"title":443,"button":444,"config":449},"エージェント型AIがソフトウェア配信をどのように変革するかをご覧ください",{"text":445,"config":446},"GitLab Transcendを今すぐ視聴",{"href":447,"dataGaName":448,"dataGaLocation":49},"/ja-jp/events/transcend/virtual/","transcend event",{"layout":450,"icon":451},"release","AiStar",{"data":453},{"text":454,"source":455,"edit":461,"contribute":466,"config":471,"items":476,"minimal":650},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":456,"config":457},"ページのソースを表示",{"href":458,"dataGaName":459,"dataGaLocation":460},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":462,"config":463},"このページを編集",{"href":464,"dataGaName":465,"dataGaLocation":460},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":467,"config":468},"ご協力をお願いします",{"href":469,"dataGaName":470,"dataGaLocation":460},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":472,"facebook":473,"youtube":474,"linkedin":475},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[477,500,554,584,619],{"title":67,"links":478,"subMenu":483},[479],{"text":480,"config":481},"DevSecOpsプラットフォーム",{"href":76,"dataGaName":482,"dataGaLocation":460},"devsecops platform",[484],{"title":189,"links":485},[486,490,495],{"text":487,"config":488},"プランの表示",{"href":191,"dataGaName":489,"dataGaLocation":460},"view plans",{"text":491,"config":492},"Premiumを選ぶ理由",{"href":493,"dataGaName":494,"dataGaLocation":460},"/ja-jp/pricing/premium/","why premium",{"text":496,"config":497},"Ultimateを選ぶ理由",{"href":498,"dataGaName":499,"dataGaLocation":460},"/ja-jp/pricing/ultimate/","why ultimate",{"title":501,"links":502},"ソリューション",[503,508,511,513,518,523,527,530,533,538,540,542,544,549],{"text":504,"config":505},"デジタルトランスフォーメーション",{"href":506,"dataGaName":507,"dataGaLocation":460},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":509,"config":510},"セキュリティとコンプライアンス",{"href":131,"dataGaName":138,"dataGaLocation":460},{"text":123,"config":512},{"href":108,"dataGaName":109,"dataGaLocation":460},{"text":514,"config":515},"アジャイル開発",{"href":516,"dataGaName":517,"dataGaLocation":460},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":519,"config":520},"クラウドトランスフォーメーション",{"href":521,"dataGaName":522,"dataGaLocation":460},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":524,"config":525},"SCM",{"href":120,"dataGaName":526,"dataGaLocation":460},"source code management",{"text":26,"config":528},{"href":113,"dataGaName":529,"dataGaLocation":460},"continuous integration & delivery",{"text":161,"config":531},{"href":163,"dataGaName":532,"dataGaLocation":460},"value stream management",{"text":534,"config":535},"GitOps",{"href":536,"dataGaName":537,"dataGaLocation":460},"/ja-jp/solutions/gitops/","gitops",{"text":174,"config":539},{"href":176,"dataGaName":177,"dataGaLocation":460},{"text":179,"config":541},{"href":181,"dataGaName":182,"dataGaLocation":460},{"text":184,"config":543},{"href":186,"dataGaName":187,"dataGaLocation":460},{"text":545,"config":546},"教育",{"href":547,"dataGaName":548,"dataGaLocation":460},"/ja-jp/solutions/education/","education",{"text":550,"config":551},"金融サービス",{"href":552,"dataGaName":553,"dataGaLocation":460},"/ja-jp/solutions/finance/","financial services",{"title":194,"links":555},[556,558,560,562,565,567,570,572,574,576,578,580,582],{"text":206,"config":557},{"href":208,"dataGaName":209,"dataGaLocation":460},{"text":211,"config":559},{"href":213,"dataGaName":214,"dataGaLocation":460},{"text":216,"config":561},{"href":218,"dataGaName":219,"dataGaLocation":460},{"text":221,"config":563},{"href":223,"dataGaName":564,"dataGaLocation":460},"docs",{"text":244,"config":566},{"href":246,"dataGaName":247},{"text":568,"config":569},"お客様の成功事例",{"href":241,"dataGaLocation":460},{"text":239,"config":571},{"href":241,"dataGaName":242,"dataGaLocation":460},{"text":249,"config":573},{"href":251,"dataGaName":252,"dataGaLocation":460},{"text":257,"config":575},{"href":259,"dataGaName":260,"dataGaLocation":460},{"text":262,"config":577},{"href":264,"dataGaName":265,"dataGaLocation":460},{"text":267,"config":579},{"href":269,"dataGaName":270,"dataGaLocation":460},{"text":272,"config":581},{"href":274,"dataGaName":275,"dataGaLocation":460},{"text":277,"config":583},{"href":279,"dataGaName":280,"dataGaLocation":460},{"title":585,"links":586},"Company",[587,589,591,593,595,597,599,603,608,610,612,614],{"text":302,"config":588},{"href":304,"dataGaName":297,"dataGaLocation":460},{"text":307,"config":590},{"href":309,"dataGaName":310,"dataGaLocation":460},{"text":315,"config":592},{"href":317,"dataGaName":318,"dataGaLocation":460},{"text":320,"config":594},{"href":322,"dataGaName":323,"dataGaLocation":460},{"text":325,"config":596},{"href":327,"dataGaName":328,"dataGaLocation":460},{"text":330,"config":598},{"href":332,"dataGaName":333,"dataGaLocation":460},{"text":600,"config":601},"Sustainability",{"href":602,"dataGaName":600,"dataGaLocation":460},"/sustainability/",{"text":604,"config":605},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":606,"dataGaName":607,"dataGaLocation":460},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":335,"config":609},{"href":337,"dataGaName":338,"dataGaLocation":460},{"text":345,"config":611},{"href":347,"dataGaName":348,"dataGaLocation":460},{"text":350,"config":613},{"href":352,"dataGaName":353,"dataGaLocation":460},{"text":615,"config":616},"現代奴隷制の透明性に関する声明",{"href":617,"dataGaName":618,"dataGaLocation":460},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":56,"links":620},[621,623,628,630,635,640,645],{"text":56,"config":622},{"href":58,"dataGaName":59,"dataGaLocation":460},{"text":624,"config":625},"サポートを受ける",{"href":626,"dataGaName":627,"dataGaLocation":460},"/support/","get help",{"text":368,"config":629},{"href":370,"dataGaName":371,"dataGaLocation":460},{"text":631,"config":632},"ステータス",{"href":633,"dataGaName":634,"dataGaLocation":460},"https://status.gitlab.com/","status",{"text":636,"config":637},"利用規約",{"href":638,"dataGaName":639,"dataGaLocation":460},"/terms/","terms of use",{"text":641,"config":642},"プライバシーに関する声明",{"href":643,"dataGaName":644,"dataGaLocation":460},"/ja-jp/privacy/","privacy statement",{"text":646,"config":647},"Cookieの設定",{"dataGaName":648,"dataGaLocation":460,"id":649,"isOneTrustButton":32},"cookie preferences","ot-sdk-btn",{"items":651},[652,654,656],{"text":636,"config":653},{"href":638,"dataGaName":639,"dataGaLocation":460},{"text":641,"config":655},{"href":643,"dataGaName":644,"dataGaLocation":460},{"text":646,"config":657},{"dataGaName":648,"dataGaLocation":460,"id":649,"isOneTrustButton":32},[659,672],{"id":660,"title":19,"body":9,"config":661,"content":663,"description":9,"extension":30,"meta":667,"navigation":32,"path":668,"seo":669,"stem":670,"__hash__":671},"blogAuthors/en-us/blog/authors/benjamin-skierlak.yml",{"template":662},"BlogAuthor",{"name":19,"config":664},{"headshot":665,"ctfId":666},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659471/Blog/Author%20Headshots/Benjamin_Skierlak_headshot.png","Kzp6pkUjPORYYMoeLFPRf",{},"/en-us/blog/authors/benjamin-skierlak",{},"en-us/blog/authors/benjamin-skierlak","RbLU9KGFtah9Juo58JyxfHHYNIU4fyzzOUb5p7-fubo",{"id":673,"title":20,"body":9,"config":674,"content":675,"description":9,"extension":30,"meta":679,"navigation":32,"path":680,"seo":681,"stem":682,"__hash__":683},"blogAuthors/en-us/blog/authors/james-wormwell.yml",{"template":662},{"name":20,"config":676},{"headshot":677,"ctfId":678},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659474/Blog/Author%20Headshots/james_wormwell_headshot.png","CPPijHb0Op5C5aVcvsOEf",{},"/en-us/blog/authors/james-wormwell",{},"en-us/blog/authors/james-wormwell","n6G4XENUWxgqOdCgfG0ECu0Uqj7qOS9zr3Rl8ouF49M",[685,700,715],{"content":686,"config":698},{"heroImage":687,"body":688,"authors":689,"updatedDate":691,"date":692,"title":693,"tags":694,"description":697,"category":10},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1771384863/o1x0dquocjay8pny2i6i.png","本ブログは、[GitLab 18.9 Release](https://about.gitlab.com/releases/2026/02/19/gitlab-18-9-released/)の抄訳です。内容に相違がある場合は、原文が優先されます。\n\n## セルフホスト型AIモデルを搭載したGitLab 18.9をリリース\n\nこのたび、GitLab 18.9のリリースをお知らせします。今回のリリースでは、クラウドライセンス向けにGitLab Duo Agent Platformのセルフホストモデルが一般提供を開始しました。そのほか、GitLab Duo Agent Platformによる脆弱性の修正、折りたたみ可能なファイルツリーによるリポジトリナビゲーション、ファイルからのCI/CDインプットのインクルードなど、多数の機能が追加されています。\n\nGitLab Duoを初めてお使いの方へ：GitLab Duo Agent Platformが利用できるUltimateの無料トライアルが、GitLab.comおよびGitLab Self-Managedの両方でご利用いただけるようになりました。\n\n今回ご紹介した機能は、GitLab 18.9における25件以上の改善点のほんの一部です。以下で、すべての新機能と改善点をご確認ください。\n\nGitLabコミュニティの皆さま、GitLab 18.9に530件以上のコントリビュートをお寄せいただき、誠にありがとうございます。「誰もがコントリビュートできる」—これがGitLabの理念です。皆さまのご貢献があってこそのリリースです。\n\nGitLab 18.9には、GitLabコミュニティのユーザーから530件ものコントリビュートがありました。ありがとうございました！GitLabは[誰もがコントリビュートできる](https://about.gitlab.com/community/contribute/)プラットフォームであり、今回のリリースはユーザーのみなさまの協力なしには実現しませんでした。\n\n来月のリリースで予定されている内容を先取りするには、[What’s newページ](https://about.gitlab.com/releases/whats-new/)をご覧ください。\n\n![notable-contributor-logo](https://about.gitlab.com/images/notable-contributor-logo.svg)\n\n## **今月の[注目コントリビューター](https://contributors.gitlab.com/docs/notable-contributors)は、[Pooja Ghanghas](https://gitlab.com/poojaghanghas479)さんです。**\n\nPoojaさんは、GitLabにおけるレガシーのドロップダウンコンポーネントをモダンなアーキテクチャへ移行する取り組みに継続的に貢献されています。この移行作業は、旧来と新しいコンポーネントシステムの双方を深く理解した上で、細部にまで注意を払う必要があります。[差分ファイルヘッダー](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/189621)、[コードブロックのバブルメニュー](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/194129)、[オンコールスケジュールのローテーション担当者コンポーネント](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/186247)、[新しいリソースドロップダウン](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209598)など、複数の移行にわたって一貫して高品質な成果物を届けてくれました。\n\n[Peter Hegma](https://gitlab.com/peterhegman)（GitLab Tenant Scale::Organizationsのスタッフフロントエンドエンジニア）は、Poojaさんをこの表彰に推薦し、「これらの移行はかなり難しい作業です。それを数多くこなしてくれました。コントリビュートに心から感謝します」と述べています。\n\n移行作業に加え、Poojaさんは[マイルストーンやイテレーションへのステータス追加](https://gitlab.com/gitlab-org/gitlab/-/issues/524100)という機能開発にも取り組み、マージに向けて多大な努力を重ねました。[Marc Saleiko](https://gitlab.com/msaleiko)（GitLab Plan:Project Managementのスタッフフルスタックエンジニア）は「これは価値あるコントリビュートであり、この機能の提供をすばらしい形でやり遂げてくれました」と評価しています。Poojaさん自身も「仕上がりを誇りに思っており、大きな学びになりました」と振り返っています。\n\nさらに、コードベース全体にわたる多数のバグ修正やメンテナンス改善にも貢献しています。これらの取り組みはGitLabのユーザーインターフェースの保守性と一貫性を高め、コントリビューターとチームメンバーの双方が機能を構築・維持しやすい環境づくりに直結しています。GitLabフロントエンドアーキテクチャを着実に前進させてくれているPoojaさんに、心より感謝申し上げます。\n\nPoojaさんのコントリビュートの詳細については、[GitLabプロフィール](https://gitlab.com/poojaghanghas479)をご覧ください。\n\n## GitLab 18.9の主要な改善点\n\n### GitLab Duo Agent Platformのセルフホストモデル、クラウドライセンス向けに一般提供開始\n\n> Self-Managed: Premium、Ultimate\n\nGitLab Duo Agent Platformが、クラウドライセンスをお持ちのGitLab Self-Managedのお客様向けに一般提供開始（GA）となりました。課金は[使用量ベース](https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/)です。\n\n管理者は、GitLab Duo Agent Platformで使用する[互換モデル](https://docs.gitlab.com/ja-jp/administration/gitlab_duo_self_hosted/supported_models_and_hardware_requirements/#compatible-models)を設定できます。AWS BedrockまたはAzure OpenAIをご利用の場合は、Anthropic ClaudeまたはOpenAI GPTモデルの設定も可能です。\n\nまだUltimateをご利用でない方は、[Duo Agent Platformが利用できる無料トライアル](https://about.gitlab.com/releases/2026/02/19/gitlab-18-9-released/#gitlab-duo-agent-platform-available-in-ultimate-trials)をお試しください[](https://about.gitlab.com/releases/2026/02/19/gitlab-18-9-released/#gitlab-duo-agent-platform-available-in-ultimate-trials)。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/administration/gitlab_duo_self_hosted/#gitLab-duo-agent-platform)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/work_items/20949)\n\n![ai-powered-selfhosted-duo-agent-platform](https://about.gitlab.com/images/18_9/ai-powered-selfhosted-duo-agent-platform.png)\n\n### GitLab Duo Agent Platformによる脆弱性の修正（ベータ版）\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\nアプリケーションセキュリティにおいて、SASTの脆弱性のトリアージと修正は特に時間を要する作業の一つです。脆弱性を特定した後、開発者は検出内容を理解し、影響箇所を特定して適切な修正を実装しなければなりません。いずれのステップにも、時間と専門知識が必要です。\n\nGitLab 18.9では、エージェント型のSAST脆弱性修正機能を導入します。修正をトリガーすると、GitLab Duoは自律的に検出内容を分析し、周辺のコードコンテキストを推論して、コンテキストに即した修正を生成します。マージリクエストの作成まで、手動の介入は不要です。\n\n**主な機能：**\n\n* **エージェント型マルチステップ修正**：単一のコード提案ではなく、GitLab Duo Agent Platformが脆弱性を推論してコードベースを評価し、根拠のある修正を生成します。\n* **マージリクエストの自動作成**：重大度が「Critical」および「High」のSAST脆弱性に対して、提案されたコード修正を含むレビュー可能なマージリクエストを自動生成します。\n* **品質スコアリング**：生成された修正には品質評価が付与され、レビュアーが提案の信頼度を素早く判断できます。\n\n本機能は、脆弱性レポートおよび個別の脆弱性詳細ページから利用できます。詳細ページから直接修正をトリガーすることも可能です。\n\nUltimateのお客様向けに無料ベータ版として提供しています。[イシュー585626](https://gitlab.com/gitlab-org/gitlab/-/work_items/585626)よりフィードバックをお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/administration/gitlab_duo_self_hosted/#gitLab-duo-agent-platform)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/work_items/20949)\n\n![sast_vulnerability_resolution_with_duo](https://about.gitlab.com/images/18_9/sast_vulnerability_resolution_with_duo.png)\n\n### 折りたたみ可能なファイルツリーによるリポジトリのナビゲーション\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n折りたたみ可能なファイルツリーで、リポジトリのファイルを効率よく閲覧できるようになりました。プロジェクト構造を俯瞰しながら、ディレクトリをインラインで展開・折りたたんだり、リポジトリ内の離れた場所にあるファイルへ素早く移動したりすることができます。作業中のコンテキストを保ちながらナビゲーションできる点も特長です。\n\nファイルツリーは、リポジトリのファイルやディレクトリを表示する際にサイドバーとして表示されます。幅は自由に調整可能で、キーボードショートカットで表示・非表示を切り替えたり、名前や拡張子でファイルを絞り込んだりすることもできます。ファイルツリーは常に現在の場所と同期しており、メインエリアでファイルを選択すると、そのファイルが表示されるようにツリーが更新されます。\n\n既存のリポジトリ構造やファイル構成に変更はありません。ファイル間の移動に必要なページ読み込み回数が減るため、小規模プロジェクトから数千のファイルを持つ大規模コードベースまで快適に利用できます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/project/repository/files/file_tree_browser/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/17781)\n\n![create-repository-file-tree-navigation](https://about.gitlab.com/images/18_9/create-repository-file-tree-navigation.png)\n\n### ファイルからのCI/CDインプットのインクルード\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\nこれまで、パイプラインのCI/CDインプットはパイプラインの`spec`セクション内に直接定義する必要がありました。この制約により、インプット設定を複数のプロジェクトで再利用することが難しい状況でした。\n\n今回のリリースから、使い慣れた`include`キーワードを使って外部ファイルからインプット定義を読み込めるようになりました。インプットの定義を一箇所にまとめて管理できるため、多数のプロジェクトやパイプラインをまたいだ運用が格段に楽になります。インプット設定の一元管理はもちろん、外部ソースからインプット値を動的に制御することも可能です。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/ci/inputs/#use-inputs-from-external-files)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/415636)\n\n![inputs_file](https://about.gitlab.com/images/18_9/inputs_file.png)\n\n### GitLab.comにおけるWebベースのコミット署名\n\n> GitLab.com: Free、Premium、Ultimate\n\nコードの整合性を保ち、コンプライアンス要件を満たすためには、コミットへの暗号化署名が欠かせません。これまでWebベースのコミット署名はGitLab Self-Managedでのみ利用可能でしたが、今回GitLab.comでもサポートされるようになりました。\n\nグループまたはプロジェクトで有効にすると、GitLabのWebインターフェース経由で作成されたコミットにGitLabの署名キーが自動的に付与され、**検証済み**バッジが表示されます。リポジトリの真正性を暗号学的に証明できます。\n\n**主な詳細：**\n\n* グループまたはプロジェクトの設定から、要件に合わせて有効化できます。\n* 有効にすると、Web IDEでの編集、マージ、API操作などすべてのWebベースのコミットが自動的に署名されます。\n* GitLab.comのセキュリティ機能がGitLab Self-Managedと同等になり、組織全体への包括的なコミット署名ポリシー適用の基盤が整います。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/project/repository/signed_commits/web_commits/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/work_items/17775)\n\n![create-web-commit-signing-gitlab-com](https://about.gitlab.com/images/18_9/create-web-commit-signing-gitlab-com.png)\n\n### コンテナ仮想レジストリが利用可能に（ベータ版）\n\n> GitLab.com: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\n\nモダンなコンテナ開発では、Docker Hub、Harbor、Quayといった複数のレジストリやプライベートレジストリからイメージを取得する必要があります。コンテナ仮想レジストリがない場合、プラットフォームエンジニアはプロジェクトとCI/CDパイプラインごとに個別の認証設定を行わなければならず、設定の複雑化やプル速度の低下、セキュリティポリシーの不統一といった課題が生じます。\n\nコンテナ仮想レジストリは、複数の上流レジストリを単一のエンドポイントに集約することで、これらの課題を解消します。Docker Hub、Harbor、Quayなどを1つのURLで管理でき、長期間有効なトークン認証も一元的に設定できます。インテリジェントなキャッシングによりプルのパフォーマンスが向上し、GitLabの認証システムとの統合によってアクセス制御と監査ログも一元化されます。\n\nコンテナ仮想レジストリAPIは現在、GitLab PremiumおよびUltimateのお客様向けにベータ版として提供されています。ベータ版では、GitLab APIを使ったコンテナ仮想レジストリの作成、共有可能な設定での複数上流ソースの追加、仮想レジストリ経由でのコンテナイメージの取得が可能です。なお、IAM認証が必要なレジストリは現時点では未対応です。クラウドプロバイダーのIAM認証対応については、こちらのエピックで進捗を追跡しています。\n\n[GitLab.com](http://gitlab.com)では、この機能はフィーチャーフラグで管理されています。アクセスのリクエストやフィードバックは、フィードバックイシューへのコメントでお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/packages/virtual_registry/container/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/work_items/20820)\n\n\u003Ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/HD8dS8oeDQA?si=PPZyB1bSg8xu4E8y\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen>\u003C/iframe>\n\n## GitLab 18.9のその他の改善点\n\n### Rapid Diffsによるコミット変更のパフォーマンス改善\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n変更ファイルが多かったり変更量が大きかったりするコミットのレビューは、これまで時間がかかることがありました。Rapid Diffs技術がコミットページ（`/-/commits/\u003CSHA>`）にも適用され、ページの読み込み速度の向上、スムーズなスクロール、よりレスポンシブな操作感を実現しています。\n\nRapid Diffsでは、以下の点が改善されています。\n\n* ページネーションが不要になり、連続してレビューできます。\n* 初期読み込みが高速化され、すぐにコードの確認を始められます。\n* 新しいファイルブラウザを搭載したインターフェースで、ファイル間のナビゲーションが快適になりました。\n* 変更ファイルが多い場合でも、レスポンシブな操作感を維持します。\n\n既存の機能はすべて引き続き利用できます。Rapid DiffsがGitLabのほかのエリアにも順次展開されるにつれ、同様のパフォーマンス向上がもたらされる予定です。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/project/repository/commits/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/work_items/17804)\n\n### インポートAPIでのBitbucket Cloud APIトークンのサポート\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\nGitLabのインポートAPIがBitbucket Cloud APIトークンに対応しました。Bitbucket Cloudからのリポジトリインポートを、より安全な方法で行えるようになります。\n\n[AtlassianはアプリパスワードをAPIトークンに移行する方針](https://www.atlassian.com/blog/bitbucket/bitbucket-cloud-transitions-to-api-tokens-enhancing-security-with-app-password-deprecation)を打ち出しており、GitLabでも19.0にてアプリパスワードのサポートを終了する予定です。\n\nなお、GitLab UIからBitbucket Cloudへのインポートは、この変更の影響を受けません。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/api/import/#import-repository-from-bitbucket-cloud)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/work_items/575583)\n\n### CI/CDカタログのコンポーネント分析\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\nこれまで、CI/CDカタログのコンポーネントプロジェクトが組織内でどのように利用されているかを把握する手段がありませんでした。利用数や導入状況をハイレベルで確認できるようになり、どのコンポーネントプロジェクトが最も価値をもたらしているかを把握し、カタログへの投資を最適化するための判断材料として活用できます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/ci/components/#view-catalog-resource-analytics)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/579458)\n\n![catalog](https://about.gitlab.com/images/18_9/catalog.png)\n\n### マージリクエストで子パイプラインのセキュリティレポートを表示\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\nマージリクエストのウィジェットから、子パイプラインのセキュリティ・コンプライアンスレポートを直接確認できるようになりました。これまでは複数のパイプラインを手動で確認する必要があり、モノレポや複雑なテスト構成では非効率でした。\n\n今回の改善により、マージリクエストウィジェットに子パイプラインのレポートが親パイプラインの結果と並んで表示されます。各子パイプラインのレポートは個別に表示され、アーティファクトのダウンロードも可能です。すべてのセキュリティチェックを一元的に確認できるため、問題の調査にかかる時間が大幅に短縮され、親子パイプラインを使った開発でのマージリクエストレビューをスムーズに進められます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/ci/pipelines/downstream_pipelines/#view-child-pipeline-reports-in-merge-requests)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18377)\n\n![show_security_report_child_pipelines_in_mr](https://about.gitlab.com/images/18_9/show_security_report_child_pipelines_in_mr.png)\n\n### SBOMを使用した依存関係スキャンで Python `requirements.txt` マニフェストファイルに対応\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n[SBOMを使用したGitLabの依存関係スキャン](https://docs.gitlab.com/ja-jp/user/application_security/dependency_scanning/dependency_scanning_sbom/)が、Pythonの`requirements.txt`マニフェストファイルのスキャンに対応しました。これまでPythonプロジェクトの依存関係スキャンにはロックファイルが必要でしたが、ロックファイルが存在しない場合、アナライザーが自動的に`requirements.txt`ファイルへのフォールバックを行い、直接依存関係のみを抽出して脆弱性分析の対象とするようになりました。ロックファイルなしでも依存関係スキャンを有効化しやすくなります。\n\nマニフェストへのフォールバックを有効にするには、CI/CD変数`DS_ENABLE_MANIFEST_FALLBACK`を`\"true\"`に設定してください。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/dependency_scanning/dependency_scanning_sbom/#manifest-fallback)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/586921)\n\n### セキュリティ属性\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n[GitLab 18.6でベータ版として導入されたセキュリティ属性](https://about.gitlab.com/releases/2025/11/20/gitlab-18-6-released/#security-attributes-beta)が、一般提供開始（GA）となりました。\n\nセキュリティ属性を使うと、セキュリティチームはプロジェクトにビジネスコンテキストを付与できます。対象となる属性は、ビジネスへの影響度、アプリケーション、ビジネスユニット、インターネット公開状況、所在地などです。また、組織独自の分類体系に合わせたカスタム属性カテゴリの作成も可能です。これらの属性を活用することで、リスクポジションや組織コンテキストに基づいてセキュリティインベントリ内の項目をフィルタリング・優先順位付けできます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/attributes/)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/19597)\n\n![security-attributes](https://about.gitlab.com/images/18_9/security-attributes.png)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/19597)\n\n### GitLab Duo Agent PlatformがUltimateトライアルで利用可能に\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\n\nGitLabを評価中のチームが、複雑な開発ワークフローの自動化や手動タスクの削減を実現するエージェント型AI機能を試せるようになりました。GitLab Ultimateのトライアルに申し込むと、ユーザーあたり24評価クレジット付きでDuo Agent Platformにアクセスでき、30日間の評価期間中に自律的なタスク実行やマルチステップのワークフローオーケストレーションを実際に体験できます。評価クレジットはプロビジョニング日から30日間有効です。開始前にチームの準備状況をご確認ください。\n\n[こちらから無料トライアルを開始できます。](https://gitlab.com/-/trial_registrations/new)現在の有料カスタマーは、担当アカウントチームを通じて評価クレジットを取得できます。詳細は[セールスチーム](https://about.gitlab.com/ja-jp/sales/)にお問い合わせください。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/subscriptions/free_trials/#gitlab-duo-agent-platform-trials)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/20353)\n\n### グループとそのコンテンツのアーカイブ\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n完了したイニシアチブや放棄されたプロジェクトの管理が楽になりました。サブグループとプロジェクトを含むグループ全体を、ひとつの操作でアーカイブできるようになりました。プロジェクトを一つひとつ手動でアーカイブする必要はなくなります。\n\nグループをアーカイブすると、以下の動作が行われます。\n\n* 配下のサブグループとプロジェクトがすべて自動的にアーカイブされます。\n* アーカイブされたコンテンツは「非アクティブ」タブに移動し、ステータスバッジで明示されます。\n* グループのデータは参照または復元のために読み取り専用で引き続きアクセス可能です。\n* アーカイブされたグループとそのコンテンツ全体で書き込み権限が無効になります。\n\n**設定**ページからだけでなく、一覧ビューのアクションメニューからも直接グループやプロジェクトをアーカイブできます。複数の画面を移動する手間はありません。アクティブな作業と非アクティブな作業を明確に分離しながら管理オーバーヘッドを大幅に削減する、多くのユーザーから要望されていた機能です。[エピック18616](https://gitlab.com/groups/gitlab-org/-/epics/18616)でフィードバックをお寄せください。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/group/manage/#archive-a-group)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/15019)\n\n![Tenant_Scale-Group_Archiving](https://about.gitlab.com/images/18_9/Tenant_Scale-Group_Archiving.png)\n\n### JetBrains IDEでSelf-ManagedおよびDedicatedへのOAuth認証に対応\n\n> Self-Managed: Premium、Ultimate、Duo Core、Duo Pro、Duo Enterprise\\\n> GitLab Dedicated: Ultimate、Duo Core、Duo Pro、Duo Enterprise\\\n> GitLab Dedicated for Government: Ultimate、Duo Core、Duo Pro、Duo Enterprise\n\nJetBrains IDE向けGitLab DuoプラグインがGitLab Self-ManagedおよびGitLab DedicatedへのOAuth認証に対応しました。すべてのJetBrainsユーザーが、より速く安全なサインイン体験を利用できるようになります。個人アクセストークンは不要です。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/editor_extensions/jetbrains_ide/setup/#authenticate-with-gitlab)\\\n[イシュー](https://gitlab.com/gitlab-org/editor-extensions/gitlab-jetbrains-plugin/-/issues/1337)\\\n[マージリクエスト](https://gitlab.com/gitlab-org/editor-extensions/gitlab-jetbrains-plugin/-/merge_requests/2287)\n\n### HelmチャートデプロイメントでZero Downtime Upgradesに対応\n\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab HelmチャートデプロイメントでのZero Downtime Upgradesが正式にサポートされました。\n\nエンタープライズのお客様にとって、DevSecOpsプラットフォームの常時稼働は欠かせない要件であり、アップグレード時のダウンタイムは重大な運用上の懸念事項です。これまでZero Downtime UpgradesはLinuxパッケージベースの高可用性デプロイメントのみ対応しており、クラウドネイティブなKubernetesデプロイメントの方がインフラ戦略に適している場合でも、多くのお客様がVM型アーキテクチャを選択せざるを得ない状況でした。\n\nGitLabでは、自社のCloud Native HybridのSaaSインスタンスに対して、ダウンタイムなしでのアップグレードを長年実施してきました。今回のリリースで、Kubernetes上でGitLabを運用するSelf-Managedのお客様にも同様の運用体験を提供できるようになります。\n\nアップグレード手順は包括的なテストを経て、完全にドキュメント化されています。バージョンアップグレード中も稼働を維持できるという安心感とともにお使いいただけます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/charts/installation/upgrade/#upgrade-with-zero-downtime)\\\n[エピック](https://gitlab.com/groups/gitlab-com/gl-infra/software-delivery/-/epics/16)\n\n### エンタープライズユーザーの個人スニペット作成を制限\n\n> GitLab.com: Premium、Ultimate\n\nGitLab.comを利用する組織が、エンタープライズユーザーによる個人スニペットへの機密コードの誤った公開を防げるようになりました。これまで、ユーザーが個人ネームスペースにスニペットを作成することを制限する手段がなく、スニペットが意図せずパブリックに設定されるとセキュリティリスクになる可能性がありました。\n\nグループオーナーがエンタープライズユーザーの個人スニペット作成を制限できるようになり、コードの共有先に対するより厳密な管理が可能になります。制限が有効な場合、エンタープライズユーザーは個人ネームスペースにスニペットを作成できません。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/group/manage/#restrict-personal-snippets-for-enterprise-users)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18298)\n\n![create-allow-personal-snippets-setting](https://about.gitlab.com/images/18_9/create-allow-personal-snippets-setting.png)\n\n[](https://gitlab.com/groups/gitlab-org/-/epics/18298)\n\n### CIジョブログへのタイムスタンプ追加\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\nCIジョブログの各行にタイムスタンプが表示されるようになりました。パフォーマンスのボトルネックの特定や、長時間実行されているジョブのデバッグに役立ちます。タイムスタンプはUTC形式で表示されます。パフォーマンス問題のトラブルシューティング、ボトルネックの特定、特定のビルドステップの所要時間計測などにご活用ください。GitLab Self-ManagedではGitLab Runner 18.7以降が必要です。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/ci/jobs/job_logs/#timestamps)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/202293)\n\n![ci_job_log_timestamp](https://about.gitlab.com/images/18_9/ci_job_log_timestamp.png)\n\n### プロジェクトのCI/CDジョブメトリクスを表示（限定提供）\n\n> GitLab.com: Premium、Ultimate\\\n> Self-Managed: Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\nGitLab CI/CD analyticsでCI/CDパイプラインとCI/CDジョブのパフォーマンストレンドが統合されました。非効率または問題のあるCI/CDジョブを開発者が素早く特定できるようになります。これらの機能はGitLab UIに直接組み込まれており、開発チームの速度と全体的な生産性に大きく影響するCI/CDのパフォーマンス問題を、文脈を保ちながら特定・修正できます。プラットフォーム管理者にとっては、このビューのCI/CDジョブデータにより、エンタープライズ規模のGitLab運用時に外部またはカスタムのCI/CD監視ソリューションへの依存を減らすことができます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/analytics/ci_cd_analytics/#cicd-job-performance-metrics)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/18548)\n\n![ci_analytics_job_performance](https://about.gitlab.com/images/18_9/ci_analytics_job_performance.png)\n\n### SBOMを使用した依存関係スキャンでJava `pom.xml` マニフェストファイルに対応\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n[SBOMを使用したGitLabの依存関係スキャン](https://docs.gitlab.com/ja-jp/user/application_security/dependency_scanning/dependency_scanning_sbom/)が、JavaのMavenプロジェクト向けに`pom.xml`マニフェストファイルのスキャンに対応しました。これまでMavenを使用するJavaプロジェクトの依存関係スキャンにはグラフファイルが必要でしたが、グラフファイルが存在しない場合、アナライザーが自動的に`pom.xml`ファイルへのフォールバックを行い、直接依存関係のみを抽出して脆弱性分析の対象とするようになりました。グラフファイルなしでも依存関係スキャンを有効化しやすくなります。\n\nマニフェストへのフォールバックを有効にするには、CI/CD変数`DS_ENABLE_MANIFEST_FALLBACK`を`\"true\"`に設定してください。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/dependency_scanning/dependency_scanning_sbom/#manifest-fallback)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/585886)\n\n### セキュリティガバナンスと設定の一元化\n\n> GitLab.com: Ultimate\\\n> Self-Managed: Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n組織全体のセキュリティスキャナーのカバレッジを管理・可視化できるようになりました。今回のリリースでは、シークレット検出プロファイルを皮切りに、セキュリティ設定プロファイルが導入されます。セキュリティチームが組織全体を大規模にセキュアにするための、より強力なコマンドセンターが提供されます。\n\n**プロファイルベースのセキュリティ設定**\n\n各プロジェクトのYAMLファイルを手動で編集する代わりに、事前設定済みのセキュリティ設定プロファイルを活用できます。主なメリットは以下のとおりです。\n\n* **標準化されたガバナンス**：事前設定済みのプロファイルが、業務を妨げることなく適切な境界を設けます。カスタムロール設定を必要とせず、セキュリティのベストプラクティスを標準化して適用できます。\n* **スケーラブルな管理**：ひとつの操作で、数百から数千のプロジェクトに同じプロファイルを適用できます。\n\nシークレット検出プロファイルは、最初に提供されるセキュリティ設定プロファイルです。以下のメリットがあります。\n\n* リポジトリへのシークレットのコミットを積極的に検知し、ブロックします。\n* 開発ワークフロー全体にわたるシークレット検出を、1つのプロファイルで管理できます。トリガータイプごとに個別の設定を管理する必要はありません。\n\n**強化されたセキュリティインベントリ**\n\nセキュリティインベントリが、各グループのセキュリティポスチャを評価するための主要なダッシュボードとして強化されました。\n\n* **グループとプロジェクトの階層表示**：明確なアイコンでサブグループとプロジェクトを区別して表示できます。\n* **一括アクション**：新しい一括アクションメニューにより、選択したすべてのプロジェクトとサブグループに対してセキュリティスキャナープロファイルの適用や無効化を一括で行えます。\n* **カバレッジステータスの可視化**：色分けされたステータスバー（有効、無効、失敗）とツールチップで、カバレッジのギャップをすぐに把握できます。\n* **プロファイルステータスのインジケーター**：プロファイルの詳細で利用可能なトリガータイプを確認できます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/configuration/security_configuration_profiles)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16204)\n\n### セキュリティダッシュボード：「時間経過による脆弱性の推移」チャートの改善\n\n> GitLab.com: Free、Premium、Ultimate\\\n> Self-Managed: Free、Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\\\n> GitLab Dedicated for Government: Ultimate\n\n「時間経過による脆弱性の推移」チャートが更新され、脆弱性インベントリのより正確な状況を把握できるようになりました。\n\n以前のチャートには検出されなくなった脆弱性も含まれており、アクティブな脆弱性の実態を正確に反映していない数値が表示されることがありました。\n\n一部のケースで件数にわずかな変動が生じる可能性がある2件の追加問題も把握しています。最新情報は[イシュー590022](https://gitlab.com/gitlab-org/gitlab/-/issues/590022)および[590018](https://gitlab.com/gitlab-org/gitlab/-/issues/590018)をご確認ください。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/application_security/security_dashboard/#vulnerabilities-over-time)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/work_items/19780)\n\n### Minimal Accessユーザーの課金対象外化\n\n> Self-Managed: Premium\n\n以前は、GitLab Self-Managed PremiumでIDプロバイダーを使ってユーザーのプロビジョニングを自動化している組織で、問題が発生する可能性がありました。ライセンスのシート上限を超えてユーザーを追加しようとすると、管理者はアクティブなアクセスを必要としないユーザーのために追加シートを購入するか、手動で対処してエラーを防ぐかを選択しなければなりませんでした。\n\nGitLab Self-Managed PremiumサブスクリプションでMinimal Accessロールのユーザーが課金対象のシートとしてカウントされなくなりました。GitLab.com Premium、GitLab.com Ultimate、GitLab Self-Managed UltimateにおけるMinimal Accessの扱いに統一されます。この変更により[制限アクセス](https://docs.gitlab.com/ja-jp/administration/settings/sign_up_restrictions/#restricted-access)機能が有効になります。この機能は、IDプロバイダーの同期時にシート上限を超えるユーザーに自動的にMinimal Accessロールを割り当てます。予期しない追加課金や手動対応なしに、同期がスムーズに継続されるようになります。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/user/permissions/#users-with-minimal-access)\\\n[イシュー](https://gitlab.com/gitlab-org/gitlab/-/issues/584275)\n\n### プライマリサイトのGeoデータ管理ビュー\n\n> Self-Managed: Premium、Ultimate\\\n> GitLab Dedicated: Ultimate\n\n新しいデータ管理ビューにより、詳細な検証ステータス情報がプライマリGeoサイトで確認できるようになりました。プライマリサイトから直接、データの整合性のトラブルシューティングと検証が可能になり、基本的な検証やトラブルシューティング作業のためにセカンダリサイトにアクセスする必要がなくなります。\n\n以前は、この検証ステータスはセカンダリサイトのUIからのみ確認できました。プライマリサイトのデータ管理ビューでは、以下のことができます。\n\n* プライマリサイトから、すべてのレプリカブルデータタイプの詳細な検証ステータスを確認できます。\n* プライマリUIから直接、データのサニタイズとトラブルシューティング作業を実行できます。\n* セカンダリサイトを追加する前に、プライマリサイトでGeoの設定を確認・検証できます。\n\nこの機能強化は、UIによるセルフサービス型トラブルシューティングの実現に向けた第一歩です。定期的なメンテナンスや問題解決のために複数サイトにアクセスする必要が減っていきます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/administration/admin_area/#data-management)\\\n[エピック](https://gitlab.com/groups/gitlab-org/-/epics/16554)\n\n![geo_new_data_management_view](https://about.gitlab.com/images/18_9/geo_new_data_management_view.png)\n\n### RedisのオプションとしてValkey（ベータ版）\n\n> Self-Managed: Free、Premium、Ultimate\n\nGitLab 18.9から、LinuxパッケージにRedisのオプション置き換えとしてValkeyがバンドルされます。RedisはAGPLv3にライセンスを変更しましたが、オープンソース利用者には適していません。GitLab Self-Managedのお客様のセキュリティと保守性を確保するため、GitLabはBSDライセンスを維持するコミュニティ主導のフォーク版であるValkeyへの移行を進めています。\n\n**移行スケジュール：**\n\n* **GitLab 18.9（今回のリリース）**：ValkeyはオプトインのRedis代替として（ベータ版）バンドルされます。お客様の都合の良いタイミングでRedisからValkeyに切り替えられます。Valkey Sentinelのサポートも含まれます。\n* **GitLab 19.0（2026年5月）**：Valkeyがデフォルトになり、LinuxパッケージからRedisのバイナリが削除されます。既存のRedis設定は引き続き機能し、後方互換性のために適用されます。\n\nこの移行は、Linuxパッケージにバンドルされているモデルにのみ影響します。外部Redisデプロイメントを使用しているスケールアーキテクチャのお客様は、引き続きRedisをご利用いただけます。RedisとValkeyの機能差異については今後も注視し、エコシステムの進化に合わせてガイダンスを提供していきます。\n\n[ドキュメント](https://docs.gitlab.com/ja-jp/administration/redis/#use-valkey-instead-of-redis)\\\n[エピック](https://gitlab.com/groups/gitlab-com/gl-infra/software-delivery/operate/-/epics/6)\n\n### バグ修正、パフォーマンス改善、UIの改善\n\nGitLabでは、ユーザーの皆さまに最高の体験をお届けするため、すべてのリリースでバグの修正、パフォーマンスの改善、UIの向上に取り組んでいます。GitLab.comの100万人を超えるユーザーも、その他のプラットフォームをご利用のユーザーも、快適にお使いいただけるよう努めています。\n\n18.9でお届けしたバグ修正、パフォーマンス改善、UI改善の詳細は、以下のリンクからご確認ください。\n\n* [バグ修正](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=type%3A%3Abug&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.9)\n* [パフォーマンス改善](https://gitlab.com/groups/gitlab-org/-/issues/?sort=updated_desc&state=closed&label_name%5B%5D=bug%3A%3Aperformance&or%5Blabel_name%5D%5B%5D=workflow%3A%3Acomplete&or%5Blabel_name%5D%5B%5D=workflow%3A%3Averification&or%5Blabel_name%5D%5B%5D=workflow%3A%3Aproduction&milestone_title=18.9)\n* [UIの改善](https://papercuts.gitlab.com/?milestone=18.9)\n\n### 非推奨\n\n新規の非推奨事項と現在非推奨となっているすべての機能の一覧は、GitLabのドキュメントをご覧ください。今後の破壊的な変更の通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n### 削除された機能と破壊的な変更\n\n削除されたすべての機能の一覧は、[GitLabドキュメント](https://docs.gitlab.com/ja-jp/update/deprecations/)をご覧ください。今後の破壊的な変更の通知を受け取るには、[破壊的な変更のRSSフィードにサブスクライブ](https://about.gitlab.com/breaking-changes.xml)してください。\n\n* [Ubuntu 20.04向けLinuxパッケージ](https://docs.gitlab.com/ee/update/deprecations.html#linux-packages-for-ubuntu-2004)\n\n### GitLab 18.9へのアップグレードに関する重要事項\n\nGitLabは[Ruby 3.3](https://www.ruby-lang.org/en/news/2023/12/25/ruby-3-3-0-released/)を使用するようにアップグレードされました。このアップグレードには、ヒープフラグメンテーションの削減やメジャーガベージコレクションの所要時間短縮など、RubyのGCに関する改善が含まれています。\n\n[ソースからコンパイルしてインストールしている場合](https://docs.gitlab.com/ja-jp/install/self_compiled/)、GitLab 18.9以降へのアップグレード時に管理者はRuby 3.3.x以降を用意しておく必要があります。Ruby 3.2は2026年3月31日にサポートが終了し、以降は公式のアップデートとサポートが提供されなくなるため、この変更が必要です。\n\n### 変更履歴\n\n変更内容をすべて表示するには、次のページから変更履歴を確認してください。\n\n* [GitLab](https://gitlab.com/gitlab-org/gitlab-foss/blob/master/CHANGELOG.md)\n* [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/blob/main/CHANGELOG.md)\n* [GitLab Workflow for VS Code](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/main/CHANGELOG.md)\n* [GitLab CLI](https://gitlab.com/gitlab-org/cli/-/releases)\n\n### インストール\n\nGitLabを新規にインストールする場合は、[GitLabのダウンロードページ](https://about.gitlab.com/install/)をご覧ください。\n\n### 更新事項\n\n[更新ページ](https://about.gitlab.com/update/)をご覧ください。\n\n### ご不明な点がある場合\n\nご質問やご意見をお聞かせください。本リリースについてご不明な点がある場合は、[GitLabフォーラム](https://forum.gitlab.com/)にアクセスして質問を投稿してください。\n\n### GitLabサブスクリプションプラン\n\n* [Free](https://about.gitlab.com/pricing/)\n  ユーザー向けの永久無料機能を提供\n* [Premium](https://about.gitlab.com/pricing/premium/)\n  チームの生産性と調整を強化\n* [Ultimate](https://about.gitlab.com/pricing/ultimate/)\n   組織全体のセキュリティ、コンプライアンス、プランニングに対応\n  GitLabのすべての機能を[無料](https://about.gitlab.com/free-trial/?hosted=saas)でお試しいただけます。\n\n*\\--------------------*\n\n*監修：ソリス ジェレズ / Jerez Solis [@jerezs](https://gitlab.com/jerezs) （GitLab合同会社 ソリューションアーキテクト本部 ソリューションアーキテクト）*\n\n### 過去の日本語リリース情報\n\n* [GitLab 18.8](https://about.gitlab.com/ja-jp/blog/gitlab-18-08-release/)\n* [GitLab 18.7](https://about.gitlab.com/ja-jp/blog/gitlab-18-07-release/)\n* [GitLab 18.6](https://about.gitlab.com/ja-jp/blog/gitlab-18-06-release/)\n* [GitLab 18.5](https://about.gitlab.com/ja-jp/blog/gitlab-18-05-release/)\n* [GitLab 18.4](https://about.gitlab.com/ja-jp/blog/gitlab-18-04-release)\n* [GitLab 18.3](https://about.gitlab.com/ja-jp/blog/gitlab-18-03-release)\n* [GitLab 18.2](https://about.gitlab.com/ja-jp/blog/gitlab-18-02-release/)\n* [GitLab 18.1](https://about.gitlab.com/ja-jp/blog/gitlab-18-01-release/)\n* [GitLab 18.0](https://about.gitlab.com/ja-jp/blog/gitlab-18-0-release/)\n* [GitLab 17.11](https://about.gitlab.com/ja-jp/blog/gitlab-17-11-release/)\n* [GitLab 17.10](https://about.gitlab.com/ja-jp/blog/gitlab-17-10-release/)\n* [GitLab 17.9](https://about.gitlab.com/ja-jp/blog/gitlab-17-9-release/)\n* [GitLab 17.8](https://about.gitlab.com/ja-jp/blog/gitlab-17-8-release/)\n* [GitLab 17.7](https://about.gitlab.com/ja-jp/blog/gitlab-17-7-release/)\n* [GitLab 17.6](https://about.gitlab.com/ja-jp/blog/gitlab-17-6-release/)\n* [GitLab 17.5](https://about.gitlab.com/ja-jp/blog/gitlab-17-5-released/)\n* [GitLab 17.4](https://about.gitlab.com/ja-jp/blog/gitlab-17-4-released/)\n* [GitLab 17.3](https://about.gitlab.com/ja-jp/blog/gitlab-17-3-released/)\n* [GitLab 17.2](https://about.gitlab.com/ja-jp/blog/gitlab-17-2-released/)\n* [GitLab 17.1](https://about.gitlab.com/ja-jp/blog/gitlab-17-1-released/)\n* [GitLab 16.11](https://about.gitlab.com/ja-jp/blog/gitlab-16-11-released/)",[690],"GitLab Japan Team","2026-02-20","2026-02-19","GitLab 18.9リリース",[695,696,10,26],"releases","AI/ML","GitLab 18.9でリリースした最新機能を公開します。",{"featured":32,"template":14,"slug":699},"gitlab-18-09-release",{"content":701,"config":713},{"title":702,"description":703,"authors":704,"date":707,"body":708,"heroImage":709,"category":10,"tags":710},"GitLabが99.9%の可用性をサービスクレジットで保証（Ultimateのお客様向け）","Ultimateのお客様には、ミッションクリティカルなDevSecOpsワークフローの信頼性を確保するため、プラットフォームの可用性が99.9%を下回った場合にサービスクレジットが付与されます。",[705,706],"Aathira Nair","Lyle Kozloff","2026-02-18","GitLabは、GitLab.comおよびGitLab DedicatedのUltimateのお客様に対し、99.9%の可用性をサービスクレジットで保証します。月間の可用性がこの基準を下回った場合、対象のお客様にはクレジットが付与されます（付与されたクレジットは次回以降の請求書に反映）。このコミットメントにより、DevSecOpsワークフローに必要な信頼性が確保されます。\n\n## 重要なのはお客様の信頼\n\n高速なペースで進む昨今のソフトウェアデリバリーでは、チームが一日中、コードのプッシュ、マージリクエストの作成、課題の継続的な追跡に明け暮れています。分散したさまざまなチームで実行されるpush、pull、cloneのGitオペレーションの回数は、1時間あたり何千回にも上ります。このため、これらのコア機能がいずれかでも利用できなくなれば、ソフトウェアデリバリーのワークフロー全体が停止してしまいます。\n\n99.9%可用性のサービスレベルアグリーメント（SLA）は、加速する開発ペースがインフラの壁に阻まれることがないよう保証します。サービスクレジットはGitLabのアカウンタビリティの証であり、プラットフォームの信頼性はGitLabの成功につながります。つまり、お客様にとってのメリットはGitLabにとってもメリットとなります。GitLabは、可用性の目標達成にとどまらず、お客様のビジネス成果に対しても責任を担っています。\n\nGitLabのSLAコミットメントは、DevSecOpsワークフローに不可欠なコアプラットフォームサービスをカバーしています。\n\nローンチ時点で対象となるエクスペリエンスは以下のとおりです。\n\n\\* イシューおよびマージリクエスト  \n\\* Gitオペレーション（HTTPSおよびSSH経由のpush、pull、clone）  \n\\* コンテナレジストリのオペレーション  \n\\* パッケージレジストリのオペレーション  \n\\* APIリクエスト（上記に限定）\n\n対象となるエクスペリエンスおよび対象外のエクスペリエンスの最新情報は、[GitLabハンドブック](https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/service-level-agreement/#covered-experiences)でご確認いただけます。\n\nサービスの可用性は、複数のジオロケーションにおける自動モニタリングを使用して計測され、お客様が実際に経験するサービス可用性を正確に反映します。可用性が99.9%を下回った場合、お客様は不足による影響の深刻度に応じたクレジットを申請できます。\n\n## ダウンタイム分（Downtime Minute）について\n\n特定の1分間において、対象エクスペリエンスに対するお客様の有効なリクエストの5%以上に、サーバーエラーにつながる可用性の低下が発生した場合、これを[ダウンタイム分](https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/service-level-agreement/#downtime-minute-definition)と呼びます。サーバーエラーは、GitLabの内部および外部モニタリングシステムがHTTP 5xxステータスコード、または30秒を超える接続タイムアウトと判断したエラーと定義されています。\n\nSLAはサーバー側の障害を計測しますが、5xxエラーをトリガーしない問題もあります。たとえば、機能を使用不能にするアプリケーションバグ、Sidekiqジョブ処理の停止、リクエストが完全に失敗していないにもかかわらずパフォーマンスを低下させるインフラの問題などが該当します。\n\nサービスクレジットを申請する手順は以下のとおりです。\n\n1. 影響を受けた月の末日から30日以内に、support.gitlab.comまでサポートリクエストを送信し、ダウンタイムクレジットを申請してください。\n\n2. GitLabチームが申請内容を確認し、ダウンタイムを検証したうえで、該当する場合はクレジット付与の手続きを行います。\n\n3. サービスクレジットは、次回発行される請求書に反映されます。\n\n月間アップタイム可用性の計算方法、適用されるサービスクレジット、およびクレジット申請手順の詳細については、[ハンドブック](https://handbook.gitlab.com/handbook/engineering/infrastructure-platforms/service-level-agreement/#calculating-monthly-uptime-percentage)をご覧ください。\n\n当社のモニタリングはサービス障害の大部分を把握できるよう設計されていますが、報告された可用性とお客様の実際の体験に齟齬がある場合は、サービスクレジットの申請をお勧めします。GitLabは、自動モニタリングに反映されない可能性のある問題の調査を含め、申請内容を総合的に審査します。\n\n## 安心の信頼性\n\nサービスクレジット付与つきの99.9%可用性SLAは、ソフトウェアデリバリーワークフローの信頼できる基盤であり続けるためのGitLabのコミットメントの証です。チームがGitLabを利用してリリースを続けられる限り、GitLabは皆様を全力でサポートします。\n\nSLAについてご不明な点がある場合は、GitLabのアカウントチームにお問い合わせいただくか、[GitLabサポート](http://support.GitLab.com)からリクエストをご送信ください。","https://res.cloudinary.com/about-gitlab-com/image/upload/v1758812952/yxhgljkwljld0lyizmaz.png",[711,10,712],"performance","DevSecOps",{"featured":32,"template":14,"slug":714},"gitlab-backs-99-9-availability-with-service-credits-for-ultimate-customers",{"content":716,"config":726},{"title":717,"description":718,"authors":719,"heroImage":721,"date":722,"body":723,"category":10,"tags":724},"GitLab Duo Agent Platform向けの使用量ベースの価格設定、GitLabクレジットのご紹介","GitLabクレジットが、エンタープライズソフトウェア開発ライフサイクルにおけるエージェント型AIのコスト削減と柔軟性向上にどのように貢献するかをご説明します。\n",[720],"Manav Khurana","https://res.cloudinary.com/about-gitlab-com/image/upload/v1768314648/gvy4pfqjaeahkoagsjmr.png","2026-01-15","GitLabクレジットは、エージェント型AIにおけるシート単位の価格設定が適していないという課題から生まれました。\n\nシート単位の価格設定では、エンジニアリングチームにAIを「利用できる人」と「利用できない人」を生み出してしまい、ソフトウェア開発ライフサイクル全体でエージェント型AIを活用するという本来のあり方と根本的に矛盾しています。現在のモデルでは、個人がAIを使い始める前に、その人のためのシートを購入する必要があります。これは、ヘビーユーザーにとっては機能しますが、軽度または不定期に使用する大多数のチームメンバーにとっては、コストが高すぎて不公平です。そのため、多くの組織では、チームの一部のメンバーだけが「AIシート」を持つことになります。\n\nさらに、[GitLab Duo Agent Platform](https://about.gitlab.com/blog/gitlab-duo-agent-platform-is-generally-available/)は、Duo Pro、Duo Enterprise、その他市場に出回っているAIデベロッパーツールとは異なります。エージェントやエージェント型ワークフローは、チームがAIサポートを必要とするときに呼び出すことができ、バックグラウンドで実行されているSDLCイベントによってトリガーされます。Duo Agent Platformにより、エージェント型AIはもはやユーザーシートにのみ紐付けられるものではなくなりました。\n\nGitLabクレジットは、GitLab Duo Agent Platformから始まる使用量ベースの価格設定のための新しい仮想通貨として、これらの課題に対応します。これにより、GitLabアカウント(PremiumまたはUltimate)を持つ組織内のすべてのメンバーが、AIシートの料金を支払うことなく、自分で呼び出す場合もバックグラウンドエージェントとして設定する場合も、エージェント型AI機能を利用できるようになります。\n\n## GitLabクレジットの仕組み\n\nGitLabクレジットは、組織全体でプールされます。GitLab Duo Agent Platformの使用量は、GitLabクレジットから引き落とされます。これには、エージェントとエージェント型フローの同期および非同期使用の両方が含まれます。具体的には次のとおりです:\n\n* セキュリティ分析エージェント、プランナーエージェント、データ分析エージェントなどの[基本エージェント](https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/foundational_agents/)\n\n* コードレビューフロー、デベロッパーフロー、CI/CD修復フローなどの[基本フロー](https://docs.gitlab.com/ja-jp/user/duo_agent_platform/flows/foundational_flows/)\n\n* Anthropic Claude CodeやOpenAI Codexなどの[外部エージェント](https://docs.gitlab.com/ja-jp/user/duo_agent_platform/agents/external/)\n\n* [GitLab AIカタログ](https://docs.gitlab.com/ja-jp/user/duo_agent_platform/ai_catalog/)で構築および公開するカスタムエージェントとフロー\n\n* GitLab UIおよびデベロッパーが使用するIDEでの[エージェント型チャット](https://docs.gitlab.com/ja-jp/user/gitlab_duo_chat/agentic_chat/)\n\n**注:** 外部エージェントは18.8で無料で試すことができ、GitLabクレジットを消費しません。来月の18.9リリースで価格設定を導入する予定です。カスタムフローは現在ベータ版であり、GitLabクレジットを消費しません。\n\n引き落とされるクレジット量は、大規模言語モデルによるエージェント型リクエストの数に基づいています([詳細はこちら](https://docs.gitlab.com/ja-jp/subscriptions/gitlab_credits/#models))。より多くのLLMが利用可能になるにつれて、GitLab Duo Agent Platformでの使用に対して認定し、このリストに追加していきます。これにより、お客様は消費方法を透明に確認できます。\n\nGitLabクレジットの総数は、実際の使用量に基づいて月末に計算されます。このモデルでは、パワーユーザーの使用量とライトユーザーの使用量が自動的に相殺されるため、各個人のAI総コストを効果的に削減できます(各個人にシート料金を支払う場合と比較して)。\n\n簡潔にするために、各GitLabクレジットの**オンデマンド**定価は1ドルです。GitLab Duo Agent Platformをコミットメントなしで使用でき、使用量は毎月(各月末に)請求されます。**年間契約**にサインアップするエンタープライズのお客様には、月間クレジットの数量割引を提供します。\n\n期間限定プロモーション[*](#notes)として、PremiumおよびUltimateのアクティブなサブスクリプションをお持ちのすべてのGitLabのお客様には、それぞれ**ユーザーあたり月額12ドルと24ドルの含まれるクレジット**が自動的に付与されます。これらのクレジットは、プロモーション期間が終了するまで毎月更新され、追加費用なしでGitLab Duo Agent Platformのすべての機能にアクセスできます。請求条件に同意すると、含まれるクレジットを超える使用量は、コミット済みの月間クレジットまたはオンデマンドクレジットで請求されます。\n\n## GitLabクレジットによるコストガバナンス\n\n**GitLabクレジットのサイジング:** アカウントチームは、GitLab Duo Agent PlatformのGA(一般提供)の一環として、毎月必要なGitLabクレジット数を見積もるサイジング計算ツールを用意しています。この計算ツールは、ベータ期間中に観察された使用パターンで構築されています。さらに、既存または新規のお客様として、実際の使用量の見積もりを確認するために無料トライアルをリクエストできます。\n\n**使用状況の可視性:** 18.8リリースでは、2つの補完的なダッシュボードを通じて詳細な使用状況情報を提供します。1つは財務監視に重点を置く請求管理者向けのGitLab顧客ポータル内のダッシュボード、もう1つは運用監視に重点を置く管理者向けの製品内ダッシュボードです。どちらも使用状況の帰属、コスト内訳、履歴トレンドを提供するため、クレジットの消費状況を常に正確に把握できます。社内でクロスチャージングを行っている場合は、プロジェクトレベルおよびグループレベルのロールアップを使用してコスト配分を行うことができます。\n\n**使用制限:** 特定のチームまたはプロジェクトに対してGitLab Duo Agent Platformへのアクセスを有効または無効にできるため、承認された使用のみがクレジットに計上されます。また、GA直後にユーザーレベルの制限を追加し、GitLab Duo Agent Platform機能を使用してクレジットを引き落とせるユーザーを管理できるようにする予定です。\n\n**自動使用通知:** コミット済みの月間クレジットの50%、80%、100%に達したときに、電子メールアラートでGitLabクレジットの使用状況を積極的にお知らせします。これにより、使用量の調整、コミットメントの追加購入、オンデマンド請求への準備を行う時間を確保できます。\n\n## シート単位のGitLab Duo Pro/EnterpriseからDuo Agent Platform用GitLabクレジットへのアップグレード\n\nGitLab Duo ProおよびDuo Enterpriseを購入してご利用中の場合、引き続きサポート対象のオプションとしてこれらの機能を使用できます。いつでもGitLab Duo Agent Platformにアップグレードでき、「クラシック」Duoでできることに加えて、エージェント型チャット、追加の基本エージェント、カスタムエージェントとフロー、外部エージェントなどの新機能にアクセスできます。\n\nアップグレード時に、GitLab Duo ProおよびDuo Enterpriseのシートへの投資を、Duo Agent Platform用GitLabクレジットに繰り越します。シートコミットメントの残りのドル額は、数量ベースの割引を受けた月間GitLabクレジットと交換されます。月間GitLabクレジットは、以前にDuoシートが割り当てられていたユーザーだけでなく、許可した組織内のすべてのチームメンバーで共有できます。\n\n## 競合比較:GitLabクレジット vs. シート単位の価格設定\n\n| メリット | GitLabクレジット | シート単位の価格設定 |\n| ----- | ----- | ----- |\n| **すべての人にAIを** | 承認されたすべてのチームメンバーが初日からAIアクセスを取得 | AIを「利用できる人」と「利用できない人」を作り出し、シートの配分を強いる |\n| **初期投資不要** | 含まれるクレジットで小規模に開始し、ROIが明確になるにつれてコミットメントを増やす | 価値を証明する前にシートを事前購入する必要がある |\n| **使用した分だけ支払う** | 含まれる階層を超えて実際に実行されたAI作業のみが請求される | 実際の使用量に関係なくシートごとに支払う |\n| **支出の最適化** | 共有クレジットプールにより、パワーユーザーとライトユーザーを相殺できる | ライトユーザーにも支払いが必要で、パワーユーザーのプレミアムリクエストには超過料金が発生 |\n| **詳細な可視性** | 詳細な帰属と履歴トレンドを含む使用状況ダッシュボード | どのユーザーが価値を生み出しているかについての洞察が限定的 |\n| **きめ細かなコスト制御** | アクセスできるユーザーを選択でき、プロアクティブなアラートと今後の予算制限で制限可能 | コストを管理するためにシートを取得できるユーザーを制限 |\n| **サイジングの柔軟性** | 月間クレジットを見積もる計算ツール、数量に応じた単価割引が増加 | シートを取得するユーザー数×シートあたりの価格 |\n| **シンプルな契約と請求** | 単一のSKUと請求書で、DevSecOpsライフサイクル全体のすべてのエージェント機能をカバー | さまざまなサードパーティツールで複数のAIライセンスが必要 |\n\n## 開始方法\n\n1. **既存のPremium/Ultimateのお客様の場合**: GAにより、GitLab Duo Agent PlatformはアクティブなPremiumおよびUltimateライセンス[**](#notes)をお持ちのお客様にご利用いただけます。GitLab.com SaaSのお客様は自動的にアクセスできるようになります。GitLab Self-Managedのお客様は、GitLab 18.8リリース(Duo Agent Platformの一般提供を予定)にアップグレードするとアクセスできるようになります。GitLab Dedicatedのお客様は、2月の定期メンテナンスウィンドウ中にGitLab 18.8にアップグレードされ、その時点からDuo Agent Platformを使用できるようになります。\n2. **GitLab Duoを有効化:** ネームスペース設定でGitLab Duo Agent Platformが有効になっていることを確認してください。\n\n3. **探索を開始:** 含まれる月間GitLabクレジットを使用して、GitLab Duo Agent Platform機能をお試しください。\n\n4. **含まれるクレジットを超える使用:** 含まれるクレジットを超える拡張使用については、オンデマンド定価でGitLabクレジットにオプトインできます。コミットメント付きの数量割引については、[お問い合わせ](https://about.gitlab.com/sales/)いただき、特定の使用レベルのお見積もりをご依頼ください。\n\n開始方法の詳細については、[GitLab Duo Agent Platformのドキュメント](https://docs.gitlab.com/ja-jp/user/duo_agent_platform/)をご覧ください。\n\n## 注記\n\n\\* これらの含まれるプロモーションクレジットは、GA時に期間限定で利用可能であり、GitLabの裁量により変更される可能性があります。\n\n** GitLab Duo with Amazon QおよびGitLab Dedicated for Government のお客様は除きます。\n\n> GitLab Duo Agent Platformと、エージェント型AIがチームの働き方を変革するすべての方法について詳しく知りたい場合は、[GitLab Duo Agent Platformページ](https://about.gitlab.com/gitlab-duo-agent-platform/)をご覧ください。既存のGitLabのお客様の場合は、GitLabアカウントマネージャーまたはパートナーに連絡して、プラットフォーム機能のライブデモをスケジュールしてください。\n\n## GitLabクレジット FAQ\n\n**1\\. GitLabクレジットとは何ですか。また、GitLabがこれを導入した理由は何ですか。**\n\nGitLabクレジットは、GitLab Duo Agent Platformから始まる、使用量ベースのGitLab機能向けの新しい仮想通貨です。GitLabがこのモデルを導入したのは、シート単位の価格設定により組織がエンジニアリングチーム内でAIアクセスを配分せざるを得なくなり、Duo Agent Platformの使用がシートだけに紐付けられるものではないためです。クレジットは組織全体でプールされるため、個別にシートを事前購入することなく、すべてのチームメンバーにAI機能へのアクセスを提供したり、バックグラウンドでのエージェントワークフローを設定したりできます。\n\n**2\\. クレジット消費の仕組みはどうなっていますか。**\n\nクレジットは、エージェントリクエストの数に基づいて消費され、使用するLLMによって異なるレートが適用されます。たとえば、Claude-sonnet-4.5(ほとんどの機能のデフォルト)では、1クレジットあたり2つのモデルリクエストが得られ、gpt-5-miniやclaude-3-haikuなどのモデルでは、1クレジットあたり20リクエストが得られます。\n\n**3\\. 既存のPremiumおよびUltimateのお客様には何が含まれますか。**\n\n期間限定プロモーションとして、PremiumおよびUltimateのアクティブなサブスクリプションをお持ちのお客様には、GitLab 18.8のDuo Agent Platform GAリリースと併せて、含まれるクレジットが無料で自動的に付与されます:\n\n* Premiumの場合、ユーザーあたり月額12ドルのクレジット\n* Ultimateの場合、ユーザーあたり月額24ドルのクレジット\n\n含まれるクレジットはユーザーごとのレベルで、毎月更新され、追加費用なしでGitLab Duo Agent Platformのすべての機能へのアクセスを可能にします。これらの含まれるクレジットを超える使用量は、別途請求されます。これらの含まれるプロモーションクレジットは、GA後の期間限定で利用可能であり、GitLabの裁量により変更される可能性があります。\n\n**4\\. クレジットの使用量を制御および監視するにはどうすればよいですか。**\n\nGitLabは、複数のガバナンスツールを提供しています:顧客ポータルと製品内の両方の詳細な使用状況ダッシュボード、特定のチームまたはプロジェクトへのアクセスを有効/無効にする機能、今後のユーザーレベルの制限、およびコミット済み月間クレジットの50%、80%、100%での自動電子メールアラートです。また、月間クレジットニーズを見積もるサイジング計算ツールを提供する予定です。\n\n**5\\. GitLab Duo Agent Platformを開始するにはどうすればよいですか。**\n\nGA後、既存のPremium/Ultimateのお客様の場合、GitLab.com SaaSでは自動的にアクセスできます。Self-Managedのお客様は、Duo Agent Platformの一般提供を予定しているGitLab 18.8へのアップグレード時にアクセスできるようになります。ネームスペース設定でGitLab Duo Agent Platformを有効にし、含まれる月間クレジットを使用して探索を開始するだけです。含まれるクレジットを超える使用については、オンデマンド請求にオプトインするか、GitLabに連絡して年間契約による数量割引を受けることができます。\n\n*このブログ投稿には、改正された1933年証券法のセクション27Aおよび1934年証券取引法のセクション21Eの意味における「将来見通しに関する記述」が含まれています。これらの記述に反映された期待は合理的であると考えていますが、実際の結果または成果が大きく異なる可能性のある既知および未知のリスク、不確実性、仮定、およびその他の要因の影響を受けます。これらのリスクおよびその他の要因の詳細については、SECへの提出書類の「リスク要因」というキャプションの下に記載されています。このブログ投稿の日付以降、法律で義務付けられている場合を除き、これらの記述を更新または修正する義務を負いません。*",[696,10,725],"news",{"featured":13,"template":14,"slug":727},"introducing-gitlab-credits",{"promotions":729},[730,744,756],{"id":731,"categories":732,"header":734,"text":735,"button":736,"image":741},"ai-modernization",[733],"ai-ml","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":737,"config":738},"Get your AI maturity score",{"href":739,"dataGaName":740,"dataGaLocation":247},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":742},{"src":743},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":745,"categories":746,"header":748,"text":735,"button":749,"image":753},"devops-modernization",[10,747],"devsecops","Are you just managing tools or shipping innovation?",{"text":750,"config":751},"Get your DevOps maturity score",{"href":752,"dataGaName":740,"dataGaLocation":247},"/assessments/devops-modernization-assessment/",{"config":754},{"src":755},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":757,"categories":758,"header":760,"text":735,"button":761,"image":765},"security-modernization",[759],"security","Are you trading speed for security?",{"text":762,"config":763},"Get your security maturity score",{"href":764,"dataGaName":740,"dataGaLocation":247},"/assessments/security-modernization-assessment/",{"config":766},{"src":767},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"header":769,"blurb":770,"button":771,"secondaryButton":775},"今すぐ開発をスピードアップ","DevSecOpsに特化したインテリジェントオーケストレーションプラットフォームで実現できることをご確認ください。\n",{"text":51,"config":772},{"href":773,"dataGaName":54,"dataGaLocation":774},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":56,"config":776},{"href":58,"dataGaName":59,"dataGaLocation":774},1772652116648]