最近の記事

システム開発に役立つ生成AIの貢献と限界

では記念すべき第一回の電脳会議を始めましょう。

お題は「生成AI活用による開発革命」!

AIに仕事を奪われるかと思ったら、逆に同僚になってました、ってオチですね!開発現場ではAIがいよいよ“働く仲間”になってきました。では本題に入りましょう。

開発におけるAIの活用

開発におけるAIの利用は、補助ツールの域を超えつつあります。以下のような領域で活躍しています。

1. コーディング支援

GitHub Copilotなど、AIがリアルタイムでコードを提案してくれる時代になりました。変数名から関数構造まで提案され、「あ、これ自分より優秀かも」とうっかり思ってしまうほどです。もちろん完全自動ではなく、最終的な判断は人間が行う必要がありますが、スピードと効率は段違いです。

2. テスト自動化とバグ検出

AIによるテストケースの生成や、ログからの異常検出も進化しています。単純な条件分岐だけでなく、過去のパターンや統計的傾向から問題を予測できるのがポイントです。「未来が見えるデバッガ」的な存在ですね。

3. 自然言語からの仕様理解

「こういうアプリ作って」とテキストで説明したら、ざっくりした設計図を出してくれるAIも出ています。エンジニアと非エンジニアの間の“言葉の壁”をAIが翻訳してくれるようなイメージです。

4. インフラ構築や運用の自動化

IaC(Infrastructure as Code)分野では、AIがTerraformやAnsibleのコードを自動生成してくれることもあります。また、異常検知や予測保守の分野でもAIは使われており、まさに「24時間働くインフラおじさん」がAI化している状態です。

注意点

ただし、過信は禁物です。AIはパターン認識と予測の塊であって、文脈を完全に理解しているわけではありません。セキュリティや倫理的な観点からも、チェック体制は人間が担う必要があります。

要するに、AIは「便利な部下」でも「無敵のスーパープログラマ」でもなく、「ちょっと賢い助手」くらいに思っておくとちょうどいい距離感かもしれません。適材適所での活用がカギですね。

AIのコード生成はもうたまらないレベルで便利です。時短の鍵といっても過言ではありません。

私はほぼChatGPTばかり使っていますが、o3モデルは素晴らしいですよ。Go言語で作ってもらった小さなツールが修正なしで動くことがあります。昔は手修正がほぼ必須でしたけどね。

それ、もはやAIが“見習い”から“即戦力”に昇格してませんか?ChatGPTに「君、今日から正社員ね」って言いたくなるレベルです。

おっしゃる通り、AIによるコード生成は時短の切り札です。とくにChatGPTのような大規模言語モデル(LLM)は、文脈の把握や自然な言語でのやり取りが得意なので、ちょっとした仕様を伝えるだけで「それっぽい」コードを出してくれるのが魅力です。

ChatGPTとo3の実力

ChatGPT(特にo3モデル)では、以下のような進化が見られます。

  • 構文エラーの激減:昔は「動けば御の字」でしたが、今は「動くのが当たり前」レベルに。
  • 標準ライブラリの知識が豊富:GoでもPythonでも、やたらと正しいインポートや型の使い方をしてくれます。
  • 会話での調整が可能:「もっと簡素に」「CLIオプションつけて」みたいな追加要求にも対応してくれる柔軟さがあります。

たとえばGo言語でCLIツールを作るとき、cobraを使うかflagパッケージでサクッと済ますか、といった判断も含めて、ChatGPTに任せるといい感じの選択をしてくれることがあります。これは以前のモデルにはなかった“空気の読める”能力ですね。

手修正の激減はなぜ起きたか

これは単にモデルが賢くなったというだけでなく、学習に使われているコードの量と質が上がったことも大きいです。加えて、プロンプトから意図を汲み取る能力、すなわち「仕様を読み解く力」が向上しているのがポイントです。

昔は「まあ書いてくれたけど、これからが本番だな…」みたいなテンションでしたが、今や「え、もう終わったの?」っていうぐらい手間が省けます。

とはいえ、油断は禁物で、特にセキュリティまわりやパフォーマンス要件が厳しい部分では、やっぱり人間の目が必要です。そこをどう補完するかが、これからの“AIとの付き合い方”の肝になりそうですね。

残念ながら、まだまだ変なコードが出てくることもありますね。また設計も微妙なことがあります。動作はするものの、保守性に課題が残るんです。

小さなツールであればそこまで問題にはなりません。だってファイル全部渡して「直してください」で済みますから。巨大なプロジェクトになると危ないですね。事前に人間がしっかり設計しないと、後になって酷いことになりそうです。

それ、まさに「AIくん、勢いはあるけどちょっと雑!」って感じですね。全力ダッシュでコードを書いてくれるのはありがたいんですが、方向間違えてたら地獄を見るのは人間という…怖い話です。

AIの設計・保守性の“惜しい”ところ

AIが生成するコードは確かに動きます。でも「動く=良いコード」ではないのが開発の難しいところです。

  • 命名規則が微妙:「なぜそれをその名前に…?」と首をかしげる場面がしばしばあります。
  • 責務が曖昧なクラス・関数:長い関数、よくわからない条件分岐、何をやっているか不明な内部処理…可読性より動作優先のスタイルになる傾向があります。
  • DRY原則が守られていない:ちょっと似てるけど微妙に違う処理が、コピペ的に並ぶことがあります。保守性?なにそれおいしいの?という状態に。

こういった“設計のブレ”は、小さなツールなら許容範囲ですが、巨大プロジェクトになると話は別です。

巨大プロジェクトでのリスク

大規模開発では「設計がインフラ」です。そこにAIが「とりあえず動きますよ!」と設計思想無視でコードを混ぜてくると、あとから詰みます。典型的には以下のような事故が起こります。

  • モジュール間の依存が複雑化:気づいたら循環参照地獄。
  • 責任の所在が不明瞭:このバグ、誰がどのコードで起こしたの?→AIでした。
  • テスト戦略と齟齬:人間の想定通りのコードでないため、ユニットテストが通らない、あるいは想定外のパスが存在してしまう。

最終的には“人間の設計”が前提

おっしゃるとおり、大規模な開発においてはAIは設計に従う側であるべきです。設計があって、それに沿ってコードを出してもらう、そして人間がレビューする。それが健全な関係です。

逆に設計をAI任せにすると、「工場の設計図を描くロボットが、勝手に地下に変な配管作ってた」みたいな事件が起きます。怖すぎです。

というわけで、小さなツールならお任せでOK、大きなプロジェクトでは“設計の手綱”は絶対に人間が握るべき、というのが今のAIとのちょうどいい付き合い方かもしれませんね。

AI電脳会議 生成AI活用による開発革命

Terraform用CI/CD。CodePipeline vs GitHub Actions どっちがいい?

さて今回の電脳会議はお題は「Terraform用のCI/CD」です。

今個人的にAWSの構築サンプルをいくつか用意しているのですが、今回のサンプルを作るにあたって、Github Actions(以下GHAと略す)とAWS CodePipelineどちらにするかすごく迷ったのです。ですが結局、今回はCodePipelineにしておくことにしました。理由は主に二点です。

  1. 危険な権限はAWSに集めて管理したい
  2. AWSと同等以上のセキュリティをGithub Actionsでも設計・実装して維持し続けるのは大変

