VSCode + Pipenv + Docker
で作るPython開発環境
HC勉強会 2018/10/13
動機
● Pythonの環境構築が
(個人的に)ツラすぎたのでまとめておきたい
● 仕事でコンテナ使えてないので、
これを機に少し慣れておきたい
● 元々Python勉強会でやるネタをサボってたので…
1
できるだけ平等で
生産性の高いPython環境を準備する
できるだけ平等で生産性が高い?
● OSを問わず、
● 好きなエディタ, IDEを選べて、
● 使うライブラリの細かいバージョンを揃えられて、
● コマンド数発でゼロから構築できて、
● 自動補完とかが適当に良い感じに動いて、
● 瑣末なエラーは事前に検出してくれて、
● コーディングスタイルを自動で統一してくれる
エディタ選び
インタプリタをインストールする
システムのPythonは2.7
プロジェクトフォルダを作成し、移動
任意のバージョンを指定して
このフォルダ以下を仮想環境として初期化
フォルダ内に色々ファイルが出来る (後述)
初期化が済んだフォルダ内でアクティベート
することで仮想環境に入れる
3.7の仮想環境を作ったので
環境内のバージョンは 3.7
仮想環境固有のファイルが格納される隠しフォルダ
特定バージョンのバイナリへのリンクなど
この環境固有のライブラリ (numpy, matplotlibなど)
新メンバーがやること
1. プロジェクトで使うバージョンのPythonをインストール
2. pipでPipenvをインストール
py -m pip install --user pipenv
3. 環境変数PIPENV_VENV_IN_PROJECTをtrueに設定
4. プロジェクトを git clone
5. プロジェクトフォルダで pipenv install --dev
6. VSCode等でプロジェクトを開けば自動認識
できるだけ平等で生産性が高い?
● OSを問わず、
● 好きなエディタ, IDEを選べて、
● 使うライブラリの細かいバージョンを揃えられて、
● コマンド数発でゼロから構築できて、
● 自動補完とかが適当に良い感じに動いて、
● 瑣末なエラーは事前に検出してくれて、
● コーディングスタイルを自動で統一してくれる
Linter ?
● ソースコードの静的解析ツールのこと
● コンパイラよりも詳細かつ厳密なチェックを行う
文法的には間違っていないがバグを生みそうな記述の検出
PEP = Python Enhancement Proposal
PEP 484 -- Type Hints
Formatter ?
● コードのチェックではなく自動整形を行うもの
● インデント、改行位置、余計な空白の削除、空白行の数 etc.
blackの動作デモ
2
Dockerで
ローカルDjango環境の構築
Docker ?
● 軽量な仮想環境を実現するツール
コンテナの管理、作成、その実行環境の提供
● コンテナ=特定のプロセス(=アプリ)と
動作に必要な環境・設定(=インフラ)を固めた箱のイメージ
● 自分のマシンでは動いたのに…とか
○○さんしか詳しい手順知らない…とか
そういうよくあるデプロイの辛さからの解放を目指す
DOCKER ホスト
DOCKER クライアント
Docker デーモン
コンテナ
Docker ネットワーク
Djangoアプリ
MySQL 5.7
(ローカル専用)
docker build ...
docker-compose ...
レジストリ(Docker Hubなど)
DOCKER ホスト
コンテナ
Djangoアプリ
MySQL 5.7
(ローカル専用)
イメージ
Dockerfile
Alpine Linuxという軽量(5MB!)なディストリに
Python3.7をインストールした公式イメージ
RUN: コンテナ内でコマンド実行
COPY: コンテナ外のファイルをコンテナ内にコピー
Pipfileを元に依存ライブラリをインストール
プロジェクトのソースファイルをコンテナ内にコピーして完成
コンテナ
Docker ネットワーク
Djangoアプリ
MySQL 5.7
(ローカル専用)
開始: docker container run -d -v `pwd`:/app -p 8000:8000 --name web web:latest
停止: docker container stop web
破棄: docker container rm web
“db”のコンテナが立ち上がってからスタートする
Dockerfile内で静的にCOPYしたディレクトリを
マウントして上書きしている
MySQLのイメージを使い、”db”という名前にする
プロジェクトルートの Dockerfileから生成したイメージを使い、
名前を”web”とする
新メンバーがやること
1. Dockerとdocker-composeをインストール
2. プロジェクトを git clone
3. プロジェクトフォルダで docker-compose up -d
4. ブラウザで開く
5. 止めたい場合は docker-compose down
ご清聴ありがとうございました

vscode pipenv docker