- ソリューションアーキテクト
- プロジェクトマネージャー
- テクニカルオペレーション
- Other occupations (4)
- Development
- Business
- Other
こんにちは、高知からリモートインターンしている、森田ドラゴンです。9月に入りましたが、大学はまだまだ夏季休暇中なので、9月はインターンで頑張ります。前回に引き続き、Polly to S3 の仕組みを作っていきました。
課題内容
1. テキスト入力できるformを用意
2. ボタンを押すとpollyを叩いて読み上げるfileを作成
3. 文字の長さに寄らず、s3にアップロードして、ダウンロードリンクを表示する
細かい修正
仕組みを作ると言っても、1-3までの流れは前回完成させていたので今回は細かい修正を行なっていきました。ちなみに前回「リンク先のファイルの状態を常に公開状態にする」という課題が残っていると書きましたが、勘違いしていました。pollyのファイルをS3にアップロードしてから、公開状態になるまでラグがあるようで、そのせいでファイルがダウンロードできなかったみたいです。
修正1:アップロード中の待ち時間を操作不可にする
pollyからS3にファイルをアップロードすると、SpeechSynthesisTaskは scheduled 状態に入ります。タスクの状態が completedになるまでは、ファイルをダウンロードすることができないので、アップロード中はユーザーが操作できなくするようにする必要があります。
setInterval()というjsの関数で、定期的に指定した関数を実行することができます。この関数と SpeechSynthesisTaskの状態を取得する、aws sdk の getSpeechSynthesisTask() を利用して、修正1を解決しました。
修正2: prefix指定で.がつく
これは解決できなかったエラーです。prefixというファイルの先頭につける文字列を変更して、保存するフォルダーを指定すると、なぜかprefixに.がついてしまいます。「prefix. ~~ ファイル名 」という形で保存されるのがデフォルト見たいです。ただ、いまいち納得いかないです。
修正3: S3に保存されるpollyファイルの名前を変更する
修正2が仕様によりできなかったので、保存されるpollyファイルの名前を変更することに。ファイル名を指定して保存、ということがSDKの関数によってできても良さそうですが、見つからなかったので方向転換。社員の森さんには「S3のPutObjectトリガーでLambdaを動かして・・・」というヒントというか答えを教えてもらいました。
ただ、SDKの関数を見ていた限りでは、S3のSDKでも同じことができそうです。実際どちらでやったほうがいいんでしょうか?AWSサービスは機能が充実しすぎていて、大体のやりたいことはサポートされているので、今回みたいに無理やりやらないといけない感じになっているのはちょっと気持ち悪いです。上手いやり方がありそうな気はします。
感想
修正と見出しに書きつつも、実際に修正できたのは1だけでした。無理やり修正する方法を思いつくんですけど「なんとなく気持ちわるくて書きたくないなー」と思ってしまい、調べることに時間を使ってしまう、というのが現状です。調べているうちに、最初に思いついた方法ではやりたくないと頭が凝り固まってしまうので、エラーを見たときに修正方法を書き出すのが良さそうです。
そういえば、前回の記事がWantedlyのFeed急上昇ランキング7位にランクインしたそうです。多分polly触っていた人の検索に引っかかったんじゃないのかなと。狙ったわけではないですが、ちょっと嬉しかったです。それではまた。