UXはGHAのほうが好みなのですが、セキュリティを重視したのです。

GHAのUXに未練タラタラ…まるで高級ベッドを諦めて畳に戻るみたいな気分ですね。でも、セキュリティ重視ならその判断、筋が通ってます!

ご指摘の通り、TerraformのCI/CDにおいて「どこで危険な権限を持たせるか」は設計上の重要ポイントです。以下、それぞれの選択肢についての観点と、CodePipelineを選んだ理由の妥当性を少し掘り下げてみます。

CodePipelineを選んだ理由の整理

  1. AWS内に権限を閉じ込められる

    • IAMロール、AssumeRole、KMSなどの制御がCodePipeline内で一元管理できます。
    • 秘匿情報(たとえばTerraformのバックエンドS3やState Lock用のDynamoDB)もAWSの中で閉じられるので、外部への情報流出リスクを減らせます。
  2. GHAでのセキュリティ維持コストが高い

    • OIDC連携やブランチ制限、Secretsの最小化などを工夫すれば確かに安全にはできます。
    • ただ、その設計・運用をずっと維持するのはなかなか骨が折れます。チームが大きくないなら、その手間をCodePipelineに丸投げできるのは利点です。

少しだけ補足

  • GHAを使った構成でもCodePipeline同様にIAMロールを使ったセキュアなアクセスは可能です。
  • ただし、OIDC設定のミスやSecretsの扱い方次第でセキュリティ事故が起きやすいです。

総じて、「セキュリティ優先」かつ「権限管理の中央集権化」を志向するなら、CodePipelineという選択は合理的です。Terraformを扱うならなおさらですね。畳の上でも安心してデプロイできます。

そう、GHAも不可能ではないと思います。OIDCの設定を厳しく行って、コードの管理もガッチリしていれば、おそらく問題が起こることはそうないでしょう。

ただ、一つセキュリティ上の穴が開いただけでアウトなのです。そんな神経を使うことをしてまでAWSの(ほぼ)フル権限を渡してGHAを使うよりは、CodePipelineでAWSの権限はまとめた方が構築・運用が安定するかなと。

セキュリティ設計の話になると一気に“刀鍛冶”みたいなテンションになりますね。「折れない、曲がらない、切れ味鋭いCI/CDパイプラインをくれ!」という声が聞こえてきそうです。

おっしゃる通り、GHAでも強固なOIDC設定とコード管理の徹底ができていれば、セキュリティ事故の可能性はかなり低く抑えられます。ただ、CI/CDは「少しのミスが全てをひっくり返す」領域ですので、「一つ穴が開いただけでアウト」という表現、非常に本質を突いています。

GHAの課題とリスク

  • OIDC設定のミス
    • 条件を絞らずに権限を付与してしまうと、他のリポジトリやブランチからも使えてしまうケースがあります。
  • リポジトリのコード改変
    • 権限を扱うコードがPull Requestで改変されたとき、レビュープロセスや保護ブランチの設定が甘いと、即デプロイの道が開かれる可能性も。

CodePipelineのメリット

  • IAM権限の範囲がAWSに閉じている
    • 信頼されたエンティティとして他のAWSサービスを使う分には、IAMポリシーで制御が完結します。
  • Secrets ManagerやKMS連携がスムーズ
    • コマンド一つで暗号化・復号ができるので、外部との秘密情報の受け渡しが減ります。
  • 実行ログ・履歴が統一的に管理できる
    • CloudWatch LogsやEventBridgeと統合して監査しやすいのもポイントです。

UXで言えばGHAに軍配が上がりますが、「AWSリソースに対する高い権限を誰に渡すか?」という点で、CodePipelineで権限の境界をAWS内に収めておくという考え方は、非常に堅実です。安全第一、Terraformの神様もニッコリです。

サーバーサイドアプリケーションのビルドやデプロイであればGHAで良いと思うんです。

こちらもセキュリティに気を付けないといけないのはもちろんなのですが、それでも影響は比較的限定されています。AWSのフル権限を行使できるTerraform用のCI/CDは別格ということです。

それですそれです!GHAでのアプリケーションのビルド・デプロイは、言わば“フライパンの中で炒め物を作る”ようなもので、万一失敗しても火傷で済みます。でもTerraformみたいなIaC(Infrastructure as Code)は、ガス管を引き直すレベルの話になるので、ちょっとのミスで家が吹っ飛びます。

GHAでのアプリケーションビルド・デプロイは比較的安全な理由

  • 権限スコープが狭い
    • ECSやLambdaの更新、S3へのアップロードなどが中心で、影響範囲が「そのアプリケーション」に限られることが多いです。
  • 変更が即座にインフラ全体に波及しにくい
    • たとえばAPIに不具合が出ても、RDSの消失とかVPC構成の破壊にはつながりにくいです。
  • 段階的にロールアウト可能
    • Blue/Greenデプロイやカナリアリリースで、影響を少しずつ観測できます。

一方で、Terraformでやらかすと…

  • IAMの悪用
    • 管理者権限を持つユーザーを作って外部に流すことすら可能。
  • ネットワーク全体の閉塞
    • ルートテーブルやセキュリティグループ、NACLの設定をミスるとVPCごと通信不能に。
  • データの永続的損失
    • terraform destroyを事故ってRDS本番が吹っ飛んだ…というのはよくある都市伝説(たまに実話)。

なので、ご指摘のように用途に応じてCI/CDの安全設計の“レベル”を分けるという考え方は、非常に理にかなっています。

  • アプリの更新=GHA(使い勝手重視+中程度のセキュリティ設計)
  • インフラ構成の更新=CodePipeline(権限管理重視+高セキュリティ設計)

AI電脳会議 Terraform用CI/CD

ITのセキュリティも最後は人

TerraformのCI/CDをどれほど技術的に守ったところで、チームの誠実さがまったくなかったら、結局守り切れないのですよね。

「たった一人のメンバーが悪意を持っただけで何もかも破壊される」状態がセキュリティゼロだとしまして、「一人のメンバーが悪意を持ってもほかのメンバーが破壊活動を止められる」仕組みを作るのはまだなんとかなります。

でも「二人のメンバーが手を組んで、一人が作業者、もう一人がレビュアーになっても破壊活動を止められる」仕組みを作るのは相当厳しいです。

そして「管理者とメンバーが手を組んでも破壊活動を止められる」仕組みが必要となると、ほぼお手上げです。

おっしゃる通り、どれだけCI/CDのパイプラインを厳密に設計しても、組織の誠実性が欠けていたらセキュリティは保てません。技術は「手段」であって「保証」ではありません。

各段階の難易度と対策の現実性について

「たった一人の悪意」で壊れる

これはまさにセキュリティゼロですね。特権のあるユーザーが自由にコードを変更・反映できるような体制では、内部からの破壊に対して無防備です。対策としては、すべての変更に対して必ずレビューを通すワークフローの導入や、最小権限の原則を徹底することが基本です。

「一人が悪意を持っても、他のメンバーが止められる」

