Robloxでモジュールを利用して開発効率を向上させる

モジュールとは

コードの再利用を行うための仕組み、利用頻度が多いコードなどはモジュールとしてまとめておけば、同じ処理を何度も重複して書かずにすむ

なぜモジュールを利用するのか

モジュールを利用する理由として、効率化とコードの保守、管理のしやすさの向上が挙げられる。例えば共通の処理(プレイヤーの所持コインを増やす)をモジュールを使わずに書く場合、同様の処理を毎回他のスクリプトに書く必要が出てくるだろう。毎回コピーをするのも手間がかかるし、万一貼り付けを間違えたら処理がうまく動かなくなる。更にコードの振る舞いを変更したいときに共通の処理が書いてあるコードすべてを書き換える必要が出てくる。これも手間だし、書き直し忘れがあれば不具合の原因になるだろう。

ここでモジュールを利用すれれば共通の処理は一箇所にまとめてあり、他のコードから呼び出しをするだけで良いので呼び出し元の複製の作業も少なく済む上に、変更があればモジュールスクリプトのみ変更するだけで変更が完了する。

モジュールスクリプトの作成

モジュールスクリプトは一般的にServerStorageに保存する。ここに保存したモジュールスクリプトは自動では実行されず、他のスクリプトからの呼び出しによって実行される。

ServerStorage配下にModuleScriptを作成、名前をFirstModuleに変更する。

作成したスクリプトの中身は以下のようになっている。この最初の行と最後の行の間にコードを記述することでモジュールの機能を実装することができる

local module = {}

return module

モジュールの名前の決定

moduleの名前を書く時は先頭の文字と単語の区切り部分を大文字にする(アッパーキャメルケース/パスカルケース)

local FirstModule = {}

return FirstModule

モジュールの機能の実装

以下のようにモジュールの中身を実装する。今回は簡単に名前を入力したら挨拶をする関数を追加する

local FirstModule = {}

-- 挨拶用の接頭辞
local preFix = "Hello "

-- 追加した関数、名前を受け取って挨拶のログを出力する
function FirstModule.SayHello(name)
	print(preFix..name)
end

return FirstModule

ここで変数や関数を定義するときの注意として、外のコードから読み取る変数や呼び出す関数にはlocalを指定しないことがある。この単語を指定してしまうと他のコードからは参照することができなくなり、機能を呼び出すことができない、ただし上記の挨拶モジュールの例のようにモジュールの内部でしかアクセスしない変数(preFix変数)に関してはlocalをつけておくのがよい。

モジュールの利用

モジュールを利用するにはServerStorageからモジュールスクリプトを取得して利用する。

ServerScriptServiceにスクリプトを追加、名前をCallFirstModuleに変更する。

追加したスクリプトを以下のように編集する

-- モジュールの取得
local firstModule = require(game.ServerStorage.FirstModule)

-- モジュールの関数呼び出し
firstModule.SayHello("sanukin39")

結果

関連

https://education.roblox.com/ja-jp/resources/intro-to-module-scripts