里々・YAYAから湊への移行ガイド

このガイドは、里々(またはYAYA)でゴーストを作ってきた人が湊に移るときに、何が壊れるかを先に知っておくためのものです。

文法の対応表を並べるだけの資料ではありません。移行でつまずくのは「書き方が違う」ところよりも、見た目は同じコードなのに結果が違うところです。里々が黙ってやってくれていた処理(自動の改行、自動保存、文字列としての数値計算、括弧展開など)が、湊には無かったり、別の形で存在したりします。このガイドはそこを重点的に扱います。

先に結論

湊は里々の上位互換でも、里々の代替として互換動作するエンジンでもありません。 辞書ファイルの形式も、変数の扱いも、セーブデータも、文字コードも別物です。辞書は機械変換できず、トークは書き直しになります。

その代わり、里々では苦労した処理(構造化データ、正規表現、ファイル操作、複雑な条件分岐)が素直に書けます。移行の価値があるかどうかは、段階移行 vs 全置換と湊だけで簡単になる書き方で判断してください。

読み方

移行者の不安を潰していく順に並べています。上から順に読むのがおすすめです。

節内容こんなときに
1. 非互換一覧壊れるものの一覧(チートシート)まず全体像を知りたい
2. 最小ゴーストの移植「こんにちは」を出すところまで手を動かして確認したい
3. イベント*OnBoot、ランダムトーク、独自イベントイベントまわりで悩んだ
4. トーク同名トーク、採用条件、ジャンプトークの選ばれ方が違う
5. 変数保存、型、暗黙の変換変数が消える、計算が合わない
6. 単語群@の代わり単語群を書き直したい
7. 選択肢・条件分岐・ウェイト_、iflist、自動ウェイト選択肢や間の取り方を直したい
8. SAORI呼び出し(登録名,引数)の代わりSAORIを使っている
9. セーブデータの移行と型の違いsatori_savedata.txtの引き継ぎ既存ユーザーのデータを残したい
10. 文字コード・改行・エスケープUTF-8、改行、\、$文字化け・改行のずれ
11. 里々/YAYAにあるが湊にない機能無い機能と代替使っている機能が湊にあるか知りたい
12. 湊だけで簡単になる書き方湊の強み移行のメリットを知りたい
13. 段階移行 vs 全置換機能ごとの星取表移行方針を決めたい
14. FAQ: 見た目は同じで結果が違う暗黙の処理の差動くのに結果がおかしい
15. 三方式の比較里々/YAYA/湊で同じゴーストを書く全体の雰囲気をつかみたい
付録A. YAYAから来た方へYAYA向けの差分YAYAから移行する

凡例

一覧では、影響の大きさを次の印で示します。

  • 🔴 黙って壊れる、または起動しない。 里々のつもりで書くと、エラーも出ずに文が消えたり、データが残らなかったりします。
  • 🟠 動くが結果が違う。 見た目は同じコードで、計算結果や改行位置が変わります。
  • 🟡 湊にない機能。 代替手段があるものは併記します。

このガイドの前提と検証

  • 対象は湊 0.1.6(この文書のリポジトリの現在の実装)です。挙動は実装を正として書いています。ドキュメントと実装が食い違う場合は、実装に合わせ、その旨を明記しています。
  • 湊のサンプルコードは、すべて実際に動かして確認しています。 文中の mnt コードブロックとその出力は、cargo test --test migration_guide で実行され、出力が一致することを毎回検証します。SAORIを使う例だけは、検証用のSAORIで別途確認しています(8. SAORI呼び出し)。
  • 里々・YAYAのコードは参考コードです。里々Wiki・YAYA Wikiの記載に基づいて書いていますが、里々やYAYAの実機では動かしていません。里々/YAYAの挙動を断定できないところは、その旨を書いています。
  • 里々の説明は「里々Wiki」の記述に基づきます。里々のバージョンによって細部が異なる場合があります。

出力の読み方

サンプルの出力(text ブロック)は、湊がSSPに返すさくらスクリプトです。1イベントにつき1行で、(204) は「何も返さない」応答です。

湊は OnBoot と OnMinuteChange の応答の最後に、SSPの仮想時刻を取得するための \![get,property,OnGotVirtualTime,…] を付け足します。ガイドの出力では、これを取り除いて示しています(3. イベントを参照)。

サンプルは、キャラクター 湊(\0)と 助手(\1)を config.toml に登録した状態で動かしています。