はじめに
Railsを勉強中。
Ruby on Rails5 速習実践ガイドを読んだので勉強したことなどのまとめ。
Railsの最新バージョンは記事執筆時点で7.1となっているため、参考にされる方はバージョン差異による挙動の違いなどにお気をつけください。
学んだこと
- リダイレクトする際の
flash[:notice]
のようなメッセージなどの渡し方は、flash[:alert]
も用意されている - レンダーで渡したい際には
lash.now[:alert]
なども使える - flash.keepなども使える
- コールバック:処理の前後に任意の処理をよばせる
- オリジナルの検証処理の書き方、
validate
とvalidates
は違うので気をつける - マイグレーションでバージョン上げ下げを指定できる
- データの絞り込み条件
- scopeの活用:繰り返しの絞り込み条件を読みやすく記述できる
scope :名前 -> { 指定条件(条件の値)}
- 重複を避けるためにフィルタを使う
- Rspec(自動テスト)について
- resourcesとresourceの使い方
only:
専用ルート,expect:
以外の専用ルート - routes.rbの記載:コントローラーに沿って記述する(汚くならないように)
- 国際化(yamlファイルの記述は日本語、英語の言語単位だけでなくともモデル単位でも良い。)
- 個別にロケールを指定して取ってくる、もしくは個別のユーザーにロケールを持たせて指定するなどの対応もある
-
TimeWithZone
クラス:時間を扱う(日本時間にするときは'Asia/Tokyo'
とTime.Zone
にセットする) -
Time.zone.now
=Time.current
-
Time.zone.today
=Date.current
- エラー画面を本番/開発で切り分ける,
config.consider_all_requests_local = true
とすることで本番用画面を確認できる - 特定値のエラー出力をしない(カード情報など)
config.initializers.filter_parameter_logging.rb
で設定する - SQL:クエリメソッドはハッシュで条件指定すると自動的に安全処理を施して検索してくれるためSQLインジェクション対策になる。できる限りハッシュで検索を行うこと。直接書きたい場合にはプレースホルダーを利用すること
- Rubyのコードや
git log
などのコマンドを意図的に埋め込まれないように実行する際に工夫すること。 - ホワイトリストで制限するなどが一番安全。渡されたものをそのまま実行するのはどのようなものがくるか想定が困難で網羅できない可能性もあるため避ける。
- アセット
asset
(画像やCSS、JSなど諸々のリソース)を効率よく扱うための設定。config/assets.rb
に記述したり。 - メール送信処理(メーラーを利用、簡易的にsmtpサーバーを立てて実装)
-
ActiveStorage
を利用した画像添付(インストールしてマイグレーションファイルを作成し、反映すると簡単に実現できる) - csv出力機能(標準ライブラリで簡単に実現できた)
- CSV入力機能(import)
- ページネーション機能適用(gemのkaminariを利用する)
- 非同期処理(redis+sidekiq)
- JSでページに変化をつける
- Ajax通信
-
Turbolinks
について -
Yarn
やWebpacker
の導入,React
の導入 ※rails7ではWebpacker
は使わない - チーム開発での視点や開発環境の構築(仮想化を行ったりスクリプトを共有したりなど)
- マイグレーションやバージョンアップなどの注意点
- コードの共通化や役割分担、適切な場所に書くことについて
良かったこと
- アプリケーション雛形のディレクトリやファイルの説明など、Railsに触れたことがない初心者向けに丁寧に説明がされていると感じた。
- 基本のCRUD操作や各機能に追加を行う応用編などがあり、実務で応用できそうな内容など幅広く学べることができた。
難しかったこと
- 内容と直結する部分ではないが、関連するライブラリのインストール(
Yarn
やNode.js
)などについての説明がなくこの辺りは調べる必要があった。しかし、逆にそういった部分を自力で調べて解決することで、全てを書籍の誘導通りに解決するのではなく自走力の鍛える助けになったのではないかと思う。
最後に
まだまだRailsについては勉強途中ではあるが、Rubyを勉強した後Railsを勉強し、とても便利なライブラリや機能などが用意されていると感じた。うまく活用してアプリケーション開発のスキルを上げていきたい。