Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
roppongirb_20250911
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kuniaki IGARASHI
September 11, 2025
Technology
710
1
Share
roppongirb_20250911
Roppongi.rb LT 2025年9月11日 SmartHRさんオフィス
Kuniaki IGARASHI
September 11, 2025
More Decks by Kuniaki IGARASHI
See All by Kuniaki IGARASHI
RailsTokyo 4 GarnetTech373
igaiga
0
96
ActiveJobUpdates
igaiga
1
650
igaiga Ruby Association Activity Report 2025 LT
igaiga
1
150
KaigiOnRails2024
igaiga
16
24k
RuboSensei
igaiga
0
350
Shibuya.rb-2023-04-27-igaiga
igaiga
1
590
Ginza Rails27 igaiga
igaiga
9
14k
tork09igaiga
igaiga
2
410
Road to white mages
igaiga
1
780
Other Decks in Technology
See All in Technology
AI時代から振り返るTerraform drift運用の歴史 / AI Age Reflections on the History of Terraform Drift Operations
aeonpeople
2
620
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
160
A Harness for Behaviour: how to get AI to generate code that does what we intend, or "TDD in the age of AI"
xpmatteo
1
520
Databricks 月刊サービスアップデート 2026年05月号
tyosi1212
0
130
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
790
string地獄を脱出する
sansantech
PRO
1
110
oracle-to-databricks-migration-with-llm-and-dbt
casek
1
390
ポスター発表&デモと総括 / Poster Presentations & Demonstrations and Summary
ks91
PRO
0
180
Agentic AI時代における メルカリのAIガバナンスとガードレール実装
naoichihara
17
17k
Gradle×GitHub_ActionsでCI時間を約50%短縮 ジョブ分割の設計と落とし穴 / Cutting CI Time by ~50% with Gradle and GitHub Actions: Job-Splitting Design and Pitfalls
takatty
0
550
Sony_KMP_Journey_KotlinConf2026
sony
1
180
Kaggle未経験社員をメダリストに育てる「AIドラゴン桜」
lycorptech_jp
PRO
0
690
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.1k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
270
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Designing for Timeless Needs
cassininazir
1
240
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Music & Morning Musume
bryan
47
7.2k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The Spectacular Lies of Maps
axbom
PRO
1
770
WENDY [Excerpt]
tessaabrams
11
38k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
180
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Transcript
Railsを学ぶポイントとコツ デバッグ編 LT版 ガーネットテック373株式会社 五十嵐邦明 / igaiga 2025/09/11 Roppongi.rb LT
自己紹介 五十嵐邦明(igaiga) ガーネットテック373株式会社 フリーランスのRailsエンジニア 株式会社キネカさん、株式会社Medical Shiftさんほかで勤務中 https://x.com/igaiga555 著書 ゼロからわかる Ruby超入門
Railsの練習帳 Railsの教科書 パーフェクトRuby on Rails[増補改訂版] RubyとRailsの学習ガイド ほか Roppongi.rb 初参加です。よろしくお願いします!
KoR 2025 CFP 『Railsを学ぶポイントとコツ』 2025/03/05 Rubyアソシエーションセミナー 『Rubyを学ぶポイントとコツ』 これのRails版です CFPをすごく長く書いてしまってごめんなさい この3倍くらいの長さ(ここに入りきらない)
今日はデバッグ編LT版(分量全体の20%くらい)でお話しします
KoR 2025 CFPの思い出 CFPを提出したら500エラー そういえばpreviewに何もでていなかった invalidなmarkdownを書いてしまったのかもしれない(何しろ長いので) My Proposalsのページから確認するとsubmittedステータスにはなっている 報告しようと思ったが、匿名だからすぐに報告すると怪しまれるのでは 私「一晩寝てほとぼりが冷めた頃に報告しよう」
私 〜夜を徹して睡眠を取る〜 翌朝 私「あれ、直ってる!妖精(=うなすけ)さんありがとう!」
『Railsを学ぶポイントとコツ』 デバッグ編 LT版 目次 debug gem g gem Active Support
Instrumentation メソッドが定義されているソースコードのパスを調べる メソッドに関する便利メソッド Gemのソースコードのパスを調べる、変更を元に戻す
debug gem その1 Rubyコアチームがメンテナンスしているデバッガ Rails7.0からデフォルトのデバッガになった require "debug" して binding.break で一時停止
next or n 1行ずつステップ実行 continue or c 一時停止を解除してプログラムを再開 help or ? 利用できるコマンドを表示 以降でお気に入りのコマンドを紹介します
debug gem その2 backtrace or bt メソッド呼び出し履歴(バックトレース)を表示 メソッドに渡された引数の中身も見れて便利 i i
<object> objectが持つインスタンス変数と代入されたオブジェクトを表示 watch <@instance_variable_name> 指定のインスタンス変数変更時に一時停止してデバッグコンソールを起動
debug gem その3 trace コマンド 以降の処理で指定したイベントが発生したときにその情報を表示 TracePoint的なことができます trace exception 例外発生時にその情報を表示
rescueされる例外も表示できる trace exception /regexp/ で正規表現で絞れる catch <ExceptonName> ExceptonName例外が投げられたとき一時停止してデバッグコンソールを起動
debug gem その4 binding.break do "コマンド" 一時停止せずにdo以降のコマンドを実行して再開するので速いし楽 binding.break do: "trace
exception" ...処理... (この間に投げられた例外が表示される) binding.break do: "trace off exception" binding.break do: "trace exception" と binding.break do: "trace off exception" で処理を囲む その間で投げられた例外が表示される
g gem g gem は通知サービスへ文字列を出力するgem gメソッド: pメソッドの出力先を通知に変えた版 g gem と
terminal-notifier gemをインストール macOSではシステム設定 - 通知 - terminal-notifier で通知設定を確認 require "g" g "hi"
Active Support Instrumentation イベントに対して処理を登録、指定イベント発生時に処理を実行する機能 config/application.rbやconfig/initializers/*.rb などに以下を書く ActiveSupport::Notifications.subscribe "イベント名" do |name,
started, finished, unique_id, payload| # イベント発生時に実行したいコード end Railsガイド 「Active Support Instrumentation で計測」 監視可能なイベント一覧 取得できる情報の詳細 カスタムイベントの作成手順 例を次のページから説明していきます
sql.active_record : SQLクエリ発行時イベント DBへSQLクエリが発行されるたびに呼び出されるイベント SQLが実行されるごとに渡したブロックが実行される ActiveSupport::Notifications.subscribe "sql.active_record" do |name, started,
finished, unique_id, payload| # 実行されたSQLをログへ出力 Rails.logger.info payload[:sql] end
process_action.action_controller : ページ表示イベント ページが表示されるときのControllerとActionを表示 前述のg gemで表示すると、ブラウザからページ遷移するごとにControllerと Actionが通知表示されて便利 デモ ActiveSupport::Notifications.subscribe "process_action.action_controller"
do |name, start, finish, id, payload| Rails.logger.info "=== #{payload[:controller]}##{payload[:action]}" end
メソッドが定義されているソースコードのパスを調べる メソッドが定義されているソースコードのパスと行数がわかる Gemのソースコードも変更して実行できます binding.irb や binding.break を書いてRubyの実行を止めて調査もできる methodメソッドとsource_locationメソッド methodメソッドにシンボルでメソッド名を渡してMethodオブジェクトを取得 source_locationメソッドでメソッド定義コードのパスと行数を表示
Methodオブジェクトのinspectメソッドが同様の情報を返すのでpメソッドでもOK require "csv" CSV.method(:read).source_location #=> ["/Users/matz/.rbenv/versions/3.4.1/lib/ruby/gems/3.4.0/gems/csv-3.3.2/lib/csv.rb", 1922]
メソッドに関する便利メソッド Method#ownerメソッド メソッドが定義されているクラスまたはモジュールを返す Method#original_nameメソッド aliasがつかわれているときにalias先のメソッド名を返す Method#super_methodメソッド superを呼んだときに呼び出されるメソッドオブジェクトを返す Module#ancestorsメソッド メソッドの継承ツリー呼び出し順を調べる Module#const_source_locationメソッド
定数が定義されたソースコードのパスを返す Method#source_locationメソッドの定数版
Gemのソースコードのパスを調べる、変更を元に戻す Gem名からそのGemがインストールされているパスを調べるコマンド RubyGems: gem which gem名 Bundler: bundle show gem名
(Railsアプリではこちらが便利) bundle openコマンドをつかうとエディタで開くこともできる 環境変数EDITORやBUNDLER_EDITORを設定必要 Gemの変更を元に戻す gem pristine gem名 コマンド Gemfileに書かれた全てのGemを元に戻す bundle pristine コマンド
ほかにも ほかのネタも Railsの練習帳 で公開しています blank?,present?やselect, rejectの組のように反対の意味のメソッドをつかうと便利 include?とin? 日時型にはTimeWithZoneクラスをつかう onlyとexceptは成長したときを考える (つづく)
Railsの練習帳 ネタ集 ActiveRecordのカラム名の予約語と命名のコツ ActiveRecord whereメソッドの不等号判定にRangeオブジェクトをつかう 日時の範囲指定にもRangeオブジェクトをつかう mergeメソッドは便利 LIKE節はサニタイズを忘れずに saveとsave!の組など、メソッドの末尾が!有無の組のつかいわけ Model.findよりもcurrent_user.relationをつかう
双方向関連付けとinverse_of レコード数が増えたときにメモリ使用量を制限できるfind_each メソッド selectとpluckの違い (つづく)
Railsの練習帳 ネタ集 ワーカープロセスの寿命と複数リクエストをまたいで残存する変数 シリアライズ、デシリアライズとGlobalID RackとRackミドルウェア RuboCop カスタムCopのつくり方 DelegatedTypeとSTI
お仕事募集 Railsの業務委託の仕事(いわゆる技術顧問)を月1〜4日程リモートで承っています 業務内容の例( 「こんなこともできる?」とご相談いただけましたら) RubyとRailsのバージョンアップ実装作業、レガシーコード改善実装 著書 パーフェクトRails や Railsの練習帳 などをつかった読書会、講義
ペアプロ屋、開発技術相談、CTO経験を活かした経営相談 入社後の研修育成体制を構築して、採用できるエンジニア範囲を増やす コードを健康診断して課題をレポート ガーネットテック373株式会社 業務内容詳細ページ、問い合わせページ こちらから気軽にご相談ください