🤝

コード生成AIの「良い点」と「改善を期待されること」

2024/04/20に公開

なぜ記事を書いたか

巷ではAIによって仕事が奪われるのではないか?エンジニアも不要になるのではないかと言われたりしてます...😇
私は最近,完全自律型AIエンジニア「Devin」の存在を知りました.初めて知った時は,やばいかもと思いました.

そんな時に,添付した動画に出会いました.お二方とも冷静に分析されており,完全に奪われるとはおしゃっていませんでした.

ただ,AIと協業してソフトウェア開発を行う世界が,普通になりそうだなと思いました!

そこで,AIが職場に浸透し始めてきたこのタイミングで,現状のコード生成AIの「良い点」と「改善を期待される点」を整理しておきたいと考え,記事を書きました.
(執筆: 2024年04月20日)

結論

調べた結果として,以下の良い点改善を期待される点が報告されていました.

良い点

  • 既存コードを横展開する時に,高い精度で予測してくれる
  • テストコードの記述が総合的に楽になった
  • 自分が他人のコードをレビューするような感覚でコーディングできる
  • 自分の知らない記法など補完によって学べることがある
  • 久しぶりに触る言語でコーディングする際に便利

改善を期待される点

  • とんでもないミスが含まれている可能性がある
  • 複雑な処理を一気に書かせると要件を満たしていないことがある
  • デバックのためのコードリーディングが辛い
  • 読み込んでもらえるドキュメントの形式が限られている

GitHub Copilotによって提案されたコードについては,生成するプログラミング言語で精度に差はありますが,30 ~ 40%の割合で提案が受けれられているようです.

以下に,調査の過程で得られた情報をまとめております.お時間のある方は,読んでいただけると幸いです🙇

コード生成AI

コード生成AIとしては以下のものが挙げられます

  • GitHub Copilot
  • Amazon CodeWhisperer
  • Code Llama
  • OpenAI Codex
  • IntelliCode

本記事では,企業の導入数が多そうだなという理由で,調査対象としてGitHub Copilotを選択しました.特定の企業だけでなく様々な企業から報告があるので,特定の環境だけに偏らない意見が収集できそうだなと思いました.

GitHub Copilotとは

GitHub Copilotについて知っている方は,読み飛ばして下さい!

GitHub Copilotは,AIコーディングアシスタントです.Copilot には、次のような機能があります.

機能 説明
コード生成 コメントでプログラム作成を依頼したり,記述中のコードのその先を提案してくれる
チャット コードに関する事柄を,ChatGPTのように教えてくれる
PR PRの差分を要約したり,その内容に関してチャットで聞くことができる
ナレッジベース チャットのコンテキストと使用するドキュメントを作成

各機能の補足を,以下のtoggle内に記載しました気になる方は読んでみて下さい!

補足情報

コード生成

コメントやカーソルのある前後のプログラムから,コードを生成してくれます.

利用例

  • コメントの内容に従って,コードを生成
  • プログラムをしている際に,それ以降のコードを提案
  • コードの単体テストの作成


チャット

ChatGPTのように,自然言語で質問を行い,それに関する回答を受けることができる

利用例

  • 他人が書いたコードの説明
  • バグの修正方法を説明
  • 使用しているライブラリの説明を求める
  • 開発中のファイルのテスト作成を提案してもらう


PR

PRのコード差分をみて要約を提供したり,チャットでより深くPRについて聞くことができます.

利用例

  • PRの内容を検証する前に全体像を把握する
  • 影響範囲を説明してもらう
  • 自分が考えているレビュー項目以外のものを提案してもらう

ナレッジベース

リポジトリ内のMarkdownドキュメントをまとめ,Copilot Chatのコンテキストとして使える.

コンテキストとは何か?
コンテキストは,背景や文脈という意味を持っています.生成AIは,ネット上で公開されているデータを学習しているそうです.一般的な事柄について学習をしています.しかし,社内等のクローズドな空間で共有されている知識については,学習できていません.その知識をAIに与えるようなことを指していると考えています.コードを生成や仕事を進める上で必要な背景をAIに与えることにより,AIからの提案されるコードの精度が上がるかもしれないです.

