Engineering
Reflection
AI

あの頃の、この仕事の愛し方

2026-05-22

AIがエディタの中に住み着いたとき、何が変わったのか。仕事が「自分のもの」だと感じさせてくれた、6つのゆっくりとした道のりについての短い告白。


昔は、この仕事を違う形で愛していました。AIがエディタの中に住み着いたとき、何かが変わりました。今でも何度も思い返してしまう、6つの記憶があります。

デバッグが好きだった頃

Spring Bootのアプリケーションを起動し、流れていくスタートアップログを眺め、深いところにブレークポイントを仕掛け、一行ずつコードを歩いていく。自分の書いたメソッドの中に入る。そして、自分の書いていないメソッドの中にも。さらにサードパーティのライブラリに飛び込んで、本当は何をしているのかを覗き込む。バグを見つける頃には、必要以上にシステムを理解していました。

気づいた瞬間が、一番の楽しみでした。一時間ステップ実行を繰り返したあと、ふとそれが見える。ああ、これがオフバイワンかこれが誰も無効化していなかったキャッシュかこれがコミットの早すぎたトランザクションか。自分が息を止めていたことに、そこで気づく。

今はスタックトレースを貼り付けて、答えを読むだけ。プロジェクトをローカルで動かしておく必要さえありません。パッチはきれいに収まる。でも、本来なら頭の中に出来上がっていたはずのシステムの地図が、ありません。

しつこいやつ

何日経っても消えてくれないバグ。

それを抱えたまま家に帰る。恵比寿から乗った日比谷線の中でも、ずっと考え続ける。秋葉原でドアが開いても、まだ考えている。眠ろうとしながら、もう一度コードの道筋をたどる。日曜の午後、別のことをしているとき、ふと原因かもしれないものが浮かぶ。確かめるためだけにノートパソコンを開く。プロジェクトを開く。再現コードを走らせる。同じように失敗するのを見届ける。あるいは、ようやく原因が姿を現すのを見届ける。

あの期間、バグは同居人でした。一緒に暮らしました。直ったとき、なぜ直ったのか、ちゃんと分かっていました。

そういうバグを何度も抱えていると、お客様からのチケットはタイトルを読むだけで十分になります。一行読めば、プロジェクトを開く前に、コードのどのあたりが怪しいか見当がついていました。

今はエラーとコンテキストを貼り付けます。モデルが3つの原因を提案してくれる。そのうちの一つが正解。バグは昼休みまでに消えています。

もっと静かな喜び

読みやすいコードを書くこと。

必要な行だけをDBから取ってくる。Javaのストリーム。呼び出し側が欲しい形に変換するマップ。Collectors.groupingBycollect。チェーンを左から右へと読み返して、データがその中を流れていく様子を見る。すべてのステップに名前があり、無駄なものは一つもない。改行の位置が一番きれいに見える形になるまで、3回くらいフォーマットし直しました。

Map<CustomerId, List<OrderView>> byCustomer = orderRepository .findPlacedSince(cutoff) .stream() .map(OrderView::from) .collect(Collectors.groupingBy(OrderView::customerId));

コードは一つのことだけをして、見た目もそうだった。それが大事でした。

今はモデルがチェーンを書きます。最初のバージョンでだいたい動きます。

稀な楽しみ

再帰を求めている問題。

木構造を歩く必要があると気づく瞬間。あるいは、入力の形と部分問題の形が同じだと気づく瞬間。まずベースケースを書く。それから再帰呼び出し。任意の深さに対応できる、たった3行のコード。読み返して、まだ思いついていない入力に対しても動くと分かる。半秒間だけの誇らしさが、その日の残りずっと続きました。

今はモデルが再帰を書きます。時々、頼んでいないメモ化まで付けてくれます。木は歩かれる。私は次に進みます。

もう一つの楽しみ

クエリを速くすること。

スロークエリログは、サービス開始の日から有効にしていました。それは仕事じゃなくて、本番運用の衛生管理です。楽しみは数ヶ月後にやってきます。以前は20msで返ってきた権限チェックが、joinのスケールが悪くて800msかかるようになる。負荷テストが、ボックスを溶かしている一つのクエリを浮かび上がらせる。ログがひっそりと集めてくれていたものと一緒に、午前中を過ごします。

クエリを一つ選びます。プランナーに噛みごたえのあるデータを与えるため、ローカルコピーに数十万行の代表的なデータを生成します。サブクエリを試す。CTEを試す。プランナーがずっと読み間違えるjoinに、インデックスヒントを強制する。EXPLAINを実行前と実行後で読む。2秒だったクエリが40msに落ちるのを見届ける。

半日が消えていきます。誰かに頼まれたわけではない。理由を知りたかったから。

今はクエリを貼り付けて尋ねます。モデルが3つのインデックスと書き直しを提案します。そのうちの一つが効きます。クエリは速くなる。私は次に進みます。

ゆっくりとした楽しみ

コードを一行も書く前に、何日もシステム設計に時間をかけること。

drawioに書くインフラ図。VPC、サブネット、ECSタスク、RDS。負荷が10倍になったとき、どこがボトルネックになるかを問う。ノートに書くデータベーススキーマ。アクセスパターンから割り出すインデックス。リソースのリストとして描かれるAPI面と、それぞれに付いてくるべき等性とページネーションの問い。一晩寝かせる。翌朝、半分消す。もっとシンプルな形で戻ってくる。

システムは、リポジトリに存在する前に、頭の中に存在していました。書き始める頃には、すべてのファイルが自分の役目を分かっていました。

今は欲しいものを説明します。モデルがアーキテクチャを提案してくれる。妥当に見える。私たちは始めます。

残ったもの

答えは今でもやってきます。ただ、そこへたどり着く道のりが、消えてしまいました。それと一緒に消えていったのは、本来なら頭の中に出来上がっていたはずのシステムの地図、一日続いたあの誇らしさ、私と一緒に暮らしていたバグです。私はもっと速く動きます。「考えること」を外注しています。何年もかけて積み上げてきた直感が、薄くなっていきます。脳が柔らかくなっている気がします。何かが静かになりました。どうしたらいいか、まだ分かりません。


Comments