🌟

【Roblox】Unit for Luauをリリースしました

に公開
2026/01/16

はじめに

こんにちは!hoshinoです!
本記事では、最近私がリリースしたRoblox向けライブラリ「Unit for Luau」についてご紹介します!

https://github.com/921starfish/unit-for-luau

本題: 「Unit for Luau」についてのご紹介

どんなライブラリなのか?

LuauにUnit型を導入するためのライブラリです。
Unit型とは、語弊を恐れずにいうと「voidの代わりにプレースホルダーとして使える型」です。意味のない返り値が必要なケースで効果を発揮します。例えば、Railway Oriented Programmingなどが代表的なケースかと思います。

なお、Unit型についての解説記事としては、F#の公式ドキュメントがシンプルでわかりやすいです。

導入方法

Wallyを使っている場合、wally.tomlに以下を追記してください。

[dependencies]
Unit = "921starfish/unit@1.0.2"

Wallyの導入や使い方については以下の記事をご覧ください。
https://zenn.dev/ambr_inc/articles/15bef38a830a2e

なお、Wallyの制約により、普通にインストールしただけではUnit型の型定義がエクスポートされません(!)
そのため、JohnnyMorganz氏によるOSS、Wally Package Types Fixerを併用することをお勧めします。

使い方

-- Moduleを読み込みます。
local Unit = require(path.to.Unit)

-- Unit型の唯一の値はUnit.unitです。
-- エイリアスとして、Unit.Unitも用意してあります。
local unit = Unit.unit

-- OOPスタイル向けに、Unit.new() / Unit.New()もあります。
unit = Unit.new()

-- 任意のUnit型の値は等価です。
print(Unit.unit == Unit.new()) -- true

-- tostringすると"()"になります。
print(tostring(unit)) -- "()"

-- Wally Package Types Fixerを使うと、Unit.Unit型が見えるようになります。
-- ※ Unit.Unit(値)とUnit.Unit(型)を混同しないようお気を付けください。
type Unit = Unit.Unit

-- 副作用のある関数の返り値の型注釈などにお使いください。
local function doSomething(): Unit.Unit
    -- do something...
    return Unit.unit
end

おわりに

本記事では、自作のRoblox向けライブラリ「Unit for Luau」についてご紹介しました。
本記事とライブラリが皆様のお役に立てれば幸いです。

次回予告

Unit for Luauの内部実装について、少し細かいお話をします。
お楽しみに!

https://zenn.dev/921starfish/articles/unit-for-luau1

参考

Discussion