プログラミング始めて1年半、働きながら勉強用アプリを作ったらとてもとても良かったはなし

# まえがき
学習を記録し、復習を促してくれるサービス「QtQ」を作成しました。制作期間3ヶ月くらい。
(2020年6月追記：現在は閉じています。)
タイトルにもありますが、現在プログラミング歴1年半です。スクール利用して、プログラミング初めてから半年くらいでエンジニア就職して、エンジニア歴1年ちょっと。
サービスの紹介をすると共に、同じような歴の方やエンジニアになったばかりの方のためになればと思い、作ってみて感じたことをつらつらと書いていきたいと思います。
環境↓
Rails 5.0.6
ruby 2.3.4
AWS 諸々

# 最初に言いたいこと書いとく

僕と同じような歴の方へ。
とりあえずなにか作るのホントにおすすめです。
全部自分でやることになるので、不得意な領域に特に効果があるなと。当然1個作ってバッチリになるわけではないけれど、業務で苦手なタスクをこなすための足がかりが出来る。早い段階でやることで、業務時間内の成長曲線がかなり変わってきそうです。
今はプログラミングスクール盛んだし、これからどんどん僕と同じような人(= RailsのようなLLから入って、コンピューターサイエンスの基礎が弱いまま現場に入る人)増えていくと思われますが、そういう人こそ自分だけの力で1つオリジナルのサービスを作るべきだと思います。
単純に楽しいからたくさんやることになって、結果的に業務時間外でエンジニアリングに時間を割く習慣が身に付くのも大きいです。
趣味や遊びの時間ももちろん大切だけど、仕事に関してだけいえば、技術がある方が楽しい。技術職だし。そして仕事してる時間長い。QOLのために業務時間外に勉強するのは、長くやるならば正しい選択だと僕は思います。一緒に頑張ろう！https://github.com/yujiariyasu/qtq でコード見られるから、汚いけど役立ててください。

# 経緯
「自分自身にとって使いやすい、学びを定着させるためのサービス」が欲しいなと前々から思っていました。
学習記録アプリとして欲しい機能としては
・シンプルなUIで学びをパッと登録出来、復習したこともパッと記録出来る。
・忘却曲線に沿って復習を知らせてくれる
・コードの入力が出来る。見やすい。
あたりだったのですが、コードの入力も出来てシンプルなグッとくるものが無く、一生使えるものを作ろうと思い立ったのがきっかけです。
なので基本的に自分が使うためのもので公開しなくてもよかったんですが、せっかく作ったんだし、公開することで色々勉強にもなりそうだということで公開する運びとなりました。ちなみに見た目はqiitaたくさんパクリました。非商用だから許してネ。

# サービス内容
せっかく作ったので紹介させてください。
QtQは学びを定着させるためのサービスです。
学習を記録 → 後日復習のタイミングでWebプッシュ通知 → 復習 → また忘れそうな頃に復習の通知 → 何回か繰り返して完全に定着したら、「学習完了フラグ」をonにすると復習の通知がオフに
という流れで使用するイメージです。
自分で使ってみてますが、めっちゃいいです。日々の業務や勉強の中で、覚えたいと思ったことはとりあえず全部登録するようにしてます。これ使うのと使わないのじゃ10年後にだいぶ差が出来てそう。使い初めてから少ししか経っていないですが、インプットの際に常にアウトプットのためにまとめる癖がついてきつつある。池上彰さんが、「読書の際の知識の定着を促進させるために、常に誰かに教えるのを想像しつつ読んでいる」ってテレビで言っていたけど、それと同じかも。彰。
まあ僕としてはやっぱり自分で作ったものだから愛着があるし、意味があるものにしたいって思う気持ちも利用出来るから学びが加速してるのかも。あ、そういう意味では学習を加速させたい人にとっては学習のためのアプリ自分で作るのはいい選択かもですね。ということで、皆さんもぜひ使うか作るかするのおすすめです。
あと、ちゃんと日々の学びを欠かさず登録をしておけば「この前も調べたやつだけどなんだったっけ」みたいなシチュエーションの時に辞書として使えます。まあちゃんと復習して完全に覚えちゃうのが1番いいのかもしれませんが。

- 学習の記録
<img width="1680" alt="スクリーンショット 2019-02-21 14.16.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/257374/7cc97d73-2618-c980-9bf4-8a9e13934a2d.png">


単純な投稿機能です。
複数の画像送信、タグ付け、マークダウンなどに対応
また、「習熟度」というパラメータを用意しています。習熟度が低いほど、次回の復習予定日が早く訪れる仕組み。
こんな感じで登録されます。↓
<img width="1680" alt="スクリーンショット 2019-02-02 14.34.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/257374/d36373aa-8f16-46e6-db06-bf9eceda30da.png">

