Pythonで手軽にアプリを作りたいとき、FlaskとFastAPIという2つのフレームワークが選択肢として挙げられます。Flaskは、軽量で使いやすく、マイクロサービス開発に適しています。一方、FastAPIは、高速でモダンなフレームワークであり、大規模なAPI開発に適しています。今回のハンズオンでは、FastAPIを使って簡単なREST APIを作成します。
FastAPIとは
FastAPIは、Pythonで非同期WebアプリケーションおよびAPIを開発するための高速なWebフレームワークです。Starlette(ASGIアプリケーションとして機能するための軽量HTTPサーバー)とPydantic(データ検証と設定管理を簡素化するライブラリ)の上に構築されています。これにより、FastAPIは高いパフォーマンスを発揮し、非同期プログラミングをフルに活用して、大量のリクエストを効率的に処理できるようになります。簡潔な構文を用いて、RESTful APIを短時間で開発できるため、開発者がより迅速にアプリケーションを市場に投入できるよう支援します。
FastAPIの特徴
高速性
FastAPIは、Pythonフレームワークの中で最高レベルのパフォーマンスを提供します。非同期I/O処理により、I/O操作がブロッキングされることなく、複数のリクエストを並行して処理できます。
簡易性
開発者が直感的に理解しやすい構文を提供し、少ないコードで多くの機能を実装できます。これにより、学習曲線を緩和し、開発速度を向上させます。
自動ドキュメント生成
FastAPIは、OpenAPI(旧Swagger)とJSON Schemaを使用して、APIのドキュメントを自動生成します。これにより、APIのテストやフロントエンド開発者との連携が容易になります。
型ヒントと自動データ検証
Python 3.6+の型ヒントをフルに活用して、リクエストとレスポンスのデータ構造を定義します。これにより、実行時にデータ検証が自動的に行われ、エラーを早期に発見できるようになります。
FastAPIのインストール
ここではインストールの概要を説明します。次の章で環境構築を詳しく説明します。 FastAPIをインストールするには、まずPython 3.6以上がインストールされていることを確認してください。その上で、以下のコマンドを使用して、FastAPIとASGIサーバーであるUVicornをインストールします。UVicornは、FastAPIアプリケーションを実行するために必要な非同期サーバーゲートウェイインターフェース(ASGI)サーバーです。
# pythonのバージョンを調べる
python3 --version
# FastAPIのインストールコマンド
pip install fastapi[all]
または、最小限の依存関係でFastAPIをインストールしたい場合は、次のコマンドを使用して、別途UVicornをインストールできます。
pip install fastapi
pip install "uvicorn[standard]"
これで、FastAPIを使用して、非同期WebアプリケーションやAPIの開発を開始できます。
Fast APIの環境構築
環境構築とは、プログラミングで何かを作る前に、必要な道具を揃えて、使える状態にすることです。例えるとすれば料理を始める前に、食材や調理器具を準備し、キッチンを整えるようなものです。
環境構築は、どのような開発プロジェクトを始めるにあたっても最初の重要なステップです。このセクションでは、FastAPIでのWebアプリケーション開発に必要な環境構築の手順を紹介します。
Pythonのインストール
-
公式サイトへのアクセス
まず、Pythonの公式サイトにアクセスします。
-
インストール
「Downloads」セクションから、お使いのオペレーティングシステム(Windows、macOS、Linux/UNIX)に適したPythonの最新版をダウンロードしてください。
-
インストールプロセスの実行
ダウンロードしたインストーラーを開き、画面の指示に従ってインストールを進めます。「Add Python to PATH」オプションを選択することをお勧めします。これにより、コマンドラインやターミナルからPythonを直接起動できるようになります。
仮想環境の作成
Pythonプロジェクトで仮想環境を使用すると、プロジェクトごとに異なる依存関係を管理できるため、開発が格段に便利になります。venv
はPythonに組み込まれている仮想環境作成ツールです。
-
仮想環境の作成
ターミナルまたはコマンドプロンプトを開き、プロジェクトディレクトリに移動してから、以下のコマンドを実行します。
# プロジェクトディレクトリ作成 mkdir fast-api-handson # プロジェクトディレクトリに移動 cd fast-api-handson # 仮想環境を作成 python -m venv venv
これにより、
venv
という名前の仮想環境が作成されます。 -
仮想環境の活性化
- Windowsの場合
.\venv\Scripts\activate
- macOSやLinuxの場合
source venv/bin/activate
仮想環境が活性化されると、プロンプトに仮想環境の名前が表示されます。
- Windowsの場合
FastAPIのインストール
仮想環境が活性化された状態で、以下のコマンドを使用してFastAPIとUVicornをインストールします。UVicornは、FastAPIアプリケーションを実行するためのASGIサーバーです。
pip install fastapi[all]
# Macなどzshを使用している場合
pip install "fastapi[all]"
エディタの設定
個人的にはVSCodeを使っていますが、次の2つはどちらも便利です。
-
VSCode
Visual Studio Code (VSCode) は、無料で広く使用されているコードエディタです。Python開発用の拡張機能(Python Extension for Visual Studio Code)をインストールすることで、コードの自動補完、デバッグ支援、リンティングなどの機能を利用できます。
-
PyCharm
PyCharmはPython専用の統合開発環境(IDE)で、Community(無料版)とProfessional(有料版)があります。PyCharmには、コード補完、プロジェクト管理、バージョン管理システムの統合など、Python開発に特化した多くの機能が含まれています。
これで、FastAPIを使った開発を始めるための基本的な環境構築が完了しました。
REST APIを作って簡単にテスト
ここでは、FastAPIを使用して基本的なWebアプリケーションを開発するプロセスを紹介します。最初にシンプルな"Hello World"アプリケーションを作成し、次に簡単なパスワード認証機能を実装します。最後に、データベース接続の概要を説明しますが、詳細は別の機会に詳しく解説します。
REST APIって何?
REST APIとは、ウェブアプリケーション同士が情報をやり取りするための、決まった約束事(規約)のことです。この約束事を決めることで、違うウェブアプリケーション同士でも情報のやり取りがスムーズにできるようになりました。
具体的には、以下のようなルールが決められています。
- URIと呼ばれるWebの住所を使って、情報(リソース)を特定する
- HTTPというインターネットの基本プロトコルを利用する
- HTTPの機能(GET, POST, PUT, DELETEなど)を使って、リソースを取得したり更新したりする
このように、REST APIではウェブの既存の仕組み(URI、HTTP)を活用して情報をやり取りするルールを決めています。そのおかげで、プログラミング言語や技術が異なるウェブアプリケーション同士でも連携することができるようになりました。
例えば、スマートフォンアプリと会社のデータベースシステムを連携させる場合、REST APIのおかげで、お互いの技術の違いを気にすることなく情報のやり取りができます。このようにRESTは、ウェブアプリケーションの連携をスムーズにする規約として広く利用されています。
Hello Worldアプリの作成
FastAPIを使用した基本的なWebアプリケーションの作成方法を紹介します。これは、REST APIを作成する最初のステップとなります。
-
アプリケーションの作成
最初のステップとして、以下のコードを
main.py
というファイルに記述します。from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
-
サーバーの実行
以下のコマンドを実行して、アプリケーションを起動します。
uvicorn main:app --reload
-
テスト
ブラウザを開いて
http://127.0.0.1:8000
にアクセスし、{"Hello": "World"}
のレスポンスが表示されることを確認します。
パスワード認証機能の実装
FastAPIの依存性システムを利用して、簡単なパスワード認証機能を追加します。
依存性システムって何?
FastAPIの依存性システムは、依存性注入(Dependency Injection)という概念に基づいています。このシステムを使うことで、コードの再利用性を高め、テストのしやすさを向上させることができます。依存性注入とは、コードの一部(関数やクラスなど)が必要とするオブジェクトや設定を、そのコードの外部から提供することを指します。これにより、コードの各部分をより独立させ、結合度を低くすることができます。
-
依存性の作成
認証機能を提供するための依存性(Dependency)を以下のように定義します。先ほどhello worldを作成した
main.py
ファイルに記述してください。from fastapi import Depends, FastAPI, HTTPException, status from fastapi.security import HTTPBasic, HTTPBasicCredentials app = FastAPI() security = HTTPBasic() def get_current_username(credentials: HTTPBasicCredentials = Depends(security)): if credentials.username != "admin" or credentials.password != "secret": raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Incorrect username or password", headers={"WWW-Authenticate": "Basic"}, ) return credentials.username
-
認証を要求するエンドポイントの作成
認証を通過したユーザーのみがアクセスできるエンドポイントを作成します。これを
main.py
の下部に記述してください。@app.get("/users/me") def read_current_user(username: str = Depends(get_current_username)): return {"username": username}
-
ブラウザで確認
下記URLに接続してみてください。 http://127.0.0.1:8000/users/me
ウィンドウにユーザー名
admin
とパスワードsecret
を入力してログイン。{"username":"admin"}
と表示されれれば成功です。
データベース接続の概要
最後に、データベースへの接続設定について簡単に説明します。詳細な実装方法は、今後別の記事で詳しく解説します。
-
データベース接続
FastAPIアプリケーションでは、SQLAlchemyやTortoise ORMなどのライブラリを利用してデータベースに接続します。これらのライブラリを使うことで、SQLデータベースとの非同期通信が可能になります。
-
概念
データベース接続を管理するためには、接続設定、モデル定義、CRUD操作の実装など、いくつかのステップが必要になります。
以上、FastAPIでの簡単なREST APIの作成方法を紹介しました。
4. まとめ
このハンズオンでは、FastAPIの基本的な概念から環境構築、シンプルなアプリケーション開発、認証機能の実装までを実践しました。FastAPIの高速性と開発の簡便さ、依存性注入の活用、テスト方法などについて学びを深めることができました。
しかし、FastAPIには更なる可能性が秘められています。今後は高度な機能の探索、より複雑なアプリケーション開発に取り組むことで、スキルをさらに磨いていきましょう。特に、データベースとの連携は実践的なWebアプリケーション開発において欠かせません。次回の記事では、FastAPIとデータベースを統合する方法について詳しく解説する予定です。
FastAPIの自動ドキュメント機能の活用や、コミュニティへの参加を通じた継続的な学習も重要です。つねに実験的な姿勢を持ち続け、新しい知見を吸収することで、FastAPIの真の力を発揮できるでしょう。ぜひ次の機会にもご期待ください。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.07.04
エンジニア初学者向けバックエンドエンジニアに必要なスキルセットと勉強法
今回はバックエンドエンジニアを目指すエンジニア初学者の方に向けて、必要なスキルセットを解説します。勉強方法も紹介しているので、ぜひ参考にしてくださいね。
- バックエンド
2024.04.06
初心者向け FastAPIとSQLiteでユーザー管理アプリを作成するハンズオン
バックエンドエンジニアを目指すなら、API開発ができることは必須要件といえます。今回のハンズオンでは、FastAPIとSQLiteデータベースを使って簡単なウェブアプリケーションを作成し、Pythonによる現代的なウェブ開発の基本を学びます。
- バックエンド
- エンジニア
- ハンズオン