𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
Google Cloud Artifact Registryの使い方完全ガイド|コンテナ・パッケージ管理・SES案件での実践活用法

Google Cloud Artifact Registryの使い方完全ガイド|コンテナ・パッケージ管理・SES案件での実践活用法

Google CloudArtifact RegistryコンテナCI/CDSES
目次

「Container RegistryからArtifact Registryへの移行が必要だけど、何が変わるのかわからない」——Google Cloud案件で多くのエンジニアが直面するこの疑問に、この記事で完全に答えます。

Google Cloud Artifact Registryは、Docker・npm・Maven・Python・Go など複数のパッケージ形式を統一管理できるフルマネージドリポジトリサービスで、Container Registryの後継として全てのGCP案件で標準となっています。この記事では、Google Cloudシリーズ第22弾として、Artifact Registryの実践的な使い方を解説します。

この記事を3秒でまとめると

  • Artifact RegistryでDocker・npm・Maven・Pythonパッケージを一元管理し、開発チームの依存関係を統合
  • Container Registryからの移行手順と、IAM・VPC Service Controls による本番環境向けセキュリティ設定
  • Cloud Build・GitHub Actionsとの連携で、CI/CDパイプラインにシームレスに組み込む

Artifact Registryとは

Container Registryとの違い

Artifact Registryは、Container Registry(gcr.io)の後継サービスです。

比較項目Artifact RegistryContainer Registry(非推奨)
サポート形式Docker, npm, Maven, Python, Go, Apt, YumDocker のみ
リポジトリ単位の管理✅ プロジェクト内に複数リポジトリ❌ リージョン単位の1つ
IAM✅ リポジトリ単位で設定可能❌ バケット単位
VPC Service Controls✅ 完全対応🔺 部分対応
脆弱性スキャン✅ オンデマンド + 自動スキャン✅ あり
ストリーミング✅ イメージストリーミング❌ なし
料金体系ストレージ + ネットワークCloud Storage料金

重要: Container Registryは2025年5月15日以降、新規プロジェクトで利用不可となり、既存プロジェクトも移行が推奨されています。

対応パッケージ形式

Artifact Registryがサポートするパッケージ形式は以下の通りです。

  • Docker: コンテナイメージ
  • npm: Node.jsパッケージ
  • Maven: Java パッケージ
  • Python (PyPI): Pythonパッケージ
  • Go: Goモジュール
  • Apt: Debianパッケージ
  • Yum: RPMパッケージ
  • KubeFlow Pipelines: MLパイプライン

基本セットアップ

リポジトリの作成

gcloud CLI:

# Docker リポジトリを作成
gcloud artifacts repositories create myapp-docker \
  --repository-format=docker \
  --location=asia-northeast1 \
  --description="本番用Dockerイメージリポジトリ" \
  --labels=env=production,team=backend

# npm リポジトリを作成
gcloud artifacts repositories create myapp-npm \
  --repository-format=npm \
  --location=asia-northeast1 \
  --description="社内npmパッケージ"

# Python リポジトリを作成
gcloud artifacts repositories create myapp-python \
  --repository-format=python \
  --location=asia-northeast1 \
  --description="社内Pythonパッケージ"

Terraform:

resource "google_artifact_registry_repository" "docker" {
  location      = "asia-northeast1"
  repository_id = "myapp-docker"
  format        = "DOCKER"
  description   = "本番用Dockerイメージリポジトリ"

  labels = {
    env  = "production"
    team = "backend"
  }

  cleanup_policies {
    id     = "delete-old-images"
    action = "DELETE"
    condition {
      older_than = "2592000s" # 30日
      tag_state  = "UNTAGGED"
    }
  }

  cleanup_policies {
    id     = "keep-latest"
    action = "KEEP"
    most_recent_versions {
      keep_count = 10
    }
  }
}

Docker認証の設定

# gcloud を使った認証ヘルパー設定(推奨)
gcloud auth configure-docker asia-northeast1-docker.pkg.dev

# Docker設定ファイルが更新される
# ~/.docker/config.json に以下が追加される:
# "asia-northeast1-docker.pkg.dev": "gcloud"

イメージのプッシュとプル

# ビルド&タグ付け
docker build -t asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:v1.2.3 .

# プッシュ
docker push asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:v1.2.3

# プル
docker pull asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:v1.2.3

Artifact Registry構成図

マルチフォーマット対応

npm パッケージの管理

社内共通ライブラリをArtifact RegistryのnpmリポジトリにPublishできます。

# npmの認証設定
npx google-artifactregistry-auth

# .npmrcの設定
cat > .npmrc << EOF
@mycompany:registry=https://asia-northeast1-npm.pkg.dev/my-project/myapp-npm/
//asia-northeast1-npm.pkg.dev/my-project/myapp-npm/:always-auth=true
EOF

