Slide 1

Slide 1 text

Slinky で Scala.js 製 React Webアプリケーションを つくったはなし 2020-10-17 ScalaMatsuri @nomadblacky

Slide 2

Slide 2 text

Takumi Kadowaki 自称 : Full "stuck" Scala Engineer Scala でなんでもやりたいひと おしごと : データ基盤の SRE ● GitHub: NomadBlacky ● Twitter: @nomadblacky Ammonite で Scala スクリプトに入門する本出しました→ だれ?

Slide 3

Slide 3 text

モチベーション 今日話すこと : Scala.js でフロントエンド開発に入門してアプリをひとつ作ったその経緯を紹介 ● フロントエンドアプリケーションをちゃんと作ったことがない ○ React ? Vue ? よくわからん … ● Scala.js をちゃんと触ったことがない ○ 最近 v1 も出てきたし、勢いづいてきている印象 ● 最近ハマっているゲームで何か役立つツールを作りたい ○ 界隈に貢献して盛り上げていきたい

Slide 4

Slide 4 text

Scala.js についてざっくり ● いわゆる AltJS の一種 ● Scala → JavaScript にトランスパイル ● Scala の強力な言語機能・ライブラリを JS の世界に持っていくことができる

Slide 5

Slide 5 text

Scala.jsで モダンなWebアプリを書きたい

Slide 6

Slide 6 text

フロントエンドの 著名なフレームワークといえば React.js https://2019.stateofjs.com/front-end-frameworks/

Slide 7

Slide 7 text

Scala.jsでReact.jsを書きたい

Slide 8

Slide 8 text

Scala.js における React.js ライブラリ japgolly / scalajs-react shadaj / slinky

Slide 9

Slide 9 text

Scala.js における React.js ライブラリ shadaj / slinky Giter8 テンプレートが提供されており、取っ掛 かりやすかったのでこちらを採用 shadaj/create-react-scala-app.g8 Webpackに対応 `sbt dev` で開発サーバを 起動 必要なファイルが 揃っているので すぐに開発を 始められる

Slide 10

Slide 10 text

Slinky でReactの基本を覚える React.js のチュートリアルをやってみた https://reactjs.org/tutorial/tutorial.html ○✕ゲーム ( 三目並べ ) を作る ○ ×

Slide 11

Slide 11 text

Slinky で React プログラミング Props, State を使ったコンポーネント 本家React.jsとよく似ている

Slide 12

Slide 12 text

Slinky で React プログラミング Props, State は case class で表現 initialState で初期の State を表現 @react アノテーションでコンポーネントを定義 (マクロ) setState で State を更新

Slide 13

Slide 13 text

JSX に似たインターフェースで DOM をレンダリング Slinky で React プログラミング attribute を設定するDSL ユーザー定義のコンポーネントを使う

Slide 14

Slide 14 text

より型安全に。 Slinky で React プログラミング sealed abstract class で マス目の 空白 / ○ / × を表現

Slide 15

Slide 15 text

Slinky でReactチュートリアルを完遂 https://reactjs.org/tutorial/tutorial.html ○✕ゲームができた NomadBlacky / scalajs-react-tutorial

Slide 16

Slide 16 text

UI どうする問題 ● せっかく動くものができたので見た目にもこだわりたい ● Material UI などの React コンポーネントを提供するライブラリを使いたい ● Scala.js かつ、 Slinky に対応したライブラリなどあるのだろうか …

Slide 17

Slide 17 text

Scala.js界に救世主現わる(?) ScalablyTyped npm に公開されているライブラリから Scala と JavaScript のつなぎ目となる "Facade" を自動生成してくれる sbt プラグイン TypeScript での型定義に沿って Scala のコードを生成してくれる !

Slide 18

Slide 18 text

ScalablyTyped で Material UI のコードを生成 npmDependencies に @material-core などを追加 sbt の起動時に npm からライブラリを取得 および Scala への変換を行う

Slide 19

Slide 19 text

ScalablyTyped で Material UI のコードを生成 こんなかんじのコードが生成される React コンポーネントを Slinky 向けに変換してくれるオプションもある

Slide 20

Slide 20 text

Material UI を使うことができた! ScalablyTyped / SlinkyDemos には Material UI を含む、 Slinky で様々なライブラリを利用す るサンプルが用意されている https://scalablytyped.github.io/SlinkyDemos/material-ui/

Slide 21

Slide 21 text

最終的につくったもの https://mmsf-hub.nomadblacky.dev/

Slide 22

Slide 22 text

まとめ ● Slinky は Scala.js 向けの React.js ライブラリ ○ Scala.js でも React.js を使った Web アプリケーションを作れる ! ○ React.js に似た API なので、基本を押さえていれば開発にはそこまで困らない ● ScalablyTyped で TypeScript のライブラリを Scala.js で型安全に使える ! ○ Material UI などの UI コンポーネントも利用可能 ○ ( 昔を知らないけど ) Scala.js 周りのエコシステムが整ってきた印象 ● まずは shadaj/create-react-scala-app.g8 から始めるのがオススメ

Slide 23

Slide 23 text

関連資料 ● Slinky ホームページ ○ https://slinky.dev/ ● React.js チュートリアル ○ https://reactjs.org/tutorial/tutorial.html ● Material UI ホームページ ○ https://material-ui.com/ ● ScalablyTyped ホームページ ○ https://scalablytyped.org/ ● Slinky + ScalablyTyped のサンプル集 ○ https://github.com/ScalablyTyped/SlinkyDemos ● 今回作成したアプリケーションのソースコード ○ https://github.com/NomadBlacky/mmsf-hub