3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code入りのDockerイメージをDevContainerで動かす

3
Posted at

今度の新刊 「開発効率をアップする! Claude Code 実用入門」 でも触れているのですが、Claude Codeは、「隔離したコンテナ環境で動かす」 のが、ぼくの持論です。①安全性のため、②Linux環境のツールが使えるため、というのが理由です。コンテナを強く推す理由については、別の記事でも触れました。


[Amazonはこちら]https://www.amazon.co.jp/o/ASIN/4839990204/mynavibooks-22/


とはいえコンテナ環境でClaude Codeを実行するには、docker runコマンドを実行することが必要で、初心者にとって敷居が高いです。

実際、本書の執筆の最初の段階では、 「コンテナを使う方法で解説したいけど、いい?」 と編集さんに相談したところ、 「うーん、初心者が、それでついてこれますかね」 と難色を示されました。

そこで 「Visual Studio Code + DevContainerならどう?」 と実際のやり方を提示したところ、「コピペしてファイルを作るだけなら、初心者でも大丈夫そうですね」 とOKをもらい、本書では、そのやり方で進めています。

DevContainerというのは、Visual Studio Codeのような開発ツールと連動してコンテナを操作する仕組みです。DevContainerを使えば、コンテナを起動する複雑さの問題を解消できます。しかし書籍で示しているやり方は、コンテナを作るたびにClaude Codeをダウンロードしてインストールするため、遅いのが欠点です。

そこでこの記事では、応用編として、Claude Code入りのDockerイメージをあらかじめ作っておくことで、高速化を図る方法を解説します(これは書籍に掲載されていない情報です)。

なお、この記事は、前提の話が少し長いです。解説はともかく「すぐ使いたい」という人は、ビルド済みのファイルを用意しましたにお進みください。

UbuntuコンテナにClaude Codeをインストールする(基本)

まず、UbuntuコンテナにClaude Codeをインストールする基本的なやり方から(これは遅い方法)です。

本書では、DevContainerでClaude Codeを動かす方法として、次の方法を提案しています。

前準備

まずは、環境の前準備をします。


【手順】 DevContainerを使えるようにする前準備
[1]Docker Desktopをインストールしておく
あらかじめ、Docker Desktopをインストールしておきます。

[2]Dev Containers拡張をインストールする
Visual Studio Codeをインストールし、Dev Containers拡張をインストールしておきます。
[拡張機能]タブをクリックし、検索ボックスに「Dev Containers」と入力して、Microsoft社製の「Dev Containers」をインストールします(似たような名前のものがあるので注意。Microsoft社製であることを確認)。インストールしたら、Visual Studio Codeをいったん閉じます。

fig01.png
▲Dev Containers拡張をインストールする

作業用フォルダの作成とコンテナの起動

準備ができたら作業用フォルダを作り、そこにDevContainerの設定ファイルを置きます。そのフォルダをVisual Studio Codeで開くことで、コンテナが起動します。


【手順】 DevContainerでClaude Codeを隔離して動かす
[1]作業用フォルダにDevContainer設定ファイルを置く
作業用フォルダに「.devcontainerフォルダ」を作ります。そして、そのなかに、次の内容のdevcontainer.jsonを置きます。

{
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu24.04"
}

[2]Visual Studio Codeで開く

[1]を置いたフォルダをVisual Studio Codeで開きます。すると、右下にメッセージが表示され、コンテナーで開くかどうか聞かれます。[コンテナーで再度開く]をクリックします。

fig02.png
▲コンテナーで再度開く

このメッセージが消えてしまったときは、Visual Studio Code左下の[リモートウィンドウで開きます]のアイコンをクリックし、[コンテナーで再度開く]をクリックすることでも開けます。

fig03.png
▲[リモートウィンドウで開きます]から開く

[3]ターミナルを開く
先ほどのdevcontainer.jsonは、Ubuntu 24.04のコンテナを実行する設定です。そのため、Visual Studio Codeで[ターミナル]メニューから[新しいターミナル]をクリックすると、Ubuntu 24.04を操作するターミナルが起動します。
つまり、隔離されたUbuntu 24.04のコンテナのなかで、コマンド操作できるようになります。

