AI を毛嫌いしていた新卒エンジニアが、Claude Code を相棒にするまでの話

はじめまして!4月から新卒として入社したアドプラットフォーム事業を担当しているアプリケーションエンジニアの日置です!

入社して5か月が経とうとしており、研修も無事終わりようやく会社に馴染めてきたような感覚があります。平日に関しては、社会人になってからの方がプライベートな時間が取れずバタバタしていますが、休日は学生時代には付き物だった課題やら論文やらを全く気にせずリフレッシュできるのは最高ですね。

それではぼちぼち本題に入ります。入社して初めてのエンジニアブログということで、何を書くかかなり迷いましたが今回は話題の生成AIを絡めた内容でお話ししていこうかと思います。ざっくり言うと学生時代までと社会人になってからのコーディング時における生成AIに対する価値観の違いと生産性の爆上がりについての2軸で紹介していきたいと思います。

【導入】AI にコードを書かせるなんて、エンジニア失格?

学生時代の私にとって AI は、ちょっとした調べ物に使用する程度の存在でした。研究の手段で必要となる単純な CSV ファイルを大量生成する際に作らせたり、簡単なコードを書いてもらう、ちょっとした考えのアプローチをもらう程度の方法でしか使用していませんでした。

当時から流行っていた GitHub Copilot も存在は知っていましたが、学生時代の自分には「AI に自動でコードを生成させても、自分で理解できていなければ意味がない」という思想がとても強く、使用したことはほぼ*1ありませんでした。この思想だけを聞くと過激だと思う方もいらっしゃるかもしれませんがいくつか理由がありました。

まずは、学生時代に没頭していた競技プログラミングの性質にあります。私は学生時代に競技プログラミングに熱中していたのですが、よく参加していた AtCoder のコンテストでは AI の使用が一切認められていません*2。その実体験から AI を使用してコードを自動生成させる・ヒントを得ることに対しての 一種の罪悪感 のようなものがずっとありました。

別の理由として、ChatGPT を使用しすぎて全くプログラミング言語を理解できていない新入生をたくさん見てきたという背景があります。学部 4 年から 3 年間、私は新入生が最初にプログラミングを学習する必修科目の TA*3 を担当していました。そこでは Processing を用いたプログラミングを学習していきます。この講義では、if や for の基礎的な文法の書き方や意味が分からないにも関わらず、ChatGPT に課題を丸投げしている学生が一定数いました。その結果、当然プログラミング言語に対する理解がほとんどできておらず各自オリジナル機能を備えたブロック崩しを作成するという期末課題でも、何も分からず質問を受けるというケースを経験してきました。さらにこれは、年々増えてきているのを実感しており、私が新入生の頃は ChatGPT なんてものはそもそも存在しないですから周りの友人と相談したり、当時の TA に聞いたりというのが当たり前でした。しかし今は TA より先に AI に聞く、そしてその生成したコードの理解をせずに課題を提出する、ということがここは憶測ですが少なからず存在したのではないかと感じています。

このような実体験もあり、AI にコードを書かせるということは、学生時代の自分にとっては抵抗感がとても強かったです。その結果、「プログラマー*4たるもの、自分の頭で考え、自分の手でコードを書くべきだ」という価値観を当時の私は持っていました。

【転機】入社して価値観を揺るがした「新卒開発研修」と「爆速同期」

AI にコードを書かせるのは、エンジニアとしてどうなんだろう…

このような抵抗感がある中、新卒として入社したわけですが考えは依然として変わらず同期が Copilot を使ってる中、私は AI のコード補完機能もオフにしていました。同期と比べても、私の AI 活用度は圧倒的に低かったと思います。

そんな中、AI に対する価値観が変わり始めたのは入社後の開発研修がきっかけでした。この研修では、1か月近くに及ぶチーム開発研修なのですが、アジャイル開発を採用しており、1 スプリント 1 週間という短いスパンで次々と成果を出すことが求められます。毎スプリントは基本的な必須要件に加え、可能であれば成果物の質をより良くするためのオプション要件もこなす必要があり、正直私の手作業だけでは時間が不足気味でした。

そんな中、圧倒的なスピードで課題をこなしていく同期がいました。なぜそこまで速いのか、開発している様子をのぞいてみると、それが CopilotCursor だったのです。

AI を駆使しまくっている環境を目の当たりにし、AI 補完の速度と精度に衝撃を受けました。「結果を出すために、利用できるものは最大限利用する」。学生時代に重視していた「過程」よりも、会社で求められる「結果」を出すことの重要性を痛感した瞬間でした。もちろん過程が疎かになって良いというわけではありません。ただ、自分が理解している範疇で時間をかけさえすれば一人でも実装できる内容などに関してはとことん AI を頼っていくべきなのだと思いました。この時、それまでの「AIに頼るのは悪」という考えは、「AI は結果を出すための有益なツール」 という認識へと変わっていきました。

【実践】Claude Code との出会い

しかしそんな私が今では業務で当たり前のように AI、特に Claude Code を活用し、生産性を向上させています。 Claude Code とは Anthropic社が開発した大規模言語モデルであり、ターミナル上で動作するコーディング支援ツールです。Claude Code とは会社の上司の方から下記のような連絡が来たのが始まりでした。

Claude Code の新規付与について
一部のメンバーにも配布してみて業務で活用してみてほしいです。
日置くん、〇〇くん、...、よかったら使ってみませんか?
絶対に使えという強制力はないですが、業務で活用してくれそうなメンバーとして選定しました。

