scala workshop 20131019

51
Scala2 0 1 3 . 1 0 . 1 9 怖くないScala @benzookapi

Upload: junichi-okamura

Post on 20-Jun-2015

1.281 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Scala workshop 20131019

Scalaで実現、楽しいチーム開発!

2013.10.19 怖くないScala勉強会

@ benzookapi

Page 2: Scala workshop 20131019

自己紹介名前: 岡村 純一職業: エンジニア(企画、設計、PGなどなんでも)株式会社シャノンで研究開発チームのマネージャをしていますTwitter: @benzookapi

Scala歴(Play歴):約1年(現職歴とほぼ一緒)趣味:お酒、飲み会、コンパぽいやつ、音楽、漫画

Page 3: Scala workshop 20131019

今日お話したいこと

・会社でSca laを使って作ってるもの・なぜScalaを使いはじめたのか・Sca laを使ったチーム開発の楽しさ・Scalaを使う場合の注意点・Scalaに今後もとめること

主に現場体験談

Page 4: Scala workshop 20131019

会社紹介株式会社シャノン http://www.shanon.co.jp/

2000年創業(現在14期生) 従業員数約100名(東京本社、うち開発は20数名)中国子会社、宮崎支社を今年設立マーケティング全般(セミナー、リアル展示会、3Dバーチャルイベント、ソーシャル、メール、WEB解析...)のオールインワンSaasの提供ならびにコンサル、SIなどをやっている、ソフトウェアベンダ兼サービスベンダお客様は大手企業が多く、いわゆるBtoBベンダです

Page 5: Scala workshop 20131019

どんなサービス形態か・自社データセンタやAWS、Herokuなどを使ったSaasであり全顧客が同じインスタンスを使用する・1顧客(企業)=1ドメインのマルチテナントタイプ。URLは顧客ごとのドメインが使われる事が多い・月額やデータ従量による課金・現在契約顧客数は300以上、7800万以上の個人データを蓄積・URL的には統合されているが、実際のAPサーバーや開発言語などは内部で分かれている

Page 6: Scala workshop 20131019

どんな開発をしているか・非エンジニア(売り手)の割り合いが高く、売り手の要望を吸い上げる形で製品をつくっています・Perl製のコア部分を作ってるチームとScalaで新機能開発をしてるチーム(僕ら)に、最近上海の開発チームが加わり、相互に連携した開発をしています・一部製品は開発パートナーに委託してたりします・チームは全てアジャイルを採用、開発計画はPivotalで管理、ソースコード管理はほぼGitHubを使用・僕らは2週間に一度のスプリントレビューで売り手のフィードバックをうけつつ開発を進めています

Page 7: Scala workshop 20131019

主力製品

Perl製の超レガシーアプリケーションでも稼ぎ頭

Page 8: Scala workshop 20131019

新製品

Heroku+Rubyで作った3D展示会プラットフォーム展示会以外にも利用可で導入数増加中

Page 9: Scala workshop 20131019

...

その他(新製品や新機能)ソーシャルシェアと解析

Scala+Playで作る新付加価値的アプリ、機能群これからのビジネスのブレークスルーとなる存在

ソーシャルアプリレコメンドエンジン

ユーザーマッチング

リアルタイムデータ配信

僕らが作ってる部分=今回お話する対象

Page 10: Scala workshop 20131019

デモSHANON MARKETING PLATFORM

(by Perl+Catalyst)

SHANON SOCIAL SPREADER

(by Scala+Play2)

両者はURL的には統合されていて、Scalaで開発された後者は前者の一機能として顧客には提供されています

Page 11: Scala workshop 20131019

 

お問い合わせはこちらまで!    https://shanon.smartseminar.jp/public/application/add/161

Page 12: Scala workshop 20131019

Scalaを使い始めた経緯  

Page 13: Scala workshop 20131019

僕らのチームについて・研究開発チーム(R&D)であり、ビジネス的インパクトの大きい新製品、機能を世に出すのが使命・同時に他チームへの技術提供や技術広報(プレゼン、ブログ投稿、メディア露出など)も役目・発足は去年の夏ごろでメンバーは中途採用者がほとんど(現在4名)・元はテクニカルサポートのような部でSDKやSIの開発をメインにやっていたが、会社の製品力強化にともない、メンバ構成、チーム名、ミッションを変更

Page 14: Scala workshop 20131019

開発体制と使用言語

 

MARKETING PLATFORMコアチーム

Perl

研究開発チーム(僕ら)

API連携上海開発チーム

Java

API連携

API連携

外部開発パートナー

Ruby...

API連携

API連携

Page 15: Scala workshop 20131019

今期から注力してるところ・チーム開発によるスピードと品質アップ(x2=3or4...)・共通化による重複開発の減少、成果物の資産化・徹底したAPI化によるデザイン非依存、機能のポータル化、異なる開発言語間の連携

