見出し画像

【開発】大きい機能を開発してみての振り返り:機能開発とテストの優先順位

はじめに

様々な方言を話すおしゃべり猫型ロボット『ミーア』を開発中。

ベータ版リリース後の次の大きな機能として、

任意テキスト音声再生機能

ユーザーがアプリでミーアに話させたいフレーズを再生時刻とともに自由に入力すると、そのフレーズを指定した時刻に音声再生する機能

を、ここ2週間開発していた。
アレクサの音声リマインドのような機能である。
実際に利用したユーザーから、下記のリクエストがきたので、拡張性も高そうだし開発しようとなった。

文言を自由にカスタマイズ&時間指定まで出来るモードが欲しいです。

学校に行く前に忘れ物がないか確認してくれるようにリマインドとして使ったり、ことわざや雑学などを入力して勉強用としても使えそうです。

当初は、1ヶ月くらいかかるだろうと想定していたものの、結果的には半分くらいの日数で開発を終えることができ(現在PRレビュー待ち)、それ自体は良かったのだが、今回大きい機能を開発してみての振り返り(マインドセットと、どう開発を進めていくのが効率的か)を備忘録として記載しておこうと思う。

実際に開発した内容:アプリで任意テキスト入力したものを音声再生

まず、実際に開発した内容を、テスト形式で記載しておこうと思う。

  • 今までは、こちらが作成したデフォルトのフレーズ(5つの性格と4つの方言)からユーザーはどれか一つを選んでそのフレーズタイプに保存されているフレーズを再生できるだけだったが、アプリでミーアに喋らせたいフレーズを再生時刻とともに入力することができ、その時間になるとミーアがフレーズを話す

  • 自分が作成したフレーズは公開非公開を選ぶことができ、公開した場合は、他のユーザーもあなたが作成したフレーズを取り込むことができる。Slackの絵文字取り込みのようなイメージ

  • フレーズを作成したら、音声合成されるとともにフレーズの内容を元に、感情ID(喜怒哀楽その他)が付与されて、その感情にマッチする目の画像が音声再生時に表示される。

基本的には、任意のフレーズを作成するCRUD機能ではあるが、そのフレーズに対して、再生スケジュール(日時と時刻)を設定したり、公開非公開ができて、公開フレーズからの取り込みもできるようにするという点で、複雑度が上がった。


表示(Get)
・あなたのフレーズ
自分が作成したフレーズと、公開フレーズの取り込みの両方が表示される スケジュールを設定している場合には、サブテキストにスケジュールが表示される 公開フレーズを取り込みした後に、その公開フレーズを作成した他人が後から公開フレーズを非公開化した場合には、取り込んだ公開フレーズは編集できなくなり、エラー文言がサブテキストに表示される。削除はできる
・公開フレーズ
公開したフレーズが表示される。
・無限スクロール
下にスクロールすることで20件ずつスクロールされる

作成(Create)
・フレーズテキストを作成し、公開非公開を設定し反映される
→user_phrasesレコードにのみ新規レコードが作成される
・フレーズテキスト+スケジュールを作成
再生日時と再生時刻のどちらか片方のみを作成することはできない スケジュールを設定したら反映される。・expression_id:作成したフレーズを元に非同期でexpression_idが付与される
・voice_path:作成したフレーズを元に、非同期で音声合成されS3にアップロードされ、voice_pathが付与される

変更(Update)
・フレーズテキストのみの変更 フレーズテキストを変更できる スケジュールを追加できる
・フレーズテキスト+スケジュールの変更 スケジュールを変更できる スケジュールを削除して、フレーズテキストのみ保存はできない→この場合は、一旦フレーズを削除して作り直す

削除(Delete)
・フレーズテキストのみ:user_phrasesテーブルからレコードが削除される
・フレーズテキスト+スケジュール:user_phrasesテーブルとphrase_scheduleテーブルの両方からデータが削除される

公開フレーズの取り込み(Copy)
・公開フレーズを取り込むことができる
・取り込んだ公開フレーズは、あなたのフレーズとして表示される。この場合、phrase_scheduleは追加できるが、フレーズテキストは編集できない

デバイス(ESP32)
・スケジュールを定義したフレーズ:再生時刻にフレーズが目の表情と共に音声再生される
・スケジュールを定義していないフレーズ:話す時間のstartからendの間のtalk frequency間隔で音声が再生される。phrase type(性格・方言)と競合しないように、2分ずらして再生

実際に開発した内容の一部は、下記記事で記載した。

大きい機能を開発しての振り返り

過去にも、もしかしたら同じレベルの複雑で、かつ大きい機能開発したことがあったかもしれないが、今回開発した機能もなかなか手がかかるものだった。

まず取り掛かる

以前に、こちらの記事でも記載したが、 重たいタスクはどうしても後回しになりがちなので、重たい腰を上げてとりあえずやってみるのが重要。

このタスク、重たいなと身構えてしまっているタスクを重たく感じる理由は、タスクの見通しが立っていなかったり、実行可能な工数にまで分解できていなかったりという状態のために、全体としてなんとなく大きく見えてしまっているということがほとんどであり、実際に始めてみるとそこまで重たくなかったりすることもある。

逆に、想像以上に途中からやるべきことが増えて、重たくなるケースも無きにしも非ずだが。

集中して取り組む

他の細かい開発の方が、すぐに終わるので、仕事をやった感じがあるのだが、 すべての仕事はマルチタスクではなくて、シングルタスクでできるだけやった方が最終的な効率が良いため、今回は、、

続きは、こちらで記載しています。


いいなと思ったら応援しよう!

吉永和貴
よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!