# パッケージのPublish
npm publish --registry=https://asia-northeast1-npm.pkg.dev/my-project/myapp-npm/

# パッケージのInstall
npm install @mycompany/shared-utils

package.json の例:

{
  "name": "@mycompany/shared-utils",
  "version": "1.2.0",
  "description": "社内共通ユーティリティライブラリ",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "publishConfig": {
    "registry": "https://asia-northeast1-npm.pkg.dev/my-project/myapp-npm/"
  }
}

Pythonパッケージの管理

# pip.confの設定
cat > pip.conf << EOF
[global]
extra-index-url = https://asia-northeast1-python.pkg.dev/my-project/myapp-python/simple/
EOF

# パッケージのアップロード(twine使用)
pip install twine keyrings.google-artifactregistry-auth
twine upload --repository-url https://asia-northeast1-python.pkg.dev/my-project/myapp-python/ dist/*

# パッケージのインストール
pip install mycompany-utils --extra-index-url https://asia-northeast1-python.pkg.dev/my-project/myapp-python/simple/

Maven パッケージの管理

<!-- pom.xml のリポジトリ設定 -->
<distributionManagement>
  <repository>
    <id>artifact-registry</id>
    <url>artifactregistry://asia-northeast1-maven.pkg.dev/my-project/myapp-maven</url>
  </repository>
</distributionManagement>

<repositories>
  <repository>
    <id>artifact-registry</id>
    <url>artifactregistry://asia-northeast1-maven.pkg.dev/my-project/myapp-maven</url>
    <releases><enabled>true</enabled></releases>
    <snapshots><enabled>true</enabled></snapshots>
  </repository>
</repositories>

CI/CDパイプラインとの連携

Cloud Buildとの連携

# cloudbuild.yaml
steps:
  # ビルド
  - name: 'gcr.io/cloud-builders/docker'
    args:
      - 'build'
      - '-t'
      - 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp-docker/api:$SHORT_SHA'
      - '-t'
      - 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp-docker/api:latest'
      - '.'

  # テスト
  - name: 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp-docker/api:$SHORT_SHA'
    entrypoint: 'npm'
    args: ['test']

  # プッシュ
  - name: 'gcr.io/cloud-builders/docker'
    args:
      - 'push'
      - 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp-docker/api:$SHORT_SHA'

  # 脆弱性スキャン待ち
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'artifacts'
      - 'docker'
      - 'images'
      - 'describe'
      - 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp-docker/api:$SHORT_SHA'
      - '--show-package-vulnerability'

images:
  - 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp-docker/api:$SHORT_SHA'
  - 'asia-northeast1-docker.pkg.dev/$PROJECT_ID/myapp-docker/api:latest'

GitHub Actionsとの連携

name: Build and Push
on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write

    steps:
      - uses: actions/checkout@v4

      - id: auth
        uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: 'projects/123456789/locations/global/workloadIdentityPools/github/providers/github'
          service_account: '[email protected]'

      - uses: google-github-actions/setup-gcloud@v2

      - name: Configure Docker
        run: gcloud auth configure-docker asia-northeast1-docker.pkg.dev

      - name: Build and Push
        run: |
          docker build -t asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:${{ github.sha }} .
          docker push asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:${{ github.sha }}

Cloud Build CI/CDガイドで、パイプライン構築の詳細を解説しています。

セキュリティ設定

IAMによるアクセス制御

# 読み取り権限の付与(デプロイ用サービスアカウント)
gcloud artifacts repositories add-iam-policy-binding myapp-docker \
  --location=asia-northeast1 \
  --member="serviceAccount:[email protected]" \
  --role="roles/artifactregistry.reader"

# 書き込み権限の付与(CI/CD用サービスアカウント)
gcloud artifacts repositories add-iam-policy-binding myapp-docker \
  --location=asia-northeast1 \
  --member="serviceAccount:[email protected]" \
  --role="roles/artifactregistry.writer"

# 管理者権限(リポジトリ管理者のみ)
gcloud artifacts repositories add-iam-policy-binding myapp-docker \
  --location=asia-northeast1 \
  --member="group:[email protected]" \
  --role="roles/artifactregistry.admin"

脆弱性スキャン

Artifact Registryは、Dockerイメージに対する自動脆弱性スキャンを提供しています。

# オンデマンドスキャン
gcloud artifacts docker images scan \
  asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:latest

# スキャン結果の確認
gcloud artifacts docker images list-vulnerabilities \
  asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:latest \
  --format="table(vulnerability.shortDescription, vulnerability.effectiveSeverity, vulnerability.packageIssue.affectedPackage)"

Binary Authorization との連携

本番環境にデプロイするイメージを、署名されたものだけに制限できます。

# Binary Authorization ポリシー
defaultAdmissionRule:
  evaluationMode: REQUIRE_ATTESTATION
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  requireAttestationsBy:
    - projects/my-project/attestors/build-attestor

