ファイル編集(+画像生成+音声生成)Slackアプリを作ってみた話
はじめに
ファイル編集 Slack アプリを作成を作成したので、そのアプリについて記事にしてみました。気分で機能追加しているので、もしかすると記事更新するかもしれないです。
作成した経緯は、最近 Slack アプリをいじる事が増えたので、自分の今まで積んできたスキルスタック、触ってきたサービスで作ってみるかぁというモチベーション。そもそもラッパーライブラリが用意されている RDB ではなくて、 NoSQL DB を使うのはバグってる気がする。仕事じゃないからできることですね。
作ってみた感じとしては、やはりフロントエンドを実装しない分、工数はそれほどかからないし、OpenAI(Function calling)を使うことで、そこそこインタラクティブに処理を呼び出しができるというのが結構楽だなという印象です。
フォームまわりは、一般的な Web のフロントエンドと比べると Slack 特有の癖がところどころあり、それに慣れるのに少し時間がいるくらいで、概ね問題ない感じがします。なんだか古い Web の時代か組込みソフトウェアの CUI 機能実装を彷彿とさせる感じですかね。組み方的には、タスクベースな実装になる感じがしますので、今どきの Web アプリとは考え方と違う感じがしますが、それはチャット実装の機能だから気にする必要がないのかもしれません。
アーキテクチャ・使用ライブラリ・API
フォルダ構造は違いますが、使用しているサービスの構成は以下の記事と同じです。今のところ開発におけるインフラ料金は数円程度。キャンペーン分あるので 0 円ですかね。
主な使用ライブラリ・API などは以下の通りです。
- OpenAI
- インタラクティブに処理を指定できるように。Function calling で処理を指定しています。
- 画像生成
- OpenCV
- 画像ファイル処理
- FFmpeg
- 動画ファイル・音声ファイル処理
- Cloud Translation API(GCP)
- 画像生成時、プロンプトを英語に変換するために使用しています。
- Cloud Text-to-Speech API(GCP)
- 音声生成に使用しています。
機能
作成したアプリは以下のようなコンセプトやら機能やらです。
- チャット形式に処理を指定し、ファイル処理する。
- OpenAI を用いて、インタラクティブに処理を指定できるようにする。
- 機能にたどり着くまで 1 アクションでたどり着きたい。
- 画像ファイル処理は以下の通り。
- 拡張子変換
- リサイズ
- グレースケール変換
- 動画ファイル処理は以下の通り。
- 拡張子変換
- リサイズ
- 時間指定でのトリミング
- 再生速度処理
- 音声ファイル処理は以下の通り。
- 拡張子変換
- 画像生成
- 音声生成
今は API なりで簡単に機能実装できるので、楽でいいですね。作り方を分かる人が見ると分かりますが、難しいことをしていません。一番面倒だったのは oauth 認証を Firestore で出来るようにしたことくらい。あとは、Web アプリというか、組込みプログラミングのようなイベント駆動になるような作り方だなというのが個人的な感想です。
ほとんどの処理は見た目では分かりにくいので、いくつかだけ紹介します。
以下はグレースケールに変換する処理です。
画像生成は以下の通り。小汚くないですね。食わせてるデータに小汚い犬なんてないんですかね。一応この画像生成の裏では、英語以外の言語でプロンプトを渡しても言語判定したうえで英語に変換し、 AI にわたすようにしています。日本語だとすこぶる精度が悪かったので。言語判定をはさめているのは API 節約のためです。
音声生成は以下の通り。Cloud Text-to-Speech API に対応している言語なら話してくれるようにしています。
作成する際の注意点・つまったところ
他の方も言ってますが、Cloud run は「CPU always allocated」にしないと処理が不安定になります。そのため、少しだけ料金がかかりますが、それでも料金は 基本安めです。
あとは、やはり処理に時間がかかるのか、デフォルトの 30s を超える事が多かったので、このあたりの設定調整が必要でした。今はとりあえず 600s にしています。
おわりに
今回はファイル編集 Slack アプリを作成したことに対する所感みたいな記事を書きました。
本当は拡張子変更くらいまでやるかと思ったけど、意外と簡単にできたので、動画製作系の機能をとにかくぶち込んでみた感じになってきました。
またアプリを作成したら記事を書きたいところ。
Discussion