AI時代に一線を画すエンジニアになるためには
いまエンジニアが意識すべきことは何か。まず服部氏が挙げたのが「コードに対する責任を持つこと」。そもそもコードを自分で書いても、AIに書いてもらっても、責任を持つことは人間の役割だ。責任感は常に念頭においたほうがいいだろう。
多くの場合、個人ではなくチームで開発している。自分以外の誰かがレビューしたり、メンテナンスしたりすることを考慮すれば、チーム開発を考慮したコードの読みやすさや保守しやすさも必要となる。組織の流儀に合わせてコードを整えていけるようにする配慮が大事だ。つまり、自分とAIだけがわかれば良い「独りよがりのコード」を大量生産するわけにはいかないのだ。
生産性の観点では、つい「プルリクを何個消せたか」を成果の指標として見てしまいがちだ。また、生成AIと開発をしているとAIの生成に身を任せて過剰な実装をしたり、必要以上のテストを書いてしまうかもしれない。後から不必要な機能だと判明したり、メンテナンスやレビューのコストが高いことに気づくこともあるだろう。全体を俯瞰して、本当に開発すべき機能かどうかを正しく理解できているだろうか。
AIを活用してコード作成時間を短縮できても、それが不要な機能なら工数や時間の浪費で終わってしまう。開発の生産性を高めようとするなら、チーム全体の生産性に目を向けられるようになるといいだろう。
「バイブコーダーとエンジニアの何が一線を画すかといえば、コードを読んで何が動いているのかを想像できるようにすること。つまりデコードできる能力」と服部氏は言う。AIは使い方によってはブラックボックス的な側面を持ってしまうことになる。書いている当人には思いつかないようなロジックでコードを生成することもあるだろう。AIが生成したコードを見て、中身を理解して正しいか判断するスキルが重要になる。そのためには「ある程度、作業の量をこなし、経験を蓄積する必要がなる」と服部氏は指摘する。
「あとはエンジニアリングにおける哲学を注入すること。突き詰めていくと、アーキテクチャの世界には哲学が関係してくる」と服部氏。同じ機能を実装するにしても、やり方は多岐にわたる。そのなかでベストだと思う1つを選ぶのがエンジニアの仕事でもある。現場の環境(プラットフォーム)に合わせて、一般的・標準的なベストとは違うこともあるが「うちの環境ではこれがベスト」というところを総合的に判断し、その判断に伴う責任を持つのが人間の仕事となるだろう。
AIを使いこなすためには「予測可能性」がカギ
AI時代を生き抜くエンジニアになるために行動できることはないだろうか?服部氏は「もしAIを使っていなかったら、まずは使うこと」と挙げる。使わないことには始まらない。
続いて「エンジニアとしてスキルを身につけたいのであれば、(生成AIが作成したコードを)運用保守していくとか、ベストに近づくようにリファクタリングしていくなかでコードを理解していく」と説明する。これは外国語などの言語力のようなもので、どれだけ多くコードに接するか。読んだり、書いたり、修正したりすることを通じて、コードの理解力を高めていくことになる。
開発では、必要な特定の機能を作るだけならそう難しくはないかもしれない。しかし、それぞれの機能がどのように作用してくるのかを理解し、整合性を取るのが難しいのだ。実在するいろんなコンポーネントと組み合わせ、運用をしていくなかで「なぜかうまくいかない」事象に直面する。そのなかで、いろんな検証や障害を越えてクオリティを高めていく。
実際トラブルシューティングを通じて学ぶことは多いので、生成AIが作成したコードのアプルーブの先、デブロイ後にどうなるかも追跡して見ていくと勉強になるだろう。「こういうコードの書き方だと、ここで問題になる」などの傾向も分かるかもしれない。
あるいは大きなものを開発してみる。最初は小さなアプリケーションで慣れ、次第に大きいものに挑戦していく。大きなコードになればなるほど(現時点のAIだと)限界が見えてくる。例えば1ファイルのコードが500行を越えるほど大きなものになると、扱いづらくなり非効率になってくる。そうなると、どこで分割すべきかの勘どころがわかってくる。
いくら生成AIが人間の代わりにコードを書いてくれたとしても、そのコードが正しいか人間が判断できなければそのコードは採用できない。人間は生成AIのように素早くコードを書かなくてもいいが、生成AIのコードを理解して正しいか判断できるような能力を持つ必要がある。そうでないと、笑い話みたいだが「生成AIが作成したコードが正しいか判断できないから、結局人間が書きなおすことになった」なんてことが起こりうる。
従来、エンジニアは自らコードを書き、レビューを受け、実践を重ねることでこうした力を培ってきた。これは「エンジニアとして当然備わるべきスキル」でもあった。しかしAIの登場により、エンジニアの役割がコードの「作成」から「精査」へとシフトしつつある今、この「当然のスキル」を新たなエンジニアがどう習得し、経験を積むべきか。その道筋を考えることが重要だろう。
服部氏は「プロジェクトが進むほど、元に戻すのは難しくなります。発散は簡単ですが、収斂や、巻き戻すことは難しいです。なぜなら、発散が進むと依存関係が増えて複雑になるからです。もしきちんとレビューされていなかったり、設計が自組織の哲学や方針に沿っていなくて、コードが何万行にも膨らんで人間の手に負えなくなったりてしまったら、もう捨てるしかなくなってしまいかねません。だから全体のデザインを方向付けしていくこと、ガイドしていくことが人間の役割になってくるでしょう」と話す。
ガイドしていく上で大事になるのが「予測可能性」だと服部氏は指摘する。現時点でAI(特にAIエージェント)は、実装時に人間の想定外のコードを書くことがある。これは、東京から北海道へ向かう旅行者が、最短ルートである空港へ向かわず、車で北上するルートを選ぶようなものだ。そうした非効率なプロセスや迷走を避けるには、適切なタイミングで工程をチェックしていくことがポイントとなる。「経由地が空港か駅か」という最初の選択をチェックすることで、その後の経路予測はAIにとっても容易だろう。重要なのは、初期の意思決定を明確にし、適切なタイミングで進捗を検証するプロセスなのである。