タオルケット体操

サツバツいんたーねっとでゲームとかガジェットのレビューとかをします

一週間くらいCursorでAIコーディングに触れてみた所感

Sponsored link

意識が泥沼よりも低い位置にあるのでいままでAIコ〜〜ディングはしてまへんでした。

がしかし、いい加減状況も落ち着いてきたみたいだしショートカットできそうな雰囲気があったのと、色々と状況が好転したのもあり試す機会に恵まれたので現時点で感じたことを書いておこうかなと。
ちょびっとだけ試しておもったことをバババっと書いてるだけなのでかなり的外れになっている危険性はある。備えよう。

ちなみにClaude3.7ばかり使っていて他のモデルはようわからん状態だが、いうほどのデカい違いはないはずだ。

超尖った新人プログラマー

はい。

とにかく技術的に尖ってて、普通の人類ではカバーしきれない範囲と、深さの知識をもっているし、それなりに動くコードをゲロゲロと吐き出すことができる。
僕は昔から絶望的に数学やコンピューターサイエンスの類が苦手なんだけども、AIをフルで動かし続けるキャッシュがあるなら……例えば「動画や音声を編集するソフトをスクラッチから書け」みたいなフリをされても現実的な工数で対応できそうだな、という予感がある(AI以前ならどこかでつまずくたびに専門書をとっかえひっかえとかしないとダメだったとおもう)。

その一方で大きなプロダクトを継続的に成長させる、という観点でいうと根本的な素養が欠如している。とかんじる。
実行計画がどうだ、ルールがどうだ、とかプロンプトがどうのこうのとかそう言うレベルでカバーしきれないとおもう。

いわゆる「コードスメル」「アーキテクチャのアラ」とかを早期に発見する能力が全くない。
というか当たり前だけどそれなりに経験を積んでるプログラマーでもこの「嗅覚」を持っているヤツはかなり稀だ。

こんなことを書いていることからもわかるように、僕はこの辺の感覚に関しては自分にけっこうな自信を持っている。
コンピューターサイエンス的な文脈で言えば並程度なんだけど、ここの嗅覚と言語化に関してはけっこういいセンをいってるわけだ。

その自称結構いいセンをいってる僕からするとAIの書くコードは危なっかしい。
アルゴリズム的なことをやらせると一流だが、凡庸なビジネスロジックを書かせると勢いだけの新人みたいなコードを書く。
「君や同僚はこれからそのコードを数年間保守するんだよ?」
って突っ込みたくなる様な。
これは単純なコーディング能力だけではなくて、一見単純にみえる要件であっても膨大なコンテキストを持つという現実世界の制約も影響してそうだし、それを完璧に言語化するにはこちらの文章力もお前のウィンドウサイズも足りていない……という両面がありそうだ。

(LLMにコーディング能力を与えるに際しての「見栄えの良さ」というかコスパよくハッタリが効いてなおかつLLMの特性とも相性が良い領域が「こちら側」にはない、ということかもしれない)

たぶん……この辺が人によってAIのコーディング能力についての評価が分かれるポイントなんだろうか?

AIに全部賭けて魂を震わせる未来もいいけど、少なくともいまの性能で自走させると半年も経たずにメンテ不可能なプロジェクトができあがるだろう。
あるいはアーキテクチャ的な勘所をわかっていない人間がAIの作るコードを鵜呑みにしても……同上。

仕事は早くなったか

当然進捗は出ていない。
だって新しいツール試してるところだし。
Project Rules的なものを作るところからやっているので仕事そっちのけだ。逆に言うと、パッといれてチャチャっと指示すればいい感じのコードを生成してくれる世界とは程遠いわけだ。

それなりに狙ったものを作らせるには 「使いこなす」
ことが要求される。

ただ、もうちょっとこなれたらかなり業務がはかどるような印象はある。
というか3日目くらいからそれなりに使い所を見つけることができた。

現状のAIコーディングの使いどころ

  • ややこいアルゴリズムとそれに対するユニットテストを書かせてから、自分でリファクタリングする
  • パッとおもいうかんだ技術的なコンセプトを一気に実装させてから、自分でリファクタリングする

このふたつの用途がかなり捗る。

ただし、最初にゴチャゴチャと書いたように 自分でリファクタリングする フェーズは必須だとおもう。

これは僕の主戦場がTypeScriptであることが影響しているのかもしれないが、AIの書くTypeScriptのコードはかなりクオリティが低い。
率直に言ってクソコードと表現して問題ないものがボロボロ出てくる。

