SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
 入門ClojureScript
ClojureScript勉強会
2015/05/23 @HaLake
@athos0220
ClojureScriptとは
‣ JavaScriptにコンパイルされるClojure
‣ 正確には、Clojureと多くの共通点を持つ別言語
‣ すでにさまざまな企業で商用に使われている
- CircleCI
- Prismatic
- Cisco
- eBay
- etc.
https://github.com/clojure/clojurescript/wiki/Companies-Using-ClojureScript
ClojureScriptの利点
‣ immutableなデータ構造が使える
仮想DOMとの親和性
‣ マクロが使える
core.asyncなどの強力な抽象化
‣ Clojureとのデータとコードの共有
isomorphic Clojure
単なるイロモノでなく具体的な利点をもつAltJS
【言語概論】Clojureとの共通点
‣ 基本的なデータ型 (数値、文字列、シンボル、キーワード、関数)
‣ コレクション型 (リスト、ベクタ、マップ、セット)
‣ ユーザ定義型 (deftype, defrecord, defprotocol)
‣ マルチメソッド
‣ 名前空間
‣ Host Interop (コンストラクタ、メソッド呼び出し)
【言語概論】Clojureとの相違点
‣ Atom以外の参照型がない
‣ evalがない
‣ マクロはClojureでしか定義できない
‣ Host Interop
- js-obj
- #js[], #js{}
- clj->js, js->clj
- js名前空間
- js*
コンパイルパイプライン
‣ Clojureで書かれたコンパイラでJSコードを生成
‣ 生成されたJSコードをClosure Compilerで最適化
Closure Compiler: JSからJSへの最適化コンパイラ
Stuart Sierra, Luke VanderHart (2012) “ClojureScript: Up and Running” O’Reilly Media
Closure Compilerの最適化レベル
‣ WHITESPACE_ONLY
不要な空白、改行、コメントの削除
‣ SIMPLE_OPTIMIZATIONS
WHITESPACE_ONLY + ローカル変数名書き換え等
‣ ADVANCED_OPTIMIZATIONS
SIMPLE_OPTIMIZATIONS + 以下を含む最適化
- よりアグレッシブなリネーム
- デッドコード除去
- インライン化
https://developers.google.com/closure/compiler/docs/compilation_levels
ClojureScriptのはじめかた
‣ Leiningen + lein-cljsbuild でのやりかた
1. lein-cljsbuildを :plugins に追加
2. project.cljの :cljsbuild にオプションを設定
(defproject lein-cljsbuild-example “0.1.0-SNAPSHOT”
:plugins [[lein-cljsbuild "1.0.6"]]
:cljsbuild {
:builds [{:source-paths ["src-cljs"]
:compiler {:output-to "js/main.js"
:optimizations :whitespace
:pretty-print true}}]})
:optimizationsオプション
:optimizations 対応する最適化レベル
:none
(ClojureScriptコンパイラが出力した   
JSコードのみが生成される)
:whitespace WHITESPACE_ONLY
:simple SIMPLE_OPTIMIZATIONS
:advanced ADVANCED_OPTIMIZATIONS
ClojureScriptのコンパイル
‣ lein cljsbuild once
指定したパス中のClojureScriptファイルをコンパイル
‣ lein cljsbuild auto
ファイルを監視して、変更があれば自動的コンパイルし直す
ClojureScriptのREPL起動
‣ lein cljsbuild repl-rhino
RhinoベースのREPLを起動 (ブラウザ機能は使えない)
‣ lein cljsbuild repl-listen
指定したポートでClojureScriptからの接続を待ち合わせるREPLを起動
‣ lein cljsbuild repl-launch
:repl-launch-commandsで指定したコマンドからブラウザREPLを起動
* 実際にはREPLを起動するときは lein trampoline 経由で呼び出す必要があります
参考文献
‣ Clojure: Up and Running
‣ ClojureScript wiki
‣ lein-cljsbuild wiki

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
入門Transducers
入門Transducers入門Transducers
入門Transducers
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた
 
[180718] ML 분야 유학 및 취업 준비 설명회 @SNU
[180718] ML 분야 유학 및 취업 준비 설명회 @SNU[180718] ML 분야 유학 및 취업 준비 설명회 @SNU
[180718] ML 분야 유학 및 취업 준비 설명회 @SNU
 
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDDドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計 の 実践 Part3 DDD
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
WayOfNoTrouble.pptx
WayOfNoTrouble.pptxWayOfNoTrouble.pptx
WayOfNoTrouble.pptx
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
100%Kotlin ORM Ktormを試してみた
100%Kotlin ORM Ktormを試してみた100%Kotlin ORM Ktormを試してみた
100%Kotlin ORM Ktormを試してみた
 

