こんにちは!開発現場を渡り歩いてきた、あなたの専属シニアアーキテクトです。
AIやデータサイエンスの開発、ワクワクしますよね。でも、こんな経験はありませんか?
「新しいライブラリを入れたら、既存のプロジェクトが動かなくなった」
「Pythonのバージョンや、Pandasの依存関係の地獄にハマって半日溶けた」
……わかります。そのストレス、今日で完全に終わりにしましょう。
今回は、「Docker × Anaconda × VS Code」を組み合わせた、ホストPCを一切汚さない、かつ秒速で再現可能なモダン開発環境の構築法を伝授します。この構成をマスターすれば、あなたのPCは常にクリーンな状態を保ちつつ、どんな複雑なAIプロジェクトも安全に実験できるようになりますよ。
—
なぜ「Docker × Anaconda」なのか?(アーキテクトの視点)
まず、なぜこの組み合わせが最強なのか、その裏側の仕組みを少しだけお話しさせてください。
1. Anacondaの功罪:Anacondaは、データサイエンスに必要な重いライブラリ(NumPy, PyTorch, Scikit-Learnなど)を一網打尽でインストールできる神ツールです。しかし、ローカルPCに直接入れると、グローバルな環境がカオスになり、依存関係が衝突(コンフリクト)を起こします。
2. Dockerによる完全隔離:そこでDockerです。OSごと仮想化するのではなく、プロセス単位で軽量に環境を隔離します。「プロジェクトA用のAnaconda環境」と「プロジェクトB用のAnaconda環境」を、完全に別のコンテナとして同居させることができるため、お互いが干渉しません。
3. VS Code Remote – Containersの魔法:Dockerを使うと「CUIでの操作が面倒くさい」と思われがちですが、VS Codeのコンテナ拡張機能を使えば、「ローカルのVS Codeで操作しているのに、中身は完全にDockerコンテナ(Anaconda入り)で動いている」という夢のような環境が手に入ります。
それでは、実際にその環境を一緒に作っていきましょう!
—
ステップ1:プロジェクトの骨組みを作る
まずは、手元のPCの任意の場所にプロジェクト用のフォルダを作成します。今回は `ai-sandbox` という名前で作ってみましょう。
ターミナル(またはコマンドプロンプト)を開き、以下のコマンドを実行します。
プロジェクト用のディレクトリを作成して移動
mkdir ai-sandbox
cd ai-sandbox
必要な設定ファイルを格納するディレクトリを作成
mkdir -p .devcontainer
この `.devcontainer` というフォルダの中に、DockerとVS Codeを連携させるための魔法のレシピを詰め込んでいきます。
—
ステップ2:Dockerfileの作成(Anaconda環境の定義)
まずは、コンテナの土台となる `Dockerfile` を作成します。
`.devcontainer/Dockerfile` を開き、以下のコードを記述してください。
ベースイメージとして、公式のMiniconda(軽量版Anaconda)を使用する
データサイエンスの基盤として最も安定している Debianベースを指定
FROM continuumio/miniconda3:latest
コンテナ内の作業ディレクトリを /workspace に設定
WORKDIR /workspace
システムのパッケージリストを更新し、Gitなどの最低限必要なツールをインストール
RUN apt-get update && apt-get install -y \
git \
curl \
&& rm -rf /var/lib/apt/lists/
ホスト側にある環境定義ファイル(後述)をコンテナ内にコピー
COPY environment.yml /tmp/environment.yml
Anacondaの環境ファイルを使って、必要なライブラリを一括インストール
RUN conda env create -f /tmp/environment.yml
デフォルトでconda環境が有効になるようにシェルを設定
RUN echo “conda activate ai-lab” >> ~/.bashrc
ENV PATH /opt/conda/envs/ai-lab/bin:$PATH
> 先輩からのワンポイントアドバイス
> ここではフルサイズのAnacondaではなく、軽量な `miniconda3` を採用しています。必要なライブラリだけを後からピンポイントで入れることで、コンテナの容量をスリムに保ち、ビルド時間を劇的に短縮できます。
—
ステップ3:environment.ymlの作成(パッケージの管理)
次に、AnacondaでインストールするPythonのバージョンや、AI・データサイエンスで必須のライブラリを定義します。プロジェクトのルートディレクトリ(`.devcontainer` の外側)に `environment.yml` を作成してください。
Anaconda環境の名前
name: ai-lab
channels:
- conda-forge
- defaults
dependencies:
# Pythonのバージョンを指定
- python=3.10
# データサイエンスの基本三種の神器
- numpy>=1.22
- pandas>=1.4
- matplotlib>=3.5
- scikit-learn>=1.0
# JupyterLab環境(ブラウザでインタラクティブにコードを書くため)
- jupyterlab
- ipykernel
# 必要に応じてpip経由でのインストールも併用可能
- pip
- pip:
# 例:特定の軽量ユーティリティなど
- requests
この `environment.yml` さえあれば、世界中のどのPCであっても、全く同じライブラリバージョンの環境を1秒で再現できます。これが「環境汚染を防ぐ」最大の秘訣です。
—
ステップ4:devcontainer.jsonの作成(VS Codeとの統合)
いよいよ最後のピースです。VS Codeに「このDockerコンテナを使って開発してね」と指示を出す設定ファイルを作ります。
`.devcontainer/devcontainer.json` を作成し、以下のように記述してください。
{
“name: “AI Sandbox with Anaconda”,
// 使用するDockerfileの場所を指定
“build”: {
“dockerfile”: “Dockerfile”,
“context”: “..”
},
// コンテナ起動時に自動でインストールさせたいVS Codeの拡張機能
“customizations”: {
“vscode”: {
“extensions”: [
“ms-python.python”, // Python拡張機能
“ms-toolsai.jupyter”, // Jupyterノートブックサポート
“ms-toolsai.vscode-jupyter-cell-tags”
]
}
},
// コンテナ側でJupyterLabが使用するポート(8888)をホスト側に転送する
“forwardPorts”: [8888],
// コンテナ起動後に自動実行したいコマンド
“postCreateCommand”: “python –version && conda –version”,
// ホスト側のファイルをコンテナ側で非同期に高速マウントするための設定
“remoteUser”: “root”
}
—
ステップ5:コンテナを起動し、JupyterLabで動作確認!
すべての準備が整いました。ここからが感動の瞬間です!
1. VS Codeでプロジェクトを開く
先ほど作成した `ai-sandbox` フォルダをVS Codeで開きます。
2. コンテナを開く
画面左下の緑色のアイコン(>< のようなマーク。Remote Explorer)をクリックし、「Reopen in Container(コンテナで再度開く)」を選択します。
3. ビルドを待つ
初回はDockerイメージのビルドとライブラリのインストールが行われるため、2〜3分ほどかかります。コーヒーでも飲みながらお待ちください(2回目以降は一瞬で起動します)。
精度高い HelloWorld 的な動作確認
コンテナの立ち上げが完了したら、VS Code内の統合ターミナル(`Ctrl + ` ` または `Cmd + \“)を開いてみてください。プロンプトの頭に `(ai-lab)` と表示されていれば、Anaconda環境が完璧にアクティブ化されています!
ここで、JupyterLabを起動してみましょう。
JupyterLabを外部アクセス可能な状態でバックグラウンド起動
jupyter lab –ip=0.0.0.0 –port=8888 –no-browser –allow-root
ターミナルにURL( `http://127.0.0.1:8888/lab?token=xxxx…` のような文字列)が表示されます。VS Codeが自動でポートを転送してくれているため、このURLをクリックするか、ブラウザに貼り付けるだけで、コンテナ内のJupyterLabにアクセスできます!
JupyterLab上で新しいPythonノートブックを開き、以下のコードを実行してみてください。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
乱数を使ってサンプルデータを作成
data = {
‘x’: np.linspace(0, 10, 100),
‘y’: np.sin(np.linspace(0, 10, 100))
}
df = pd.DataFrame(data)
データの先頭を表示
print(df.head())
グラフを描画してみる
plt.plot(df[‘x’], df[‘y’], label=’sin(x)’, color=’blue’)
plt.title(‘Docker × Anaconda HelloWorld’)
plt.legend()
plt.show()
綺麗に正弦波のグラフが描画されましたか?おめでとうございます!これで、あなたのローカル環境を一切汚すことなく、強力でクリーンなAI開発環境を手に入れました。
—
おわりに
いかがでしたでしょうか?
この「Docker × Anaconda × VS Code」の構成を一度覚えてしまえば、新しいプロジェクトに挑戦するハードルが驚くほど下がります。「環境が壊れたらコンテナを破棄して作り直せばいい」という安心感は、エンジニアにとって何物にも代えがたい精神的安定をもたらしてくれます。
明日からのコーディングが、劇的かつ快適なものになりますように。
それでは、良きAIライフを!