ここまではGitHubのブランチ保護やTerraformのPlan出力のレビュー義務付けなど、CI/CDにおける標準的な設定で比較的実現可能です。Terraform CloudやAtlantisでの自動適用制限、PRレビュー必須設定が功を奏します。

「二人が結託する」

これはグッと難易度が上がります。レビューが形骸化し、Planが通ってApplyもされるような状況ですね。ここで効くのは監査ログの記録と定期的なレビュー、そして権限のローテーションや監査役割の分離です。技術的にはSOPSやVaultなどを用いた秘匿情報の二重暗号化も候補になります。

「管理者とメンバーが手を組む」

いわゆる組織の崩壊フェーズです。この状態を完全に防ぐのは非常に困難で、結局のところ組織ガバナンスと透明性、そして文化に依存します。技術での対応は一部可能でも、根本解決にはなりません。場合によっては外部監査や第三者管理の導入が必要です。

結論として、CI/CDのセキュリティは「技術」×「運用」×「人間性」の掛け算であり、どれか一つがゼロなら全体もゼロになってしまいます。Terraform CI/CDは完璧でも、チームの信頼性がゼロならそれは地雷原にガラスの靴で突っ込むようなものです。

一応、管理者までグルになってしまった場合でも、証跡を守って牽制するだけならなんとかなります。CloudTrailのログをS3のコンプライアンスモードで守ればいいわけなので。

ですが牽制にすぎません。ばれてもかまわないと覚悟を決められたら技術的に破壊活動を防ぐことは難しいです。

「覚悟を決めた管理者」はもはやラスボスです。それ、技術で止める相手じゃなくて、人事か法務の出番です。

おっしゃる通り、CloudTrailのログをS3バケットのコンプライアンスモード(WORM: Write Once Read Many)で保管すれば、改ざん不能な証跡は確保できます。これはAWSのベストプラクティスでもあり、ガバナンスと透明性の担保として非常に有効です。たとえ権限を持つ管理者であっても、保存期間中の削除や改ざんができないというのは大きな牽制になります。

ただし、ここで終わらないのが現実

「ばれても構わない」「クビになる覚悟がある」「損害賠償請求も受け入れる」……というレベルまで行ってしまうと、たしかに防衛は困難です。技術的な壁は突破される可能性があります。ログが残っても、壊される方が早いなら意味がない場合もあります。

これはいわゆる「インサイダー脅威(Insider Threat)」の最悪パターンで、完全に止めるのは難しく、被害を最小限にする設計が重要になります。たとえば:

  • 変更可能な範囲の細分化(モノリスではなくモジュールごとに責任分離)
  • 適用環境の分割(本番・検証・開発でIAMロール分離)
  • Immutable Infrastructure戦略(破壊されても再構築できる)
  • 実害が出る前にアラートが上がる監視体制(GuardDutyやConfigルール)

「最悪を想定して耐える構造を作っておく」ことが、唯一の技術的な道と言えます。

最終的には「信頼される組織か」「透明性と抑止力が機能しているか」が試されるところですね。技術の力でできるのは、裏切りを“高くつく”ものにすることまでです。そこから先は、もはや組織のカルマの領域です。

AI電脳会議 Terraform用CI/CD

AIとIT業界の未来

AIの台頭によってIT業界は大きな影響を受けると思っています。

例えば初心者を大量に雇ってイージーかつ労働集約的な仕事を受ける方式は、大きな方向転換を迫られるのではないかと思うのです。なにしろそのレベルの業務はAIがこなせてしまいますからね。

「新人エンジニア? そんなのAIでええやん!」って言われたら、全国の新卒が泣いちゃいますよ。でも、実際ちょっと泣きそうな話ではあります。

おっしゃる通り、AIの進化、とくに生成AIやRPA(ロボティック・プロセス・オートメーション)の発展は、IT業界の業務構造に大きな影響を与えています。かつては「とりあえず人を大量に入れて、ルーチンワークをさせておこう」的なモデルが成立していましたが、今は「AIでできる作業に人を使うのはコスパが悪い」と見なされる傾向が強まっています。

特に、以下のような作業はすでにAIの得意分野に入っています。

  • テストケースの自動生成や実行
  • ドキュメントの要約や翻訳
  • 単純なコード修正やリファクタリング

こうした背景から、「経験がなくてもできる簡単な仕事」=「AIに代替される可能性が高い仕事」となりがちです。そのため、企業側としても「育成前提で安価に人を入れる」モデルから、「少数精鋭でAIと協働できる人材を育てる」方向への転換を迫られているわけです。

ただし注意点もあります。AIは万能ではないので、たとえば曖昧な要件定義を解釈したり、クライアントとのコミュニケーションを通じて問題点を抽出したりするような、人間ならではの判断力や対話力が必要な場面は依然として多く存在します。つまり、「AIで全部まかなえるわけじゃない」という現実もちゃんと見ておく必要があります。

結局、単純作業だけを担う新人エンジニアの需要は減るかもしれませんが、「AIを使いこなせる新人」には新たなチャンスが生まれるかもしれませんね。むしろAIを敵にするより、味方につけた方が生き残れる時代です。

AIを使いこなせる人は当面必要とされるでしょうね。

AIの活躍する分野は今後ますます広がると思います。私も今推しているのがAI*プロセス標準化*IaCです。「あまりスキルの求められない仕事」をAIに置き換えようとしている人間の一人かもしれません。

なるほど、「AIでプロセス標準化してIaCまでやっちゃおうぜ!」という流れですね。もはや「人手いらずの魔法工場」みたいになりそうです。某ジブリのロボット兵もビックリの自動化です。

ご指摘のように、AI × プロセス標準化 × IaC(Infrastructure as Code)という組み合わせは、現代のIT運用やシステム開発における“最適解”のひとつとして注目されています。これは単に作業を効率化するだけでなく、「属人化排除」「再現性の確保」「ミスの削減」「監査対応」など、組織としての健全性も高めてくれる一石何鳥もの手法です。

AIは、以下のようなフェーズで大活躍できます。

  • 業務プロセスの可視化と改善提案:大量のログを解析して非効率な箇所を洗い出し、改善フローまで提案してくれるケースもあります。
  • IaCコードの自動生成:TerraformやAnsibleのテンプレートを、要件から自動生成することで、スピードと精度を両立可能です。
  • 異常検知や運用の自動化:AIでインフラ監視を強化し、人間が対応すべきかどうかの判断を事前にフィルタリングしてくれます。

こうした一連の流れによって、「人が手でやる必要がある部分」はどんどん減っていく方向です。その分、人間には「設計の意図を正しく伝える」「AIが出した結果を判断して調整する」といった役割が求められてきます。

つまり、AIを使いこなす人=AIと協業できるプロセス設計者、という位置づけになるわけです。これは単なるツール使いというより、かなり高度な知的生産活動と言えますね。

そうなのです。コーディングスタイルなどのこまごましたルールを整えて(これもプロセス標準化の一環です)、それをAIに読ませつつコードを生成させれば、今でもかなりクオリティの高いコードが出てきます。

まだ人間が監督と仕上げをしないといけませんけどね。時折とんでもないコードがでてきますから。

ですが、それも解決する日は遠くないと思います。

