Robloxでのゲーム開発に使う言語 「Luau」について HOSHINO Yūya
自己紹介 ● 職業: ○ Robloxクリエイター ■ Robloxプラットフォーム上にゲームを作る人 ● バックグラウンド: ○ サーバーサイドもやる ○ 関数型プログラミングは趣味
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
本セッションでは ● 得られるもの ○ LuauでRobloxゲーム開発を行う際に、 関数型プログラミングの考え方をどこまで活かせて、 どこから難しくなるのかについての入門知識 ● 説明すること ○ Robloxの概要 ○ Luauの概要 ■ 関数型的な書き方 ● 説明しないこと ○ Luaの詳細 ○ 関数型プログラミングの個別のテクニック
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
Robloxとは ● 制作したり、友達と体験を共有したり、イメージをふくらませて 何にでもなったりできる究極のバーチャル世界 (公式サイトより引用)
Robloxとは -ざっくりと● 世界最大級のゲームプラットフォーム ○ 月間3.5億人以上が訪問 ● 誰でも簡単に世界中に自分の作ったゲームを公開可能 ○ 語弊を恐れずいうとゲーム版 YouTube ○ 開発の簡単さが多彩さのバックグラウンドになっている ● 以下の専用ツールで開発 ○ 専用ゲームエンジン「Roblox Studio」 ○ プログラミング言語「Luau」
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
Luauとは ● Luau (lowercase u, /ˈlu.aʊ/) is a small, fast, and embeddable programming language based on Lua with a gradual type system. (公式サイト(https://luau.org)より引用)
Luauとは -補足● JavaScriptに対するTypeScriptと似たような関係 ○ 導入された型システムも雰囲気は似ている ● Lua 5.1をベースにしているが完全な互換性はない ● Robloxに特化しているわけではなく、公式から処理系もダウン ロード可能 ○ https://github.com/luau-lang/luau ○ 手軽に試すなら公式サイトのPlaygroundがおすすめ ● 関数型味が強い言語ではない
Luauとは -補足● コードサンプル(公式サイトより引用) -- we can define our own structural data types type Point = { x: number, y: number } -- and we can annotate variables (and function arguments) with them) local p: Point = { x = 1, y = 2 } print(p.x, p.y)
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
Luauでできる関数型プログラミング ● 関数を値として扱える ○ 構文が軽量で見づらくもない local Add = function(a: number) return function(b: number) return a + b end end print(Add(1)(2)) -- 3
Luauでできる関数型プログラミング ● TypeScriptなどで行えるアプローチは積極的に真似できる ○ 代数的データ型的アプローチ ○ Result型の導入 ○ 純粋関数とそれ以外の分離 ○ etc.
Luauでできる関数型プログラミング ● OSSを使う ○ MapやReduceなどを提供 ■ https://github.com/cxmeel/sift ● 自分で作る ○ 自作のResult型 ■ 非公開 ○ 自作のUnit型 ■ https://github.com/921starfish/unit-for-luau
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
Luauでできない 関数型プログラミング ● ❌ 末尾呼び出し最適化 ○ Tail calls are not supported to simplify implementation (Compatibility with Lua | Luauより引用) ● 再帰関数は書かない方が無難
Luauでできない 関数型プログラミング ● ❌ イミュータビリティ ○ Luauのテーブルはデフォルトで基本的にミュータブル ○ read修飾子などはあるが、2025/11にGAされたばかりで まだ一般的でないかも
Luauでできない 関数型プログラミング ● ❌ パターンマッチング ○ 代数的データ型的なことはできる ■ https://luau.org/types/unions-and-intersections/#tag ged-unions ○ でもパターンマッチングが言語仕様にない
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
関数型プログラミングとRoblox ● 関数型プログラミング ○ ゲームのパフォーマンスと両立させるのは初心者には難し い ■ ソフトウェアアーキテクチャなど ● Robloxの特徴 ○ Obby(アスレチック)やFind(宝探し)など、パフォーマンス に対しシビアでないゲームも人気がある → 関数型プログラミング入門に向いている……かも
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
まとめ ● Roblox ○ 人気のゲームプラットフォーム ● Luau ○ Luaにいわゆる漸進的型付けを導入した言語 ● Robloxでの開発においての関数型プログラミング ○ 言語の制約上、できないことも多い ○ でも、完全に閉ざされているわけではなくて、できることも 多い
ご清聴ありがとうございました!