202008/28-29に開催されるPycon JP 2020 Onlineにて、スポンサーブースでLTをやることになりました。
ネタとしては、
- challenge-every-monthで行なっている「Effective Python 第2版」の読書&質疑応答が、Python初学者の自分にどういう影響を与えたか
- VSCode Remote Container でPythonお試し環境を作った時のメモ - ざきの学習帳(旧 zackey推し ) を元に Python x Remote Containerの使い道
の2択を考えていました。
ただ、Pyconはそれなりの金額を払った方が参加されていると考えると、読書会の話は需要あるのだろうか...と思い、後者「Python x Remote Container」の話をすることに決めました。
この記事では、改めてRemote Container(特に devcontainer.json
)について調べ直したことおよび、Pycon2020のLTに向けて話すことを整理→メモしたいと思います。
[追記]
実際に発表したスライドはこちらになります。
Remote containerとは?
改めてRemote Containerとはなんぞや?というところに触れていきます。
Remote Containerをざっくり説明すると、
になります。
メリット(何が嬉しいの?)
自分の観点から、Remote Containerを使うメリットを挙げてみました。
1. ローカル環境を汚さず、環境差分が少なくなる
※これらは、Remote Containerというより、Dockerコンテナ内で環境構築することでのメリットになります。
ビルド・起動・開発環境含めてDockerコンテナ内に閉じられるため、他人との環境差分による影響が少なくなります。また、ローカルPCへライブラリインストールする必要がないため、他の言語・リポジトリへの開発・動作環境への影響を与えずに済みます。
(補足)ローカル環境を汚さない?
PCへのインストールは行われませんが、コンテナに必要なDockerイメージやコンテナが作成されます。
そういう意味では、ローカル環境汚さないというよりは、開発する上で必要なライブラリインストールが不要...というような言い方が正しいかもしれません。
2. コード補完やVSCodeの拡張機能が使える
ここからは、Remote Containerを使うことによるメリットです。
Remote Containerでは、{rootdir}/.devcontainer/devcontainer.json
と呼ばれるファイルへ、Remote Containerの設定情報を記述します。
設定内容には、
を含ることが可能で、Remote Containerを使わず開発しているときと同様、コード補完やVSCode拡張機能を利用する恩恵があります。
どのような用途で使えるの?
Remote Containerは、現(v0.134.1
)時点でプレビュー版です。
安定さを求める実運用というよりは、以下のような用途で有効と考えています。
1. 技術記事でリポジトリを公開したいとき
pip
- pip - python.jppipenv
- GitHub - pypa/pipenv: Python Development Workflow for Humans.poetry
- GitHub - python-poetry/poetry: Python dependency management and packaging made easy.pyflow
- GitHub - David-OConnor/pyflow: An installation and dependency system for Python
何かを検証・素振りしたリポジトリを公開する際、「どのライブラリ管理ツールを用いて、公開しようか...」と迷ったことはありませんか?
他言語、例えばNode.jsであれば、だいたいnpm
/ yarn
の2択。しかも、どのライブラリをインストールしたかが記述されるpackage.json
をリポジトリに登録しておけば、npm
/ yarn
で利用することが可能です。2
先に紹介したPythonのライブラリ管理ツールは、npm
/ yarn
のような互換性がほぼない3ため、リポジトリ公開時に使用したツールと異なる場合、記事を見た相手に同じツールをインストールすることを強要してしまいます。
その点、Remote Containerを使えば、コンテナ起動時に必要なライブラリをインストールさせてしまえば良いですし、必要あれば、好きなライブラリ管理ツールをコンテナ内に含めてしまえば、相手にインストールを強要しない&手間を省くことができます。
2. PCを変えても、同じ環境を再現したい
Pythonに限りませんが、とある日PCをリプレースしないといけない...というような状況になった際、以前と同じ環境を構築するのは手間だと思います。
Remote Containerだと、
を行えば、以前と同じ環境を再現できます。いちいち「xxをインストールして、yyをあれして...」のような手順をメモ・実施の手間が省けます。
実際の使い方
こちらを参照してください。🙏
LTでは、この辺は抜粋して説明する予定です。
まとめ
まとめると、Python x Remote Container(Docker)で使うと以下のようなメリットがあります。
- Dockerを使うと...
- 開発環境に必要なライブラリ類をコンテナ内にまとめられるため、他言語・リポジトリへの影響を与えないで済む
- Remote Containerを使うと...
- Python x Remote Containerは、用途で使えるか?
おわり
以上となります。
これらの内容を抜粋し、LTへまとめたいと思います。
もし気になる点等ありましたら、FBいただけると助かります。 🙏
-
こちらの記事で、詳しく解説されています。 - 2020 年の Python パッケージ管理ベストプラクティス - Qiita↩
-
package.json
だけだと、ライブラリのバージョン差分等が発生するため、npm
の場合はpackage-lock.json
。yarn
の場合はyarn.lock
を含めておくべき。↩ -
ライブラリ管理情報を
requirements.txt
へインポート・エクスポートする手もありますが、ツール独自のスクリプト等はコピーされません。↩