Claude CodeをGoogle Cloud Shellから使ってみる

# はじめに

Claude CodeはNode.js 18以上が動作するUnix互換OS（macOS / Linux / WSLなど）であればCLIとして実行できます。
それなら**Google Cloud Shellでも動くのでは？** と考え、実際に試してみました。この記事ではCloud Shell上でClaude Codeをセットアップし、Google Cloudリソースを操作するまでの手順を紹介します。

# 初期設定
Vertex AIをモデルプロバイダーとする方法で進めます。

[Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)でClaudeモデルを有効化したGoogle Cloudプロジェクトを用意します。

:::note warn
Claudeの呼び出しコストはまあまあお値段が張るので、[予算アラート](https://cloud.google.com/billing/docs/how-to/budgets?hl=ja)は必ず設定しておきましょう。
:::

またそのプロジェクトに「Vertex AI ユーザー」権限を持ったIAMを追加します。

そのIAMと同じプリンシパル（メルアド）のユーザーで任意のGoogle Cloudプロジェクトを操作します（Claudeモデルを有効化したGoogle Cloudプロジェクトでなくても構いません）。

Cloud Shellを起動し、Vertex AIでClaude Codeを使うための設定ファイルを作成します。
プロジェクトIDはお使いのClaudeモデルを有効化したGoogle CloudプロジェクトのIDに置き換えてください。
ホームディレクトリで実行します。

```bash
mkdir -p .claude && cat <<'EOF' > .claude/settings.json
{
  "env": {
    "ANTHROPIC_MODEL": "claude-opus-4@20250514",
    "ANTHROPIC_SMALL_FAST_MODEL": "claude-sonnet-4@20250514",
    "CLAUDE_CODE_USE_VERTEX": 1,
    "CLOUD_ML_REGION": "us-east5",
    "ANTHROPIC_VERTEX_PROJECT_ID": "<your_project_id>"
  }
}
EOF
```

Claude Codeをインストールします。

```bash
npm install -g @anthropic-ai/claude-code
```

Claude Codeを起動します。

```bash
claude
```

:::note warn
Cloud Shellで`npm install -g`でClaude Codeをインストールした場合はCloud Shellの永続化されない領域に保存されてしまうので、セッションが切れたり再起動した際に再度インストールを行う必要があります。

グローバルインストールを避けることで、永続化して使うことが可能です。

```bash
npm install @anthropic-ai/claude-code
npx claude
```
:::

追加コンテキストを与えるために下記のような`CLAUDE.md`もホームディレクトリに作成しておきます。

```markdown:CLAUDE.md
* 必ず日本語で応答してください。
* あなたの実行環境はGoogle CloudのCloud Shellであることを念頭においてください。
```

# 使ってみる

Cloud Shellで実行している強みを活かし、Google Cloudのリソースを操作してみます。
ローカルで動かしていてもgcloudコマンドが使えればできることではありますが、特にセットアップすることなく利用できるのは便利ですしなんかワクワクします。

適当にCloud Storageバケットを作らせてみます。

```
> 東京リージョンにバケットを作成して。

● 東京リージョン（asia-northeast1）に新しいバケットを作成します。

● Bash(gcloud storage buckets create gs://******-test-tokyo-$(date +%Y%m%d) --location=asia-northeast1)
  ⎿  Welcome to Cloud Shell! Type "help" to get started.                           
     Your Cloud Platform project in this session is set to <your_project_id>.
     Use `gcloud config set project [PROJECT_ID]` to change to a different project.
     … +1 line (ctrl+r to expand)

● Bash(gcloud storage buckets describe gs://******-test-tokyo-20250622 --format="table(name,location,storageClass)")
  ⎿  Welcome to Cloud Shell! Type "help" to get started.                           
     Your Cloud Platform project in this session is set to <your_project_id>.
     Use `gcloud config set project [PROJECT_ID]` to change to a different project.
     … +3 lines (ctrl+r to expand)

● 東京リージョン（asia-northeast1）に ******-test-tokyo-20250622 というバケットを作成しました。

> Hello Worldと書かれたテキストファイルを作成。バケットにアップロードして。

● Hello Worldと書かれたテキストファイルを作成してバケットにアップロードします。

● Bash(echo "Hello World" > hello.txt)
  ⎿  Welcome to Cloud Shell! Type "help" to get started.                           
     Your Cloud Platform project in this session is set to <your_project_id>.
     Use `gcloud config set project [PROJECT_ID]` to change to a different project.

● Bash(gcloud storage cp hello.txt gs://******-test-tokyo-20250622/)
  ⎿  Welcome to Cloud Shell! Type "help" to get started.                           
     Your Cloud Platform project in this session is set to <your_project_id>.
     Use `gcloud config set project [PROJECT_ID]` to change to a different project.
     … +1 line (ctrl+r to expand)

● Bash(gcloud storage ls gs://******-test-tokyo-20250622/)
  ⎿  Welcome to Cloud Shell! Type "help" to get started.                           
     Your Cloud Platform project in this session is set to <your_project_id>.
     Use `gcloud config set project [PROJECT_ID]` to change to a different project.
     … +1 line (ctrl+r to expand)

● 完了しました。hello.txtファイルを作成し、gs://******-test-tokyo-20250622/バケットにアップロードしました。
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96507/8c8d28cd-eb46-46c9-a94a-1ea9868ee899.png)

Welcomeメッセージがちょっとうざったいですが意図した操作が実行できました。
特に指示しなくてもプロジェクトIDは起動している場所を採用して動いてくれているので使いやすいです。

gcloudコマンドでできる操作は全てできるので、Cloud Runのデプロイをさせたり、Cloud Loggingの解析をさせたりとオペレーション自動化の可能性も感じます。

:::note warn
破壊的なコマンドが実行される恐れがあるため、実行IAMユーザーの権限管理、[Claude Codeの権限設定](https://docs.anthropic.com/ja/docs/claude-code/iam#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%88%B6%E5%BE%A1%E3%81%A8%E6%A8%A9%E9%99%90)を適切に行った上で運用しましょう。
:::

また、Cloud Shellエディタ経由でコーディング支援にも使えました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/96507/55f23601-dda2-4dc1-987b-b74e64e340fe.png)

ここでは自作の[ADK]()で作ったアプリにテストコードを追加させています。

https://github.com/danishi/adk-blog-writer-agent

# おまけ

Vertex AIを利用して、チームでClaude CodeやClaude Code Actionを使ってみたい方はこちらの記事をどうぞ。

https://qiita.com/danishi/items/796042cfca5b1df4d1ca