とりゅふの森

GCPデータエンジニアとして生きる

【2022年版】VSCode + Dockerで最強のPython開発環境を構築する【Remote Development】

f:id:true-fly:20211121234034p:plain

こんにちは、2021年もあっというまに年の瀬、師走真っ只中ですね。

今回はPython開発環境構築のお話です。

以前Windowsで最強のPython開発環境をご紹介しました。

www.true-fly.com

この環境を用いれば、

  • 1つの端末で複数のプロジェクトを独立した開発環境で開発できるようにする
  • 面倒な環境構築を手順化し、チームメンバーに共有できるようになる

といったメリットを得られます。

だがしかし!もっと開発環境を簡略化したくはないですか?

今回の目標はこちら!

  • エディタの拡張機能機能やPythonのバージョンをコード化する
  • コードと簡単な手順の共有のみで、チームメンバーで統一した開発環境を構築する
  • 今回はより最強のPython開発環境を、VSCode + Dockerで構築していこうと思います。

    もうすぐ2022年、よりモダンな開発環境でPythonライフをエンジョイしましょう!

    本記事はWindows10で検証しています。

    初期環境構築

    今回はVSCodeとDockerを自分のPCにインストールする必要があります。

    Docker Windowsインストール

    以下に従いインストールします。 docs.docker.jp

    Docker Desktopは起動した状態にしておきましょう。

    VSCodeをインストール

    以下に従いインストールします。 azure.microsoft.com

    VSCode 拡張機能「Remote Development」のインストール

    VSCodeの拡張機能の画面下から下記拡張機能をインストールしましょう。 marketplace.visualstudio.com

    「Remote Development」とは、WSL、リモートマシン、コンテナなどの環境をVSCodeで操作して、開発ができるようになる拡張機能です。
    「Remote - Containers」などの各環境ごとの拡張機能を一纏めにダウンロードできるのが、「Remote Development」になります。

    f:id:true-fly:20211118083445p:plain

    今回は、「Remote - Containers」を使って見ます。「Remote - Containers」は、コンテナの中に入って、VSCode上ではコンテナの実行環境内でプログラムを書いたり、デバッグ、テストすることができます。
    「Remote - Containers」の設定ファイルは、.devcontainer/devcontainer.json、コンテナはDockerfileなどで管理できるため、GitHubなどで他のチームメンバーへの環境の共有も容易にできます。

    Remote DevelopmentでDockerでの開発環境を構築する

    必要な設定ファイルの配置

    まずは通常通りVSCodeでローカルのフォルダを開きましょう。
    その後、以下のファイルを配置していきます。
    ディレクトリ構成は以下の通りです。

    .
    ├── .devcontainer
    │   └── devcontainer.json
    ├── .vscode
    │   └── launch.json
    ├── Dockerfile
    ├── main.py
    └── requirements.txt
    
    • main.py
    from flask import Flask
    
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello():
        name = "Hello World"
        return name
    
    
    if __name__ == '__main__':
        app.run(host='localhost', port=9000)
    
    • Dockerfile
    FROM python:3.9.8
    
    WORKDIR /opt/build
    
    ADD requirements.txt /opt/build/
    
    RUN python -m pip install --upgrade pip
    RUN pip install -r requirements.txt
    
    • requirements.txt
    flake8==3.7.8
    flask==1.1.2
    gunicorn==19.9.0
    

    .devcontainer/devcontainer.json

    {
        "name": "Python3.9 開発環境Docker",
        "dockerFile": "../Dockerfile",
        "extensions": [
            "ms-python.python",
            "njpwerner.autodocstring",
            "mosapride.zenkaku",
            "octref.vetur",
            "ms-python.vscode-pylance",
            "streetsidesoftware.code-spell-checker"
        ],
        "forwardPorts": [9000]
    }
    

    .vscode/launch.json

    {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Python3.9 開発環境",
                "type": "python",
                "request": "launch",
                "program": "${file}",
                "console": "internalConsole"
            }
        ]
    }
    

    コンテナで開発環境を開く

    設定ファイルの作成まで完了したら、画面左下の緑のアイコンをクリックします。

    f:id:true-fly:20211121231615p:plain

    Remote Developmentのメニューが開きます。「Open Folder in Container」を選択し、先程の設定ファイルを置いたフォルダを開きましょう。

    f:id:true-fly:20211121231807p:plain

    初めて開く場合はDockerfileのビルドが始まります。
    以下のように、Python3.9が利用できるDocker環境が立ち上がりました。

    f:id:true-fly:20211121232042p:plain

    python main.py でFlaskを実行してみます。
    .devcontainer/devcontainer.jsonで9000番ポートでコンテナにアクセスすることができました。

    f:id:true-fly:20211121232327p:plain

    まとめ

    今回はVSCodeの拡張機能「Remote Development」を使って、PythonのDocker開発環境を構築してみました。
    Pythonだけであれば、pyenvとvenvを使った環境で十分なところはありましたが、コンテナ環境であれば、

    複数の言語であったり、各種ミドルウェアの設定もDockerfileなどでコード化ができ、チーム内の開発環境の共有がぐっと楽になります!

    ぜひ「Remote Development」を導入して、楽しいVSCodeライフを送りましょう!