📖

書評:「Python FlaskによるWebアプリ開発入門」

2024/05/29に公開

先に結論

  • 公式で報告されているもの以外の大小さまざまな誤植が多い
  • Flaskについて日本語でがっつりまとまっている本は多くないので勉強になる

読んだ本について

今回読んだ本は表題の通り「Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方」です。
https://www.shoeisha.co.jp/book/detail/9784798175164

本題に移る前に上記のページにある正誤表をまず確認しておくことをおすすめします。

筆者についての事前情報

  • Pythonは3年以上は使っている(はず)
  • データサイエンスが好きでそれ系の仕事をしている
  • Web系はまったくのド素人

読んでみた感想

とにかく誤植が多いです。公式の正誤表に載ってない上に、ネット上で情報がなかなか出てこないので自分で修正しなくてはいけません。それも込みで勉強にはなりました。自分は安直な人間なので、「Amazonでこの書籍を購入する際にレビュー数が多いのに星が4以上である」=「多くの人が読んでいて評価されている本だからきっと議論も盛んで、仮に誤植などあっても情報は見つけやすいだろう」と思ってしまっていたので、似たような思考回路の方は要注意です。そういった後続の方が同じ轍を踏んで、ネット上に情報ない…となって挫折してしまわないように読破にあたって見つけた誤植を共有します。

最近の技術書ですと本に紐づいたGitHubにソースコードと一緒に正誤表があって、誤植に関してインタラクティブに対応するものが多いのでその形をとってもらえたらな、とは思いました。

以下に簡単にいまいちだった点と良かった点をまとめます。

  • いまいちだった点
    • 誤植が多い
      • 公式の正誤表に載っていない
      • ネット上で情報が見当たらない
    • 一部の図がわかりにくい
      • この描き方だと本文中での説明とリンクしないんじゃないか?と思う箇所があった
    • 実装の順序や説明の流れが不親切に感じる点が散見された
      • 「こっちを先に説明してくれたわかりやすかったのに...」という点がちらほら
  • よかった点
    • Flaskについて体系的にまとまっている本は少ないので貴重
    • (副次的)誤植を直すことで理解が深まる
    • Web周りの知識が身につく
      • pytestやデコレータなどはだいぶわかるようになった
      • ただ初めからWeb周りの知識がないと読み進めにくいのでにわとりたまごな感じは否めない
    • DockerやCloud Runのようなデプロイ関係の周辺知識も身につく

誤植について

本題です。
自信のあるものについては確信度:高
もしかしたら自分の知識不足なだけの可能性があるもの確信度:中
誤植ではないがこうしてくれたらいいのになというものには求:改善としてまとめています。

誤植 確信度:高

ページ 元々 修正 説明
p.31 FLASK_ENV=development FLASK_DEBUG=1 (厳密には誤植ではないですが注意喚起)本書はflask 2.0.2なのでこの方式ですがflask 2.3以降ではこの方式は廃止されているのでご注意を
p.51 sesson session 誤字
p.88 図2.3中 Blueprint(物体検知アプリ) temmplate static 図2.3中 Blueprint(物体検知アプリ) temmplate staticディレクトリはないはず。でないとp.173~175でのdetectorアプリの説明と矛盾が生じる
p.90 図2.4中 auth配下のstatic/style.css 削除 p.143ではこのディレクトリはなかったことにされている
p.145 static_foldeに static_folderに 誤字
p.146 {%block content %}認証ページ表示確認 {% block content %}認証ページ表示確認 スペースが必要
p.272 test/conftest.py tests/conftest.py 誤字
p.312 flaskbook_api/api/caluculatio.py flaskbook_api/api/caluculation.py 誤字

誤植 確信度:中

ページ 元々 修正 説明
p.56 ②問い合わせフォーム処理・「問い合わせ完了」画面 ②「問い合わせフォーム処理」・「問い合わせ完了」画面 誤字?
p.124 @crud.route("/users/<user_id>", methods=["GET", "POST"]) @crud.route("/users/int:user_id", methods=["GET", "POST"]) 自分のflaskのバージョンが新しいからなのか型を指定しないとエラーになった。
p.128 @crud.route("/users/<user_id>", methods=["POST"]) @crud.route("/users/int:user_id", methods=["POST"]) 自分のflaskのバージョンが新しいからなのか型を指定しないとエラーになった。
p.277~278 該当コード コロンの削除 コロンがいらない?タプルで渡す必要がない気がする

test_views.py

def upload_image(client, image_path):
    image = Path(get_root_path("tests"), image_path)
    test_file = (
        FileStorage(
            stream=open(image, "rb"),
            filename=Path(image_path).name,
            content_type="multipart/form-data",
-   ),
+   )
    )
    data = dict(
        image=test_file,
    )
    return client.post("/upload", data=data, follow_redirects=True)

求:改善

ページ 要望
p.44, p.48 p.44において「VSCodeでminimalappにtemplatesディレクトリを作成し、そこへindex.htmlを作成します」とあるが、ここに図が欲しかった。次にディレクトリ構成に関する図が出てくるのはp.48の図1.18なのだが、この図には当然templatesディレクトリが書かれている。それまで新規追加する度にディレクトリ構成を図で確認していたため、「あれいつの間にこんなディレクトリ作ったっけ?」となってしまった。
p.90 図2.4中にその時点ではまだ作っていないファイルがあるので、あとから作る旨を記載するか図で分かるようにしてほしかった。
p.226 図8.4の理解が難しかった。図全体の処理をまとめて物体検知アプリケーションだと思うのだが、図では右上の箱が物体検知アプリケーションと記載されていて、image_idの提供しかしていないように見えた。

この本で挫折してしまった方へ

とりあえずこの書籍は割と知識がある前提で書いてあるような気がします。誤植をひょいと自分で直せる方か時間がかかってもいいから読み切るんだ!という根性がある方でないと読破するのは難しいんじゃないかなと思います(自分は後者)。つまり挫折しやすい本なので気にしないでください、ということです。
特にFlaskで何かを作ってみたい!というモチベーションの方、自分も含めたFlask初心者には誤植なのか否かの判断がつかないことも多いので、そういう意味では本著がベストとはいいにくいというのが正直な感想です。
そんな方におすすめなのは「Flask 本格入門」です。
https://gihyo.jp/book/2023/978-4-297-13641-3
こちらの方が発刊も新しく、非常に丁寧に解説がしてあり、初心者が躓かないような配慮を感じます。初心者が最初に読むならばこちらからで間違いないと思います。

最後に

色々書きましたが、体系的にFlaskを勉強することができましたし、結構ボリュームがある本を読破できたことと誤植を調べる過程も勉強になったので読んでよかったです。
この本で学んだ知識をベースに「Flask 本格入門」を片手に持ちながら、アプリ開発に取り組みたいと思います。

Discussion