Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Reason
Yuki Kodama
July 30, 2017
Technology
1
1.9k
Reason
Reasonのやっていき資料です。とりあえずアップした。
Yuki Kodama
July 30, 2017
Tweet
Share
More Decks by Yuki Kodama
See All by Yuki Kodama
redux-towerでルーティングを制する
kuy
4
2.7k
Should I use redux-saga or not?
kuy
2
3.8k
redux-sagaで副作用をコントロールする
kuy
4
1.4k
Rails+webpackの落ち穂拾い
kuy
0
1.5k
なぜReduxを使うのか
kuy
25
10k
意地でもReduxを使う
kuy
1
520
Other Decks in Technology
See All in Technology
Accelerated Computing for NLP on AWS
shokout
1
220
Target SDK Versionを上げない Notification runtime permission対応
napplecomputer
0
140
さいきんのRaspberry Pi。 / osc22do-rpi
akkiesoft
6
5.2k
220628 「Google AppSheet」タスク管理アプリをライブ作成 吉積情報伊藤さん
comucal
PRO
0
230
DeepL の用語集が(いつのまにか)日本語に対応してたので試してみた
irokawah0
0
170
Oracle Cloud Infrastructure:2022年6月度サービス・アップデート
oracle4engineer
PRO
0
150
DOM Invader - prototype pollution対応の衝撃 - / DOM Invader - prototype pollution
okuken
0
160
Building smarter apps with machine learning, from magic to reality
picardparis
4
3.2k
Custom AppをIP制限ありのままで審査に通す方法
yusuga
0
680
セキュリティ 開運研修2022 / security 2022
cybozuinsideout
PRO
3
3.8k
機械学習システムのアーキテクチャとデザインパターン
washizaki
1
450
What's Data Lake ? Azure Data Lake best practice
ryomaru0825
2
750
Featured
See All Featured
Music & Morning Musume
bryan
35
4.2k
Gamification - CAS2011
davidbonilla
75
3.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
269
11k
Become a Pro
speakerdeck
PRO
3
840
jQuery: Nuts, Bolts and Bling
dougneiner
56
6.4k
Making Projects Easy
brettharned
98
4.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
351
21k
4 Signs Your Business is Dying
shpigford
169
20k
GitHub's CSS Performance
jonrohan
1020
420k
Designing for Performance
lara
597
63k
From Idea to $5000 a Month in 5 Months
shpigford
373
44k
Embracing the Ebb and Flow
colly
73
3.4k
Transcript
Reason @kuy / Yuki Kodama 2017.07.30 @ Kyoto.js 13
自己紹介 @kuy (カイ) / Yuki Kodama 株式会社ジャパンベンチャーリサーチ(株式会社ユーザベースの完全子会社) entrepedia(アントレペディア)の開発・運用 AWS, Ruby
on Rails, JavaScript (React+Redux+Saga) がメイン • redux-sagaでルーティングを制する • redux-sagaで非同期処理と戦う • ・・・など Qiita の記事
Reasonってのは・・・ • 文法 + ツールチェイン ◦ Reason → OCaml のプリプロセッサ
▪ OCaml のとっつきにくい文法を JavaScript で中和した文法 ▪ Camlp4の仕組みを使ってOCaml ASTをいじくる ▪ JSXもパースしてくれる → React 使える ◦ OCaml → JavaScript or Native のためのツール群 ▪ JSターゲットは BuckleScript のコンパイラを利用 • Ocsigen の Js_of_ocaml とのつながりはない ▪ Nativeターゲットは普通に ocamlbuild + OPAM • BuckleScriptでNativeビルドするやつは進行中みたい • https://github.com/bsansouci/bsb-native
Reasonの基本はとても素朴 • 普通のOCamlのコンパイラを使う • refmtの開発がメイン • お手軽さがない → ツールチェインの整備 参考:
https://github.com/chenglou/intro-to-reason-compilation ocamlc -pp "refmt --print binary" -o ./out -impl src/test.re プリプロセッサの使用 プリプロセッサのオプション 出力ファイル 入力ファイル 例: Reasonを実行ファイルにコンパイルする方法
Reasonの文法 基本:リテラル、演算子 型ごとに別々の演算子が定義されてい るのがポイント。JSはTSでもFlowtype でもこれが推論を妨げている。
Reasonの文法 Variants データを保持できるEnumっぽいもの。めちゃくちゃ便利! switchではEnum名だけでなく中身のデータでもパターンマッチして掘ることができる。
Reasonの文法 スコープ: ちょっとOCamlが見え隠れする瞬間 Reasonではこれがエラーにならない OCaml的にはこう展開される。let-in スコープ内 でさらに別の名前をバインドするだけ、と扱われる ので問題ない。
Reasonの文法 変数、オブジェクト、関数 OCaml のぎこちない感じが消えている 出典: https://reasonml.github.io/guide/ocaml
Reasonの文法 リスト Linked Listっぽさが消えてる 出典: https://reasonml.github.io/guide/ocaml
作ってみたもの #1(Demo) • ライフゲーム • reason-react + webpack + bs-loader
◦ ライブリロードとかwebpackまわりの設定は参考になるかも ◦ ただし、reason-jsを直接使うやり方は古いかも • StatefulのReactコンポーネントを作成 ソース: https://github.com/kuy/reason-of-life
作ってみたもの #2(Demo) • 砂山モデルの可視化 • obelisk.js の自作バインディング + webpack +
bs-loader ソース: https://github.com/kuy/nada.re
Reasonのうれしいところ • 長年培われたOCamlの強力な型推論の恩恵をそのまま受けられる ◦ JSにいろいろ足すより、OCamlに足す方が長い目で見るといいかも • 明示的に型を書くことはほとんどない • データ中心、関数型 ◦
Object Caml なのでほどよい感じ • 文法が自然(ES的な意味で) ◦ Object spread operator ◦ Destructuring assignment • 気がきいてる(次のスライド)
(最近知った)Reasonのうれしいところ ↑ これが、こう書ける ↓
Reasonのつらいところ • バインディングがまだまだ少ない ◦ BuckleTypesからreasonml-communityに組織名変更 ◦ https://github.com/reasonml-community • TypeScriptとかFlowtypeみたいに型を定義すればよい、というわけではな いことが多い
◦ Reason(OCaml)っぽいAPIを意識して書くのは楽しい • CoreもAsyncも使えない(RWO育ちの人のみ) ◦ Core: OCaml標準のもの、JS由来のもの ◦ Async: 通常の関数コールバックかJs.Promise
今後(+ Todo) • Reason: もっとES2015っぽい文法の導入 ◦ https://github.com/facebook/reason/pull/1299 • reason-react 0.2.x
での大幅変更 ◦ サンプル修正しつつキャッチアップする • Reductive はとても素直な実装で理想的な感じなので使ってみる ◦ ActionとしてVariantを使う • bs-obelisk を作りたい
おまけ: Reductive • 実装が非常に小さい ◦ redux + react-redux 相当で100行以下 •
Reduxよりもさらにシンプルに ◦ actionをVariantとして書くのでaction creatorは必須ではない ◦ OCamlの |> 演算子で関数合成できるので applyMiddlewares とかは 基本的に不要