ざきの学習帳(旧 zackey推し )

日々の学びを書きます

(LTに向けての整理)開発環境として、Python x Remote Containerの使い道

202008/28-29に開催されるPycon JP 2020 Onlineにて、スポンサーブースでLTをやることになりました。

pycon.jp

ネタとしては、

の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の設定情報を記述します。

設定内容には、

  • 有効とするVSCode拡張機能
  • VSCodeのエディタ設定(ローカル環境の設定情報 .vscode/settings.jsonと同様)

を含ることが可能で、Remote Containerを使わず開発しているときと同様、コード補完やVSCode拡張機能を利用する恩恵があります。

どのような用途で使えるの?

Remote Containerは、現(v0.134.1)時点でプレビュー版です。

f:id:kic-yuuki:20200823150507p:plain

安定さを求める実運用というよりは、以下のような用途で有効と考えています。

1. 技術記事でリポジトリを公開したいとき

Pythonのライブラリ管理方法はいくつか存在します。1

何かを検証・素振りしたリポジトリを公開する際、「どのライブラリ管理ツールを用いて、公開しようか...」と迷ったことはありませんか?

他言語、例えばNode.jsであれば、だいたいnpm / yarnの2択。しかも、どのライブラリをインストールしたかが記述されるpackage.jsonリポジトリに登録しておけば、npm / yarnで利用することが可能です。2

先に紹介したPythonのライブラリ管理ツールは、npm / yarnのような互換性がほぼない3ため、リポジトリ公開時に使用したツールと異なる場合、記事を見た相手に同じツールをインストールすることを強要してしまいます。

その点、Remote Containerを使えば、コンテナ起動時に必要なライブラリをインストールさせてしまえば良いですし、必要あれば、好きなライブラリ管理ツールをコンテナ内に含めてしまえば、相手にインストールを強要しない&手間を省くことができます。

2. PCを変えても、同じ環境を再現したい

Pythonに限りませんが、とある日PCをリプレースしないといけない...というような状況になった際、以前と同じ環境を構築するのは手間だと思います。

Remote Containerだと、

  • VSCodeをインストール
  • Dockerをインストール
  • (任意) devcontainer.jsonに記載されているVSCode拡張機能をインストール

を行えば、以前と同じ環境を再現できます。いちいち「xxをインストールして、yyをあれして...」のような手順をメモ・実施の手間が省けます。

実際の使い方

こちらを参照してください。🙏

kic-yuuki.hatenablog.com

LTでは、この辺は抜粋して説明する予定です。

まとめ

まとめると、Python x Remote Container(Docker)で使うと以下のようなメリットがあります。

  • Dockerを使うと...
    • 開発環境に必要なライブラリ類をコンテナ内にまとめられるため、他言語・リポジトリへの影響を与えないで済む
  • Remote Containerを使うと...
  • Python x Remote Containerは、用途で使えるか?
    • 技術記事でリポジトリを公開したいとき
      • Pythonではさまざまなライブラリ管理ツールがあり、リポジトリ公開時、Remote Containerならツール自体をコンテナ内に含められる(相手にツールのインストールを強要しなくてよい)
    • PCを変えても、同じ環境を再現したい

おわり

以上となります。
これらの内容を抜粋し、LTへまとめたいと思います。

もし気になる点等ありましたら、FBいただけると助かります。 🙏


  1. こちらの記事で、詳しく解説されています。 - 2020 年の Python パッケージ管理ベストプラクティス - Qiita

  2. package.jsonだけだと、ライブラリのバージョン差分等が発生するため、npmの場合はpackage-lock.jsonyarnの場合はyarn.lockを含めておくべき。

  3. ライブラリ管理情報をrequirements.txtへインポート・エクスポートする手もありますが、ツール独自のスクリプト等はコピーされません。