RailsとAWSで英単語アプリを開発した
2021年2月、一ヶ月で家庭教師先の子(友人が担当している子)のために英単語アプリを作り、本日リリースを迎えました。
実際の動作はこんな感じです!
背景
研究室で友人と会話をしていた時のことです。
バイトの話になり、家庭教師先の学生さんが英単語を覚えてくれなくて困っているとの話を聞きました。
なんでも面倒くさがり屋で中々、単語帳に手が伸びないんだそう。
さらに単語帳だと単語が並んでいる順番で意味を覚えてしまって、実際のテストの時にパッと意味を思い出せないという悩みを抱えているとのこと。
友人が言っていたのは
・もっとワクワク気軽に英語を覚える手段があったら良いのに。
・英単語がランダム表示される仕組みがあったら良いのに。
ということでした。そういうアプリがあったら良いと思うけど、どうやって作るのか分からない。そんな悩みを抱えていました。
一方で、私は私でwebアプリ開発やってみたいなぁという漠然とした思いをもっていました。
またプログラミングを使って誰かを喜ばせることに飢えていました。笑
最近、この思いを強く感じます。ことの発端は研究室の後輩のデータ解析を自動化してあげた時に、その後輩がもの凄く喜んでくれたではないかと睨んでいます。
その子が喜ぶ姿をみて、とっても幸せな気持ちになれたからです。
頭を悩ませ、イライラしながら、コードと向き合ってきた時間は無駄ではなかった。
こんな着地になるとは思っていなかったけど、コツコツ積み重ねてきたものが少し花開いた瞬間でした。
そんなこんなで、誰かが喜ぶ顔を欲していた私と家庭教師の担当子のために何かしてあげたいという熱い思いを持った友人とで英単語アプリを作ることになったのです。
取り組む際に意識したこと
このプロジェクトを通して達成したいことが3つありました。
① 使ってもらう高校生の英単語力を向上させること
② 友人にワクワクしながら作業してもらうこと
③ webアプリ開発に関するスキルを身につけること
まず①についてです。
アプリを作って友人と「俺ら頑張ったね!」と言い合って終わるような自己満足アプリには絶対にしたくないと考えてました。
作るからには利用してもらう高校生のことを第一優先とし、その子の点数が伸びなければこのアプリは何の意味もないと自分に言い聞かせながらプロジェクトに臨みました。
次に②についてです。
お互いwebアプリ開発は初体験でした。
私はこれまでPythonを多少触ったことがありましたが、友人はプログラミング未経験でした。
企画部分は2人で協力しながらやるとしても、開発については私が主導でやることになるだろうなと思っていました。
開発段階において、
「よく分からないけど、かずのすけ君に言われたことやってたら出来上がってたわ」
と言われるようなプロジェクト進行だけは絶対に避けたかったです。
自分自身、”何かよく分からんけどとりあえず手を動かしてたら形になったわ”みたいな状況に面白みを感じないからです。
地球誕生から46億年の歴史がある中で、今この瞬間に一緒にプロジェクトを進めているご縁や時間を大切にしたかった。
せっかく時間をかけるなら、楽しみながら作って欲しかった。
友人は画面設計、私は裏側のシステム構築を担当したのですが、
・ログイン情報はどの様に保存され活用されるのか
・回答した結果の情報はどの様に記録されるのか
などなど、裏側についてもパワポを用いて説明するようにしました。
↑実際に使った資料の例。
裏側まで説明したのには自分たちがやっていることを理解して、楽しみながら作業に取り組んで欲しかったのに加えてもう2つ理由があります。
1つは裏側まで理解していた方が、機能のアイディアが出やすいからです。
友人は優秀な子で、自分で仮説を立てて解決策を提示する能力のある子です。
その子の能力を最大限に引き出すことができれば、より良いアプリができると考えていました。
また実際に使ってもらう高校生のことを一番わかっているのは友人であり、ユーザーにとって良いアプリとは何かを考える上で友人の意見は欠かせないものであったことも関係しています。
2つ目は友人がSE志望であったことです。
私も友人も修士一回生で、就活中ですが、友人はSler業界をみています。
なのでこのアプリ開発を通して、SEの仕事を少しでも体感して欲しいと考えていました。
最後に③についてです。
これは単純に自分のできることの幅を広げたいという思いからです。
出来ることが沢山あれば、自分が打ち出す価値によってより多くの人の心を豊かに出来ると信じています。
実際に、先にも挙げた後輩のデータ分析を手伝って後輩を笑顔にできたのも、自分にプログラミングの知識が多少なりともあったからです。
これからも少しずつ出来ることの幅を広げていきたいと思います。
天才的な頭脳や身体能力は持ち合わせていない分、コツコツ積み上げ方式で世の中に貢献してきたいです。
課題と解決策
改めて家庭教師先の高校生の課題は
・面倒くだがり屋で単語帳を開くことへの心理的ハードルが高い
・語帳だと並んでいる順番で単語を覚えてしまって、実際のテストの時にパッと単語の意味を思い出せない
これに対して打ち出した大まかな解決策は
・その子が大好きなアニメに似せた世界観のアプリ画面にする
・単語をランダム表示する
ということでした。
ユーザーはその子だけなので、その子の趣味・嗜好に合わせた画面デザインにしました。
これを考えながら
自分が高校生の時に、B'zとかオードリーと一緒に英単語を覚えるアプリがあったらもっと楽できたろうに笑。やらやましい。
なんて考えてました。
開発
ここからは技術的な話になります。
といっても簡単に。読み飛ばしてもらって大丈夫です。
開発にはRuby on Railsを用いました。
勉強に用いたのは以下のサイトです。
クラウドは最終的にAWSを利用しました。
AWSにrailsアプリをデプロイする方法は以下の動画が参考になります。
※ 最初はherokuにデプロイしていたのですが、通信速度が遅すぎて断念しました。
リリース後の感想
本当にやって良かったなと感じています。
当初の目的のうち
② 友人にワクワクしながら作業してもらうこと
③ webアプリ開発に関するスキルを身につけること
の2つは達成できたのではないかと思います。
②については私の努力というよりも、友人自身のポテンシャルが高く、勝手に楽しんでいた感はありましたが笑。
③についてはやっぱり自分で作ったものが実際に動いているのをみるのは感動します。
特に初めてのwebアプリ開発だったので、出来上がった時はめちゃめちゃ嬉しかったです!!
① 使ってもらう高校生の英単語力を向上させること
当初の目的の1つ目は、これからです。
友人によるとファーストインプレッションではめちゃめちゃ楽しそうにしてくれたみたいです!
(サプライズ公開だったことも影響しているかもしれません。)
ただ継続的にアプリを使用してもらわないと英単語力は身につきません。
今後の課題は、いかに飽きさせず、長期に渡ってこのアプリを利用してもらうかです。
対策としては
・LINEと連携して、リマインド機能を追加する。
・LINEはその子が好きなキャラクターを使う
・アプリを1日1回でもやったらキャラクターにLINEで褒めてもらえる
・アプリの画面を定期的に変更する
などなど考えてます。
その高校生は現在、2年生で来年の今頃は受験です。
1年後に志望大学に合格して、笑顔で入学式を迎えてくれたらええなぁ。
頑張ります!!!