Page 16: Scala workshop 20131019

使っている技術開発言語:Scala

フレームワーク:Play2

データベース:MongoDB or PostgreSQL

ライブラリ:Akka、Anorm、Casbah、ReactiveMongo、LiftJson...

ビュー関連:Scalaテンプレート、jQueryライブラリ、mustache、handlebar...

テスト関連:spec2、cucumber、phantomJS、SCCT、jacoco...

サーバー:データセンタ、AWS、Heroku....

Page 17: Scala workshop 20131019

Scalaを使い始めた理由・元々Perlはやめたいって意見があった(レガシーだし...使ってる人ごめんなちゃい><)・Rubyは?(大規模とかエンタープライズに向くのかな?Cookpadさん使ってるけど...)・Javaは?(Servletとか古いフレームワークもう使いたくないし...)

フレームワークいけてればJavaでよくね?

Page 18: Scala workshop 20131019

まずはJava+Play1を試してみた

・Java版Railsみたいでなかなかいい・動的コンパイルも快適・もう二度とstrutsとかに戻れないいいいいい!・テクニカルサポート時代は、これでいくつかSIや小さな製品を作った

でも...

Page 19: Scala workshop 20131019

もっと新しいことを試したい世の中には「関数型言語」というとっても柔軟なプログラミングができる言語があるらしい...

Scalaって言語でそれができるらしい...

しかもScalaって野郎は関数型以外にも便利な機能がたくさんあるらしい...

使ってみたい...みたい...みたい...

Page 20: Scala workshop 20131019

使ってみた・チームも新しく、作るものも新しいのでやってみようというチャレンジで、まずはソーシャル系のアドオン開発で使ってみた(ちょっとやって無理そうだったらJavaで書く条件で)・ネットの解説よみながら悪戦苦闘していると、2週間ぐらいでなんとか書けるようになってきた(初めvar多用してたけど)

Page 21: Scala workshop 20131019

しかも...

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

楽しい!(今日のテーマ)

Page 22: Scala workshop 20131019

かくしてScalaは開発言語に・その後メンバも数人加わりいずれもScala未経験者ながら独学とGitHub上のレビューで短期間でScalaコーダーに成長・ただし納期の厳しいSI業務のメンバは安全策でPlay1+Javaを使っていました

R&Dというチームの特質がScala導入を助けたのかも

Page 23: Scala workshop 20131019

以上、半分妄想による経緯説明なぜ妄想かというと、Scala導入を決めていたころまだ僕は今の会社に入社しておらず、伝え聞きのためです...

弊社のPlayとScala導入を推し進めたのは、今は別の会社にいらっしゃる前マネージャの方です。(Play1のコミッタであり、Playのコントリビュータにも掲載されています)https://github.com/ikeike443

Page 24: Scala workshop 20131019

Scala導入の詳細については今年のScalaカンファレンスで、僕と前マネージャの共作という形で発表したので、ぜひ参考までにご覧になってくださいhttp://www.slideshare.net/ikeike443/scala-conf2013JavaエンジニアがどうやってScalaを身につけたかを、現場目線でJavaと比較対比しています(今日の発表のきっかけとなったスライドです)

Page 25: Scala workshop 20131019

Scala導入が成功した理由・言い出しっぺの人がフレームワークに精通、スキルもしっかりしていて関数型言語への知識もあった(導入判断に必要な情報やメリットを把握出来ていた)・チームメンバも独自に習得できるだけのスキルや経験があった(優れたプログラマは新技術の習得も早いという法則)・ど新卒教育や社外エンジニアとのコラボは考えていない・採用がんばった(優秀な人選んだ。多分)

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

Page 26: Scala workshop 20131019

Scala導入その後

かくして1年ちょっと経過します...

現在どうなっているのか...

Page 27: Scala workshop 20131019

チーム開発現場でのScala

  

Page 28: Scala workshop 20131019

僕らのチーム開発・1プロジェクト最低二人以上のエンジニアでコーディング(1匹狼で全部作るのは原則なし)・コードレビューはGithub上でチーム全員でレビュー・スプリントレビューも原則全員参加・細かい規約は決めない、方針やノウハウだけ(camel vs snakeとか本質でない)

Page 29: Scala workshop 20131019

チーム構成①JOさん(僕)(♂):Java、PHP、C#など経験。企画、設計から製品を作り上げて世に出すのが好き②YOさん(♂):ヤ◯ーさんから転職。PHP、Rubyなど経験。高学歴数学科卒でコーディング能力高い③CIさん(♀):大手SI会社から転職。Javaで主にサーバー処理を経験。本格的なweb開発ははじめて④STさん(♂):古株。Perl大好き。node.jsも触れる。元コアチームで製品に精通

Page 30: Scala workshop 20131019

一見バラバラに見えるチームですが...

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

