コンテキストについて考えていた
5 min read

NOTE: 公開が遅れてしまい、投稿日は5月末だが公開は6月半ばでコンテキストの圧縮が語られる前の話題なので注意
AI駆動でコードを書くようになってから、「コンテキスト」という言葉を以前よりずっと意識するようになった。
Claude CodeのSonnetを使っていると、しばらくコードを書いたあと自動でcompactが走る。
そのため以前はTODOファイルを用意して、Claude側のcompactとは別に擬似的なcompactをしていた。いま何をしていて、次に何をするのかを書き残しておく。そうすると、圧縮によって文脈が抜けたあとでも比較的スムーズに続きを書ける。
ところがOpusに切り替えてから少し感覚が変わった。
1Mコンテキストあるのでかなり余裕がある。特にゼロから実装を始めると、途中で大きくcompactを意識することがほとんどない。
おそらく内部では何らかの整理が行われているのだろうけれど、Sonnetのような「残り数%なのでcompactします」という表示をあまり見なくなった。
ただ、その調子で同じセッションを長く使い続けていると別の問題も出てくる。
あるとき急に使用量が跳ね上がり、週次制限に引っかかりそうになった。
正直、Maxで普通に使っていてレート制限が気になるとは思っていなかった。けれど同じ文脈を長く引きずりながら使うのは、それはそれでコストが高いらしい。
なので最近は実装が大きくなってくると定期的に /context を確認している。
というより、直接Opusに「いまどこまで把握してる?」と聞いてしまうことも多い。
そこで改めて思う。
モデルの性能が上がっても、彼らは入力に対して結果を返す関数であることに変わりはない。
こちらが何を渡すかで出力が決まる。
当然のことなのだけれど、それを実装のたびに実感する。
最近はRails以外でもずっとコードを書いているのだけれど、彼らには常に「目的に対して最短で到達する」という強い癖があるように思う。
だからときどき自分の作りたいものと少しずれることもある。
けれどその一貫性はやはり人間よりずっと強い。
雑談もしてくれるし相談にも乗ってくれる。
それでも彼らの本質は、やはり「実装すること」にある気がしている。
AIがペットの犬に似ていると思うことがある。
玄関に近づくと散歩の時間かと思ってそわそわしたり、おもちゃをくわえて寄ってきたりするあの感じに少し近い。
以前、AIは相棒だという話を書いたことがあった。
でも最近は少し考えが変わってきた。
相棒というより、そのとき与えられたコンテキストによって振る舞い方が変わる存在なのかもしれない。
それで結局、コンテキストとは何なのだろうと考えるようになった。
そしてこれはAIだけの話ではなく、人間にも同じものがある気がしている。
AIツールが登場する前、コードを書くときは当然すべて自分で書いていた。
言語やフレームワークが何であれ、自分で書き始めるとそのプロジェクトへの理解が少しずつ積み上がっていく。
あのファイルには何が書いてあるのか。
ここを変更すると何が壊れるのか。
この設計はなぜこうなっているのか。
そういう情報が頭の中に徐々に蓄積されていく。
たぶん、あれも一種のコンテキストなのだと思う。
だから他人のプロジェクトを読むのは大変だし、しばらく離れていたコードベースに戻るのも妙にエネルギーがいる。
人間の中にもAIと同じように有限の作業記憶がある。
RAMのような揮発性の記憶領域と言ってもいいかもしれない。
かなり有機的ではあるけれど、AIを見ていると、むしろ彼らのほうがこちらを模して作られているのだと感じることがある。
最近よく、コードを丸ごとAIに任せるような話題を見る。
それ自体は悪いことではないし、自分もかなり助けられている。
ただ、少し気になることもある。
AIに実装を丸ごと渡し続けると、そのコードベースについて詳しくなるのはAIのほうかもしれない。
一方で、使っている人間の側にはコンテキストが積み上がっていかない。
もちろんコードは動く。
けれど何かが壊れたときや、あとから自分で読み返すとき、その認知負荷は非常に高くなる。
レビューやPull Requestも同じだ。
AIがレビューできることと、人間が理解していることは少し違う。
最近「AIにプログラマーの仕事が奪われる」という話をよく見るけれど、あの感覚の正体も案外そこにあるのかもしれない。
コードを書く行為そのものが奪われるというより、そのコードに対するコンテキストを持つ機会が減っていく。
もしそうだとすると、失っているのは実装の手間ではなく理解するための時間なのかもしれない。
だからどれだけAIが賢くなっても、人間の側も一緒に文脈を深めながらコードを書く必要がある。
少し遠回りでも、自分で考えたり、読み返したり、ときどき手を動かしたりする。
その積み重ねがないと、便利になるほど逆にコードが書けなくなる。
最近はそんなことをよく考えている。
結局のところ、自分がプログラミングを面白いと思う理由もここにある気がしている。
プログラミングそのものというより、コンテキストを構築していくことが面白い。
イラストや音楽とも少し違う。
技術が上達するというより、世界への理解が深くなっていく感覚に近い。
if文やfor文はただの文字列にすぎない。
けれど、それらを積み上げていくと、普段自分たちが触れているOSやブラウザ、アプリケーションの構造が少しずつ見えてくる。
矩形と文字を並べて、最終的にウェブアプリケーションになる。
その過程を自分の手で理解していく。
その感覚がたまらなく好きなのだと思う。
正直、プログラミングが楽しすぎて他の趣味がなかなか見つからない。
でも考えてみると、そこに必要なのは特別な技能だけではないのかもしれない。
ただ、その対象を理解していること。
理解が深まると自然と作れるようになる。
たぶん自分にとってプログラミングは、そういう営みなのだと思う。