SlideShare a Scribd company logo
で、次は何がくるの?
で、次は何がくるの?

kawasima
Technology
Trends
Post Javaの時代
Java8?

Scala?

NodeJS?
Ruby?

Kotlin?
Groovy?

Ceylon?

Go?
Different cars, same road
注) Rich Hickeyのスライドに大いに煽り成分を加えてあります。要は表面的な違いしかないってことです。
●

●

●

●

多重継承もMix-inもインタフェースも大した違
いなんてねーよ
動的型付けだろうが、静的型付けだろうが、
ダメプログラマはゴミコードを書く
文末セミコロンもインデントスタイルもブ
ロックも、個人の趣味でしかないって
クロージャもインナークラスも大差ないっ
て。Java8ラムダに何期待してんの?
http://wiki.jvmlangsummit.com/images/a/ab/HickeyJVMSummit2009.pdf
マルチコア と クラウド
たくさんあるコンピュータを
いかに使いこなすか?
Matz ( https://engineer.type.mag.jp/article/matz )
Concurrencyへの対応
シンプルさにどれだけ配慮できているかが重要
●

●

レースコンディションは複雑さに起因して発
生するものである。
状態とふるまいとアイデンティティと時間軸
が組み合わさる、現在のオブジェクト指向は
暗黙的な複雑さの源泉である。
シンプルとは
One role
One task
One concept
One dimension

https://github.com/richhickey/slides/blob/master/simplicitymatters.pdf
シンプルとイージーは違う
イージーとは、「少ない手数でやりたいことを
実現する」ということ。
–

apt-get / yum

–

gem install

https://github.com/richhickey/slides/blob/master/simplicitymatters.pdf
時代はイミュータブル
Concurrency and Parallelism

Versionable API

Git

Immutable Infrastructure
Immutable database
イミュータブル is シンプル

これがマルチコア / クラウド 時代には
最も重要な概念になってくる
イミュータブル時代の
プログラミング言語
Clojure
Clojure is simple

Clojure

Scala
http://java.dzone.com/articles/my-scala-vs-clojure-impression
Clojure is LISP
シンプルさを追求したがゆえのLISPという選択肢

プログラム = データ
(同図像性)
関数型で状態をもたない
LISP or Not Lisp

世の中の言語は2種類しかない。
LISPか、LISPでないか
Clojure runs on JVM
SIerが気にするJavaとの接続性
(javax.swing.JOptionPane/showMessageDialog nil “Hello World”)

http://clojure.org/getting_started
Clojure is イミュータブル
コレクションもすべてイミュータブル
(def my-map {:fred “ethel”})
(assoc my-map :ricky “lucy”)
=> {:ricky “lucy”, :fred “ethel”}
my-map
=> {:fred “ethel”}
他言語のイミュータブルへの取組み
どっちもできるよ。
var ミュータブル
val イミュータブル
使う側が選べてほら便利!
freezeメソッド呼べばイミュータブルにできるか
らー
irb(main):001:0> map = {:a => 1, :b => {:c => 3}}.freeze
=> {:a=>1, :b=>{:c=>3}}
irb(main):002:0> map[:b][:c] = "A"
=> "A"
irb(main):003:0> map
=> {:a=>1, :b=>{:c=>"A"}}
SIerで使いにくい多様なイミュータブル
非同期アクセスされる可能性のあるコレクションは
イミュータブルな型を使うこと。
イミュータブルなコレクションとは、List, Stream,
Vector, Stack, Queue, Range, HashMap, TreeSet,
TreeMap, …である。
よくわからなければ、Vectorを使うこと。

こんなコーディング規約ができることが想像される。
思想のレベルでイミュータブル
そもそもイミュータブルな型しかない
ミュータブルな感じで使いたいときは、
参照(ref)を作って、参照先の値を切り替える
イミュータブルなモデル
アイデンティティと状態の分離
Epochal Time Model
Pure Function
F

F

1984

State

2000

State

2014

State

Identity

Value
http://wiki.jvmlangsummit.com/images/a/ab/HickeyJVMSummit2009.pdf
性能面での配慮
コレクションに要素追加するたび、新しいコ
レクションが作られていたら、メモリ喰うし
遅いんじゃないの?
Bit-Partitioned Hash Tries
変更のあった部分木だけ新たに作り、それ以外は共有する
変更も削除も検索もO(1)
5

0

1

2

7

3

4

4

5

6

http://wiki.jvmlangsummit.com/images/a/ab/HickeyJVMSummit2009.pdf
Refsモデル
状態はイミュータブルなデータへの参照として扱う
value
@foo

:b

“ethel”

:c

42
17

:e

foo

“fred”

:d

Identity

:a

6

http://wiki.jvmlangsummit.com/images/a/ab/HickeyJVMSummit2009.pdf
STM
参照の切り替えはロックなしに実行される
Ref

v0

v2

v1

Transaction
v0

F

V1'

Ref copy

v0

value

Commit
成功

v0でないので
Commit
失敗
F

V1'

v1

F

V2'
Clojureのはじめかた
LightTable

いま世界でもっともナウいエディタ
イミュータブル時代の
Webフレームワーク
Darzana

https://github.com/kawasima/darzana/
Webサイト運用の課題
●

●

●

Viewテンプレートを書き換えるだけなのに、
サーバ再起動が必要になる。(Java)
ちょっとした変更でも開発者の手が必要。
サイト運用者で変更可能にしたいけど、リテ
ラシー的にバージョン管理ができない問題
特長
●

ViewもControllerも再起動いらずのデプロイ
–

●

サイト運用者が簡単に安全にViewや
Controllerを編集できる
–

●

それでいて性能はJavaと同等

それでいて、熟練プログラマにもやさしい

変更は自動的にGitでバージョン管理される
–

それでいて、コマンドラインでのgit操作も可能
API First
●

データソースはWeb APIを前提とする。
–

イミュータビリティが保ちやすい
●

–

複数バージョンを使いわける

ナウいから
Architecture
Jetty

Tomcat

HttpKit

Ring
Compojure

Handlebars Template

API Executor

Darzana router

API

Redis
Template
●

テンプレートにはHandlebarsテンプレートを
利用する。
–

将来的にクライアントサイドでもレンダリングが
可能に!
Router
●

いわゆるコントローラ

●

URLに対応してコンポーネントブロックを呼び出す
–

API実行 (非同期並列実行が可能)

–

テンプレートレンダリング

–

セッション格納

–

エラーハンドリング

–

A/B testing
Darzanaにおけるアプリケーションの変更
●

必ずブランチを作って編集
–

●

当然ブラウザから操作可能

動作確認後、masterにマージする
–

当然ブラウザから操作可能
Demo
試してみるには
Dockerのイメージあります
–

JavaもClojureもDarzanaもセットアップ済み

–

VMWareがあれば、会社のマシンでもすぐに試せ
る。

–

http://index.docker.io/ で「darzana」で検索!
さあ次世代の開発を体験してみよう!

More Related Content

PDF
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
 
PDF
continuatioN Linking
Kouji Matsui
 
PDF
C#でわかる こわくないMonad
Kouji Matsui
 
PPTX
開発チームにKotlinを導入した話
Hiroshi Kikuchi
 
PDF
Async deepdive before de:code
Kouji Matsui
 
PDF
TypeScript 独習会
Masahiro Wakame
 
PDF
KotlinでWebアプリ開発
Ryo Nakagawa
 
PPTX
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
 
渋谷JVM#1 Immutable時代のプログラミング言語 Clojure
Yoshitaka Kawashima
 
continuatioN Linking
Kouji Matsui
 
C#でわかる こわくないMonad
Kouji Matsui
 
開発チームにKotlinを導入した話
Hiroshi Kikuchi
 
Async deepdive before de:code
Kouji Matsui
 
TypeScript 独習会
Masahiro Wakame
 
KotlinでWebアプリ開発
Ryo Nakagawa
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
 

What's hot (20)

PPTX
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
 
PDF
Shinyユーザのための非同期プログラミング入門
hoxo_m
 
PDF
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
 
PDF
簡単!Groovy入門
Lee Choong Geun
 
PDF
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi Okada
 
PDF
Kotlin as an AltJS
Shinya Mochida
 
PDF
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
 
PDF
「プログラミングGroovy」入門(公開用)
orange clover
 
PDF
RvizPlugin作成入門
Sho Takahashi
 
PPTX
Guide to GraalVM (JJUG CCC 2019 Fall)
Koichi Sakata
 
PDF
nomlab_okayamaruby_slide
nomlab
 
PDF
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
 
PDF
Thread affinity and CPS
Kouji Matsui
 
PPTX
Introduction to GraalVM
Koichi Sakata
 
PDF
3分で作る Kotlin Friendly な API
Hiroshi Kikuchi
 
PDF
de:code報告
Kouji Matsui
 
PPTX
TypeScript + Express
kamiyam .
 
PDF
Riverpodでテストを書こう
Shinnosuke Tokuda
 
PDF
nomlab_okayamaruby_subslide
nomlab
 
PDF
Rubocopとの付き合い方
Yasutomo Uemori
 
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
 
Shinyユーザのための非同期プログラミング入門
hoxo_m
 
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
 
簡単!Groovy入門
Lee Choong Geun
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi Okada
 
Kotlin as an AltJS
Shinya Mochida
 
式の体を成して無い式を式の体を成すように式と式木で何とかする式
Kouji Matsui
 
「プログラミングGroovy」入門(公開用)
orange clover
 
RvizPlugin作成入門
Sho Takahashi
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Koichi Sakata
 
nomlab_okayamaruby_slide
nomlab
 
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
 
Thread affinity and CPS
Kouji Matsui
 
Introduction to GraalVM
Koichi Sakata
 
3分で作る Kotlin Friendly な API
Hiroshi Kikuchi
 
de:code報告
Kouji Matsui
 
TypeScript + Express
kamiyam .
 
Riverpodでテストを書こう
Shinnosuke Tokuda
 
nomlab_okayamaruby_subslide
nomlab
 
Rubocopとの付き合い方
Yasutomo Uemori
 
Ad

Viewers also liked (20)

PDF
エスイーのしごと
Yoshitaka Kawashima
 
PDF
元気玉的 分散テスト 実行システム TestStreamer
Yoshitaka Kawashima
 
PDF
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
 
PDF
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
 
PDF
キメるClojure
Yoshitaka Kawashima
 
PDF
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima
 
PDF
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
 
PDF
Clojureによるログ収集と解析
Yoshitaka Kawashima
 
PDF
既婚プログラマの時間捻出術
Yoshitaka Kawashima
 
PDF
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
PDF
Antifragile Clojure
Yoshitaka Kawashima
 
PDF
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
 
PDF
イマドキのExcelスクショの撮り方
Yoshitaka Kawashima
 
PDF
週刊Webサイトのアーキテクチャ
Yoshitaka Kawashima
 
PDF
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
PDF
Boilerplate vs Magic
Yoshitaka Kawashima
 
PDF
Seasar conference 2015 sa-compojure
Yoshitaka Kawashima
 
PDF
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
 
PDF
SIerもはじめる わたしたちのDevOps #jjug_ccc
Mizuki Ugajin
 
PDF
DB設計でこだわりたい三つの要素
Takahiro YAMADA
 
エスイーのしごと
Yoshitaka Kawashima
 
元気玉的 分散テスト 実行システム TestStreamer
Yoshitaka Kawashima
 
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
 
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
 
キメるClojure
Yoshitaka Kawashima
 
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima
 
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
 
Clojureによるログ収集と解析
Yoshitaka Kawashima
 
既婚プログラマの時間捻出術
Yoshitaka Kawashima
 
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
Antifragile Clojure
Yoshitaka Kawashima
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
 
イマドキのExcelスクショの撮り方
Yoshitaka Kawashima
 
週刊Webサイトのアーキテクチャ
Yoshitaka Kawashima
 
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
 
Boilerplate vs Magic
Yoshitaka Kawashima
 
Seasar conference 2015 sa-compojure
Yoshitaka Kawashima
 
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
 
SIerもはじめる わたしたちのDevOps #jjug_ccc
Mizuki Ugajin
 
DB設計でこだわりたい三つの要素
Takahiro YAMADA
 
Ad

Similar to で、次は何がくるの? - 第2回 TIS Matsuri (20)

KEY
Inside frogc in Dart
Goro Fuji
 
PDF
アドテクを支える技術 〜1日40億リクエストを捌くには〜
MicroAd, Inc.(Engineer)
 
PDF
Javascript を使ってみよう!!
誠 小林
 
PPTX
ScratchとAzure FunctionsのBlocklyな関係
Masuda Tomoaki
 
PDF
Sinatra軽量Web開発 - LOUPE Study #1
Takuya Mukohira
 
PPTX
Svelte LT
Shuta Tsuzuki
 
PPT
JavaEdge第3回ライブセッション
Yoichiro Tanaka
 
PDF
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
Kei Nakazawa
 
PDF
Unleash The Future
dynamis
 
PDF
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
 
PPTX
Ietf95 capport
Mariko Kobayashi
 
PDF
八子クラウド座談会 in 広島 事前配布資料 20190727
知礼 八子
 
PDF
クリーンアーキテクチャ学んでみた
Isao Ebisujima
 
PDF
Opa - Cloud Language
Tozo Tanaka
 
PDF
Kotlinのwebフレームワーク探訪
豊明 尾古
 
PPTX
The evolution of c#
leverages_event
 
PPTX
Rubyと俺達の生存戦略 #kana01
Yoshinori Kawasaki
 
PDF
お安く、楽にWEBアプリを支える技術
KeitoTakeda
 
PDF
みんなの個性を見守る地域コミュニティ的プログラミングクラブ
K. Toga.
 
PDF
Docker基礎+docker0.9, 0.10概要
Kazuyuki Mori
 
Inside frogc in Dart
Goro Fuji
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
MicroAd, Inc.(Engineer)
 
Javascript を使ってみよう!!
誠 小林
 
ScratchとAzure FunctionsのBlocklyな関係
Masuda Tomoaki
 
Sinatra軽量Web開発 - LOUPE Study #1
Takuya Mukohira
 
Svelte LT
Shuta Tsuzuki
 
JavaEdge第3回ライブセッション
Yoichiro Tanaka
 
15.06.27 実録 ソフトウェア開発者が FPGAを独習した最初の3歩@RTLを語る会(9)
Kei Nakazawa
 
Unleash The Future
dynamis
 
Pythonおじさんのweb2py挑戦記
Yoshiyuki Nakamura
 
Ietf95 capport
Mariko Kobayashi
 
八子クラウド座談会 in 広島 事前配布資料 20190727
知礼 八子
 
クリーンアーキテクチャ学んでみた
Isao Ebisujima
 
Opa - Cloud Language
Tozo Tanaka
 
Kotlinのwebフレームワーク探訪
豊明 尾古
 
The evolution of c#
leverages_event
 
Rubyと俺達の生存戦略 #kana01
Yoshinori Kawasaki
 
お安く、楽にWEBアプリを支える技術
KeitoTakeda
 
みんなの個性を見守る地域コミュニティ的プログラミングクラブ
K. Toga.
 
Docker基礎+docker0.9, 0.10概要
Kazuyuki Mori
 

More from Yoshitaka Kawashima (19)

PDF
Grokking Simplicity探訪
Yoshitaka Kawashima
 
PDF
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
 
PDF
Are Design Patterns Dead?
Yoshitaka Kawashima
 
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
 
PDF
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
 
PDF
Tackling Complexity
Yoshitaka Kawashima
 
PDF
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
PDF
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
 
PDF
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
 
PDF
本番障害に至る病
Yoshitaka Kawashima
 
PDF
システムダウンのひみつ
Yoshitaka Kawashima
 
PDF
Mavenの真実とウソ
Yoshitaka Kawashima
 
PDF
アンチフラジャイルの世界
Yoshitaka Kawashima
 
PDF
Atomic Architecture
Yoshitaka Kawashima
 
PDF
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
 
PDF
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
 
PDF
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
 
PDF
How to find tech books
Yoshitaka Kawashima
 
PDF
Antifragile Java - Java Day Tokyo 2017 D1-E1
Yoshitaka Kawashima
 
Grokking Simplicity探訪
Yoshitaka Kawashima
 
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
 
Are Design Patterns Dead?
Yoshitaka Kawashima
 
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
 
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
 
Tackling Complexity
Yoshitaka Kawashima
 
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
 
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
 
本番障害に至る病
Yoshitaka Kawashima
 
システムダウンのひみつ
Yoshitaka Kawashima
 
Mavenの真実とウソ
Yoshitaka Kawashima
 
アンチフラジャイルの世界
Yoshitaka Kawashima
 
Atomic Architecture
Yoshitaka Kawashima
 
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
 
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
 
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
 
How to find tech books
Yoshitaka Kawashima
 
Antifragile Java - Java Day Tokyo 2017 D1-E1
Yoshitaka Kawashima
 

Recently uploaded (10)

PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PPTX
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
VMUG Japan book vsan 20250515 CPU/Memory vSAN
Kazuhiro Sota
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
2025_7_25_吉祥寺_設計ナイト_ADR運用におけるデータ利活用の考え方.pptx
ssuserfcafd1
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
第三世代 ウェザーステーションキット v3 ー WSC3-L 日本語カタログ
CRI Japan, Inc.
 

で、次は何がくるの? - 第2回 TIS Matsuri