Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scalaで作るカジュアルゲーム
Search
yuiwai
November 11, 2018
1
500
Scalaで作るカジュアルゲーム
yuiwai
November 11, 2018
Tweet
Share
More Decks by yuiwai
See All by yuiwai
Lagomに学ぶマイクロサービス / Learn Microservice with Lagom
yuiwai
0
740
scalajs-reactで作るフロントエンド / Frontend With scalajs-react
yuiwai
3
510
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
KATA
mclloyd
29
14k
Building an army of robots
kneath
305
45k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
620
Thoughts on Productivity
jonyablonski
69
4.6k
Raft: Consensus for Rubyists
vanstee
137
6.9k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
Six Lessons from altMBA
skipperchong
28
3.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
24
2.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.7k
Transcript
Scalaで作る カジュアルゲーム Scala関西Summit 2018 Yuichiro Iwai
発表の内容 • 自己紹介 + α • Scalaのユースケース ◦ ビルドダーゲットごとに軽く見ます •
カジュアルゲーム ◦ Scalaで書いて見たテトリス風ゲームの話
自己紹介 岩井 雄一郎 (@dont_cocoa) • 札幌在住 • ソーシャルゲームのサーバサイドエンジニア • 業務ではScalaをAPI検証ツールなど、一部のサポートツールに活用
少しだけ宣伝させてください 札幌にScalaコミュニティーを形成すべく 草の根的に「Sapporo.scala」という Scala勉強会のイベントやってます。 https://sapporo-scala.connpass.com/
Scalaのユースケース
主要なScala実行プラットフォーム JVM scala-js scala-native JVM上で実行 Javaの一般的な用途と同等 (サーバ、GUI、バッチ、etc) JavaScriptとして実行 ブラウザ上、Node.js経由の コマンドライン等
LLVM経由で実行 高速起動を生かしたコマンド ラインツール、Cライブラリと の連携など
Scala on JVM • 既存のJavaの資産をほぼ全て利用可能 • JVM依存のため、Javaのリリースサイクルの影響を受ける • 起動時はどうしても遅いため、コマンドラインツールに難 →
いくつかの打開策(後述)
scala-js • Scalaの資産の多くを再利用可能 • 既存のJavaScriptの資産と連動可能 • サーバ/ブラウザ間の強固な連携 ◦ モデルの共有、通信部分の親和性 •
JS(Node.js)経由のソリューションへの展開 たとえば... ◦ Electronを利用したGUIアプリケーション ◦ AWS Lambdaでの利用
scala-native • LLVMを経由してネイティブバイナリにコンパイル • Scalaの資産に加え、一部のJavaとCライブラリを利用可能 • 最新のScalaへの追随は出来てはいない ◦ このスライドを書いている時点では2.12未サポート •
マルチスレッドなど、部分的に動かない機能がある
(+α) GraalVM • Oracle社製の多言語対応の仮想マシン ◦ JS, Python, Ruby, R, JVM,
LLVMをサポート ◦ Javaクラスファイルからネイティブなバイナリを生成 >> JVMの立ち上がりの遅さを解消出来る • Scalaからコンパイルしたjarでもいける ◦ が、全て動くわけではない
カジュアルゲーム
tetrics • という、テトリス風ゲームをScalaで書いてみました https://github.com/yuiwai/tetrics/tree/master • 一つのコア部分を共有し、ブラウザ (scala-js)、CLI(scala-native) そしてJVM版での実装があります
tetrics • という、テトリス風ゲームをScalaで書いてみました https://github.com/yuiwai/tetrics/tree/master • 一つのコア部分を共有し、ブラウザ (scala-js)、CLI(scala-native) そしてJVM版での実装があります これで、仕事中どんな環境でもカジュアルに遊べますね!
デモ https://lab.yuiwai.com/tetrics/
プロジェクト構成 core … ゲームのコアとなるロジック部分 js … scala-js用の実装。Canvasを利用して描画 native … scala-native実装。ncursesを利用して描画
libgdx … libGDXを利用したJVM用実装
cross-projectのやり方 sbtプラグインがあるので、これを使えば簡単にできます https://github.com/portable-scala/sbt-crossproject scala-js https://www.scala-js.org/ scala-native http://www.scala-native.org/
Scalaに集約することの旨味 • ロジックの拡散を防ぐ • 機能拡張時の恩恵を享受しやすい • 使い慣れたScalaで書ける
ご清聴ありがとうございました