Kaigi on Rails 2020
Aaron Patterson さん
2005年にRuby出会う
2008年Railsエンジニアに
2009年コアコミッターに
2011年からコアチーム9年
今年shopifyに転職。Ruby、Railsをフルタイム開発
日本語を15年間勉強している。Ruby を勉強したかったから。
趣味はプログラミング、日本語、料理、おやつの研究、猫が大好き。
Request → Webserve r→ Rack → Middleware → Router → Controller → View
Request/Response はただの文字列
Rack は普通のソフトウェアではない。インターフェース
Rackミドルウェアは、Rack とアプリケーションの間にあるもの。
ActionController::Base
Railsパフォーマンス・チューニング入門
APM ツールを導入して定期的に見る(Skylight など)
データベース
Railsワンマン運転の手引き
まず、サーバーが必要
サーバーとはサービスを提供するソフトウェア、あるいはその機能が稼働しているコンピュータのこと(wikipediaより)
Railsはレール
アプリケーションが電車
ロードバランサー(駅)にアクセスする
駅の名前が必要(ドメイン)
継承とメタプログラミング満載なアプリケーションコードでもアクションとフィルタに悩まないためのGemを作った話
TracePoint
CallbackChain Callbackインスタンスが入る配列ライクなクラス
Gem を作るために必要なこと 技術?アイディア?
Rails のコードリーティング
技術があるからGemを作る?反対
必要は発明の母
世の中には無数のお手本コードがある
とにかく書く。あとからきれいにする
現場の今ある課題をきちんとオープンなコードで解決する
ライブラリのコードを読む機会が増える
よいパターンが自分の中に蓄積されていく
自分が一番のユーザーである道具(Gem)
作るのは楽しい
技術力はあとからついてくる
課題は身近にある
Rails 歴数ヶ月
実態に即した命名をする
読み手に与える情報を増やす
blank?、empty?、nil?の使い分け
クエリが発行されるメソッドを知っておく
不安定テスト・スローテスト
sleepより Capybara のfindを使う
コミットへの意識
コミットメッセージには変更理由を書く
Why以外は GitHub を見ればわかるから
作業内容をそのまま残す or squash して1つにする?
独立した変更単位になるよう squash しておくのがよさそう
新ミドルウェアActionDispatch::HostAuthorizationと学ぶDNSのしくみ
DNS ドメインネームシステム
DNSリバインディング
DNSの仕様を悪用した攻撃
ホスト名は変えず、IPアドレスを詐称される攻撃
新しいRack ミドルウェア、ActionDispatch::HostAuthorization
ホストネームが許可リストに登録されたドメイン名以外のアクセスは不正なアクセスとみなす
DNS は「浸透」するものではない
TDD with git. Long live engineering.
個人のコミットは作業の区切りでコミットする
pushするとチームのコードになる
あとから変更理由を追跡しやすい単位でまとめておく
fixup VS squash
作業手順ではなく、変更理由の単位でコミットできる
Coming Soon...(基調講演)
OSS やりたい
「パッチを書く」以外にやることはない
Rails歴13年
rfb?
kaminari
jb/hundler.rb
heavens_door