Firebase*この記事は前半はサービスの概要、後半はCrieit用に、翻訳機能の技術部分の解説になっています。先日、英語学習の便利ツールとして「メモや日記ついでに英語学習」というWebサービスを作りました。「メモや日記ついでに英語学習」とは?「メモや日記ついでに英語学習」は、英語の勉強で、いつも挫折してしまう私が「もし自分が書いたメモや日記がついでに英語に翻訳できたら、その文章は自分が書いたものだから、他の英語の例文より覚えやすいのではないか?」と思い作りました。メモや日記ついでに勝手に翻訳してくれて英語の単語帳になるなら、一切気負わずに勉強が続けられそうです。やることは、登録画面で、メモや日記を登録するだけです。登録すると勝手に翻訳して、単語帳のように一覧として管理します。日本で登録したら英語に、英語なら日本語に翻訳してくれるので、気になる英語をこのアプリに登録して使うこともできます。音声読み上げ機能も付いている「メモや日記ついでに英語学習」では、音声の読み上げ機能もつけています。音声マークをクリックすると英語を読み上げてくれます。合成音声で喋ってくれますので、知らない単語の読み方などの勉強になります。ブラウザによっては音声読み上げをしない場合もありますので注意が必要です。翻訳にはグーグル翻訳を使っています。そのため、正確な英語でない場合もあります。そこは割り切って、正確な英語よりはまずは英語に馴れ親しむ方を重視しています。グーグルが翻訳しやすい日本語というのもあるようなので、書き方を少し工夫していただくと良いと思います。学習効率を上げるエビングハウスの忘却曲線エビングハウスの忘却曲線とは、英単語や暗記学習で使われる暗記テクニックです。人は暗記しても、時間が経つとほとんど忘れてしまいますが、ある一定の時間経過後に思い出すと記憶の定着率が大きく上がるというデータを示した曲線です。Wikipedia「メモや日記ついでに英語学習」もこのエビングハウスの忘却曲線を利用しています。ホーム画面には、「当日」「1日前」「1週間前」「1ヶ月前」が表示されるようにしています。このアプリを開いて、ホーム画面の英語の例文を読んで毎日一つ文章を登録するクセをつければ、かなり英語学習に役立つ仕組みになっていると思います。できるだけ気軽に続けれる英語学習サービスこのアプリを作るにあたってこだわったのは、できるだけ気軽で効果がある英語学習サービスにしたいということでした。そのために自分の頭の中から出て言葉の方が馴染んで覚えやすいメモや日記の「ついで」に英語の単語帳を作れるエビングハウスの忘却曲線を利用した暗記方法が、アプリを開いただけで利用できるという3点にこだわりました。翻訳アプリを利用した学習方法では、正確な英語の例文ではありませんが、まずは英語を身近にすることと、自分がよく使う言い回しや単語を覚えて欲しいと思います。自分が今このアプリの一番のヘービーユーザーですが、使っていてかなり英語が覚えられそうです。Text」の概要と使い方、使用上の注意点について書いていきます。個人開発の方は海外展開を視野に入れたサービスを作る方が多いように思うので、参考になると思います。Extensionsは、つい最近に発表されたFirebaseの拡張機能です。詳しくはこちらの記事が参考になります。Text」を使っています。拡張機能は非常に簡単に使えます。Textをインストールします。左上のExtensionsをクリック注意点は、Blaseプランにしないといけないことです。途中でプランの変更もできます。設定もわかりやすいです。locationはどこの地域に設置するかを選択します。料金、速さを考えるとTokyo(asia-northeast1)が良いでしょう。Languagesは、翻訳する言語を選択します。リストはこちらに一覧があります。pathは、Firestoreのコレクション名です。ここで指定したコレクション下のドキュメントが翻訳対象のドキュメントとなります。fieldは、翻訳するフィールド名です。ここにフィールドに入ったテキストが翻訳対象になります。outputが、翻訳された結果を入れるフィールドとなります。以上の設定だけで翻訳機能が拡張されました。驚くほどの簡単さですね。コレクション名、フィールド名は指定しないといけないここから、実装や本番で運用していて気づいたことなどの共有です。先ほどの拡張機能の設定でもおわかりのように、コレクション名やフィールド名はこの拡張設定の段階で先に指定しておく必要があります。途中でコレクション名はフィールド名を変更したくなったら、このExtensions画面で編集し直す必要がありますので注意が入ります。この性質上、アプリを運営していて、途中でコレクションやフィールドを変更したい場合はかなり大変になりそうなので、そこの設計は最初の段階でしっかり決めておいた方が良いと思われます。Textは、現在、サブコレクションでは機能しませんでした。コレクション名を「User」にして、そのサブコレクションに「text」と指定するような方法は使えないということです。イメージとしては、翻訳専用にコレクションを一つ設けて置くという感じになります。最初サブコレクションで使おうと思ったら機能しなくて少し混乱しました。APIの無料枠は適応されませんでした。私は当初このTranslateAPIの無料枠(500,000文字まで無料)が適応されると思っていたのですが、されませんでした。最初から課金が発生します。100万文字で20ドルのようです。おまけ機能くらいでつけるなら問題ないですが、当サービスは翻訳メインで作ったのでちょっと当てが外れた感じです(笑)また、無料サービスでの運営でこの拡張機能を頻繁に使うのは収益を考えると少し工夫がいるのかなとと思います。簡単だから良いサービスですただ、本当に簡単に拡張できるので、本当に便利なサービスだと思いますし、選択肢として頭に置いておいて損はないでしょう。他の拡張機能はまだ使っていませんが、この感じなら他の拡張機能も簡単に使えそうです。https://code.ameneko.com/Crieitは個人で開発中です。どんな軽い内容でも嬉しいです。Crieitを作ろうと思ったかまた、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!ボードとは?関連記事[個人開発]大喜利サービスを5日でつくってわかったことスワイプで気になるAV女優を探すことができる「AVキャッチャー」というサービスをリリースしました。集客や宣伝の前に考えるプロダクトのクオリティプログラミングが好きでずっとプログラミングしていたい。