ホーム

DockerコンテナによるVS CodeでのPythonコーディング

Pythonコードを共有したのに、「私のマシンでは動くのに…」という問題のデバッグに何時間も費やしたことはありませんか?Dockerコンテナは、コード用の輸送コンテナのようなものです。Python環境、ライブラリ、依存関係を1つのボックスにパッケージ化し、どこでも同じように動作させることができます。Docker Hubには何万もの事前構築イメージがあり、すぐに使える環境が公開されているため、手動インストールの手間を省けます。このチュートリアルでは、VS CodeとDocker Desktopを使って、隔離された再現可能な環境でPythonを実行する方法を学びます。

主要な概念

必要なもの

ステップ1:Docker Desktopをインストール

ステップ2:Dev Containers拡張機能をインストール

ステップ3:Pythonプロジェクトフォルダを作成

ステップ4:Dockerfileを作成

# Python slim公式イメージを選択
FROM python:3.12-slim

# 1. システム依存関係をインストール
RUN apt-get update && apt-get install -y \
    git curl build-essential && \
    rm -rf /var/lib/apt/lists/*

# 2. データサイエンスとWebアプリ用のPythonパッケージをインストール
RUN pip install --no-cache-dir \
    pandas matplotlib seaborn streamlit jupyter

# 3. NodeSourceからNode.js LTSをインストール
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - \
    && apt-get install -y nodejs \
    && npm install -g npm@latest

# 4. Claude Codeをグローバルにインストール
RUN npm install -g @anthropic-ai/claude-code

# 5. Streamlitポートを公開
EXPOSE 8501

ステップ5:Dev Container設定を作成

{
  "name": "Python in Docker",
  "build": {
    "dockerfile": "Dockerfile"
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "ms-python.debugpy"
      ]
    }
  },
  "forwardPorts": [8501],
  "postCreateCommand": "python3 --version"
}

ステップ6:Pythonデータ分析スクリプトを作成

# irisデータセットを使ったシンプルなデータ分析
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

# irisデータセットを読み込み
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['species'] = iris.target

# 最初の数行を表示
print(df.head())

# 要約統計
print("\n要約統計:")
print(df.describe())

# ヒストグラムを作成
plt.figure(figsize=(10, 6))
plt.hist(df['sepal length (cm)'], bins=20, alpha=0.7, label='Sepal Length')
plt.hist(df['sepal width (cm)'], bins=20, alpha=0.7, label='Sepal Width')
plt.xlabel('Measurement (cm)')
plt.ylabel('Frequency')
plt.title('Iris Sepal Measurements')
plt.legend()
plt.show()

ステップ7:Streamlit Webアプリを作成

import streamlit as st
import numpy as np
import matplotlib.pyplot as plt

st.title("オールドフェイスフル間欠泉データ")

# ビン数のスライダー
bins = st.slider("ビンの数:", min_value=5, max_value=50, value=30)

# サンプルデータを生成(オールドフェイスフル噴出時間のシミュレーション)
np.random.seed(42)
data = np.concatenate([
    np.random.normal(2, 0.5, 100),
    np.random.normal(4.5, 0.5, 150)
])

# ヒストグラムを作成
fig, ax = plt.subplots()
ax.hist(data, bins=bins, edgecolor='black')
ax.set_xlabel('噴出時間 (分)')
ax.set_ylabel('頻度')
ax.set_title(f'{bins}ビンのヒストグラム')

st.pyplot(fig)

ステップ8:コンテナ内で再度開く

ステップ9:コンテナ環境を理解する

これでLinuxコンテナ内でコーディングしています。これが何を意味するのか探ってみましょう。

pwd

/workspaces/python-docker-demoと表示されます - これはコンテナ内のプロジェクトフォルダです。

ls

作成したフォルダが表示されます:.devcontainer/python/ など。

cd ..
ls

python-docker-demo/だけが表示されます - コンテナは隔離されています。コンピュータの他のフォルダ、デスクトップ、ドキュメントにはアクセスできません。この隔離により、Python環境がクリーンで再現可能になります。

cd python-docker-demo

ステップ10:Pythonコードを行ごとに実行

コンテナにはデータサイエンスパッケージ付きのPythonがプリインストールされています。分析スクリプトを実行しましょう。

ステップ11:Streamlitアプリを実行

プロジェクトには対話型ヒストグラムを作成するデモStreamlitアプリが含まれています。

cd python
streamlit run app.py

ステップ12:簡単な変更を加える

アプリを変更して開発がどのように機能するか見てみましょう。

st.title("私の初めてのPython Dockerアプリ")

ステップ13:Dockerfileを理解する(オプション)

重要な部分:

使用できる他のPythonイメージ:

ベースイメージを変更した後は、コンテナを再ビルドして変更を適用します。

ステップ14:DockerイメージにPythonパッケージをインストール(オプション)

ターミナルでpipを使ってインストールしたパッケージ(pip install package)は一時的で、コンテナを再ビルドすると消えます。パッケージを永続的にするには、Dockerfileに追加します。

RUN pip install --no-cache-dir \
    pandas matplotlib seaborn streamlit jupyter scikit-learn
import sklearn
print(sklearn.__version__)

エラーなくバージョンが表示されれば、パッケージは永続的にインストールされています。

次のステップ

トラブルシューティング

ワークフロー概要

このセットアップにより、プロフェッショナルなPython開発環境が得られます:

日常のワークフロー

すべてがセットアップされたら、日常のルーティンは以下の通りです:

  1. Docker Desktopを起動 - アプリを開いて緑色のステータスインジケーターを待つ(Dockerが実行されている必要があります)
  2. VS Codeを開く - VS Codeを起動してプロジェクトフォルダを開く
  3. コンテナで再度開く - まだコンテナ内でない場合、緑色のアイコン(左下)をクリックしてReopen in Containerを選択
  4. コードを書いて実行 - .pyファイルを編集し、Shift+Enterで行ごとに実行、またはstreamlit run app.pyでアプリを実行
  5. 作業を保存 - コードファイル(.py.ipynb)はコンピュータに保存され、セッション間で永続
  6. コミットしてプッシュ - GitHub Desktopを使用して変更をコミットし、リポジトリにプッシュ

Steven Geが2025年12月7日に作成。