>100 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とは ● 制作したり、友達と体験を共有したり、イメージをふくらませて 何にでもなったりできる究極のバーチャル世界 (公式サイトより引用)
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とは -補足● Lua 5.1をベースにしているが完全な互換性はない ● JavaScriptに対するTypeScriptと似たような関係 ○ 導入された型システムも雰囲気は似ている ● 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でできない 関数型プログラミング ● ❌ パターンマッチング ○ 代数的データ型的なことはできる ■ https://luau.org/types/unions-and-intersections/#tag ged-unions ○ でもパターンマッチングが言語仕様にない
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
目次 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での開発においての関数型プログラミング ○ 言語の制約上、できないことも多い ○ でも、完全に閉ざされているわけではなくて、 できることも多い
ご清聴ありがとうございました!