Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaな会社のScalaへの取り組み
Search
株式会社ヌーラボ
PRO
August 01, 2015
Technology
2
1.6k
Javaな会社のScalaへの取り組み
Presentation slides at
http://summit.scala-kansai.org/
株式会社ヌーラボ
PRO
August 01, 2015
Tweet
Share
More Decks by 株式会社ヌーラボ
See All by 株式会社ヌーラボ
ヌーラボ‧ウェブサイト課の ⼀年間の取り組みをふり返る
nulabinc
PRO
1
900
今からでも入れる re:Inventがあるんですか!?
nulabinc
PRO
0
340
ライティングチームだからこそできた、「どことでも繋がれるチーム」づくりの結果 / Technical Writing Meetup vol.38
nulabinc
PRO
0
77
4つの基本的な組織形態を知る ~ミンツバーグの組織論 7つの類型と力学、そしてその先へ~ より GWD in Nagoya
nulabinc
PRO
2
200
必要なのは客観性。組織変革をもたらす、より良い「対話」を生み出すための活動 #scrummikawa
nulabinc
PRO
3
1.3k
悪い実装例から学ぶ ウェブアクセシビリティ改善のヒント
nulabinc
PRO
1
750
ヌーラボカスタマーサクセスチームのBacklog活用
nulabinc
PRO
0
380
言葉で「ヌーラボらしさ」をどう届ける? グローバルチームでコラボレーションする大切さ
nulabinc
PRO
1
140
タスクの可視化は争いをなくす!? 夏休みを乗り切る 宿題プロジェクトマネジメント
nulabinc
PRO
2
310
Other Decks in Technology
See All in Technology
依存パッケージの更新はコツコツが勝つコツ! / phpcon_nagoya2025
blue_goheimochi
3
220
開発組織を進化させる!AWSで実践するチームトポロジー
iwamot
2
410
データベースの負荷を紐解く/untangle-the-database-load
emiki
2
520
クラウド食堂とは?
hiyanger
0
120
EDRの検知の仕組みと検知回避について
chayakonanaika
12
5k
データエンジニアリング領域におけるDuckDBのユースケース
chanyou0311
9
2.2k
Ruby on Railsで持続可能な開発を行うために取り組んでいること
am1157154
3
160
AI自体のOps 〜LLMアプリの運用、AWSサービスとOSSの使い分け〜
minorun365
PRO
3
250
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
8
3.8k
【内製開発Summit 2025】イオンスマートテクノロジーの内製化組織の作り方/In-house-development-summit-AST
aeonpeople
2
700
手を動かしてレベルアップしよう!
maruto
0
220
What's new in Go 1.24?
ciarana
1
110
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
How to Ace a Technical Interview
jacobian
276
23k
Music & Morning Musume
bryan
46
6.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Practical Orchestrator
shlominoach
186
10k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.2k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
A Philosophy of Restraint
colly
203
16k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Transcript
+BWBͳձࣾͷ 4DBMBͷऔΓΈ גࣜձࣾψʔϥϘɹ០ढ़و
C • – ( • )
Java $ Scala $ $
• Scala $ • $ • Scala
None
• 2004$Backlog$(Java/Seasar/WebWork)$ • 2008$Cacoo$(Java/Seasar/Cubby)$
We— Java
8IZ+BWB • ੩తܕ͚ – ։ൃޮ – อकੑ • ߴͳ࣮ߦ࣮ߦޮ – εϨουϞσϧ – αʔόʔͷ͕গͳͯ͘ࡁΉ
• ࣌ ޮͷྑ͍ϑϨʔϜϫʔΫ – 4FBTBS8FC8PSL – 4%BP4+%#$
+BWBUP4DBMB • 4FBTBSͷ։ൃ͕ࢭ·Δ • ྡͷࣳੜͰ3P3͕Γ্͕Γ • +BWBͳ͔ͳ͔ग़ͳ͍ • )PUSFMPBEJOHΛ͖ͪΜͱಈ͔͢ͷେม – ίʔυमਖ਼ͷͨͼʹ5PNDBU࠶ىಈ
• +BWBͷସΛ୳ͨ͠ʹ
8IZ4DBMB • ݎ࿚ੑ – 0QUJPO – Πϛϡʔλϒϧ WBM ෆมίϨΫγϣϯ
– ϥΠϒϥϦ'80QUJPOΠϛϡʔλϒϧલఏ • ։ൃޮ – ίϨΫγϣϯૢ࡞ – $BTFΫϥε – ύλʔϯϚον • +7.ݴޠ – +BWBࢿ࢈ͷ༗ޮ׆༻ – +7.Ͱͷαʔόʔӡ༻ܦݧ
case$class $case$class$User(id:$Long,$name:$String,$isAdmin:$Boolean)$ $$val$newUser$=$User(1L,$“agata”,$false)$ $$val$updatedUser$=$newUser.copy(name$=$“agaMno”)$ • ߦͰ+BWBͷߦ͙Β͍ • σϑΥϧτͰಡΈऔΓઐ༻ϓϩύςΟ༩ • FRVBMTIBTI$PEFUP4USJOHDPQZϝιουੜ
• DPQZͰݩͷΦϒδΣΫτΛഁյͤͣʹίϐʔ • ύλʔϯϚονʹద༻Մೳ
case$class$AddAccountCommand(name:$String,$password:$String,$email:$String…)$ case$class$UpdateAccountCommand(id:$Long,$name:$String,$email:$String$…)$ $ object$AccountService${$ $def$add(command:$AddAccountCommand):$Account$=$…$ $def$update(command:$UpdateAccountCommand):$Account$=$…$ }$ $ ublic$class$Account${$ $$private$Long$id;$
$$private$String$name;$ $$private$String$password;$ $$private$String$email;$ $$…$ }$ public$class$AccountService${$ $public$void$add(Account$account)${$…$}$ $public$void$update(Account$account)${$…$}$ }$ $ Scala Java
Play2 • $ – DB MigraVon $ – Hot$Reloading$ • $
– Routes$ – View/Template$ – build.scala$
Play$2 develop feature,X 5.sql 5.sql 6.sql 4.sql feature,Y ! #$```$!Ups$
alter$table$post$add$show_link_meta$boolean$not$null$default$true;$ $ #$```$!Downs$ alter$table$post$drop$show_link_meta;$
• 2004$Backlog$(Java/Seasar/WebWork)$ • 2008$Cacoo$(Java/Seasar/Cubby)$ • 2011$Typetalk$(Scala/Play$2)$ • 2013$Backlog$API$v2$(Scala/Play$2)$ • 013$Nulab$Account$(Java/Spring)$
• 2014$ (Scala/Play$2)$ • 014$Nulab$Services$Status(Go)$ • 2015$Backlog$Redmine$Importer(Scala/Akka)
Typetalk ( ) Web/API$ (Scala/Play$2) Streaming$ (Node.js) DB iOS Android
Redis Redis Pub/Sub Socket.IO
API Web (JS) API$ $ OAuth$2$ object$TopicController$exnteds$Controller${$ $$self:$Auth$ $$//$API$Methods$ }$
object$TopicWebController$extends$TopicController$with$WebAuth$ object$TopicAPIController$extends$TopicController$with$APIAuth$
Backlog ( ) Web $ API$ (XML`RPC)$ $(Java/Seasar) API$v2(REST/JSON)$ (Scala/Play$2)
API DB iOS Android DB $
Backlog$APIv2 DB Client Controller$ (Play$2)$ ApplicaVo nService Repository$ PresentaVon$ ApplicaVon$
Domain$ Infrastructure$ Service Value$ Object EnVty SpecificaVon Dao$ Record$
4DBMBΛࣾͰ ීٴͤ͞ΔͨΊͷ औΓΈ
ࣾΞϓϦΛ4DBMBͰ࡞ • $ • $ • $ • Backlog $
• YouTube/SoundCloud/Vimeo Mix $ • Scala
ࣾษڧձ
͓ۚͰղܾ
͓͢͢Ίಋೖϓϥϯ • جຊߏจ֤ࣗݸਓֶशͰԡ͓͑ͯ͘͞ • ·ͣࣾΞϓϦͳͲɺখ͞ΊͷΞϓϦΛ ࠾༻ͯ͠ΈΔɻ • ࣾษڧձॏཁ • ࢥ͍࣮ͬͯҊ݅ʹಋೖ
– ࠷ॳϕλʔ+BWB͔ΒͰ0, – ׳Ε͖ͯͨΒͩΜͩΜ4DBMBؔܕΒ͘͠
• Java Scala $ – cala Scala $ • Scala
$ – $
None