11 Apr 2021

Rails on GKE なプロジェクトにキャッチアップするためにやったこと

gke 上で rails アプリケーションを動かしているプロジェクトに、新たに参加することになった際に読んだ本などのまとめ。

はじめる前の知識

いわゆる Web サービスの開発運用経験はあるが、Ruby, Rails, k8s を仕事で使うのは初めて。GCP も BigQuery とそれに連動する gcs, stackdriver を多少業務で使ったことがあったが、それ以外は初めて。

前提としてこの記事は、こういう経験値の視点からとなっている。

入門書を多読するアプローチ

今回はこの記事で紹介されているアプローチを試してみた。

効率的に新しいことを学ぶ方法 – 栗林健太郎

  1. 新しく学びたい領域について、入門書を5冊〜10冊ほど買う(技術書なら1万〜2万ぐらいか)
  2. ひとつひとつを精読するのではなく、ただ文字を追うぐらいの感じでわからないところは読み流しつつ、読み切る
  3. 1冊1時間と時間を決めて、必ず時間を守る 本を読んでいる時にコードを書いたりコマンドを実行したりなど、試したりすることはしない。ただ読むだけ
  4. それを、買った冊数分(5冊〜10冊)くりかえす。そうすれば5時間〜10時間、すなわち1日で学習できる
  5. 上記により、その領域の入門的な全体像は頭の中に入るので、あとは簡単なタスクについて手を動かしながら、公式ドキュメントなどを読みながら自分で進める

今回の自分の状況はこれらにまさに当てはまる。最速でこのプロジェクトの固有の知識(製品のドメイン知識だったり、コードベースの特有の運用方法だったり)を身につけられる状態になりたかった。ただ、Ruby / Rails にしても k8s にしても、知っていれば効率的だけど初見では読み解きづらい構文や、そもそも各リソースのざっくりとした意味や概念などは、最初に理解しておかないとさすがに非効率。そのため最初に一気に基礎知識をインプットしてしまうのは良いアプローチに思えた。

感想

全体としてはよかった。たぶん理想的には入門書5冊を急いで読むのと、同じ時間で良書を1冊じっくり読むのとはそれほど変わらないと思う。ただ実際には “わからないところは飛ばす” “手は動かさない” “とにかくざっと読み通す” という方針のおかげで、妙に引っかかって時間を使うことがなかったのが とても良かった。yak shaving に時間を取られすぎずに、本来やるべきこと素早く行ける気がした。

ただ、1冊1時間では全然読めなかった。その速度で文を眺めても頭に一切残らないので、それぞれ数時間かけて読むことになった。他の本で出たトピックの繰り返しや、現在では明らかに古くなっている部分は意識的に飛ばしたが、それでも1時間には及ばない。たぶんこのアプローチには、初見だと良書と悪書の区別がつかないリスクを分散する利点もあると思う。それでもある程度冊数を絞った方が自分には向いていたかもしれない。

実際に読んだ本やドキュメント

Ruby と Rails

過去に購入して積読になっていた。古いのでどうかなと思ったけど、今回読んだものの中で一番良かった。ニーズに一番フィットしていた。

他言語経験者に向けの解説で、必要十分・簡潔に説明されていて素晴らしかった。発行からだいぶ時間が経っていることが今の自分では評価しづらいが、その点を無視すればお薦めできる本だと思う。

Go のときは Tour of go をざっと眺めると、とりあえずコードを何となく読めるようになって、良い体験だった。これと近い。

Ruby on Rails チュートリアル:プロダクト開発の0→1を学ぼう

次に Rails チュートリアルを読んだ。初めての Ruby とはうってかわって、プログラミング自体が初めての人をターゲットにしているようで、git の使い方なども説明されていた。自分には冗長だった(このチュートリアルが悪いわけでは無い)

Rails の規約を知りたかったので、それとは無関係なところと、ビューとフロントまわりは全部飛ばして読んだ。

初めての Ruby に比べもっと初心者向けに書かれているようで、Ruby に限らないソフトウェア開発一般の概念も丁寧に説明している印象。説明が丁寧でわかりやすくて感心した。初心者の人にも、そうで無い人にも最初の一冊としておすすめしやすい。初めての Ruby との差分を意識しながら読んだ。

パーフェクトRuby on Rails
すがわらまさのり (著), 前島真一 (著), 近藤宇智朗 (著), & 1 その他 形式: Kindle版

改訂版が 2020 年に出ているので、今はそちらを読んだ方が良い。流し読み目的だったのと初版が手に入りやすいところにあったので今回はとりあえずこちらにした。Rails チュートリアルとの差分と今は古くなっていそうな部分を意識しつつ飛ばせるところは飛ばした。

改訂2版 パーフェクトRuby
Rubyサポーターズ (著) 形式: Kindle版

構文は前2冊でOKということにして、それ以外のところに目を通すようにした。ざっくりどういう標準ライブラリがあるのかなどが俯瞰できた気がする。メタプログラミングのトピックも全部飛ばして、必要になってからかえってくることにした。

k8s と GCP

概念部分の説明に振り切っているので、今回の自分のニーズにかなり合っていた。タイトルの通り図解が多く、実際の yaml を読み始めてこれなんだっけとなった際に、さっと読み返せて便利だった。短いので流し読みを意識しないでもすぐに読めるし、最初の一冊としておすすめできると思う。

Kubernetes ドキュメントの Concepts の章

ドキュメントのコンセプトの部分だけをざっと目を通した。イラストでわかるDockerとKubernetes の補完としてのイメージ。細かいところは深入りせず、そういうトピックがあるんだなということだけ覚えておく感じで読み進めた。

Learn Kubernetes Basics | Kubernetes

こちらは手を動かしながらやってみた。ブラウザで動作するインタラクティブな環境でハンズオン的なことができ、そこにも感心した。

こちらは通読していない。わからないことのリファレンス的に読んでいる。

GCPの教科書
吉積礼敏 (著) 形式: Kindle版
GCPの教科書II 【コンテナ開発編】
クラウドエース株式会社 (著), 飯島宏太 (著), 高木亮太郎 (著), & 2 その他 形式: Kindle版

こちらは初心者向け系。とりあえずどういうキーワードが出てくるのかざっと見るくらいにはなったと思う。

プロジェクト固有の知識

ここまでは一般的な知識で、ここからはプロジェクト固有の知識。例えばマーケットや製品のドメイン知識や、そのシステムやチームの現状や運用方針など。むしろここからが本番だと思う。

実業務をやりながら、コードの読み書き、データの試行錯誤、issue のフィードを追いながらドキュメントを読んでいくなど、基本的にはじっくりやらないといけない部分だと思う。

そんな中で、今のプロジェクトで素敵だなと思ったのは、ログが充実している点。アプリケーションログからインフラ、アプリの計測ツール経由のイベント、RDBMS の中身などなどが全て BigQuery に保存されている。例えばアプリケーションログは構造化して入っているので、非常にクエリしやすい。一箇所に集まることで、他のソースのデータとも Join できるのも良い。これがシステムの動きをキャッチアップするにあたって、とても助けになっている。

リーダーが最初にこれらのログを活用するようなタスクを振ってくれた。レビューでも丁寧にデータの位置や実際に使っているクエリを提示してくれて、お陰で最初のうちにログの見方を身につけることができたと思う。これがキャッチアップの効率にかなり効いている感覚があり、とてもありがたかった。