Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

公開モジュール API

クローディア(素)

道具箱を開ける時間ですわ。検索、永続化、設定、ログ、文字コード変換――Pasta ランタイムは、あなたの手間を肩代わりしてくれる頼もしい子たちを、いくつものモジュールとして用意しておりますの。

アンソニー(素)

では本日は、その子たちとの顔合わせでございますね。

クローディア(お辞儀)

ええ、まずは全員の顔と名前を覚えていただきましょう。……皆さま、どうぞよろしくお願いいたしますわ。


Pasta ランタイムは Rust 側から Lua VM へモジュール群を公開している。require で読み込んで使う。 この章群は、scripts/ 配下のスクリプト、ランタイム同梱のスクリプト、DSL 内の ```lua ``` ブロックから 利用できる公開モジュールを、1 モジュール 1 章で扱う。本章はその一覧と、全モジュールに共通する事項をまとめる。

モジュール一覧

@ で始まる名前は Rust 組み込みモジュール(ランタイムが提供)、pasta. で始まる名前は ランタイム同梱の Lua モジュールである。この章群は前者の Rust 組み込みモジュールを扱う。 pasta. のモジュール(pasta.word など)の実用パターンは scripts/ の記述パターン で扱う。

モジュール用途読み込み方章
@pasta_searchシーン・単語の前方一致検索require "@pasta_search"@pasta_search
@pasta_persistenceセーブデータの永続化require "@pasta_persistence"@pasta_persistence
@pasta_configpasta.toml の設定の読み取りpcall(require, "@pasta_config")@pasta_config
@pasta_sakura_scriptさくらスクリプト変換(ウェイト挿入・自動改行)require "@pasta_sakura_script"@pasta_sakura_script
@encUTF-8 ⇔ ANSI の文字コード変換require "@enc"@enc
@pasta_logロギングrequire "@pasta_log"@pasta_log
@tomlTOML の文字列のデコードrequire "@toml"@toml

JSON・YAML・正規表現の部品は無い。文字列は Lua の標準の string.find・string.match・string.gsub で調べる(Lua 標準ライブラリ)。

共通事項

対象の Lua 方言

対象方言は LuaJIT 2.1(Lua 5.1 系)である。言語の基礎は Lua の基礎 で扱う。

読み込みと利用できる時期

  • 一覧のモジュールは、ランタイムの初期化時(main.lua を読み込む前)にすべて package.loaded へ登録される。require はファイルを探さず、登録済みの表(@pasta_search はユーザーデータ)を返す。同じ名前を何度 require しても同じものが返る。
  • @pasta_search は、シーン辞書の読み込みの最後に finalize_scene() が実行された時点で検索対象が確定する。それより前に呼んだ結果は使えない(利用できる時期)。シーン関数やイベントハンドラの実行時には確定している。
  • @pasta_config は pcall(require, "@pasta_config") で読む。ゴーストとして読み込まれたランタイムでは常に登録されているが、ランタイムの外(Lua だけの単体テストなど)でスクリプトを動かすと登録されておらず、素の require はエラーになる。ランタイム同梱のスクリプトもこの形で読んでいる(読み込み方)。

呼び出しの形

  • @pasta_search はメソッドとして : で呼ぶ(SEARCH:search_scene(...))。
  • その他のモジュールは表の関数として . で呼ぶ(persistence.load()・log.info(...) など)。

失敗の返し方

  • 呼び出しの失敗を戻り値で返す関数は、成功時に 値, nil、失敗時に nil, エラーメッセージ の 2 値を返す(@pasta_persistence の save、@enc の変換関数、@toml の decode)。
  • 引数の型が合わない呼び出し(表を渡すべき所に文字列を渡すなど)は、戻り値ではなく Lua のエラーになる(@enc の変換関数は例外で、文字列以外を渡しても nil, エラーメッセージ を返す)。

モジュールのメタデータ

@pasta_persistence・@pasta_sakura_script・@enc・@pasta_log の表は、_VERSION(版の文字列)と _DESCRIPTION(説明の文字列)を持つ。

Lua 標準ライブラリ

ランタイムは既定で、Lua 標準ライブラリのうち安全なものだけを読み込む。

  • 既定で使える: string・table・math・io・os・package・coroutine・bit・jit
  • 既定では使えない: debug・ffi(require "ffi" はエラーになる)

この構成は pasta が固定しており、ゴーストから変える手段は無い。ただし ffi だけは、pasta.toml に [loader] ffi = true と書けば開ける(ffi)。


クローディア(したり顔)

道具の名前と使い方、ざっと頭に入れていただけたかしら。最初は覚えきれなくても結構ですのよ。必要になったら、この一覧へ戻ってくればよいのですから。さあ、端から順に手に取ってまいりましょう。

アンソニー(素)

皆さまのお顔とお名前は、私も控えに書き留めておきました。