「Python FlaskによるWebアプリ開発入門」で始める開発シリーズ パート1

このシリーズはPythonのWebフレームワークである、Flaskを使ったwebアプリ開発の勉強を行った議事録です。

Luca

こんにちは!私はプロフィールにもありますが、現在子供向けにプログラミング教室の講師をしています。
HTML、CSS、WordPressを駆使したウェブサイト制作の経験を活かし、今回はWebアプリ開発の世界に飛び込むことにしました。このシリーズでは、Flaskの基本から応用までを一緒に学んでいきます。

Flaskとは

FlaskはPythonで書かれた軽量のWebアプリケーションフレームワークです。

そのシンプルさと拡張性が特徴で、小規模なプロジェクトから大規模なアプリケーションまで幅広く対応可能です。 Flaskは「マイクロフレームワーク」と呼ばれ、必要最小限の機能だけを提供しつつ、追加のライブラリやツールを組み合わせて使用することができます。基本的なWebサーバー機能とルーティングが備わっており、テンプレートエンジンを通じてHTML出力を簡単に行えます。

また、データベース操作やフォーム処理、セッション管理などの複雑な機能は、外部ライブラリを追加することで容易に実装可能です。Flaskはその柔軟性から、学習者やスタートアップ企業に特に人気があります。

Flaskのルーティングとは?

Webアプリケーション開発において、ルーティングは非常に重要です。これにより、訪問者が求めるページに正確に導かれます。Flaskでは、装飾子 @app.route() を使用してURLと関数を結びつけ、効率的なページ管理を実現します。

テンプレートエンジンの活用

Flaskの強力なテンプレートエンジン「Jinja2」を使用することで、HTMLファイルに動的なデータを簡単に組み込むことができます。これは、Webアプリケーションにおいて動的コンテンツを生成する際に不可欠です。

参考資料

今回、Flaskの勉強に選んだ書籍は【Python FlaskによるWebアプリ開発入門 物体検知アプリ&機械学習APIの作り方】です。

ネット上のおすすめでも比較的ポジティブな意見が多数見られたので選びました。

情報を取得できませんでした。

本書は、以下の内容で構成されています。

  1. Flaskの基本: Flaskのインストールから基本的なアプリケーションの構築、ルーティングやテンプレートの利用方法を説明します。
  2. 物体検知アプリの作成: TensorFlowやその他の機械学習ライブラリを使用して、画像内の物体を検出するアプリケーションの開発プロセスを解説します。
  3. 機械学習APIの構築: 学習済みのモデルをAPIとして公開し、他のアプリケーションからアクセス可能にする方法を学びます。
  4. デプロイメント: 作成したアプリケーションをクラウドサービス上にデプロイする方法を案内します。

初心者目線の評価

  • 実践的: 本書は理論よりも実際のコードの書き方やトラブルシューティングに重点を置いており、実際に手を動かしながら学べる点が魅力です。
  • 分かりやすい説明: 初心者でも理解しやすいよう、基本的な概念から丁寧に説明されています。
  • 前提知識が必要: 物体検知や機械学習の基本的な知識がある程度必要で、全くの初心者にはややハードルが高いかもしれません。
  • 網羅性: 特定のプロジェクトにフォーカスしているため、Flaskの全機能や機械学習の全体像を網羅しているわけではありません。

全体として、この書籍はプログラミングやFlaskにある程度慣れている初心者には非常に有益ですが、完全な初心者には少し難しい部分があるかもしれません。ですが、実際のプロジェクトを通じて学ぶことができるため、モチベーションを保ちながらスキルアップできる良書と言えるでしょう。

私は、完全な初心者側なので第1部のFlaskの基本でかなり時間がかかりました。
それでも用語やプログラムの動きが分かるようになって来てからは、結構サクサク進めることができました。

chatGPTの使い方

chatGPTに色々な使い方がありますが、私は特にプログラミングのサポートに利用しています。
ベースのコード生成やエラー箇所の発見などにとても便利です。
今回のFlask勉強には、普段のエラー箇所の特定に加えて、わからない用語などの解説に利用しました。

以下に手順をざっくり説明します。

STEP

エラー内容の特定

エラーが出た際には、VSCodeのターミナルに必ずエラーの理由を教えてくれます。まずは、その内容を確認しましす。

下線部:エラーで止まってしまう箇所(必ずしもここが間違っているわけではない)
赤枠:エラー内容

STEP

エラー内容をGPTに質問

エラー内容が特定出来たら、GPTにエラー内容入力して原因を探ってもらいます。
このとき、ただエラーだけを入れるのではなくエラーの解説、原因、解決方法を聞くのがポイントです。

