Luaの環境整備について

に公開

こんにちは、ゲーム事業部 技術課のNです。
今回は、今期の班活動の一環として進めている「Luaの環境整備」についてご紹介します。
本活動はまだ実装途中のため、今回は概要のみお伝えします。

背景

過去にLuaをシナリオスクリプトとして採用したプロジェクトはありましたが、独自にLuaの実行環境を構築し、運用されていたためプロジェクト間でノウハウの共有が難しく、同じような実装や課題に何度も直面することがありました。
このため、スクリプターが新しいプロジェクトに参加する際、過去の資産や知見を活かしきれないという問題もあり、開発効率の低下や品質のばらつきが生じていました。

この課題を解決すべく、今期の班活動では「社内フレームワーク上で、プランナーの皆さんがよりスムーズにLuaを簡単に扱えるよう」取り組んでいます。

取り組みの一例

社内フレームワークへのLua導入

C#で利用可能なLuaライブラリはMoonSharp、NLua、Lua-CSharpなど複数あります。
MoonSharpはC#で実装されているライブラリのため、Visual Studio Codeでブレークポイントを設定できるなど、デバッグ作業が効率的に行える点が大きな利点です。
他のライブラリと比較して、導入事例やドキュメントが豊富である点も選定理由の一つです。
今回はシナリオスクリプトとしてLuaを使うという観点から、速度よりもデバッグの容易さを重視し、MoonSharpを選定しました。

今後Luaを使わないプロジェクトも想定されるため、社内フレームワークへ直接組み込むのではなく、ライブラリ化して必要となった時にプロジェクトに簡単に簡単に導入できるよう実装を進めています。
もちろんUnityでの開発ですので、ライブラリとサンプルプロジェクトをそれぞれUnity Package Managerからインストールできるように実装しています。

ルール策定

プログラム言語に対するコーディング規約は社内で確立されていましたが、Luaのようなスクリプトの扱い方はプロジェクトごとに異なっていました。
Luaスクリプトにも命名ルールや記載方法のルールを定め、コーディング規約としてまとめるよう進めています。
今後もルールの見直しやドキュメントの充実を図り、より良い開発体制を整えていきます。

使いやすい環境作り

Luaスクリプトを動かす際は、このような手順で進めています。
各工程での効率化やミスの削減を目指し、以下のような改善を行っています。

Luaスクリプトの記載

ゲーム作成では、セリフなどのテキストはローカライズを考慮してエクセル上で管理され、プログラムから参照される時はIDとして扱われることが多いです。
Luaスクリプトを記述するスクリプターは、直接セリフのテキストを扱いたいと考えることが多いです。
IDを直接Luaスクリプトに埋め込んでしまうと、IDから実際のセリフが何だったか確認する際に手間がかかるためです。

そのため、現場では「IDだけでは内容が分かりづらい」「作業効率が下がる」といった声もありました。
今回の取り組みでは、こうした課題を解決するために、スクリプターが記述したテキストから自動的にID管理されたデータを生成し、Unityプロジェクトに反映できる仕組みを導入しています。
これにより、作業の手間を減らし、より直感的にシナリオ作成ができるようになりました。
また、直接Luaを記載するのが難しいスクリプター向けに、コマンドを省略して記載できる仕組みも検討しています。

動作テスト

実行中にエラーが発生した際、これまではプログラマに連絡し、発生した問題の特定を依頼していました。
現在は、スクリプター自身で原因の特定が行えるよう、どんなエラーがどこで発生したかといった情報を画面上に表示して伝える機能を追加しています。

コミット

動作確認が取れたLuaスクリプトは、バージョン管理システムにコミットします。
プルリクエスト上でCIツールと連携し、自動で書式チェックやテストを実行することで、問題があればレビュアーに通知する仕組みを導入しました。
これにより、記述ミスやフォーマットの不統一を早期に発見でき、品質の担保と作業負担の軽減を両立しています。

今後について

今回の取り組みは、Luaスクリプトを記述する担当者としてプランナーにご協力いただいています。
実際にスクリプターに本環境を使いやすいかどうか触っていただき、フィードバックをいただく予定です。
さまざまなご意見をいただきながら、より良い開発環境を目指して今後も取り組んでいきます。

Discussion