現役エンジニアがChatGPT、Copilotを使った所感

2023年12月にGitHubから「GitHub Copilot Chat」の一般提供が開始されましたね。GitHub Copilotのサブスクリプションプランの一部として組織と個人ユーザーに提供され、教師、学生、人気のオープンソースプロジェクトの管理者は無料で利用できるようです。

今、mmjの社内ではエンジニア達によって、今後のAI全盛期における新たな立ち回り方を模索しながら、ChatGPTやCopilotに関する情報交換が活発におこなわれています。この記事では、現役のエンジニアが今実際にどんなことを感じて考えているのか、生の声をご紹介します。

今後のWebシステム開発エンジニアの在り方や、効率的なプログラミングをするためのヒントが見つかりますので、ぜひご一読ください。

ChatGPTにCopilotについて聞いてみた

まず最初に、Copilotについて知らない方がいるかもしれないので、ChatGPTに質問してみた回答を引用しておきます。既に知っているという方はここは読み飛ばしてください。

Q.Copilotについて教えて

Copilotは、GitHubが開発したプログラミング支援ツールです。これは、人工知能(AI)を活用してコーディングのサポートを行うもので、開発者がコードを書く際にリアルタイムでヒントや提案を行います。

Copilotは、オープンソースのコードベースから学習したAIモデルを使用しており、コーディング中にコンテキストを把握し、関数、クラス、変数などのコード断片を自動的に提案します。これにより、開発者はコードをより迅速に記述し、効率的に問題を解決することができます。

ただし、Copilotは提案を行うだけであり、完全な自動化ではなく、開発者が提案されたコードを検討し、必要に応じて変更する必要があります。また、利用者のコードやコメントなど、GitHub上の多くの情報を学習しており、プライバシーやセキュリティに関する懸念も議論されています。

Copilotは、開発者の作業を効率化し、新しいアイデアを探求するのに役立つことができますが、その利用法には注意が必要です。

ChatGPT

ではここから、エンジニア達が社内のteams上でおこなっている、Copilotに関する意見交換の一部をご紹介していきます。

LLMの活用

  エンジニアI

LLMをソフトウェア開発に活用するということは、もうこれからの必須スキルになると思います。とはいってもしばらくは発散フェーズで色々な活用方法が模索される時期でしょうから、ここで全力フルスイングしてもすぐに時代遅れになったりして消耗しますので、適度に熟れた部分だけつまみ食いする程度の付き合い方が良いのではないかと思います。

私の活用方法の例を一つあげると「xxというライブラリのyyというクラスはどういうものですか?」という質問をすると、そのクラスの概要について説明してくれます。ある程度使われているライブラリならそれなりに上手くいく感触です。

これはソースコードが長くて切り貼りできないような場合でもそのクラスの概要を教えてくれるので、ライブラリの実装の詳細を理解したい場合には個人的には結構役に立っています。

新しいコードを読む時に、
・そのコードを読むためには、そのコードが一体何をしているのかの概略が無いと辛い
・その概略を得るためにはコードを読まないといけない
というジレンマが発生することがありますが、この方法を使うと、AIがこのループを断ち切ってくれます

AIにコードを別言語に翻訳させてみた

 エンジニアI

うまく行かなかった事例の共有なのですが、AI にコードを別言語に翻訳させたら、配列のインデックスに使っているリテラル値をこっそり別のものに変えられていて、そのバグ見つけるのにかなり時間を使ってしまいました

こういう細部のミスはよく起きる印象なので自動生成されたコードを鵜呑みにするのは避けたいですね。

プログラミングでAIを使った所感

 エンジニアS

今SASプログラム(データ解析用言語)をPython化する案件(どっちの言語も不慣れ)を担当していますが、SASプログラムの理解や、pythonコードを書いたりライブラリ選定でChatGPTが大活躍しています。そもそも僕は要らなかったのでは?と思うぐらいになっています。

AIの補助があれば不慣れな領域でもなんとかやれそうですね。もちろん勉強は平行して進めないといけないですが、勉強(言語やライブラリのイディオム)とかもChatGPTに聞けばいいので、はかどりすぎます

P.S と言ってたら盛大にChatGPTに嘘付かれたので、やっぱり僕は要りますね(笑)。


 エンジニアI

既存コードを理解するのにはめちゃ便利ですよね。今まで磨いてきた問題解決の技術が価値を失いつつあるのを感じます。特に検索エンジンを使いこなして効率的に調査・問題解決する技術は昔は重要なスキルでしたが、今では全人類標準装備になりつつありますね。侍が銃器の戦いに直面した時もこんな感じだったんですかね。

ただ、間違いを紛れ込ませてくるのでそこはかなり注意が必要だと思います。よく知らない分野で難しいバグを取るのはめちゃ難易度高いと感じました。

一方でよくわからない分野でもそれなりに仕事ができるようになる可能性があるのでプログラマの守備範囲が大きく広がっていく可能性はありますね。