チャットから得られるものに満足しない場合は,利用を検討してみても良いかも知れないです.



3種類のプランがあるようで,それぞれのプランで使える機能が異なるそうです.

プラン 説明
Copilot Individual 個人向けのサービス
Copilot Business ビジネス向けで,コードが学習に利用されない等の設定ができる
Copilot Enterprise Businessで提供されている機能に加えて,チャットやPR要約機能を利用できる.

https://docs.github.com/ja/copilot/about-github-copilot

導入した企業の報告

企業が公開している記事から,良い点改善を期待される点をまとめました.さらに,その記事から自分が個人的に意識したいことを記載しました.

「良い点」と「改善を期待される点」

導入した結果の「良い点」と「改善を期待される点」をまとめました.

良い点
既にリポジトリに存在するコードと似たようなコードやテストケースを生成する際に役に立ちそうです.また,コードをレビューする感覚でコーディングできるのは良いと思いました.

より詳細な調査内容

報告されていた評価

  • 既存コードを横展開する時の方が高い精度で予測してくれる.
  • コードを範囲選択すると,そのコードをリファクタリングしてくれる機能をもっている.
  • テストコードの記述が総合的に楽になった.定型的かつ繰り返しの記述を少しずつ変えて書くケースで使いやすい.
  • 久しぶりに触る言語や機能でコーディングするときに便利である.
  • コメントを書いて,関数の引数と返り値をざっくり書くだけで実装してくれる
  • わかりやすい簡潔な文章をすぐに書いてくれるので,コメントをそもそも書こうという力学が働く
  • 自分が他人のコードをレビューするような感覚でコーディングできる
  • 簡単な処理はほぼ簡単に補完してくれる
  • 既存のコードと同じスタイルで補完してくれるのが助かっている.
  • 似たようなテストケースを書くときに補完が効いて楽である
  • ボイラープレート的記述を書く際にも簡単になる.
  • API Docが爆速で作れるようになる.
  • 自分の知らない記法など補完によって学べることがある.
  • 巨大なjQueryで書かれたコードに対して,JDocで型定義を書いてもらうことでコードリーディングを容易にできた.
  • 手直し前提でボイラープレートやテンプレートを作ってもらうのがらく.
  • AIにコードを作ってもらいたいという,強い意志がなくても恩恵を受けられる.


改善を期待される点
複雑な要件での生成にはイマイチなことや,動かすまで生成されたコードが間違っていることに気づかない等が挙げられていました.古い情報を提供してくる場合は,自分で修正を提案したり,自分で記載する必要があるみたいです.

より詳細な調査内容

報告されていた評価

  • とんでもないミスが含まれている可能性がある.実際にプログラムを走らせるまで気づかなかった.
  • 複雑な処理を一気に書かせようとすると要件を満たしていないことがある.
  • デバックのためのコードリーディングが辛い → 任せる部分を分解する必要がある
  • 自分自身でコードレビューすることをサボってしまうので,コピペエンジニアのcopilot版が量産されやすい.
  • 古い情報を提供してくる場合は,自分で修正を提案したり,自分で記載する必要がある.
  • 動かないコードを全面的に信じてしまって,間違いに気づきづらい
  • 分析用のSQLを書いたりするときの補完は全く当てにならない.


機能毎に改善が期待される点

機能 評価
チャット レガシーコードのコードリーディングでは,あまり助けにならなかった.コードリーディング対象のコードのコメントやコードの質が高くないと,良い結果が得られにくい.
PR PR要約に関しては,英語のみのサポートなので読み手の負荷がより増しそう
ナレッジベース 既に採用しているドキュメント管理ツールの方が,知識共有の点で良い.Excel等のmarkdownで表現できないデータは,読み込ませる方法がない.



提案されたコードについて
GitHub Copilotによって提案されたコードについては,生成するプログラミング言語で精度に差はありますが,30 ~ 40%の割合で提案が受けれられているようです.コードを受け入れたとしても,手直しが必要だと思うので,完全にAIだけで全て書けた部分は少ないのではないかと考えています.
まだ利活用方法の知見がたまっていないことや,生成AIモデルの性能向上の余地はありますが,エンジニアの仕事が完全に置き換えられることはないのではないかと思いました.

