作りたいものがないエンジニアは「作りたくなるものが生まれるその日までインプットを続ける」ことで人生が好転するかもしれないと気付いた話
あなたはアウトプットできる人ですか?
「積極的にアウトプットしてるよ!」という方、おめでとうございます。
そのまま突き進んで頂ければと思います。
私はアウトプットが下手くそなので純粋に尊敬します。
スキルアップしたい、アウトプットしなきゃ!と思う一方、
何も作ることが出来ずに焦ってました。
とにかく何か作らないといけない、そうしないと
スキルアップできない。
しかしそう思い続けて5年以上も経つとだんだん自覚してきます。
私はあんまり作ることに積極的になれないエンジニアなのかもしれない。
そのせいか技術トピックをアウトプットすることを躊躇してました。
今でもそうです。あまり積極的に技術トピックを追いかけられていません。
私はエンジニアに向いてないんじゃないか?
ずっとコンプレックスでした。
しかし技術トピックでLTした事をきっかけに分かったことがあります。
今回はそんな話です。
結論
無理してまで何かを作る必要はない。
興味のあることをインプットし続けることがアウトプットにつながる。
そんなタイプの人もいる。
無理してまで何かを作る必要はない
きっかけはgemをなんとなく読み続けていたことです。
会社でRubyを使ってたのでRubyのスキルを高めようとしました。
Ruby Goldを取得してそこそこRubyが読めるようになってきた頃、
次のステップとしてOSS活動をしてみたいと思うようになりました。
そこでgemを作ろうと思いましたが何を作るかアイデアもないため、
「まずは読もう!」となりました。
最初に読んだのはsentry-ruby-apiです。軽量で読みやすかったです。
未熟ながらプルリクエストを出したりしました。
「さて、次は?」と思ったとき、
仕事に関係ある領域を調べてみようと思いました。
ちょうど仕事で認証/認可の領域に携わっていて、
OAuthやOIDCに触れてたからですね。
Auth屋さんの本を読んで知識を吸収し、
自身でOIDC認証を作りました。
このときお世話になったgemがomniauth_openid_connectです。
興味のあることをインプットし続けることがアウトプットにつながる
仕事がひと段落した時にふと思いました。実装はどうなってるんだろう?
「中身をよく知らないまま雰囲気で実装はできたが、そんなのなんだか気持ちが悪い。どうせなら納得のいくまで仕組みを調べたい」
そんな欲求が今回の登壇につながりました。
LTのテーマは「omniauthはどうやってCSRFを検知しているのか」にしました。Auth屋さんの本で勉強したときにstateという仕組みが紹介されていたんですが、本に「stateはsessionをDBに保存している」って書かれてたんです。「じゃあ、そのDBってのはどこに存在するんだ?」と引っかかってたんですね。それを調べようと。
調べた結果がこの資料です↓
この資料を作るまでに壁がいくつかありました。
omniauthに定義されてるcallというメソッドがどこから呼び出されるか分からない
callの引数であるenvが何かわからない
env['rack.session']がセッション管理をしているらしいがどこで定義されるかわからない
そもそもセッションがわからない
omniauthのstrategyを読み込むときのuseキーワードの意味が分からない
omniauthのコード読むだけだと不明点が多すぎました。
Rackについて概念から調べました。
rack gemをinstallして実際にコードを書き、動かしながら何とか
Rack Middlewareの仕組みを理解しました。
しかし今度はstateがどこで実装されてるのかわからない。
さてどこだ。
最初は↓だと思ったんですがどうもそんな感じではなさそうでした。
↓も読んだのですが今回調べたい事とは微妙に違う感じでした。
最終的にはomniauth_openid_connectのテストコードを読んでstateの実装場所がわかったんですが、時間が掛かり過ぎました。
私は物覚えも勘も良くないんだなぁ。。
それはともかく、調査を続けるうちにだんだんomniauthが読めるように
なってきました。Rack Middlewareの理解とセッションの理解が進むと
一気にわかるようになったと思います。
不思議なもので、目的がはっきりするとソースコードを読むスピードが上がり、理解の解像度が上がりました。漫然と読むのではなく目的をもってコードを読むと理解度がグッと違ってくるんだと気づきました。
作りたくなるものが生まれるその日までインプットを続ける
必ずしも何かを作らなきゃいけないわけじゃないと学びました。
興味のきっかけは人それぞれです。
作りたいものがある人は作っていいし、
仕組みに興味がある人は調べればいい。
私は「中身を調べる」ことに興味が湧くタイプなんだと分かりました。
CSRFを調査するなかで追加で知りたいことが幾つか見つかりました。
なぜomniauthで許可されてるHTTPメソッドはPOSTだけなのか
omniauthはどのようにルーティングを解釈しているのか
RailsのCSRF対策とomniauthのCSRF対策はどのように異なるのか
gemを作るかどうかは分かりませんが、実装の仕組みを知るのは
楽しいのでおそらく続けると思います。仕組みを知るのが楽しい
とは思わなかったので良い収獲でした。
おわりに
作りたいものがなくて焦っている!というエンジニアは意外と多いと思います。そんな人の参考になれば幸いです。
スイッチの入るタイミングは人それぞれです。
やりたいことをマイペースでやればいいんじゃないでしょうか。