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
Kuniaki IGARASHI
September 11, 2025
Technology
1
460
roppongirb_20250911
Roppongi.rb LT 2025年9月11日 SmartHRさんオフィス
Kuniaki IGARASHI
September 11, 2025
Tweet
Share
More Decks by Kuniaki IGARASHI
See All by Kuniaki IGARASHI
igaiga Ruby Association Activity Report 2025 LT
igaiga
1
93
KaigiOnRails2024
igaiga
11
19k
RuboSensei
igaiga
0
300
Shibuya.rb-2023-04-27-igaiga
igaiga
1
540
Ginza Rails27 igaiga
igaiga
9
13k
tork09igaiga
igaiga
2
350
Road to white mages
igaiga
1
710
Road to white mages
igaiga
8
4.1k
dive_into_code_rails_ruby_books
igaiga
0
260
Other Decks in Technology
See All in Technology
OCI Network Firewall 概要
oracle4engineer
PRO
1
7.7k
Deep Research と NotebookLM を使い倒す!レガシーリプレイスの技術選定と学習コスト削減術
tet0h
0
2.8k
AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化
spiderplus_cb
0
280
OpenAI gpt-oss ファインチューニング入門
kmotohas
0
290
Goを使ってTDDを体験しよう!
chiroruxx
1
230
Why React!?? Next.jsそしてReactを改めてイチから選ぶ
ypresto
9
3.6k
入門 FormObject / An Introduction to FormObject #kaigionrails
expajp
2
1.4k
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
230
Go Conference 2025: GoのinterfaceとGenericsの内部構造と進化 / Go type system internals
ryokotmng
3
530
組織観点からIAM Identity CenterとIAMの設計を考える
nrinetcom
PRO
1
130
動画データのポテンシャルを引き出す! Databricks と AI活用への奮闘記(現在進行形)
databricksjapan
0
120
CData MCP ナイト!「CData × Oracleで実現する新しいデータ活用 ― 国産SaaS 連携から MCP Server for Oracle Database まで」
shisyu_gaku
0
190
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Thoughts on Productivity
jonyablonski
70
4.8k
It's Worth the Effort
3n
187
28k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
The Invisible Side of Design
smashingmag
301
51k
How to Think Like a Performance Engineer
csswizardry
27
2k
KATA
mclloyd
32
14k
Balancing Empowerment & Direction
lara
4
660
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
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株式会社 業務内容詳細ページ、問い合わせページ こちらから気軽にご相談ください