ナガモト の blog

Full Cycle Developerを目指すエンジニアが有用そうな技術記事や、ポエムのようなよしなしごとを投稿するブログです。

新機能に用いるAPI作成の技術選定の流れ ~Python製Framework Falconを選ぶまで~

API作成の技術選定の流れを要件を踏まえた上で、複数のPython製Framework(以下FW)の特徴にざっくり触れつつ、どういった観点でFalconを選択したかを書きます。

まずは要件やチーム状況の確認からです。

要件・チーム状況

  • 画像解析を行うため機械学習ライブラリDlibを利用したい
  • なる早でプロトタイピングが求められており、正式な稼働は決まっていない
  • 新規APIのエンドポイントは1つで事足りる
  • 既存のサーバーサイドアプリケーションはRuby on Railsを使用している
  • Pythonの熟練者と言えるメンバーはいない

上記を元に言語を選びます。

言語選定

要件より、Dlibというライブラリを利用するため、C++Pythonに限定されました。C++Python共に熟練者はいませんが、PythonRubyと類似する点が多く、WEBアプリケーションの作成にも向いているためPythonを選択しました。

次にPythonでどこにAPIを作成するかを考えました。

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!を実現できるのは衝撃でした。

qiita.com

軽量で高速動作は非常にいいですが、更新頻度が低く、最新版でも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の実装例なども近いうちに記事にしたいと思います。