【番外編②】PC環境を汚さない。VS Code+Docker設定と「AIエディタ」の隔離術



[前回の番外編①]では、DockerとVS Codeを使ってPCを汚さずにRust環境を作る方法を紹介しました。

今回はその続きで、自分がよく調べていて面白かった「バインドマウント」と「ボリューム」の使い分けの話を書いておこうと思います。特に、GitHubで拾ったコードを試す時や、AIエディタにコードを触らせる時に「どっちを使えば安全なのか」が変わってくるので、知っておくと便利です。

セキュリティの裏側の仕組みについても、自分なりに調べた範囲でまとめてみました。

💡 この記事は単体でも読めますが…

番外編①でDockerの導入手順やdevcontainer.jsonの書き方を紹介しているので、合わせて読むとより分かりやすいかもしれません。


📦 コンテナ開発の基本:PCの中に「仮設テント」を建てる

Docker(Dev Containers)を使うと、あなたのPCの中に「Linuxの仮設テント(コンテナ)」を一瞬で建てることができます。

  • メリット: テントの中でどれだけシステムをいじっても、不要になれば「テントごと解体」するだけでPCは元の綺麗な状態に戻ります。
  • 課題: テントを解体すると、中で作った大切なデータも一緒に消えてしまいます。

そこで、データだけを守るために「PC本体のフォルダ」や「専用の金庫」をテントに繋ぐ(マウントする)機能を使います。ここからが本題です。


📁 パターン1:自分のオリジナル作品を作る(バインドマウント)

自分がゼロからコードを書いていく場合は、一番シンプルで使いやすいこの方法を選びます。(※この方法ではGitを使うかどうかは完全に任意・自由です)

仕組みと作り方(PCのフォルダから開始)

💡 バインドマウントの仕組み

パターン1:バインドマウント

🌐 ネット

💻 PC
(Cドライブ)

🐳 コンテナ

📄

👾

コンテナ削除 💥
直結(コンテナ削除後もPCにウイルスが残る)

  1. Windows上に空のフォルダを作ります。
  2. VS Codeでそのフォルダを開き、devcontainer.json を配置します。
  3. 「コンテナーで再度開く」を実行します。

💡 VS Codeの「Dev Containers」拡張機能の活用

前回の記事でコンテナを作成した際にも使用しましたが、「Dev Containers(リモート開発拡張機能)」を使うことで、こうした複雑なマウント構造を意識することなく、ワンクリックで安全な隔離環境を作ることができます。

裏でターミナルを開いて長々としたDockerコマンドを打ち込む必要がないため、非常に強力な拡張機能です。

【拡張機能があればできること】

  1. コンテナの自動構築とマウント
    .devcontainer フォルダの設定を読み込み、拡張機能が自動で「バインドマウント」や「ボリュームマウント」を判断してDockerを立ち上げてくれます。
  2. VS Code内からシームレスに操作
    コンテナの中のターミナルをVS Codeから直接開くことができ、あたかも「最初からその環境がPCにインストールされていた」かのように統合された開発体験が得られます。
  3. 拡張機能のコンテナ内インストール
    Rust Analytics などの言語サーバーや拡張機能も、「PC本体」ではなく「コンテナ側」にインストールされます。

まだ入れていない方は、VS Codeの拡張機能検索から Dev Containers (ms-vscode-remote.remote-containers) と検索してインストールしておくことを強くおすすめします。


➕ 💡 コラム:VS Codeの優秀な交通整理と裏側
ボタンを押した瞬間、VS Codeが裏側でDockerに対し「今画面で開いているこのWindowsフォルダを直結して!」と自動で指示を出します(裏側のコマンド:docker run -v C:\あなたのフォルダ:/workspace)。
この共有フォルダは、PCとコンテナを繋ぐ「どこでもドア(直結した窓)」のように機能しており、コンテナの中で書いたコードは、ドアの向こう側にあるあなたのPCのフォルダに即座に同期・保存されます。

⚠️ セキュリティの注意点(抜け道リスク)

この方法はPCのフォルダと「直結(双方向のトンネル)」しているため、もしコンテナ内でウイルスをダウンロードしてしまうと、どこでもドアを通じてそのままPC本体(Cドライブ)に着地してしまいます。
あくまで「自分が書く安全なコード」を扱う時のみに使用してください。


🛡️ パターン2:他人のコードを安全に試す(ボリュームに完全隔離)

GitHubにあるよく分からないコード(リポジトリ)を試す時は、PC本体のフォルダとは一切繋がない「完全隔離の金庫(ボリューム)」を使う方法があります。

パターン1が「双方向のトンネル」だとすると、こちらはWindowsから直接見えない「隔離された保管庫」というイメージです。

📦 例え話:リビングで開けるか、防爆室で開けるか

