狠狠撸
Search
Submit Search
プログラミング言语颁濒辞箩耻谤别のニャンパスでの活用事例
?
18 likes
?
13,652 views
S
sohta
JJUG CCC 2015 Springでの発表資料です。
Read less
Read more
1 of 34
Download now
Downloaded 35 times
More Related Content
プログラミング言语颁濒辞箩耻谤别のニャンパスでの活用事例
1.
プログラミング言語Clojureの ニャンパスでの活用事例 JJUG CCC 2015
Spring 2015/04/11 @ ベルサール新宿グランド ニャンパス株式会社?太田 正悟
2.
自己紹介 ? 太田 正悟
(@athos0220) ? Clojureコントリビュータ ? 今年2月よりニャンパス所属 ? 2013年に某アニメ関連で話題になっていたニャン パスと交流をはじめる
3.
会社紹介 ? ニャンパス株式会社 ? 2010年設立 ?
業務内容 ? Webサービス?アプリ開発 ? プロトタイピング(試作開発) ? コワーキングスペース贬补尝补办别を運営
4.
アジェンダ ? 颁濒辞箩耻谤别の概要 ? 颁濒辞箩耻谤别を使う理由 ?
颁濒辞箩耻谤别活用事例 ? Clojureコミュニティに向けた取り組み
5.
颁濒辞箩耻谤别の概要
6.
颁濒辞箩耻谤别の概要 ? Lisp系言語 ? 関数型言語 ?
闯痴惭言语
7.
颁濒辞箩耻谤别の概要: Lisp系言語 ? S式というLisp由来の独特のシンタックスをもつ ?
言語がシンプルで覚えることが少ない ? マクロを使ってプログラマが言語を拡張できる(後述) (defn hello [name] (println (str “Hello ” name)))
8.
颁濒辞箩耻谤别の概要: Lisp系言語 user=> (defn
f [x] (+ x 1)) #’user/f user=> (f 10) 11 user=> (defn f [x] (* x x)) #’user/f user=> (f 10) 100 REPL(Read-Eval-Print Loop)を 使ったインタラクティブな開発
9.
颁濒辞箩耻谤别の概要: 関数型言語 ? 多くの値がイミュータブル(不変) ?
ファーストクラスな関数 ? 遅延シーケンスで無限個の値も扱える (reduce (fn [a x] (+ a x)) (map (fn [x] (* x x)) (take-while (fn [x] (<= x 100)) (range))))
10.
颁濒辞箩耻谤别の概要: 関数型言語 (->> (range) (take-while
#(<= % 100)) (map #(* % %)) (reduce +)) こうも書ける! ? 多くの値がイミュータブル ? ファーストクラスな関数 ? 遅延シーケンスで無限個の値も扱える
11.
颁濒辞箩耻谤别の概要: 闯痴惭言语 ? Javaのオブジェクトを簡単に扱える ?
無名クラスも簡単に作れる (String. “foo”) (.substring “foo” 1) Math/PI (Long/parseLong “42”) new String(“foo”) “foo”.substring(1) Math.PI Long.parseLong(“42”) Clojure Java
12.
颁濒辞箩耻谤别の概要: 闯痴惭言语 ? Javaのオブジェクトを簡単に扱える ?
無名クラスも簡単に作れる (reify Runnable (run [this] (println “foo”))) new Runnable() { public void run() { System.out.println(“foo”); } } Clojure Java
13.
颁濒辞箩耻谤别を使う理由
14.
颁濒辞箩耻谤别を使う理由 ? アジャイル開発との親和性 ? 十分な実用性 ?
言语の自由度
15.
颁濒辞箩耻谤别を使う理由: アジャイル開発との親和性 すばやいフィード バックループ すばやい データ構築 漸進的な設計 REPLによる! インタラクティブ開発 イミュータブルな! データ構造 後づけ可能な! ポリモーフィズム
16.
颁濒辞箩耻谤别を使う理由: アジャイル開発との親和性 ? イミュータブルなマップ(辞書)でデータの表現を柔軟に ?
設計に関する決定を後に遅らせることができる {:type :rectangle :width 30 :height 40} public class Rectangle extends Shape { int width, height; … } Clojure Java
17.
颁濒辞箩耻谤别を使う理由: アジャイル開発との親和性 ? イミュータブルなマップ(辞書)でデータの表現を柔軟に ?
設計に関する決定を後に遅らせることができる {:type :rectangle :width 30 :height 40} (defmulti area :type) (defmethod area :rectangle [shape] (* (:width shape) (:height shape))) public class Rectangle extends Shape { int width, height; … } Clojure Java ポリモーフィックな振る舞いは?? マルチメソッド等で後づけできる!
18.
颁濒辞箩耻谤别を使う理由: 十分な実用性 十分な パフォーマンス 豊富なライブラリ 実用レベルの! エコシステム JVM上で動作 Javaとの! 相互運用性 Leiningen! Clojars, etc.
19.
颁濒辞箩耻谤别を使う理由: 言语の自由度 実行時の プログラム変更 問題領域にあった 言語の定義 リロード機能! REPL, etc. マクロ
20.
颁濒辞箩耻谤别を使う理由: 言语の自由度 マクロ ? プログラマが独自の構文を定義できる仕組み ?
問題領域に合わせてClojureを拡張可能 (defmacro with-open [[name file] & body] `(let [~name ~file] (try ~@body (finally (.close ~name))))) (with-open [f (reader “foo”)] (write-to-file f)) (let [f (reader “foo”)] (try (write-to-file f) (finally (.close f)))) マクロの定義 展開
21.
颁濒辞箩耻谤别を使う理由: 言语の自由度 マクロ! ライブラリ 静的 型チェック 非同期 プログラミング パターン マッチ 論理 プログラミング core.typed core.async core.match core.logic
22.
颁濒辞箩耻谤别活用事例
23.
颁濒辞箩耻谤别活用事例 ? baasday ? Lesson
Supporter
25.
baasday ? MBaaS (Mobile
Backend as a Service) ? スマホアプリのバックエンド機能をクラウドサービスとして提供 ? 運用:2年 ? 利用者:のべ20万インストール ? スループット:150リクエスト/秒 Amazon SES Amazon SNS Amazon S3 Amazon ELB App (EC2) App (EC2) App (EC2) DB (EC2)
26.
Lesson Supporter ? 個人レッスン支援サービス ?
簡易CMS?ブログ?予約管理機能等を提供 ? ボイストレーナー星野氏と共同で開発中 ? 近日公開予定
27.
Lesson Supporter CMSモデル ? CMSを構成するペー ジからなるマップ ?
着手から3日でCMS モデルとページ描画 処理のコアが完成 ? 後にページテンプレ 毎のカスタム描画方 法をマルチメソッド で定義できるように {:description “太田のパソコン教室”, :_id “ohta-pc”, :name “ohta-pc”, :title “ようこそ太田のパソコン教室へ”, :pages [{:display-name “ホーム”, :name “intro”, :template “intro”, :context {:page-name “intro”, :content “”, :subtitle “よろしく”, :page-title “自己紹介”}} {:name “blog”, :template “blog”, :context {:blog-description nil}, :display-name “ブログ”} …… ]}
28.
Lesson Supporter user=> (import
'jp.webpay.webpay.WebPay) jp.webpay.webpay.WebPay user=> (def wp (WebPay. secret-key)) #'user/wp user=> (import 'jp.webpay.webpay.data.CardRequest) jp.webpay.webpay.data.CardRequest user=> (def req (.. (CardRequest.) (number number) (expMonth 3) (expYear 16) (cvc "123") (name "Shogo Ohta"))) #'user/req user=> (.. wp token createRequest (card req) execute) #<TokenResponse …> インタラクティブな APIの確認 ? WebPay APIによる クレジット決済 ? 初利用だったため、 REPLからAPIの使い 勝手を確認
29.
Clojureコミュニティ に向けた取り組み
30.
Clojureコミュニティに向けた取り組み ? OSS ? 勉強会 ?
コワーキングスペース贬补尝补办别
31.
Clojureコミュニティに向けた取り組み: OSS clojournal (https://github.com/nyampass/clojournal) ?
Clojureの日本語情報発信サイト (http://clojournal.com) clowpay (https://github.com/nyampass/clowpay) ? WebPay APIのClojureバインディング parabola (https://github.com/athos/parabola) ? Clojureチャットボットフレームワーク その他のリポジトリは https://github.com/nyampass/ から確認できます
32.
Clojureコミュニティに向けた取り組み: 勉強会 Tokyo.clj (渋谷) ?
不定期開催。Clojure入門セッション、もくもく会。 Laketown.clj (HaLake@越谷レイクタウン) ? 月1開催。もくもく会。 テーマ特化勉強会 (gen-class勉強会/core.async勉強会/etc.) ? 特定の言語機能等にフォーカスした勉強会。
33.
ハンモック ? Rich Hickeyが提唱するハンモック駆動開発に由来。 Clojure割引 ?
1日利用500円 (通常1000円)。 チェックインアプリ HaLake API ? OSSとして公開。 Clojureコミュニティに向けた取り組み: HaLake
34.
まとめ ? 颁濒辞箩耻谤别を使う理由 ? アジャイル開発との親和性 ?
十分な実用性 ? 言语の自由度 ? 日本でもClojureコミュニティが徐々に活発化! ? さぁ、皆さんもClojureをはじめてみよう!!
Download