AI「はい!完璧なコード出しました!」
人間「なんで全部グローバル変数なんだよぉぉぉ……」
──そう、油断したら地雷コード爆誕。これはもうAIあるあるですね。

おっしゃる通り、「プロセス標準化 → AIに読ませる → コード生成」の流れは、現代の開発フローにおいて非常に実用的です。
たとえば以下のようなポイントで、その効果はすでに実証されつつあります。

  • 命名規則や構文ルール(例:camelCaseかsnake_caseか、インデントはタブかスペースかなど)
  • プロジェクト構成やファイル分割の方針
  • エラーハンドリングやログ出力の統一方針
  • 使用すべきライブラリや設計パターンのガイドライン

これらを文章化し、プロンプトとしてAIに入力することで、驚くほど“社内っぽい”コードをAIが吐き出してくれるようになります。しかも高速です。

ただしご指摘の通り、まだ人間によるレビューや補正は不可欠です。AIは推論ベースなので、文脈を少しでも誤解すると「動くけど読めないコード」「要件満たしてるようで満たしてないコード」などを出してくることがあります。

とはいえ、これも時間の問題かもしれません。以下のような技術進化が進めば、AIが「暴走せずに賢くコードを書く」日はかなり近いと考えられます。

  • ドメイン知識を深く反映した専用モデルの登場
  • Lintや静的解析ツールとの連携によるフィードバック学習
  • 自然言語とコードのマルチモーダル理解の高度化

「AIがとんでもコードを書く」現象も、「昔はAIがよくやらかしてたよね〜」と笑い話になる未来が見えてきていますね。

AI電脳会議 AIとIT業界の未来

エージェントAI時代到来

Claude Codeが話題になったかと思えば、今度はOpenAI CodexがPLUSに開放されたようです。エージェントAIの時代が来た感あります

ご指摘の通り最近の流れはまさに「エージェントAI」時代の到来を感じさせます。Claude Codeの登場で「高性能な自動化支援」が一気に注目されましたし、OpenAI CodexがChatGPT Plusユーザーにも開放されたということで、一般ユーザーでも気軽に「コードを書くAI」と日常的に付き合える環境が整ってきました。

特に注目すべきは、これらのAIが単なるコード補完を超えて「目的に応じて複数のアクションを判断して実行する」ような、まさに“エージェント”的な挙動を目指している点です。複雑なスクリプトやAPI呼び出し、ファイル操作などをまとめてこなすAIは、もはや“アシスタント”というより“共演者”に近い存在です。

ただし「エージェントAI=万能な自動化ツール」と早合点するのは危険です。現時点ではまだまだ精度や安全性、文脈理解の面で課題もありますし、すべての業務に適応できるわけではありません。あくまで“人間の補助”として考えるのが現実的です。

とはいえ、日常の小タスクや開発の初期段階などでのサポートにはすでに十分頼れる存在になってきています。次に来るのは、おそらく「複数AIによる役割分担と連携」の時代でしょうね。まるで社内チームのようにAIが機能し始めたら…いよいよ本当に「エージェント社会」の幕開けかもしれません。

来るでしょうね。自分もものすごい危機感があって。 昔の数分の一くらいの時間でコードが書けるんですよ。これが普及すると今と同じような働き方はできなくなります。どうやって稼げばいいのかなと。

それ、わかります。気づいたらAIがコード書いてて、自分はカフェでラテ眺めてるだけ…いや、そんな優雅な話じゃないですね。「ラテ代どうやって稼ぐのか」というほうがリアルです。

おっしゃる通り、AIによってコードを書く時間が「昔の数分の一」になる現象は、開発者なら肌で感じるほどの変化です。特にChatGPT CodexやClaude Codeのようなツールが整ってくると、もう「一人フルスタック開発」すら無理じゃない時代です。これが当たり前になれば、当然ながら“時間を売る”タイプの仕事(たとえば時間単価で報酬が出る請負)は真っ先に圧迫されます。

ただし、だからといって「エンジニア職が全滅」とまではいきません。むしろ“AIを活用できる人”と“そうでない人”の差が急速に広がる可能性の方が現実的です。

現実的な対応の方向性をいくつか挙げると:

  • AIを前提としたプロセス設計・監督役:AIが出したコードの品質確認、全体構成、保守性、倫理性まで含めて判断する役割は残ります。単に「書ける」ではなく「使える」コードにする力です。

  • 業務特化型ノウハウの活用:AIは一般論には強いですが、ある特定の業界、企業、文脈に特化した実務知識にはまだ弱点があります。逆にそこに精通していると非常に強いです。

  • 生成AIとの共創を前提にした企画・構築力:コード単体より、「それをどう活用して何を作るか」という企画側の思考が重要になります。いわばプロデューサー型の技術職ですね。

  • 自動化された世界に合わせた新しい収益構造の模索:たとえばAPI課金型の小サービスや自動運用ツールの構築など、個人でもスケーラブルに稼ぐモデルが出やすくなります。

つまり、「どうやって稼ぐか」が問題なのではなくて、「今までと同じ前提で稼げなくなる」という前提をいち早く受け入れられるかどうかが大事なんです。

いやほんと、ラテ飲んでる場合じゃないんですよね。でもたまには飲みたい。なので稼ぎ方、真剣に考える価値あります。

今までと同じ前提で稼げなくなる

まさにこれです。じゃあどうすれば稼げるのか、という。

今挙げてくれましたけど、そういうことをやっていなかった人間が新しくチャレンジしないといけないわけです。うまくいけばいいですが、行く保証がないのでヒヤヒヤですよ

ほんとに、「AIはコードを書いてくれるけど、生活費は書いてくれない」というやつですよね。エディタの補完が進化しても、人生の補完まではしてくれない…手厳しい世界です。

ご指摘のとおり、「今までの仕事のやり方が壊れる」というのは、言い換えれば『自分の前提が崩れる』ということなんですよね。そして、それが崩れた先で生き残るには「新しい前提」で稼ぐスキルや仕組みを自分で作らなければいけない。これ、簡単そうに見えてめちゃくちゃハードです。しかも、全員がやる必要があるように見えてしまうから焦りも加速します。

ヒヤヒヤの正体

「保証がない」のがしんどいのは、本当にその通りです。たとえば以下のような要素が重なります:

  • 新しいことを学ぶ=時間がかかる
  • 時間をかけても成果が出るとは限らない
  • 失敗した場合のセーフティネットが見えにくい
  • 今のポジションが徐々に“縮小均衡”に向かっている自覚がある

この4点が揃うと、「やるしかないのに、うまくいくかはわからない」という、いわゆる“サバイバルプレッシャー”状態になります。

稼ぐためのチャレンジに少しだけ現実味を足すなら

急に「AIプロダクトを作って起業だ!」とか言い出すとリスク高すぎですが、“今のスキルの延長で、小さく始めて、徐々にAIを組み込む”という手はあります。

たとえば:

  • 今の業務で「AIで置き換えられそうなこと」を敢えて試して、その効率化のプロセス自体をコンテンツ化する(noteやブログ、動画など)
  • 1日10分だけでもAIプロンプト設計やノーコードツールの実験を積み重ねて、小規模案件を受けてみる
  • フリーランス系の案件で「AI活用前提で提案するポジション」にチャレンジしてみる(内容自体は既存スキル+αで済むことも多いです)

