世界を動かす技術を、日本語で。

LLMを使ってソフトウェアを書く方法

2026年3月16日原文(stavros.io)

概要

  • プログラミング自体 よりも、 ものづくり への情熱
  • LLM(大規模言語モデル) の進化で制作速度と品質が向上
  • 複数モデルとエージェント を組み合わせた独自ワークフロー
  • コード品質の向上と保守性 の維持
  • 具体的なプロジェクト例 と実践的な開発手法の共有

プログラミングの喜びよりも「ものづくり」

  • LLMの進化 により、プログラミングそのものよりも「作ること」への情熱を再認識
  • プログラミングは手段 であり、目的は「新しいものを生み出すこと」
  • LLMを活用 して、短期間で多くのプロジェクトを実現
  • 未知のフロンティア を切り拓く興奮
  • ワークフローの詳細解説 と実際のコーディングセッションの共有

LLM活用によるメリット

  • Codex 5.2やOpus 4.6 の登場で、 低いバグ率 と高い信頼性を実現
  • コードの保守性 が向上し、長期間の開発でも品質を維持
  • エンジニアリングスキルの変化
    • コードの正確な記述力よりも、 システム設計力や選択力 が重要
  • 知らない技術領域 (例:モバイルアプリ)では依然として難しさが残る
  • LLMとの対話方法 によって成果に大きな差
  • モデルの進化 で、今後はさらに人間の介在が減る可能性

LLMで作ったプロジェクト例

  • Stavrobot
    • OpenClawの代替となる セキュリティ重視のLLMパーソナルアシスタント
    • カレンダー管理、リマインダー、研究補助 など多機能
    • 個人ニーズに最適化 されたアシスタント体験
  • Middle
    • 音声メモの録音・文字起こし・Webhook送信 が可能なペンダント型デバイス
    • 常時利用可能・高信頼性・操作の手軽さ
  • Sleight of hand
    • 不規則な秒針の動き を持つアート性の高い掛け時計
    • 複数のモード で観察者の感覚に揺さぶり
  • Pine Town
    • 無限キャンバス上のマルチプレイヤーお絵描き空間
    • 多様なユーザー作品 が生まれる遊び場

開発ハーネスと必要な機能

  • OpenCode を主に利用、 Pi など他の選択肢も
  • 必要な機能
    • 複数社のモデル利用 (例:Claude Code, Codex CLI, Gemini CLIは制限あり)
    • エージェント同士の自律的な呼び出し
    • セッション管理やワークツリー管理 などの補助機能
  • 理由
    • 異なるモデル間でのコードレビュー による品質向上
    • 各モデルの強み・弱み を適材適所で活用
    • エージェント同士の連携 による作業効率化

ワークフローの構成

  • アーキテクト・開発者・レビュワー の複数エージェント体制
    • 各エージェントは OpenCodeのスキルファイル で動作指示を明示
  • アーキテクト(例:Claude Opus 4.6)
    • 唯一の対話相手 であり、最強モデルを選定
    • 目標・制約・トレードオフ を徹底議論
    • 詳細な設計プラン を策定し、納得できるまでやり取り
    • 最終承認(approved) まで実装開始しない
  • 開発者・レビュワー
    • 設計プランに基づきコード作成・レビュー
    • モデルごとに役割や得意分野を分担

まとめ

  • LLMの活用 で、 ものづくりのスピードと品質 が飛躍的に向上
  • エンジニアリングの本質 は「設計力」と「適切な意思決定」
  • 複数モデル・エージェント連携 による新しい開発スタイル
  • 自分のやり方 を見つけることの重要性
  • 今後のLLM進化 によるさらなる可能性

Hackerたちの意見

