論文概要(Abstract)
本論文は、AIとの対話を通じてコードを生成する新しいプログラミング実践「Vibe coding」を、8時間以上の動画データの質的分析によって実証的に明らかにした研究である。著者らは、Vibe codingが「AIプロンプト → コード評価 → 手動編集」の反復サイクルに従うことを発見し、この実践がプログラミング専門知識を不要にするのではなく、コンテキスト管理・迅速なコード評価・AIと手動操作の切り替え判断へと再分配することを報告している。
本記事は Zenn記事: Malleable Softwareとは何か——LLM時代の動的ソフトウェアとその実現要件 の深掘り記事です。元論文は arXiv:2506.23253 で公開されています。
情報源
- arXiv ID: 2506.23253
- URL: https://arxiv.org/abs/2506.23253
- 著者: Advait Sarkar, Ian Drosos
- 発表年: 2025年(PPIG 2025: Psychology of Programming Interest Group)
- 分野: cs.HC(Human-Computer Interaction)
背景と動機(Background & Motivation)
2025年2月、OpenAI共同創業者のAndrej Karpathyが「Vibe coding」という概念を提唱した。これは、コードの詳細を理解せずにAIに自然言語で指示してソフトウェアを作るアプローチを指す。しかし、この概念が学術的に厳密に定義・分析されたことはなかった。
従来のAIコーディング支援研究(GitHub Copilot、ChatGPTによるコード生成など)は、主にプロの開発者を対象とし、コード補完やバグ修正の文脈で評価されてきた。一方、Vibe codingは「コードを理解しなくても動くものを作る」という根本的に異なるパラダイムであり、既存の研究枠組みでは捉えきれない側面がある。
著者らは、Vibe codingの実態を客観的に把握するため、実際のVibe codingセッションの動画を収集し、質的分析を行う必要性を主張している。この研究は、Malleable Software(可鍛性ソフトウェア)の文脈で重要である。なぜなら、エンドユーザーがソフトウェアを修正・カスタマイズする際の実際の行動パターンを理解することが、ツール設計の基盤となるためである。
主要な貢献(Key Contributions)
- 貢献1: Vibe codingの実証的な行動パターンの体系化。8時間以上の動画データから、AIプロンプト・コード評価・手動編集の反復サイクルを特定した
- 貢献2: Vibe codingにおけるプログラミング専門知識の「再分配」モデルの提示。専門知識は不要になるのではなく、コンテキスト管理・迅速な評価・切り替え判断という新しい形態に変化することを示した
- 貢献3: Vibe codingの失敗パターンと限界の実証的な同定。複雑なシステム統合やセキュリティ要件が関わる場合の課題を具体的に報告した
技術的詳細(Technical Details)
研究手法
著者らは質的研究手法を採用している。具体的には以下の設計である。
データ収集: YouTubeおよびTwitchに公開されたVibe codingセッションの動画を8時間以上収集した。動画の選定基準は、(1) LLMを主要なコード生成手段として使用していること、(2) プロジェクトの開始から完成(または中断)までが記録されていること、(3) 開発者のコメントや画面操作が明確に観察可能であること、の3点である。
分析手法: グラウンデッド・セオリーに基づくテーマ分析を実施した。動画データをセグメントに分割し、各セグメントに対してオープンコーディング → アキシャルコーディング → 選択的コーディングの3段階でカテゴリを生成した。
発見された反復サイクル
著者らは、Vibe codingが以下の「目標充足サイクル(Goal Satisfaction Cycle)」に従うことを発見したと報告している。
1
2
3
4
5
6
7
8
9
10
11
12
13
┌─────────────────────────────────────────────┐
│ Goal Satisfaction Cycle │
│ │
│ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │ Prompting │──>│Evaluating│──>│ Editing │ │
│ │ (AI) │ │ (Code) │ │(Manual) │ │
│ └──────────┘ └──────────┘ └────────┘ │
│ ^ │ │
│ └──────────────────────────────┘ │
│ │
│ 繰り返し条件: 目標が未達成の場合 │
│ 終了条件: 目標が達成 or 中断 │
└─────────────────────────────────────────────┘
各フェーズの特性は以下の通りである。
Prompting(プロンプティング): 開発者がLLMに対して自然言語で意図を伝える段階。著者らは、効果的なプロンプトには「現在のコードベースの文脈」「期待する動作の具体的記述」「制約条件の明示」の3要素が必要であることを観察したと報告している。
Evaluating(評価): LLMが生成したコードを評価する段階。著者らによると、評価方法は主に2種類に分類される。(1) アプリケーションの実行結果を確認する「ブラックボックス評価」と、(2) 生成コードの一部をスキャンする「セレクティブ・リーディング」である。
Editing(手動編集): LLMの出力を手動で修正する段階。著者らは、この段階が発生するのは主に「小さな修正がAIプロンプトよりも効率的な場合」と「LLMが繰り返し同じ誤りを生成する場合」であることを報告している。
専門知識の再分配モデル
論文の中核的な発見は、Vibe codingがプログラミング専門知識を「不要にする」のではなく「再分配する」というモデルである。著者らは以下の3つの新しい専門知識領域を同定したと述べている。
\[\text{Expertise}_{\text{vibe}} = f(\text{Context Management}, \text{Rapid Evaluation}, \text{Transition Decisions})\]ここで、
- $\text{Context Management}$: LLMに適切な文脈情報を提供する能力
- $\text{Rapid Evaluation}$: 生成コードの品質を素早く判断する能力
- $\text{Transition Decisions}$: AIプロンプトと手動編集の切り替えタイミングを判断する能力
この知見は、従来の「AIがプログラミングを民主化する」という楽観的な見方に対する重要な反論である。
実験結果(Results)
著者らが報告した主要な観察結果を以下に整理する。
Vibe codingの成功パターン
| パターン | 特性 | 適用場面(著者らの観察に基づく) |
|---|---|---|
| Describe and Accept | AIの出力をほぼそのまま受け入れる | 定型的なUI構築、ボイラープレートコード |
| Iterate Until It Works | 繰り返しプロンプトで修正 | 複雑なロジック、APIの統合 |
| Selective Understanding | コードの一部のみ理解して進行 | 大規模コードベースの修正 |
Vibe codingの失敗パターン
著者らは、以下の失敗パターンを観察したと報告している。
- コンテキスト喪失: 長いセッションでLLMが以前のコンテキストを失い、矛盾する修正を生成するケース
- 過信による品質低下: 「動いているように見える」コードがセキュリティ脆弱性を含むケース
- デバッグの困難: 自分が書いていないコードのバグを特定・修正する困難さ
観察された制約
著者らは、Vibe codingが効果的に機能する領域と機能しない領域を以下のように整理している。
効果的な領域: 個人用スクリプト、プロトタイプ作成、フロントエンドUI構築、データ分析スクリプト
困難な領域: マルチサービス統合、セキュリティが重要なシステム、パフォーマンス最適化が必要なシステム、既存の大規模コードベースの修正
実運用への応用(Practical Applications)
本論文の知見は、Malleable Softwareの実現に向けた具体的な設計指針を提供する。
ツール設計への示唆
Zenn記事で紹介されているInk & Switchの「Gentle Slope(緩やかな坂道)」パターンとの関連が深い。本論文の「専門知識の再分配」モデルは、Gentle Slopeの各段階でユーザーが実際にどのような認知負荷を経験するかを実証的に示していると解釈できる。
具体的には、以下のようなツール設計に応用可能である。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class VibeCodingAssistant:
"""Vibe codingの知見に基づくアシスタント設計"""
def assist_prompting(self, user_intent: str, codebase_context: str) -> str:
"""コンテキスト管理を支援
論文の知見: 効果的なプロンプトには
文脈・期待動作・制約の3要素が必要
"""
enriched_prompt = self._add_context(user_intent, codebase_context)
return enriched_prompt
def assist_evaluation(self, generated_code: str) -> dict:
"""迅速な評価を支援
論文の知見: ブラックボックス評価と
セレクティブ・リーディングの2方式がある
"""
return {
"syntax_valid": self._check_syntax(generated_code),
"security_scan": self._basic_security_check(generated_code),
"diff_summary": self._summarize_changes(generated_code),
}
def suggest_transition(self, iteration_count: int, error_pattern: str) -> str:
"""AI/手動切り替え判断を支援
論文の知見: 同じエラーの繰り返しや
小さな修正は手動編集が効率的
"""
if iteration_count > 3 and error_pattern == "repeated":
return "manual_edit_recommended"
return "continue_prompting"
スケーリングの課題
著者らが報告した「コンテキスト喪失」問題は、Malleable Softwareのスケーリングにおける根本的な課題を示唆している。長時間のカスタマイズセッションでは、LLMがユーザーの変更意図の一貫性を維持できなくなるリスクがある。この問題に対しては、MCPのような標準プロトコルによるコンテキスト管理が解決策となる可能性がある。
関連研究(Related Work)
- Barke et al. (2023) “Grounded Copilot”: GitHub Copilotとのインタラクションパターンを分析した研究。本論文はこれをVibe coding特有の文脈に拡張したものと位置づけられる
- Vaithilingam et al. (2022): LLMコード生成ツールのユーザビリティ研究。Copilotの「期待と現実のギャップ」を報告しており、本論文の「専門知識の再分配」モデルと補完的な知見を提供している
- Sarkar (2023) “What is it like to program with AI?”: 著者の一人による先行研究。AIプログラミングの認知的側面を分析しており、本論文の理論的基盤となっている
まとめと今後の展望
本論文は、Vibe codingの実態を実証的に明らかにした点で学術的に重要な貢献を果たしている。主要な成果は、(1) 目標充足サイクルの同定、(2) 専門知識の再分配モデル、(3) 成功・失敗パターンの体系化、の3点である。
Malleable Softwareの実現に向けては、本論文の知見から以下の示唆が得られる。ユーザーがソフトウェアを自由にカスタマイズできる世界を実現するには、単にLLMの性能を向上させるだけでは不十分であり、コンテキスト管理・評価支援・切り替え判断支援の3つの補助機能を備えたツール設計が必要である。
今後の研究方向として、著者らは大規模定量調査(サンプルサイズの拡大)、縦断的研究(スキル習得プロセスの追跡)、ドメイン固有のVibe codingパターン分析を挙げている。
参考文献
- arXiv: https://arxiv.org/abs/2506.23253
- 会議: PPIG 2025 (Psychology of Programming Interest Group)
- Related Zenn article: https://zenn.dev/0h_n0/articles/c0712fa2cd13b2