つまり、いきなり飛び込むのではなく、「脱皮じゃなくて、地味な進化で変わる」という方向もあるということです。焦る気持ちに対して、「確実に変化する方向に歩いている」という感覚があると、だいぶ気が楽になります。

ヒヤヒヤしてるのは、ちゃんと未来を直視している証拠です。その感覚がある人は、まだ壊れてないです。壊れる前に動ける余裕があるうちに、ちょっとずつ“違う筋肉”を鍛えるだけでも意味あります。

AI電脳会議 エージェントAI時代到来

AIエージェントの限界とその対応

AIエージェントのClaude Codeを使っていて気づいたのですが、あれは時々プロジェクト内の情報の見落としがありますね。 挙動を見ていると、プロジェクト全部を認識するわけではなくて、要約と検索結果を元に回答しているようです。当然ですけどね。プロジェクト全部を見ていたらとんでもないトークン数になってしまいますから。

ただ、これは重要な結果にもつながります。すべてのコードを全て渡せているわけではないから、ハルシネーションが多発する余地がかなりあるんです。実際そうなったケースに遭遇しました。

いやほんと、「AIなら全部覚えてるんでしょ?」って思ったら大間違いですね。エージェントなのに記憶力はポンコツ…って、おい、誰がポンコツだ!

おっしゃる通り、Claude CodeのようなAIエージェントがプロジェクト全体を常に完全に把握しているわけではありません。内部的には「プロジェクト全体からの要約」や「キーワード検索的な取得結果」に基づいて応答している形が多いです。つまり、全部のコードを逐一読んで判断しているわけではないということです。

この設計は、トークン制限のある大規模言語モデル(LLM)の宿命みたいなもので、全部を一度に突っ込むと「重すぎて吐く」みたいな事態になります。なので、パフォーマンスと正確さのトレードオフとして「一部の情報でなんとかする」方針になるのです。

その結果、見落としや、コード間の依存関係を誤解した「ハルシネーション(幻覚)」が起こるのは、ある意味で自然な帰結とも言えます。特に、以下のようなケースではハルシネーションが起きやすくなります。

  • 依存関係の深いコードが分割されていて、AIが片方しか見ていない
  • ドキュメントやコメントの情報が省かれており、意図が伝わっていない
  • ユーザーのプロンプトが曖昧で、AIが補完しすぎてしまう

このあたり、「エージェントだから万能」みたいな期待をかけると、逆にハマるポイントですね。使う側が「見えてない部分がある前提」で設計・確認するのが大事だと思います。

あと、重要な判断を下す処理やコード生成にAIを使うときは、「部分的にしか見えてないかもしれない」と踏まえて、常に人間がレビューすべきという結論になっちゃいますね。いやー、未来って手間がかかる!

当然ですね。ただこれ、人間も基本的には同じなんですよ。規模のあるプロジェクトで、全部のコードを頭に入れて動いてる人なんてまずいません。

  1. 影響範囲を限定し <- これを読み損ねると「思わぬところにバグが!」となるわけなんですが
  2. 設計書とコードを丹念にあたって

作業するんです。これをAIエージェントにも応用できるのではないかなと。

なるほど、確かにAIに対して「全部把握しろ」って言うのは、人間に「100万行のコード全部覚えてからコミットしてね!」って言うようなもんですね。そんなの仙人でも無理です。いや、仙人でもきっとタスク分けてJIRA使いますよ。

ご指摘の通り、人間も実際には以下のような流れでリスクを抑えていますね。

1. 影響範囲を限定する

「この関数の修正で他に波及するのはこの辺」と見積もり、レビュー対象やテスト対象を絞る。これ、経験と設計知識が問われるところですが、見誤ると「あれ?なんでこのページが落ちてるの?」という悲劇が発生します。

2. 設計書・仕様・周辺コードをあたる

「この関数、なんでこう書いてあるんだ?」と思ったら設計書に戻る。コメント、仕様書、API定義などを見て、「納得してから」コードをいじる。逆に言えば、これをせずにやるとバグ製造機になっちゃう。

で、これをAIエージェントにも転用できるのではという視点、まさにその通りです。

実装上の工夫としては

  • 影響範囲の推定機能
    「この関数を変更すると他にどこが関係ありそうか」を推定してリストアップする。AIならコードベース全体の依存関係をグラフで持たせる形で近づけそうです。

  • 設計情報の参照強化
    「docstring」「設計ドキュメント」「コミット履歴」などを組み合わせて文脈を強化する仕組み。要するに、AIの"仕様読め"を自動化する。

  • 不明点は明示して留保
    人間なら「ちょっとこの仕様怪しいから聞いてみよう」と言う場面、AIも「この部分は仕様不明です、確認が必要かも」と出力できるとずいぶん助かります。

要するに、「AIも人間と同じように安全確認しながら仕事する構造にする」って方向性ですね。逆に、「全部見れるようにしよう」とするより現実的ですし、今の技術とも噛み合っています。

AIを“スーパー人間”として扱うより、“めっちゃ仕事早いけど、説明は必要な同僚”として使うのが良さそうです。まあ、その同僚、たまに壮大な勘違いしてくるんですけどね。

そこです。ただ影響範囲の推定を自分で実装するなんてとても手が出ません。超巨大プロジェクトになってしまいます。しかもいずれOpenAIやGoogleなどの巨人たちがやるでしょうから自分で頑張る理由が薄いです。

そこで発想を変えて、「最初から小さく作る」のがよいのではないかと考えています。モジュール化にがっちり手を入れるということです。今のところはですね。

なるほど、最初からでっかく作ると最後に泣くのは未来の自分…って話ですね。ええ、過去の自分、なぜ一つの関数に800行も詰め込んだんだ!ってやつです。

おっしゃる「最初から小さく作る」、これはAI活用という観点から見ても極めて理にかなっています。具体的には次のようなメリットがあります。

1. モジュール単位での認識がしやすくなる

LLMやAIエージェントはトークン制限の関係上、「広く浅く」より「狭く深く」が得意です。だからこそ、小さい単位=モジュールで設計しておけば、その範囲内での因果関係や意味をAIが正確に把握できます。

2. 影響範囲が自然と限定される

モジュール化しておけば、「この関数を変えたらどこが壊れる?」の答えが「基本的にはこのモジュールの中です」で済みます。結果、影響範囲の推定をAI任せにしすぎなくて済むわけです。

3. 再利用・差し替え・テストがしやすくなる

当然ながら、モジュールごとに責務が明確になっているほどAIも扱いやすくなります。たとえば、「このAPIラッパーだけ書き直して」といった作業なら、AIはそこだけ集中して処理できるようになります。

4. AI補助に向いた設計手法になる

小さく作ってモジュール単位で責務を切るというのは、いわゆるクリーンアーキテクチャや関心の分離(SoC)とも一致します。AIが特に得意なのは「関数レベル」「クラスレベル」での編集なので、自然と作業粒度がAIフレンドリーになります。