[4]Claude Codeをインストールする
ここにClaude Codeをインストールします。Claude Codeの公式サイトには、インストール方法が書かれており、それに従って、ターミナルウィンドウで、次のように入力します。

$ curl -fsSL https://claude.ai/install.sh | bash

これでコンテナにおいて、claudeコマンドを実行できるようになります。

不便さをなんとかする

本書では、話をわかりやすくするため、この方法をとっているのですが、実用的に使うと不便な場面が、いくつか出てきます。

コマンド打つのが億劫

ひとつめの問題は、ターミナルで起動したあと、いちいち、

$ curl -fsSL https://claude.ai/install.sh | bash

と入力するのが億劫という点です。これについて、devcontainer.jsonを次のように修正し、「コンテナが起動したあとに、自動で、インストールコマンドを実行する」という構成をとることで、この問題を解消できます。本書のコラムでも触れている方法です。

{
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu24.04",
  "remoteUser": "vscode",
  "containerUser": "vscode",
  "postCreateCommand": "bash -lc 'curl -fsSL https://claude.ai/install.sh | bash'"
}

ダウンロードやビルドに時間がかかる

もうひとつの問題は、Claude Codeのインストールに時間がかかるという点です。

コンテナを起動した後に実行する「curl -fsSL https://claude.ai/install.sh | bash」というコマンドは、Claude Code本体をダウンロードして、それをインストールする処理をするため、時間がかかります(インターネットの通信速度にもよりますが、2~3分は確実にかかります)。

これを解消するには、あらかじめClaude Codeをインストール済みのイメージを作っておき、それを使うようにします。その方法は、少し複雑であるのと、Claude Codeの話と関係ない話なので書籍では紹介していませんが、とても高速に起動できるようになります。以下の方法で実現できるので、挑戦してみてください。

Dockerイメージをビルドする

まずは、Claude Code入りのDockerイメージを作ります。

