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
460
Scalaで作るカジュアルゲーム
yuiwai
November 11, 2018
Tweet
Share
More Decks by yuiwai
See All by yuiwai
Lagomに学ぶマイクロサービス / Learn Microservice with Lagom
yuiwai
0
680
scalajs-reactで作るフロントエンド / Frontend With scalajs-react
yuiwai
3
460
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Embracing the Ebb and Flow
colly
84
4.5k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
110
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
655
59k
A Modern Web Designer's Workflow
chriscoyier
693
190k
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で書ける
ご清聴ありがとうございました