🕋

AI駆動開発こそデブコン

に公開

はじめに

Q1. 皆さまClaude Code, Gemini CLI等々のAIコーディングツールは使っていますでしょうか?

ほとんどの開発者はYesだと思います。

Q2. では、デブコンは使っていますでしょうか?

Q1がYesで、Q2がNoのあなた
セキュリティ的にマジでやばいです

この記事を最後まで読んで立派なデブコナーになりましょう。
デブコン使ってるよ~って方はここから読んでってくれると嬉しいです。

因みにここで言ってるデブコンとはVSCodeの Devcontainer のことです。
一般金属補修材のことでは無いのでご留意ください。

では本編

Devcontainerとは

平べったく言うと開発環境用のDockerコンテナのことです。
実行には以下の環境が必要です。

  1. Docker
    -> Windowsの人はWSL + Docker Desktop
    -> Macの人はDocker Desktop
    -> Linuxの人はDocker Engineを直インストール
  2. VSCode
  3. またはVSCodeのフォーク(Cursorでは使えるらしいけど、Kiroでは使えないらしい)
  4. デブコン用の拡張機能
  5. プロジェクト毎のデブコン定義

私はWindowsとMacでVSCode + Docker Desktopを使ってます。
Windowsの人はWSL入れた方がパフォーマンス良いです。

Docker Desktop単品でもHyper-Vで動きはします。

また、デブコンを含むプロジェクトはWSL上に置いた方がファイル転送のオーバーヘッドが無くなるのでパフォーマンスが良いです。

WindowsとLinux間でファイルシステムの差異があるため。

デブコンにすると何がうれしいの?

多大なメリットと唯一のデメリットがあります。

メリット

環境を完全に隔離できる 🔥

これがAI駆動開発における一番のメリットです。
コンテナ環境とホスト環境はマウントしたディレクトリ以外が完全に隔離されるので、例えばコンテナ内でClaudeCodeがrm -rf ~/しちゃったとしてもホスト環境への影響を最小限に抑えられます。

ホスト環境でもしrm -rf ~/されたら軽く積みますよね。

また、これらのAIコーディングツールがホスト環境にある関係のないプロジェクトのファイルを見に行ったり、関係のない環境変数を参照しにいったり等を環境レベルで防げます。
デブコン外でこれらのAIコーディングツールを使っている方は、これらのツールが見ようと思えばホスト環境のあらゆる情報にアクセスできる状態にあるという危機意識を持った方が良いです。

やってないとは思いますが、これらのツールが例えば裏で printenv | grep -i seqret を実行した結果を収集していたとしたらセキュリティ的にめっちゃやばいですよね。
これらを予防するという意味でもデブコンはかなり効果的です。
ただ、デブコンしてればいいという訳ではなく、使い方を理解して適切に運用することが大事です。

開発環境を配布できるので新規参入者の環境構築が要らなくなる

あるあるですが、
「このプロジェクトはあれとあれが必要だからインストールしといて!バージョンはこれね!!」
みたいな儀式が消滅します。
また、インストールする拡張機能もデブコン毎に設定できます。

ホスト環境が汚染されない

例えば、Bun試したい!PythonでPoCしたい!Rustってどうなん?って時に毎度ホスト環境にランタイムを追加していくとホスト環境がどんどんゴチャゴチャになっていきます。
そういう時はデブコンにしましょう!そうしましょう!
私はWebエンジニアですが、ホスト環境にはNodeすら入ってません。

デメリット

メモリ使用量が爆増するので低スぺPCだとそもそも立ち上がらない or 重くなる

良いPC買ってください。メモリは32GB以上あれば安牌です。

最強テンプレートできました

前置きが長くなりましたが、こっからが本題です。
私にとっての最強のテンプレートを作りましたので紹介させてください。

https://github.com/kazeusagi/ccode-devcontainer-template

このテンプレートを開いて右上の Use this template からリポジトリを作成し、後はREADME.mdの内容の通り2ステップで爆速でデブコンが立ち上がります🚀

私は普段からClaude Codeを愛用しているのでClaude Code用のテンプレートを作りましたが、GeminiとかCodexのテンプレートも欲しい!みたいな要望があったら作成します!
のでコメントよろしくです。

TypeScriptじゃなくてPythonがええんじゃぁ!Rustがええんじゃ!とかあったら気が向いたら作ります。
のでコメントよろしくです。

スターもよろしくです⭐

最強ポイント

この最強テンプレートが最強たる所以を紹介します。

起動するたびにClaudeCodeの認証が求められない

まず、デブコンの仕様的にマウントしていないファイルやフォルダは起動するたびに消えます。
次に、起動時に存在しないファイルやフォルダはマウントできません。

最近は起動時に無いフォルダは自動作成されるようになったっぽい?ただroot権限で自動作成されるため権限問題に発展する

そして、認証情報等は基本的にGit管理に含むべきでないため、起動時には存在しません。

この制約を標準機能のみでうまく突破しています。
詳しくは .devcontainer/initializeCommand.sh を参照ください。

起動時の儀式がない

ゼロ儀式でサクッと立ち上がります。
依存関係のインストールや開発環境の起動すら勝手にやるようにしています。
JTCの方が見たらひっくり返ると思います(元JTC)

余計なものは入れない

最低限、自分の中で必須と思うものしか入れていません。
カスタムの余地を大いに残しています。

TailWindCSS等のUIフレームワーク等は人により好みがまちまちだと思うので何も入れていません。

好きに調理してください!🍞

より高みを目指す方へ

コンテナ外へのアクセス制限等は設けていません。
もっとセキュアにしたい方はこちらをどうぞ
(´・ω・)つ Anthropic's Devcontainer

特に init-firewall.sh が肝です。
私はあんまり理解できなかったので取り入れてません💥🤛

有名どころのOSSでも割とデブコンしているとこが多いので見て回ってみると面白いです。
Next.js: Dockerfile を定義してベースイメージをがちゃがちゃ拡張するタイプ
TypeScript: キレイ!
CPython: devcontainer.json にまじで全部書くタイプ
numpy: めっちゃシンプル!
わたし: devcontainer.jsonライフサイクルスクリプトでがちゃがちゃやるタイプ

さいごに

ここまで読んでいただきありがとうございます!
少しでも参考になったらリポジトリに⭐とこの記事に♥️おねがいします🙏

ご指摘点や不明点や要望等あったらコメントにおねがいします!

FYI
https://docs.anthropic.com/ja/docs/claude-code/devcontainer

https://zenn.dev/mixi/articles/c2a11b1765b149

HCプロデューステックブログ

Discussion