コンテンツへスキップ

VSCode Remote Container と poetry で Python プロジェクトの属人性を排除した

2/8追記 : poetryで解決される依存関係のバージョンを固定するために、poetry.lockファイルもコミットする必要があるとコメントを頂いたため、当該ファイルについて追記しました。

今日は、多人数開発時に便利な「開発環境の構築」を共通化した試みについて紹介します。

経緯

弊社の開発アシスタントが、複数人数で1つのプロジェクトに関わることになりました。 言語はPythonを使うことが決まっていました。

しかし、今在籍している開発アシスタントには、以下の制約があります。

  • ● 開発アシスタントは学生のアルバイトさんが多い⇒ ガッツリと時間をとって稼働できる人が少ない
  • ホスト環境が割とバラついている(Win/Mac/Linux)

この制約の中で、 開発環境の構築にあまり時間を掛けず業務に入る 準備をする必要がありました。

そこで目をつけたのがVS Code Remote Containerです。

やったこと

VS Code Remote Containerの概要図( 出典元: https://code.visualstudio.com/ )

開発環境の構築 & 配布編

開発アシスタントのリーダーが、以下のように開発環境の構築を行いました。

  1. VSCode Remote ContainerプラグインをVS Codeにインストールする

  2. ワークスペースとなるディレクトリを作成する

    1. の中に以下を準備する
    2. Python + poetryをインストールするDockerfileを用意する
    3. .devcontainer/devcontainer.jsonを用意する
    1. をVS Codeで開くと、開発用コンテナーが立ち上がって、ターミナルなども開いた状態になる
  3. VS Codeのターミナル上でpoetryのプロジェクトを作る

    poetry init
  4. 依存関係をインストールしていく

    $ poetry add numpy
    $ poetry add opencv-python
    $ poetry add matplotlib
    ...
  5. 依存関係のパッケージ名やバージョンがpyproject.tomlに書き込まれていく

  6. 開発環境の利用者がワークスペースを開いた時に、自動的にpoetry installが走るようにする

    1. devcontainer.jsonに以下を書いておく

      "postCreateCommand": "poetry install"
  7. ここまでで作ったものをリポジトリにホストする

    1. Dockerfile
    2. .devcontainer/devcontainer.json
    3. pyproject.toml
    4. [2/8追記] poetryで解決する依存関係の バージョンを固定するためには、poetry.lock ファイルもコミット する必要があります。

環境の一斉構築編

各開発アシスタントは、以下のようにしてあっという間に開発環境を構築しました。

  1. (あらかじめDocker, VS Code, VS Code Remote Containerプラグインはインストールしておく)
  2. リポジトリから以下3つを落としてくる
    1. Dockerfile
    2. .devcontainer/devcontainer.json
    3. pyproject.toml
    4. [2/8追記] poetry.lockも落としてきます
  3. 2。を自分のワークスペースのディレクトリに置いて、そのディレクトリをVS Codeで開く
  4. VS Code Remote ContainerによりDockerfileのビルド、ターミナル立ち上げ、poetry installなどが実行される
  5. 開発環境のできあがり!!

これで、全員が統一された開発環境を使うことができます。 また、devcontainer.jsonには、VS Codeで利用させたいプラグインも指定できるため、linterなどの プラグインも統一したものを使うことができます

弊社では、開発を効率化する試みを積極的に行っています。 興味を持たれた方は、ぜひ採用ページをご覧ください。

© 2003 Kurusugawa Computer Inc.