🤖

私のAIの遍歴

に公開

今やAIはエンジニアにとってなくてはならないツールの一つだと思います
私も、AIにコーディングさせたり、設計してもらったり、レビューさせたりと色々使っています
毎日何かしらの作業でAIを使っていますが、改めて考え直してみると考えたら以下のような疑問が出てきました

  • どうやってAIを触れ始めたのか?
  • 今日まで扱えるようになったけど、どうやってそうなれたのか?
  • まだAIを使える箇所があるのではないか?

なので、この記事では私とAIの遍歴を中心に書いていこうと思います
まだAI触れ始めたばかりだったり、AI使っているが他に使い道があるかもしれない人の一助になれば幸いです

初めてのAI

去年まではちょくちょく使っていましたが、ガッツリ業務とかに使い始めたのは今年になってからだと思います
それまではプロンプトが悪かったり、AIから得られる回答があまりよくなかったりと、AIを使いこなすコストを考えたらガッツリ使わず補助的な役割として使っていました
しかし、AIが驚くほどの急成長をし、良いことをよく聞くようになったので、今年に入ってからガッツリ使うことにしました

最初使い始めた頃、最初に送るプロンプトはコピペでほとんど済むようなものばかりでした
例えば、

  • エラーログと発生箇所のコードを貼ってエラーの原因と修正案を教えてもらう
    • Agentを使うようになってからはエラーログだけになりました
  • Slackのスレッドを貼ってやり取りの要約をしてもらう
  • 私が書いたドキュメントのレビュー
  • 仕様を貼って(コピペだけでは伝わらないものは追記して説明)、サンプルコードや設計の案を出してもらう

みたいなものです
エンジニアなので、技術的なところを中心に、話の要約だったりしています
これだけでも、AIに聞いておいて良かったという場面がほとんどでした
コーディング関連はたまに動かないものとかを提示してくることはちょこちょこありましたが、的外れのようなコードはなく自力で修正して動くようにできるレベルでした

始めてから数ヶ月後

最初こそ、コピペが中心でしたが、慣れていくにつれて以下のようなこともAIに助けてもらったりタスク丸投げに近い状態だったりしていました

  • クラスやメソッドなどの命名の候補
  • 企画や目標、設計などの壁打ち
  • バイブコーディング
  • AIによるコーディング補助
    • クラスの雛形作ってもらったり、サジェストしてもらったり
  • 設計やコーディングのレビュー
  • 特定の機能の調査

ここまで来ると、プロンプトの書き方にも慣れてきます
以下のようなところを書いておけば、得たい回答はもらえるのではないかなと思います

  • 最終的に何をしてほしい、何がしたいのか?
    • 例:このコードをよりパフォーマンス良く実装してください
  • ↑をするために必要な情報を書き出す
  • 出力する形式が決まっているなら書いておく
    • (例:Markdownで書き出してください)
  • 回答をもらって、修正してほしい箇所があればどう修正したいか伝える
    • 割と感覚的なもの(もっとポップな表現にとか)でもよしなにやってくれる
    • ピンポイントで修正してほしい箇所があれば、その部分を引用すると精度高くなる
  • AIのモデルごとに考え方のくせのようなものがあるので、それは頑張って慣れる

今はどんな感じ?

ガッツリ使い始めて大体10ヶ月(ちょくちょく触っていた頃も含めると1年以上)ですが、使い方はほとんど変わりません
強いて挙げるとすれば、今のプロジェクトをmermaidのクラス図で出してもらったり、AIとともに作った設計書をコーディングしてもらったりです

よく使っているAI

私が業務でよく使っているAIは以下になります

  • ChatGPT
  • GitHub Copilot
  • JetBrains AI(DroidKaigiで知って使い始めた)

ChatGPTでドキュメント周りを支援、それ以外でコーディング支援してもらっています

個人的に特に体験が良かった使い方

いくつかどんな使い方をしているのか書き出しましたが、これはめちゃくちゃ便利だったというのを具体的な例を交えて紹介します

特定の機能の調査

プロジェクトに参加したばかりだと、ある程度ざっとコードを見ますが、全てを見ることが規模的に出来ないことが多いと思います
特に、〇〇機能の修正をすることになった時、〇〇の機能を知らない・・・ということはよくあると思います
こんな時、
「〇〇機能という機能があるようですが、どこに実装されているでしょうか?」
とAIに伝えると、
「〇〇クラスを中心に実装されています、このクラスでは△△メソッドなどがありここで実装されています」
というような回答が来ます
実際にクラスやメソッドを見に行くとそれっぽい実装が書かれていました
これだけでも十分便利(調査時間がかなり短縮される)のですが、ここから更に
「どうやったらこの処理を呼び出せる?」
とか
「この処理を入れようと思うが、そのクラスでOK?」
とかを聞くと、アプリの操作ベースで処理を呼び出すための手順を書いてくれたり、実装の提案や他に考慮すべきことを教えてくれます
精度は高いし、まだ良くわかってないプロジェクトの膨大なコードを一人で粛々と調査して見つけるよりか遥かに時短になるのでかなり便利です
少し応用すると、私は今Androidエンジニアなので、iOSは〇〇の機能はどういうロジックで実装しているのだろう・・・?と思った時にAIに丸投げして参考にするような事もできます

レビュー

今でこそGitHub CopilotでAIにPRをレビューしてもらうことがスタンダードになりつつありますが、私のプロジェクトでAIにレビューをさせた時、非常に感動しました
かなり的確なコメントがもらえますし、人力では見逃しそうな考慮すべき箇所もコメントしてもらえます
例えば、suspendの実装部分はwithContextでラップして副作用を防いだりテストしやすくしてくださいや、文字列操作で一部だけ使う場合、それを事前に考慮しているか?とか聞いてきます

また、プロジェクトによっては諸事情によって特殊な実装や文脈が存在する場合もありますが、GitHub Copilotではカスタムインストラクションがあります
これを利用することで、レビュー前にあらかじめプロジェクトの前提知識をAIに教える事ができるので、特殊な実装や文脈を察してレビューしてくれるようになります

AIが得意なこと、苦手なこと

色々使ってみて、AIの得意なことは以下のように感じました

  • 機械的、またはほぼ結果が決まっている作業
    • MVVM + Repositoryの基本的なコードを書く
    • Kotlinで書かれたコードを渡してSwiftで書く
  • 調査系
  • 要約

逆に苦手なことは以下のように感じました

  • 複雑な意図や背景を正確に理解する
    • 単純なものであればプロンプト次第で理解できるので、プロンプトの書き方の問題もある
  • 今後の展望を含めた提案
  • そもそも人間が想定していないことを引き出す

まだやれてないこと、やりたいこと

ここまで色々AIを使ってきましたが、まだやれていないこと、やりたいことがいくつかあります
プロジェクト的にそもそも使える状態になっていなかったり、そういう暇がなかったり、あっても当時は難しそうなイメージがあって先送りにしていました

  • MCP
  • テストを一部ないし全部お願いする
  • Issueの内容を実装させる
    • 一度やったことあるが、いい感じに書いてくれなかったので、あまりガッツリ使ってない

まとめ

今までAIをどう使って来たか整理がてら記事を書いて見ましたが、それなりに使ってはいるがまだまだ引き出せることが出来そうです
使い慣れるのは時間がかかりそうですが、慣れたらAIは強力な武器なので、頑張ってAIの性能を引き出します
~ゆくゆくはAIに全部丸投げして不労所得っぽく勤労所得をもらいたい~

Discussion