プログラミング学習を始めて1ヶ月の超初心者が勉強のために自作のチャットアプリを作ってみたので、記録も兼ねて、作成までのプロセスを書き綴ろうと思います。
制作したアプリケーション↓
GitHub (https://github.com/f-tk-ttshp77/MeetPro)
HerokuURL (https://meetpro-v01.herokuapp.com)
※PC(Chrome推奨)のみで動作確認済
(その他解像度では激しく表示崩れしますのでオススメしません・・・)
最低限のプログラミング学習
初心者とは言っても、実はC言語やJavascriptなどを書籍での学習経験があったが、どちらも作ってみたい「モノ」(目的)が無いままに勉強してたので途中でモチベが保てずに挫折。
今回は作りたい「モノ」があったので以前のように途中で挫折することなくモチベも維持して勉強できた。
よく言われていることだが、プログラミング初学者にとって一番重要なのは、どの言語から学ぶが?どんな学習ツールを使うか?とかではなく、「何を作りたいか?」をよく考えることだということを実感した。
「モノ」ができるなら、どんなツールを使うかなどあまり関係ないと思う。
ということで、挫折しないなら十分独学でもイケると思い、使用した無料の学習ツール使うことにしたのでちょっとだけ紹介します。
Progate (https://prog-8.com)
開発環境を整える必要がなく、スグに学習し始めることができるe-learningって感じ。スグ動いてるとこを見れるし、ポップなスライドで説明してくれるとこが非常にナイス。一定数以上のレッスンを受けると有料会員登録(980円/月)しないといけないが、忙しい人でも1ヶ月で全レッスンやり切れる分量なのでコスパも良い。ただ、網羅性は高いとは言えないので本格的に学びたい人には向かないかも・・・
あと、言語によってレッスンの充実度に乖離があるのが難点
RailsTutorial (https://railstutorial.jp)
Rails勉強する人は誰でも知ってる基本無料のやつ。ブラウザ上で超分厚いRailsの学習本を読んでる感じの学習ツールで、なかなか詳しい。TwitterっぽいWebアプリの制作を通して本格的にRailsの勉強をしていく流れ。Progateでは教えてくれなかったテスティングの説明までしてくれるお節介な良いやつ。ただ、原著者の英語を翻訳したってこともあり、特に名詞の訳し方が微妙で少し分かりにくい部分があるのは否めなかった。
チャットアプリ実装までの道のり
掲示板を作るのが勉強には良い(バックエンドも、フロントエンドもでいるという意味で)ということを聞いたので、それに少しオリジナリティを加えたツールを作ろうかなと思った。
日頃から、日本語特有の問題なのか、会議などの話し合いが上手くいっていないなと思う場面がよくあった。
事実を述べているのか、単なる感想や妄想を喋ってるだけなのかよく分からなかったり、くどくど言ってるけど結局賛成なんかよっ!みたいなこととか・・・
そういうことがなく、できるだけ建設的に会議ができるようになったらなぁと思っていたので、自分の発言に要約タグのようなものをつけながら会議ができたら少しはマシになるだろうと思って、タグをつけながらチャットできるツールを作ろうと思った。
あとはこれに必要な機能を実現するためにはどうしたらいいかをググって作った。
-
リアルタイムチャットシステム
→ どうやらリアルタイムチャッットのような非同期の双方向通信技術の一つに WebSocketなるものがあるらしく、Rails5.0からそれの実装をシンプルに行えるActionCableなるものがあるらしい。いくつか記事も落ちてたのでこれでイケそう。
◆参考
Action Cableでリアルタイムチャットアプリの作成方法 (Rails 5.1.4にて)(その1) herokuで動かす!
【Rails5.2】ActionCableとDeviseの欲張りセットでリアルタイムチャット作成 -
特定の人だけがチャットの閲覧権限を持つ
→ 各メッセージ、各ユーザー、各チャットルームを紐付けできれば表示の切り分けができそう。どうやらDBの紐付けは参照カラムを用意してあげればイケるらしい。
◆参考
railsで多対多のアソシエーションの作り方と、出来ること -
自前のユーザー管理セキュリティは不安
→ どうやらDeviseなる便利なツールがあるらしい。これをベースにしてユーザー画像も設定できるようにしよう。
◆参考
[Rails] deviseの使い方(rails5版)
・
・
・
みたいな感じで作った。
感想
よかったこと
- 公開までしようと考えていたおかげで、HerokuやらAWSのことについても知れた。ローカル環境と本番環境の仕様の違いを学べた。
- 実際にモノを作ることでエラーとのお付き合いを知った。Qiita、teratail、StackOverflowは偉大。
- 少ない知識でも実装までやりきる力が身についた感はある。(1個やばいif文書いたので親切な人が教えてくれたら嬉しかったりする)
反省点
- テスティングを舐めて作らなかったのでエラー解決にかなり手間取った。(公開したものの、どこかでバグるんじゃないかと不安でしょうがない。)
- メッセージが1行ものしか送れない仕様になってしまった。(気づくのが遅すぎた)
- ところどころ非同期通信にできてない。