Skip to content

feat: コマンド語彙から糖衣 preamble を自動生成する - #51

Open
void2610 wants to merge 3 commits into
mainfrom
feat/generate-command-sugars
Open

void2610 wants to merge 3 commits into
mainfrom
feat/generate-command-sugars

Conversation

@void2610

@void2610 void2610 commented Sep 4, 2026

Copy link
Copy Markdown
Owner

概要

基本コマンドを裸 (screen_shake 2.0) で書かせたいプロジェクトでは、引数をそのまま渡すだけの糖衣 def を全コマンド分手書きすることになり重複記述になる。MRuby は実行時 eval 不可のため、エディタでの .rb 生成で解決する。

変更点

  • builder.RegisterNovelCommandSugars() (Novel.View.VContainer) を追加。エディタの DI ビルド時に語彙をキャプチャして Assets/Resources/Novel/CommandSugars.rb を生成 (差分時のみ上書き) し、ランタイムで IPreambleSource として読む。新コマンドの糖衣が効くのは次の再生から
  • 生成形は宣言順の位置引数 + **kw 両対応 (screen_shake 2.0 / screen_shake duration: 0.5)。渡した引数だけを cmd に流し、未指定は C# 側既定値。[NovelDescription] は def 直上コメント = Project Reference の説明になる
  • 組込語彙・組込 preamble との衝突は生成スキップ + 警告。生成 preamble は組込直後・game 追加分の前に登録され、手書き糖衣が常に後勝ちで上書きできる
  • 設計判断は Knowledge~/design/decisions/command-sugar-generation.md (新規 ADR)

動作確認

  • RegisterNovelCommandSugars() を足して一度再生すると CommandSugars.rb が生成され、次の再生から裸呼びが効く
  • 組込と同名のコマンドは警告が出て生成されない
  • EditMode テスト 208 件通過 (生成ソースを MRubyCS で実コンパイル・実行するテスト含む、手元で確認済み)

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Knowledge~/ の更新履歴・ADR frontmatter に未来日付が含まれており、規約/運用上修正が必要です。

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

コマンド語彙(INovelCommandModule.RegisterVocabulary)から、引数をそのまま cmd に委譲するだけの糖衣 preamble(Ruby def 群)をエディタ側で自動生成し、ランタイムでは生成済み .mrbIPreambleSource として読み込めるようにする PR です。eval 不可な MRubyCS 前提で、重複する手書き糖衣を削減しつつ、手書き preamble が後勝ちで上書きできる運用を整えています。

Changes:

  • RegisterNovelCommandSugars() を追加し、Resources 上の生成 preamble をランタイムで読み込みつつ、Editor では DI ビルド時に語彙をキャプチャして .rb を差分更新で生成
  • 語彙→Ruby ソース生成ロジック(衝突/不正名スキップ含む)とファイル書き出し処理を追加
  • MRubyCS.Compiler を使った EditMode テスト、ドキュメント/CHANGELOG/ADR 追記
File summaries
File Description
Knowledge~/log.md ADR 追加の更新履歴を追記
Knowledge~/design/decisions/index.md 新 ADR を意思決定一覧に追加
Knowledge~/design/decisions/command-sugar-generation.md コマンド糖衣自動生成の ADR を新規追加
Docs/extending.md RegisterNovelCommandSugars() の利用手順と注意点を追記
Assets/Novel/View.VContainer/NovelViewContainerExtensions.cs RegisterNovelCommandSugars() を追加(Editor キャプチャ + Runtime 読み込み)
Assets/Novel/Tests/EditMode/Novel.Tests.EditMode.asmdef MRubyCS.Compiler 参照を追加
Assets/Novel/Tests/EditMode/CommandSugarGeneratorTests.cs.meta 新規テストの meta
Assets/Novel/Tests/EditMode/CommandSugarGeneratorTests.cs 生成ソースの内容検証 + MRubyCS での実コンパイル/実行テストを追加
Assets/Novel/Runtime/NovelCommandSugars.cs.meta 新規 Runtime 定数クラスの meta
Assets/Novel/Runtime/NovelCommandSugars.cs Resources キー定数 + Editor キャプチャ publish イベントを追加
Assets/Novel/Editor/CommandSugarGenerator.cs.meta 新規生成器の meta
Assets/Novel/Editor/CommandSugarGenerator.cs 語彙から糖衣 Ruby ソースを生成するロジックを追加
Assets/Novel/Editor/CommandSugarFileWriter.cs.meta 新規 writer の meta
Assets/Novel/Editor/CommandSugarFileWriter.cs Editor でキャプチャ購読し .rb を差分更新・Import する writer を追加
Assets/Novel/CHANGELOG.md RegisterNovelCommandSugars() 追加を記載
Review details

Files not reviewed (4)

  • Assets/Novel/Editor/CommandSugarFileWriter.cs.meta: Generated file
  • Assets/Novel/Editor/CommandSugarGenerator.cs.meta: Generated file
  • Assets/Novel/Runtime/NovelCommandSugars.cs.meta: Generated file
  • Assets/Novel/Tests/EditMode/CommandSugarGeneratorTests.cs.meta: Generated file
  • Files reviewed: 11/15 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants