[前回の番外編①]では、DockerとVS Codeを使ってPCを汚さずにRust環境を作る方法を紹介しました。
今回はその続きで、自分がよく調べていて面白かった「バインドマウント」と「ボリューム」の使い分けの話を書いておこうと思います。特に、GitHubで拾ったコードを試す時や、AIエディタにコードを触らせる時に「どっちを使えば安全なのか」が変わってくるので、知っておくと便利です。
セキュリティの裏側の仕組みについても、自分なりに調べた範囲でまとめてみました。
💡 この記事は単体でも読めますが…
番外編①でDockerの導入手順やdevcontainer.jsonの書き方を紹介しているので、合わせて読むとより分かりやすいかもしれません。
📦 コンテナ開発の基本:PCの中に「仮設テント」を建てる
Docker(Dev Containers)を使うと、あなたのPCの中に「Linuxの仮設テント(コンテナ)」を一瞬で建てることができます。
- メリット: テントの中でどれだけシステムをいじっても、不要になれば「テントごと解体」するだけでPCは元の綺麗な状態に戻ります。
- 課題: テントを解体すると、中で作った大切なデータも一緒に消えてしまいます。
そこで、データだけを守るために「PC本体のフォルダ」や「専用の金庫」をテントに繋ぐ(マウントする)機能を使います。ここからが本題です。
📁 パターン1:自分のオリジナル作品を作る(バインドマウント)
自分がゼロからコードを書いていく場合は、一番シンプルで使いやすいこの方法を選びます。(※この方法ではGitを使うかどうかは完全に任意・自由です)
仕組みと作り方(PCのフォルダから開始)
💡 バインドマウントの仕組み
- Windows上に空のフォルダを作ります。
- VS Codeでそのフォルダを開き、
devcontainer.jsonを配置します。 - 「コンテナーで再度開く」を実行します。
💡 VS Codeの「Dev Containers」拡張機能の活用
前回の記事でコンテナを作成した際にも使用しましたが、「Dev Containers(リモート開発拡張機能)」を使うことで、こうした複雑なマウント構造を意識することなく、ワンクリックで安全な隔離環境を作ることができます。
裏でターミナルを開いて長々としたDockerコマンドを打ち込む必要がないため、非常に強力な拡張機能です。
【拡張機能があればできること】
- コンテナの自動構築とマウント
.devcontainerフォルダの設定を読み込み、拡張機能が自動で「バインドマウント」や「ボリュームマウント」を判断してDockerを立ち上げてくれます。 - VS Code内からシームレスに操作
コンテナの中のターミナルをVS Codeから直接開くことができ、あたかも「最初からその環境がPCにインストールされていた」かのように統合された開発体験が得られます。 - 拡張機能のコンテナ内インストール
Rust Analytics などの言語サーバーや拡張機能も、「PC本体」ではなく「コンテナ側」にインストールされます。
まだ入れていない方は、VS Codeの拡張機能検索から Dev Containers (ms-vscode-remote.remote-containers) と検索してインストールしておくことを強くおすすめします。
⚠️ セキュリティの注意点(抜け道リスク)
この方法はPCのフォルダと「直結(双方向のトンネル)」しているため、もしコンテナ内でウイルスをダウンロードしてしまうと、どこでもドアを通じてそのままPC本体(Cドライブ)に着地してしまいます。
あくまで「自分が書く安全なコード」を扱う時のみに使用してください。
🛡️ パターン2:他人のコードを安全に試す(ボリュームに完全隔離)
GitHubにあるよく分からないコード(リポジトリ)を試す時は、PC本体のフォルダとは一切繋がない「完全隔離の金庫(ボリューム)」を使う方法があります。
パターン1が「双方向のトンネル」だとすると、こちらはWindowsから直接見えない「隔離された保管庫」というイメージです。
📦 例え話:リビングで開けるか、防爆室で開けるか
怪しい小包(リポジトリ)が届いた時、とりあえず自宅のリビング(Cドライブ)で開けるのは危険です。万が一爆弾(ウイルス)が入っていたら家が吹き飛びます。
そこで、最初から庭に作った分厚いコンクリートの「防爆室」に直接配達してもらい、そこで小包を開けるのがこの手法です。
仕組みと作り方:ネットから「防爆室」へ直接配達
💡 ボリュームマウントの仕組み
- Windows上にフォルダは作りません。
- 空のVS Codeを開き、コマンドパレットから 「リポジトリをコンテナー ボリュームにクローンする…」 を実行してGitHubのURLを入力します。
この方法の3つのメリット
- 隔離性: ダウンロードしたコードに問題があっても、被害は防爆室とテントの中だけで済みます。不要になれば防爆室ごと削除すればPCはそのまま。
- データの永続化: テントを解体しても、防爆室は残ります。ゲームのセーブデータのように、次回も同じ状態から再開できます。
- 複数コンテナでの共有: 「Webサーバー用コンテナ」と「画像処理AI用コンテナ」から1つの金庫を同時に参照する、といった使い方もできます。
💡 隔離された金庫からの「3つのファイルの取り出し方」
完全に隔離されていても、手元にファイルを取り出すのは簡単です。管理者が指示した時だけ通る「安全なゲート」を使います。
- VS Codeから: 起動中、左側に表示されるファイル一覧は「Windowsのフォルダ」ではなく「金庫の中身を直接映し出している状態」です。VS Codeが隔離された金庫の中を覗き込む安全な「マジックアーム」として機能します。欲しいファイルを右クリックし「ダウンロード」を選ぶだけ(ドラッグ&ドロップで入れることも可能)。
- Git経由(王道): コンテナ内から
git pushでGitHub等に保存し、Windows側でgit pullして受け取る。 - Docker Desktopから: 管理画面の「Volumes」タブ ➡ 「Files」から、直接PCに「Save」する。
🤖 Google Antigravity等のAIエディタで「完全隔離」を使う方法
Google AntigravityやCursorといった、VS Code派生のエディタを使う場合、AIの暴走からPCを守るためにも「完全隔離(ボリューム)」は非常に有効です。
しかし大人の事情により、これらのエディタには「ボリュームにクローンする」という魔法のボタンが存在しません。そこで、以下の連携プレイを使います。
- VS Code(本家)を開く: 「リポジトリをコンテナー ボリュームにクローンする…」を実行し、防爆室(金庫)を作ってコンテナを起動させます。
- AIエディタを開く: コマンドパレットから 「Dev Containers: 稼働中のコンテナーにアタッチ (Attach to Running Container…)」 を実行します。
- 乗り込む: リストから、手順1で作ったコンテナを選択します。
これで、AIに自由な検証を任せてもPC本体に影響が出ない、より安全なAI開発環境の完成です。
🙋♂️ よくある疑問をまとめてみた(Docker&セキュリティQ&A)
💡 補足:以下のQ&Aをはじめ、本記事では分かりやすさのためPC本体(ホストOS)を主に「Windows」や「Cドライブ」と表記していますが、Macをお使いの場合でも基本的な仕組みや危険性は全く同じです。
🎯 まとめ:今日から始める安全な開発
- 自分でコードを書く ➡ PCのフォルダを共有する(扱いやすさ重視)
- 他人のコードやAIを試す ➡ ボリュームに直接クローンする(セキュリティ重視)
この2つを使いこなせれば、あなたのPC環境はいつまでもクリーンで安全なままです。
ぜひ、用途に合わせてスマートにDev Containersを使い分けてみてください!
コメント