In Silico

AI協働

ソフトウェア開発とは何をする仕事か:4つの見方とAIに任せる範囲

2026/8/3 (更新: 2026/10/14)

  • ソフトウェア開発
  • ソフトウェア工学
  • エージェント
  • ハーネス
  • 理論
  • 仕様
  • 証明
  • ソフトウェア工場
  • Naur
  • Dijkstra
  • Reeves
  • Greenfield
  • Cusumano
  • Cleanroom
  • spec-kit
  • Kiro
  • Dafny
  • Claude Code
  • Aider
  • GitHub Copilot
  • Codex
  • Devin
  • SWE-bench
  • vibe coding
  • 再利用
  • プルリクエスト
目次
背景・問い・要点
背景

エージェントに機能を一つ頼む。返ってきた変更は大きく、テストは緑で、レビューでも露骨な誤りは見つからない。取り込む。二週間後、その一角を触る必要が出て、はじめて気づく。なぜモジュールがその形なのかを、チームの誰も説明できない。動く。だが、安全には変えられない。

「動いてテストが通ったのだから完成だ」という素朴な受け取り方は、ここで破綻する。コードは残ったのに、それがなぜその形で、世界のどの事情に応えているのか、という理解が最初から誰の中にも生まれていない。困りごとは技量だけではない。ソフトウェア開発とは何をする活動なのか、という問いに、暗黙のうちに一つの答えを置いてしまっていたことにもある。

この問いには、歴史上いくつもの答えが出ている。理論を組む仕事だ、証明する仕事だ、組み立てる仕事だ、コードを書くことそのものだ。ハーネスとは、モデルの外側の仕組みを指す。本稿は、Naur・Dijkstra・Cusumano と Greenfield・Reeves の四つの答えと、それぞれに合う実在のハーネスを例に取る。

問い

ソフトウェア開発を何をする活動と見るかで、AIに何を任せ、どんなハーネスを選ぶべきかはどう変わるのか。

要点

開発の本体を理論・証明・組み立て・コードのどれと見るかで、人間が持ち続けるべきものと、合うハーネスが変わる。 ツールが成果物そのものを出せるのは組み立てとコードの見方までで、理論と証明の見方では仕事の本体を人間が担う。長く改修されるコードで、出力の速さを求めるツールを使いながら差分を読むのをやめると、動くのに変えられないコードが残る。

モデル・例示

同じ300行の差分を、四つの見方で受け取る

※ この節の数値は説明のための仮定で、測定値ではありません。

エージェントに機能を一つ頼み、300行の差分とテスト20本の緑が返ってきたとする。取り込む前に人間が見るものは、開発をどう見るかで変わる。

  1. 理論を組む仕事と見るなら、300行が自分のシステム理解に収まるかを判定し、収まらなければ差し戻す。
  2. 証明する仕事と見るなら、先に書いた不変条件(在庫の数は負にならない、など)を差分が満たすかを確かめる。テスト20本の緑は、不変条件が破れないことの証明にはならない。
  3. 組み立てる仕事と見るなら、差分が決まった工程(課題の型、使い捨て環境でのテスト、依頼者とは別の人の承認)を通ったかを確かめる。
  4. コードを書く仕事そのものと見るなら、300行を設計として読む。

ツールが出したものは四つとも同じ300行で、違うのは人間がする仕事である。二週間後にこの一角を改修するとき、なぜこの形かを答えられるかは、その仕事が300行を読むことを含んでいたかによる。

理論を組む仕事だと考えるなら

一つ目の答えは、Peter Naur が1985年に出した。プログラミングの本来の目的は、プログラムという文書を作ることではなく、問題がプログラムの実行でどう解かれるのかについての「理論」を、書き手の頭の中に築くことだという1。ここでの理論を、Naur は哲学者 Gilbert Ryle にならって、単にうまくやれることの一段上に置く。やり方が分かっているだけでなく、なぜそうするのかを説明し、問いに答え、正当化できる状態を指す。Naur はこれを、そもそも表現しえないものだと書く。だから理論は文書に写し取れない。理論を持つ人だけが、コードの各部分がなぜその形かを説明でき、世界の事情が変わったときに筋の通った改修ができる。