Page 31: Scala workshop 20131019

それは...

 Scalaって

楽しい!から

(今日のテーマ)

Page 32: Scala workshop 20131019

どの辺が楽しいのか?・工夫次第で会心のコードがかける(モナドサイコーとか)・バージョンアップや新しいライブラリを使う楽しさ(ReactiveMongoクール!とか)・デザインパターンの開拓の余地(applyメソッドの色んな応用とか)・非同期、分散、Websocketとか新しめのアプローチが割と簡単に試せる(Akkaを使ったリモート分散とか)

Page 33: Scala workshop 20131019

特にチーム開発となると・自分の発見した解決策や会心コードをレビューで共有できる・逆に人のうまいコードをどんどん吸収できる・みんなで教え合う平等なコミュニケーションを作れる・言語スキルアップと共に製品も出来上がっていく楽しさ

Page 34: Scala workshop 20131019

こんなイメージ

  ノンブロッキング

(非同期)系

MongoDBライブラリビュー周り

ラムダ、モナド系

sbtなどの依存解決

有用なコードスニペットの集大成

Page 35: Scala workshop 20131019

他の言語も楽しいよ?・確かに楽しいけど、定着しきった言語よりも開拓余地のある言語のほうがより楽しい・未開拓でもエンジニアを引きつける要素のない言語はそれほど楽しくない・今のScalaだから感じられる先乗り感

Page 36: Scala workshop 20131019

楽しくなるポイントの例・map、fold系がすいすい使えこなせて気づくとvar(再代入)を全く使わなくなった時・Javaだと大掛かりになるDI(依存注入)をすいすい書けた時・Promiseとかの仕組みが分かって非同期処理がうまく動いた時など

Page 37: Scala workshop 20131019

楽しくなるポイントの詳細については前出のこちらのスライドをごらんになってくださいhttp://www.slideshare.net/ikeike443/scala-conf2013

Page 38: Scala workshop 20131019

その他Scala使ってよかった所・僕らのように、MongoDB+JSON APIでシステムを組むことが多い場合はライブラリが充実している・リファクタリングや設計変更は比較的しやすいのでアジャイルには向いていると思う(関数渡しや暗黙引数、柔軟なジェネリクスなどで変更しやすい実装を仕込める。モデルの定義も多様)

Page 39: Scala workshop 20131019

結果的に1年運用してみて・意見の衝突でレビュー欄が炎上することもあったが、皆でコードやルールを作っていく達成感を得れた・バラバラのスキルセットだったチームが今はバランスよくスキルが統一され、レビューや設計がしやすくなっている・ライブラリの情報の少なさや下位互換のなさには泣かされた

Page 40: Scala workshop 20131019

運用できた要因・メンバみんなが学習意欲が自主性のある人だったから・議論と喧嘩を区別できる大人な人達だったから・少々つっこまれてもめげないタフな人達・イケてるコードを書くことを楽しめる人達

Page 41: Scala workshop 20131019

Scalaを使う点での注意事項  

Page 42: Scala workshop 20131019

いい(楽しい)ところと裏表・柔軟性+高機能->オレオレルールで他人が超メンテしづらいコードに(特に意味もなく色々省略しちゃうとか、implicit系の乱用とか)・開拓性がある->新しいバージョンは不安定だったり、下位互換全くないとか。ある程度余裕あるときでないとバージョンアップできない

Page 43: Scala workshop 20131019

全く無法地帯ではよくない

・Javaなどに比べて自由度が高いため、「時間計算量、空間計算量を抑えかつ人がメンテしやすいコード」といった本質的な判断ができる人が必要・新しい技術=なんでもOKと、はきちがえてはいけない

Page 44: Scala workshop 20131019

その他・依存解決とビルドツールのsbtは設定が柔軟すぎてはまる・form+RDB系の定番webアプリ作成は逆にいまいちかも(formでタプル22問題とか)・ScalaとPlayはコンパイルがだんだん遅くなってるような....

・英語とソースコードは読む覚悟(日本語ドキュメントだけで開発は多分無理)

Page 45: Scala workshop 20131019

注意する点の詳細については

前出のこちらのスライドをごらんになってくださいhttp://www.slideshare.net/ikeike443/scala-conf2013

Page 46: Scala workshop 20131019

Scalaに今後求めること  

Page 47: Scala workshop 20131019

ずばり

  それだけです、とりあえず...

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

Page 48: Scala workshop 20131019

その他の求める点については

前出のこちらのスライドをごらんになってくださいhttp://www.slideshare.net/ikeike443/scala-conf2013

Page 49: Scala workshop 20131019

まとめ  

Page 50: Scala workshop 20131019

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

Page 51: Scala workshop 20131019

ご清聴ありがとうございました!(次はテキテキした話したいな。。)

2013.10.19 怖くないScala勉強会

@ benzookapi