免責事項
本書のタイトルにある「完全に理解した」とは、ActiveRecordを完全に理解することではなく、あくまで社会通念上相当のActiveRecord「完全に理解した」であり、本書はActiveRecordを完全に理解することを何ら保証するものではありません。
技術書典7
ドワンゴを退職してSmartHRで働き始めそろそろ一ヶ月のkinoppydです。技術書典に出ます。場所は「◎貴サークル「トレイリア学園」は、 か01C に配置されました。」です。ブックマークはここからどうぞ。今回は、ActiveRecordのソースコードリーディングの本を出そうと思います。500円です。前回はメタプログラミングRubyの解説本でしたが、それを書いている過程で「そろそろActiveRecordのソースとか、俺でも読めたりするんじゃないかな……」という気持ちになったので書いてみました。
そんな思いつきから、ひたすらActiveRecordのソースを読んでみた結果を、簡単にまとめて本にしてみました。
内容としては、ActiveRecordで最もよく使われている(であろう)機能のestablish_connection, find, where あたりのメソッドがどうやって動いているのかを、実際にソースコードを追いながら見ていく本です。実は7月の頭あたりからこの本の構想を考え、がんばってActiveRecordのソースコードめっちゃくちゃ読んだんですが、いかんせん相手は巨大すぎて、全てを読むことはできませんでした。そのため、一応自信を持って解説できるであろう範囲に狭めて深堀りしていく内容の本となっています。
そのため、AssociationやMigrationやSTIの内容などは全く出てきません。というより、それらのソースコードをまだ読めていないので、多分次の技術書典では「ActiveRecordなにもわからない」という本を出すと思います。
この本を読むためには
この本を読むためには、メタプログラミングRubyを通して読んだことがある程度の知識が必要である前提になっています。
そのため少し敷居が高いかもしれませんが、この本はRubyを書く上で必読の本のひとつなので、いい機会なので読んでみましょう。なんなら前回の技術書典で頒布した「Real World Metaprogramming Ruby」も一緒に頒布するので、ご一緒にどうぞ。
幾つかのトピック
今回の本は、電子書籍版のみの頒布です。物理版を作るにはちょっと締切の関係で間に合いませんでした。
また、この本が対象にしているActiveRecordのコードは、5.2.3です。原稿を書き始めてしばらくしたら、6出ちゃったんですよね。どうしようかと思ったけど、書き直してる時間なさそうなので5系にしました。
本を書いた感想
ActiveRecordのソースって、想像していたより全然きれいだな、というのが素直な感想です。その前に読んでいたのがSinatraだったから、余計にそう感じるのかもしれません。さすがにもう十数年メンテされている第一線のコードは、様々な人の目に触れているだけあって圧巻でした。そしてそれ以上にすごいなと思ったのが、RDocの充実っぷりです。ActiveRecordとActievRecord::BaseのRDoc読むだけで、もう大体ActiveRecord完全に理解できるんじゃないかという気持ちすらありました。すごい。
執筆環境
前回とあまり変わらず、まず草稿をesa.io上でMarkdownで書き、その後清書と校正をRe:VIEW形式でAtomとAtom用のRe:VIEWプラグインを使って書きました。ファイルの管理はGitHubでやっており、CIは特にありません(書いてるの一人なんで、手元で都度回せば困らない)。本当にほとんど何も変わっていないので、前回の記事を参照してください。
唯一前回と変わった点は、Re:VIEW Starterを使った点です(参考:技術系同人誌を書く人の味方「Re:VIEW Starter」の紹介 - Qiita)。そもそもRe:VIEWをそのまま使った出力にあまり満足していなかったというのはありますが、色々カスタムするにはTeXの知識なさすぎて詰み太郎だったため、色々いい感じにカスタムしてくれそうなこれを選びました。
大きな誤算が2つほどあり、1つ目は良い意味の誤算で、Re:VIEW Starterを使うことで前回の執筆時に悩んでいた「長いソースコードをどうやって行番号付きで折り返すか」問題が勝手に解決してくれたことです。素晴らしい。
2つ目は悪い意味の誤算で、Atomが何故か勝手に改行コードをCRLFにしてくれちゃったせいで、それに気づかずしばらくビルドが通らなくて締め切り直前に泣いていました。
> > Atomが何故か勝手にCRLFで改行したファイルを保存してくれたおかげで、Re:VIEWのビルドに使うコンテナ変えたら盛大に死んでくれて、気づくまで20分くらいかかったわ!!!!!!!!!!!!!!!!!!!!!!!!!!11111 > > — kinoppyd (@GhostBrain) [September 20, 2019](https://twitter.com/GhostBrain/status/1175103910500945920?ref_src=twsrc%5Etfw)
近況報告
私は元気ですが、毎日ちゃんと期待されたパフォーマンス出せてるか不安になります。これは転職直後にはよくあることだと思うので、そのうち慣れます。
夜型の生活時間はやや改善されつつありますが、最近は原稿やるために朝四時に寝て朝八時に起きて会社行くとかいうよくわからないことやっています。まあでも、飲酒量がものすごく減りました。技術書典が終わったら、完全に人間の生活リズムを取り戻せる予感があります。
また、今回は時期の関係で寄稿できませんでしたが、SmartHRのエンジニアたちも技術書典で本を出すようです。
こちらもぜひよろしく。
追記
技術書典の日程が、ぱんっあふぉー23と完全に被ってて若干やる気がありません。ぱんっあ行きたかった。