校正過程
校正過程: フロントエンド発のFSDをRust製ゲームエンジンで守らせた話
CNK 2026 採択 abstract の「型」を移植し、Round 1〜5 のレビューと改善を経た記録。
トーク設計#
幹(一文)#
「フロントエンド発の FSD を、ゲームエンジン (Rust + Bevy + Dioxus) のエディタに持ち込んだら、Rust のコンパイラ強制と AI 駆動開発の両方が新しい守護者になった」。
2 つの越境: ①ドメイン(Web FE → デスクトップ / ゲームエンジン)が主役 / ②実装(FSD コミュニティの主戦場である JS/TS → Rust)が副次。
3 つの守護者: ①FSD の決定木(機械可読な配置)/ ②Rust のコンパイラ(FSD の世界では Steiger 等の linter が担う encapsulation 強制をネイティブで)/ ③AI 駆動開発との相性
対象(ペルソナ)#
- FE エンジニアで FSD に興味あり/採用検討中の人
- Rust / Dioxus desktop アプリ開発者(少数だが熱量高い)
- 個人開発でアーキテクチャに悩んでいる人
- AI 駆動開発で「AI のコード配置が迷子になる」に心当たりがある人
持ち帰り価値#
- メイン: 「フロントエンド発のアーキテクチャがゲームエンジンエディタで通用する ─ 配置を機械的に決める文化はデスクトップ Rust + AI 駆動開発で増幅される」越境体験
- サブ: Rust の
mod可視性で FSD を「コンパイラに守らせる」翻案レシピ - サブ’: AI にも自分にも効く「機械可読な決定木」という設計思想
避けたいこと#
- FSD の概念解説で時間を食いすぎる(ある程度しっかり扱う方針だが過多は禁物)
- Rust 詳細 / Bevy / Dioxus の細部に潜って聴衆を置き去りにする
- 「皆さんよく知ってる FSD」のような前提押し付け(FSD は比較的新しい概念)
- FSD origin を「TS 発」と不正確に語らない(公式は framework / language 非依存、FE プロジェクト向け methodology と明言。実態として JS/TS 界隈で採用例が多いだけ)
- TS との比較で TS 側を deep に説明しすぎる(聴衆に Steiger 経験者は少ない想定)
構成の型#
フック先出し + 二山構造(PREP に近いが Reason → Example ×2 → Point の重み)
流れ(30 分配分)#
- フック + 自己紹介 + Bebeu 紹介 (0:00–3:00): テーマ呼応「画面の向こうに誰かがいる限り、地続き」+ 越境宣言(インフラ屋・SRE が FE の話を持ってきた)+ Bebeu(Rust + Bevy + Dioxus desktop の個人ゲームエンジン)の世界観をスクショ 1 枚で共有
- FSD 概念きっちり (3:00–8:00): 「Feature-Sliced Design は比較的新しい FE アーキテクチャ」と正直に切り出す(origin は framework 非依存だが FE 向け / 実態として JS/TS の React/Vue 界隈で広まっている)/ 6 layer(app / pages / widgets / features / entities / shared)/ 同レイヤー間の slice 依存禁止 / FSD の世界では Steiger という公式 linter (JS/TS の FE で動く) で encapsulation を守る選択肢
- 持ち込み動機 (8:00–10:00): Bebeu の editor で多ドメイン(Character / SpriteGroup / Animation / Effect 等)+ CRUD feature 増殖の予感 / 配置をその都度判断したくない
- ★山①: Rust 翻案 (10:00–18:00): facade パターン /
slice.rs+slice/ディレクトリ流儀(mod.rs不使用)/pub mod禁止で内部隠蔽 / FSD の世界で linter が担っていた encapsulation を Rust のmod可視性が「コンパイラで強制」/ deep-import 違反 = build error / 「Web 発の架構がゲームエンジンエディタで予想以上にハマった」をオチに置く - ★山②: 機械可読な決定木の恩恵 ─ AI にも自分にも (18:00–24:00): 「どこに置く?」「どこにある?」が機械的に決まる / 自分: 半年後の復帰コストが低い(個人開発の現実的価値)/ AI: prompt が短く済む + deep-import を Rust が build error で止める / FSD 世界の linter との対比は軽く(Rust の優位を示す程度)
- 振り返り + 結論 (24:00–28:00): 3 つの守護者を得た越境ストーリー / 「持ち込んだら思った以上に効いた」 / 持ち帰り(フロントエンド発のアーキテクチャはゲームエンジンでも通用する / FSD 公式エコシステムでも Steiger 使えば近づけるが Rust だと標準で手に入る)
- バッファ + Q&A 誘導 (28:00–30:00)
焦点化#
一人称・内的(「Bebeu で試した」「思った以上に効いた」)。“べき論”の俯瞰解説にしない。
削った素材 → 退避先#
- ADR-0003(DDD 集約ルート ⇔ FSD slice の 1:1 対応) → Q&A 退避
- ADR-0002(synchronous-only data flow)など他 ADR → Q&A / ブログ
- Dioxus の reactivity / undo-redo / OOUI 等の周辺話題 → Q&A
- Bevy 側(engine)の話 → 今回は editor のみに絞る
- AI エージェントの具体ツール名(Claude Code / Cursor 等) → 抽象的に「AI エージェント」で扱う
タイトル候補#
- 現行案: 「『これ、どこに置けばいい?』─ フロントエンド発のFSDを、Rust製ゲームエンジンで守らせた話」
- 補欠案B: 「『FSDはFEだけのもの?』─ ゲームエンジン(Rust + Bevy + Dioxus)に持ち込んでみたら、3つの守護者がついてきた」
- 旧案: 「フロントエンド発のFSD、ゲームエンジンで使える? ─ RustとAI駆動開発が増幅した越境の話」
旧版アーカイブ#
v1: 初期案#
サブ見出しを切った構成で、テーマへの呼応から本論に入っていた版:
「画面の向こうに誰かがいる限り、地続き」 ─ そのテーマに乗らせてください。
本職はインフラエンジニアで SRE をやっています。今日は、フロントエンドで広まったアーキテクチャ Feature-Sliced Design (FSD) を、Rust + Bevy + Dioxus desktop のゲームエンジンエディタ「Bebeu」(個人開発) に持ち込んでみた話を 30 分で。
フロントエンド発の FSD を、ゲームエンジンに持ち込んでみる#
FSD は比較的新しい FE アーキテクチャです。app / pages / widgets / features / entities / shared という 6 つのレイヤーに分け、同レイヤー間の依存を禁止することで「どこに置くか」を機械的に決める設計思想。FSD の世界では Steiger という公式 linter (JS/TS の FE で動く) で encapsulation を守る選択肢があります。
しかしゲームエンジンのエディタは Rust で書かれた Desktop アプリ。Web ではなく、ましてや TS でもない。それでも FSD の決定木はそのまま使えるのか?
やってみた ─ Rust の
mod可視性で、コンパイラが encapsulation を守る#Bebeu の editor を
slice.rs+slice/の facade パターンで組み直したら、deep-import 違反がそのまま build error になりました。FSD の世界で linter が頑張っていた encapsulation の強制が、Rust では標準で手に入る。フロントエンド発の架構が、ゲームエンジンエディタで予想以上にハマりました。さらに ─ 機械可読な決定木は、自分にも AI にも効く#
「どこに置く?」「どこにある?」がレイヤー名で機械的に決まるので、半年後に戻ってきた自分が迷わない。AI エージェントへの prompt も短く済む。AI が deep-import してきても Rust が即 build error で止めてくれる。
持ち帰り#
フロントエンドで生まれたアーキテクチャは、ゲームエンジン (Rust + Bevy + Dioxus) でも通用する。むしろ Rust のコンパイラと AI 駆動開発で増幅される。3 つの守護者 ─ FSD の決定木 / Rust のコンパイラ / AI 駆動開発との相性 ─ を、フロントエンド越境の実例として持ち帰ってください。
リポジトリ (公開ミラー): github.com/sakai-nako/Bebeu
移植した CNK 型の要素チェック#
- #1 一人称の問い: 「これ、どこに置けばいい? 半年後の自分は、ちゃんと見つけられる?」+「インフラ屋のわたしが…抱えてきたモヤモヤ」で実存に接続
- #2 違和感・モヤモヤの開示: 「ここに置いた理由を、半年後の自分が覚えていられない」「配置に毎回悩むコストがスピードを削る感覚」
- #3 転換点の物語化: 「そんな折、…FSD に行き着きます」
- #4 姿勢フレーズ: 「持ち込むのは Web。守るのは Rust。」
- #5 具体ツールと自前性:
slice.rs+slice/facade、pub mod禁止、Rust のmod可視性、build error 強制 - #6 内的変化のビフォーアフター: 「フロントエンド発の架構が、ゲームエンジンエディタで予想以上にハマりました」+「半年後の自分も、AI エージェントも…レイヤー名さえあれば、迷子にしません」(冒頭のモヤモヤと同じ語彙で輪を閉じる + テーマ「画面の向こうに誰か」と語彙レベルで接続)
- #7 独自概念で整理: 「3 つの守護者」「機械可読な決定木」
- #8 本セッションでは…: 最終段落で持ち帰り価値を明示 + Rust を使わない FE 聴衆向け翻案レシピも明示
Round 1 改善ログ#
- タイトル: 案 A 採用(本文冒頭の一人称の問いと完全呼応するため)
- #1 強化: 「インフラ屋のわたしが、Rust の個人開発でずっと抱えてきたモヤモヤ」を冒頭に追加し、配置の悩みを実存に接続
- #3 強化: 「目に入ります」(受動)→「行き着きます」(能動)
- #4 短縮: 22 字 →「持ち込むのは Web。守るのは Rust。」14 字。CNK 採択版「あるものでやる。ないものは作る。」(16 字) と同等のリズムに
- #6 輪を閉じる: 「半年後の自分は、もう迷いません」を追加し、冒頭の「半年後の自分が覚えていられない」を同じ語彙で受ける
- #7 抽象削除: 「対称構造でした」を削除
- 末尾の重複解消: 「予想以上にハマった越境体験」→「Rust と AI に増幅された越境体験」
Round 2 改善ログ(文章リズム・引き込み)#
- タイトル: カッコ「(Rust)」を外し、「ゲームエンジンの Rust で守らせた話」に。口に出した時の引っかかりを解消
- 段落 1 の記号過密解消: 「『これ、どこに置けばいい?──そして半年後、自分はちゃんと見つけられる?』」→ 内側のダッシュを半角スペースに置換し「『これ、どこに置けばいい? 半年後の自分は、ちゃんと見つけられる?』」に。引用符+ダッシュ+ダッシュの三重記号 → 二重まで軽減
- 段落 2 を二分: 一文に修飾と挿入と心情が同居していたのを「個人開発しています。/ ドメイン…」で 2 文に
- 段落 3 を段落 3+4 に分割: 「FSD 概念紹介」と「持ち込み実装〜ハマった」を別段落に。山の頂を立てる
- 「FSD の世界」二連発を解消: 後者を「Steiger が JS/TS で頑張っていた encapsulation が」に変更
- 段落 6 の主述ねじれ解消: 「フロントエンド発のアーキテクチャが…30 分で共有します」→「フロントエンド発のアーキテクチャをゲームエンジンエディタに持ち込み、Rust と AI に増幅された越境体験を 30 分で共有します」
- 冗長削除: 「個人開発」の同段落 2 回 → 1 回に / 「そのまま FSD の守護者に据えました」→「FSD の守護者に据えました」
- 「半年後」連発回避: 段落 5 中盤の「半年後に戻ってきた自分にも」→「明日の自分にも」に変奏。最終文の「半年後の自分は、もう迷いません」だけ残す
Round 3 改善ログ(CFP 審査者目線)#
- 採否予測 (Round 3 レビュー前): 3/5 (「物語の型・独自角度は強いが、本体が Rust 寄りで FE 編成として通すか審査者が一拍迷う」)
- タイトル変更: 「ゲームエンジンの Rust で守らせた話」→「Rust 製ゲームエンジンで守らせた話」。係り受け「ゲームエンジンの Rust」(所属関係が弱い) →「Rust 製ゲームエンジン」(複合名詞で主役を明示)
- FE 聴衆向け翻案レシピを明示: 最終段落に「Rust を使わない方は可視性で encapsulation を守れる他言語への翻案レシピとして」を追加。レビュー指摘「FE 聴衆の “翌週月曜” が弱い (持ち帰りの中核が Rust の
mod可視性)」への対応 - テーマ「画面の向こうに誰か」と語彙接続: 段落 5 末尾を「半年後の自分は、もう迷いません」→「半年後の自分も、AI エージェントも、コードの “向こう側” にいる読者。レイヤー名さえあれば、迷子にしません。」に置換。これによって:
- テーマ「画面の向こうに誰かがいる限り、地続き」と “向こう側” で語彙レベルで接続
- レビュー指摘「3 つの守護者の③ AI 駆動開発が abstract で担保されていない」を「AI エージェント」を読者として位置づけることで具体化
- 「半年後の自分は、もう迷いません」よりも能動的・対象 2 つ並列 (自分 + AI) で締まる
Round 4 改善ログ(Anti-Slop)#
- 5 軸スコア (Round 4 レビュー時点): 立場 8 / リズム 7 / 主体性 9 / 具体性 9 / 削減 6 = 合計 39/50。書き直し閾値 35 をクリアして公開可ライン
- 対称構文を 2 文に分解: 段落 6 末尾「フロントエンド越境の実例として、また Rust を使わない方は…翻案レシピとして、持ち帰ってください」→「フロントエンド越境の実例として持ち帰ってください。Rust を使わない方には、可視性で encapsulation を守れる他言語への翻案レシピになります。」(「○○として、また××として」は AI 好みの対称構文)
- 「守護者」前借りの解消: 段落 4 中盤「Rust の
mod可視性を FSD の守護者に据えました」→「Rust のmod可視性に、FSD のレイヤー境界を守らせました」。最終段落の「3 つの守護者」を独自概念として立てる集中度を上げる - 名詞化の削減: 段落 3 末尾「encapsulation を強制する世界。」→「encapsulation を強制します。」(「○○の世界」は景色/風景系の名詞化、撲滅語彙の §1)
- 「ふと」の削除: 段落 2「ふと手が止まりました」→「手が止まりました」(「ふと」は AI 常套副詞)
- 記号集計:
──3 個 → 3 個(変動なし、abstract 推奨 1-2 個に対して満杯) - 維持判断: 「3 つの守護者」「機械可読な決定木」「持ち込むのは Web。守るのは Rust。」は独自概念・姿勢フレーズとして維持(Anti-Slop の昇華語に該当しても独自性で抜く判断)
- 公開ライン到達: 5 軸合計が閾値超え。CFP 用 abstract として「AI 臭が抜けた」状態
Round 5 改善ログ(接続度 = coherence)#
ユーザー提案による新規軸。文章の各要素間の接続強度と接続タイプを RST 系(Halliday & Hasan の cohesion / coherence、Rhetorical Structure Theory)に基づいて評価し、Cohesion(言語的結束)と Coherence(意味的一貫性)の両面で診断。
全体診断: Cohesion は強い(「どこに置く / 配置 / レイヤー名」「そんな折」「それでも」「さらに」など語彙と接続詞の鎖が太い)。一方で Coherence の弱点は「先出しの細部が後段で回収されない」(SRE 粒度)と「メタファー・新概念の論理橋省略」(AI 初出、読者メタファー)に集中。両者とも CNK 型の Setup-Payoff を狙った配置だが、Payoff 側の語彙接続が abstract 内に閉じていないため、その場では浮いて感じられる。
ワースト 3 → 修正:
- W1: 段落 2「本職はSRE → 趣味でBebeu」接続度 4 → 改善
- 問題: SRE という細粒度の追加情報が abstract 全体で回収されず、伏線として宙吊り
- 修正: 段落 2 冒頭に「反復作業を疑うのが日課です。」を追加。これにより「SRE 性 = 反復作業への感度」が Cause-Consequence で接続され、後段「配置に毎回悩むコストが、スピードを確実に削っていく感覚」と語彙接続して回収される
- W2: 段落 4→5「AIエージェント」初出 接続度 6 → 改善
- 問題: AI 駆動開発が段 5 冒頭で「さらに」と並列追加される(事前予告なし)
- 修正: 段 5 冒頭「『どこに置く?』『どこにある?』がレイヤー名で機械的に決まる決定木は、AIエージェントへのpromptにも…」→「この機械的に決まる決定木は、AIエージェントと一緒に書くとき効きが倍になりました。promptにも、明日の自分にもそのまま効きます。」。AI を「決定木の効きが倍化する文脈」として導入することで、Cause-Consequence で接続
- W3: 段落 5「向こう側にいる読者」メタファー導入 接続度 4 → 改善
- 問題: 「読者」というメタファーが論理橋なく挿入される
- 修正: 「半年後の自分も、AIエージェントも、コードの”向こう側”にいる読者。」→「半年後の自分も、AIエージェントも、わたしのコードを”読みに来る”側 ─ 画面の向こうの読者です。」。「読みに来る側 → 画面の向こうの読者」と橋を一段挟むことで「読者」と呼ぶ根拠を abstract 内に明示。テーマ「画面の向こうに誰か」とも語彙レベルで完全一致
接続度改善後の見立て: W1〜W3 すべて 接続度 7-8 に到達。Coherence の弱点が抜けて、Cohesion との両輪が成立した状態
ユーザーフィードバック反映#
- 「30 分で」削除: 最終段落「Rust と AI に増幅された越境体験を 30 分で共有します。」→「Rust と AI に増幅された越境体験を共有します。」。CFP フォームで枠(レギュラー 30 分)を選んだ時点で時間は決まっているため、abstract での所要時間表記は冗長
- ベタ詰め適用: タイトル候補とトーク概要本文の英数字・強調・半角括弧・半角引用符と日本語の境界の半角スペースを除去。英語フレーズ内 (
Rust + Bevy + Dioxus desktop等) のスペースと、em-dash─前後、記号と日本語の境界 (? 半年後等) は維持 - Markdown 装飾の除去: トーク概要本文から強調
**...**とインラインコード`...`を除去。CNK 採択 abstract も装飾なし運用なので整合
採否予測の推移#
- Round 2 終了時 (型 + リズム済み): 3/5(FE 聴衆の自分ごと化 + テーマ接続の弱さがネック)
- Round 3 改善後想定: 3.5〜4/5(翻案レシピと “向こう側” の接続で両方の弱みに当てた)
- Round 4 終了時: 3.5〜4/5(Anti-Slop で公開ラインに到達)
- Round 5 終了時: 4/5(接続度の Coherence 弱点が抜け、Cohesion との両輪が成立)
留意事項(編成戦略)#
- Round 3 レビューで「LT 版が “FE 文化が外から流入する” のに対し、本案は “FE 文化が外へ流出する” 形で、編成上は同じ著者の LT の方が通しやすい可能性」が指摘された
- 重複採択不可の前提では、編成側が「Regular に FSD、LT に Slidev」と並べる可能性が現実的(または逆方向)。両案の独立性は維持されている
- スライド本編で
pub/privateを持つ他言語への翻案例(Java のpackage private、Swift のinternal等)を口頭で 1〜2 個出せると、abstract の約束を担保できる