
2025/12/28 18:50
ソフトウェアを開発し、ユーザーを育てる。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
元の要約はすでに明確で包括的であり、原資料への忠実さも保たれています。変更は必要ありません。
本文
Vibe コーディングは、ソフトウェアを圧倒的に高速で構築できるようになった一方で、ソフトウェア品質の課題も新たなレベルへと引き上げました。
高品質とは何を意味するのでしょうか?
すべてのコード実行分岐についてユニット/統合/E2E テストを書くことですか? コードカバレッジを測定することですか? 包括的なテストケース群を持つことですか? そして、テストの網羅性はどのように測るべきでしょうか? ハッピーパスに集中すべきなのか、それともネガティブチェックに注力すべきなのか? パフォーマンス・ストレステスト、アクセシビリティ、各プルリクエストで全テストを走らせること、セキュリティテスト、ユーザビリティ… という項目は無数です。
多くのテストタイプがあるとはいえ、それらをすべて実装しても品質保証になるのでしょうか? 実際には「いいえ」です。以下のミームでよく表現されます:
QA エンジニアがバーに入りビールを注文する。 彼女は 2 本、0 本、-1 本と注文する。 最初のお客さんは入ってビールを注文し、 飲み終えたあとトイレの場所を尋ねる。 その瞬間、バーは爆発する。
ビール注文モジュール自体は完璧で、すべての入力に対応できていた。なのにバーが爆発した理由は、開発者がユーザーの立場になりきれなかったからです。バーでビールを飲む人は通常、数杯飲んだあとトイレに行く必要があります。このことを理解していれば、問題を未然に防げたはずです。
私たちはすべてのユーザーの生活を完璧に把握するわけにはいきませんが、LLM(インターネット全体で訓練された大規模言語モデル)がある今、ユーザーが何を必要とし、何を望むかについてより深く理解できるはずです。そこで「Vibe コーディング」を使ってユーザー自体をコード化してみませんか?
ユーザーの Vibe コーディング
考え方はシンプルです:対象ユーザーを選び、彼らを徹底的に理解する。
以下のようなフォルダ構成を想定します:
/users /group1 user.md /happy-paths requirement.flow.md
この例では group1 がソフトウェアと対話するユーザーグループを表し、
user.md にそのプロファイル(誰で何をしているか、日常の中でソフトウェアがどこに位置づけられるか)を書きます。happy-paths フォルダにはソフトウェアを通じたユーザーのフローを記述したファイルが入ります。これらは自然言語・擬似コード・実際のコードで書くことができ、フローの精度に応じて選択します。
ワークフロー
プロセスは反復的です:
Vibe code users → Vibe code software ^ | | | |____________________|
ステップごとにユーザーをより深く理解し、ソフトウェアをその理解に合わせてシンプルにしていきます。
シンプルさが究極の洗練
私見では、高品質なソフトウェアは「ユーザーにとってシンプル」に映るものです。そのシンプルさを実現するには、ユーザーのワークフロー・スキルセット・背景知識など、彼ら全般を深く理解する必要があります。
ユーザーをサブエージェントとして動かし、ハッピーパスを実行してフィードバックを得ることができます。対象ユーザーを十分に把握できていれば、Claude Code・Open Code・Cline・Copilot などの汎用エージェントで彼らの振舞いを高精度にシミュレートでき、ソフトウェアを無限に簡素化し品質を向上させる可能性が開けます。実際にこのプロセスを自動化し、エージェントに「Vibe コーディング」してもらいながらシミュレートユーザーと対話させる構想です。このパラダイムでは、人間の開発者は単なるユーザーとしてエージェントに指示を出すだけになります。
ペルソナ/ユーザーストーリーとの違い
このアプローチは従来のペルソナやユーザーストーリーと似ています。大きな違いは「Vibe コーディング」を行う順序です。まずペルソナ・ストーリーを Vibe コーディングし、次にそれらを実際に使用する LLM エージェントとして動かすことで、ボタンのクリックや情報閲覧といったリアルなユーザー行動を再現します。その後でソフトウェア開発へ移ります。
テストとの違い
現在のテスト手法と似ている点はありますが、重要な違いは「出発点」です。通常はまずソフトウェアを Vibe コーディングし、その後に機能・非機能テストでカバーします。
TDD(テスト駆動開発)は存在しますが、何のテストを書けばよいか、テスト/要件が妥当かどうか、ソフトウェアは最初に何をすべきかという根本的な疑問に直面します。ユニットレベルでは「ユーザー」が明確であるため TDD はうまく機能しますが、E2E レベルになると実際の人間ユーザーを扱うことになり、理解不足が問題になります。
結論
まずはユーザーを理解することに重点を置きます。ソフトウェア自体を構築する前に、エージェントで「ユーザー」を表現し、その上でソフトウェアを開発します。その後、リアル・仮想の両方のユーザーがインタラクトしてフィードバックを得て、エージェントを改善し、ソフトウェアを洗練させるというサイクルを繰り返します。
こうすることで、本当に「使う人にとってシンプル」で高品質なソフトウェアを実現できます。