空の箱

完全在宅 programmer が自宅からお届けします

『現場のPython』を読んでPythonでWeb Appを作るために必要なものが大体わかった気になった

書籍はこちら。

元々WEB+DB PRESS plus で連載されていた内容をまとめた本。連載期間は2020年6月〜2023年8月のものだったらしいけど、書籍化にあたって加筆されているらしい。

初版の発行は2024年9月と最近である。

この本を読もうと思った経緯

仕事で少しだけPythonを使うことになったから。作るものは簡単なツールだったんだけど、それにあたって環境周りやらLinter、Formatterとかは最近は何を使うといんだろう?っていうのをキャッチアップしたかった。

こればっかりはとっかかりがないことにはドキュメントを見に行くこともできないので、いい感じにまとめられてる情報を求めた結果辿り着いたのがきっかけ。

自分はWebのエンジニアなので、ついでに「PythonでWebアプリ作るなら何がいいんだろう?」っていうのもキャッチできそうなこの本を選んだ。

Pythonというかコード自体はずっと競プロをPythonでやってるから、実装とかの段階に入れば手は全然動く感じ。

逆にそこから入門したいよって人はこの本が最初の一歩だと少ししんどいかも。

読んでみた感想

目的を十分すぎるくらいに達成することができた。本の構成的に環境作るところから実際にREST APIでHTTPを喋るアプリを作るところまでもチュートリアル付きであるので、ハンズオンまでしたい人にはぴったりだと思う。

紹介されていたライブラリなどを適当に挙げていく

DjangoとかFast APIとかFlaskみたいなPythonあんま触ったことなくても知ってるようなものは除く。*1この書籍でWeb作るならってところでは、DjangoとFastAPIが紹介されてた。*2

要は以下で紹介してるのは自分の主観で挙げてるだけなので、「あれがない!」「これも知らんのか」ではなく、いいものを優しく教えてほしい。

ライブラリの詳細とか使い方が気になる人は是非本を買って読んでみることをおすすめする。

Poetry

github.com

パッケージマネージャー。自分のように「pipがあるのでは?」という方もいるかもだけど、pipだとnpmでいうところの--save-devみたいに開発用とかでうまく依存が切り分けるのに一手間かかるので、その辺を楽にするためにこのライブラリが存在するらしい。

black

github.com

フォーマッター。読み落としてるかもなんだけどこれ以外には出てこなかったので、もし他の選択肢があれば是非教えてほしい。

mypy

github.com

linter。他にもMicrosoft製のpyrightやMeta製のpyre-checkなるものがあるらしい。違いとかはまだ見れてないので、この辺も製品ごとにトレードオフとかあれば是非教えてほしい。

github.com

github.com

tox

github.com

lint, format, unit testのコマンドとかを一律で管理してくれるツール。

ドキュメントには、

automate and standardize testing in Python

とあるんだけど書籍ではlintとか込みで紹介されてた。

sentry-python

github.com

監視ツール。アプリケーションのエラー監視やパフォーマンス監視を行うためのプラットフォームである Sentry を Python で利用できるようになる。

struct-log

github.com

ロガー。文字通り構造化ログを出すためのライブラリ。

towncrier

github.com

CHANGELOGをいい感じに楽に生成するためのツール。

Strawberry

github.com

GraphQLを使うためのライブラリ。GraphQLサーバーは作ったことがないけど、他にも競合ライブラリはあるのかな?引き出しとして知っておきたいので、これも教えてほしい。

uvicorn

github.com

開発用のWebサーバー。あくまで開発用なので本番はGunicornなるものを使えと公式が言っている。*3

sqlalchemy

github.com

ORM。ググってみると、FastAPIと使うならコレっていうのが多いっぽい(?)

Djangoは最初からORMがいるらしいので、使わない(剥がさない)限りは特に考えなくてもいいっぽい。

pytest-cov

github.com

カバレッジ測定ツール。

factory-boy

github.com

テストデータをいい感じに生成してくれるツール。

freezegun

github.com

テストコードで時刻をモックするためのライブラリ。

おわり

PythonでWeb作って!!」って突然言われたとしてもとりあえず動かしてリリースする分には困らない程度に必要なものが揃ってる気はする。

…と思ったけどDIしたいってなった時に困るなと思って調べたら、こういうのがあるらしい。

github.com

github.com

このくらい選択肢が揃えば、あとはドキュメント見たりでどうとでもできるので非常にありがたい書籍だった。

チュートリアルというかハンズオンにもなってるので、Pythonの最初の一歩はこの本がめっちゃいいと思う。

*1:一応他に知ってるのを書くとBottle, BlackSheepとか。"知ってる"だけど。

*2:どっちが優れてるとか、Flaskはダメだとかいう話ではないし、書籍でもそういう主張はされていない。DjangoとFastAPIに関しては少しだけど違いについて触れられてた

*3:https://www.uvicorn.org/#running-with-gunicorn