肝心なところをanyにして無理やり通したり、無意味なユニットテストを書いたり、一行ごとにwhat系のコメントを書いたり、あらゆる場所にtry-catchを書いたり、インスタンスメソッドの動的書き換えをおこなったり、とにかくanyを使いまくったり……
JavaScriptもそうだが、TypeScriptも世の中のコードベースはだいぶスラムみたいな治安をしているので、そういう世界の汚泥を啜ってしまったがゆえの不幸なんだとおもっている。

バグの箇所を見つけさせたりとかしてる人もいるようだけど、正直数年くらい面倒をみたコードが出すバグの99%ってエラーメッセージみた瞬間に原因と修正方法が頭に浮かぶから使う機会がないんだよね。
ただし残りの1%のケースが他の99%を解決する時間の数倍を食い潰すわけで、やっぱりそういうスポットスポットでAIに頼ると人間が見落としてた場所からスッと原因を拾い上げてくれたりする。

こういうところはかなり便利だとはおもう。

老害なのかもしれない……そう考えた瞬間がオレにもありました

「コードのクオリティ」なんて尺度がそもそもの間違いで、全てをAIに委ねてAI基準の可読性でやっていけばいいじゃない……
そう言う世界観もあるにはあるのかもしれない。
かなり神林長平的ではある。

なんて考えてたらちょうどいい感じにerukiti氏の記事が流れてきた。

zenn.dev

まあ、そうだよね。
いまのLLMがやる"知的振る舞い"は若干人類とことなるニオイがしなくもないが、やはりベースは我々のドキュメントなので人類に読めないものは彼らにもキツイ。
暴走させると簡単に自家中毒をおこすわけだ。

AIコーディングの恩恵を受けるのはある程度経験を積んだ人間

いまの枯れ具合だと、初心者が一気にスーパーハカーになれるツールって感じではない。誰でもスクリプトキディなら間違ってはいないが。
なんというかそれなりのベテラン的な人間が一番恩恵をもらえるツールなんじゃあなかろうか。しらんけど。

もちろんMCPをはじめとして、使えるツールが広がってモデルが進歩して、CursorやClineみたいなUIが進歩するとまた事情は変わってくるだろうが、それにはもうしばらくかかるんじゃあないかなというのがいまの所感。

まとめ

  • 便利
  • カバーしてる知識範囲が半端ないから未知の領域のPoC的なことをさせるとスゴイ
  • 競技プログラミング的なことをやらせるとスゲエ
  • TypeScriptだと(他の言語はしらん)、結構な確率でクソコードを書いてくるので気をつけろ
  • アプリケーションプログラミング自体はまだまだオレの方が数倍上手、というか明確にAIのコーディング能力の弱点

ちなみに僕はプログラミング自体がそれなりに好きでやってきているので、AIのコーディング能力が進歩すると嬉しいか?と聞かれると別に全然嬉しくねえ。

クソどうでもいい会社の人事考査系のアリバイ的書類作りとか、ミーティングにでて「はっ!光栄であります閣下」って言ったりとか、あと洗濯物畳んだりとか、そういうダルいことをAIくんにはやって欲しいわけ。わかる?
要件から仕様考えてプログラミングするのはオレがやるからいいんだよ。

あとエネルギー食い過ぎ。
マジでAIが生成するものって俺が好きな領域を破壊するゴミ*1ばっかりなのに、そのうえでAIが消費する膨大なエネルギーのせいで温暖化が深刻な領域にきてるわけ。
僕の趣味はトラウトフィッシングとスノーボードなんだけど、マジで温暖化の影響がエグすぎて魚はバンバン死んでるし雪もドンドン溶けてる。
アウトドアや生き物がほんのちょっとでも好きな人間なら、いまの環境変化がガチでヤバイ領域に来てるのは肌で感じてるはず。

最近は推論にエネルギーを使うようになってきてるらしいが、僕一人がこの一週間でAIに書かせたゴミみたいなコードのために来年のスノーシーズンが何秒短くなったのか考えるだけで頭がおかしくなりそうになる。
はー道央のヤマメ解禁はまだかな。


一体全体なにを書きたかったのかよくわからなくなったが、これは完全に僕が人力で書いたオーガニックな日記なのでこういう勢いのみの何かが生成されるのである。

*1:ジブリ風サムアルトマン(笑)品性のドブ底やね