SlideShare a Scribd company logo
Scalaで実現、楽しいチーム開発!
2013.10.19
怖くないScala
勉強会
@ benzookapi
自己紹介
名前: 岡村 純一

職業: エンジニア(企画、設計、PGなどなんでも)

株式会社シャノンで研究開発チームのマネージャをし
ています
Twitter: @benzookapi
Scala歴(Play歴):約1年(現職歴とほぼ一緒)
趣味:お酒、飲み会、コンパぽいやつ、音楽、漫画
今日お話したいこと

・会社で
Scala 使 って 作 って る も の
を
・なぜ
Scala 使 い は じ め た の か
を

・Scala 使 っ た チ ーム 開 発 の 楽 し さ
を
・Scala 使 う 場 合 の 注 意 点
を
・Scala 今 後 も と め る こ と
に
主に現場体験談
会社紹介
株式会社シャノン http://www.shanon.co.jp/
2000年創業(現在14期生) 
従業員数約100名(東京本社、うち開発は20数名)
中国子会社、宮崎支社を今年設立

マーケティング全般(セミナー、リアル展示会、3Dバー
チャルイベント、ソーシャル、メール、WEB解析...)の
オールインワンSaasの提供ならびにコンサル、SIなどを
やっている、ソフトウェアベンダ兼サービスベンダ
お客様は大手企業が多く、いわゆるBtoBベンダです
どんなサービス形態か
・自社データセンタやAWS、Herokuなどを使ったSaas
であり全顧客が同じインスタンスを使用する
・1顧客(企業)=1ドメインのマルチテナントタイ
プ。URLは顧客ごとのドメインが使われる事が多い
・月額やデータ従量による課金

・現在契約顧客数は300以上、7800万以上の個人データ
を蓄積

・URL的には統合されているが、実際のAPサーバーや開
発言語などは内部で分かれている
どんな開発をしているか
・非エンジニア(売り手)の割り合いが高く、売り手の要望を
吸い上げる形で製品をつくっています
・Perl製のコア部分を作ってるチームとScalaで新機能開発を
してるチーム(僕ら)に、最近上海の開発チームが加わり、相
互に連携した開発をしています
・一部製品は開発パートナーに委託してたりします

・チームは全てアジャイルを採用、開発計画はPivotalで管理、
ソースコード管理はほぼGitHubを使用
・僕らは2週間に一度のスプリントレビューで売り手のフィー
ドバックをうけつつ開発を進めています
主力製品
Perl製の超レガシーアプリケーション
でも稼ぎ頭
新製品
Heroku+Rubyで作った3D展示会プラットフォーム
展示会以外にも利用可で導入数増加中
その他(新製品や新機能)
ソーシャルシェアと解析
Scala+Playで作る新付加価値的アプリ、機能群
これからのビジネスのブレークスルーとなる存在

リアルタイムデータ配信
ソーシャルアプリ

レコメンドエンジン
ユーザーマッチング
...

僕らが作ってる部分=今回お話する対象
デモ
SHANON MARKETING PLATFORM
(by Perl+Catalyst)
SHANON SOCIAL SPREADER
(by Scala+Play2)
両者はURL的には統合されていて、Scalaで開発さ
れた後者は前者の一機能として顧客には提供されて
います
 

お問い合わせはこちらまで!   
 
https://shanon.smartseminar.jp/public
/application/add/161
Scalaを使い始めた経緯
  
僕らのチームについて
・研究開発チーム(R&D)であり、ビジネス的インパ
クトの大きい新製品、機能を世に出すのが使命

・同時に他チームへの技術提供や技術広報(プレゼン、
ブログ投稿、メディア露出など)も役目
・発足は去年の夏ごろでメンバーは中途採用者がほとん
ど(現在4名)

・元はテクニカルサポートのような部でSDKやSIの開発
をメインにやっていたが、会社の製品力強化にともな
い、メンバ構成、チーム名、ミッションを変更
開発体制と使用言語
Perl
MARKETING PLATFORM
コアチーム