願ってもない朗報です!入社して AI に対する捉え方が前向きになってきた中、数多のエンジニアが使用しているであろう Claude Code の有料プランを使用できるようになりました!

ということでここまでが学生時代から社会人になる過程での AI に対する価値観について紹介でしたが、次からは Claude Code を利用した使用例について紹介させていただこうかと思います。

1. レガシーコードという巨大な壁への挑戦

実務で僕が向き合うことになったのは、歴史ある "レガシーなコード" でした。Perl で記述された知らない文法、意味のわからない変数名、膨大なコード量。正直どこから手をつけていいか分からず、見てしばらくは途方に暮れていました(笑)

ここで Claude Code が真価を発揮します。Claude Code は Gemini や ChatGPT とは異なりリポジトリの中にあるコードをしっかりと読み取った上での回答をしてくれます。

例えばあるテストケースの実装について質問したい場合、通常は該当のテストケースコード、その元となる実装、呼び出されている別の関数など関連のあるものを全てプロンプトとして送る必要があります。そのため、説明も大変な上にトークンの上限などもあり、現実的ではありません。

しかし Claude Code は最初に指定したリポジトリ内にあるコードを解析した上での質問に答えるため、コード理解力が自分の比にならないレベルで凄まじいです。その上で下記のように具体的な質問をすると、丁寧に解説をしてくれるためとても重宝しています。

  • 「このコードは何をしていますか?」
  • 「なぜここでこの関数が呼ばれる必要があるのでしょうか?」

このように、分からない部分をピンポイントで質問することで、一人でドキュメントを読み解くよりも圧倒的に速く、そして深くコードを理解できるようになったのです。Claude Code は、レガシーコードという大海を泳ぐための、最高のナビゲーターになってくれました。

2. チーム開発でのスピードアップ 〜フロントエンド実装〜

Claude Code の力は、新規開発でも絶大でした。フロントエンドでカレンダー機能を実装した際のことです。学生時代に多少触ったことのある分野でしたが、ゼロから自分で書くよりも、まずは Claude Code に基本的な構造を生成してもらった方が圧倒的に速いことに気づきました。

私の従来のスタイルは以下の通りでした。

  1. 実装を原則自分一人で行い、分からない場合はググったり、チームのメンバーに尋ねる
  2. 実装が終わったら AI におかしな部分や誤字脱字がないかどうかを聞く
  3. レビューを投げる

しかしこの手順では最初の実装部分に関して、やることは明確で頭に実装内容は浮かんでいるが、単純に時間がかかってしまうというケースが多々ありました。

そこで、Claude Code を使用して以下のフローに手順を変更しました。

  1. Claude Code に実装要件と実装方針を伝えた上で大まかな実装を行わせる
  2. 出力されたコードを 必ず 目視で確認し、リファクタリングや疑問点を Claude Code で対話を繰り返す

これにより、単純な作業は Claude Code に任せ、自分はより本質的な設計や、ユーザー体験の向上といった部分に思考のリソースを集中させることができるようになりました。

ここで重要なのは、Claude Code に実装させたい内容は必ず自分が理解している必要があるということです。自分自身がどうやって実装できるのか何もわかっていない状態で Claude Code にコードを出力させても正しいコードなのか、不要な実装があるのかどうかなどの判断できません。したがって、必ず自分である程度実装できそうな内容をプロンプトとして送るのが重要です。

このように Claude Code を用いることで作業スピードが上がり工数が削減されたことにより、チーム開発では必須要件ではない追加要件にも時間を割けるようになりました!

Claude Code を使用しなければスプリントの期限的にも必須要件を満たすのが精一杯だったので、作業スピードの向上は、チーム開発におけるタスク完了までの時間に大きく貢献してくれたと実感しています。

【学び】AIは銀の弾丸ではない

AIの活用を続ける中で、1つ痛感したことがあります。それは、「AIの出力を鵜呑みにしてはいけない」 ということです。

AIは時々、もっともらしい嘘をつきます。一見正しく見えるコードでも、特定の条件下でバグを発生させることもあります。AIが出力した内容をしっかりと自分で吟味し、本当に正しいのかを理解するプロセスは絶対に欠かせません。

「自分が理解できない状態で AI を多用するのは危険だ」

この感覚は今も持ち続けています。AI はあくまでツールであり、最終的な責任はコードを書くエンジニア自身にあります。AIに 書かせる のではなく、主体性を持って AI を 使いこなす。この意識が、エンジニアとしての成長に不可欠だと感じています。

【まとめ】AIアレルギーを克服した、その先に

かつてあれほど AI を毛嫌いしていた僕ですが、今では日々の業務に欠かせない最高の存在です。

AI への抵抗感が消えたことで、新しい技術を学ぶことへの心理的なハードルも下がり、エンジニアとしての視野が大きく広がったと感じています。

もちろん、これからも自分の頭で考え、悩み、コードを書くというエンジニアとしてのコアな部分は大切にしていきます。その上で、AI という強力なツールを使いこなし、これまで以上に速く、質の高いアウトプットを出せるエンジニアを目指していきたいです。

もしあなたが、かつての僕のように AI に苦手意識を持っていたり、導入をためらっていたりするなら、まずは小さなことからでも試してみることをお勧めします。きっと、あなたのエンジニアライフをより豊かにしてくれると思います。

最後までご覧いただきありがとうございました!

*1:試しにどんな精度で何ができるのかを試したことがある程度

*2:https://info.atcoder.jp/entry/llm-rules-ja

*3:ティーチングアシスタントの略、講義で教員をサポートする学生スタッフ

*4:職業ではなくプログラムを書く人全般を指しています