Slide 1

Slide 1 text

From JS To CLJS - Adieu JavaScript -

Slide 2

Slide 2 text

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])

Slide 3

Slide 3 text

Contents 1. What is ClojureScript? 2. Why does ClojureScript matter? 3. Language 4. Libraries 5. Tools

Slide 4

Slide 4 text

What is ClojureScript?

Slide 5

Slide 5 text

によると 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.

Slide 6

Slide 6 text

ClojureScript (CLJS) JavaScriptをターゲットとしたClojureのコンパイラ cf. : Java/JVMがターゲット の 互換のJSコードを⽣成 Clojure Google Closure Compiler advanced compilation mode

Slide 7

Slide 7 text

compilation process from ClojureScript: Up and Running

Slide 8

Slide 8 text

Why does ClojureScript matter?

Slide 9

Slide 9 text

JavaScriptの世界でもClojureのメリットを REPL駆動のインタラクティブな開発 関数型プログラミング 並⾏プログラミング 現代的なLisp → Webフロントエンド, , , etc. Electron React Native

Slide 10

Slide 10 text

フロントエンド・サーバサイド間のスムーズな連携 コードの共有 .cljc & データの共有 , (cf. JSON, ) → フロントエンドもサーバサイドもClojure reader conditionals EDN Transit MessagePack

Slide 11

Slide 11 text

Language

Slide 12

Slide 12 text

syntax cf. ※ CLJSのWeb REPL(e.g. )で試そう ClojureScript Synonyms ClojureScript - Differences from Clojure Macros Replumb REPL

Slide 13

Slide 13 text

Clojure, ClojureScriptなどプラットフォーム間での 差異を吸収するための仕組み 拡張⼦ .cljc のファイル内で利⽤ と reader conditionals #? #?@ (defn str->int [s] #?(:clj (java.lang.Integer/parseInt s) :cljs (js/parseInt s)))

Slide 14

Slide 14 text

Libraries

Slide 15

Slide 15 text

library references The Clojure Toolbox CrossClj razum2um/awesome-clojure

Slide 16

Slide 16 text

example: のReagent実装 cf. 採⽤例: Reagent A minimalistic ClojureScript interface to React.js Reactチュートリアル lagenorhynque/react-tutorial Om circleci/frontend

Slide 17

Slide 17 text

Tools

Slide 18

Slide 18 text

build /ˈlainɪŋən/ Clojure, ClojureScript共通のビルドツール プラグインやプロジェクトテンプレートが豊富 設定ファイル project.clj (e.g. ) cf. Leiningen react-tutorial Boot

Slide 19

Slide 19 text

hot loading Leiningenプラグイン ClojureScriptのオートビルド ブラウザのオートリロード etc. lein-figwheel

Slide 20

Slide 20 text

optimization CLJSのコンパイラオプション :optimizations level effect :none 最適化なし(デフォルト) :whitespace コメント/空⽩など削除 :simple ローカル変数/関数引数リネーム :advanced グローバル変数/関数名/プロパ ティリネーム,デッドコード削 除,etc. Google Closure Compiler

Slide 21

Slide 21 text

Further Reading サイト : 公式サイト cf. : GitHub 書籍 翻訳: ClojureScript Clojure clojure/clojurescript ClojureScript: Up and Running 『⼊⾨ ClojureScript』 ClojureScript Unraveled

Slide 22

Slide 22 text

スライド 英語版: ⼊⾨ClojureScript ClojureScriptという選択肢 ここ最近のClojureScript JavaからClojureへ From Java To Clojure