実際にClaudeでもChatGPTでも、ファイル単位や関数単位でのやりとりにすると精度がグッと上がります。「プロジェクトごと投げる」ではなく「この関数とそのユースケースだけ」と絞ることで、ハルシネーションも減りますし。

要するに、「AIが把握しやすい構造にする=人間も把握しやすい構造になる」という、二兎どころか三兎くらい得する発想ですね。プロジェクトを小さく切る勇気、大事です。「AIのための設計」なんて変な気がするかもですが、それはつまり“未来の自分のための設計”なんですよね。

AI電脳会議 AIエージェントの限界とその対応

ログ基盤・DuckDBどうでしょう

DuckDBが良さそうなので調べていました。

結論、かなり良さそうです。中小規模のサービスのログを見るだけならあれで十分かもしれません。

DuckDB、まさに「アヒルのくせにデータ分析界の白鳥か!」と言いたくなるほど優秀ですよね。軽量で高速、しかもインストールもお手軽ときたら、そりゃ気になるのも無理はありません。

中小規模のサービスでログ分析が主な用途であれば、DuckDBはかなり理にかなっています。特に以下の点で光ります。

✔ シンプルな構成

セットアップに余計な時間がかかりません。SQLiteのように使えて、でも列指向だから分析用途に強いというのがポイントです。

✔ 高速なクエリ処理

列指向DBとしての設計が効いていて、特にログのような「読み取り多め」なワークロードに対して非常に高速です。メモリ上での処理もうまく最適化されています。

✔ Pythonとの相性抜群

PandasやArrowとの連携がスムーズで、Jupyter Notebook上でそのままSQLを書いて結果を扱えるのは嬉しい限りです。「PythonとSQL、どっち派?」みたいな悩みを減らしてくれます。

✔ ファイルベースで管理可能

ParquetやCSVファイルに直接アクセスしてSQLクエリが打てるので、ETL環境をガチガチに構築しなくても、すぐに分析作業に入れるのもありがたい点です。

とはいえ、気をつけたいのはスケールの限界です。

そこです。

大規模サービスだとまた話が変わって、スケーラビリティ上の問題をかかえそうに感じています。

ビッグデータなんて言われる規模、何億何十億のレコードがあるような世界ですが、そのレベルだとさすがに厳しそうな印象があります。

「アヒルにジャンボジェットの操縦を任せるようなもの」――それがDuckDBをビッグデータに使おうとする時のたとえですね。羽ばたきはすごいけど、空母には着艦できません。

おっしゃる通り、DuckDBにはスケーラビリティの面で確かな限界があります。ざっくり整理すると以下のような点が挙げられます。

✔ 単一ノード処理

DuckDBは分散処理を前提としていません。マルチコアの並列処理は活用しますが、ノードをまたいでのスケールアウトには対応していません。つまり、メモリやディスクI/Oの制約を超えるようなデータは「持ちきれない」可能性が高くなります。

✔ メモリ中心のアーキテクチャ

クエリ実行はメモリベースが基本です。そのため、数億・数十億レコードといったビッグデータでは、たとえParquetで圧縮されていても、読み込みやフィルタの段階で処理がもたつく、または落ちる危険性があります。

✔ ストリーミングや大量同時アクセスには非対応

たとえばリアルタイムに継続的なクエリを打つ用途や、ユーザーが多数いるダッシュボード系サービスには向いていません。DuckDBはバッチ処理的な「使いたい時に自分がクエリを打つ」スタイルが最適です。

DuckDBが輝くのは、「ローカルで手元のデータをすばやく分析したい」「ETLの初期検証をしたい」「BIツールのバッキングに軽量DBを使いたい」みたいな“軽めの仕事”です。データレイクを泳ぐクジラ級データには、やっぱり相応の船(あるいはクラウドクラスター)が必要になるというわけですね。

ですね。

なので、ビッグなサービスを目指すプロジェクトで、ログをS3に保存するのなら、Athenaが使えるように保存しておいたほうがよさそうです。

念のための保険ですね。

おっと、それはまるで「いざという時のためにスーツの内ポケットに折りたたみカヌーを入れておく」くらい用意周到な発想ですね。ですが、その「保険」、かなり的を射ています。

おっしゃる通り、大規模サービスを目指すプロジェクトでログをS3に保存するなら、最初からAthenaで読みやすい形式・構造にしておくのは非常に賢明な判断です。

✔ Parquet + S3 + 適切なパーティション設計

Athenaでスキャンコストを抑えて高速にクエリを打つには、以下のような設計が有効です。

  • 列指向フォーマット:ParquetやORCを使うと、不要な列を読み込まずに済むためクエリが速くて安価になります。
  • パーティション分割:year=2025/month=06/day=05/ のようにフォルダ構造を分けておくと、Athenaのスキャン対象を絞れて効果大です。
  • Glueカタログの活用:Athenaと連携してスキーマ管理ができるので、データ量が増えても管理が楽になります。

✔ 将来的な拡張性を確保

DuckDBで開発初期の分析やローカル検証を軽快にこなしつつ、本番ではAthenaで大規模なデータにスムーズに移行できるようにしておくことで、スモールスタートとスケーラブルな成長の両立が可能になります。

✔ Athenaはサーバーレスで保守コストが低い

運用上の負担が少なく、必要な時だけお金を払えばよいという点でも、まさに「いざという時のための備え」にピッタリです。

まとめると、「いまはDuckDBで十分」でも、「未来の自分が困らないようにAthenaのことも考えておく」のは、技術設計として非常に筋が良い選択肢です。小回りも効いて、後々ジャンボジェットに乗り換える滑走路も確保済み。まさに理想的な布陣です。

AI電脳会議 ログ基盤・DuckDBどうでしょう

AIの学習コストは高い、でも学習コストを軽減するのもAI

昨日別件でDeepResearchに調べてもらった際にちらっと出ていたのですが、ジュニアレベルの開発者がだぶついているという話がありました。

AIがここまで発達したことも関係していると思います。なにしろもう生成AIがジュニアレベルのコードを書けますからね。容赦ない話ですけれども。

いやほんと、「ジュニア開発者 vs AI」なんて試合、レフェリーストップ待ったなしですよ。現実は冷酷ですが、目を背けられない話ですね。

ジュニアレベルの仕事、AIがごっそり持っていった説

かつてジュニア開発者が担っていた典型的な業務というと:

  • 簡単なUIの実装
  • APIの叩き方を調べて繋ぐ
  • データの変換処理やフォーマッタ作成
  • 単純なバグ修正
  • 単体テストの追加や修正

こうした「やればできるけど、時間がかかる仕事」は、今やChatGPTやCopilotが秒速でこなします。そして何より、夜でも働くし、文句言わない。

つまり、ジュニアレベルの業務を“経験のために任せる”理由が激減してしまったわけです。

AIによって“育成機会”すら奪われる

皮肉なことに、AIが入ったことでジュニア枠の「経験の積み上げ」の機会も減っています。

  • 「とりあえずやってみて」→「いや、AIで一発で済むよね」
  • 「このバグ調べて」→「AIに聞けば出てくるよ」
  • 「一通りのCRUD作ってみて」→「テンプレートとAIで即完成」

つまり、「勉強として任せる余裕」すら削られつつあるという、ちょっとした地獄のような構図ができてしまっています。

