🗂

OSSのコードを読むと自分のレベル感が見えてくる話

に公開

最近、PHPStanの Issue #13358 に取り組み始めました。
(内容は @phpstan-assert-if-true の型推論に関するもの)

コードを追っている中で、ふと「そもそも自分には何の知識が必要なんだろう?」と考えさせられました。

今の自分のレベル感が見えた

コードを読んでいると「理解できるところ」と「いきなりわからなくなるところ」の差がはっきり出ます。
たとえば

  • NameScopeTypeNodeResolver は「こういう情報を持ってるんだな」と分かる
  • でも AST(抽象構文木)やパーサーのあたりは、全然馴染みがなくて止まってしまう

読める部分と読めない部分が混在していて、自分の現在地がよく見えました。

何が必要なのか?と思った

「これってちゃんと理解するには何が必要なんだ?」と考えながら見ていました。
具体的には

  • 正規表現の基礎(DocComment解析などに普通に出てくる)
  • AST(抽象構文木)の仕組み(ソースコードをどう分解して扱うのか)
  • 言語処理系の流れ(字句解析 → 構文解析 → 型解決 → 絞り込み)

こういう基礎があればもっと楽に追えそうだと感じました。

プログラミングの基礎力を問われる

結局、OSSの内部で出てくるのは「ライブラリ固有の小技」よりも

  • 配列の走査
  • マッチングの仕組み
  • スコープ情報の保持の仕方

といったプログラミングの地力が多いです。
ここで「あ、基礎をまだまだ鍛える必要があるな」と実感しました。

読み方の工夫

現状は試行錯誤ですが、やっているのはこんな方法です。

  • クラスの「持ち物リスト」をざっと見る
  • var_dump() を差し込んで実際の挙動を確認する
  • rggrep で呼び出し元を一気に洗い出す

全部読むのではなく、「どう使われているか」を先に掴むのが大事だと感じています。

まとめ

  • Issueを追う中で「自分に足りてない基礎」が浮き彫りになった
  • 正規表現やAST、言語処理系の流れなどはまだ理解が浅い
  • 読めないのは悪いことではなく「次に勉強すべきポイントが見えた」という意味で収穫があった

今後について

コードリーディングの難易度が高かったので、いったん気分を切り替えて、もう少し規模の小さいOSSに取り組んでみようと思います。
基礎を強化しながら、また改めて挑戦するつもりです。

Discussion