API連携

Ruby
...

Java
API連携

上海開発チーム

API連携

 

API連携

研究開発チーム
(僕ら)

外部開発パートナー

API連携
今期から注力してるところ
・チーム開発によるスピードと品質アッ
プ(x2=3or4...)

・共通化による重複開発の減少、成果物
の資産化

・徹底したAPI化によるデザイン非依存、
機能のポータル化、異なる開発言語間の
連携
使っている技術
開発言語:Scala

フレームワーク:Play2

データベース:MongoDB or PostgreSQL
ライブラリ:Akka、Anorm、Casbah、
ReactiveMongo、LiftJson...
ビュー関連:Scalaテンプレート、jQueryライブラ
リ、mustache、handlebar...

テスト関連:spec2、cucumber、phantomJS、SCCT、jacoco...
サーバー:データセンタ、AWS、Heroku....
Scalaを使い始めた理由
・元々Perlはやめたいって意見があった(レ
ガシーだし...使ってる人ごめんなちゃい><)

・Rubyは?(大規模とかエンタープライズに
向くのかな?Cookpadさん使ってるけど...)
・Javaは?(Servletとか古いフレームワーク
もう使いたくないし...)

フレームワークいけてればJavaでよくね?
まずはJava+Play1を試してみた
・Java版Railsみたいでなかなかいい
・動的コンパイルも快適

・もう二度とstrutsとかに戻れないい
いいいい!

・テクニカルサポート時代は、これで
いくつかSIや小さな製品を作った

でも...
もっと新しいことを試したい
世の中には「関数型言語」というとっても
柔軟なプログラミングができる言語がある
らしい...
Scalaって言語でそれができるらしい...
しかもScalaって野郎は関数型以外にも便
利な機能がたくさんあるらしい...
使ってみたい...みたい...みたい...
使ってみた
・チームも新しく、作るものも新しいので
やってみようというチャレンジで、まずはソー
シャル系のアドオン開発で使ってみた
(ちょっとやって無理そうだったらJavaで書
く条件で)
・ネットの解説よみながら悪戦苦闘している
と、2週間ぐらいでなんとか書けるようになっ
てきた(初めvar多用してたけど)
しかも...

  
ちゃんと書けるようになってくると

楽しい!

(今日のテーマ)
かくしてScalaは開発言語に
・その後メンバも数人加わりいずれも
Scala未経験者ながら独学とGitHub上の
レビューで短期間でScalaコーダーに成
長

・ただし納期の厳しいSI業務のメンバは
安全策でPlay1+Javaを使っていました
R&Dというチームの特質が
Scala導入を助けたのかも
以上、半分妄想による経緯説明
なぜ妄想かというと、Scala導入を決めていた
ころまだ僕は今の会社に入社しておらず、伝え
聞きのためです...

弊社のPlayとScala導入を推し進めたのは、今
は別の会社にいらっしゃる前マネージャの方で
す。(Play1のコミッタであり、Playのコントリ
ビュータにも掲載されています)
https://github.com/ikeike443
Scala導入の詳細については
今年のScalaカンファレンスで、僕と前マネー
ジャの共作という形で発表したので、ぜひ参考
までにご覧になってください
http://www.slideshare.net/ikeike443/scala-conf2
013
JavaエンジニアがどうやってScalaを身につけ
たかを、現場目線でJavaと比較対比しています
(今日の発表のきっかけとなったスライドで
す)
Scala導入が成功した理由
・言い出しっぺの人がフレームワークに精通、スキルも
しっかりしていて関数型言語への知識もあった(導入判
断に必要な情報やメリットを把握出来ていた)

・チームメンバも独自に習得できるだけのスキルや経験
があった(優れたプログラマは新技術の習得も早いとい
う法則)
・ど新卒教育や社外エンジニアとのコラボは考えていな
い
・採用がんばった(優秀な人選んだ。多分)

