2年前に、こんな仕事をしていた。↓
今、また同じことをしている。redmineのチケット消化ゲーム。当時に比べれば、立場も環境も大きく変わっているが、こうした仕組みを自分が作って自分自身がこのゲームを楽しむという点では、当時と全く同じ。具体的にいえば、ダッシュボードを作って、チームの状況と能力を可視化し、日々迫りくる敵をやっつけるという営みだ。
当時は、AWS上のpythonからサーバサイドでAPIを実行していたが、今は少し手を抜いてブックマークレットのjavascriptだけでやっている。チャートの描画ロジックはCDN化し、ブックマークレットはメイン関数だけを呼ぶような感じ。
当時と少し変わったのは、プログラムの8割程度はLLMに作らせていること。新しい機能を作るとき、15分くらいかけて丁寧にプロンプトを作って、出力されたものをペタッと貼り付けてテストをして、細部の調整は再指示するか直接直すかで都度判断をしている。今でももちろん自分ですべて作れるし本当は作りたい気持ちもあるが、そこをぐっとこらえてLLMと協働するようになって、品質も生産性もあがった。
LLMが生み出すコードは、以下2つの特徴がある。
1.undefinedやnullが必ずケアされている
2.else側も必ず例外が起きない程度の何らかの実装がなされる。
1も2も人間が作るとメインロジックに気を取られておろそかになって、想定できないパターンが来ると即例外になるプログラムをよく見てきたが、LLMが作るコードはそこに濃淡がないというか、メインロジックだけ力が入ってて、それ以外はザルみたいなことが起きない。最初から最後まで丁寧さが変わらず、かつelse側のロジックというかプロンプトが明らかに足りないところでも、最低限のケアが実装される。たとえば、何らかのデータの集合を何らかのカテゴリでグルーピングするような実装があったとき、どのカテゴリにも属さないデータが来たら勝手に「その他」に振ってくれるような。
この能力は、人間では敵わない。僕は人のコードを見て「ちゃんとしてるな」と感心することはめったにないのだが、LLMが作ってくるコードには毎回感心する。そもそもの期待値の問題かもしれないが。
とにかく、こうしてチケット消化ゲームを運営しながら、LLMも遊び倒すという仕事が、今また面白い。