概要
機械学習、AI、データサイエンス領域が熱い今、最も注目を浴びてる言語の1つがPythonだと思います。
ここではPythonをこれから学ぶ方へのファーストステップとしてフロントエンド開発者的にはとっつきやすい簡易API作成をDocker,Pythonを使って行います。
それによってPython開発環境の準備ができればと思います。
環境
- Mac
- Docker for Macが既に入っている
環境構築
Docker準備
以下ファイルを作成します。
version: '3'
services:
python3:
restart: always
build: .
container_name: 'python3'
ports:
- "8000:8000"
working_dir: '/root/'
tty: true
volumes:
- ./src:/root/src/
- ~/.zshrc:/root/.zshrc
※.zshrc
ファイルはローカルで使っているものとコンテナにログインした時に同じようにシェルを使ってみたかったという理由でマウントしてあります。あまり本質的ではないので、不要なら削除しておいた方が良いです。
FROM python:3
USER root
RUN apt-get update
RUN apt-get install -y vim less
RUN apt-get install -y zsh less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
EXPOSE 8000
CMD ["bash"]
Dockerコマンド
以下よく使うDockerコマンドです。
- コンテナを起動
$ docker-compose up -d
- プロセス確認
$ docker-compose ps
- コンテナ内に入る(zsh)
$ docker-compose exec python3 zsh
- bashで入る場合
$ docker-compose exec python3 bash
- ビルド処理の反映(Dockerfileの反映)
$ docker-compose up -d --build
- log確認
$ docker-compose logs python3
- コンテナ削除
$ docker-compose down
Python開発用のエディタ
Kiteというエディタが良さそうだったので試してみます。
Kiteを入れるだけでAtom、VSCode、Vim、PyCharmなどのエディタで補完をしてくれます。
フロントエンド開発で普段使っているエディタをそのまま使えそうで良いです。
参考:Pythonで開発するならKiteを導入して爆速開発 - Qiita
FastAPIを試してみる
概要
FastAPIはPython製のAPIフレームワークです。名前の通り非常に高速なのが特徴です。
また自動でSwaggerのドキュメントも生成してくれるのでフロントエンド開発のAPIモック作成とかにも使えそうです。
https://fastapi.tiangolo.com/
インストール
- 準備したdockerコンテナ上にFastAPIをインストール
$ docker-compose exec python3 pip install fastapi uvicorn
- ローカルでマウントされている
/src
以下にmain.py
ファイルを作成
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
- FastAPIを実行
$ docker-compose exec python3 zsh -c "cd src && uvicorn main:app --host 0.0.0.0 --reload"
※uvicornはデフォルトホストが127.0.0.1
になっていますが、ローカルからポートフォワードされている0.0.0.0
を指定します。
参考:Uvicorn
- 以下URLで確認
感想
今回はフロントエンド開発者がまずはPythonの開発環境になれるようにFastAPIを使って簡単なAPIを作成するのを試してみました。Dockerの環境で自由にPythonを触れるのでそこでAPI以外にも色々な開発ができるかなと思います。
FastAPIのように軽量で高速なフレームワークがあると、フロントエンドで使うAPIの開発でも今後Pythonが選択されることが増えてくるかなと思うので、Pythonに慣れておくのは非常に重要だなと感じています。