平均的なプログラマを大量に使う場合には
まだ向かないかも
Scala導入その後

か く して ち ょ っ と 経 過 し ま す. . .
1年
現 在 ど う な って い る の か. . .
チーム開発現場でのScala
  
僕らのチーム開発
・1プロジェクト最低二人以上のエンジニアで
コーディング(1匹狼で全部作るのは原則なし)
・コードレビューはGithub上でチーム全員でレ
ビュー
・スプリントレビューも原則全員参加

・細かい規約は決めない、方針やノウハウだけ
(camel vs snakeとか本質でない)
チーム構成
①JOさん(僕)(♂):Java、PHP、C#など経験。
企画、設計から製品を作り上げて世に出すのが好き

②YOさん(♂):ヤ◯ーさんから転職。PHP、Ruby
など経験。高学歴数学科卒でコーディング能力高い
③CIさん(♀):大手SI会社から転職。Javaで主に
サーバー処理を経験。本格的なweb開発ははじめて

④STさん(♂):古株。Perl大好き。node.jsも触れ
る。元コアチームで製品に精通
一見バラバラに見えるチーム
ですが...

  

実はScala(とPlay)が
取りまとめてくれている気がする
それは...

 
Scalaって

楽しい!

から
(今日のテーマ)
どの辺が楽しいのか?
・工夫次第で会心のコードがかける
(モナドサイコーとか)

・バージョンアップや新しいライブラリを使う楽しさ
(ReactiveMongoクール!とか)

・デザインパターンの開拓の余地(applyメソッドの色
んな応用とか)

・非同期、分散、Websocketとか新しめのアプローチが
割と簡単に試せる(Akkaを使ったリモート分散とか)
特にチーム開発となると
・自分の発見した解決策や会心コードをレ
ビューで共有できる

・逆に人のうまいコードをどんどん吸収できる
・みんなで教え合う平等なコミュニケーション
を作れる
・言語スキルアップと共に製品も出来上がって
いく楽しさ
こんなイメージ

  
ラムダ、
モナド系

MongoDBライブラリ
ビュー周り

ノンブロッキング
(非同期)系

sbtなどの依存解決

有用なコードスニペットの集大成
他の言語も楽しいよ?
・確かに楽しいけど、定着しきった言
語よりも開拓余地のある言語のほうが
より楽しい
・未開拓でもエンジニアを引きつける
要素のない言語はそれほど楽しくない

・今のScalaだから感じられる先乗り感
楽しくなるポイントの例
・map、fold系がすいすい使えこなせて気づ
くとvar(再代入)を全く使わなくなった時

・Javaだと大掛かりになるDI(依存注入)を
すいすい書けた時
・Promiseとかの仕組みが分かって非同期処
理がうまく動いた時
など
楽しくなるポイントの詳細に
ついては
前 出 の こ ち ら の スラ イ ド を ご ら ん に
な ってく だ さ い

http://www.slideshare.net/ikeike443/
scala-conf2013
その他Scala使ってよかった所
・僕らのように、MongoDB+JSON APIでシ
ステムを組むことが多い場合はライブラリが
充実している

・リファクタリングや設計変更は比較的しや
すいのでアジャイルには向いていると思う
(関数渡しや暗黙引数、柔軟なジェネリクス
などで変更しやすい実装を仕込める。モデル
の定義も多様)
結果的に1年運用してみて
・意見の衝突でレビュー欄が炎上することも
あったが、皆でコードやルールを作っていく達
成感を得れた
・バラバラのスキルセットだったチームが今は
バランスよくスキルが統一され、レビューや設
計がしやすくなっている

・ライブラリの情報の少なさや下位互換のなさ
には泣かされた
運用できた要因
・メンバみんなが学習意欲が自主性のある人
だったから
・議論と喧嘩を区別できる大人な人達だっ
たから
・少々つっこまれてもめげないタフな人達

