Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Rubyで鍛える仕組み化プロヂュース力
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
muryoimpl
December 06, 2025
Programming
2.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyで鍛える仕組み化プロヂュース力
2025/12/06(土) に開催された 北陸Ruby会議01 でのトークスライド。
muryoimpl
December 06, 2025
More Decks by muryoimpl
See All by muryoimpl
人魚とたわむれる
muryoimpl
0
68
Kanzawa.rbのLT大会を支える技術の裏側を変更する Ruby on Rails + Litestream 編
muryoimpl
0
2.3k
Kanazawa.rb LT大会用/kzlt コマンドの説明 2024/01版
muryoimpl
0
3.1k
kzltコマンドの新たなソリューションについて
muryoimpl
0
3.1k
俺とTODOアプリ~Linearの変~
muryoimpl
0
2.9k
POSIX文字クラスでの躓き
muryoimpl
0
2.4k
/kzlt コマンドとは
muryoimpl
0
1.1k
meetup.kzrb.org の更新を考える 事前激闘編
muryoimpl
0
1.7k
meetup.kzrb.org の更新を 考える ゆるふわ編
muryoimpl
0
1.7k
Other Decks in Programming
See All in Programming
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
550
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
1.8k
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
390
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
200
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
120
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
270
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
0
1.3k
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
160
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
680
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
A Soul's Torment
seathinner
8
3.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
540
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
280
Thoughts on Productivity
jonyablonski
76
5.4k
Transcript
Rubyで鍛える仕組み化 プロヂュース力 2025/12/06 (Sat) 北陸 Ruby 会議 01 @ 石川県立図書館
muryoimpl
本日のおしながき - 自己紹介 - 私にとっての Ruby - 仕組み化どうやっている? - どうやって思いつくのか?
- 具体的な実装例
自己紹介 - 名 前: muryoimpl - 居住地: 石川県金沢市 - Kanazawa.rb
によく出没している - LT 大会向け Slack slash command 「kzlt」の創 造主兼管理者 - https://github.com/muryoimpl/kzlt-ruby
None
https://kzrb.doorkeeper.jp/events/193290
https://zenn.dev/muryoimpl
本日のおしながき - 自己紹介 - 私にとっての Ruby - 仕組み化どうやっている? - どうやって思いつくのか?
- 具体的な実装例
私にとっての Ruby - システムの第一言語 - 仕事でもプライベートでも使っている - 汎用的で多くの場面で使える - GitHub
Actions の image にもインストールされている - https://github.com/actions/runner-images
私にとっての Ruby - Monkey patch で上書き自在 - 直接 gems を書き換える必要がない
- リポジトリを fork せずとも変更可能 - クラス、モジュール、オブジェクトを抽出しやすい - 親クラスだけでなく、比較的簡単に子クラスも取得できる
Ruby で鍛える 仕組み化プロヂュース
本日のおしながき - 自己紹介 - 私にとっての Ruby - 仕組み化どうやっている? - どうやって思いつくのか?
- 具体的な実装例
普段、仕事では 趣味で仕組み化をしている
私のいう「仕組み化」とは 作業やその流れを 自分なりに、もしくは、チームとして定義し 、そ の作業が全自動、もしくは、半自動でスムーズに流れるようにす ること。 人のする作業であっても、システムが介在することでスムーズに なるならば、これもその範疇とする。
なぜ仕組み化する?
なぜ「仕組み化」するのか - 人の考えたり行動したりする負荷が減る💡 - 覚えておかなければいけない -> 不要になる - 確実に実施しなければいけない ->
不要になる - 暗黙知から形式知にできる - コード化することで共通認識を作ることができる - ヌケモレ防止、実行の一貫性確保
何を使って仕組み化する?
どのような手段で「仕組み化」するのか - 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
どう使い分けているか - Custom Cops - コードを書くうえで注意すべきこと - Rake tasks or
Thor - コード上だけではどうにもできないもの (例: DB) - Thor は引数オプションつけたいときに使う
どう使い分けているか - GitHub Actions - 全部この上で動かしている - step 上で Ruby
のワンライナー書いたりもしてる - ワークフロー自体に作用するものは + Slack 通知 - actions/github-script - GitHub 上の状態はほぼすべて取得できるので、状態の変化で 何かをさせたいときはこれを使う
何を対象にしている?
何を対象に仕組み化しているか - 開発のワークフローにある些事を対象にしている - できるだけ、さくっと実装できる範囲 - 時間かかるだけ利益の享受が遅れる - 簡易実装して時間を稼ぐ -
できれば複数人いるプロジェクトを対象にするのがよい - ニーズを自分以外からも獲得できる - 仕組み化した後の答え合わせができる
本日のおしながき - 自己紹介 - 私にとっての Ruby - 仕組み化どうやっている? - どうやって思いつくのか?
- 具体的な実装例
どうやったら思いつくのか - レビュー時に困ったことを解決できないか考える - 実はすでにみんな困り事には気づいている - だいたいこれ - ただし実装するとは言っていない =>
あとはやるだけ - 指示して AI に作ってもらう
どうやったら思いつくのか - 一発で格好よく解決しようという考えを捨てる - まず実利を得ることを考える - Custom Cop でAuto Correct
が難しいなら まず警告を出す - それも難しければ test を書いてひっかける - 指示して AI に作ってもらう
どうやったら思いつくのか - 具体的なものには個別・具体的な対策でもOK - まず問題の箇所に対して簡単に蓋をして塞ぐのが大事 - 蓋をして止めている間に、考え、実装する - 抽象度を高めて汎用的にする -
gem として適用範囲を拡大する
どうやったら思いつくのか - 法則をみつける or 法則をでっちあげる - 型( Object#is_a?, Object#kind_of? )
- ActiveSupport::DescendantsTracker.descendants - RuboCop::NodePattern::Macros#def_node_search, def_node_matcher
法則を見出す - 特定のクラスを抽出する場合 - 特定のクラスを継承したクラス Rails.application.eager_load! ApplicationRecord.descendants
法則を見出す - 特定のクラスを抽出する場合 - 特定のmodule を include したクラス Rails.application.eager_load! ObjectSpace.each_object(Class).select
do |klass| klass.included_modules.include?(module) end クラスの配列が返る
法則を見出す - 特定のクラスを抽出する場合 - 特定のmodule を extend したクラス Rails.application.eager_load! ObjectSpace.each_object(Class).select
do |klass| klass.singleton_class.ancestors.include?(module) end クラスの配列が返る
法則を見いだせたら もう勝ちに等しい
作るときに考えること
作るときに考えること - 早いの?うまいの?安いの? - さくっとできる?効果は十分?追加のインフラかかる? - Generator や Snippet はちょっと微妙…
- 最初は使われるが、慣れると皆他からコピペしてくる - AI さんはちゃんと実装したがる - 過剰に品質を気にしすぎる傾向があるので適度なところでやめ ておく
本日のおしながき - 自己紹介 - 私にとっての Ruby - 仕組み化どうやっている? - どうやって思いつくのか?
- 具体的な実装例
簡単な実装例( 1) 1. ApplicationRecord.ignored_columns に無視するカラムが登録さ れっぱなし、もしくは、宣言だけ残っていてカラムは削除されている ものがないかチェックする rake task -
ApplicationRecord.descendants を使ってテーブルに対応したモデ ルのみを抽出している - すぐカラム削除する PR 作っておけばいいじゃないって思うでしょ? それでも発生するから作った
None
簡単な実装例( 2) 2. CSVにいれる BOM の定数宣言があちこちに出てきたので 警告を出す Custom Cop を追加
- すべての BOM の宣言が生まれる前に消し去るために、Custom Cop 作って穴塞いだ後に他の宣言を消した
※対象のファイルについては、.rubocop.yml で指定している
簡単な実装例( 3) 3. 新しくリリースされた Ruby の image が公開されているかどうかを 確認する GitHub
Actions - renovate が Dockerfile の RUBY_VERSIONを更新する PR を作っ たときに、container image がリリースされていないとマージボタン 押せないようにするための仕組み
None
簡単な実装例( 4) 4. ActiveRecord のモデルに has_one/has_many が設定されて おり、かつ、dependent option 設定されているかチェック
するrake task - rubocop-rails の Rails/HasManyOrHasOneDependent は has_one/has_many を書かないとチェックできないので、 belongs_to だけ書かれていても引っ掛けられるようにした
簡単な実装例( 4) - ActiveSupport::DescendantsTracker.descendants の存在に気が ついていなかったため、ApplicationRecord.connection.tables で テーブル取得して table_name からモデルクラス名を組み立ててい
た - ↑を処理するクラスを作って、そのテストという建付けでチェックする ようにした(蓋をした)
簡単な実装例( 4) - モデル名とテーブル名が異なる(self.table_name=)場合や、関連の キーがテーブル名と不一致の場合があるため、それらに対応して gem 化した - https://github.com/muryoimpl/dependent_option_checker
簡単な実装例( 4) - 具体的な内容については、zenn.dev に暫定対応時の記事と、gem 化したときの記事があるのでこちらをみてください - https://zenn.dev/ashita_team/articles/36bc5e77651985 - https://zenn.dev/ashita_team/articles/ed08141e3110e2
まとめ
まとめ - (半) 自動化で人の負荷が減る、暗黙知から形式知にできる - 要求はあなたの中に既にある、一歩踏み出して実装すべし - 一発解決に時間かかるなら段階を踏んで解決してもいい - 法則を見出すと勝ち。見出せないならでっちあげよ
- 些事には意外と少ない行数で対応できるので、レビューの隙間を埋 めてみて