【結論】
・アカウント認証機能付きの簡単なブログアプリが作れる
・但し、作るのに時間が掛かり過ぎている(19時間)
・開発フローと利用した機能をおさらいし、よりレベルアップを図る
【本題】
スクールで課題として出されていたWebアプリケーションの作成が完了したので、復習と現時点のスキルチェックを兼ねて、学んだ内容をまとめました。
作成物:ブログアプリ
使用言語:Ruby(Ruby on Rails)、HTML
まず、最低限の条件として提示されていた仕様が下記の通りです。
・Userがログイン / ログアウト / サインインできる
・Userがブログを投稿できる。
・Userが自分のブログを編集できる。
・Userが自分のブログを削除できる。
・ログインしていなくても全てのブログを閲覧できる。
・フォームの作成には「form_for」あるいは「form_with」を使用(form_tag不使用)
・ブログの一覧表示には「部分テンプレート」を使用
・Materialize.cssを使用して、デザインを作成する。
以前カリキュラムで作成したアプリと仕様が似通っているので、そのカリキュラム通りに作成していけば、そこまで困る事は無いでしょうが、現在の自身のスキルを知る為にも、基本的にインターネットからの検索だけで情報収集し、カリキュラムは30分以上、調べても答えが出せなかった時だけ見る様に心がけました。
また、この程度の制作物で質問していては、いつまで経っても独り立ち出来ないと思ったので、メンターへの質問も無しで取り組んで見ました。
そして、出来上がった物が、下記です。
非常に簡素ですが、最低限の仕様は満たせています。
今回のアプリケーション作成を通して見えてきた私の課題を下記にまとめます。
○deviceの仕組みに対する理解不足
<問題点>
今回、アカウント認証機能の実装には、gemのdeviceを用いました。
deviceは、認証機能を簡単に実装できる反面、「デフォルトのログイン画面はどうやって生成されているのか?」等といった自分が利用する範囲の仕組みを最低限理解していないと、エラーが発生した時に立ち往生してしまいます。
下記は、私の理解不足で行なった行動と、それが招いたエラーです。
・Userモデルを作成する際、「$ rails g devise User」ではなく、「$ rails g User」で作ってしまい、deviseと連動しなくなった
・devise用のviewファイルを生成後、テストサーバーを再起動していなかったので、viewファイルをいくら編集しても画面に反映されなかった
・アカウント登録時の情報に「名前」を追加後、devise側のストロングパラメーターの設定を変更していなかったので、「名前」だけデータベースに保存されなかった
(application_controllerで、before_actionにconfigure_permitted_parametersメソッドを設定)
<対策>
deviseに限らず、gemを利用する際は、どこかからコピーしてきたコードをそのまま貼り付けるのではなく、リファレンスをよく読み、自分が利用する範囲の仕組みを理解した上で利用する
○Rubyの知識の欠落
<問題点>
ブログの編集・削除ボタンがありますが、これらはブログの投稿者と現在のログインユーザーが一致している場合のみ表示される様に設計しました。
但し、実装当初は、全ての場合で消えてしまうという誤動作が発生していました。
その時にHTMLに組み込んでいたRubyのif文は下記の通りです。
<% if user_signed_in? && blog.user_id == current_user.id %>
「binding.pry」で調べてみると、「user_signed_in?」 は「true」でしたが、
「blog.user_id == current_user.id」は「 false」で返ってきていました。
但し、「blog.user_id」と「current_user.id」の値を調べると、
どちらも同じ値であったとしても、「 false」で返ってきていました。
この時点でカラムの型が原因の可能性を考慮できた筈ですが、
完全に忘れてしまっていた為、気づくことが出来ませんでした。
結局、1時間ほど時間を掛けて、ようやくカラムの型が違う可能性に気づき、
テーブルを作成した際のマイグレーションファイルを確認すると、
user_idの型が「string」に設定されていました。
これ以外にも、Rubyの基本的なところが抜けていて、支障をきたしてしまう
場面が多々あったので、もう一度知識の復習を行う必要があると感じました。
但し、スクールのカリキュラムは、既に3周しているのと、
アプリを作成するための本当に必要最低限だけに絞っているため、
より密度の濃い教材での学習が望ましいと考えています。
<対策>
体系的な教材で知識の整理を行う。
大きな課題は以上です。次に今後活かしたいと感じたものをまとめました。
○Materialize.css
CSSフレームワークで、所定のclassをHTMLに書き込むだけで
簡単にデザインが作成できる。今回作成したアプリは、これのおかげで
自前でCSSを作成する必要なく完成させることが出来ました。
○form_for
新規投稿画面と編集画面のフォーム部分は、form_forで書いたコードを
部分テンプレートで流用しています。仕組みを理解するのが難しいですが、
これ以外にも色々と応用が効きそうです。
○pry-rails
今まではカリキュラムに沿って作成を行っていた為、エラーが出ず、
恩恵を感じることは無かったですが、一から自身で作成するとエラーは
必ず発生するので、デバックツールは必須だと感じました。
以上、アプリ作成の振り返りでした。
作り出す前には、GitHubでバージョン管理しようとか、非同期通信を実装しようとか息巻いてましたが、まだまだそれ以前のレベルでした(笑)
《今日の学習進捗》
Railsを用いて簡単なブログ投稿機能を持つWebアプリの作成が完了。
学習開始からの期間 :20日目
今日までの合計時間:185.0h
今日までに到達すべき目標時間:182.6h
目標との解離:+2.4h
「10,000時間」まで、残り・・・「9815時間!」