プログラミングにおけるAIとヒトの役割について考察してみた

投稿日: 2025年09月02日
プログラミングにおけるAIとヒトの役割について考察してみた

近年、AIが生成するコードを目にする機会が増えました。

「AIは完璧なプログラムを書けるのか?」という疑問を抱いた方も多いでしょう。しかし、実際の現場では、AIの力を過信することはできません。AIを活用したプログラム作成におけるメリット・デメリットを考察してみます。

AIは「作成者の意図を完全に理解」できるのか?

プログラムの根底には、「作成者が意図する処理をどう表現するか」という設計思想があります。
AIは膨大な学習データをもとに、もっともらしいコードを提案できます。しかし、それが本当に開発者の意図に沿っているかは別問題です。

例を挙げると、

  • 変数名や関数名は適切か

  • パフォーマンスを意識した設計になっているか

  • セキュリティリスクは潜んでいないか

こうした「意図と品質の両立」は、依然として人の判断に委ねられています。

私はvscodeを使用してプログラムを書いています。大半の言語はPHPとJavascriptで、プログラムコードではありませんが、SCSSやHTML(Twig Template含)なども扱います。

vscodeにGitHub CopilotというAIを載せてありますが、最初のころはすごく使いにくかったのに、いつの間にか私の書き方(クセ)を覚えてしまったらしく、いい感じにサポートしてくれるようになりました。

また、私は使っていませんが、プロンプトでAIに指示してプログラムを書いてもらうというのは、下書きにしろ本番用にしろ作成者の意図をプロンプトに反映させるのがすごく難しそうでなりません。

「AIが書いたコード=動くコード」ではない

AIが出力したプログラムは一見動きそうに見えても、実際に動作させるとエラーが発生するケースは少なくありません。

  • モジュールのバージョン違いによる不整合

  • ライブラリの呼び出し方法の誤り

  • 特殊な実行環境における非互換

これらはAIがすべてカバーできるわけではなく、テストやデバッグの段階で必ずと言っていいほど人の介入が必要です。

AIと人、それぞれの「得意領域」

ここで重要なのは、AIを万能な技術者と捉えるのではなく、サポーターと位置づけることです。

  • AIの得意な領域
    ・定型的なコードの生成
    ・既知の設計パターンの提示
    ・膨大なコード例の検索・要約

  • 人の得意な領域
    ・要件の理解と設計思想の反映
    ・例外処理や特殊ケースの対応
    ・品質保証、動作確認、運用設計

AIに下書きを任せ、人が最終的な仕上げと確認を行う流れが、最も現実的かつ効率的な使い方です。

プログラミング知識は「不要」か?

「AIがあるから、プログラミングの知識がなくても大丈夫」という意見も聞かれます。
しかしこれは大きな誤解です。

実際には、

  • エラーが出たときに自力で原因を推測できる力

  • コードを改善・拡張する際に論理的に組み立てる力

  • アルゴリズムやセキュリティに関する基本知識

これらがなければ、AIが出力したコードを正しく使いこなすことはできません。
むしろ、自前でコードを書けるスキルを持つ人ほどAIを有効活用できるのではないでしょうか。

メリットとデメリット

メリット

  • 開発スピードが向上(10時間かかる作業を3時間程度に短縮できる)

  • コードの雛形やサンプルを効率的に入手できる

  • 複数の解法を比較することで選択肢が広がる

デメリット

  • 出力結果の正確性が保証されない

  • 環境依存のエラーは必ず発生する

  • プログラミング知識がないと対応できない

これからの開発スタイル

AIを導入することで、開発スタイルは確実に変化しています。

  • 人がゼロからコードを書く時代から、AIに「たたき台」を任せる時代

  • そのたたき台を人が検証し、改善していくサイクルが標準化する

つまり、AIは「効率化ツール」であり、「代替手段」ではありません。
AIと人間の適切な役割分担を意識すれば、より効率的な開発ができるようになるはずです。

大手のシステム開発会社でも、AIを導入したことにより、作業効率が200%になったということを聞いたことがあります。

以上のことから、AIはプログラミングを大幅に効率化する可能性を持っています。しかし、それは人間の知識や経験を前提とした補助的役割であり、完全な代替にはなり得ません。と結論付けることができるのではないでしょうか。

最適な姿は、

  • AIが下書きを担当

  • 人間が検証・改良を行う

という形です。これにより、作業時間を大幅に短縮しながらも、品質と意図を守ったプログラムを作成できるようになります。