こういう分析を読むのが好きなんだ。ほんと、他の人がエージェントを使って開発にどうアプローチしてるか、アイデアや洞察を得られるよね。著者が開発者エージェントのペルソナをもっと小さなサブエージェントに分けてないのは意外だな。エージェントが広範囲のコードエリア(データベースクエリ、テスト、ビジネスロジック、インフラ、一般的なコードの骨組み)を書く必要があるときは、たくさんのコンテキストが使われるからね。あと、リサーチャーとプランナーを置くことで、開発前の段階でのコンテキスト管理が楽になるって読んだこともある。彼が複数のレビュアーを使ってるのもいいと思うし、専門的な役割に分けてないのも驚きだな。正直、私は「一つのプロンプトで全てを支配する」タイプの開発者で、最初に出した入力以上にチャットを続けることはないんだ。ミスがあれば、システムプロンプトか入力プロンプトを直して再挑戦する。できるだけ作業を細かく分けるようにしてるよ。それには、送信する前にちょっとした調査をする時間を取るってことも含まれる。みんなはもっと小さな特定のエージェントを使ってる?どんなパターンを使ってるの?よろしく!

あなたが挙げた参考文献は、今となってはちょっと古いね。8月のトークに基づいてるから、新しいモデルが生産性に大きな変化をもたらした「前の時代」のものだ。私が見つけた重要な変化は、オーケストレーションに関することだね。TFAが言うように、自分でプロンプトを実行するわけじゃない。オーケストレーターが全体を動かすんだ。建築家やプランナーと話をさせて、その計画の出力を別のエージェントに自動的に送る。彼の場合、建築家、開発者、いくつかのレビュアーを使ってるみたい。私はSuperpowersベースのオーケストレーションシステムを使ってるんだけど、ブレインストーミングからデザインプラン、実装プラン、開発者、レビュアーを経て、進捗と正確さをチェックするために実装プランに戻るんだ。実際、楽しいよ。40年以上コーディングしてるけど、今は楽しんでる :)

専門的なサブエージェントに分けることについては、確かに大事だけど、最初は分ける基準が明確じゃないんだ。私たちが見つけたのは、タスクの複雑さではなく、副作用のドメインで分けること。読み専門の「リサーチャー」エージェントと、出版専門の「ライター」エージェントは、片方だけが不可逆的なアクションを持つから、自由にコンテキストを共有できる。読み書きを一つのエージェントに混ぜると、再起動の安全性を考えるのが難しくなる。もう一つの実用的なことは、別々のコンテキストウィンドウを持つ別々のエージェントが、真に並行しているグラフの部分を扱うときに大いに役立つってこと。大きなエージェントは、並行化できる作業を直列化しちゃって、遅延が全体のパイプラインに影響を及ぼすんだ。

「大丈夫、私たちはまだアーキテクトをやってる、ただコードを書くんだよね」(意訳)っていう考え方がしっくりこないんだ。フルシステムの設計で試したことはないけど、今のところ得意じゃないと仮定すると…時間の問題だよね。じゃあ、私たちの使い道は何?

LLMは何でも作れる。真の問いは、何を作る価値があるのか、そしてそれがどう届けられるかだ。それがまだ人間の役割なんだ。LLMは人間でないがゆえに、人間を他の人間ほど理解できない。(セラピストとしてLLMを使おうとしたすべての試みを見てみて)要するに、LLMは最終的にはソフトウェアを設計できるようになる。でも、まだただのツールに過ぎない。

じゃあ、私たちの使い道は何? 新しい経済的な価値を見つける必要があるよ。それが技術進歩の現実なんだ。技術やホワイトカラーの業界は、自分たちにもそれが来るとは思ってなかったんだろうね!時代遅れになったスキルは、当然役に立たない。今日でも、工業規模の生産の中で手作りの品には需要があるから、コーディングでも同じようなレベルがあると思う。

他の人たちがすでに部分的に答えてるけど、私の20セントを言わせてもらうね。ソフトウェア開発は本当に建築に似てる。最終的な結果は、異なるタイプのコネクタ(道路、グリッド、APIなど)を持つユニークなモジュールのインフラなんだ。これまでのソフトウェア開発では、計画を立てたりコネクタの種類を決めたりするのは、ほとんど同じ人たちがやってた。リアルエステートの建築家も、彼らを助けるためにたくさんのソフトウェアツールを使うけど、最終的には人間のニーズを理解し、何年も勉強と実践を経て、全体の建物やインフラがどう機能するかを理解している人が必要なんだ。そして、その人は最終結果に対して責任を持ち、結果の複雑さや質に応じて報酬を受けることになる。だから、確かにソフトウェアエンジニアはそれほど必要なくなるけど、残る人たちは複雑でやりがいのある問題に取り組んで、さらにフロンティアを押し進めることになるだろうね。

