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
560
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
ActiveJobUpdates
igaiga
1
340
igaiga Ruby Association Activity Report 2025 LT
igaiga
1
110
KaigiOnRails2024
igaiga
16
22k
RuboSensei
igaiga
0
320
Shibuya.rb-2023-04-27-igaiga
igaiga
1
550
Ginza Rails27 igaiga
igaiga
9
14k
tork09igaiga
igaiga
2
370
Road to white mages
igaiga
1
740
Road to white mages
igaiga
8
4.2k
Other Decks in Technology
See All in Technology
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
130
コールドスタンバイ構成でCDは可能か
hiramax
0
130
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
760
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.6k
Eight Engineering Unit 紹介資料
sansan33
PRO
0
6.2k
たかがボタン、されどボタン ~button要素から深ぼるボタンUIの定義について~ / BuriKaigi 2026
yamanoku
1
180
Introduction to Bill One Development Engineer
sansan33
PRO
0
340
I tried making a solo advent calendar!
zzzzico
0
150
複雑さを受け入れるか、拒むか? - 事業成長とともに育ったモノリスを前に私が考えたこと #RSGT2026
murabayashi
1
1.6k
AI に「学ばせ、調べさせ、作らせる」。Auth0 開発を加速させる7つの実践的アプローチ
scova0731
0
170
【Agentforce Hackathon Tokyo 2025 発表資料】みらいシフト:あなた働き方を、みらいへシフト。
kuratani
0
110
モノタロウ x クリエーションラインで実現する チームトポロジーにおける プラットフォームチーム・ ストリームアラインドチームの 効果的なコラボレーション
creationline
0
640
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
0
2.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Design in an AI World
tapps
0
120
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
120
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
0
420
Marketing to machines
jonoalderson
1
4.5k
Tell your own story through comics
letsgokoyo
0
780
How STYLIGHT went responsive
nonsquared
100
6k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
790
What does AI have to do with Human Rights?
axbom
PRO
0
1.9k
Visualization
eitanlees
150
16k
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株式会社 業務内容詳細ページ、問い合わせページ こちらから気軽にご相談ください