新機能に用いるAPI作成の技術選定の流れ ~Python製Framework Falconを選ぶまで~
API作成の技術選定の流れを要件を踏まえた上で、複数のPython製Framework(以下FW)の特徴にざっくり触れつつ、どういった観点でFalconを選択したかを書きます。
まずは要件やチーム状況の確認からです。
要件・チーム状況
- 画像解析を行うため機械学習ライブラリDlibを利用したい
- なる早でプロトタイピングが求められており、正式な稼働は決まっていない
- 新規APIのエンドポイントは1つで事足りる
- 既存のサーバーサイドアプリケーションはRuby on Railsを使用している
- Pythonの熟練者と言えるメンバーはいない
上記を元に言語を選びます。
言語選定
要件より、Dlibというライブラリを利用するため、C++かPythonに限定されました。C++、Python共に熟練者はいませんが、PythonはRubyと類似する点が多く、WEBアプリケーションの作成にも向いているためPythonを選択しました。
LambdaかEC2か
まずAWS Lambda上に実装するか、EC2にサーバーを立てるかを考えました。勉強したいという気持ちもあったため、Lambdaについて先に調査・検証しました。
するとLambdaにはデプロイパッケージサイズに制限(50MB)があり、機械学習ライブラリDlibをセットアップした環境を50MB以内に抑えるのは難しいということがわかりました。そのため、EC2にサーバーを立てることにしました。
EC2にサーバーを立てることは決まったので、サーバー実現のためのFrameworkを選びます。
FWの選定
候補として上がったのは次のFWです。
Django
Rails、Laravelと並び3大WEBアプリケーションFWとも言われるほど有名で人気のフルスタックFWです。O/Rマッパーやテンプレートエンジンなどを筆頭に豊富な機能を備えています。
しかし、今回の要件に豊富な機能は必要ありません。シンプルにすぐに使える、もっと言えば使い捨てられるくらいの方が向いています。ということでDjango並びにその他フルスタックFWは採用を見送りました。
Flask
Djangoと並んで人気のFWです。フルスタックではなく、microもしくはmiddle FWと言える軽量さが特徴です。フルスタックFWと比較するとシンプルに書け、1つのpyファイルにまとめることも可能なほどです。
Bottle
micro FWです。API作成のために最小限の機能をシンプルに実現するための最小Python製FWと言えるでしょう。小さいため動作も速いです。私にとっては初めて見るmicro FWだったため、5行でHello World!を実現できるのは衝撃でした。
軽量で高速動作は非常にいいですが、更新頻度が低く、最新版でもver1未満のため採用は見送りました。
Falcon
Bottle同様なmicro FWです。RESTFUL API作成に特化し、高速な動作と拡張性の高さが特徴です。micro FWの中では人気も高く、Add-onも多く提供されています。
etc
他にも高速な動作を売りにしたJaprontoやAPI Star、高速かつ最新のFastAPIも気になりました。ただし情報が多くは出回っていないのと、最新版でもver1未満のため、選外としました。
github.com github.com github.com
最終的に
FlaskとFalconの2つに絞り込めました。2つで比較すると、Falconの方がロゴがかっこよく、Flaskのほうがやや多機能なFWであり、テンプレートエンジンも持ちます。今回は最小限のもので十分だと判断したため、Falconを利用することにしました。
参考情報
medium.com fgimian.github.io kokensha.xyz
所感
要件やインフラ構成を含めて0から考えて、初めての言語、初めてのFWで実装することは難しかったですが、非常に学びが多かったです。それだけでなく、0から作り上げている中で「これがエンジニアリングの醍醐味だ」とワクワクも感じていました。こういう仕事をどんどんやっていきたいですね。
予告
Pythonに学ばされたこと、DockerでDlibの環境構築をしたこと、Falconの実装例なども近いうちに記事にしたいと思います。