【ITニュース解説】Building a Video-to-MP3 Converter with FastAPI Microservices
2025年09月05日に「Dev.to」が公開したITニュース「Building a Video-to-MP3 Converter with FastAPI Microservices」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
FastAPIで構築された動画-MP3変換プラットフォーム。マイクロサービス構成で、認証、ファイル処理、メール通知機能を持つ。Gateway, Auth, Media, Convertor, Notificationの各サービスが連携し、RabbitMQで非同期処理を行う。PostgreSQLとMongoDBを使用。Dockerで環境構築し、API経由で動画アップロードやMP3ダウンロードが可能。
ITニュース解説
この解説では、FastAPIマイクロサービスを用いて構築されたビデオからMP3への変換プラットフォームについて解説する。このシステムは、ユーザー認証、ファイル処理、メール通知などの機能を備えており、現代的で拡張可能なアーキテクチャを採用している。
このプロジェクトはマイクロサービスアーキテクチャに従っており、主要なサービスとしてゲートウェイ、認証サービス、メディアサービス、変換サービス、通知サービスが存在する。ゲートウェイは、システムへの入り口として機能し、認証とメディアサービスへのリクエストを適切にルーティングする。認証サービスは、ユーザー登録とログインを処理し、JSON Web Token(JWT)を用いて認証を行う。メディアサービスは、ユーザーからのビデオアップロードを安全に処理し、GridFSを使用してMongoDBにファイルを保存する。変換サービスは、FFmpegを利用してビデオをMP3に非同期で変換する。通知サービスは、ユーザー登録時や変換完了時にメールを自動送信する。
システムの構成要素としては、バックエンドサービスにFastAPI、Python 3.13、SQLModel、Pydanticが使用されている。FastAPIはAPI構築のための高速なWebフレームワークであり、Python 3.13がプログラミング言語として採用されている。SQLModelは型安全性を備えたデータベースORMであり、Pydanticはデータ検証と設定管理を行う。データベースには、ユーザー管理にPostgreSQL 17、ファイルストレージにMongoDB 6.0が用いられる。メッセージキューには、非同期通信のためにRabbitMQ 3.12が使用される。メディア処理には、ビデオ/オーディオ処理と変換のためにFFmpegが利用され、メール送信にはFastAPI-Mailが用いられる。インフラストラクチャには、コンテナ化とオーケストレーションのためにDockerとDocker Compose、FastAPIアプリケーションのためのASGIサーバーとしてUvicornが採用されている。
プロジェクトのディレクトリ構造は、video-mp3-convertor/をルートとし、docker-compose.dev.ymlファイルとservices/ディレクトリを含む。services/ディレクトリには、auth/、convertor/、gateway/、media/、notification/の各サービスが含まれており、それぞれのサービスが独立した役割を担っている。
基本的な使用法として、まずGitを用いてリポジトリをクローンし、docker-compose -f docker-compose.dev.yml up --buildコマンドを実行してサービスを起動する。APIゲートウェイはhttp://localhost:8000、認証サービスはhttp://localhost:5000、メディアサービスはhttp://localhost:7000でアクセスできる。RabbitMQの管理画面はhttp://localhost:15672、Mongo Expressはhttp://localhost:8081で利用可能となる。
APIのエンドポイントとして、ユーザー登録にはPOST /auth/sign-up、ログインにはPOST /auth/sign-in、トークンの検証にはGET /auth/verifyが用意されている。メディアのアップロードにはPOST /media/upload、MP3のダウンロードにはGET /media/download/{file_id}が使用される。
システムのワークフローは、ユーザー登録とログインから始まり、ビデオのアップロード、ファイルストレージ、メッセージキューによる処理、ビデオ変換、メール通知、そしてMP3ファイルのダウンロードという流れで構成される。
各サービスはDockerコンテナとして実行され、それぞれ異なるポートで公開される。ゲートウェイは8000番ポート、認証サービスは5000番ポート、メディアサービスは7000番ポート、変換サービスは4000番ポート、通知サービスは6000番ポートで動作する。PostgreSQLは5433番ポート、MongoDBは27017番ポート、RabbitMQは5672番ポート、RabbitMQの管理画面は15672番ポート、Mongo Expressは8081番ポートで利用できる。
環境変数としては、認証サービスにJWTのシークレットキー、データベースURL、RabbitMQ URLが設定される。メディアサービスには、RabbitMQ URL、MongoDB URL、認証サービスのURLが設定される。変換サービスには、RabbitMQ URLとMongoDB URLが設定される。ゲートウェイサービスには、認証サービスとメディアサービスのURLが設定される。
開発時には、各サービスを個別に実行できる。例えば、認証サービスはcd services/authに移動し、python -m uvicorn src.main:app --host 0.0.0.0 --port 5000コマンドで起動する。
セキュリティ機能としては、JWTベースの認証、bcryptによるパスワードハッシュ化、トークンベースの認可、セキュアなファイルアップロード、環境変数による設定管理などが実装されている。
このマイクロサービスアーキテクチャは、独立したスケーリング、非同期処理、ステートレスなサービス、データベースの分離を可能にし、高いスケーラビリティを実現する。
このプロジェクトへの貢献は、リポジトリをフォークし、フィーチャーブランチを作成し、変更をコミットしてプッシュし、プルリクエストをオープンすることで行える。
このプロジェクトはMITライセンスの下で公開されている。
将来の拡張としては、リアルタイム変換進捗のためのWebSocketサポート、複数の出力形式(WAV、AACなど)のサポート、バッチ処理機能、ユーザーダッシュボード、ファイルサイズと形式の検証、レート制限と使用量クォータ、クラウドストレージ統合、Kubernetesデプロイメント構成、モニタリングとロギングの強化などが検討されている。