Destacado

Macros in Clojure
Macros in ClojureMacros in Clojure
Macros in Clojure
sohta
 
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なものClojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
sohta
 

Destacado (19)

A little exercise with clojure macro
A little exercise with clojure macroA little exercise with clojure macro
A little exercise with clojure macro
 
Patterns
PatternsPatterns
Patterns
 
Writing Macros
Writing MacrosWriting Macros
Writing Macros
 
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
 
A Dive Into Clojure
A Dive Into ClojureA Dive Into Clojure
A Dive Into Clojure
 
不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして
 
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVMClojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVM
 
Macros in Clojure
Macros in ClojureMacros in Clojure
Macros in Clojure
 
Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012
 
Clojure的魅力
Clojure的魅力Clojure的魅力
Clojure的魅力
 
Clojure概览
Clojure概览Clojure概览
Clojure概览
 
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
 
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なものClojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
 
Clojure: a LISP for the JVM
Clojure: a LISP for the JVMClojure: a LISP for the JVM
Clojure: a LISP for the JVM
 
Introduction to clojure
Introduction to clojureIntroduction to clojure
Introduction to clojure
 
DSL in Clojure
DSL in ClojureDSL in Clojure
DSL in Clojure
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
 
Clojure from ground up
Clojure from ground upClojure from ground up
Clojure from ground up
 

Similar a 入門ClojureScript

20130909 movable type_seminar
20130909 movable type_seminar20130909 movable type_seminar
20130909 movable type_seminar
Six Apart
 
20130911 Movable Type Seminar
20130911 Movable Type Seminar20130911 Movable Type Seminar
20130911 Movable Type Seminar
Six Apart
 
CloudSpiral 2013年度 UML講義 2日目
CloudSpiral 2013年度 UML講義 2日目CloudSpiral 2013年度 UML講義 2日目
CloudSpiral 2013年度 UML講義 2日目
Shin Matsumoto
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
Akira Inoue
 

Similar a 入門ClojureScript (20)

Re-frame and A-Frame
Re-frame and A-FrameRe-frame and A-Frame
Re-frame and A-Frame
 
本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
今更ながらCSS3を試してみた
今更ながらCSS3を試してみた今更ながらCSS3を試してみた
今更ながらCSS3を試してみた
 
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
 
20130909 movable type_seminar
20130909 movable type_seminar20130909 movable type_seminar
20130909 movable type_seminar
 
Clojure で減価償却費計算
Clojure で減価償却費計算Clojure で減価償却費計算
Clojure で減価償却費計算
 
20130911 Movable Type Seminar
20130911 Movable Type Seminar20130911 Movable Type Seminar
20130911 Movable Type Seminar
 
GraphQLはどんな時に使うか
GraphQLはどんな時に使うかGraphQLはどんな時に使うか
GraphQLはどんな時に使うか
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介します
 
Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築Dockerを活用したリクルートグループ開発基盤の構築
Dockerを活用したリクルートグループ開発基盤の構築
 
CloudSpiral 2013年度 UML講義 2日目
CloudSpiral 2013年度 UML講義 2日目CloudSpiral 2013年度 UML講義 2日目
CloudSpiral 2013年度 UML講義 2日目
 
React VR ことはじめ
React VR ことはじめReact VR ことはじめ
React VR ことはじめ
 
プログラマ人生論
プログラマ人生論プログラマ人生論
プログラマ人生論
 
MySQLドキュメントストアとCTE
MySQLドキュメントストアとCTEMySQLドキュメントストアとCTE
MySQLドキュメントストアとCTE
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
msal.js v2を触る
msal.js v2を触るmsal.js v2を触る
msal.js v2を触る
 
新世代Java scriptコントロール wijmo5 devsumi_150219
新世代Java scriptコントロール wijmo5 devsumi_150219新世代Java scriptコントロール wijmo5 devsumi_150219
新世代Java scriptコントロール wijmo5 devsumi_150219
 
From JS To CLJS
From JS To CLJSFrom JS To CLJS
From JS To CLJS
 

Más de sohta (6)

Clojure Language Update (2015)
Clojure Language Update (2015)Clojure Language Update (2015)
Clojure Language Update (2015)
 
入門core.async
入門core.async入門core.async
入門core.async
 
REPLライフをもっと快適に
REPLライフをもっと快適にREPLライフをもっと快適に
REPLライフをもっと快適に
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
ClojureではじめるSTM入門
ClojureではじめるSTM入門ClojureではじめるSTM入門
ClojureではじめるSTM入門
 
Clojureによるバイトコードプログラミング
ClojureによるバイトコードプログラミングClojureによるバイトコードプログラミング
Clojureによるバイトコードプログラミング
 

入門ClojureScript