VPC Service Controls

組織外へのデータ流出を防止します。

# サービス境界の作成
gcloud access-context-manager perimeters create myapp-perimeter \
  --title="MyApp Security Perimeter" \
  --resources="projects/123456789012" \
  --restricted-services="artifactregistry.googleapis.com" \
  --policy=987654321

Container Registryからの移行

移行手順

Step 1: 既存イメージの一覧取得

# gcr.io 上のイメージを一覧表示
gcloud container images list --repository=gcr.io/my-project
gcloud container images list --repository=asia.gcr.io/my-project

Step 2: Artifact Registryリポジトリの作成

gcloud artifacts repositories create myapp-docker \
  --repository-format=docker \
  --location=asia-northeast1

Step 3: イメージのコピー

# gcr.io から Artifact Registry へコピー
gcloud artifacts docker images copy \
  asia.gcr.io/my-project/api:latest \
  asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:latest

# 複数イメージの一括コピー
for image in $(gcloud container images list --repository=asia.gcr.io/my-project --format='value(name)'); do
  tags=$(gcloud container images list-tags $image --format='value(tags)' | tr ';' '\n')
  for tag in $tags; do
    gcloud artifacts docker images copy \
      ${image}:${tag} \
      asia-northeast1-docker.pkg.dev/my-project/myapp-docker/$(basename $image):${tag}
  done
done

Step 4: CI/CDパイプラインの更新

Step 5: Kubernetesマニフェストの更新

# Before
image: asia.gcr.io/my-project/api:v1.0.0

# After
image: asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:v1.0.0

GKEガイドで、Kubernetes連携の詳細を解説しています。

コスト最適化

料金体系

項目料金(東京リージョン)
ストレージ$0.10/GB/月
ネットワーク(同一リージョン)無料
ネットワーク(クロスリージョン)$0.01/GB〜
脆弱性スキャンContainer Analysis API 料金

クリーンアップポリシー

不要なイメージを自動削除してストレージコストを削減します。

# 30日以上前のタグなしイメージを削除
gcloud artifacts docker images list-tags \
  asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api \
  --filter="NOT tags:* AND timestamp.datetime < -P30D" \
  --format='get(digest)' | \
  xargs -I{} gcloud artifacts docker images delete \
    asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api@{} \
    --quiet

SES現場での実践パターン

パターン1: マイクロサービスのイメージ管理

## リポジトリ構成例

myproject/
├── microservices-docker/     # マイクロサービス用Docker
│   ├── user-service
│   ├── order-service
│   ├── payment-service
│   └── notification-service
├── shared-npm/               # 社内共通npmパッケージ
│   ├── @myco/logger
│   ├── @myco/auth-middleware
│   └── @myco/api-client
└── ml-python/                # ML用Pythonパッケージ
    ├── myco-feature-store
    └── myco-model-serving

パターン2: マルチ環境でのイメージ管理

# タグ戦略
# 開発: api:dev-abc1234
# ステージング: api:stg-v1.2.3-rc1
# 本番: api:v1.2.3

# イメージプロモーション(dev → stg → prod)
gcloud artifacts docker tags add \
  asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:dev-abc1234 \
  asia-northeast1-docker.pkg.dev/my-project/myapp-docker/api:stg-v1.2.3-rc1

パターン3: リモートリポジトリの活用

Docker Hubやnpmjs.orgのプロキシとして使用し、外部依存のキャッシュとセキュリティスキャンを実現します。

# リモートリポジトリの作成(Docker Hub のプロキシ)
gcloud artifacts repositories create dockerhub-proxy \
  --repository-format=docker \
  --location=asia-northeast1 \
  --mode=remote-repository \
  --remote-repo-config-desc="Docker Hub proxy" \
  --remote-docker-repo=DOCKER-HUB

IAMセキュリティガイドで、GCPのアクセス制御を詳しく解説しています。

まとめ:Artifact RegistryでGCP案件のパッケージ管理を統一する

Google Cloud Artifact Registryを導入することで、Docker・npm・Maven・Pythonパッケージを一元管理し、セキュリティとCI/CDの効率を大幅に向上できます。

導入ステップ:

  1. Container Registryからの移行計画を立てる(既存イメージのコピー)
  2. リポジトリの命名規則とIAMポリシーを策定
  3. CI/CDパイプライン(Cloud Build / GitHub Actions)と連携
  4. 脆弱性スキャンとBinary Authorizationでセキュリティを強化
  5. クリーンアップポリシーでストレージコストを最適化

**GCPのコンテナ・パッケージ管理のスタンダードはArtifact Registryです。**SES案件でのGCPスキルを磨き、市場価値を高めましょう。

SES BASEでは、Google Cloud・コンテナ技術のSES案件を多数掲載しています。案件を検索するからチェックしてみてください。

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修