🫘

クラウドで自分だけの認証付きVOICEVOXを使う

2024/01/05に公開

みなさん、VOICEVOXはご存知でしょうか。
無料で様々なキャラクターのテキストを合成し、読み上げが出来るアプリケーションです。

VOICEVOXはエディタや合成処理を行うエンジンなどのパーツから構成されていて、エディタからは互換性のある他のエンジンを呼び出せたりとある種の独立性を保ったアプリケーションとなっています。

少し前からエディタは実験的プロジェクトとして、Electronの依存を排除したブラウザ版がリリースされています。
https://github.com/VOICEVOX/voicevox/pull/1345

合成処理を行うエンジンは別途用意する必要はありますが、ブラウザ単体で動作するようになったため低スペックなマシンでエディタを動作させ、ハイスペックなマシンでエンジンを動かすみたいなことが更に容易になりました。
今回はこのブラウザ版VOICEVOXエディタをGitHub Pagesに、エンジンをAzure Container Appsにデプロイし、認証付きで自分だけが使えるVOICEVOXを試します。

成果物

https://github.com/yamachu/play-cloud-voicevox

上記リポジトリには

  • GitHub PagesにデプロイするためのGitHub Actionsサンプル
  • GitHub Pagesにデプロイするために調整したVOICEVOXエディタ
  • AzureのサブスクリプションがあればTerraformで一発でデプロイ出来るtfファイル
  • 各種ドキュメント

が含まれています。

実際に試してみる

それでは実際にデプロイするまでのフローを見てみます。

前提として以下の準備が整っているものとします。

  • Azure Subscriptionを所持
  • GitHubアカウントを所持
  • Terraform 1.6.0+が使える
  • Azure CLIが使える

AzureのSubscriptionが必要なのは、今回デプロイ先にAzure Container Appsをデプロイ先に設定したためです。
理由は後述します。

エンジンのデプロイ

前述したリポジトリのREADMEに沿って進めていきます。
詳細はREADMEをご覧ください。

流れとしては、以下の3手順を行います。

  • Azure CLIでログイン処理を行う
  • Azure CLI経由で、デプロイなどを行うためのサービスプリンシパルを生成
  • そのサービスプリンシパルの値を使用し、Terraformでデプロイ

READMEをコピペすれば出来るのと、ハマりどころが少ないので詳細は省略します。

エンジンの設定

現状だと、エンジンがCORSでリクエストを受け付けられなかったり、誰構わずリクエストを受け付けてしまう状態になっています。
ここではそれらの設定を行いましょう。

こちらもREADMEに沿って行いますが、少し解説していこうと思います。

今回の認証のIDプロバイダには、簡単のためMicrosoftアカウントを使用しています。
これはAzureにログインしているMicrosoftアカウントを想定しています。

他にもGitHubやX(Twitter)、AppleIDなどの設定も行えます。
しかし、誰であるかはわかるが、そのリクエストを受け付けてよいかは自分で実装する必要があります。
今回はその手間を排除するために、デプロイを行ったAzureのテナントに属するアカウントのみを許可するMicrosoftアカウントでの認証を使用しています。

認証の設定が終わったら、忘れずに設定しなければならないのは「許可される外部リダイレクトURL」です。
こちらに例えば使用するGitHub Pagesのドメインだったり、ローカルで実験するためのポート番号付きのURLを指定します。
これが無いとGETやOPTIONを除くHTTP Requestで403を返し続けてしまいます。

CORSの設定は一旦完全にゆるく全てを許す * で様々なものを設定します。
実際にプロダクトで使用する場合は厳密に制御してください。

エディタのデプロイ

最後にエディタのデプロイを行います。
エディタはGitHub Actions経由で行います。
接続先をSecret経由で設定するため、予めAzure Container Appsの外部URLをメモしておきましょう。

これをRepository secretsにHOSTという名前で指定し、Run workflowでデプロイを行います。
成功すると、GitHub PagesにVOICEVOXのエディタがデプロイされます。

触ってみる

それではデプロイしたエディタにアクセスしてみましょう。
トップページにAADでのログインのためのリンクがあるため、それを踏んでログインを行いましょう。

セッションが切れるまで、認証済みのCookieをAzure Container Apps側にブラウザが投げてくれて、認証が通った状態でAPIを利用することが出来ます。
ログインが成功したら /#/home にアクセスし、普段通りVOICEVOXを利用する事ができます。

最後に

Microsoft Ignite 2023でAzure Container AppsでGPUインスタンスがサポートされたということで、ウキウキでこれを試したのですが、実験した当時はWest US 3とNorth Europeの2regionでしか使えませんでした。
GPUが使える状態で認証付きでみたいな記事にしたかったのですが、GPUに関しては今後Publicになったら再度試してみようと思います。

また実験を行った後もう使わないなとなったら、以下のコマンドでお掃除をしましょう。

$ terraform destroy

良きVOICEVOXライフを!

Discussion