概要
Ruby on Railsのコードリーディング作業を記録する。
準備
rails new RailsCodeReadingで新規プロジェクトを作成する。- Gemfileに以下を追加
bundle config set path '.bundle'を実行してから、bundle installを実行する。rails generate controller Example- コントローラーにindexメソッドを実装
- ルーティングを設定
コードリーディング
Railsがリクエストを処理する流れを追う。
http://127.0.0.1:3000/exampleにアクセスして、コンソールでpry-backtraceをすると、スタックトレースを見ることができる。
大量に出力されるため、すべてを追いきれないので端折ってみていく。
- pumaがリクエストを受け付けて、Railsアプリケーションを呼び出す
- puma/puma - lib/puma/request.rb#L99
- railties/lib/rails/engine.rb#L536
- Rack APIの定義
- rack/rack - lib/rack/sendfile.rb#L113
- Rackアプリケーションが実行される
- リクエストの情報を元に、ルーティングを解決する
- rails/rails - actionpack/lib/action_dispatch/journey/router.rb#L126
- rails/rails - actionpack/lib/action_dispatch/routing/route_set.rb#L66
- ルーティングでマッチしたcontrollerの処理を呼び出す
- コントローラーのindexを呼び出す
想像していたよりも複雑で、Rubyに慣れていないのもあり、雰囲気程度しか読み切れなかった。。。