本記事は2023 夏のブログ連載企画7日目の記事になります。
明日はy.fさんのブログが公開されます。ご期待ください!
本記事のテーマは「Pythonツール・ライブラリ2選 ~私、気になります!~」です!
自己紹介と導入
はじめまして。虎の穴ラボ株式会社売上向上チームのiwadyです。
昨今の機械学習や生成AIブームもあり、機械学習系のライブラリが豊富なPythonは開発言語としてますます注目度が増していますね。
2023年度Stack Overflow Developer Survey(https://survey.stackoverflow.co/2023/#overview) ではJavaScript、HTML/CSSに次いで3番目に使われる言語としてPythonがランクインしたり、Mojo などPythonをベースとした開発言語の話題もあったりと、Python界隈は大変活気づいていると言えます。
本記事ではPython好きな筆者が「私、気になります!」なPythonツール・ライブラリを2つ紹介し、最後にそれらを使って簡単なWebアプリケーションを作成してみようと思います。
筆者の実行環境
筆者の実行環境は以下になります。
- デバイス : MacBookPro(M2)
- MacOS : Ventura13.4.1
- メモリ : 32GB
1. Rye の紹介
Rye(ライ)はPythonのパッケージ管理とPythonのバージョン管理を統合的に行う事ができるツールです。
Rye以前はローカルでの開発時はpipやpoetryなどのパッケージ管理ツールとpyenvのようなインタプリタのバージョン管理とを別々に行わなければなりませんでした。
Ryeはこの問題を解決できる便利ツールになります。裏側で動いているpipなどについて基本的に開発者は意識する必要はありません。
それでは、Rye のインストール方法を紹介します。
Rye のインストール方法
ターミナルにて以下のコマンドを叩きインストールします。執筆時(2023/6/29現在)は latest が 0.9.0 になっています。
curl -sSf https://rye-up.com/get | bash
現状特にバージョンを指定する必要はないかと思いますが、もし特定のバージョンを指定してインストールを行う場合は以下のように RYE_VERSION を指定します。
curl -sSf https://rye-up.com/get | RYE_VERSION="0.4.0" bash
その後、以下を.profile ファイルなどに追加してターミナルを再起動するか、source で該当ファイルを再読み込みしてあげれば導入終了です。
source "$HOME/.rye/env"
2. FastAPI の紹介
FastAPIは、2018年に公開されたPythonのWebアプリケーションフレームワーク(WAF)です。
PythonのWAFの歴史は1990年代後半のZopeから始まり様々なWAFが開発されてきました。
最近ではプロジェクトの規模や要件に応じて DjangoやFlask が選択肢となる事が多いように思われますが、数あるPythonのWAFの中で今注目を集めているのはFastAPIかなと個人的に思っています。
FastAPIは、Flaskに影響を受けた優れたコーディングスタイルや非同期I/Oへの対応などを特徴としています。今後はDjangoやFlaskと共にFastAPIもより多くの開発者に利用されることになるのではと思っています。
それでは、早速先ほど導入したRyeでFastAPIをインストールし、簡単なWebアプリケーションを作ってみましょう。
3. Ryeを使ってFastAPIのWebアプリケーションを作る
まずプロジェクトを作成します。ディレクトリも作成されますので mkdir コマンドで別途作成する必要はありません。
今回は tora_sample という名前のプロジェクトにします。
rye init tora_sample
その後、環境の初期化を行うため sync コマンドを叩きます。
rye sync
本記事の執筆時点ではデフォルトでcpython@3.11.3がインストールされますが、cpythonのバージョンを変更したい場合はpinコマンドで変更できます。
ダウンロード可能なcpythonのバージョンは rye toolchain list --include-downloadable コマンドで確認できますが、使いたいPythonのバージョンがRyeに対応していない可能性もあるので注意してください。
それでは、pinコマンドでバージョンを変更したらsyncを忘れずに行いましょう。
rye pin cpython@3.8.16 rye sync
次に、FastAPIをインストールしていきます。installコマンドではグローバルにインストールしてしまうので注意しましょう。
rye add fastapi
FastAPIで非同期I/Oを利用する場合、ASGI(Asynchronous Server Gateway Interface) に対応している Uvicorn などの Web サーバも導入する必要があります。
rye add 'uvicorn[standard]'
最後に忘れずに sync コマンドを叩きましょう。
rye sync
main.py を作成したら、Uvicorn を起動します。
main.py
from fastapi import FastAPI app = FastAPI() @app.get("/") async def hello_world(): return {"message": "HelloWorld!!"}
rye run uvicorn main:app --reload
実際の導入ではGunicornも導入して複数のワーカープロセスでリクエストの並列処理を行うなど検討しても良いかもしれませんが、ここでは省略します。
実際にcurlで叩いてみてレスポンスがあれば成功です。
curl http://127.0.0.1:8000/
まとめ
本記事では、パッケージ管理と処理系を統合管理できる Ryeと高速且つ非同期I/Oで大量のトラフィックを捌くのに向いている FastAPI について紹介しました。
こうした新しいツールやライブラリが今後のPython界隈をより賑やかにしていくものにしていくと思います。
ただし、ツール・ライブラリの成熟度を個別に見てみると、FastAPIについては今後メンテナンスが行われていく可能性が十分に期待できますが、Ryeについては開発者のmitsuhiko氏がRyeのREAD_MEで言及しているようにexploration(探究、冒険)の側面もあり継続的にメンテナンスが行われていくかは不透明です。
現時点ではRyeのプロジェクトへの導入については慎重に行う必要があると言えます。
ただ本記事の冒頭でお話しした既存のPythonの課題を解決する試みなので今後に期待したいですね。
採用情報
虎の穴では一緒に働く仲間を募集中です!
この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。
カジュアル面談やエンジニア向けイベントも随時開催中です。ぜひチェックしてみてください。 yumenosora.co.jp