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
770
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
120
ActiveJobUpdates
igaiga
1
690
igaiga Ruby Association Activity Report 2025 LT
igaiga
1
160
KaigiOnRails2024
igaiga
16
25k
RuboSensei
igaiga
0
370
Shibuya.rb-2023-04-27-igaiga
igaiga
1
610
Ginza Rails27 igaiga
igaiga
9
14k
tork09igaiga
igaiga
2
430
Road to white mages
igaiga
1
810
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
20260801_スクフェス大阪
kgnkhkr
2
1.2k
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
140
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
750
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
110
システム思考で問題に対処する
yussak
0
160
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
6
1k
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
260
Pavlokで始める電撃駆動開発
sgrsn
0
170
事業価値と Engineering 2026年度版
recruitengineers
PRO
41
21k
ブラウザ研修 2026
recruitengineers
PRO
4
650
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
330
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Discover your Explorer Soul
emna__ayadi
2
1.2k
Crafting Experiences
bethany
1
240
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
830
New Earth Scene 8
popppiees
3
2.5k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
230
Product Roadmaps are Hard
iamctodd
55
12k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
630
Technical Leadership for Architectural Decision Making
baasie
3
470
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
720
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株式会社 業務内容詳細ページ、問い合わせページ こちらから気軽にご相談ください