意識しようと思ったこと

報告を見て,意識しようと思った文言があったので,紹介させていただきます.

Gaudiy株式会社

どのようなツールが覇権を握るとしても、共通して大事なことは、生成結果の正当性やそれを自分たちのプロダクトや業務に使うことの正当性を、自らの視点で評価をした上で活用することだと考えています。

株式会社サイバーエージェント

エンジニアに求められる本質的なスキルは変わらないと考えています。新たなツールを使いこなすには、これまでもエンジニアに必要とされていた好奇心や日々真摯に学ぶ姿勢がより一層欠かせません。
何らかの課題を解決するためにそれらを咀嚼しシステムに落としこむ設計力や、限られた制約の中で決断し実行する力は、人間にしか培えないものだと思います。

GMOペパボ株式会社

コストパフォーマンスという観点だけでなく、開発のパラダイムの変化にいち早く対応するというという点も重要だと考えています。ChatGPTの登場以降、あらゆる分野において生成AIを活用した新しいサービスが登場し、業務プロセスの改善が行われています。

株式会社 一休

ごく当たり前の結論ではありますが、コード自体に why や why not がわかるコメントをしっかり残すように意識していくこと.
今後はコメントに加えて、どうすれば LLM フレンドリーなコードになるか、という観点での新しいコードの書き方も確立していくでしょう。引き続き動向を追いながら、新しい種類のコードの品質向上に努めていきたいと思います。

自分としては以下のことを意識しようと思いました.

  • 生成された結果に対して責任を持つのは,コード作成を依頼された自分自身にあること
  • 生成AI時代でも変わらず,エンジニアとして必要なことは,好奇心を持って色々なことを学ぶ姿勢が必要である
  • AIによる開発パラダイムの変化を怖がるのではなく,どうしたら効率良く協業できるようになるのかを真剣に考える

AIと協業することを前提に,新しいコードの書き方を模索していく方向性は良いと思いました!コードを書くことの負担が減少し,それによって浮いた時間をコメント等のコンテキストを伝えれられような活動の割合を増やすと良いかも知れないです.やるべきとはわかっていたけど,優先度が低く設定されていたことをやれるようになると良いですね.

感想

最後まで,読んでいただきありがとうございます🙇

AI業界は,進歩が早くて凄いですよね...
最初に,完全自律型AIエンジニア「Devin」の存在を知った際には,不安でした.
勉強しても最終的にAIに代替されて,勉強する意味がないのではないかとか...
色々考えていました.

しかし,こうして情報を収集していくうちに,エンジニアとして好奇心を持って技術をつける行動は無駄にならないことだと再認識することになりました! 🎉

まだ,論文が発表された段階ですが,AIドリブン・ディベロップメントなるものが提案されているみたいです.日本語の解説には,以下があります.

AIによって,コード生成が早くなるので,テストコードによって挙動が正しいかどうかを担保する仕組みがより重要視されるかもしれないですね.今後もAI技術の動向から目が離せないです!

エンジニアとして働いている人達がコード生成AIを使うことで生産性が増して,エンジニア不足を解消できる未来が来ると良いですね!
コード生成AIと上手く協業できるように,AIの同僚が働きやすい環境づくりと自己研鑽を一緒に頑張りましょう!💪

参考資料

Youtube



コード生成AIに対する評価
https://product.st.inc/entry/2023/03/31/171318
https://techblog.olta.co.jp/entry/2023/04/14/192601
https://zenn.dev/leaner_dev/articles/20230405-github-copilot-impression
https://techblog.gaudiy.com/entry/2023/04/20/162647
https://labs.1-10.com/2023/06/16/3387
https://blog.smartbank.co.jp/entry/2023/06/22/090000
https://techblog.zozo.com/entry/introducing_github_copilot
https://tech.leverages.jp/entry/2023/07/24/140938
https://www.cyberagent.co.jp/way/list/detail/id=29887
https://developers.cyberagent.co.jp/blog/archives/43288/
https://tech.pepabo.com/2023/08/30/github-copilot-effects/

Discussion