DevContainer入門:Pythonで始める安全な開発環境の作り方(初心者向け)

DevContainer入門:Pythonで始める安全な開発環境の作り方(初心者向け)

仕事で名古屋に行ってきたんですが、なぞにおいしい焼肉と出会って隣のサラリーマンと完敗してきた龍ちゃんです。

今回は、Python環境をDevContainerで作っていなくて苦い思いをしたのでPython用のDevContainer環境を作成していきます。

DevContainer構築 with Python

今回作成した環境では、以下の事項を対応してあります。サクッと5分で作る方法に関しては、「DevContainerでサクッと使える実行環境を用意しよう:Pythonを例に紹介」に上がっています。今回構築する環境は、ベースイメージとしてDocker Hubに上がっているPython Offcial Imageを使用しています。

  • 非rootユーザー
  • Pythonコンテナバージョンを指定
  • 環境変数で情報を管理

ディレクトリ構成

今回の構築を目指す環境は、以下のような構成になっています。将来的に拡張することも考慮してDockerfile.devcontainer内にまとめています。

./
|-- .devcontainer
|   |-- Dockerfile
|   `-- devcontainer.json
|-- README.md
|-- compose.yml
`-- .env

ファイルの内容について、解説していきます。

Dockerfile

Dockerfile単体でも動くように、変数は初期値を入れています。新規ユーザーと作業ディレクトリを作成しています。

ARG PYTHON_VER=3.13
FROM python:${PYTHON_VER}

# パッケージ更新
RUN apt update

# 環境変数(UID, GIDについてはidコマンドでdockerの実行ユーザーと合わせた方がよい)
ARG USERNAME="vscode"
ARG GROUPNAME="vscode"
ARG UID=1000
ARG GID=1000
ENV WORKDIR=/home/vscode/python

# タイムゾーン設定
ENV TZ=Asia/Tokyo
# import時に指定ディレクトリからにするためラク
ENV PYTHONPATH=$WORKDIR

# ユーザー追加
RUN groupadd -g ${GID} ${GROUPNAME} && \
    useradd -m -s /bin/bash -u ${UID} -g ${GID} ${USERNAME}

# フォルダ作成&権限者設定
RUN mkdir -p $WORKDIR
RUN chown -R $UID:$GID $WORKDIR

# ユーザーのbinaryディレクトリをパスに追加
ENV PATH=/home/$USERNAME/.local/bin:$PATH

# ユーザー切り替え
USER $USERNAME

# 作業ディレクトリ設定
WORKDIR $WORKDIR

# Python作業用:パッケージ更新
RUN python -m pip install --upgrade --user pip
RUN python -m pip install --upgrade --user setuptools

# パッケージインストール
COPY ./ $WORKDIR/

# 初回以降であればここから作業開始できる
# RUN python -m pip install --user -r requirements.txt

devcontainer.json

{
    "name": "project-python",
    "dockerComposeFile": [
        "../compose.yml"
    ],
    "workspaceFolder": "/home/vscode/python",
    "service": "python",
    "features": {
        "ghcr.io/christophermacgown/devcontainer-features/direnv:1": {},
        "ghcr.io/devcontainers/features/git": {}
    },
    "customizations": {
        "vscode": {
            "extensions": [
                "ms-azuretools.vscode-docker",
                "yzhang.markdown-all-in-one",
                "ms-python.python",
                "ms-python.black-formatter",
                "foxundermoon.shell-format",
                "IronGeek.vscode-env"
            ]
        }
    },
    "remoteUser": "vscode"
}

.env

環境変数の運用は、.gitignoreでの管理がベストです。Pythonのバージョンは環境変数で管理しなくてもよいかと思います。作業者間でPythonバージョンレベルの違いが起きると、トラブルの元です。今回は、環境変数で変更できるようにしましたがリポジトリ単位で判断が必要です。

# Docker用環境変数
UID=1000
GID=1000
PYTHON_VER=3.10

# Python用の環境変数

sample.envでベースの環境変数を用意することで環境の立ち上げが素早くなります。

cp sample.env .env

compose.yml

ここでは、環境変数とDockerfileの積み込みとファイルのマウントを行っています。初期値を与えておくことで.env ファイルがなくても動作するようにしておきます。リポジトリの運用方針によりますね。

services:
  python:
    build:
      context: .
      dockerfile: ./.devcontainer/Dockerfile
      args:
        PYTHON_VER: ${PYTHON_VER:-latest}
        UID: ${UID:-1000}
        GID: ${GID:-1000}
    tty: true
    volumes:
      - type: bind
        source: .
        target: /home/vscode/python
    restart: always

おわり

今回は、Python用のDevContainer環境の構築方法について解説しました。非rootユーザーでの実行、環境変数の適切な管理、そして柔軟なディレクトリ構成により、安全で効率的な開発環境を実現できます。この環境を基盤として、快適なPython開発を始めましょう。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です