From	JS	To	CLJS
-	Adieu	JavaScript	-
Self-introduction
	/laʒenɔʁɛ̃k/	カマイルカlagénorhynque
(defprofile lagénorhynque
:name "Kent OHASHI"
:account @lagenorhynque
:company "Opt, Inc."
:languages [Clojure Haskell Python Scala
English français Deutsch русский]
:interests [programming language-learning mathematics]
:contributing [github.com/japan-clojurians/clojure-site-ja])
Contents
1.	 What	is	ClojureScript?
2.	 Why	does	ClojureScript	matter?
3.	 Language
4.	 Libraries
5.	 Tools
What	is	ClojureScript?
によるとClojureScript公式サイト
ClojureScript	is	a	compiler	for	Clojure
that	targets	JavaScript.	It	emits
JavaScript	code	which	is	compatible
with	the	advanced	compilation	mode
of	the	Google	Closure	optimizing
compiler.
ClojureScript	(CLJS)
JavaScriptをターゲットとしたClojureのコンパイラ
cf.	 :	Java/JVMがターゲット
の
互換のJSコードを⽣成
Clojure
Google	Closure	Compiler advanced	compilation
mode
compilation	process
from	ClojureScript:	Up	and	Running
Why	does	ClojureScript	matter?
JavaScriptの世界でもClojureのメリットを
REPL駆動のインタラクティブな開発
関数型プログラミング
並⾏プログラミング
現代的なLisp
→	Webフロントエンド,	 ,	 ,
etc.
Electron React	Native
フロントエンド・サーバサイド間のスムーズな連携
コードの共有
.cljc	&	
データの共有
,	 	(cf.	JSON,	 )
→	フロントエンドもサーバサイドもClojure
reader	conditionals
EDN Transit MessagePack
Language
syntax
cf.	
※	CLJSのWeb	REPL(e.g.	 )で試そう
ClojureScript	Synonyms
ClojureScript	-	Differences	from	Clojure
Macros
Replumb	REPL
Clojure,	ClojureScriptなどプラットフォーム間での
差異を吸収するための仕組み
拡張⼦	.cljc	のファイル内で利⽤
	と	
reader	conditionals
#? #?@
(defn str->int [s]
#?(:clj (java.lang.Integer/parseInt s)
:cljs (js/parseInt s)))
Libraries
library	references
The	Clojure	Toolbox
CrossClj
razum2um/awesome-clojure
example:	
のReagent実装
cf.	
採⽤例:	
Reagent
A	minimalistic	ClojureScript	interface
to	React.js
Reactチュートリアル
lagenorhynque/react-tutorial
Om
circleci/frontend
Tools
build
	/ˈlainɪŋən/
Clojure,	ClojureScript共通のビルドツール
プラグインやプロジェクトテンプレートが豊富
設定ファイル	project.clj	(e.g.	 )
cf.	
Leiningen
react-tutorial
Boot
hot	loading
Leiningenプラグイン	
ClojureScriptのオートビルド
ブラウザのオートリロード
etc.
lein-figwheel
optimization
CLJSのコンパイラオプション	:optimizations
level effect
:none 最適化なし(デフォルト)
:whitespace コメント/空⽩など削除
:simple ローカル変数/関数引数リネーム
:advanced グローバル変数/関数名/プロパ
ティリネーム,デッドコード削
除,etc.
Google	Closure	Compiler
Further	Reading
サイト
:	公式サイト
cf.	
:	GitHub
書籍
翻訳:	
ClojureScript
Clojure
clojure/clojurescript
ClojureScript:	Up	and	Running
『⼊⾨	ClojureScript』
ClojureScript	Unraveled
スライド
英語版:	
⼊⾨ClojureScript
ClojureScriptという選択肢
ここ最近のClojureScript
JavaからClojureへ
From	Java	To	Clojure

From JS To CLJS