- 復習のタイミングをWebプッシュで通知
1件学習を記録したタイミングで通知を許可するかどうか聞かれるので、そこで通知許可してもらえれば使えます。許可すると毎日、当日の復習件数を通知します。フォローとかのお知らせは通知しない予定、自分がいらないので。
<img width="1680" alt="スクリーンショット 2019-02-02 14.50.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/257374/8001488e-6483-4c23-f53b-3375d2d24c7e.png">

- 学習の復習のスケジュールや日ごとの登録学習件数などをグラフで可視化
highcharts使っています。現状非商用なので無課金。
![qtq1.gif](https://qiita-image-store.s3.amazonaws.com/0/257374/01f16435-71df-ef39-4d3d-fc67dc42a9a2.gif)

- そのほかの基本的な機能
Facebookログイン、コメント、いいね、フォロー、お知らせ機能などなど。

- 携帯でも見れますが、あまりちゃんと作ってはいません。見た目崩れているところとかもあり。個人的には電車の中で復習してパッと記録したりはしています。あと、自分がchromeしか使わないので、chromeしか動作確認していません。ここら辺は対応したくなったらしようかなとは思っています。

# 気が向いたらやろうと思っていること
- パフォーマンスチューニング
全然困ってはいないので、気が向いたら。

- CircleCI導入
今はsider使っていますがCircleCI入れるかも。

- docker導入。
多分いつかやる。会社では使っていますが、自分で入れた訳ではないので、やる価値ある。

- Vue,Reactなど導入
RailsはAPIとして使って作り直すの楽しそう。

- APIもGoで書き直す
これも楽しそう。でもここまでするなら別のもの作るでもいいと思うかも。会社でGo使う予定なので、たくさん使ってみてから考えます。

- Ruby, Railsバージョンアップ
2019年中には会社でRails6に上げるだろうから、実験台として自分のアプリを使うかも。

- Test
機能追加したくなったら流石にもう少し書くかもです。

- PWA化
どんくらい大変なのかよく分かってないのでなんとも言えないですが。service worker使っているし、[盛り上がってる](https://medium.com/@firt/google-play-store-now-open-for-progressive-web-apps-ec6f3c6ff3cc)し。

# やってよかったこと
- 楽しい!!
楽しいのでプログラミングする時間が増えました。勉強量ベースアップは最近のテーマなので、上手くいった気がしてます。個人的に、質を追い求めすぎて腰が重くなるタイプなので。しのごの言わずに集中した状態の量を増やすことで、自然と質も良くなっていると実感しています。参考：[作りたいものを作るには結局大量のコードを書かないといけないことについて](http://blog.sigbus.info/2014/11/blog-post.html) 
自戒の念を込めて、サイト名もここら辺が由来になってます(QtQ：Quantity teaches Quality)。増えた勉強量のまま、インプット期に入る予定。非常に楽しみ。

- 普段触っているサーバーサイド以外のことも触らざるを得ない
普段は主にRails触ってまして、例えばインフラの知識も必要になるようなタスクに対しては先輩の手を借りることが多いのですが、個人開発では当然そうもいかず。設定ファイル色々弄って本番の挙動の変化を見るなんてことも当然会社のだと出来ない。
冒頭の結論にも書きましたが、僕みたいな人間にとっては特に、1人ぼっちでここら辺苦しむことの恩恵は大きい。

# 大変だったこと
- viewに時間がかかった
普段RailsやPHPを触っているので。かけた時間でいうと7割くらいはhtml, cssだったような。
デザイナーじゃないしぃ、という言い訳を胸にqiitaの見た目を盛大にパクってなんとか乗り切りました。html,cssはコードもひどめです。サーバーサイドも別にいいコードとは思わないですが、相対的にみて。あまりコード量膨大にならないだろうと決め込んで適当に書いていたんですが、流石に追加の改修がしんどくなってきた。この経験を次に活かそうと思います。。。

- AWS関連、ドメイン設定からhttps化など、少しずつ躓きました。
でもとてもためになった。

# 最後に
長かった。。想定より時間かかったけど、やって良かったと心から思います。
冒頭にもありますが https://github.com/yujiariyasu/qtq でコード公開しているので、歴浅い方は参考にしてください。色々問題のあるコードも多いので、例えば「この機能実装したいからコード参考にしたいけど、なんか匂いがする」とか思ったら気軽に質問してください！