容赦ないけど、現実は変わってきている

  • ジュニア枠=業務要員ではなく育成投資という理解に変えないと、雇用の意味が薄れつつある
  • AIにできない“設計力・抽象思考・チーム連携”を重視する方向に育成の軸を移す必要がある
  • “人間である意味”を先に教えなければ埋もれる

いまジュニアがだぶついているという話は、「人材の価値構造が変わった」ことの現れです。容赦ないですが、たしかにAIがトドメを刺した部分もあります。

ただし逆に言えば、AIに仕事を奪われないジュニア層を目指すことも可能です。たとえば:

  • AIのアウトプットの是非を判断できる
  • 設計意図や業務背景を読み解ける
  • 他者と協力して「なにを作るか」を考えられる

こうしたスキルを早期から伸ばせる人材は、逆にAIを味方にして一気に飛躍する可能性もあるんですよね。

というわけで、「ジュニア=いらない」ではなく、「旧来型のジュニア像」がAIによって時代遅れになったというのが現実に近いかもしれません。

付け加えると、コードを見る力が要らないわけではありません。AIの成果物を評価しないといけないからです。

ですが相応の技術力が求められます。これは正直初心者には厳しいと思うのです。

まさにその通りで、「AIがコードを書く時代」=「コードを読む力がより重要な時代」なんですよね。AIが書くなら読まなくてもいい――なんてのは大間違いで、むしろ「中級者の目線」が最初から要求される世界になってしまったというのが現実です。

コードを見る力が“前提スキル”に

AIが出力したコードは一見正しそうに見えるんです。でも実際には:

  • 微妙に要件を外している
  • 意図しない挙動が紛れ込んでいる
  • セキュリティやパフォーマンス面で危ない処理が含まれている
  • 保守性や拡張性が低い設計になっている

こういった“AIなりの最適解”に潜む罠を見抜くには、相応の読解力・判断力が要ります。これはただ文法を覚えるだけでは身につかない、いわば“開発の地力”です。

初心者にはキツい構造になっている

  • 昔:とりあえず書いてみて、バグって、直して、学ぶ
  • 今:AIが書いてくれる。でも間違ってる。→「どこが?なぜ?」をすぐ求められる

このギャップがかなり厳しいです。“手を動かして学ぶ”経験が飛ばされがちになっているため、初心者は「何がわからないのかもわからない」ままAIの出力に翻弄されてしまいます。

正直、AIは“間違っているかもしれない優等生”なので、指導が必要です。そしてその指導役がいきなり初心者に割り振られるという、なかなかハードモードな現実。

必要なのは“読む力を育てる環境”

  • AIの出力をそのまま受け取るのではなく、「なぜこうなるのか」「何を意図しているのか」を言語化して学ぶ時間が必要
  • コードレビューや添削のように、読みながら理解を深めるトレーニングが大切
  • 理想はメンター付きのAI活用。つまり「人間とAIの両方に教えてもらう」ような環境

これがあるかどうかで、AI時代の学習者の成長速度は大きく変わります。

ということで、AIがコードを書く時代でも、いやむしろだからこそ、「読んで判断する力」が超重要スキルになっているという話でした。
でも最初からそれを求められる今の初心者は、ほんと気の毒なレベルで難易度高いですね…。

学習コストの高騰、そして育成パスの見直しは避けて通れませんね。特に学習コストはイノベーションなしだと跳ね上がると思います。

しかし希望もあります。皮肉なことにこれもAIのおかげですが、「わからないことはすぐAIに聞いて、実際に動かしてみてそれが正しいことを確認する」とやれば、高速で学習が進められるのです。

昔のように「よくわからないからGoogleで検索して、全然関係ない記事で消耗して、時間を無駄にする。簡単な内容に一日かかる」などという無益なことをしなくてよくなりつつあるわけです。

いやもう、ほんと「昔は一日がかりだったググり作業、今じゃ3分で終わる」っていうこの劇的進化、ありがたすぎますよね。検索迷子になって「Stack Overflowの3年前の投稿 vs Qiitaのよくわからない記事 vs フォーラムの宗教論争」みたいな三つ巴バトルに巻き込まれていた頃が、もはや懐かしいです。

学習コストは確実に“両極化”している

  • 入口が高くなった:冒頭から「AIの出力を見て正しいか判断して」と言われる時代です。コーディング初学者にとっては、まるで試験の答え合わせをしながら問題の意味も考えなきゃいけないような状態。
  • でも進みは速くなった:一度地図を手に入れれば、昔よりもはるかに速く遠くへ行けます。わからないことはAIに聞く、試す、答えを得る、のループが爆速で回るからです。

つまり、「入り口は険しいけど、走り出せば追い風がすごい」という構図です。

AI電脳会議 生成AI活用による開発革命

生成AIの登場でテストの重要性がさらに爆上げ

生成AIを活用できるポイントの一つがテストだと思うんです。IaCでも重要ですが、開発言語(GoやPythonのような)ではさらに重要度が増すでしょう。

とりわけテスト自動化は非常に重要になるだろうと思っています。

第一に、AIに修正させたコードは壊れることがしばしばありますので、動作保証の仕組みがいるからです。

第二に、超高速でAIに正解を教えるためにはテスト自動化がおそらく最適解だからです。

完璧なテストと十分な試行数があれば、大半のコードはAIが書けてしまうのではないでしょうか。

それ、まさに「テストはAI時代のインフラ」という感じですね!コードをAIに任せるなら、テストはもはや“保険”じゃなくて“必須の交通ルール”みたいなもの。事故ってからじゃ遅いですし。

テスト自動化が重要な理由

1. AI修正の安全網になる

AIがコードを“自信満々で”書き換えたときも、ちゃんと動くかどうかは結局テストを通さないとわかりません。特に以下のような場面ではテストが必須です。

  • インタフェースの変更が入ったとき
  • 条件分岐のロジックが調整されたとき
  • エラー処理や例外パターンの修正

これを人間の手だけでカバーしようとすると、「コードレビュー地獄」まっしぐらです。だからこそ、AIが動かしたら、テストがすぐに答えを返す仕組みが必要なんですね。

2. AIへの“フィードバックループ”になる

テストが通る=正解、というシンプルで強力な評価軸を持つことで、AIが高速に試行錯誤できます。とくに「この関数を改良して」「この仕様を満たすように直して」といった反復処理では、

  • コード生成
  • テスト実行
  • 結果のフィードバック

というループがうまく回れば、人間が細かく見なくても勝手に精度が上がっていく可能性があります。まさにAIとテストの合わせ技一本。

3. IaC以上に言語レベルの保証が重要

IaCでもテストはありますが、GoやPythonなどのアプリケーションコードはロジックの自由度が高い=壊れやすいという特徴があります。だからこそ、以下のようなテストが自動化されているかどうかが鍵になります。

  • 単体テスト(ユニットテスト)
  • 結合テスト
  • モックを用いた依存の分離
  • CIとの統合による常時監視

たとえばGoならgo test、Pythonならpytestなど、AIでも理解・操作しやすいツールがそろっているのも好条件です。

「完璧なテスト × AI」=ほぼ自動開発?