怪しい小包(リポジトリ)が届いた時、とりあえず自宅のリビング(Cドライブ)で開けるのは危険です。万が一爆弾(ウイルス)が入っていたら家が吹き飛びます。
そこで、最初から庭に作った分厚いコンクリートの「防爆室」に直接配達してもらい、そこで小包を開けるのがこの手法です。

仕組みと作り方:ネットから「防爆室」へ直接配達

💡 ボリュームマウントの仕組み

パターン2:ボリュームマウント

💻 PC
(完全隔離)

🌐 ネット

📦 Volume
(防爆室)

🐳 コンテナ

👾

コンテナ削除 💥
壁に阻まれPCは無傷(マルウェアは防爆室の中)

  1. Windows上にフォルダは作りません。
  2. 空のVS Codeを開き、コマンドパレットから 「リポジトリをコンテナー ボリュームにクローンする…」 を実行してGitHubのURLを入力します。
➕ 💡 コラム:魔法のボタンの裏側(タネ明かし)
この時、VS Codeは裏側で以下のコマンド操作を全自動で実行してくれています。

  1. 金庫を作る: docker volume create my-vault で、PCからは直接見えない場所に防爆室(ボリューム)を作ります。
  2. 直接ダウンロード: 使い捨ての「運び屋コンテナ」を一時的に立ち上げ、インターネットから直接その防爆室の中にコードをダウンロードします。
  3. 本命の起動: docker run -v my-vault:/workspace のように、Cドライブではなく「金庫」を指定してテントを立ち上げます。

この方法の3つのメリット

  • 隔離性: ダウンロードしたコードに問題があっても、被害は防爆室とテントの中だけで済みます。不要になれば防爆室ごと削除すればPCはそのまま。
  • データの永続化: テントを解体しても、防爆室は残ります。ゲームのセーブデータのように、次回も同じ状態から再開できます。
  • 複数コンテナでの共有: 「Webサーバー用コンテナ」と「画像処理AI用コンテナ」から1つの金庫を同時に参照する、といった使い方もできます。

💡 隔離された金庫からの「3つのファイルの取り出し方」

完全に隔離されていても、手元にファイルを取り出すのは簡単です。管理者が指示した時だけ通る「安全なゲート」を使います。

  1. VS Codeから: 起動中、左側に表示されるファイル一覧は「Windowsのフォルダ」ではなく「金庫の中身を直接映し出している状態」です。VS Codeが隔離された金庫の中を覗き込む安全な「マジックアーム」として機能します。欲しいファイルを右クリックし「ダウンロード」を選ぶだけ(ドラッグ&ドロップで入れることも可能)。
  2. Git経由(王道): コンテナ内から git push でGitHub等に保存し、Windows側で git pull して受け取る。
  3. Docker Desktopから: 管理画面の「Volumes」タブ ➡ 「Files」から、直接PCに「Save」する。

🤖 Google Antigravity等のAIエディタで「完全隔離」を使う方法

Google AntigravityやCursorといった、VS Code派生のエディタを使う場合、AIの暴走からPCを守るためにも「完全隔離(ボリューム)」は非常に有効です。

しかし大人の事情により、これらのエディタには「ボリュームにクローンする」という魔法のボタンが存在しません。そこで、以下の連携プレイを使います。

  1. VS Code(本家)を開く: 「リポジトリをコンテナー ボリュームにクローンする…」を実行し、防爆室(金庫)を作ってコンテナを起動させます。
  2. AIエディタを開く: コマンドパレットから 「Dev Containers: 稼働中のコンテナーにアタッチ (Attach to Running Container…)」 を実行します。
  3. 乗り込む: リストから、手順1で作ったコンテナを選択します。

これで、AIに自由な検証を任せてもPC本体に影響が出ない、より安全なAI開発環境の完成です。


🙋‍♂️ よくある疑問をまとめてみた(Docker&セキュリティQ&A)

💡 補足:以下のQ&Aをはじめ、本記事では分かりやすさのためPC本体(ホストOS)を主に「Windows」や「Cドライブ」と表記していますが、Macをお使いの場合でも基本的な仕組みや危険性は全く同じです。

➕ Q1:コンテナを削除したら、中に入り込んだウイルスも一緒に消えるの?

A:どの「パターン」で繋いだかによります!半分YESで、半分NOです。

  • パターン1(直結トンネル)の場合: コンテナのシステム領域(見えない床や壁)に感染したウイルスはコンテナ削除で消えますが、「Windowsと共有しているフォルダ」に保存されたウイルスは、コンテナを消してもWindowsのCドライブにそのまま残ってしまいます(NO)。
  • パターン2(完全隔離の防爆室)の場合: コンテナを削除しても防爆室(ボリューム)自体は残るためウイルスもそこに生存し続けますが、防爆室ごと削除(docker volume rm)してしまえば、PC本体には一切影響なく完全に消滅させることができます(YES)。
