里々・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 に登録した状態で動かしています。