この立場からの帰結は重い。Naur は、理論を持つチームが解散したとき、プログラムは「死ぬ」と書く1。実行はできる。だが、もう知的な制御下にない。動くのに変えられないコードは、この事態が早送りで起きた姿だ。生成されたコードには、はじめから生きた理論が伴っていない。ある論者はこの見方をAI時代にそのまま延長し、「理論は仕事をすることで育つ。LLMは仕事をしない。仕事の出力を取り込むだけだ」と論じた2。

ただし、これを「AIは理論を築けない」と読み切るのは行き過ぎだ。エージェントの実行ログは、仮説を立て、確かめ、直すという理論構築そのもので満ちている、と反論する実務者もいる3。彼の整理では、エージェントの理論はその場限りで、次のセッションには持ち越されない。だから持続的な理論は、生成物を「自分のシステムの理解に収まるか」で判定する人間の側に残る。

この見方に立つと、AIとの組み方が決まる。ただし「理論を書いた文書をAIに渡す」方向ではない。Naur の主張の芯は、理論は文書に写し取れない、という一点にある。だから記憶ファイルに規約や構造を書き込んでも、それは理論そのものではない。理論を持つ人間がコンテキストを保つための足場である。実際 Claude Code は上位階層の CLAUDE.md を毎セッション読み込む。だが公式ドキュメントは、これを「強制ではなくコンテキスト」だと明記する。遵守を保証する機構ではない4。だから残る仕事は、記憶ファイルを書くことではなく、理論を持つ人間がループの中に居続け、理論を作り続けることになる。

先に引いた実務者は、自分の運用をこう書く。二つか三つのエージェントに問いの調査やコードの実装を並行して任せ、上がってきた出力が自分のシステム理解に収まるかをまず判定する。収まらない出力はおよそ8割で、その場で止めるか差し戻す。残りは自分でコードベースを当たり、手で試して確かめ、最終的に自分の成果へ入るのは出力の1割ほどだという3。ハーネスの値打ちは、その判定と確かめ直しを省かせないことにある。

Aider は各変更を、説明付きの小さな git コミットとして既存のレビュー経路に残す。一つずつ理解を通すための作りだ5。ただし、その説明文を書いているのは人ではない。差分とチャット履歴を渡された別指定のモデルが生成する5。Aider は読む対象を用意する。だが、なぜその形なのかの答えは、記録の側からは出てこない。ツールが与えるのはコンテキストの保持であって、理論の保持ではない。いまのところ、持続的な理論を持つのは人間である。ただしこれは現時点の工学的な制約であって、役割の固定ではない。先に引いた実務者自身が、次の一手は理論を持ち越せるようにすることだと予告している3。

証明する仕事だと考えるなら

二つ目は、正しさを推論で確立する立場だ。Edsger Dijkstra は、テストはバグの存在を示せても、不在は決して示せない、と述べた6。だから信頼度を上げる唯一の有効な方法は納得のいく正しさの証明を与えることであり、その証明はプログラムと一緒に育てるべきだ、と説く6。この考えと同じ向きを工程に落とし込んだ例が、Cleanroom ソフトウェア工学だ。開発者は自分のコードをテストもデバッグもしない。最初の実行は独立した認証チームが担い、正しさは実行前にレビューで検証する7。価値の在り処は、デバッガではなく、コードの上流にある仕様と証明だ。

