【ITニュース解説】A Super Fast FastAPI Blog Course: 10 Minutes from First Line of Code to Live Deployment
2025年09月20日に「Dev.to」が公開したITニュース「A Super Fast FastAPI Blog Course: 10 Minutes from First Line of Code to Live Deployment」について初心者にもわかりやすく解説しています。
ITニュース概要
FastAPIでブログをわずか10分で開発し、オンライン公開するチュートリアル記事。Python、PostgreSQLなどを用い、コード作成からデータベース連携、Webページ構築、そしてサービスへのデプロイまで、システムエンジニア初心者向けに実践的な手順を解説する。
ITニュース解説
このチュートリアルは、PythonのWebフレームワークであるFastAPIを使って、わずか10分でブログアプリケーションを構築し、インターネット上に公開するまでの手順を解説している。全ての技術的な詳細に深く踏み込むのではなく、実際に動くアプリケーションを素早く作り上げ、それを基に修正や拡張を行うことで効率的に新しいフレームワークを学ぶという実践的なアプローチが特徴である。
このブログアプリケーションは、主にサーバー側の処理と画面のレンダリングを行うもので、PythonのWeb開発で広く使われている技術スタックを採用している。具体的には、Webアプリケーションの基盤となる「FastAPI」と、そのアプリケーションを動かすためのサーバー「Uvicorn」、データを保存するデータベースとして「PostgreSQL」、Pythonコードからデータベースを操作するためのライブラリ「SQLModel」、そして動的なWebページを生成するためのテンプレートエンジン「Jinja2」が使われている。
まず、プロジェクトの開始にあたり、fastapi-personal-blogという名前で新しいディレクトリを作成し、その中に移動する。次に、このプロジェクト専用の「仮想環境」を構築し、有効にする。仮想環境は、プロジェクトごとに必要なPythonライブラリを独立して管理するためのもので、異なるプロジェクト間でライブラリのバージョンが衝突するのを防ぎ、開発環境をきれいに保つ役割がある。仮想環境が有効になったら、requirements.txtファイルに記述されたFastAPI、Uvicorn、SQLModel、PostgreSQL接続用のpsycopg2-binary、Jinja2、環境変数管理用のpython-dotenv、フォームデータ処理用のpython-multipartといった全ての依存ライブラリをpipコマンドでインストールする。
次に、ブログ記事などのデータを保存するための「PostgreSQLデータベース」を準備する。通常、データベースのインストールと設定は手間がかかる作業だが、このチュートリアルでは「Leapcell」のようなオンラインデータベースサービスを利用することで、この初期設定の手間を大幅に短縮している。Leapcellでアカウントを作成し、データベース名を指定するだけで、数クリックでPostgreSQLデータベースをプロビジョニングできる。データベースが作成されると、「Connection String」と呼ばれる接続情報が提供される。これは、アプリケーションがデータベースに接続するために必要な情報である。この機密性の高い接続情報は、プロジェクトのルートディレクトリに作成する.envというファイルに保存する。これは、コードの中に直接書き込まず、環境変数として管理するという、セキュリティ面で推奨される方法である。database.pyというファイルを作成し、python-dotenvを使って.envファイルからこの接続情報を安全に読み込み、sqlmodel.create_engine関数でデータベースエンジンを初期化する。さらに、create_db_and_tables関数を定義し、アプリケーションが起動する際に自動的にデータベースのテーブルを作成する仕組みを用意する。また、get_session関数は、アプリケーションがデータベースとやり取りするための「セッション」(一時的な接続)を提供する役割を担う。
その後、ブログの「記事(Post)モジュール」を実装する。これは、ブログ記事がどのようなデータ構造を持つべきかを定義する部分である。models.pyファイルにPostというPythonクラスを定義する。このクラスには、記事の「ID」(一意な識別子)、「タイトル」、「内容」、「作成日時」といった属性を定義する。SQLModelというライブラリを使うことで、このPythonクラスの定義が自動的にデータベースのpostテーブルにマッピングされる。これにより、開発者はSQL文を直接書くことなく、Pythonコードでデータベースのテーブル構造を定義し、データを操作できる。アプリケーション起動時に呼び出されるcreate_db_and_tables関数が、このPostクラスの定義に基づいて、データベースにpostテーブルを自動的に作成してくれるため、手動でSQLコマンドを実行する必要はない。
Webサイトの見た目を整えるために、「Jinja2」というテンプレートエンジンを設定する。Webアプリケーションでは、サーバー側で動的にHTMLコンテンツを生成してWebブラウザに返すことが多いが、Jinja2はそのための強力なツールである。まず、プロジェクトのルートディレクトリにtemplatesとpublicという二つのフォルダを作成する。templatesフォルダには、Webページの骨格となるHTMLファイルを格納し、publicフォルダには、Webページの見た目を定義するCSSファイルや、動的な機能を追加するJavaScriptファイルなどの「静的アセット」を格納する。例えば、_header.htmlや_footer.htmlのような共通のHTML要素は再利用可能なコンポーネントとして定義し、index.html(ブログのトップページ)、post.html(記事の詳細ページ)、new-post.html(新規記事作成ページ)などの各ページでそれらを組み合わせて使用する。これにより、効率的にWebページを構築できる。また、public/cssディレクトリ内のstyle.cssファイルには、Webページのレイアウト、色、フォントといった視覚的なスタイルを定義するCSSコードを記述する。
いよいよアプリケーションの主要なロジックを記述する。main.pyファイルがFastAPIアプリケーションの心臓部となり、データベース接続、ルーティング(URLと処理の紐付け)、テンプレートのレンダリングといった全てのロジックを統合する。まず、FastAPIアプリケーションインスタンスを作成し、lifespanという非同期コンテキストマネージャーを設定する。これは、アプリケーションの起動時と終了時に特定の処理を実行するためのもので、起動時にcreate_db_and_tables()関数を呼び出すことで、データベーステーブルがアプリケーションの開始時に確実に作成されるようにする。次に、app.mountを使ってpublicディレクトリを/staticというURLパスにマウントする。これにより、ブラウザから/static/css/style.cssといったパスでCSSファイルなどの静的ファイルにアクセスできるようになる。また、Jinja2Templatesを初期化し、templatesディレクトリを指定することで、FastAPIがJinja2テンプレートを読み込んで使用できるように設定する。
main.pyでは、様々なURLパスに対する処理、いわゆる「ルート」または「エンドポイント」が定義されている。
- ルートパスである
/へのアクセスは、ブログ記事の一覧ページである/postsにリダイレクトされる。 /postsパスにGETリクエストがあった場合、データベースからすべてのブログ記事を新しい順に取得し、取得した記事データをindex.htmlテンプレートに渡してWebページを生成し、ブラウザに返す。/posts/newパスにGETリクエストがあった場合、新しいブログ記事を作成するための入力フォームが含まれるnew-post.htmlテンプレートを表示する。/postsパスにPOSTリクエストがあった場合(これは新規記事作成フォームが送信されたときに発生する)、フォームから送信されたタイトルと内容を受け取り、それらを使って新しいPostオブジェクトを作成し、データベースに保存する。保存が成功した後、ユーザーは/postsページにリダイレクトされる。/posts/{post_id}のようなパスにGETリクエストがあった場合({post_id}は特定の記事のユニークなIDを表す)、そのIDに一致する記事をデータベースから取得し、その記事の詳細データをpost.htmlテンプレートに渡して詳細ページを生成し、表示する。 これらの処理では、FastAPIの機能を使ってHTTPリクエストの情報(Request)、データベースセッション(Depends(get_session))、HTMLフォームから送られてきたデータ(Form(...))などを取得し、適切に処理が行われる。
ここまでのステップで、ブログアプリケーションの開発は完了である。アプリケーションを動作させるためには、ターミナルでuvicorn main:app --reloadコマンドを実行する。--reloadオプションは、コードの変更を検知すると自動的にサーバーを再起動してくれるため、開発中のデバッグや変更の確認に非常に便利である。コマンドを実行したら、Webブラウザを開いてhttp://localhost:8000にアクセスすると、自分の作成したブログのホームぺージが表示される。ここで新しい記事を作成し、その詳細ページを確認することで、アプリケーションの全ての機能が意図通りに動作することを確認できる。
最後に、作成したブログをインターネット上で公開する「オンラインデプロイ」を行う。Leapcellはデータベース提供だけでなく、Webアプリケーションのホスティングプラットフォームとしても機能する。まず、これまでに作成したプロジェクトの全てのコードを「GitHub」というバージョン管理サービスにコミット(保存)する。Leapcellは、このGitHubリポジトリからコードを自動的に取得してアプリケーションをデプロイする仕組みを持っている。Leapcellのウェブサイトで「Create Service」をクリックし、先ほどコードをコミットしたFastAPIのGitHubリポジトリを選択すると、LeapcellがFastAPIプロジェクトに必要な設定を自動的に検出してくれる。ただし、DATABASE_URLという「環境変数」は手動で設定する必要がある。これは、.envファイルに記述したデータベースの接続文字列と同じ値を設定する。これにより、デプロイされたアプリケーションが正しいオンラインデータベースに接続できるようになる。「Submit」をクリックしてデプロイプロセスを開始すると、Leapcellが自動的にコードをビルドし、アプリケーションをデプロイする。デプロイが完了すると、Leapcellからブログにアクセスするための「ドメイン」(インターネット上のURLアドレス)が提供される。このURLを共有すれば、世界中のどこからでも自分のブログにアクセスできるようになる。
このように、FastAPIというPythonフレームワークと、いくつかの関連技術、そしてクラウドサービスを組み合わせることで、システムエンジニアを目指す初心者でも、Webアプリケーションを開発し、実際にインターネット上に公開するまでのプロセスを、非常に短時間で体験できる。この一連の経験は、今後のより複雑なシステム開発に取り組む上での貴重な第一歩となるだろう。