0.9K Views
July 11, 26
スライド概要
ソフトウェアエンジニア
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とは ● 制作したり、友達と体験を共有したり、イメージをふくらませて 何にでもなったりできる究極のバーチャル世界 (公式サイト [1] より引用)
Robloxとは -ざっくりと● 世界最大級のゲームプラットフォーム ○ 2026Q1の平均DAUは1億3,200万人 [2] ● 誰でも簡単に世界中に自分の作ったゲームを公開可能 ○ 語弊を恐れずいうとゲーム版 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. (公式サイト [3] より引用)
Luauとは -補足● Lua 5.1をベースにしているが完全な互換性はない ● JavaScriptに対するTypeScriptと似たような関係 ○ 導入された型システムも雰囲気は似ている ● Robloxに特化しているわけではなく、公式から処理系もダウン ロード可能 ○ GitHub - luau-lang/luau [4] ○ 手軽に試すなら公式サイト [3] のPlaygroundがおすすめ ● 関数型味が強い言語ではない
Luauとは -補足● コードサンプル(公式サイト [3] より引用) -- 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などを提供 ■ GitHub - cxmeel/sift [5] ● 自分で作る ○ 自作のResult型 ■ 非公開 ○ 自作のUnit型 ■ GitHub - 921starfish/unit-for-luau [6]
目次 1. 本セッションでは 2. Robloxとは 3. Luauとは ○ Luauでできる関数型プログラミング ○ Luauでできない関数型プログラミング 4. 関数型プログラミングとRoblox 5. まとめ
Luauでできない 関数型プログラミング ● ❌ 末尾呼び出し最適化 ○ Tail calls are not supported to simplify implementation (Compatibility with Lua | Luau [7] より引用) ● 再帰関数は書かない方が無難
Luauでできない 関数型プログラミング ● ❌ パターンマッチング ○ 代数的データ型的なことはできる ■ Union and Intersection Types: Tagged unions [8] ○ でもパターンマッチングが言語仕様にない
Luauでできない 関数型プログラミング ● ❌ イミュータビリティを前提とする ○ Luauのテーブルはデフォルトで基本的にミュータブル ○ 以下のような手段である程度の担保は可能だが処理系の バージョンに注意 ■ constでの宣言 [9] ■ table.freeze関数 [10] ■ read修飾子 [11]
目次 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での開発においての関数型プログラミング ○ 言語の制約上、できないことも多い ○ でも、完全に閉ざされているわけではなくて、 できることも多い
質問への回答 Q. 最も嬉しかったことは? A. 自作のResult型の導入ができたこと
参考文献 [1] Roblox, https://www.roblox.com/ja,(参照 2026-07-12) [2] Q1 2026 Supplemental Materials, https://s27.q4cdn.com/984876518/files/doc_financials/2026/q 1/Q1-2026-Earnings-Supplemental-Materials.pdf,(参照 2026-07-12) [3] Luau, https://luau.org,(参照 2026-07-12) [4] luau-lang/luau: A small, fast, and embeddable programming language based on Lua with a gradual type system, https://github.com/luau-lang/luau,(参照 2026-07-12)
参考文献 [5] cxmeel/sift: Immutable data library for Luau, https://github.com/cxmeel/sift,(参照 2026-07-12) [6] 921starfish/unit-for-luau: A minimal Unit type for Luau, https://github.com/921starfish/unit-for-luau,(参照 2026-07-12) [7] Compatibility with Lua, https://luau.org/compatibility,(参照 2026-07-12) [8] Union and Intersection Types: Tagged unions, https://luau.org/types/unions-and-intersections/#tagged-union s,(参照 2026-07-12)
参考文献 [9] Luau syntax by example: Const bindings, https://luau.org/syntax/#const-bindings,(参照 2026-07-12) [10] Luau syntax by example: Binding immutability vs. value immutability, https://luau.org/syntax/#binding-immutability-vs-value-immuta bility,(参照 2026-07-12) [11] [General Release] Luau’s New Type Solver, https://devforum.roblox.com/t/general-release-luau%E2%80% 99s-new-type-solver/4084991,(参照 2026-07-12)
ご清聴ありがとうございました!