最近よく聞かれるんだけど、「PythonでWeb開発やるなら、何から勉強すればいい?」って。範囲が広すぎて、どこから手をつけていいか分かんなくなる気持ちは、すごく分かる。
書店に行けば入門書がずらっと並んでるし、オンライン講座もたくさんある。でも、ただ文法をなぞるだけじゃ、正直、現場で「使える」レベルにはなかなかならないんだよね。何て言うか…武器の使い方は知ってるけど、どういう戦場でどの武器を選べばいいのか分からない、みたいな。
TL;DR
僕の考えだけど、Python Web開発者として一段階上にいきたいなら、この3つを深くやるのが一番早いと思う。フレームワーク、非同期処理、そしてAPI設計。この3つ。これをちゃんと理解すると、見える景色がマジで変わってくる。
じゃあ、まずフレームワークの話から。
PythonでWebアプリ作るときの、まあ土台みたいなもんだね。ゼロから全部自分で書くのは、正直、無謀すぎる。だから、だいたいは「フレームワーク」っていう骨組みを使うことになる。有名どころだと、DjangoとFlask。
これ、どっちか一つを深く知ってるだけで、全然違う。なんでかっていうと、単にコードが書けるようになるだけじゃなくて、「アプリケーションってどういう構造で作るべきか」っていう設計思想が身につくから。これはデカい。
Django: 全部入りのお城みたいなやつ
Djangoは、よく「Batteries-included(電池付属)」って言われる。要するに、Webアプリ作るのに必要な機能が、だいたい最初から全部入ってる。ユーザー認証、管理画面、データベースとの連携(ORMっていうんだけど)、そういうのが全部セットになってる。だから、特に大規模で、管理が複雑なアプリケーション…ECサイトとか、社内システムとか…そういうのを作るのにすごく向いてる。MVT(Model-View-Template)っていう設計パターンがあって、それに沿って作れば、自然と整理されたコードになるっていうのもいいところ。
Flask: 自由設計の小屋みたいなやつ
逆にFlaskは「マイクロフレームワーク」って呼ばれてて、めちゃくちゃシンプル。最初は本当に最低限の機能しかない。ルーティングとか、リクエストをどう処理するかとか、そのくらい。だから、あとは「好きな部品(ライブラリ)を自分で選んで、自分で組み立てていく」っていうスタイルになる。小さいAPI作ったり、ちょっとしたツールをさっとプロトタイプしたい時とかにすごく便利。自由度が高い分、どういう構成にするか、開発者のセンスが問われるとも言えるかな。
DjangoとFlask、どっちがいいの?
これも本当によく聞かれる質問。まあ、どっちが良いとか悪いとかじゃなくて、作りたいものによる、としか言いようがないんだよね。個人的な感覚でざっくり分けると、こんな感じかな。
| 項目 | Django | Flask |
|---|---|---|
| 得意なこと | 大規模で複雑なやつ。ECサイトとかCMSとか、管理画面が大事なアプリ。 | 小さいAPIとか、プロトタイプ。さくっと何か作りたいとき。あとは特殊な要件があるとき。 |
| 学习曲线 | 覚えることは多い。でも型があるから、一度覚えてしまえば、 오히려楽。 | 始めるのはすごく簡単。でも、自由だからこそ、どう作るかの「設計力」が問われる。悩む場面は多いかも。 |
| 思想 | 「The Django Way」。こう作るべき、っていうレールが敷かれてる感じ。 | 「Do It Yourself」。自分で考えて、好きなように組み立てる感じ。 |
| 一言でいうと | フルコース料理。前菜からデザートまで全部用意されてる。 | アラカルト。好きなものだけ注文して組み合わせる。 |
だから、どっちかを「深く」やっておくことが大事。片方をちゃんと理解してれば、もう片方の考え方も「ああ、これはDjangoでいうところの〇〇だな」みたいに、応用が効くようになるから。
次に、非同期処理。これ、地味に大事。
非同期。言葉だけ聞くと難しそうだけど…要は「待ち時間を有効活用する」ってこと。Pythonには`asyncio`っていうライブラリがあって、これを使うと非同期処理が書ける。
例えば、喫茶店で考えてみて。普通の(同期的な)プログラムは、一人の店員さんが、一人の客の注文を聞いて、コーヒーを淹れて、出し終わるまで、次の客の注文を絶対取らない、みたいな感じ。めちゃくちゃ効率悪いよね。
非同期だと、賢い店員さんみたいに振る舞える。Aさんのコーヒーをマシンで淹れてる間(これは待つしかない時間)に、Bさんの注文を聞きに行く。こういうことができるようになる。Webの世界だと、「データベースに問い合わせてる待ち時間」とか「外部のAPIを叩いてる待ち時間」に、別のリクエストを処理したりできるわけ。
