生成系AIを使ってコーディングしながら感じたこと【Cursor】
はじめに
この記事の続き。去年末からMacアプリの開発をしていて、色々感じたことをまとめてみる。
生成系AIは初心者なので「こうしたらいいよ」みたいなアドバイスとか間違って認識していることがあれば教えて欲しい。
Cursor、便利だな
最初は前述の記事のようにChatGPTとXCode(IDE)を往復しながら作業していた。これだとコードの情報を一々渡すのが面倒で、噂のCursorを触ってみることにした。
Cursorはファイルや行、ドキュメントの単位で簡単にコンテキストを渡せるようになっていて指示が出しやすい。
気づいたときにはChatGPTの利用回数が減り、Cursorをメインで使うようになった。特にリファクタリング系のタスクは正確にこなしてくれる印象だ。パフォーマンス改善のような難しいタスクに関しては指示を分割していく必要があった。Agent機能はStrict Concurrencyのビルドを通すのにAIが苦労する様子が見れて興味深い。
「入力が楽」はより進化していく?
ChatGPTからCursorを利用するようになって、「入力が楽」というのは進化の方向性として進んでいきそうだと感じた。いずれはファイルを指定しなくても良い感じに汲み取ってくれるようになるのかもしれない。いずれはTODO管理とリポジトリが直接繋がるようになって勝手にPRを生成してくれるようになるのかもしれない。そうなると細かい適切なタスク管理をする能力が求められるかもしれない。タスク自体も自律的に分割してくれるようになるのかもしれない。
この動画でエージェントとして進化していくと聞いたときはあまり実感ができていなかったが、Cursorを使ううちになんとなくイメージが湧くようになった。
これまで大事とされていたプログラミングテクニックはこれからも大事か
現状は関数やファイル単位でコンテキストを渡すことが多い。ノイズになる情報は減らしたほうが良いだろう。例えばFatVCや影響範囲が大きい神シングルトンは解釈するのに負荷も大きい。
適切な量のコンテキストを渡すうえではこれまで大事にされていた適切な名前付けや、コードを適切な粒度に分割していくことはこれからも大事なのだと思う。現時点ではコード生成は任せられたとしてもリポジトリの方向性や健全さの維持には人間が監督する必要があると感じる。
ビルドが早く終わること、テストが早く終わることも同じように大事だ。いくら生成系AIで生産性が上がろうともビルドやテストに時間がかかるようではそこがボトルネックになってしまう。
理解の大事さ
プロンプトに頼っていると、理解を疎かにしてしまいそうなときがある。ただそうして進めていると現状では詰まってしまうタイミングが訪れる。継続した開発やコードの健全性を維持するためには理解してタスクを分解して指示を出していく必要は変わらずある。
世界一流エンジニアの思考法でも理解の大事さが語られていたがまさにその話になる。
これまでと変えるべきテクニックはあるか
仕事では経緯を残す際にコンフルエンスなどリポジトリ外に残すことがあったが、コンテキストを渡す上ではできるだけコードコメントに集約したほうがよいのかもしれない。
細かいところだが、必要な文字列だけを渡す上ではファイルの上部に書いているコメントアウトのファイル名や生成日、Author、会社名などの情報は不要なのかもしれない。いずれはそういう細かいことも気にしなくてよくなるのだろうか。stubやmockなどのファイルも別ファイルに分けていたほうがフレンドリーなのだろうか。
人間の価値は
なんだか大仰なタイトルになってしまった。AIと触れ合っていると人間の価値は何だろうかと考えてしまう。
現時点の開発において人間の価値は「意志」と「コンテキスト」と「テスト」なのだと思う。何を作りたいか、どうしていきたいかは人間が考える必要がある。指示を出す際に、必要なコンテキストを渡す必要がある。ただコンテキストを渡すのはどんどん簡単になるのだろう。最後にでき上がったものが良いか悪いか判断するのも人間の役目だ。
AGIが出てくるようになると変わってくるかもしれないが、現時点ではそんなふうに思う。
終わりに
最近Cursorの無料のプロ期間が終わって使いにくくなったのでCursor Proに課金をした。頑張ります。