devcontainer.json は、Dev Containers で開く開発環境の中身を書く設定ファイルです。どのイメージで動かし、何を入れ、どのポートを開き、開いた後に何を実行するかを1か所にまとめます。置き場所はリポジトリ直下の .devcontainer/ が一般的です。
よく使うキー
image— 出来合いのイメージをそのまま使う。いちばん手軽な開始点build— Dockerfile を指定して自分で組む。パッケージを足したいときはこちらfeatures— 言語ランタイムや CLI を部品として足す。Dockerfile を書かずに増やせるforwardPorts— コンテナ内のポートを手元へ通す。開発サーバーの確認に使うpostCreateCommand— 作成後に1回だけ走らせる。依存のインストールがここに入ることが多いcustomizations— エディタの拡張機能や設定。チームで同じ道具立てを配れるのがここremoteUser— コンテナ内で使うユーザー
近い用語との違い
Dockerfile はイメージの作り方、Docker Compose は複数コンテナの組み合わせ方、devcontainer.json はそれを開発用にどう開くかを書きます。役割が重なって見えますが、アプリを動かすための定義と、人が作業するための定義は分けて持つと管理しやすくなります。本番のイメージに開発用の道具を混ぜずに済みます。
押さえておきたい注意点
ファイルの所有者でつまずくことがあります。コンテナ内のユーザーと、手元のファイルの所有者が食い違うと、生成したファイルが編集できなくなったり、逆に所有者が変わったりします。remoteUser を明示しておくと予防できます。
もう1つは盛り込みすぎです。最初から全部書こうとすると、動かないときに原因が絞れません。イメージ1つで開くところから始め、足りないものを1つずつ足すのが結局早道です。
実務で見るポイント
効き目が大きいのは新しく入った人が初日に環境を揃えられることです。手順書を読ませる代わりにリポジトリを開いてもらえば済みます。postCreateCommand に依存のインストールを入れておくと、開いた時点で動く状態になります。