読者です 読者をやめる 読者になる 読者になる

syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

LuaスクリプトをWindowsストア アプリで使う

プログラミングTips C++ Windowsストアアプリ Lua

(これは2013-04-25に書いた故OCNブログの記事を加筆修正したものです)

Windows 8上で動作する、Windowsストア アプリでスクリプト言語Lua 5.2とそのC++バインダーであるLuabind 0.9を使う方法です。

そもそも公式の Luabind 0.9.1 はLua 5.2.x系列に対応してなくて、さらに最新版の Lua 5.2.2 もそのままではストア アプリ向けにビルドすることはできないんですが、わずかな修正(と制限)を加えるだけで一応動作するようになりました。何をどう変えたのか、はWinMergeとか使って各自調べてください。

Lua 5.2.2 for Windows Store App (Unofficial)
Luabind 0.9.1 for Lua 5.2 (Unofficial)
Test of Lua 5.2 for Windows Store App

ちなみにLua本体のほうは、「Lua@空想具現化プログラミング」さんにて紹介されているANSIマルチバイエンコードShift_JIS)対応の処理を一応プリプロセッサで有効にできるようにしてはいますが、せっかくMSがストア アプリでANSIマルチバイト サポートを捨てたのですから、Shift_JISなどという産業廃棄物にも劣る旧世紀の遺物を今更ストア アプリで使うのはもうやめておきましょう*1。ちなみにLua for WindowsUTF-8/UTF-16にどうやって対応するか、は上記ストア アプリのサンプル コードを読めば一目瞭然です。*2

下記はLuaストア アプリのサンプルのスクリーンショットです。単純なので使い方もなんとなく分かっていただけると思います。ビルド手順などの詳しい説明はカスタム版Luabindのアーカイブに同梱されているテキストファイルを参照してください。

https://sygh-jp.github.io/content_hosting/my_program_ss/StoreAppLuaTest_ss2013_04_22a.png

コードの二次利用は自由ですが、Boost, Lua, Luabindそれぞれのライセンスに従ってください。また、コードの利用は自己責任でお願いします。仮に損害が発生したとしても、当方は一切の責任を負いません。
なお、とるに足らないテスト用アプリではありますが、コレをこのままストアに提出することは絶対にやめてください。コレはあくまでサンプル コードです。そのまま提出してもたぶん審査で落ちるだけだと思いますが、もしコレをベースにして似たようなアプリを作成する場合、必ず何らかの独自機能をきちんと付加した上で、Package.appxmanifestのPublisherとPublisherDisplayNameをきちんと更新してください。この約束が守られていないアプリを発見した場合、しかるべきところに通報させていただきます。

ちなみにコードを二次利用する際、当方に関するクレジット表記は不要ですが、Luaはクレジット表記する必要があったと思います(MITライセンス)。

余談:Windowsストア アプリと外部スクリプト

Windowsストア アプリでは、実行時にスクリプトを動的に差し替えるようなことはポリシー上できません。その代わり、すべてのスクリプトをパッケージに含める形であれば配布可能です。スクリプト言語Windowsストア アプリで使用する、というのは、あくまで開発効率を高めるためのひとつの手段(あるいはデスクトップ版アプリとの開発基盤共通化目的での使用のみ)だと思ってください。例えばユーザーがインターネット経由でダウンロードした外部スクリプトを使い、アプリの動作までをも変更・拡張できるようなMODやプラグインのためには使用できない、ということです。

Windows ストア向けアプリ認定要件 (Windows)

*1:Shift_JISWindows-1252といったANSIコードページはINIファイルと肩を並べるくらい今すぐにでも滅ぶべき時代遅れの産廃技術です。

*2:実はSquirrelというスクリプト言語であれば、ビルドオプションによりVMをワイド文字対応にすることができるため、Windows環境ではストア アプリ/デスクトップ問わずLuaよりもSquirrelのほうが相性が良いでしょう。ストア アプリでSquirrelを使う方法はいずれまた紹介しようと思います。