それから、基本的にテキストベースである以上、以下のような状況に弱いです。
・バージョンやプラットフォームなどによって動作が変わる場合
・同じ名前が複数のライブラリや言語で使われている場合

こういう場合、異なる話題が混ざって使い物にならない回答が返ってくることがあります。
・aws-sdk の使い方を聞いたら古いSDKのコードが返ってくる
・MacOS の dd の使い方を知りたかったのに Linux の dd の使い方が返ってくる


 エンジニアS

コード品質って可読性やメンテ性のために上げたいものなので、既存コードと改修内容読んでAIが改修するようになったらコード品質の価値も変わってきますね。コード品質はAIが理解しやすいコードという定義になるのでしょうか。さすがにそこまで到達するのはまだ先だと思いたいです。


 エンジニアI

それは僕も思います。良いプログラミング言語の定義とか完全に変わりますよね。文法が明快で安定していて、かつ学習データが大量にある言語、がAIと相性の良い言語になると思っています。

最近は 複数のAIに同じ質問をしてダブルチェックするということを試みるようにしました。答えが食い違っている場合に嘘の回答を検知できるので少し便利です。

うまくいったコード修正の話

 エンジニアI

unity の c# コードを書いていて、よくわからない syntax error が出たので該当コード部分を張り付けてどこを直せばよい?と聞いたら何とかなりました。

Google時代はエラーメッセージ>原因>解決策という思考のステップを踏む必要がありましたが、どう直せばよいのかの答えがワンステップで出てくるのは便利な一方で、浅い理解のまま突き進むようになりそうです。これからの若いエンジニアは勉強が大変になる気がします。

GPT-4 Turbo は大きなドキュメントも入力として与えられるようになったみたいなので、「仕様のドキュメントを全部読ませて〇〇する」ということができるようになるかもしれませんね。

<参考記事>
GPT-4 Turboでいちばん嬉しいのは、300ページ相当の長文をまるっと読み込めること

GitHub Copilot Chat 使ったコード生成

 エンジニアK

事例の紹介です。GitHub Copilot Chat を使ってコード生成してみたところ、かなりうまくいきました

・ドメインモデルからDTOを生成
・DTOからドメインモデルへの変換関数を生成
・変換関数のunit testを生成

これらをかなりいい感じで実現できました。シリアライズ用のDTOは、腐敗防止層として働かせるために作ったほうがベター、というのは多くの人が合意すると思うのですが、ほぼ同じデータ構造を定義、変換関数を作らないといけないので、その実装作業が煩わしくて敬遠されることが多々有りました。

これをAIに実装を任せることができるのであれば、DTOを導入するハードルがぐっと下がりそうです。コードが生成されるまで多少時間がかかりますが、人間が手で実装するよりはかなり速い、という感じでした。

使ったコマンド

使ったコマンドを共有します。unit test のダミー値も生成してくれるのはすごく便利でした。

  • このファイルに定義されたクラスのDtoクラスを実装してください。
  • enum class への参照は String にせず、enum classへの参照のままにしてください。
  • data class への参照は、XxxDto のように Dtoを末尾につけたクラス名への参照にしてください。
  • ただしその data classがすでに @Serializable アノテーションを持っているなら、クラス名は変更しないでください
  • KyotuSheetDto から KyotuSheet への変換関数を実装してください。
  • convertDtoToKyotuSheet の挙動を確認する unit test を実装してください。
  • パラメータの初期値には適当な値をセットしてください。
  • assertion ですべてのプロパティの値のチェックを行ってください。

所感

  • 回答が長くなりすぎると途中でタイムアウトで中断されてしまうことがありました。
  • 開いているファイルの情報を入力元にしているようで、開いてないファイルの情報はあまり使ってない感じでした。将来的にはリポジトリに含まれる全ファイルを入力元にして回答するように進化してくれるとうれしいですね。

まとめ

いかがでしたでしょうか?

現在、様々なジャンルでAIが世界を席巻しています。プログラミングの世界でも、ChatGPTとの競争・共存は既に始まっており、エンジニアとして淘汰されないためには、AIとの上手な付き合い方を探り、活用できる部分は積極的に活用するというスタンスが必要なようです。

メディアマックスジャパンには、最新の情報を共有しながら、よりレベルの高いスキル獲得に向けて切磋琢磨できるエンジニア仲間がたくさんいます。プログラミングが大好き、プログラムを極めたい、というエンジニア・プログラマーの方は弊社求人へのご応募をお待ちしています。

関連記事

最近の記事 おすすめ記事
  1. 新人さん向けの品質についての読書会

  1. Reactのroute改善のまとめ

  2. EC2でのメールサーバー構築が厄介だった話

  3. プログラマーの新入社員がMMJに入社して感じたこと

カテゴリー

アーカイブ

検索


TOP
TOP