ブログトップ

公開日:

更新日:

13 min read

技術革新

AIとの効果的な共同開発術:90年代の経験を活かす

AIとの効果的な共同開発術:90年代の経験を活かすのイメージ

前回、1990年代の海外エンジニアとの分散開発経験についてお話ししました。そして今、AIと開発を進める中で、不思議なデジャヴを感じています。AIに指示を出す時の考え方が、かつての海外エンジニアとのやり取りとよく似ているのです。

明確な違いは「スピード」だけです。かつて一晩待たなければならなかったレスポンスが、今では数秒で返ってきます。1日1サイクルだった開発が、1時間に何度も繰り返せるようになりました。

さらに嬉しい発見もありました。AIはコーディングだけでなく、デザインワークもこなしてくれます。以前は必須だったワイヤーフレーム作成の工程が不要になり、アイデアを直接HTMLで形にできるようになりました。

現代のAI開発:対話型の共同開発アプローチ

多くの開発者は、AIに対して「このコードを書いて」という1回きりの指示で済ませがちです。確かにGoogleの最新CMでも、そんなイメージが描かれています。しかし、それは本当に効果的なAIの活用方法なのでしょうか。

私の開発スタイルは少し異なります。実は今、このブログ自体もAIとの共同開発で作り上げています。ただし、私はコードを書いていません。プロダクションとディレクションを担当し、AIが生成したコードやドキュメントをレビューし、テストを行い、問題があれば指摘します。疑問点があれば質問し、より良いアイデアが浮かべば相談します。

これは、かつての海外エンジニアとの協業によく似ています。例えば、最近の開発でこんなやり取りがありました:

【私】Cloudflare Pages functionsでバックエンド実装は、ウェブサイトとしてはきれいな構成なのですが、Cloudflare Pages functionsはwranglerでソースコードレベルのデバッグできません涙 workersならデバッグできます。

【AI】なるほど、開発効率の観点から重要なポイントですね! では、以下のように修正するのが良さそうです:

   ### 検索機能

#### アーキテクチャー

- 独立したアプリケーションとして実装
- Cloudflare Workersでバックエンド実装
  - wranglerによるローカル開発環境
  - ソースコードレベルのデバッグ可能
- JSONデータを元にした単純な検索機能

#### データ同期

- メインサイトのビルド時に検索用JSONを生成
- 記事のメタデータ(タイトル、説明、タグ等)のみ格納
- Cloudflare KVまたはR2でJSONデータを管理

#### 開発環境

- wrangler CLIによるローカル開発
- TypeScriptによる型安全な実装
- ホットリロード対応

この構成のメリット:

  1. 本番環境はCloudflareで統一
  2. 開発時は適切なデバッグ環境を確保
  3. wranglerの充実した開発ツールが利用可能

Workersを使うことで、開発体験を損なうことなく、クリーンな構成を実現できますね。

【私】Cloudflare KVまたはR2でJSONデータを管理

必要ですか?動的に変更されませんし、データ量も大したことないように思いますが。

【AI】そうですね。JSONデータは静的なファイルとして扱えば十分です:

  1. データの特徴:

    • 記事数は1000件程度
    • ビルド時に生成
    • 更新頻度は低い(記事投稿時のみ)
  2. アクセスパターン:

    • 読み取り専用
    • 動的な更新なし
   ### 検索機能

#### アーキテクチャー

- 独立したアプリケーションとして実装
- Cloudflare Workersでバックエンド実装
  - wranglerによるローカル開発環境
  - ソースコードレベルのデバッグ可能
- 静的JSONファイルを元にした検索機能

#### データ同期

- メインサイトのビルド時に検索用JSONを生成
- 記事のメタデータ(タイトル、説明、タグ等)のみ格納
- 静的アセットとしてデプロイ

#### 開発環境

- wrangler CLIによるローカル開発
- TypeScriptによる型安全な実装
- ホットリロード対応

KVやR2は不要でしたね。シンプルに静的ファイルとして扱う方が適切です。

このような対話的な開発プロセスには、いくつかの重要な利点があります:

  1. 品質の向上 1990年代、海外エンジニアとの密なコミュニケーションが品質を高めたように、AIとの対話を重ねることで、より洗練された成果物が得られます。

  2. 知見の獲得 AIの提案する実装方法や代替案から、新しい技術的知見を得られることも少なくありません。これは、かつて海外エンジニアから技術的な示唆を得ていた経験と重なります。

  3. 迅速な改善サイクル かつては1日がかりだった修正のサイクルが、AIとの開発では数分で完了します。これにより、より多くの試行錯誤が可能になりました。