本当に疑問なんだけど、アーキテクト→開発者→レビュアーの流れが、単に一つの強力なモデルと一回のセッションで話すよりも、実際に良い結果を生むっていう証拠は何?著者は各役割に異なるモデルを使ってるけど、私は毎日Opusでプロダクションエージェントを運用していて、良いコンテキストと明確な指示を一回の会話で与えれば、出力はすでにしっかりしてる。アーキテクトと開発者に分ける儀式は、コントロール感や可読性を与えてるように感じるけど、良いプロンプトがあれば単一のモデルが見逃すエラーをキャッチできるかどうかは疑問だな。

何の証拠があるの? ソフトウェアエンジニアが使うものの証拠って何? テスト、型チェック、構文ハイライト、IDE、コードレビュー、ペアプログラミングとかさ。俺の経験では、ソフトウェアエンジニアリングの実践の効果に関する証拠は二つのカテゴリーに分かれる。 - 開発者の直感、彼らの経験に基づいている。 - 科学的な研究、でもそれは説得力がない。生産性を測ろうとする研究もあるけど、実際のソフトウェアエンジニアの生産性を測るのは難しいから、マネージャーの評価みたいな質的な指標や、LOCやクローズしたチケット数みたいな意味のない量的な指標に頼るしかない。他の研究は、実際のソフトウェアエンジニアリングとは全く異なる特定のタスク(例えばコーディングパズル)に対して実践を測っているから、説得力がない。このLLMパターンの証拠も同じ。ある開発者は、うまくいくという直感を持っている。

分けるのは意味があると思う。異なるエージェントに具体的なプロンプトと孤立したコンテキストを与えるためにね。「アーキテクト」はコードスタイルガイドをコンテキストに持つ必要はない。それは実際には誤解を招く可能性があって、アーキテクチャから逸れてしまう情報を含んでいるかもしれない。

カーゴカルト的な現象が多いけど、こういう状況では避けられないよね。真実がモデル依存で、常に変わっているから、人々はAIの使い方を教えられるという前提で会社を作ってしまった。

これは経験談だけど、数日前に同僚と一緒にちょっとした実験をして、その証拠を集めたんだ。異なるペルソナ(アーキテクト、ビジネスアナリスト、セキュリティ専門家、開発者、インフラなど)を持つエージェントの階層を使って、要件を分析させて、リクエストを議論させて解決策を導き出した。彼らはプロジェクトのソースコードにアクセスできた。で、同じ入力を、ペルソナの定義を含めてClaude Codeに直接渡して、結果を比較したんだ。エージェントたちの協議は、約12ドルかかって、主にOpus 4.6を使ってかなり良い結果に至った。驚いたことに、Claude Codeに単一のプロンプトで直接渡したら、似たような良い結果が得られて、しかも早くて0.3ドルで、主にHaikuを使っていた。これはもっと調査する価値があるけど、今のところの仮説は、エージェント間の調整とコミュニケーションにはかなりのコストがかかるってこと。もしそうなら、個人的には驚かないな。 - 人間が仕事を分ける理由は、限られた能力があるからだよね。必要な分野で専門家になることはできないし、良いアーキテクトやビジネスアナリスト、セキュリティ専門家になるための知識を身につけることはできない。どうやら、LLMにはそれが問題じゃないみたい。だから、仕事の分け方は人間には必要なパターンだけど、LLMにはそうじゃないかもしれない。 - 仕事の分け方には高いコストがあって、スケールしない。特に、人間の組織では調整に関する問題が多いし、組織が大きくなるほどプロセスのコストが高くなって、最終的には官僚主義に変わる。IT企業では、グループ間のインターフェースに多くの問題があって、低帯域幅のコミュニケーションや言語の曖昧さが原因だ。単一のLLMが自分自身とコミュニケーションを取る方が、エージェントの協議よりもずっと良くて安いのは驚きじゃない。

Hacker Newsで議論の続きを見る