jinja2.exceptions.UndefinedError: ‘apps.auth.forms.LoginForm object’ has no attribute ‘password’

このエラーの解説と原因、解決方法を教えて

この返答の中で分からない事があったときに、そのまま質問出来るのがGPTの良いところです。

STEP

GPTの解説をもとにエラー箇所を判定

ターミナルの下線部を参考にどのファイルのどこでエラーが起きているかを探します。
大抵の場合はスペルミスがほとんどなので、書籍の内容と見比べてスペルミスが無いか探してください。

どうしても見つからないときは、書籍の内容で修正、追加したコードをGPTに入れて、間違いを探してもらいましょう。

実際のGPTとのやり取りの1部を記載しておきます。

jinja2.exceptions.TemplateNotFound: auth/base,html
このエラーの解説と原因、解決方法を教えて

jinja2.exceptions.TemplateNotFound: auth/base.html というエラーは、Jinja2テンプレートエンジンが指定されたテンプレートファイル auth/base.html を見つけることができなかったときに発生します。この問題にはいくつかの一般的な原因があります

1.ファイルパスの誤り: テンプレートファイルの名前やパスに誤りがある可能性があります。たとえば、auth/base,html というエラーメッセージにはコンマ(,)が含まれているので、これがタイプミスであれば auth/base.html とすべきかもしれません。

2.ファイルの配置: テンプレートファイル auth/base.html がプロジェクト内の適切な場所に配置されていない可能性があります。Flask では通常、テンプレートファイルは templates フォルダ内に配置されます。もし auth フォルダがある場合、その中にbase.html が含まれていることを確認してください。

3.テンプレートフォルダの設定: Flaskアプリケーションの設定で、カスタムテンプレートフォルダが指定されている場合、Flaskがデフォルトの templates フォルダ以外の場所を見ている可能性があります。設定を確認し、テンプレートの検索パスが正しいかどうかを確認してください。

4.ケースセンシティブ: ファイルシステムがケースセンシティブ(大文字と小文字を区別する)場合、ファイル名の大文字と小文字が正確に合っている必要があります。

このエラーを解決するために、以下の手順を試してみてください:
・テンプレートファイルの名前とパスを確認し、タイプミスや誤ったファイルパスがないかを確認してください。
・プロジェクト内で auth/base.html ファイルが正しい場所に存在するかを確認してください。
・Flask の設定を確認し、テンプレートフォルダが正しく設定されているかをチェックしてください。

これらの確認を行っても問題が解決しない場合は、プロジェクトのファイル構造や設定の詳細をもう少し教えていただければ、さらに具体的なアドバイスができるかもしれません。

こんな感じで、エラー内容、原因などを説明してくれます。
ちなみにこの時の原因は1のファイルパスの誤りでした。

エラー解決のポイントとして、エラーメッセージの意味を覚えるとエラー箇所の特定がしやすくなります。

代表的なエラーメッセージ

Python

  • SyntaxError: 文法が間違っている。タイプミスや、コロンの忘れ、括弧の不一致などが原因です。
  • NameError: 定義されていない変数を参照しようとしたときに発生します。変数名のスペルミスや、変数が定義される前に使用しようとした場合などです。
  • TypeError: 異なるデータ型に対する不適切な操作を行った場合に生じます。例えば、数値と文字列を加算しようとしたときなど。
  • IndexError: リストの範囲外のインデックスにアクセスしようとしたときに起こります。
  • KeyError: 辞書に存在しないキーを参照しようとした場合に発生します。
  • AttributeError: 存在しない属性やメソッドをオブジェクトから呼び出そうとしたときに発生します。
  • ImportError: モジュールやその中の特定の部分が見つからないときに発生します。

Flask

  • BadRequest (400): クライアントからのリクエストが不正である場合に発生します。例えば、必要なパラメータが足りない時です。
  • Unauthorized (401): ユーザーが適切な認証情報なしに保護されたリソースにアクセスしようとしたときに発生します。
  • Forbidden (403): ユーザーがリソースにアクセスする権限がない場合に発生します。
  • NotFound (404): リクエストされたリソースがサーバー上に見つからない場合に発生します。
  • MethodNotAllowed (405): リクエストされたリソースに対して許可されていないHTTPメソッドを使用した場合に発生します。
  • InternalServerError (500): サーバー側のコードにエラーがある場合に発生します。

まとめ

この記事では、Flaskを用いたWebアプリ開発の入門書「Python FlaskによるWebアプリ開発入門」を通じて学んだ内容と、学習中に遭遇した課題への対処法について共有ししました。
今後は、各部の内容で躓いた点などをその都度、更新していきます。