設計からプロトタイプへの革新

AIとの開発で特に驚いたのは、従来の開発プロセスが大きく変わったことです。以前は必須だったワイヤーフレーム作成の工程が、ほぼ不要になりました。アイデアを言葉で説明するだけで、AIが直接HTMLとCSSでモックアップを作ってくれるのです。

「ヘッダーにロゴと検索バーを配置して、メインコンテンツは3カラムのグリッドで表示して…」という説明に対して、数秒後にはブラウザで確認できる形にしてくれます。デザイナーやフロントエンド開発者との何度もの打ち合わせが必要だった工程が、AIとの対話だけで完了してしまうのです。

AIが変える開発の未来

今、AIは驚くほど優れたプログラムを書いてくれます。私自身が書くよりも速く、正確で、美しいコードを生成します。 しかし、生成されたプログラムは間違いも多いため、レビューは必須です。油断は禁物です。

ただし、一つ確実に言えることがあります。人間がよく書きがちな「くそコード」は、AIは決して生成しないということです。例えば:

  • 見た目も処理も整理されていない雑然とした冗長なコード
  • パッと見でバグが分かるような危険な実装
  • コードと内容が矛盾する誤解を招くコメント(例:// ユーザーを削除する → 実際にはコピーしているだけ)
  • 言語やフレームワークの作法に従わない力技の実装(例:イミュータブルなオブジェクトを強制的に書き換える)
  • 文化的な配慮を欠いた不適切な命名や略語の使用(例:analysis を意図したanal_で始まる変数群、kokubu01()からkokubu99()まで続く個人名関数)
  • 仕様を理解せずに書かれた的外れな実装(例:社内専用システムで管理者が社員を登録するはずの機能が、外部公開のユーザー登録画面として実装され、クレジットカード登録まで付いていた)
  • 納期優先で書かれた動作しない緊急避難的なコード

こういった、悪い意味での人間臭い特徴が、AIのコードにはありません。 もちろんAIも間違いは犯しますが、その性質は異なります。 AIのエラーは主に仕様の解釈ミスや、エッジケースの見落としによるものです。 少なくとも『社内システムの社員登録機能にクレジットカード登録を付ける』といった、仕様を完全に誤解した実装はしないでしょう。人間の場合、安易なコードの流用や、仕様理解の怠慢が、時として想像を超える”斬新な”実装を生み出してしまうのです。

これは私に一つの問いを投げかけました。 「これならオフショア開発はもう必要ないのではないか?」という感覚的なものです。 もちろん、実際にはそう単純ではないでしょう。 しかし、AIは確実に私のようなフルスタックエンジニアの可能性を無限に広げてくれています。

プロンプトエンジニアリングを超えて

確かに、適切なプロンプトを書くことは重要です。 しかし、それ以上に重要なのは、AIとの継続的な対話を通じて、より良い成果物を作り上げていく過程です。 これは、1990年代に私が学んだ「異文化間でのソフトウェア開発」の本質と同じです。

これまでの経験から、私は現在のAI開発を「超高速な分散開発」として捉えています。 1990年代に学んだ「細かく丁寧に伝える」というアプローチは、AIとの開発でも驚くほど有効です。 技術の進歩を実感すると同時に、基本的なコミュニケーションの重要性は普遍的なものだと感じています。

AIは開発者の可能性を広げるパートナー

かつて多くの日本企業がオフショア開発に活路を見出したように、今度は多くの開発者がAIとの協働に可能性を見出しています。 技術は進化し、開発のスピードは劇的に向上しましたが、「相手に正しく伝える」という基本は変わっていません。 むしろ、海外エンジニアとの分散開発で培ったコミュニケーションのノウハウが、AIとの協働でも活きているのは興味深い発見でした。

重要な違いは、AIが単なるコストダウンの手段ではなく、開発者の可能性を広げるパートナーになり得るということです。 これからのソフトウェア開発は、人間とAIの協働がより一般的になっていくでしょう。 その時、私たちの過去の経験は、思いがけない形で新しい価値を生み出すのかもしれません。