SlideShare a Scribd company logo
1 of 34
Download to read offline
プログラミング言語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をはじめてみよう!!

More Related Content

What's hot

今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミングJavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミングKent Ohashi
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1Y Watanabe
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング佑哉 廣岡
 
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Yuji Kubota
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
入門core.async
入門core.async入門core.async
入門core.asyncsohta
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術までAkihiro Suda
 
Lisperの見る世界
Lisperの見る世界Lisperの見る世界
Lisperの見る世界fukamachi
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccYuji Kubota
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!Hirotaka Sato
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理msssgur
 

What's hot (20)

initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミングJavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
入門core.async
入門core.async入門core.async
入門core.async
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Plan 9のお話
Plan 9のお話Plan 9のお話
Plan 9のお話
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
Lisperの見る世界
Lisperの見る世界Lisperの見る世界
Lisperの見る世界
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
 
「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!「おうちクラウド」が今熱い!
「おうちクラウド」が今熱い!
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理
 

Viewers also liked

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
 

Viewers also liked (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]
 

Similar to プログラミング言語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
 

Similar to プログラミング言語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)
 

More from 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
 
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
 

More from sohta (8)

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)
 
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のニャンパスでの活用事例