「伸び悩んでいる3年目Webエンジニアのための、Python Webアプリケーション自作入門」を更新しました
本を更新しました
チャプター「共通機能パッケージを整理する」 を更新しました。
続きを読みたい方は、ぜひBookの「いいね」か「筆者フォロー」をお願いします ;-)
以下、書籍の内容の抜粋です。
パッケージを整理する
前章でhenango
というパッケージを作成しました。
改めて説明しておくと、このパッケージは 「仮にこのWebアプリケーションを使って全く別のWebサービスを作ることになった場合でも必要になる(=使い回せる)機能」 をまとめるパッケージです。
例えば「Webサービス」を作るといっても、「個人のブログ」や「キュレーションメディア」から、果ては「Gmail」や「Github」まで様々なものがあります。
しかし、どんなWebサービスを作るにしろ、
- HTTPリクエストを送受信できる
- HTTPリクエストをparseして、HTTPRequestクラスに変換する
- リクエストのpathを見て、エンドポイントごとに違う「レスポンス生成関数」を呼び出す
- cookieやsessionを管理する(後ほどでてきます)
などの機能は必ず必要になります。
これらの共通機能だけを1つのパッケージにまとめておくことで、色々なWebサービスを作ることになったときも使いまわしが効きます。
より具体的に言うと、ブログを作るにしろ、メディアを作るにしろ、共通機能パッケージをまるごとコピーして、urls.py
とviews.py
だけ編集すればすぐに新しいWebサービスが構築できますよ、といった具合です。
これらの共通機能部分のことを総称して Webフレームワーク と呼び、様々な種類のものがライブラリ化され世の中に出回っています。
PythonであればDjango
やFlask
、PHPであればLaravel
やCakePHP
、JavaであればSpring
、Goであればecho
などが有名です。
本書で作るWebアプリケーションは、厳密に言うと共通機能と呼べるものは存在しません。
このWebアプリケーションを「共通で」使うことになる複数のWebサービスが存在しないからです。
YAGNIの法則 に従えば、実際にこのWebアプリケーションを使って複数のWebサービスを作ることになるまで共通機能部分の切り出しは行わないほうが良いでしょう。
しかし、皆さんが普段使っているであろうWebフレームワークの挙動をより深く理解する、というのが本書の目的の一つですので、この共通機能(=フレームワーク)部分とサービス固有の部分とを区別して整理しておくことにします。
以後は
「仮にこのWebアプリケーションを使って全く別のWebサービスを作ることになった場合でも必要になる(=使い回せる)機能」
をhenango
パッケージにまとめていきます。
このhenango
パッケージは、皆さんの使ったことがある「Webフレームワーク」に相当するパッケージですので、そのことを意識しながら
「henango
でいう〇〇という機能は、Laravel
でいう××という機能のことかなぁ」
などと照らし合わせながら読み進めていただけると効果的かと思います。
パッケージの整理は細々とした変更をそれなりの量加えることになりますので、いくつかのステップに分けて説明していきます。
webserver.py
から分離する
STEP1: サーバーの起動スクリプトを現在、サーバーの起動スクリプトがwebserver.py
に含まれています。
この後webserver.py
をhenango
モジュールへお引越しする予定なのですが、起動スクリプトはプロジェクトのトップディレクトリ(= study
ディレクトリ)にないとimportが面倒なことになりますので、まずはこれを分離させます。
(python
のご都合だと思っていただいて構いません。多くの言語で、セキュリティの観点から起動スクリプトより上位ディレクトリのソースコードは実行しにくくできています。)
study
ディレクトリに起動スクリプトstart.py
を追加し、webserver.py
からサーバーを起動する記述を削除します。
ソースコード
study/start.py
解説
study/start.py
from webserver import WebServer
if __name__ == "__main__":
WebServer().serve()
特に解説は不要でしょう。
webserver.py
にかかれていた記述を切り出しただけです。
study/webserver.py
49行目以降
# 削除
# if __name__ == "__main__":
# WebServer().serve()
サーバーを起動する記述が書かれていたのを削除しました。
動かしてみる
起動スクリプトが変更になりましたので、起動コマンドも変更になります。
今回からは、コンソールでstudy
ディレクトリまで移動した後、
$ python start.py
としてサーバーを起動させてください。
(webserver.py
からstart.py
へ変更になっています。)
挙動は変わっていませんので、いくつかのページ(/index.html
や/parameters
など)を表示させてみて、問題がないか確認してください。
webserver.py
をhenango
パッケージへ移動する
STEP2: では、改めてwebserver.py
とworkerthread.py
をお引越しさせます。
henango
ディレクトリ下に、新しくserver
というディレクトリを作成し、その下に移動させます。
また、本書序盤では「Webサーバーとは何か」を説明したり「スレッドとはなにか」を説明するために敢えてファイル名にもそれらのワードを入れていましたが、今となっては少し冗長ですので
【ファイル名】
webserver.py
=> server.py
workerthread.py
=> worker.py
【クラス名】
WebServer
=> Server
WorkerThread
=> Worker
へとついでに変更してしまいます。
Discussion