「【iCARE Dev Meetup #18】技術顧問が語る、Ruby on Rails実践開発」に参加

2月17日、オンライン開催された【iCARE Dev Meetup #18】技術顧問が語る、Ruby on Rails実践開発 - connpassに参加した。

所感

RailsバージョンアップやSQLなど興味のある話題が多かったので参加してみた。

Railsバージョンアップを実践してみて」では、テストの大切さを再認識した。バージョンアップの難しさをあまりイメージできていなかったが、Gem同士の依存関係の具体的な話もあり、作業のイメージができた。思っていたより大変そう。やはり、テスト大事。

SQLActiveRecordについて」は、SQLをゴリゴリ書いていた人がRailsに入門するときに、SQLを組み立ててからそれをどうRailsで表現するかという内容。例がこのMeetupの参加者や登壇者だったのでわかりやすかった。

自分の場合、SQLの理解が浅くActiveRecordに頼りっきりだが、SQLをわかっている人の考え方を知るのは興味深かった。ActiveRecordは便利で、SQLを知らなくても大概のことができてしまうが、SQLを意識せずにいるとパフォーマンスが悪くなってしまうことがあるので、SQLについても勉強したいと思った。

「HotwireからDHHが考えるこれからのRailsとJSとの付き合い方を知る」では、TurboとStimulusの詳しい話を聞くことができた。Stimulusは、「控えめなJaveScriptフレームワーク」としてパーフェクト Ruby on Rails 【増補改訂版】に載っていたので理解していたが、Turboについてはまったく知らなかったのでとても勉強になった。

Hotwireを使うと、ロジックをサーバーサイド側に集中させ、フロントエンドをわかりやすく書けそうだと思った。モバイルにも一応対応できるようなので、今後使われることが増えるかも?

全体的に勉強になったので復習したいが、発表スライドを1つしか見つけられず残念。 YouTube にアップされていたのでリンクをはった。

内容メモ

Railsバージョンアップを実践してみて

youtu.be

バージョンアップ前の状況

  • Gem更新など3年ぐらい止まっていた
  • 新機能開発が優先になっていた
  • 使用しているGem、150以上
  • 管理画面側はテストが少なく人力で確認しないといけない状態

バージョンアップ

  • Railsガイドがわかりやすかった
  • Change log
  • dependabotの導入
  • CIを通す
  • Gemをアップデート
    • Gem同士の依存関係によりスムーズにいかないことも多い
  • bundle outdatedで確認
    • 使っていないGemは削除
  • 本番環境に影響が出るものは1個ずつ

まとめ

  • テスト大事!
  • 不要なGem入れない
  • 使わなくなったら削除する
  • メンテナンスされているGemを使う

Rails APIモードにおけるToken認証機能について

youtu.be

認証Tokenをどこに保存するか?

  • LocalStorage
    • 実装が簡単
    • XSS脆弱性があった場合、Tokenを容易に盗むことができる
  • Cookie
  • In-memory
    • JavaScriptでブラウザのメモリ内に保存する方法
    • 永続化されない(リロードすると消滅)
  • Auth0のSilent Authentication
  • それぞれの目的や扱う情報に応じて選ぶ

SQLActiveRecordについて

youtu.be

SQLからActiveRecordの使い方を考える。

  • Meetupと参加者、登壇者を例にしたER図
  • SQLを組み立ててからRailsのコードにする

HotwireからDHHが考えるこれからのRailsとJSとの付き合い方を知る

youtu.be

Hotwireは、Basecamp社製のjsフレームワーク。複数のフレームワークから構成されている。

“最小限の労力でユーザが求めているサービスを提供すること”に特化しているライブラリ。Railsと同じ方針をフロントエンドにも持ち込んだものといえる。小〜中規模のサービスに向いている。

Hotwireを使うと、

  • サーバサイドにロジックを寄せることができる
  • クライアントサイドのコードは最小限におさえることができる
  • それでいて、それなりにSPAができる
  • 結果として
    • ひとつのチームですべてを担当できる(かも)
    • 好きな言語を使える(Rails以外でも使える)
  • VueやReactと比べると細かいことはできない

Hotwireのアーキテクチャ

  • Turbo
    • Turbo Drive(Turbolinksを改善したもの)
    • Turbo Streams
    • Turbo Frames(HTMLの一部を差し替えることができる)
      • 遅延評価も可能(loading="lazy")
    • Turbo Native(iOSAndroidでTurboを使うためのライブラリ)
  • Stimulus
    • 学習コストが低い
    • ファイルが自然と整理される
    • 特定のページだけで発火させたいjsが書ける
  • Strada(未発表)

Turbolinks

  • 全てのリンクをAjaxに置き換えるライブラリ
  • E2Eテストやformの挙動がわかりにくい
  • ハマる人が多く、基本消されるライブラリに...

(参考)TurbolinksからTurboへの移行 - おもしろwebサービス開発日記