・イケてるコードを書くことを楽しめる人達
Scalaを使う点での注意事項
  
いい(楽しい)ところと裏表
・柔軟性+高機能->オレオレルールで他人が超
メンテしづらいコードに(特に意味もなく
色々省略しちゃうとか、implicit系の乱用と
か)

・開拓性がある->新しいバージョンは不安定
だったり、下位互換全くないとか。ある程度
余裕あるときでないとバージョンアップできな
い
全く無法地帯ではよくない
・Javaなどに比べて自由度が高いた
め、「時間計算量、空間計算量を抑え
かつ人がメンテしやすいコード」と
いった本質的な判断ができる人が必要
・新しい技術=なんでもOKと、はき
ちがえてはいけない
その他
・依存解決とビルドツールのsbtは設定が柔軟す
ぎてはまる

・form+RDB系の定番webアプリ作成は逆にいま
いちかも(formでタプル22問題とか)
・ScalaとPlayはコンパイルがだんだん遅くなっ
てるような....

・英語とソースコードは読む覚悟(日本語ドキュ
メントだけで開発は多分無理)
注意する点の詳細については

前 出 の こ ち ら の スラ イ ド を ご ら ん に
な ってく だ さ い
http://www.slideshare.net/ikeike443/
scala-conf2013
Scalaに今後求めること
  
ずばり

適度な下位互換と
コンパイル速度改善!

    そ れ だ け で す、 と り あ えず
...
その他の求める点については

前 出 の こ ち ら の スラ イ ド を ご ら ん に
な ってく だ さ い
http://www.slideshare.net/ikeike443/
scala-conf2013
まとめ
  
開発は楽しさとチームワーク
が大事

・新しい技術を導入するのは色々大変だが、もし可
能ならScalaを使った楽しい開発を試してもらいたい
・関数型でJVMという女子が寄り付かなさそうな固
いイメージがあるScalaだが決してそんなことはない
・テキストありきの個人学習も大事だけど、チーム
ワークで作り上げていく学習も実りのあるものだと
思う
ご清聴ありがとうございました!
(次はテキテキした話したいな。。)

2013.10.19
怖くないScala
勉強会
@ benzookapi

More Related Content

PPTX
WordPressサイトをiPhoneアプリにしてみた
PDF
Sasa's journey
PPTX
フリーランサーの2014年振り返り
PDF
オフショアだから失敗したの?~誤解だらけのオフショアと、アジャイルの再発見~
PDF
[JAWS-UG Kansai 特別編 「AWSがあるとき。ないとき」]小さな会社のゲームチェンジ
PDF
SIerの中でサービス事業をやるということ
PDF
開発合宿!!!!
PDF
社内勉強会で読んだ本とか
WordPressサイトをiPhoneアプリにしてみた
Sasa's journey
フリーランサーの2014年振り返り
オフショアだから失敗したの?~誤解だらけのオフショアと、アジャイルの再発見~
[JAWS-UG Kansai 特別編 「AWSがあるとき。ないとき」]小さな会社のゲームチェンジ
SIerの中でサービス事業をやるということ
開発合宿!!!!
社内勉強会で読んだ本とか

Similar to Scala workshop 20131019 (20)

