$30 off During Our Annual Pro Sale. View Details »

Rubyで鍛える仕組み化プロヂュース力

Avatar for muryoimpl muryoimpl
December 06, 2025

 Rubyで鍛える仕組み化プロヂュース力

2025/12/06(土) に開催された 北陸Ruby会議01 でのトークスライド。

Avatar for muryoimpl

muryoimpl

December 06, 2025
Tweet

More Decks by muryoimpl

Other Decks in Programming

Transcript

  1. 自己紹介 - 名 前: muryoimpl - 居住地: 石川県金沢市 - Kanazawa.rb

    によく出没している - LT 大会向け Slack slash command 「kzlt」の創 造主兼管理者 - https://github.com/muryoimpl/kzlt-ruby
  2. 私にとっての Ruby - Monkey patch で上書き自在 - 直接 gems を書き換える必要がない

    - リポジトリを fork せずとも変更可能 - クラス、モジュール、オブジェクトを抽出しやすい - 親クラスだけでなく、比較的簡単に子クラスも取得できる
  3. なぜ「仕組み化」するのか - 人の考えたり行動したりする負荷が減る💡 - 覚えておかなければいけない -> 不要になる - 確実に実施しなければいけない ->

    不要になる - 暗黙知から形式知にできる - コード化することで共通認識を作ることができる - ヌケモレ防止、実行の一貫性確保
  4. どのような手段で「仕組み化」するのか - Custom Cops - https://github.com/rubocop/rubocop - https://github.com/rubocop/rubocop-rails - Rake

    tasks or Thor - https://github.com/rails/thor - GitHub Actions ( Rake tasksや Thor を実行する ) - (Ruby 以外だと) actions/github-script - https://github.com/actions/github-script
  5. どう使い分けているか - Custom Cops - コードを書くうえで注意すべきこと - Rake tasks or

    Thor - コード上だけではどうにもできないもの (例: DB) - Thor は引数オプションつけたいときに使う
  6. どう使い分けているか - GitHub Actions - 全部この上で動かしている - step 上で Ruby

    のワンライナー書いたりもしてる - ワークフロー自体に作用するものは + Slack 通知 - actions/github-script - GitHub 上の状態はほぼすべて取得できるので、状態の変化で 何かをさせたいときはこれを使う
  7. 何を対象に仕組み化しているか - 開発のワークフローにある些事を対象にしている - できるだけ、さくっと実装できる範囲 - 時間かかるだけ利益の享受が遅れる - 簡易実装して時間を稼ぐ -

    できれば複数人いるプロジェクトを対象にするのがよい - ニーズを自分以外からも獲得できる - 仕組み化した後の答え合わせができる
  8. どうやったら思いつくのか - 一発で格好よく解決しようという考えを捨てる - まず実利を得ることを考える - Custom Cop でAuto Correct

    が難しいなら まず警告を出す - それも難しければ test を書いてひっかける - 指示して AI に作ってもらう
  9. どうやったら思いつくのか - 法則をみつける or 法則をでっちあげる - 型( Object#is_a?, Object#kind_of? )

    - ActiveSupport::DescendantsTracker.descendants - RuboCop::NodePattern::Macros#def_node_search, def_node_matcher
  10. 作るときに考えること - 早いの?うまいの?安いの? - さくっとできる?効果は十分?追加のインフラかかる? - Generator や Snippet はちょっと微妙…

    - 最初は使われるが、慣れると皆他からコピペしてくる - AI さんはちゃんと実装したがる - 過剰に品質を気にしすぎる傾向があるので適度なところでやめ ておく
  11. 簡単な実装例( 1) 1. ApplicationRecord.ignored_columns に無視するカラムが登録さ れっぱなし、もしくは、宣言だけ残っていてカラムは削除されている ものがないかチェックする rake task -

    ApplicationRecord.descendants を使ってテーブルに対応したモデ ルのみを抽出している - すぐカラム削除する PR 作っておけばいいじゃないって思うでしょ? それでも発生するから作った
  12. 簡単な実装例( 2) 2. CSVにいれる BOM の定数宣言があちこちに出てきたので 警告を出す Custom Cop を追加

    - すべての BOM の宣言が生まれる前に消し去るために、Custom Cop 作って穴塞いだ後に他の宣言を消した
  13. 簡単な実装例( 3) 3. 新しくリリースされた Ruby の image が公開されているかどうかを 確認する GitHub

    Actions - renovate が Dockerfile の RUBY_VERSIONを更新する PR を作っ たときに、container image がリリースされていないとマージボタン 押せないようにするための仕組み
  14. 簡単な実装例( 4) 4. ActiveRecord のモデルに has_one/has_many が設定されて おり、かつ、dependent option 設定されているかチェック

    するrake task - rubocop-rails の Rails/HasManyOrHasOneDependent は has_one/has_many を書かないとチェックできないので、 belongs_to だけ書かれていても引っ掛けられるようにした