※実は、Anthropic社は公式のDevContainerのイメージを提供しています。しかし11ヶ月も前から更新されておらず、放置された状態です( https://github.com/anthropics/devcontainer-features/tree/main/src/claude-code )。そのためここで紹介するように、自前のイメージを作らないと最新版を使えません。もちろん近い将来、Anthropic社が、こうしたコンテナイメージを提供するようになる可能性もあり、もしそうなれば、この記事で書いているような、自前で作ったイメージは必要なくなるでしょう。なお、公式のDevContainerは古いものの、設定ファイルの例においてファイアウォールの設定が安全側に振られているなど、参考にすべきところは多いです。その詳細については、別記事で紹介予定です。


【手順】Claude Code入りのDockerイメージを作る

[1]適当なフォルダにDockerfileを作る

適当な空のフォルダを作り、次の内容のDockerfileを作ります。これは、Ubuntu 24.04に対して、Claude Codeをインストールしたコマンドを実行した新しいイメージを作るためのDockerfileです。

FROM mcr.microsoft.com/devcontainers/base:ubuntu24.04

USER vscode
RUN curl -fsSL https://claude.ai/install.sh | bash

ENV PATH=/home/vscode/.local/bin:$PATH

[2]ビルドする

このDockerfileをビルドします。[1]を置いたフォルダをカレントディレクトリにして、次のコマンドを入力します。

$ docker build -t my-claudecode-devcontainer:local .

ここでは、「my-claudecode-devcontainer」というイメージ名としましたが、別の名前でもかまいません。

ビルドできたかどうかは、次のコマンドで確認できます。なお、ビルドした時点における最新版のClaude Codeがインストールされたイメージが作られます。

$ docker images my-claudecode-devcontainer

Claude Code入りのDockerイメージで起動する

.devcontainer/devcontainer.jsonでは、いま作成したDockerイメージを使うように構成します。つまり、次のようにします。

{
  "image": "my-claudecode-devcontainer:local",
  "remoteUser": "vscode",
  "containerUser": "vscode"
}

そうすると、Claude Code入りのコンテナが起動するので、起動後にインストールコマンドを入力する必要もなければ、ダウンロードもしないので、すぐに使えます。

ちなみに、Claude Codeでは、「自分がよく使うCLAUDE.mdやスキル」を使うこともあるでしょう。そうしたものもDockerコンテナに入れておく(DockerfileでCOPYコマンドを使って、それらのファイルをあらかじめコンテナ内にコピーしておく)ようにすれば、使いやすくカスタマイズできます。

なおインストールしているclaude codeのバージョンは、Dockerイメージを作る時点で固定されます。ですから、アップデートしたいときは、Dockerイメージを作り直す、もしくは、起動後に「claude update」のコマンドを入力してアップデートするなどが必要です。

ビルド済みのファイルを用意しました

「Dockerfileをビルドして」というのは難しいという人のために、ビルド済みのイメージを用意しておきました(Dockerfileをビルドしただけで、たいしたことはしてないですが)。

ファイル本体は、GitHubが提供している「GitHub Container Registry(ghcr.io)」というコンテナ用の置き場で公開しています。DevContainerの設定ファイルから直接参照できるので、皆さんは何もダウンロードしなくてかまいません。

設定ファイルを書き換えるだけで使える

具体的には、.devcontainer/devcontainer.jsonを、次のように書き換えれば使えます。

{
  "image": "ghcr.io/fosawa/claudecode-devcontainer:latest",
  "remoteUser": "vscode",
  "containerUser": "vscode"
}

プロジェクトのフォルダに、この.devcontainer/devcontainer.jsonを置いて状態で、Visual Studio Codeから[コンテナーで再度開く]を選ぶと、Claude Codeがすでに入ったコンテナが立ち上がります。「curl -fsSL https://claude.ai/install.sh | bash」を手入力する必要はありません。

バージョンを固定したいとき

「latest」の代わりに、バージョン番号を直接タグとして指定することもできるようにしてあります。

{
  "image": "ghcr.io/fosawa/claudecode-devcontainer:2.1.126",
  "remoteUser": "vscode",
  "containerUser": "vscode"
}

公開しているタグの一覧は、リポジトリページ右側の「Packages」から確認できます。「先週は動いていたのに、Claude Codeをアップデートしたら様子がおかしい」というときに、いったん前のバージョンに戻して様子を見る、といった使い方ができます。

毎日、自動でビルドし直しています

Claude Codeは更新が頻繁です。1週間も経つと、けっこうな数のバージョンが上がっていることもあります。

そこで、このイメージは、毎日、自動でビルドし直すようにしてあります。具体的には、GitHub Actionsという「GitHub上で何かを自動実行するしくみ」を使って、毎日深夜(日本時間の午前3時)に、次の作業を自動で動かしています。

  • Dockerfileをキャッシュなしでビルドして、Claude Codeの最新版を取り込む
  • できあがったコンテナのなかで 「claude --version」を実行し、入ったClaude Codeのバージョンを取り出す
  • そのバージョン番号をタグにつけて、ghcr.ioにアップロードする
  • 同時に「latestタグ」も、その最新バージョンを指すように更新する

すでに同じバージョンを公開済みの日は、アップロードをスキップします。Claude Codeに更新があった日だけ、新しいタグが増えていく、というしくみです。

この仕組みは、GitHubのサーバー上で自動で走っているので、ぼくがサボっていても、イメージは粛々と更新され続けます(ありがたいことです)。このあたりの仕組みのコードは、Claude Codeに作ってもらいました。

自分用にカスタマイズしたい人へ

ぼくの公開イメージをそのまま使うのではなく、「自分がよく使うCLAUDE.mdやスキルを最初から入れた、自分専用のコンテナを作りたい」と思った人もいるでしょう。

その場合は、公開しているリポジトリ( https://github.com/fosawa/claudecode-devcontainer )をフォークして、Dockerfileを自分の好みに編集してください。そうすれば、フォークした皆さんのリポジトリ配下で、まったく同じGitHub Actionsが動き、皆さん専用のイメージが ghcr.io 上に毎日ビルドされていきます。

devcontainer.json のimage欄を、皆さんのGitHubユーザー名に書き換えれば、皆さん専用のClaude Code環境がすぐに使えます。詳しい手順は、リポジトリのREADMEにまとめてあります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?