Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
sohta
PDF, PPTX
14,772 views
REPLライフをもっと快適に
Clojure夜会で発表したスライドです。Stuart Sierraが提案しているClojureワークフローについて紹介しています。
Technology
◦
Read more
9
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 21
2
/ 21
3
/ 21
4
/ 21
5
/ 21
6
/ 21
7
/ 21
8
/ 21
9
/ 21
10
/ 21
11
/ 21
12
/ 21
13
/ 21
14
/ 21
15
/ 21
16
/ 21
17
/ 21
18
/ 21
19
/ 21
20
/ 21
21
/ 21
More Related Content
PDF
super_unkoをスーパーキレイにした
by
jiro4989
PDF
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
by
sohta
PDF
会社でClojure使ってみて分かったこと
by
Recruit Technologies
PDF
高速!Clojure Web 開発入門
by
Kazuki Tsutsumi
PDF
とにかく始めるClojure
by
Masayuki Muto
PDF
Light TableでClojure入門
by
Tokusei Noborio
PDF
java-oneの話
by
Recruit Technologies
PDF
プログラミング言語Clojureのニャンパスでの活用事例
by
sohta
super_unkoをスーパーキレイにした
by
jiro4989
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
by
sohta
会社でClojure使ってみて分かったこと
by
Recruit Technologies
高速!Clojure Web 開発入門
by
Kazuki Tsutsumi
とにかく始めるClojure
by
Masayuki Muto
Light TableでClojure入門
by
Tokusei Noborio
java-oneの話
by
Recruit Technologies
プログラミング言語Clojureのニャンパスでの活用事例
by
sohta
Viewers also liked
PDF
イマドキのExcelスクショの撮り方
by
Yoshitaka Kawashima
PPTX
Who moved my cheese
by
AmplifiedSteve
PPT
Use Video to Communicate
by
e mixon
PDF
ClojureではじめるSTM入門
by
sohta
PDF
AndroidでScalaを使う際の問題点と対策
by
Mogi Isamu
PDF
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
by
Mogi Isamu
PDF
React系(別言語含む)の サーバーサイドレンダリング について考えよう
by
Kazuhiro Hara
PDF
はてなブックマークに基づく関連記事レコメンドエンジンの開発
by
Shunsuke Kozawa
PDF
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
by
Toshiaki Maki
PDF
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
by
Yoshitaka Kawashima
PDF
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
by
Masahiro Nagano
PDF
Aerospike on IDCF Cloud
by
IDC Frontier
PDF
Mackerel & Norikra mackerel meetup #4 LT
by
Masahiro Nagano
PDF
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
by
Masahiro Nagano
PDF
Big Master Data PHP BLT #1
by
Masahiro Nagano
PDF
Rhebok, High Performance Rack Handler / Rubykaigi 2015
by
Masahiro Nagano
PDF
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
by
Masahiro Nagano
PDF
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
by
Kazuhiro Hara
PDF
JobStreamerではじめるJavaBatchのクラウド分散実行
by
Yoshitaka Kawashima
PDF
キメるClojure
by
Yoshitaka Kawashima
イマドキのExcelスクショの撮り方
by
Yoshitaka Kawashima
Who moved my cheese
by
AmplifiedSteve
Use Video to Communicate
by
e mixon
ClojureではじめるSTM入門
by
sohta
AndroidでScalaを使う際の問題点と対策
by
Mogi Isamu
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
by
Mogi Isamu
React系(別言語含む)の サーバーサイドレンダリング について考えよう
by
Kazuhiro Hara
はてなブックマークに基づく関連記事レコメンドエンジンの開発
by
Shunsuke Kozawa
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
by
Toshiaki Maki
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
by
Yoshitaka Kawashima
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
by
Masahiro Nagano
Aerospike on IDCF Cloud
by
IDC Frontier
Mackerel & Norikra mackerel meetup #4 LT
by
Masahiro Nagano
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
by
Masahiro Nagano
Big Master Data PHP BLT #1
by
Masahiro Nagano
Rhebok, High Performance Rack Handler / Rubykaigi 2015
by
Masahiro Nagano
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
by
Masahiro Nagano
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
by
Kazuhiro Hara
JobStreamerではじめるJavaBatchのクラウド分散実行
by
Yoshitaka Kawashima
キメるClojure
by
Yoshitaka Kawashima
Similar to REPLライフをもっと快適に
PDF
Elixirだ 第1回強化版 後半
by
Joe_noh
PDF
Lisp Tutorial for Pythonista : Day 3
by
Ransui Iso
PDF
Spectacular Future with clojure.spec
by
Kent Ohashi
PDF
Clojureに入門してみた、2017年秋
by
Satoshi KOBAYASHI
PDF
Clojure
by
yshigeru
PPTX
Ll tiger clojure
by
Toshiaki Maki
Elixirだ 第1回強化版 後半
by
Joe_noh
Lisp Tutorial for Pythonista : Day 3
by
Ransui Iso
Spectacular Future with clojure.spec
by
Kent Ohashi
Clojureに入門してみた、2017年秋
by
Satoshi KOBAYASHI
Clojure
by
yshigeru
Ll tiger clojure
by
Toshiaki Maki
More from sohta
PDF
入門Transducers
by
sohta
PDF
Clojure Language Update (2015)
by
sohta
PDF
入門ClojureScript
by
sohta
PDF
入門core.async
by
sohta
PDF
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
by
sohta
PDF
Macros in Clojure
by
sohta
PDF
Clojureによるバイトコードプログラミング
by
sohta
入門Transducers
by
sohta
Clojure Language Update (2015)
by
sohta
入門ClojureScript
by
sohta
入門core.async
by
sohta
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
by
sohta
Macros in Clojure
by
sohta
Clojureによるバイトコードプログラミング
by
sohta
REPLライフをもっと快適に
1.
REPLライフをもっと快適に! ∼Stuart SierraのClojureワークフローの紹介∼ Clojure夜会 2014/10/10 @athos0220
2.
REPL! 使ってますか?
3.
user=> 評価 入力した式の結果がすぐ確認できる! 高速なフィードバックループ
4.
Check user=> (ns example) (defn fib
[x] ...) Edit 評価
5.
Check user=> (ns example) (defn fib
[x] ...) Edit 評価 ロード! or! リロード
6.
Check user=> (ns example) (defn fib
[x] ...) Edit 評価 修正! or ! 次のステップへ ロード! or! リロード
7.
Check user=> (ns example) (defn fib
[x] ...) Edit 評価 修正! or ! 次のステップへ ロード! or! リロード 失敗
8.
Check user=> (ns example) (defn fib
[x] ...) Edit 修正・確認のフィードバックループを高速に! 回すにはリロードが重要! 評価 修正! or ! 次のステップへ ロード! or! リロード 失敗
9.
リロードにまつわる問題 • プロトコルやマルチメソッド、マクロ等に対する 変更が正しく反映されない • 名前空間のロード順に制約がある場合に、制約 を満たさない順でロードが実行される •
通信コネクションの切断・接続やスレッドの停 止・開始等が正しく実行されない これらを解決するには! ツールのサポートと設計の工夫が必要
10.
快適なREPLライフへの3ステップ • tools.namespaceを使おう • user.cljを作ろう •
コンポーネント単位でシステムを作ろう
11.
tools.namespaceを使おう • 名前空間の依存関係を解析して適切な順番でロードし直す • リロードによって不整合が起こらないようにしてくれる •
平たくいえば (require … :reload) の強化版 A! B! A’! ! C A’! B! C (require … :reload) A! B! A’! ! C A’! ! C tools.namespace 例
12.
tools.namespaceを使おう • 依存ライブラリとして以下を追加(2014/10現在) ! • (require
… :reload) の代わりに (refresh) を使う ! ! [org.clojure/tools.namespace “0.2.7”] user=> (require ‘[clojure.tools.namespace.repl :refer [refresh]]) nil user=> (refresh) :reloading (reacta.script reacta.scripts.hello) :ok user=>
13.
user.cljを作ろう • tools.namespaceはリロード毎に名前空間を作り 直すので… • REPLで定義した変数・関数が消える •
REPLでrequireした名前空間も見えなくなる • REPLがクラスパス中のuser.cljを自動で読み込む ことを利用して、そこに必要なものを定義
14.
user.cljを作ろう • (準備) :devプロファイルでのみ有効になるパスを作る •
リリース版JARファイルにuser.cljが含まれないように (defproject foobar "0.1.0-SNAPSHOT" :description "TODO" :url "TODO" :license {:name "TODO: Choose a license" :url "http://choosealicense.com/"} :dependencies [[org.clojure/clojure "1.6.0"]] :profiles {:dev {:dependencies [[org.clojure/tools.namespace "0.2.7"]] :source-paths ["dev"]}})
15.
(ns user (:require [clojure.tools.namespace.repl
:refer [refresh]] [clojure.repl :refer :all] [clojure.pprint :refer [pp pprint]] [foobar.core :refer :all])) ! (def system nil) ! (defn init [] (alter-var-root #’system (システム初期化))) ! (defn start [] (alter-var-root #'system (システムスタート))) ! (defn stop [] (alter-var-root #'system (システムストップ))) ! (defn go [] (init) (start)) ! (defn reset [] (stop) (refresh :after 'user/go)) dev/user.cljの例
16.
コンポーネント単位でシステムを作ろう • Componentライブラリ • システムを“コンポーネント”に分割 •
コンポーネント=状態を共有する関数群 • DBアクセス、外部サービス、atomやref, etc. • コンポーネントの起動・停止方法を提供し、依存 関係を考慮した順序で呼び出す
17.
コンポーネント単位でシステムを作ろう System DB Users! API Email! Service Queue! Service
18.
コンポーネント単位でシステムを作ろう (ns example.db (:require [com.stuartsierra.component
:as comp] …)) ! (defrecord Database [host port conn] comp/Lifecycle (start [component] (assoc component :conn (db/connect host port))) (stop [component] (.close conn) component)) コンポーネントに関する副作用は! start/stopメソッド内にまとめる
19.
コンポーネント単位でシステムを作ろう (ns example.core (:require [com.stuartsierra.component
:as comp] …)) ! (defn new-system [config] (let [{:keys [host port]} (:db config)] (comp/system-map :database (database host port) :queue-service (queue-service …) :email-service (email-service …) :users-api (comp/using (users-api) [:database :email-service])))) コンポーネント間の依存関係をデータで表現! Componentが依存関係を考えて各コンポーネントを起動・停止
20.
まとめ • 動的に変更を取り込むのは動的言語の醍醐味 • 各ステップを単独で導入するだけでも効果あり •
高速なフィードバックループを実現し、快適な REPLライフを!
21.
参考文献 • My Clojure
Workflow, Reloaded • Clojure in the Large [InfoQ] • tools.namespace [GitHub] • Component Library [GitHub]
Download