はじめに
この記事はBrainpad Advent Calendar 2024の6日目になります。
こんにちは。株式会社ブレインパッドに所属している斉藤です。
今回は「機械学習システム開発を円滑にするNext.jsのAPI Routesの使い方」というタイトルで記事を書いていきます。
概要
機械学習システムの開発において、モデルや推論エンドポイントの開発だけでなく、そのほかの機能要件、システムのパフォーマンスやセキュリティといった非機能要件への対応も当然ながら重要です。
私の所属する部では、プロジェクトメンバーが比較的少人数で構成されることが多く、限られた期間の中で効率よく開発を進めていかなければ、システムのコアともいえる機械学習モデル関連機能の開発工数をそのほかの機能実装の工数が圧迫してしまうという事態を招きかねます。
そこで今回は、より効率的に機械学習システム開発をするために私が実践した、Next.jsのAPI Routesの使い方について書いていこうと思います。
対象読者
- より円滑な機械学習システムの開発を目指したい方
- Next.jsの基本をなんとなく理解している方
機械学習システム開発プロジェクトの例
以下のようなプロジェクトを例に説明していきます。
要件概要
- PoC(Proof of Concept)の段階でモデルの精度の検証はある程度できている
- 機械学習の機能を利用したシステムを現場に導入したい
- 現場の方が扱いやすいユーザインターフェースも含めシステムを開発をしてほしい
- 認証やデータのCRUD機能も実装してほしい
方針
- SPA + API構成で開発する
アーキテクチャ概要
開発サイクル
- フロントエンド
- バックエンド・機械学習モデル
課題
プロジェクト内での開発サイクルの不一致
フロントエンドとバックエンドの開発サイクルはしばしば異なり、特に機械学習システムでは、データ受領やモデルのチューニングが完了する前に、フロントエンドの開発を進める必要が生じることがあります。また、後からのAPI仕様の変更に伴う手戻りが発生する可能性もあります。
機械学習とは直接関係ない機能開発への対応
バックエンドの役割はモデルの機能提供だけでなく、認証やCRUD処理など多岐にわたります。効率よく開発を進めなければ、これらの機能の実装工数が、システムのコアともいえるモデル関連機能の開発工数を圧迫してしまいます。
バックエンドAPIのセキュリティ要件への対応
SPA+API構成の場合、バックエンドAPIは公開IPアドレスを持つことになるため、より多くのセキュリティ要件への対応が必須となります。これもまた、バックエンド・機械学習担当のエンジニアがモデル周りの開発に割ける工数を圧迫してしまいます。
機械学習システムの開発を円滑にするNext.jsのAPI Routesの使い方
結論としては、Next.jsのAPI Routesを中間APIサーバとして活用することで先程挙げたような課題を解決できます。最終的なアーキテクチャと各メリットの説明は以下になります。
1. 独立してモデルに関連しない機能を開発できる
API Routes内で推論APIをモックするなどして抽象化して開発することで、推論サービスとその他の機能の開発サイクルが一致しない場合でも滞りなく開発を進めることができます。
また、機械学習システム開発において、多くの場合は機械学習とは直接関係ない機能を開発する必要が出てくると前述しました。API Routesを使えばそれらの機能をまとめて開発することができます。TypeScript or JavaScriptで開発ができるため、追加の学習コストもかかりません。
2. アーキテクチャレベルでの関心事の分離により機械学習エンジニアがモデルに関する開発に集中できる
Next.jsのAPI Routesを用いることで、モデルの機能提供以外のバックエンド機能(認証、データベースアクセス、ログ管理など)をアーキテクチャレベルで分離して実装することができます。これにより、機械学習エンジニアはモデル関連の機能開発に集中しやすくなります。
3. システム全体のセキュリティ対策ロジックをフロントエンドに集約できる
通常、機械学習モデルのAPIは公開IPアドレスを持ち、セキュリティ対策(例えば認証、APIキー、アクセス制限など)を個別に設定する必要があります。しかし、API Routesを経由してリクエストを処理することで、推論APIは公開IPを持つ必要がなくなり、特定のプライベートネットワークからのアクセスのみを許可するなどの設定をすることで比較的手軽にセキュリティを強化できます。これにより、機械学習エンジニアはさらにモデル関連機能の開発に注力することができます。
おわりに
本記事では機械学習システム開発において、Next.jsをフロントエンドに採用し、API Routesを中間APIとして利用することで得られるメリットを3つ紹介しました。
- モデルに関連しない機能をまとめて開発できる
- アーキテクチャレベルでの関心事の分離により機械学習エンジニアがモデルに関する開発に集中できる
- システム全体のセキュリティ対策ロジックをフロントエンドに集約できる
本文ではメリットのみを述べましたが、パフォーマンスのオーバーヘッドやスケーラビリティなどの観点から、システムが大規模になればなるほど今回紹介したような構成の採用については慎重に検討される必要があると思います。
ここまで読んでいただきありがとうございました。
Brainpad Advent Calendar 2024の別日の記事もぜひ読んでみてください。