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
Sidekiq その前に:Webアプリケーションにおける非同期ジョブ設計原則
morihirok
17
6.2k
WebアプリケーションのUI構築で気を付けてるポイント
tomokusaba
0
160
AWSのProductのLifecycleについて
stknohg
PRO
0
290
C# 14 / .NET 10 の新機能 (RC 1 時点)
nenonaninu
1
1.2k
SoccerNet GSRの紹介と技術応用:選手視点映像を提供するサッカー作戦盤ツール
mixi_engineers
PRO
1
100
Oracle Cloud Infrastructure:2025年9月度サービス・アップデート
oracle4engineer
PRO
0
310
API提供者のためのMCPサーバー設計ガイド / MCP Server Design Guide for API Providers
yokawasa
0
230
Tomorrow graphlib, Let us use everybody
hayaosuzuki
0
140
DataOpsNight#8_Terragruntを用いたスケーラブルなSnowflakeインフラ管理
roki18d
1
280
バイブコーディングと継続的デプロイメント
nwiizo
2
350
20250929_QaaS_vol20
mura_shin
0
110
【新卒研修資料】LLM・生成AI研修 / Large Language Model・Generative AI
brainpadpr
21
13k
Featured
See All Featured
Embracing the Ebb and Flow
colly
88
4.8k
Rails Girls Zürich Keynote
gr2m
95
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
A better future with KSS
kneath
239
17k
Bash Introduction
62gerente
615
210k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Fireside Chat
paigeccino
40
3.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
32
2.2k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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株式会社 業務内容詳細ページ、問い合わせページ こちらから気軽にご相談ください