この立場からのAIの任せ方は、はっきりしている。正しさは、モデルの自信からではなく、人間が先に書いた明示的な仕様や不変条件から来なければならない。合うのは、コードより先に仕様を置き、コードをその下に従わせるハーネスだ。GitHub の spec-kit は既定を反転させ、仕様こそ真実の源、コードはそれに仕える生成物だと宣言する8。AWS の Kiro は、実装の前に要件・設計・タスクの三文書を生成して保つ9。ただし、ここは正直に区別しておきたい。これらが与えるのは「仕様の権威」であって、「正しさの証明」ではない。Dijkstra が求めたのは、仕様を上流に置くことそのものではなく、プログラムと一緒に育つ証明だった。仕様を真実の源に据えるのは、その証明を書くための前提を整える段までだ。証明を機械が閉じる例として引いたのは、LLM の生成物を Dafny の検証器にかける研究で、製品ではなくベンチマーク段階のものだった10。だから、いまの読者に届く範囲でこの立場を実践するとは、人間が仕様・受け入れ基準・不変条件を書き、ツールにコードをその下へ従わせることを指す。証明の自動化は、この立場が向かう先ではあっても、本稿が当たった範囲に、明日から使えるツールは見当たらない。その一段が埋まっていないことを承知の上で仕様を上流に置くのと、仕様さえ書けば正しいと錯覚するのとでは、同じツールを使っても結果が変わる。

組み立てる仕事だと考えるなら

三つ目は、ソフトウェアを一品物の創作ではなく、再利用可能な部品を工程に沿って組み立てる工業生産と見る立場だ。Michael Cusumano は日本のソフトウェア工場を調査し、経営が向き合う対象は単一のプロジェクトではなくプロジェクトの流れであり、効率と柔軟性という相反しがちな二つを両立させねばならないと論じた11。Jack Greenfield と Keith Short は2003年に一歩進め、他産業が手工業から工業化へ移ったように、標準部品を組み立てて似て非なる製品を作る段階へ移りうると展望した12。価値の在り処は、星のような個人ではなく、プロジェクトをまたいで生き残る生産の仕組みにある。

この見方からのAIの任せ方は、一見「エージェントを大量に並べて手数を減らす」ように見える。GitHub Copilot のコーディングエージェントは課題を渡すと専用環境で非同期に動いてレビュー用のプルリクエストを開き13、OpenAI の Codex は多数のタスクをそれぞれのサンドボックスで並行に走らせる14。だが、並列に走らせること自体は工業化ではない。並列化が増やすのは throughput(処理量)である。Cusumano が挙げた工場実装の共通要素の一つは体系的な再利用性であり11、Greenfield が「工場」で指したのも量ではなく、体系的な再利用とそれを支える工程のほうだった12。

検証の関門も、この工場観に元からある。Cusumano の共通要素には工程品質の分析と管理が並び、東芝のソフトウェア工場も1987年までに、設計レビューとインスペクションを標準化して管理する仕組みを施策に加えていた11。本稿はその関門を、エージェント時代の形に置き直して考える。だから、この見方では、これらのエージェントの値打ちを決めるのは賢さそのものより、その周りに組み立てた工程のほうで、工程こそが資産になる。工程とは、課題を切り出す型、テストを回す使い捨て環境、そして「PR を開かせた本人はそれを承認できない」という設計上の関門を指す13。エージェントは組立ラインの作業者で、ラインそのものが資産だ。

看板が、第三者の確かめた実力より先に立った例もある。「初のAIソフトウェアエンジニア」を掲げた Devin の SWE-bench 13.86% はベンダー申告値だった15。ただし Devin の技術報告は評価ハーネスと差分を公開しており、検証を拒む形ではない。欠けているのは第三者による再走の提示である。

工業化を唱えた Greenfield 自身、その出発点に「ソフトウェア開発は本質的に人間中心の営みであり、純粋に機械的・決定論的な工程には還元できない」を置いている。そのうえで、機械的・決定論的な部分はツールに渡す人間中心の工業化を提案する、という順序だ12。だから人間の仕事は、作業を渡すことではなく、その工程を設計し、上がってきた成果物を検証・承認する関門であり続けることだ。

コードを書く仕事そのものだと考えるなら

