---
title: Robloxでのゲーム開発に使う言語「Luau」について
tags: 
author: [HOSHINO Yūya](https://image.docswell.com/user/921starfish)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/L71YWN4DJG.jpg?width=480
description: Robloxでのゲーム開発に使う言語「Luau」について by HOSHINO Yūya
published: July 11, 26
canonical: https://image.docswell.com/s/921starfish/KL3E98-Roblox%E3%81%A6%E3%82%99%E3%81%AE%E3%82%B1%E3%82%99%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E3%81%AB%E4%BD%BF%E3%81%86%E8%A8%80%E8%AA%9E%E3%80%8CLuau%E3%80%8D%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/L71YWN4DJG.jpg)

Robloxでのゲーム開発に使う言語
「Luau」について
HOSHINO Yūya


# Page. 2

![Page Image](https://bcdn.docswell.com/page/G7WG64X8E2.jpg)

自己紹介
● 職業：
○ Robloxクリエイター
■ Robloxプラットフォーム上にゲームを作る人
● バックグラウンド：
○ サーバーサイドもやる
○ 関数型プログラミングは趣味


# Page. 3

![Page Image](https://bcdn.docswell.com/page/4JZLY269E3.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 4

![Page Image](https://bcdn.docswell.com/page/YE6WDV2DEV.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GE5M3D28E4.jpg)

本セッションでは
● 得られるもの
○ LuauでRobloxゲーム開発を行う際に、
関数型プログラミングの考え方をどこまで活かせて、
どこから難しくなるのかについての入門知識
● 説明すること
○ Robloxの概要
○ Luau
● 説明しないこと
○ Lua
○ 関数型プログラミングの個別のテクニックの詳細


# Page. 6

![Page Image](https://bcdn.docswell.com/page/9729Z84VJR.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 7

![Page Image](https://bcdn.docswell.com/page/DJY4R6MQ7M.jpg)

Robloxとは
● 制作したり、友達と体験を共有したり、イメージをふくらませて
何にでもなったりできる究極のバーチャル世界
（公式サイトより引用）


# Page. 8

![Page Image](https://bcdn.docswell.com/page/V7NYDZW2E8.jpg)

Robloxとは -ざっくりと● 世界最大級のゲームプラットフォーム
○ 月間3.5億人以上が訪問
● 誰でも簡単に世界中に自分の作ったゲームを公開可能
○ 語弊を恐れずいうとゲーム版 YouTube
○ 開発の簡単さが多彩さのバックグラウンドになっている
● 以下の専用ツールで開発
○ 専用ゲームエンジン「Roblox Studio」
○ プログラミング言語「Luau」


# Page. 9

![Page Image](https://bcdn.docswell.com/page/YJ9PGZXD73.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GJ8DV125JD.jpg)

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）より引用）


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LJLM5Q23ER.jpg)

Luauとは -補足● Lua 5.1をベースにしているが完全な互換性はない
● JavaScriptに対するTypeScriptと似たような関係
○ 導入された型システムも雰囲気は似ている
● Robloxに特化しているわけではなく、公式から処理系もダウン
ロード可能
○ https://github.com/luau-lang/luau
○ 手軽に試すなら公式サイトのPlaygroundがおすすめ
● 関数型味が強い言語ではない


# Page. 12

![Page Image](https://bcdn.docswell.com/page/47MY318M7W.jpg)

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)


# Page. 13

![Page Image](https://bcdn.docswell.com/page/P7R9QL5LE9.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 14

![Page Image](https://bcdn.docswell.com/page/PJXQ5WX67X.jpg)

Luauでできる関数型プログラミング
● 関数を値として扱える
○ 構文が軽量で見づらくもない
local Add = function(a: number)
return function(b: number)
return a + b
end
end
print(Add(1)(2)) -- 3


# Page. 15

![Page Image](https://bcdn.docswell.com/page/3JK96VWGJD.jpg)

Luauでできる関数型プログラミング
● TypeScriptなどで行えるアプローチは積極的に真似できる
○ 代数的データ型的アプローチ
○ Result型の導入
○ 純粋関数とそれ以外の分離
○ etc.


# Page. 16

![Page Image](https://bcdn.docswell.com/page/LE3W6M15E5.jpg)

Luauでできる関数型プログラミング
● OSSを使う
○ MapやReduceなどを提供
■ https://github.com/cxmeel/sift
● 自分で作る
○ 自作のResult型
■ 非公開
○ 自作のUnit型
■ https://github.com/921starfish/unit-for-luau


# Page. 17

![Page Image](https://bcdn.docswell.com/page/8EDKV6XY7G.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 18

![Page Image](https://bcdn.docswell.com/page/V7PKVYP2J8.jpg)

Luauでできない 関数型プログラミング
● ❌ 末尾呼び出し最適化
○ Tail calls are not supported to simplify implementation
（Compatibility with Lua | Luauより引用）
● 再帰関数は書かない方が無難


# Page. 19

![Page Image](https://bcdn.docswell.com/page/2JVVZG2XJQ.jpg)

Luauでできない 関数型プログラミング
● ❌ パターンマッチング
○ 代数的データ型的なことはできる
■ https://luau.org/types/unions-and-intersections/#tag
ged-unions
○ でもパターンマッチングが言語仕様にない


# Page. 20

![Page Image](https://bcdn.docswell.com/page/5EGL48RRJL.jpg)

Luauでできない 関数型プログラミング
● ❌ イミュータビリティを前提とする
○ Luauのテーブルはデフォルトで基本的にミュータブル
○ 以下のような手段である程度の担保は可能だが処理系の
バージョンに注意
■ constでの宣言
● https://luau.org/syntax/#const-bindings
■ table.freeze関数
● https://luau.org/syntax/#binding-immutability-vsvalue-immutability
■ read修飾子
● https://devforum.roblox.com/t/general-release-lu
au’s-new-type-solver/4084991


# Page. 21

![Page Image](https://bcdn.docswell.com/page/4JQYG9VY7P.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 22

![Page Image](https://bcdn.docswell.com/page/K74W5XMZE1.jpg)

関数型プログラミングとRoblox
● 関数型プログラミング
○ ゲームのパフォーマンスと両立させるのは難しい
■ ソフトウェアアーキテクチャなどを意識する必要
● Robloxの特徴
○ Obby（アスレチック）やFind（宝探し）など、
パフォーマンスに対しシビアでないゲームも
人気がある
→ 関数型プログラミング入門に向いている……かも


# Page. 23

![Page Image](https://bcdn.docswell.com/page/LJ1YWN8DEG.jpg)

目次
1. 本セッションでは
2. Robloxとは
3. Luauとは
○ Luauでできる関数型プログラミング
○ Luauでできない関数型プログラミング
4. 関数型プログラミングとRoblox
5. まとめ


# Page. 24

![Page Image](https://bcdn.docswell.com/page/GJWG64Z872.jpg)

まとめ
● Roblox
○ 人気のゲームプラットフォーム
● Luau
○ Luaにいわゆる漸進的型付けを導入した言語
● Robloxでの開発においての関数型プログラミング
○ 言語の制約上、できないことも多い
○ でも、完全に閉ざされているわけではなくて、
できることも多い


# Page. 25

![Page Image](https://bcdn.docswell.com/page/4EZLY21973.jpg)

ご清聴ありがとうございました！


