SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
プログラミング言語Clojureの
ニャンパスでの活用事例
JJUG CCC 2015 Spring
2015/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/f	
user=> (f 10)	
11	
user=> (defn f [x] (* x x))	
#’user/f	
user=> (f 10)	
100
REPL(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.PI	
Long.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;	
…	
}
Clojure
Java
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;	
…	
}
Clojure
Java
ポリモーフィックな振る舞いは  
マルチメソッド等で後づけできる!
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.typed
core.async
core.match
core.logic
Clojure活用事例
Clojure活用事例
‣ baasday
‣ Lesson Supporter
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)
Lesson Supporter
‣ 個人レッスン支援サービス
‣ 簡易CMS・ブログ・予約管理機能等を提供
‣ ボイストレーナー星野氏と共同で開発中
‣ 近日公開予定
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 “ブログ”}	
……	
]}
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の使い
勝手を確認
Clojureコミュニティ
に向けた取り組み
Clojureコミュニティに向けた取り組み
‣ OSS
‣ 勉強会
‣ コワーキングスペースHaLake
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/ から確認できます
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をはじめてみよう!!

Contenu connexe

Tendances

ADRという考えを取り入れてみて
ADRという考えを取り入れてみてADRという考えを取り入れてみて
ADRという考えを取り入れてみてinfinite_loop
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Ryosuke Uchitate
 
アプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のことアプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のことTakafumi ONAKA
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方豊明 尾古
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかShohei Okada
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルYuta Hiroto
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile増田 亨
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会Takayuki Shimizukawa
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめMikiya Okuno
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法Takeshi Sugiyama
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界Y Watanabe
 

Tendances (20)

ADRという考えを取り入れてみて
ADRという考えを取り入れてみてADRという考えを取り入れてみて
ADRという考えを取り入れてみて
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
 
アプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のことアプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のこと
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
Laravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのかLaravel の paginate は一体何をやっているのか
Laravel の paginate は一体何をやっているのか
 
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデルブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
 
Kotlinアンチパターン
KotlinアンチパターンKotlinアンチパターン
Kotlinアンチパターン
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
RDRA DDD Agile
RDRA DDD AgileRDRA DDD Agile
RDRA DDD Agile
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 
キメるClojure
キメるClojureキメるClojure
キメるClojure
 
他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法他人が書いたコードのリファレンスをSphinxで作る方法
他人が書いたコードのリファレンスをSphinxで作る方法
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
 

En vedette

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

En vedette (16)

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

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

全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
TypeScriptをオススメする理由
TypeScriptをオススメする理由TypeScriptをオススメする理由
TypeScriptをオススメする理由Yusuke Naka
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)Ikuru Kanuma
 
Clojure で減価償却費計算
Clojure で減価償却費計算Clojure で減価償却費計算
Clojure で減価償却費計算ultrakanji
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザインKazuhiro Hara
 
AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境Tatsuya Sakai
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 ClojureYoshitaka Kawashima
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScriptsohta
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionKazuchika Sekiya
 
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~拓将 平林
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】schoowebcampus
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Yasushi Ishikawa
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2Moto Yan
 
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方Shunji Konishi
 
【JJUG LT 大会】Zulu Open JDK
【JJUG LT 大会】Zulu Open JDK【JJUG LT 大会】Zulu Open JDK
【JJUG LT 大会】Zulu Open JDKShigeru Tatsuta
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 

Similaire à プログラミング言語Clojureのニャンパスでの活用事例 (20)

全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
TypeScriptをオススメする理由
TypeScriptをオススメする理由TypeScriptをオススメする理由
TypeScriptをオススメする理由
 
From JS To CLJS
From JS To CLJSFrom JS To CLJS
From JS To CLJS
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Clojure で減価償却費計算
Clojure で減価償却費計算Clojure で減価償却費計算
Clojure で減価償却費計算
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザイン
 
AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境
 
Ll tiger clojure
Ll tiger clojureLl tiger clojure
Ll tiger clojure
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
 
入門ClojureScript
入門ClojureScript入門ClojureScript
入門ClojureScript
 
SPA×Auth0
SPA×Auth0SPA×Auth0
SPA×Auth0
 
G* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - IntroductionG* Workshop in Fukuoka - Introduction
G* Workshop in Fukuoka - Introduction
 
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
「はじめてのClojure」出版記念!Light Tableを使ってClojureに触れてみよう!【第2回】
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
 
【JJUG LT 大会】Zulu Open JDK
【JJUG LT 大会】Zulu Open JDK【JJUG LT 大会】Zulu Open JDK
【JJUG LT 大会】Zulu Open JDK
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 

Plus de sohta

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

Plus de sohta (9)

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

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