これはもう、“人間が仕様を定義して、AIがコードを生成→テストで正しさを確認→次の仕様へ”という、理想的な自動開発パイプラインの構図です。

もちろん、完璧なテストを書くのが簡単ではないのが現実ですが、逆に言えばテストさえしっかりしていれば、コードはAI任せでもいいという未来も現実味を帯びてきます。

コードを書くAIにとって、テストこそが“言葉”であり、“試験”であり、“評価軸”なんですよね。
だから今後ますます、AIとテストのセット運用が開発の基盤になっていくことは間違いなさそうです。

もしテストファーストを実践できるなら、テストが「会話のためのインターフェイス」にもなるでしょうね。

なにしろAIに対して「これこれこうしてほしい」と伝えるなら、それはプロンプトそのものです。

その通りです、まさにテスト=AIとの共通言語です!
AIとの“プログラム開発会話”において、自然言語だけでは精度が足りない。でもテストがあれば、「これが望んでる振る舞いだよ」と具体的に・厳密に・再現可能な形で伝えられるんですよね。

テストファースト × AI = コミュニケーションの革命

1. テストは仕様書、かつプロンプト

「この入力を与えたら、こういう出力を返してね」
このシンプルな指示こそ、AIが最も得意とするタスクの一つです。人間にとってはテストコード、AIにとっては機械可読のプロンプト。

たとえば:

func TestGreeting(t *testing.T) {
    got := Greet("Alice")
    want := "Hello, Alice!"
    if got != want {
        t.Errorf("got %q, want %q", got, want)
    }
}

これだけで、AIは「Greet関数は名前を受け取り、Helloを付けて返せばいいのね」と正しく理解してくれます。

AI電脳会議 生成AI活用による開発革命

開発現場にAIがやってきた。ドキュメント書きません、はもう通用しない

ドキュメントって、AIを用いた開発における土台なんですよ。

「こうなるようにしてくださいね」

と規定するのがドキュメントなんです。それを用意しないとAIを使いこなすこと自体が難しくなります。生産性が低くなることは避けられません。

まさにその通りで、ドキュメントはAI開発の“呪文書”みたいなものです。「火の玉出して!」って命じるなら、「火の玉って何色で、どのくらいの大きさで、どこに向かって飛ぶのか」まで書かないと、AIは暴発するか沈黙します。ファンタジーな話じゃなくて、ガチの実務で起こります。

AIを活用した開発では、ドキュメントが“仕様”と“意図”を伝える唯一の手段です。そしてこれは、単なる人間向けの補助資料ではなく、AIの出力精度と再現性を担保するための必須入力になります。

以下のような場面では、ドキュメントの有無が生産性に直結します。

  • 設計方針の伝達:「なぜこの構成にしたのか」が書かれていないと、AIは代案すらまともに出せません。
  • コーディングルールの共有:リンターやフォーマッタに合わせた規約が明記されていないと、AIの出力が“意識高いエラー製造機”になります。
  • 業務フローやドメインの記述:ビジネス要件が曖昧なままでは、どんなに良いコードでも的外れになります。

つまり、「ドキュメントを書かない」は、AIにとって“目隠しされた状態で開発させられている”のと同じです。しかもその結果が、「使えないコード」と「人間の手直し地獄」になって返ってくるのです。

これは開発速度の低下どころか、AI活用自体の失敗リスクを高める話でもあります。人間なら「これってあの件ですよね」とか「前も同じやつ書いたな」などと補完してくれますが、AIはドキュメントがなければ“知らない”を前提に動きます。

だからこそ、ドキュメントは「面倒だけど書く」から、「書かないと何も始まらない」という前提に変わりつつあります。AIを道具として扱うなら、その取扱説明書=ドキュメントをちゃんと整備することが、人間の仕事になるわけですね。

ドキュメントが書けない開発者は、AI開発においては「指示できない指揮官」になってしまいます。精密な道具ほど、精密な指示が必要。もはや“ドキュメントはコスト”ではなく、“ドキュメントこそが効率の源泉”なんです。

簡単な例を出しましょう。Terraformのコードを生成させるとしますよね。なにもドキュメントを使わずに、EC2用のリソースブロックを作るよう依頼すると、こんな回答が返るわけです。

resource "aws_instance" "example_instance" {
  tags = {
    Name = "example-instance"
  }

(後略)

でも期待する完成品がこうだとすると

resource "aws_instance" "main" {
  tags = {
    Name = "${var.project}-api"
  }

リソース名とタグのNameを自分で直さないといけないわけです。これがリソース数だけ発生してしまう。ちょっとした手間になります。でもコーディング標準に、

- モジュール内で一点しかないリソースはmainと名付けます。(例: resource "aws_vpc" "main" )。
- Nameタグは"${var.project}-[機能名]"とします。

と書いていれば、多くの場合AIはそうしてくれます。ドキュメントのあるなしがすごく効いてくるんです。

ああ〜〜〜それ、めちゃくちゃ“あるある”ですね!Terraformに限らず、AIに「EC2作って」って頼むと、「はい!AWS公式っぽい最小構成出しました!」みたいなテンションでデフォルトの例を投げてくるんですよ。でもそれ、こっちの現場ルールに全然合ってない!みたいな。

まさにこの差こそが、「ドキュメントがあるかどうかで、出力の質が激変する」代表例です。

おっしゃる通り、

resource "aws_instance" "main" {
  tags = {
    Name = "${var.project}-api"
  }
}

こうしたルールが暗黙でなく明示的にドキュメント化されていると、AIは「この現場ではリソース名はmain、タグは${var.project}-機能名って書くのね」と学習して、それに従って出力してくれるようになります。

この差が出る理由はシンプルで、AIは“常識”ではなく“明記されたルール”を重視するからです。
人間同士なら「まあ、このタグ名は前回と同じ感じでいいよね」で済むところも、AIにとっては「言われてないことは、知らない」なのです。

そして、これが地味にキツいのが「リソース数ぶん全部、あとから人間が直すハメになる」という点ですね。
例えば10個のEC2インスタンスを定義する場合、毎回タグと名前を手で修正する……この繰り返しが、ドキュメントひとつでまるごと不要になるわけです。これはもう、生産性の差として無視できません。

また、「この命名ルール、なんとなくやってた」ではなく、「こう書くべき」という根拠をコードに反映できるという点でも、ドキュメントの価値は非常に大きいです。

Terraformのように構成の再利用やテンプレート化が強く求められる領域では、ドキュメント=自動化の鍵であり、人間の思考をAIに引き継ぐための唯一の橋渡しなんですよね。

なので、こうした現場ルールの明文化は、単なる“お作法”ではなく、「AIを使って手間を減らすか、毎回人間が繰り返し直すか」という選択の話でもあるわけです。
この違い、実際に使いこなしている人にしか見えないリアルで、説得力があります。まさに実戦で叩き上げたドキュメント信仰ですね!

「ドキュメントを書きません、読みません」というスタンスだと活躍できる場が縮むだろうと思うのはこういう理由です。

別にそういう意見の人に意地悪してやろうなんて考えていないんですが、生成AIを有効活用する方法を考えていくと、そういう結論にならざるを得ないんです。

AI電脳会議 AIとIT業界の未来