最初に思ったのは、「速くするための定石が、そのまま正解とは限らないんだな」ということだった。--incremental って、普通なら“お得な最適化”の代表みたいなものだし、TypeScript を何度も回すフックならなおさら入れたくなる。なのに、実際には逆に重くなる。ここがいちばん面白かった。
たぶんこの話の肝は、TypeScript の性能そのものより、フックという仕組みとの相性だと思う。人間が自分で tsc を叩くなら、少し遅くても我慢できる。でもフックは、編集のたびに裏で勝手に走る。そこで 30 秒、60 秒止まると、「ちょっと遅い」では済まない。作業の流れそのものが切れる。自動化は便利だけど、待たされる自動化はただの妨げになる、という当たり前の話が、かなり生々しく出ていた。
もうひとつ引っかかって、でも納得もしたのが、200KB というしきい値の置き方だ。こういうのは「経験的にこの辺」と曖昧に済ませがちだけど、記事では .tsbuildinfo のサイズを見て切り替えていた。サイズとプロジェクト規模がだいたい連動するから、乱暴に見えて理にかなっている。しかも、魔法の数字として置いているわけではなく、遅くなり始めた地点に合わせている。こういう“現場の都合で決めた境界”は、きれいなアルゴリズムより信用できることがあると思う。
それと、exit 0 を多用している設計も地味に好きだった。エラーが出ても失敗扱いで止めるのではなく、エージェントに情報だけ渡す。人間向けの CI なら「失敗したら止める」が自然だけど、Claude Code みたいな自動実行の文脈では、止めるより次の修正に使えるほうが大事なんだろう。ここは単なる shell script の話に見えて、実際は「ツールをどう人に代わって考えさせるか」の設計に近い。ちょっとした運用の工夫で、道具の性格が変わるのが分かって面白かった。
参考: --incremental Made My TypeScript Hook 3.6x Slower. A 200KB Threshold Fixed It