「Qiita Night~Rails~」に参加してきました
2023年11月20日(月)19:00~20:00に開催された「Qiita Night~Rails~」に参加してきたのでその内容を共有します。
Qiita Nightについて
今回のLTテーマは「Ruby on Rails」でした。
LT
LT①:Railsとハードウェアをつなぐ
Railsシステムとタブレット連携(key station)に、MacroDroid - Device Automationを使っているお話でした
メモ
ハードウェア要因でサービスが止まることがあり、調査や対応に時間がかかっていた
電池切れ
他アプリ起動による起動失敗
固まる
ハードウェアをカスタマイズするという選択肢もあったが、コストパフォーマンスを考慮して、端末でのトリガーで実行するアプリケーションMacroDroid - Device Automationを導入し、監視の役割を果たすことで解決できた
充電が○○%になったら、メールで通知する
起動に失敗したら特定のSMSメッセージを送り、アプリ再起動を実行する
ハードウェア連携ではいろいろ苦労することがある
APIがない場合は自作でハードウェアを開発する必要があるが、電流管理など注意が必要
ログがない時もあったり、あっても現地しか確認できない場合があるため、事前に設定する必要がある
所感
ハードウェア連携のお話はあまり聞いたことなかったので、おもしろいなと感じました。
LT②:新規事業でRailsを使うメリット
メモ
新規事業とRailsの相性が良い
新規事業の特性 ⇒ 素早く仮説検証を繰り返すことが重要
不確実性が高い
予算/リソースが小さい
仮説検証/実行/修正を重視する
Railsの特性 ⇒ シンプルで直ぐに実装することができる
ドキュメントが豊富で、経験者も多い
MVCアーキテクチャというシンプルなフレームワークがあり、Railsに載っていれば簡単に開発できる
DRYやCoCで少ない記述で実装可能
事業が大きくなったときに躓くところとその対策
ビジネスロジックをどこに書くべきか分からない
Railsから逸れる場合は、事前にチームで認識合わせが必要(いろんなところに散財しにくくなる)
バージョンアップがつらい
テストコードはこまめに書いておく
細かくバージョンアップをする
機能開発を優先せざるを得ない場合も対応時期は握っておく
コードの書き方が統一されていない
あらかじめrubocopを導入しておく
Active Recordのcallbackがつらい
可能な限り使わない
システムが大きくなりすぎてつらい
必要に応じて、別フレームワークが必要
システムの分割を検討することが大事
1つのシステムに責務を持ちすぎないようにするらしい
所感
Railsアプリが大きくなると必ずぶち当たる壁なんだなと感じました。
コールバックはあまり使ったことなかったので、なぜダメなのかは調べてみたいと思います。
LT③:Railsで大規模Webアプリケーションを開発するときに知っておきたいテクニック
Railsで大規模アプリを開発する上で遭遇するつらいポイントとその対策についてお話していただきました。
メモ
大規模アプリ開発で遭遇するつらいポイント
MVCだけでは収まらなくなる
ModelかControllerかで実装に迷う
例
複雑な条件のコレクション作成(いろんなパターンの表示をしたい)
フロントエンドに渡すさまざまなデータ(メインメニューにさまざまなデータを表示したい)
対応案
迷うパターンに対して、実装方法を決めておくことで、書き方が統一され、肥大化しない
複雑な条件のコレクション作成 ⇒ Iteratorパターンを使う
フロントエンドに渡すさまざまなデータ ⇒ GraphQLを使う
他にも、DDD、クリーンアーキテクチャ、Formオブジェクトパターンなどがある
コード品質の担保
リファクタリング作業は直接売上につながらないため、後回しになりやすいが、ほっておくと技術負債が溜まっていき、リプレイスが発生する場合がある
一括ですべて解決する物はなく、1つずつ地道に改善活動していくしかない
静的解析ツールの導入、テスト実装、定期的なアップデート、コーディング規約等のドキュメント作成
所感
まだまだデザインパターンについては、あまり知らないため、もっと勉強していこうと感じました。
LT④:みんなに聞いた実はよく知らずに使っているRailsの機能
Active Job、GlobalID、Springについて、コードやRails Guideをもとに説明していただきました
メモ
Active Job、GlobalID、Springについて説明していただきました
Active Jobはバックグランドワーカーを抽象的に扱う仕組み
ActionMailer等が当たる
ActiveJobはsidekiqをすべて網羅していない
Rails Guideに載っている
GlobalIDとは
ActiveRecordのエンティティをグローバルに一意なURIとして文字列で表現する
利点
署名(SGID)
有効期限
Loaderで直接エンティティが引ける
ActiveJobと紐づける
Springのしくみ
これはRails Guideに載っていないため、コードを読んで理解
SpringはRailsアリケーションの起動時間を短縮するもの
rails s Springの対象外
bin/rails bin/rakeのbinstub経由しないとSpringは動かない
めっちゃゾンビプロセス発生しまくる
Springはデフォルトに入らない
所感
なんとなくでSpringやActiveJobを使用していたので、もう少しRailsガイドなどを読んで理解しようと思いました。
LT会に参加した感想
短い時間で、いろいろなお話が聞けて勉強になりました。
またRailsのことを何も分かっていないなと改めて感じたため、もっと学習を進めていきたいと思います。
補足
Connpassグループについて
この記事が気に入ったらサポートをしてみませんか?