四つ目は、最も直截だ。ソフトウェア開発の全体が設計であり、設計文書と呼べるものはソースコードだけだとする立場。Jack Reeves は1992年に、工学的設計の条件を満たすと言えそうな唯一のソフトウェア文書はソースコードだと結論した。そして直後に、これは賛否両論を書き尽くせるほどの論点であり、自分の記事はそれを証明せずに前提として置くと自ら宣言している。その前提の上で、Reeves はソフトウェアの「製造」にあたるコンパイルとリンクを「ほとんど無料と言えるほど安い」と書いた16。製造が無料なら、設計(コード)を何度でも作り直して試すのが正しい方法になる。価値は、上流の図や仕様ではなく、動くコードを生む作業そのものに宿る。

この見方をAIに延長すると、動くコードを速く作り、それを何度でも作り直す姿勢になる。GitHub Copilot の入力補完は、書いている最中にコードを提案する17。仕様も設計図もなく、出力がそのまま成果物だ。ただし Reeves の芯を取り違えてはいけない。彼が言うのは「コードは設計だ」であって、コードを軽んじてよい、ではない。むしろ逆で、設計文書がコードしかないからこそ、その一行一行を設計として読み、練る。この立場に本当に合う実践は、速い build・test・反復のループを回しつつ、人間が差分を設計として読み続けることだ。ここから理解を意図的に手放したのが、Andrej Karpathy の言う「vibe coding」である。差分を読まず、コードが存在することすら忘れる(本人は使い捨てのプロジェクト向けとして述べている)18。これは Reeves の裏返しに見えて、理論を組むという一つ目の立場の裏返しでもある。Reeves が無料だと書いたのは製造の側だけだ。設計のほうは途方もなく高くつく、と同じ論文が対句で続けている16。いま安くなったのは、その高くつくはずのほう、すなわちコードを書く行為そのものだ。だから、誰も理論を持たない設計が、はじめて量産できるようになった。速さはこの立場の力だが、読むのをやめた瞬間、その速さで、動くのに変えられないコードが積み上がる。

四つの立場のあいだには、正面からの衝突もある。Reeves は、ソフトは安く作れる以上、形式的な検証手法は実務では大して役に立たないと書いている16。テストは不在を示せないとする Dijkstra6 とは、ここでぶつかる。そしてツールが肩代わりできる範囲は、四つの見方で同じではない。組み立てる立場と、速くコードを生む立場では、ツールが成果物そのものを出す。理論を組む立場と証明する立場では、ツールが渡すのは仕様や下書きの権威までで、それを頭の中の理論に織り込む仕事も、その仕様が本当に欲しいものかを決める仕事も人間がする。