➕ Q2:コンテナ内で新しく作ったファイルや、ダウンロードしたデータはどうなるの?

A:これも「パターン」と作業している「場所(フォルダ)」によって運命が変わります!

  • パターン1(直結トンネル)の場合: 共有フォルダ(ワークスペース)に保存したデータは、即座にPC上のフォルダに保存されるため、コンテナを消してもPCのCドライブに残ります。
  • パターン2(完全隔離の防爆室)の場合: 共有フォルダ(ワークスペース)に保存したデータは「金庫(ボリューム)」内に保管されます。コンテナ本体を何度作り直しても、金庫が壊されない限りデータは前回と同じ状態で維持されます(PCからは直接見えません)。
  • 【共通】繋がっていない場所(/tmpなど): ここは単なる仮の部屋の床です。ここに保存したデータは、VS Codeから「Rebuild(コンテナーの再構築)」を実行しコンテナを作り直した瞬間に、跡形もなく完全に消え去ります。失敗しても一瞬で初期状態に戻せる無茶な実験に最適です。
➕ Q3:完全隔離環境を作る時、なぜ裏側でわざわざ「Git(クローン)」を使うの?

A:Windowsを「完全に素通り」させるためです!
もしブラウザでZIPファイルをダウンロードしてしまうと、一度Windowsのデスクトップ等に着地するため、その瞬間に感染するリスクがあります。それを防ぐため、Windowsには一切触れさせず、「Dockerの隔離空間の中から、インターネット上のコードを直接引っ張ってくる」という目的でGitが使われています。

➕ Q4:「繋ぐ(マウント)」ってことは、その線を伝ってウイルスがWindowsに逆流してこないの?

A:どの「パターン」で繋いだかによります!結論から言うと「完全隔離(ボリューム)」なら逆流しません。

  • パターン1(直結トンネル)の場合: コンテナ内でダウンロードされたファイルは「そのままPC本体のフォルダ」にも同期されるため、ウイルスはあっさりWindowsに到達(逆流)してしまいます。これこそが他人のコードでパターン1を使ってはいけない理由です。
  • パターン2(完全隔離の防爆室)の場合: 逆流できません。コンテナからは「自分に割り当てられた金庫(ボリューム)」しか見えず、Windowsへの道がシステム的に隠蔽されているという「見えない壁」があるためです。

パターン2は、ガラス張りの箱の中にシャーレ(金庫)を置き、外から備え付けの手袋で操作する「グローブボックス」のイメージです。箱の中でウイルスが増殖しても、外の人間には絶対に感染しません。

➕ Q5:金庫(ボリューム)は「Windowsから完全に隔離」って言うけど、物理的にはどこにあるの?

A:実は、あなたのPCのハードディスク(SSD)の中にあります!
インターネットのクラウド上にあるわけではありません。DockerはWindowsの内部に「Windowsからは絶対に覗き見できない、Linux専用の秘密の仮想ハードディスク(WSL 2)」を作り出します。金庫はその秘密の領域に隠されているため、「同じPCの中にあるのに、Windows本体からは完全に切り離されていて安全」という魔法のような状態が作れているのです。

➕ Q6:もし、自分のPC(Windows本体)がすでにウイルスに乗っ取られていたらどうなる?

A:残念ながら、隔離の仕組みは完全に「破綻」します。
Dockerが守ってくれるのは、「外からの脅威からPCを守る方向」だけです。もし土台であるWindowsがすでに感染し(ホストの陥落)、ハッカーに神の権限を握られていた場合、核シェルターの鍵も外から簡単に開けられてしまいます。「VS Codeを乗っ取って通信を監視する」「WSL 2の仮想ディスクごと盗み出す」といった手口で、隔離された金庫の中身も容易に抜かれてしまいます。「Dockerは防護服にはなるが、シェルターにはならない」という限界を知っておくことが重要です。


🎯 まとめ:今日から始める安全な開発

  • 自分でコードを書く ➡ PCのフォルダを共有する(扱いやすさ重視)
  • 他人のコードやAIを試す ➡ ボリュームに直接クローンする(セキュリティ重視)

この2つを使いこなせれば、あなたのPC環境はいつまでもクリーンで安全なままです。

ぜひ、用途に合わせてスマートにDev Containersを使い分けてみてください!

水上凌佑

 水上凌佑

スキル:Java/C/C++/Node.js/PHP/Python/TypeScript/PostgreSQL/MySQL/SpringBoot/Rust/Linux(Omarchy)/AWS/Gemini/Antigravity/Security/Software Design

コメント

この記事へのコメントはありません。

関連記事