PDF
あなたのチームの「いい人」は機能していますか?
PPTX
元インフラエンジニアが
Scalaを触ってつまづいたところ。
PDF
日本Scalaユーザーズグループ発足
PPTX
Lt com camp2016_azureautomation_山p(AzureAutomationを使ってみた話)
PDF
ガチのスタートアップがScalaを採用した結果(公開版) #scala_ks
PDF
SPI Japan 2012 「SEPG活動とアジャイルの親和性を考える」ポジショントーク用
PPTX
【Unity道場スペシャル 2017大阪】Post processing stackでワンランク上のビジュアル表現+時間をかけずに武器になるツー...
PDF
Cmsdou oosaka
PPTX
Sphinxの環境構築が再現できない問題をDockerで解決してみた
PDF
アジャイルプラクティス「ふりかえり」でチーム力アップ!
PPTX
プログラミングのお勉強としてscratchをさわってみた
PDF
サーバサイドエンジニアから見た MT構築のレガシーなノウハウ (入門編)
PDF
Scalaプロジェクトへの未経験者の円滑なジョインへ
PDF
ドワンゴにおける新卒エンジニア向けScala研修について
PPTX
シン・コラボレーション
PDF
ユーザーデータ基盤を1からScalaでつくった話し
PDF
実戦Scala
PPTX
あじゃいる時代の品質保証 ~DevSQAの提案~
PDF
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」
PDF
【STR2 Sumzap プレゼンテーション】
あなたのチームの「いい人」は機能していますか?
元インフラエンジニアが
Scalaを触ってつまづいたところ。
日本Scalaユーザーズグループ発足
Lt com camp2016_azureautomation_山p(AzureAutomationを使ってみた話)
ガチのスタートアップがScalaを採用した結果(公開版) #scala_ks
SPI Japan 2012 「SEPG活動とアジャイルの親和性を考える」ポジショントーク用
【Unity道場スペシャル 2017大阪】Post processing stackでワンランク上のビジュアル表現+時間をかけずに武器になるツー...
Cmsdou oosaka
Sphinxの環境構築が再現できない問題をDockerで解決してみた
アジャイルプラクティス「ふりかえり」でチーム力アップ!
プログラミングのお勉強としてscratchをさわってみた
サーバサイドエンジニアから見た MT構築のレガシーなノウハウ (入門編)
Scalaプロジェクトへの未経験者の円滑なジョインへ
ドワンゴにおける新卒エンジニア向けScala研修について
シン・コラボレーション
ユーザーデータ基盤を1からScalaでつくった話し
実戦Scala
あじゃいる時代の品質保証 ~DevSQAの提案~
2014-10-17 「“A9共催! AWSプロダクトシリーズ よくわかる AWS CloudSearch” スクーでのCloudSearch利用実例」
【STR2 Sumzap プレゼンテーション】
Ad

More from Junichi Okamura (20)

PPTX
20190312 node gakuen
PPTX
20180915 word camp_tokyo
PPTX
20180829 ppug fukuoka
PPTX
20180616 pay pal_meetup_osaka
PPTX
20180609 ppug nagoya
PPTX
20180607 ppug hachioji
PPTX
20180529 fukuoka ec_night
PPTX
20180530 ppug tokyo
PPTX
20180525 ppug sendai
PPTX
20180521 cs hack
PPTX
20180519 ppug niigata
PPTX
20180322 tech meetup_#8
PPTX
20180323 junction tokyo_2018
PPTX
20180316 ppug tokyo_#5
PPTX
20180228 sendai it_workshop
PPTX
20180224 ppug osaka_#3
PPTX
20180222 serverless meetup_#7
PPTX
PayPal Tech Meetup #7 Year End Party with PayPal Masters!
PPTX
PayPal User Groupの振り返り
PPTX
PPUG Kyoto #1
20190312 node gakuen
20180915 word camp_tokyo
20180829 ppug fukuoka
20180616 pay pal_meetup_osaka
20180609 ppug nagoya
20180607 ppug hachioji
20180529 fukuoka ec_night
20180530 ppug tokyo
20180525 ppug sendai
20180521 cs hack
20180519 ppug niigata
20180322 tech meetup_#8
20180323 junction tokyo_2018
20180316 ppug tokyo_#5
20180228 sendai it_workshop
20180224 ppug osaka_#3
20180222 serverless meetup_#7
PayPal Tech Meetup #7 Year End Party with PayPal Masters!
PayPal User Groupの振り返り
PPUG Kyoto #1
Ad

Scala workshop 20131019