🗂
OSSのコードを読むと自分のレベル感が見えてくる話
最近、PHPStanの Issue #13358 に取り組み始めました。
(内容は @phpstan-assert-if-true
の型推論に関するもの)
コードを追っている中で、ふと「そもそも自分には何の知識が必要なんだろう?」と考えさせられました。
今の自分のレベル感が見えた
コードを読んでいると「理解できるところ」と「いきなりわからなくなるところ」の差がはっきり出ます。
たとえば
-
NameScope
やTypeNodeResolver
は「こういう情報を持ってるんだな」と分かる - でも
AST
(抽象構文木)やパーサーのあたりは、全然馴染みがなくて止まってしまう
読める部分と読めない部分が混在していて、自分の現在地がよく見えました。
何が必要なのか?と思った
「これってちゃんと理解するには何が必要なんだ?」と考えながら見ていました。
具体的には
- 正規表現の基礎(DocComment解析などに普通に出てくる)
- AST(抽象構文木)の仕組み(ソースコードをどう分解して扱うのか)
- 言語処理系の流れ(字句解析 → 構文解析 → 型解決 → 絞り込み)
こういう基礎があればもっと楽に追えそうだと感じました。
プログラミングの基礎力を問われる
結局、OSSの内部で出てくるのは「ライブラリ固有の小技」よりも
- 配列の走査
- マッチングの仕組み
- スコープ情報の保持の仕方
といったプログラミングの地力が多いです。
ここで「あ、基礎をまだまだ鍛える必要があるな」と実感しました。
読み方の工夫
現状は試行錯誤ですが、やっているのはこんな方法です。
- クラスの「持ち物リスト」をざっと見る
-
var_dump()
を差し込んで実際の挙動を確認する -
rg
やgrep
で呼び出し元を一気に洗い出す
全部読むのではなく、「どう使われているか」を先に掴むのが大事だと感じています。
まとめ
- Issueを追う中で「自分に足りてない基礎」が浮き彫りになった
- 正規表現やAST、言語処理系の流れなどはまだ理解が浅い
- 読めないのは悪いことではなく「次に勉強すべきポイントが見えた」という意味で収穫があった
今後について
コードリーディングの難易度が高かったので、いったん気分を切り替えて、もう少し規模の小さいOSSに取り組んでみようと思います。
基礎を強化しながら、また改めて挑戦するつもりです。
Discussion