LoginSignup
8
5

More than 1 year has passed since last update.

こどもの百人一首の宿題だけに特化したWebアプリを作ってみてハマったとことか解決策

Last updated at Posted at 2022-12-15

はじめに

こどもの小学校の宿題で百人一首の暗記読み上げが毎日あるのですが、問題を出題しなければならずこどもだけでは完結させられないため一緒に行う必要があります。
これが百人一首をまったく覚えていない私としては問題の出題や合っているかのチェックが地味に負荷が高く…

百人一首のランダム読み上げ自体はYouTubeにいくつか動画はあったりするものの宿題の形式に沿ったものがなかったため、宿題の要件にあわせたWebアプリをTTS、STTで実装してみました。

完成したアプリ

image

宿題の要件

  • 色札ごとに分けられた20の句の中からランダムに問題をだす
    • 五色百人一首っていうルールで色分けが決まってるらしいです
  • 問題となった句の初句(最初の5文字ほど)を読み上げ、残りをこどもが読み上げる
  • 間違っていないかと声の大きさを3段階で評価する

実装時に参考にした記事

TTS/STT

TTS/STTの実装は以下の記事を参考にさせていただきました。

百人一首データ

百人一首のデータは以下のJSONデータを使用させていただきました。
便利なデータを公開いただきありがとうございます!

百人一首の JSON(Qiita)
JSONデータ(gist)

ハマったことと解決策

1. STTがHTTPサイトだと動かない

解決策:Live ServerをHTTPS化

2. STTで認識した発話が漢字で表示される

  • まだこどもは多くの漢字が読めず、百人一首自体もひらがなで覚えている
  • 認識結果も画面表示させたいが、漢字が入ってしまうとこどもが読めない
  • 百人一首DBをひらがなで保持しているので漢字変換されてしまうと突合できない

解決しなかった策:漢字→ひらがな変換API

解決策:一度STTした結果を保持

  • 一度STTした結果を保持し、それと認識結果を突合する
    • 一旦は解決したが次の問題発生
    • 結果に漢字が含まれてしまうのは諦め…😢

3. 端末や発話者、周辺ノイズによりSTTの認識結果が若干ブレる

  • VUIあるある
  • 漢字変換されたりされなかったり

解決策1:レーベンシュタイン距離を測定

解決策2:発話認識結果を蓄積

  • 発話認識結果をログ蓄積して、合ってそうな結果はDBの突合ワードに追加していく
    • スマートスピーカースキルでいう、スロットの同義語に追加していくイメージ
    • 問題の結果画面に「せいかいにする」ボタンを設置して人判断
  • ログ蓄積にはSpreadSheetsに対しdoPost(Webhook)で記録していく実装
    • アプリを開いたときにdoGetで突合ワードを一括取得

4. デプロイ環境

  • ハマったというわけではないけど、いつも静的ホスティングならFirebaseを使ってたのにプロジェクトが増えすぎて作れなかったので代替を探してみました
    • 申請すれば増やせるらしいけどすぐ対応してくれるかなんともいえなかったので代替を

解決策:Vercelにしてみた

  • 名前をちょいちょい聞いて気になってたVercelにしてみた
    • GitHubと連携することでPushしたら自動でデプロイしてくれてとてもいい感じ
  • 公開リポジトリだったらGitHub Pagesでもいいかも

おわりに

こどもにはまだスマホを持たせていないため私や妻のスマホでアプリを開いて隣で宿題をやってもらっています。
前は宿題を後回しにしがちでしたがこのアプリならゲーム感覚でできるからか、こどもも喜んですぐに宿題に取り組むようになりました。
私自身もデバッグやユーザーフィードバックを兼ねることで楽しくこどもの宿題に付き合うことができ一石二鳥です😊。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5