Movatterモバイル変換


[0]ホーム

URL:


Uploaded bysohta
PDF, PPTX13,666 views

プログラミング言語Clojureのニャンパスでの活用事例

JJUG CCC 2015 Springでの発表資料です。

Embed presentation

Download as PDF, PPTX
プログラミング言語Clojureのニャンパスでの活用事例JJUG CCC 2015 Spring2015/04/11 @ ベルサール新宿グランドニャンパス株式会社 太田 正悟
自己紹介‣ 太田 正悟 (@athos0220)‣ Clojureコントリビュータ‣ 今年2月よりニャンパス所属‣ 2013年に某アニメ関連で話題になっていたニャンパスと交流をはじめる
会社紹介‣ ニャンパス株式会社‣ 2010年設立‣ 業務内容‣ Webサービス・アプリ開発‣ プロトタイピング(試作開発)‣ コワーキングスペースHaLakeを運営
アジェンダ‣ Clojureの概要‣ Clojureを使う理由‣ Clojure活用事例‣ Clojureコミュニティに向けた取り組み
Clojureの概要
Clojureの概要‣ Lisp系言語‣ 関数型言語‣ JVM言語
Clojureの概要: Lisp系言語‣ S式というLisp由来の独特のシンタックスをもつ‣ 言語がシンプルで覚えることが少ない‣ マクロを使ってプログラマが言語を拡張できる(後述)(defn hello [name](println (str “Hello ” name)))
Clojureの概要: Lisp系言語user=> (defn f [x] (+ x 1))#’user/fuser=> (f 10)11user=> (defn f [x] (* x x))#’user/fuser=> (f 10)100REPL(Read-Eval-Print Loop)を使ったインタラクティブな開発
Clojureの概要: 関数型言語‣ 多くの値がイミュータブル(不変)‣ ファーストクラスな関数‣ 遅延シーケンスで無限個の値も扱える(reduce (fn [a x] (+ a x))(map (fn [x] (* x x))(take-while (fn [x] (<= x 100))(range))))
Clojureの概要: 関数型言語(->> (range)(take-while #(<= % 100))(map #(* % %))(reduce +)) こうも書ける!‣ 多くの値がイミュータブル‣ ファーストクラスな関数‣ 遅延シーケンスで無限個の値も扱える
Clojureの概要: JVM言語‣ Javaのオブジェクトを簡単に扱える‣ 無名クラスも簡単に作れる(String. “foo”)(.substring “foo” 1)Math/PI(Long/parseLong “42”)new String(“foo”)“foo”.substring(1)Math.PILong.parseLong(“42”)Clojure Java
Clojureの概要: JVM言語‣ Javaのオブジェクトを簡単に扱える‣ 無名クラスも簡単に作れる(reify Runnable(run [this](println “foo”)))new Runnable() {public void run() {System.out.println(“foo”);}}Clojure Java
Clojureを使う理由
Clojureを使う理由‣ アジャイル開発との親和性‣ 十分な実用性‣ 言語の自由度
Clojureを使う理由: アジャイル開発との親和性すばやいフィードバックループすばやいデータ構築漸進的な設計REPLによる!インタラクティブ開発イミュータブルな!データ構造後づけ可能な!ポリモーフィズム
Clojureを使う理由: アジャイル開発との親和性‣ イミュータブルなマップ(辞書)でデータの表現を柔軟に‣ 設計に関する決定を後に遅らせることができる{:type :rectangle:width 30:height 40}public class Rectangle extends Shape {int width, height;…}ClojureJava
Clojureを使う理由: アジャイル開発との親和性‣ イミュータブルなマップ(辞書)でデータの表現を柔軟に‣ 設計に関する決定を後に遅らせることができる{: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;…}ClojureJavaポリモーフィックな振る舞いは  マルチメソッド等で後づけできる!
Clojureを使う理由: 十分な実用性十分なパフォーマンス豊富なライブラリ実用レベルの!エコシステムJVM上で動作Javaとの!相互運用性Leiningen!Clojars, etc.
Clojureを使う理由: 言語の自由度実行時のプログラム変更問題領域にあった言語の定義リロード機能!REPL, etc.マクロ
Clojureを使う理由: 言語の自由度マクロ‣ プログラマが独自の構文を定義できる仕組み‣ 問題領域に合わせて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))))マクロの定義展開
Clojureを使う理由: 言語の自由度マクロ!ライブラリ静的型チェック非同期プログラミングパターンマッチ論理プログラミングcore.typedcore.asynccore.matchcore.logic
Clojure活用事例
Clojure活用事例‣ baasday‣ Lesson Supporter
baasday‣ MBaaS (Mobile Backend as a Service)‣ スマホアプリのバックエンド機能をクラウドサービスとして提供‣ 運用:2年‣ 利用者:のべ20万インストール‣ スループット:150リクエスト/秒Amazon SESAmazon SNSAmazon S3Amazon ELBApp (EC2)App (EC2)App (EC2) DB (EC2)
Lesson Supporter‣ 個人レッスン支援サービス‣ 簡易CMS・ブログ・予約管理機能等を提供‣ ボイストレーナー星野氏と共同で開発中‣ 近日公開予定
Lesson SupporterCMSモデル‣ 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 “ブログ”}……]}
Lesson Supporteruser=> (import 'jp.webpay.webpay.WebPay)jp.webpay.webpay.WebPayuser=> (def wp (WebPay. secret-key))#'user/wp user=> (import'jp.webpay.webpay.data.CardRequest)jp.webpay.webpay.data.CardRequestuser=> (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の使い勝手を確認
Clojureコミュニティに向けた取り組み
Clojureコミュニティに向けた取り組み‣ OSS‣ 勉強会‣ コワーキングスペースHaLake
Clojureコミュニティに向けた取り組み: OSSclojournal (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/ から確認できます
Clojureコミュニティに向けた取り組み: 勉強会Tokyo.clj (渋谷)‣ 不定期開催。Clojure入門セッション、もくもく会。Laketown.clj (HaLake@越谷レイクタウン)‣ 月1開催。もくもく会。テーマ特化勉強会 (gen-class勉強会/core.async勉強会/etc.)‣ 特定の言語機能等にフォーカスした勉強会。
ハンモック‣ Rich Hickeyが提唱するハンモック駆動開発に由来。Clojure割引‣ 1日利用500円 (通常1000円)。チェックインアプリHaLake API‣ OSSとして公開。Clojureコミュニティに向けた取り組み: HaLake
まとめ‣ Clojureを使う理由‣ アジャイル開発との親和性‣ 十分な実用性‣ 言語の自由度‣ 日本でもClojureコミュニティが徐々に活発化!‣ さぁ、皆さんもClojureをはじめてみよう!!

Recommended

PPTX
Clojureの世界と実際のWeb開発
PDF
Scala警察のすすめ
PDF
会社でClojure使ってみて分かったこと
PDF
頑張りすぎないScala
PDF
C++ マルチスレッド 入門
PDF
Goroutineと channelから はじめるgo言語
PDF
"Simple Made Easy" Made Easy
PDF
20分くらいでわかった気分になれるC++20コルーチン
 
PDF
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
PDF
Java仮想マシンの実装技術
PDF
Xbyakの紹介とその周辺
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
PDF
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
PDF
MLflowによる機械学習モデルのライフサイクルの管理
PDF
Goとテスト
PDF
規格書で読むC++11のスレッド
PDF
QoS for ROS 2 Dashing/Eloquent
PDF
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
PDF
Pythonによる黒魔術入門
PDF
ダブル配列の実装方法
PDF
PPTX
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
PDF
CRC-32
 
PDF
暗号化したまま計算できる暗号技術とOSS開発による広がり
PPTX
OS入門
PDF
型安全性入門
PDF
明日使えないすごいビット演算
PDF
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
PDF
イミュータブルデータモデル(世代編)
PDF
ClojureでElectronアプリを作ろう

More Related Content

PPTX
Clojureの世界と実際のWeb開発
PDF
Scala警察のすすめ
PDF
会社でClojure使ってみて分かったこと
PDF
頑張りすぎないScala
PDF
C++ マルチスレッド 入門
PDF
Goroutineと channelから はじめるgo言語
PDF
"Simple Made Easy" Made Easy
PDF
20分くらいでわかった気分になれるC++20コルーチン
 
Clojureの世界と実際のWeb開発
Scala警察のすすめ
会社でClojure使ってみて分かったこと
頑張りすぎないScala
C++ マルチスレッド 入門
Goroutineと channelから はじめるgo言語
"Simple Made Easy" Made Easy
20分くらいでわかった気分になれるC++20コルーチン
 

What's hot

PDF
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
PDF
Java仮想マシンの実装技術
PDF
Xbyakの紹介とその周辺
PDF
Cognitive Complexity でコードの複雑さを定量的に計測しよう
PDF
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
PDF
MLflowによる機械学習モデルのライフサイクルの管理
PDF
Goとテスト
PDF
規格書で読むC++11のスレッド
PDF
QoS for ROS 2 Dashing/Eloquent
PDF
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
PDF
Pythonによる黒魔術入門
PDF
ダブル配列の実装方法
PDF
PPTX
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
PDF
CRC-32
 
PDF
暗号化したまま計算できる暗号技術とOSS開発による広がり
PPTX
OS入門
PDF
型安全性入門
PDF
明日使えないすごいビット演算
PDF
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Java仮想マシンの実装技術
Xbyakの紹介とその周辺
Cognitive Complexity でコードの複雑さを定量的に計測しよう
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
MLflowによる機械学習モデルのライフサイクルの管理
Goとテスト
規格書で読むC++11のスレッド
QoS for ROS 2 Dashing/Eloquent
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
Pythonによる黒魔術入門
ダブル配列の実装方法
3次元SLAMは誰でもできるよ。そう、TX2とTurtleBot3ならね。
CRC-32
 
暗号化したまま計算できる暗号技術とOSS開発による広がり
OS入門
型安全性入門
明日使えないすごいビット演算
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy

Viewers also liked

PDF
イミュータブルデータモデル(世代編)
PDF
ClojureでElectronアプリを作ろう
PDF
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
PDF
DB設計でこだわりたい三つの要素
PDF
マテリアルデザインを用いたデザインリニューアル [フリル編]
PDF
JobStreamerではじめるJavaBatchのクラウド分散実行
PDF
Android学ぶを君へ。生き抜くためのナレッジ共有
PDF
開発を効率的に進めるられるまでの道程
PDF
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
PDF
Java web application testing
PDF
Droid kaigiプレゼン
PDF
SIerアーキテクト視点でみたKotlinの紹介
PDF
データモデルは時空を越える
PDF
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
PDF
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
イミュータブルデータモデル(世代編)
ClojureでElectronアプリを作ろう
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
DB設計でこだわりたい三つの要素
マテリアルデザインを用いたデザインリニューアル [フリル編]
JobStreamerではじめるJavaBatchのクラウド分散実行
Android学ぶを君へ。生き抜くためのナレッジ共有
開発を効率的に進めるられるまでの道程
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
Java web application testing
Droid kaigiプレゼン
SIerアーキテクト視点でみたKotlinの紹介
データモデルは時空を越える
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について

Similar to プログラミング言語Clojureのニャンパスでの活用事例

PDF
キメるClojure
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
PDF
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
PDF
From Java To Clojure
PDF
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
PPT
2008.10.18 L4u Tech Talk
PPT
第1回java実習(helloworld)2011
PPTX
Ll tiger clojure
PDF
clominal
KEY
Clojureの発表など
PDF
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
PDF
夏だからJava再入門
PDF
Clojure
PDF
Rubyの御先祖CLUのお話(原本)
KEY
関ジャバ JavaOne Tokyo 2012報告会
PDF
Scala conf2013
PDF
Everyday Life with clojure.spec
PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
キメるClojure
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
From Java To Clojure
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
2008.10.18 L4u Tech Talk
第1回java実習(helloworld)2011
Ll tiger clojure
clominal
Clojureの発表など
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
夏だからJava再入門
Clojure
Rubyの御先祖CLUのお話(原本)
関ジャバ JavaOne Tokyo 2012報告会
Scala conf2013
Everyday Life with clojure.spec
BOF1-Scala02.pdf
BOF1-Scala02.pdf
BOF1-Scala02.pdf

More from sohta

PDF
入門core.async
 
PDF
入門ClojureScript
 
PDF
ClojureではじめるSTM入門
 
PDF
入門Transducers
 
PDF
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
 
PDF
Clojure Language Update (2015)
 
PDF
REPLライフをもっと快適に
 
PDF
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
PDF
Clojureによるバイトコードプログラミング
 
PDF
Macros in Clojure
 
入門core.async
 
入門ClojureScript
 
ClojureではじめるSTM入門
 
入門Transducers
 
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
 
Clojure Language Update (2015)
 
REPLライフをもっと快適に
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
Clojureによるバイトコードプログラミング
 
Macros in Clojure
 

プログラミング言語Clojureのニャンパスでの活用事例


[8]ページ先頭

©2009-2025 Movatter.jp