(ちょっとニッチな)FastAPI環境構築の巻(その1)

Date:

Share post:

最近Tさんがすごい勢いで記事を書かれているので、サボった自分を反省しつつ、記事を書こうと思います。

今回はPythonのAPI環境についてです。インターネットなどで調べるとPythonのWebフレームワークには

  • Django
  • Flask
  • FastAPI
  • Bottle

がよく話に挙げられている気がしています。

個人的には、

  • API開発における基本的な要素が簡潔に記述できる(ルーティングやデータバリデーション、レスポンスフォーマットなど)
  • コードが増えても複雑化しにくい
  • 型ヒント(Type Hint)の活用により、開発者はバグを早期に発見しやすく、デバッグも効率的に行うことができる
  • 非同期処理(async/await)のサポートをデフォルトで備えているため、高トラフィックな環境でもパフォーマンスが落ちにくく、スケーラビリティが求められる現代のアプリケーション開発において非常に適している

というネットでのメリットなどを見まして、今回 FastAPI を試してみようと思った次第です。

題名にある『ちょっとニッチな』ですが、いつもお世話になっている Webmin / Virtualmin 上で環境を作ってみたいと思います。環境については以下の通りです。

OS:Ubuntu 22.04(vagrant box)
Python:3.10.12(デフォルト)
PHP:8.1.2(デフォルト)
MariaDB:10.6.18(デフォルト)
PostgreSQL:17.2(バージョンアップ)

ローカル環境ですので、DBが贅沢な構成?(笑)になっています。何をしようと企んでいるかと言いますと、ドキュメントルートではMariaDBを使用したLaravelの実行環境、サブディレクトリ(/api)でPythonのFastAPIが動作するような環境にしてみたいと思っています。

ではやっていきます。

Webmin / Virtualmin の環境構築についてはいつもの通り(笑)既出なので割愛します。PostgreSQL17の導入については、こちらの記事 で詳しく記載があるのと、今回はFastAPIの方が目的になりますので次の機会にします・・・。

ちなみに以下は今回の作業結果のディレクトリ構成になります。

/home/pgvector-test/apps
├── fastapi/
│   ├── app/
│   │   └── main.py
│   └── venv/
└── laravel/
    └── (laravelのソース)

vagrantの共有ディレクトリを使用するため、appsディレクトリにそれぞれのプロジェクトディレクトリを入れています。ドキュメントルートは以下で設定しています。

/home/pgvector-test/apps/laravel/public

laravelディレクトリの方には、composerをinstall後に、以下コマンドでlaravelのプロジェクト作成を行なっています。

$ composer create-project laravel/laravel laravel (laravelディレクトリにプロジェクト作成)
$ cd laravel
(.envにMariaDBの接続情報を設定)
$ php artisan migrate:fresh
$ php artisan storage:link

ドキュメントルートを表示させてみます。

Laravelのwelcomeページが表示できている状態になりました。では、本題のFastAPIのインストールを行ってみようと思います。

まずはPythonのパッケージ管理ツールであるpipを以下コマンドでインストールします。

    $ sudo su -
    # apt install python3-pip
    # exit

pipがインストールできたらFastAPIをインストールしますが、その前にvenv(Pythonの仮想環境を作成するための標準ライブラリ)を使用するようにします。venvを使用することでプロジェクトごとにPythonやライブラリを管理できるようになります。

    $ sudo su -
    # apt install python3-venv
    # exit
    $ su pgvector-test(作成ユーザー)
    $ cd apps
    $ mkdir fastapi(プロジェクトディレクトリ)
    $ cd fastapi
    $ python3 -m venv venv(仮想環境ディレクトリ)
    $ source venv/bin/activate
  • venvのインストール
  • プロジェクトディレクトリ作成
  • 仮想環境の作成(venv)
  • 仮想環境の有効化

までを行いました。これで仮想環境でのライブラリ管理ができるようになりましたので、FastAPIをインストールします。

    $ pip3 install fastapi[all]

このオプションを使用すると、後述するuvicorn(ASGIサーバ)もインストールされます。

なにしろPython初学者ですので、ネットで調べながら、Github Copilotに尋ねながら進めております・・・。以下にどういうものかを書いておきます。

ASGI: ASGI(Asynchronous Server Gateway Interface)は、Pythonの非同期WebサーバとWebアプリケーション間の標準インターフェースです。ASGIは、従来のWSGI(Web Server Gateway Interface)の非同期版として設計されており、リアルタイムWebアプリケーションやWebSocketのような非同期通信をサポートします。

uvicorn:高速で軽量なASGIサーバで、FastAPIなどの非同期フレームワークと組み合わせて使用されます。uvicornを使用することで、非同期処理を活用した効率的なWebアプリケーションを構築できます。

FastAPIのような非同期フレームワークを使用する場合には、uvicornを使用するのが一般的だそうです。

少々長くなってきましたので今回はここまでとし、次回は uvicornでの動作確認を行ってみたいと思います。

Related articles

画像検索の精度確認(4)

前回の投稿では、エンベディングの前処...

画像検索の精度確認(3)

過去の投稿を通して、TensorFl...

画像検索の精度確認(2)

先の投稿で、類似度の高い画像の識別に...