Submit Search
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
44 likes
17,109 views
Kazuhiro Sera
http://ichigayageek.connpass.com/event/18810/
Technology
Read more
1 of 41
Download now
Downloaded 34 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
More Related Content
PDF
Scalaと過ごした5ヶ月間
Haruki Okada
PDF
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
PDF
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
PDF
[Scalamatsuri2016]あ、社内コミュニティ
hirotakanosato
PDF
Contributing to Scala OSS from East Asia #ScalaMatsuri
Kazuhiro Sera
PDF
頑張りすぎないScala
takezoe
PDF
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
PDF
Scala警察のすすめ
takezoe
Scalaと過ごした5ヶ月間
Haruki Okada
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
[Scalamatsuri2016]あ、社内コミュニティ
hirotakanosato
Contributing to Scala OSS from East Asia #ScalaMatsuri
Kazuhiro Sera
頑張りすぎないScala
takezoe
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Kazuhiro Sera
Scala警察のすすめ
takezoe
What's hot
(20)
KEY
PlayFramework1.x基礎編
Asami Abe
PDF
Seasarプロジェクト徹底攻略
takezoe
PDF
Scala界隈の近況
takezoe
KEY
Scalaはじめました!
Asami Abe
PDF
Scala.js触ってみた
Asami Abe
PDF
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
PDF
Scalaの現状と今後
Kota Mizushima
PDF
Scalaでのプログラム開発
Kota Mizushima
PPTX
Do you like scala
Yuto Suzuki
PPTX
プロダクトにおけるScala
Yuto Suzuki
PPTX
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
PDF
Scalaの現状と課題
Kota Mizushima
PDF
Introduction of SQL Anti-pattern at Phpcon Hokkaido
Kenta Kawai
PDF
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
PDF
株式会社ドワンゴにおけるScala教育の現状
Kota Mizushima
PDF
ScalaでBacklogの通知bot作ったで
Asami Abe
PPTX
Oracleがnode.jsをやり始めたというのだが!
Hiroshi Hayakawa
PDF
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
PDF
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
Shinya Sugiyama
PDF
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
PlayFramework1.x基礎編
Asami Abe
Seasarプロジェクト徹底攻略
takezoe
Scala界隈の近況
takezoe
Scalaはじめました!
Asami Abe
Scala.js触ってみた
Asami Abe
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Asami Abe
Scalaの現状と今後
Kota Mizushima
Scalaでのプログラム開発
Kota Mizushima
Do you like scala
Yuto Suzuki
プロダクトにおけるScala
Yuto Suzuki
おっさんES6/ES2015,React.jsを学ぶ
dcubeio
Scalaの現状と課題
Kota Mizushima
Introduction of SQL Anti-pattern at Phpcon Hokkaido
Kenta Kawai
TDD BootCamp in JJUG CCC - レガシーコード対策編 -
Shuji Watanabe
株式会社ドワンゴにおけるScala教育の現状
Kota Mizushima
ScalaでBacklogの通知bot作ったで
Asami Abe
Oracleがnode.jsをやり始めたというのだが!
Hiroshi Hayakawa
The Essence of Using Ruby on Rails in Corporations
Koichiro Ohba
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
Shinya Sugiyama
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
Ad
Similar to Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
(20)
PDF
BOF1-Scala02.pdf
Hiroshi Ono
PDF
BOF1-Scala02.pdf
Hiroshi Ono
PDF
BOF1-Scala02.pdf
Hiroshi Ono
PPT
第1回java実習(helloworld)2011
デジタルシープラーニング
PDF
Object-Funcational Analysis and design
Tomoharu ASAMI
PDF
プログラミング言語Scala
TanUkkii
PDF
Scalaでプログラムを作りました
Tomoharu ASAMI
PDF
ATN No.2 Scala事始め
AdvancedTechNight
PDF
Scala勉強会_2014_11_18
Shuya Tsukamoto
PDF
早稲田大学授業 - Java Programing上級
Ippei Arita
PPTX
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
KEY
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
PDF
Scalaプログラミング・マニアックス
Tomoharu ASAMI
PPTX
ゼロから始めるScala文法 (再)
Suguru Hamazaki
PDF
Scala conf2013
Takafumi Ikeda
PPTX
明日から業務で使うScala
martin_lover_ca
PDF
Scala超入門 - 2014/12/13 Scala関西勉強会
Asami Abe
PDF
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
KEY
Beginners Scala in FAN 20121009
Taisuke Shiratori
PDF
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
BOF1-Scala02.pdf
Hiroshi Ono
BOF1-Scala02.pdf
Hiroshi Ono
BOF1-Scala02.pdf
Hiroshi Ono
第1回java実習(helloworld)2011
デジタルシープラーニング
Object-Funcational Analysis and design
Tomoharu ASAMI
プログラミング言語Scala
TanUkkii
Scalaでプログラムを作りました
Tomoharu ASAMI
ATN No.2 Scala事始め
AdvancedTechNight
Scala勉強会_2014_11_18
Shuya Tsukamoto
早稲田大学授業 - Java Programing上級
Ippei Arita
Scalatronで楽しく学ぶ関数型プログラミング
Jun Saito
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
Scalaプログラミング・マニアックス
Tomoharu ASAMI
ゼロから始めるScala文法 (再)
Suguru Hamazaki
Scala conf2013
Takafumi Ikeda
明日から業務で使うScala
martin_lover_ca
Scala超入門 - 2014/12/13 Scala関西勉強会
Asami Abe
Scalaで萌える関数型プログラミング[1.1.RC1]
Ra Zon
Beginners Scala in FAN 20121009
Taisuke Shiratori
Scalaで萌える関数型プログラミング[完全版]
Ra Zon
Ad
More from Kazuhiro Sera
(20)
PDF
All I learned while working on a Scala OSS project for over six years #ScalaM...
Kazuhiro Sera
PDF
Skinny Meetup Tokyo 2 日本語スライド
Kazuhiro Sera
PDF
Skinny 2 Update
Kazuhiro Sera
PDF
Future on Servlet #scala_ks
Kazuhiro Sera
PDF
Servlet と Future の関わり方 #scala_ks
Kazuhiro Sera
PDF
マイクロサービス運用の所感 #m3dev
Kazuhiro Sera
PDF
Scala が支える医療系ウェブサービス #jissenscala
Kazuhiro Sera
PDF
Scala on Rails #rakutentech
Kazuhiro Sera
PDF
Solid And Sustainable Development in Scala
Kazuhiro Sera
PDF
Beginning Scala with Skinny Framework #jjug_ccc
Kazuhiro Sera
PDF
Skinny Framework 1.0.0
Kazuhiro Sera
PDF
Skinny Framework Progress Situation
Kazuhiro Sera
PDF
Skinny Framework 進捗どうですか? #fud_scala
Kazuhiro Sera
PDF
テストの運用について #m3dev
Kazuhiro Sera
PDF
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
Kazuhiro Sera
PDF
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
Kazuhiro Sera
PDF
テストを書くのが嫌いな君へ #m3dev
Kazuhiro Sera
PDF
Skinny Controllers, Skinny Models
Kazuhiro Sera
PDF
ScalikeJDBC Tutorial for Beginners
Kazuhiro Sera
PDF
A Test Code Generator for RSpec Users
Kazuhiro Sera
All I learned while working on a Scala OSS project for over six years #ScalaM...
Kazuhiro Sera
Skinny Meetup Tokyo 2 日本語スライド
Kazuhiro Sera
Skinny 2 Update
Kazuhiro Sera
Future on Servlet #scala_ks
Kazuhiro Sera
Servlet と Future の関わり方 #scala_ks
Kazuhiro Sera
マイクロサービス運用の所感 #m3dev
Kazuhiro Sera
Scala が支える医療系ウェブサービス #jissenscala
Kazuhiro Sera
Scala on Rails #rakutentech
Kazuhiro Sera
Solid And Sustainable Development in Scala
Kazuhiro Sera
Beginning Scala with Skinny Framework #jjug_ccc
Kazuhiro Sera
Skinny Framework 1.0.0
Kazuhiro Sera
Skinny Framework Progress Situation
Kazuhiro Sera
Skinny Framework 進捗どうですか? #fud_scala
Kazuhiro Sera
テストの運用について #m3dev
Kazuhiro Sera
歌舞伎座.tech 1 LT - ScalikeJDBC Async & Skinny Framework #kbkz_tech
Kazuhiro Sera
Kabukiza.tech 1 LT - ScalikeJDBC-Async & Skinny Framework #kbkz_tech
Kazuhiro Sera
テストを書くのが嫌いな君へ #m3dev
Kazuhiro Sera
Skinny Controllers, Skinny Models
Kazuhiro Sera
ScalikeJDBC Tutorial for Beginners
Kazuhiro Sera
A Test Code Generator for RSpec Users
Kazuhiro Sera
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
1.
Java エンジニアチームが始めやすい Scala コーディングスタイル 瀬良
和弘 @seratch_ja #ichigayageek
2.
自己紹介 • Scala を初めて触ったのは
2009 年 • ScalikeJDBC プロジェクトリード(2011∼) • Skinny Framework プロジェクトリード(2013∼) • Scalatra、json4s、Scalate メンテナ
3.
はじめに • この発表の内容は「Java を得意とする
Scala 初学者の プログラマ」を想定してそうした方々が馴染みやすそ うな一つのスタイルを紹介するものです • 既に世の中には様々な Scala のコーディングガイドが ありますので、そちらもご参照ください • Scala Style Guide • Databricks Scala Coding Style Guide • PayPal Scala Style Guidelines • Twitter's Effective Scala (ちょっと古い)
4.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
5.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
6.
まず、私が関わる OSS の宣伝を少しだけ.. •
ScalikeJDBC - シンプルな DB アクセスライブラリ、 GitHub スター数では Slick に次いで 2 位 • Skinny Framework - Rails に強く影響を受けた Web フ レームワークを中心としたプロジェクト、Scaffolding をはじめ必要なものは一通り っている • Skinny Micro New! - Skinny Framework 2 のコア部分を 切り出したマイクロフレームワーク、Sinatra 風の DSL で簡単に Scala で Web アプリを作りことができる • Scalatra、json4s、Scalate も PR 待っています
7.
Skinny Micro はこれだけで動く
8.
Servlet だから Future
使いづらいを過去のものに
9.
ぜひお試しください(気に入ったら star を)
10.
それでは、本題へ・・
11.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
12.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
13.
重厚な設計を忘れて、まずシンプルに書き始める • 特に Java
の人はあえて Scala を静的型を持つ Ruby と 捉えて、バランス感覚を養うとよい • case class を value object の入れ物としてまず慣れる (Java beans より楽!→パターンマッチの理解へ) • 単純な結果のキャッシュはメソッド定義の代わりに lazy val を使うだけで済むことも多い • Scala は言語機能だけでテスタビリティを保てる • val で定義したメンバも override できる • 必ずしも DI の仕組みに頼る必要はない
14.
サンプル例
15.
サンプル例
16.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
17.
Java プログラマらしい整然としたプロジェクト • sealed
を使うとき以外は 1 ファイル 1 モジュール (class/companion or trait) • public なメンバ・メソッドは型を明示する • 適当にトップレベルに放り込まず package 階層を持つ • 暗黙の型変換を使った既存 class 拡張を乱用しない(デ フォルトで有効になる使い方を安易にやらない) • 「とりあえず interface 定義」をやるなら中途半端にや らない(実装を適切に分離/隠 する)
18.
型の明示に IntelliJ IDEA
が便利
19.
型の明示に IntelliJ IDEA
が便利
20.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
21.
文でなく式であることを意識して if/else も使う •
再代入不可で var を書かない制約はさほど厳しくない • メソッド・コードブロックが返すべき型を明示する • ローカル変数でもコードブロックをうまく使う • 返すべき型の値を返す if/else 式やパターンマッチ (early return しない、else のない if を書かない) • try/catch でも値を返せる特性を活かす • Option(..).map(..).getOrElse(..) というイディオム • チェインしすぎず、適度に名前をつける
22.
サンプル例
23.
サンプル例
24.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
25.
例外を否定するかどうかはスタンスをとる • Scala は
Java と違ってチェック例外の仕組みがない (理由:Open-Closed Principle に従う) • 例外を保持しうるデータ型:Try、Either、Future • 例外を否定した API と決めたなら徹底的にやる(Try/ Either/Future を返すメソッドが例外投げるのは最悪) • 常に標準のデータ型である必要はなく、成功・失敗を 反映した結果オブジェクトを返してもよい
26.
サンプル例
27.
サンプル例
28.
サンプル例
29.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
30.
Future はスレッドプールを強く意識する • 標準で提供される
ExecutionContext.global は一つの ForkJoinPool が裏で動いている • 用途ごとにプールを分けた方がよければ implicit で渡す ExecutionContext を自前で作って使い分ける • Future と同期処理を包んだものを混ぜるときはただ型 を合わせるだけでなく、挙動を理解し想像する • Future の中の同期処理がスレッドプールを浪費する リスクはないか、そのプール設定は妥当か
31.
サンプル例
32.
サンプル例
33.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
34.
Java モジュールの知識を活かす • 目的を達成するために
Java の既存コードを組み合わせ ることは何ら問題ない • 手元の既存コードの流用だけでなく JDBC など標準 規格、主要サービス提供 Java SDK の利用 • Java っぽくなるが、局所的に使えばよい(完全に ラップするのはそれなりにコストがかかる) • バイナリ互換問題から解放されるメリット • Collection API 変換は JavaConversions ではなく JavaConverters を使う(asScala で明示的変換)
35.
サンプル例
36.
サンプル例
37.
サンプル例
38.
アジェンダ • まず、私が関わる OSS
の宣伝を少しだけ.. • 重厚な設計を忘れて、まずシンプルに書き始める • Java プログラマらしい整然としたプロジェクト • 文でなく式であることを意識して if/else も使う • 例外を否定するかどうかはスタンスをとる • Future はスレッドプールを強く意識する • Java モジュールの知識を活かす • チームが目指したい Scala プロジェクトとは
39.
チームが目指したい Scala プロジェクトとは •
長くメンテしていきたい Scala プロジェクト? or 使い 捨てのプロジェクト? • 一つのプロジェクトに専念? or 更新頻度のまちまちな 小さなアプリケーションを複数かけもち? • 依存ライブラリがどんどん互換性崩してもコンパイル エラーになるから大丈夫? • 何でも Scala でやりたがる病..(皆かかります) • 最近、自分の中で流行っている新しいスタイル.. • このプロジェクト、後任はどう思うか?
40.
たまには精神論でも.. • チームの納得感 +
客観的な目線 • この発表のスタイルがしっくり来るチームもあれば、 ほとんど納得できないチームもあるはず • 組織の中で排他的なチームをつくってしまうと、中 長期的には負債になる(みんなが追いつくべき?) • Scala は楽しい、なぜなら・・ • 自分の好きなようにやっていて楽しい? • チームで開発しやすいから楽しい? • Scala にしてよかったと認識される状況とは?
41.
まとめ • 凝りすぎず、シンプルに書く • Java
プログラマ的美徳は Scala でも活きる • 基本 return を書かない、全ては式 • 例外を保持するデータ型はその設計に慣れてから • Future はマルチスレッドプログラミング • Java を流用するのは全然アリです • チームのための Scala コードを書く
Download