出典18件
  1. P. Naur「Programming as Theory Building」Microprocessing and Microprogramming 15, 1985. https://gwern.net/doc/cs/algorithm/1985-naur.pdf — プログラミングの主目的は理論を築くことで、理論は文書に表せず、それを持つチームが解散するとプログラムは死ぬとする。 ↩ ↩2

  2. D. Gauer「Go read Peter Naur’s ‘Programming as Theory Building’…」ratfactor. https://ratfactor.com/cards/naur-vs-llms — 理論は仕事をすることで育ち、出力を取り込むだけのLLMは理論を持たないと論じる個人ブログ。著者は Zig の学習教材 Ziglings の作者。 ↩

  3. S. Goedecke「Programming (with AI agents) as theory building」. https://www.seangoedecke.com/programming-with-ai-agents-as-theory-building/ — エージェントは理論を築くが持ち越せず、出力の1割だけが成果に入るとする反論。著者は GitHub の Staff Engineer で、2025年 HN 得票3位のブロガー。 https://refactoringenglish.com/blog/2025-hn-top-5/ ↩ ↩2 ↩3

  4. Claude Code Docs「How Claude remembers your project」. https://code.claude.com/docs/en/memory — 上位階層の CLAUDE.md は起動時に読み込まれるが、強制設定ではなくコンテキストとして扱われ、強制したい動作はフックで書く。 ↩

  5. Aider「Git integration」. https://aider.chat/docs/git.html — 編集ごとに説明付きのコミットを残し、その説明文は差分とチャット履歴を渡された別指定のモデルが生成する。 ↩ ↩2

  6. E. W. Dijkstra「The Humble Programmer」EWD340, 1972. https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html — テストは誤りの不在を示せず、確信度を上げる唯一の方法は正しさの証明で、証明とプログラムを一緒に育てよと説く。テストの一文の初出は EWD249(1969)。 ↩ ↩2 ↩3

  7. R. C. Linger & C. J. Trammell「Cleanroom Software Engineering Reference Model v1.0」CMU/SEI-96-TR-022, 1996. https://www.sei.cmu.edu/documents/1159/1996_005_001_16502.pdf — 開発チームは実行前に正しさを検証し、最初の実行は独立した認証チームが統計的テストで担う。 ↩

  8. GitHub spec-kit「Spec-Driven Development」. https://github.com/github/spec-kit/blob/main/spec-driven.md — 仕様を真実の源とし、コードを仕様に仕える生成物とみなす方法論。単体のツールでなく、エージェントに規律を被せる層である。 ↩

  9. Kiro「Specs」. https://kiro.dev/docs/specs/ — 実装の前に要件・設計・タスクの三文書を生成し、実装をそこから駆動する。標準の手順は各段に承認ゲートを持ち、要件は EARS 記法で書く。 https://kiro.dev/docs/specs/feature-specs/ ↩

  10. Misu ほか「Towards AI-Assisted Synthesis of Verified Dafny Methods」FSE 2024. https://doi.org/10.1145/3643763 — GPT-4 と PaLM-2 に MBPP 由来の178問で検証付きの Dafny メソッドを生成させたベンチマーク研究。 https://arxiv.org/abs/2402.00247 ↩

  11. I. Aaen・P. Bøtcher・L. Mathiassen「Software Factories」. http://larsmathiassen.org/wp-content/uploads/2014/10/17.pdf — Cusumano『Japan’s Software Factories』(1991)を引き、工場の共通要素と東芝の施策を整理する。同論文自体は大量生産の含意には否定的である。 ↩ ↩2 ↩3

  12. J. Greenfield & K. Short「Software Factories」OOPSLA’03, 2003. https://s23m.com/oopsla2003/greenfield.pdf — 標準部品の組み立てによる工業化を展望しつつ、開発は機械的な工程に還元できない人間中心の営みだとし、体系的な再利用を中心に置く。 ↩ ↩2 ↩3

  13. GitHub Docs「Risks and mitigations for GitHub Copilot cloud agent」. https://docs.github.com/en/copilot/concepts/agents/cloud-agent/risks-and-mitigations — エージェントに PR を作らせた本人はそれを承認できない。作業環境は GitHub Actions 上の使い捨て環境(別頁)。 https://docs.github.com/en/copilot/concepts/agents/cloud-agent/about-cloud-agent ↩ ↩2

  14. OpenAI「Introducing Codex」2025. https://openai.com/index/introducing-codex/ — 多数のタスクを、リポジトリを読み込んだ独立のクラウドサンドボックスで並行に走らせ、PR を提案する。 ↩

  15. Cognition「SWE-bench technical report」2024. https://cognition.ai/blog/swe-bench-technical-report — SWE-bench の無作為25%(570問)で13.86%と申告し、評価ハーネスと差分を公開する。「初のAIソフトウェアエンジニア」は発表記事の見出し。 https://cognition.ai/blog/introducing-devin ↩

  16. J. W. Reeves「What Is Software Design?」C++ Journal, 1992. https://www.developerdotstar.com/mag/articles/reeves_design.html — ソースコードだけが設計文書だという見方を前提に置き、製造はほぼ無料だが設計は高くつき、形式検証は実務では大して役に立たないと論じる。 ↩ ↩2 ↩3

  17. GitHub Docs「About GitHub Copilot」. https://docs.github.com/en/copilot/get-started/what-is-github-copilot — 書いている最中にコードを提案する機能を、質問への回答・変更のレビュー・任せた作業の実行と並べて説明する。 ↩

  18. A. Karpathy の X 投稿(2025年2月2日). https://x.com/karpathy/status/1886192184808149383 — 差分を読まずコードの存在を忘れる「vibe coding」を命名し、使い捨ての週末プロジェクト向けとした。 ↩

この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。