Submit Search
Upload
高速!Clojure Web 開発入門
•
10 likes
•
5,076 views
K
Kazuki Tsutsumi
Follow
NIshi-SHinju-Clojure #0 (2016/07/21) 発表資料です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 34
Download now
Download to read offline
Recommended
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
Apache Solr 入門
Apache Solr 入門
順平 西本
goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?
mori takuma
リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」
Recruit Technologies
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
Recommended
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
Apache Solr 入門
Apache Solr 入門
順平 西本
goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?
mori takuma
リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」
Recruit Technologies
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会
Noritsugu Suzuki
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
Yahoo!デベロッパーネットワーク
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋
Satoshi KOBAYASHI
シリコンバレーでエンジニア就職する前に知りたかったこと
シリコンバレーでエンジニア就職する前に知りたかったこと
Tatsuya Nanjo
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
MicroAd, Inc.(Engineer)
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
Preferred Networks
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する
Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する
IgaHironobu
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Yoichi Kawasaki
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
react-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのか
暁 三宅
JiraとConfluenceのTips集
JiraとConfluenceのTips集
Hiroshi Ohnuki
Paxos
Paxos
nobu_k
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
Naoto TAKAHASHI
JavaScript on GitHub (#kyotojs)
JavaScript on GitHub (#kyotojs)
y_uuki
More Related Content
What's hot
はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会
Noritsugu Suzuki
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
Yahoo!デベロッパーネットワーク
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋
Satoshi KOBAYASHI
シリコンバレーでエンジニア就職する前に知りたかったこと
シリコンバレーでエンジニア就職する前に知りたかったこと
Tatsuya Nanjo
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
MicroAd, Inc.(Engineer)
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
Preferred Networks
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する
Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する
IgaHironobu
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Yoichi Kawasaki
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
react-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのか
暁 三宅
JiraとConfluenceのTips集
JiraとConfluenceのTips集
Hiroshi Ohnuki
Paxos
Paxos
nobu_k
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
What's hot
(20)
はじめての検索エンジン&Solr 第13回Solr勉強会
はじめての検索エンジン&Solr 第13回Solr勉強会
噛み砕いてKafka Streams #kafkajp
噛み砕いてKafka Streams #kafkajp
Clojureに入門してみた、2017年秋
Clojureに入門してみた、2017年秋
シリコンバレーでエンジニア就職する前に知りたかったこと
シリコンバレーでエンジニア就職する前に知りたかったこと
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
Scala、DDD、Akkaで立ち向かう 〜広告配信システムに課せられた100msの制約〜
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する
Flutterでscroll viewとexpandedを併用してsign in sign up画面 などの レイアウトを作成する
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
Azure Search 言語処理関連機能 〜 アナライザー、検索クエリー、辞書、& ランキング, etc
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
react-scriptsはwebpackで何をしているのか
react-scriptsはwebpackで何をしているのか
JiraとConfluenceのTips集
JiraとConfluenceのTips集
Paxos
Paxos
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Similar to 高速!Clojure Web 開発入門
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
Naoto TAKAHASHI
JavaScript on GitHub (#kyotojs)
JavaScript on GitHub (#kyotojs)
y_uuki
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較
Kazuto Kusama
DevOps on Azure Kubernetes
DevOps on Azure Kubernetes
Issei Hiraoka
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
kimulla
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Kazuhiro Hara
xUnitハンズオン第2回テキスト
xUnitハンズオン第2回テキスト
mizuky fujitani
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
softlayerjp
Micronaut on Azure 試してみた
Micronaut on Azure 試してみた
拓将 平林
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた
Kazuto Kusama
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
JavaScript And Keywords
JavaScript And Keywords
uupaa
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
terurou
Hatena blogdevelopmentflow
Hatena blogdevelopmentflow
Yasuhiro Onishi
Odl intro20141029
Odl intro20141029
NEC Corporation
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
kojiokb
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
terurou
xUnitハンズオン第3回テキスト
xUnitハンズオン第3回テキスト
mizuky fujitani
SwaggerとAPIのデザイン
SwaggerとAPIのデザイン
Kazuhiro Hara
Apache CloudStack Documentation
Apache CloudStack Documentation
Kimihiko Kitase
Similar to 高速!Clojure Web 開発入門
(20)
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
JavaScript on GitHub (#kyotojs)
JavaScript on GitHub (#kyotojs)
Docker PaaSとしての OpenShift, Deis, Flynn比較
Docker PaaSとしての OpenShift, Deis, Flynn比較
DevOps on Azure Kubernetes
DevOps on Azure Kubernetes
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
xUnitハンズオン第2回テキスト
xUnitハンズオン第2回テキスト
いまからでも遅くない Docker事始め&愉快な仲間達
いまからでも遅くない Docker事始め&愉快な仲間達
Micronaut on Azure 試してみた
Micronaut on Azure 試してみた
新しいOpenShiftのしくみを調べてみた
新しいOpenShiftのしくみを調べてみた
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
JavaScript And Keywords
JavaScript And Keywords
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
Hatena blogdevelopmentflow
Hatena blogdevelopmentflow
Odl intro20141029
Odl intro20141029
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
xUnitハンズオン第3回テキスト
xUnitハンズオン第3回テキスト
SwaggerとAPIのデザイン
SwaggerとAPIのデザイン
Apache CloudStack Documentation
Apache CloudStack Documentation
Recently uploaded
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
Recently uploaded
(9)
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
高速!Clojure Web 開発入門
1.
高速! Clojure Web 開発入門 2016/07/21 Nishi-Shinju-Clojure
#0 堤 一樹
2.
自己紹介
3.
The RedMonk Programming
Language Rankings: January 2016 http://redmonk.com/sogrady/2016/02/19/language-rankings-1-16/
4.
本日話す内容 Clojure /
Script に興味があるという人は増えている印象だが Web アプリケーション採用事例はあまり聞かない... • 採用事例: • CircleCI (Clojurescript) • kawasima-san products • job-streamer, back-channeling, axebomber-clj etc. • Clojure / Script で作ったはいいけど保守できる人がいない Clojure / Script 開発者の裾野を広げたい • Clojure / Script を採用する利点として Web 開発の高速さを紹介 • component / duct を例に紹介
5.
本日話す内容 component /
duct • component / duct とは • RDD (REPL Driven Development) • 他のライブラリ / ツールとの組み合わせ • figwheel • garden • reagent Clojure / Script による Web アプリケーション開発サイクル cljc (Reader Conditionals)
6.
component / duct
とは component - https://github.com/stuartsierra/component • アプリケーションの状態を一元管理するためのフレームワーク duct - https://github.com/duct-framework/duct • component 上に Web アプリを構築するためのフレームワーク (プロジェクトテンプレートと少量のライブラリ) • 12-factor app に従ったアプリケーション構築が可能
7.
component / duct
とは component を使わない場合 • Web アプリのような多数の状態を持つアプリケーションを atom / ref で 構築すると... • 状態が散らばりどこを参照しているのか分からなくなる • 状態間の依存関係によりリセットが上手くいないことも atom atom atom atom atom ref ref ref ref 参照 依存
8.
component を使った場合 •
ソフトウェアをコンポーネントという単位に分割 • ソフトウェア内の状態をコンポーネント単位で管理 • コンポーネント間の依存関係を定義できる component / duct とは 状態 状態 状態 状態 ring-jetty-component db-component handler-component endpoint-component system-map endpoint-component db-component に依存 handler-component db-component に依存 service-component に依存 ring-jetty-component handler-componentに依存 system-using
9.
component を使った場合 •
各コンポーネントにライフサイクルを定義できる • ライフサイクルと依存関係から適切にソフトウェア全体の状態を適切 に初期化・リセットできるようになる component / duct とは 状態 ring-jetty-component 状態 db-component start 設定(handler含む)からjettyサーバ起動 起動したサーバは状態として保持 stop 状態として保持されたサーバを停止 handlerも破棄 start 設定(handler含む)からDBへ接続 接続情報は状態として保持 stop DBとの接続解除 接続情報も破棄
10.
component / duct
とは 実際の定義例 system-map 定義 component 間 の依存関係 from job-streamer-control-bus - https://github.com/job-streamer/job-streamer-control-bus
11.
component / duct
とは component FW 上で ring-clojure のアプリを構築するための ライブラリ(コンポーネント)+ プロジェクトテンプレート • ミドルウェア定義(handler)とルート定義(endpoint)を コンポーネント化 • その他 figwheel(後述)等による開発プロセスもコンポーネント化 • コンポーネント初期化時の設定を共通設定 / 環境依存設定に分けて 定義することで 12-factor app に従ったアプリケーションを簡単に構築 できる
12.
component / duct
とは handler component 実際の定義例 ミドルウェア定義 定義を元にハンドラ をコンポーネント化
13.
component / duct
とは endpoint component 実際の定義例 ルート定義 (compojure) ルート定義を元に エンドポイントを コンポーネント化
14.
component / duct
とは 12-factor app に従い環境依存の設定は環境変数に切り出す 環境依存する設定(及びデフォルト) ➡ 環境変数として設定 / 取得 環境に依存しない設定 ➡ ハードコーディング マージした設定を元に コンポーネントを生成して起動
15.
component / duct
での RDD RDD (REPL Driven Development) component / duct で構築した Web アプリケーション操作は全て Clojure REPL から実行可能 • 初期化(設定読み込み) • 起動 • 停止 • リセット • ... Web アプリケーションの変更をすぐに確認可能
16.
起動 component /
duct での RDD
17.
component / duct
での RDD リセット
18.
component / duct
での RDD RDD に組み合わせると便利なライブラリ • eftest - https://github.com/weavejester/eftest • テストコード検索 / テストランナー • REPL から実行可能 • alembic - https://github.com/pallet/alembic • project.clj (leiningen によるプロジェクト定義)の再読み込み • 依存ライブラリを追加 / 変更した際に即反映できる
19.
他のライブラリ / ツールとの組み合わせについて
garden – https://github.com/noprompt/garden • Clojure の list から css を生成するライブラリ • Clojure / Script 両対応のため、cljs に直接埋め込むことも可
20.
他のライブラリ / ツールとの組み合わせについて
reagent - https://github.com/reagent-project/reagent • A simple ClojureScript interface to React. • hiccup 記法で React.js の VDOM が表現できる
21.
他のライブラリ / ツールとの組み合わせについて
figwheel - https://github.com/bhauman/lein-figwheel • cljs のビルドとブラウザへのホットロードを行う leiningen plugin • duct より figwheel-component が提供されている • 前述の garden もコンポーネント化することで、 css ビルド ➡ js ビルド ➡ js / css ブラウザプッシュ という流れが実現できる style clj
22.
以上のライブラリを組み合わせると下記が全て REPL
から 実行可能になる • サーバサイドロジック(clj)の変更とブラウザでの確認 • js(cljs)の変更 / ビルドとブラウザでの確認 • css(clj)の変更 / ビルドとブラウザでの確認 Clojure / Script による Web アプリケーション開発サイクル
23.
Clojure / Script
による Web アプリケーション開発サイクル REPL 起動
24.
Clojure / Script
による Web アプリケーション開発サイクル Remote REPL 接続
25.
Clojure / Script
による Web アプリケーション開発サイクル duct-figwheel-component cljs garden-component clj css js build build ring-jetty-component db-component handler-component endpoint-component user=> (go) Remote REPL
26.
Clojure / Script
による Web アプリケーション開発サイクル duct-figwheel-component cljs request garden-component clj ring-jetty-component db-component handler-component endpoint-component index.html app.js screen.css Remote REPL css js
27.
Clojure / Script
による Web アプリケーション開発サイクル duct-figwheel-component cljs websocket garden-component clj ring-jetty-component db-component handler-component endpoint-component index.html app.js screen.css Remote REPL css js
28.
Clojure / Script
による Web アプリケーション開発サイクル duct-figwheel-component cljs garden-component clj css css js build build ring-jetty-component db-component handler-component endpoint-component user=> (reset) Remote REPL clj cljs websocket index.html app.js screen.cssapp.js push screen.css push style clj
29.
Clojure / Script
による Web アプリケーション開発サイクル duct-figwheel-component cljs garden-component clj css css js build build ring-jetty-component db-component handler-component endpoint-component Remote REPL clj cljs style clj websocket index.html app.js screen.css :on-jsload (reagent/render ...) user=> (reset)
30.
以降は下記の手順を繰り返すだけで開発可能 1. clj,
cljs ファイル修正 2. REPL からリセット 3. ブラウザ確認 依存ライブラリを増やす場合 • project.clj を修正して REPL より alembic/load-project 複雑なロジックに対してテストを追加した場合 • テストコードを追加して REPL より eftest/find-tests, eftest/run-tests 後は “REPL を切ったら負け” という思いで開発する Clojure / Script による Web アプリケーション開発サイクル
31.
cljc (Reader Conditionals)
JVM / Javascript クロスプラットフォームを実現する仕組み • cljc ファイルは Clojure / Script のいずれからも読み込める • コード中のプラットフォーム依存部分をReader Conditionals にて切り替え可能 • 精査、ユーティリティなどを Clojure / Script で共通化できる JVM / js で切替
32.
cljc (Reader Conditionals) components figwheel-component server-component handler-component endpoint-component garden-component reagent cljc (utility,
validation, style...) clj cljs duct 参照
33.
How to start
duct がプロジェクトテンプレートを提供 • プロジェクト作成時にオプションで cljs やexample endpoint の追加など が行える • プロジェクト生成後も leiningen プラグインから endpoint や component の追加が可能
34.
まとめ Clojure /
Script を Web 開発に採用すれば... • component / duct による状態の一元管理により簡潔な Web アプリケー ションを構築出来る • REPL による高速な開発プロセス • cljc によるクロスプラットフォームでのコード共有が可能 Try Clojure!
Download now