47
Scalaに至るまでの物語 Septeni × Scala 第一回 2015/02/19

Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

Embed Size (px)

Citation preview

Page 1: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

Scalaに至るまでの物語

Septeni × Scala 第一回2015/02/19

Page 2: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

前説

Page 3: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

セプテーニ・グループとは

• ネット広告の代理店が本業– エンジニア知名度無いが、かなり大きい会社。

• ホールディングス制– 1部署1会社のようなもので、いろいろやっています。

株式会社セプテーニ(ネット広告事業部)

株式会社セプテーニ・オリジナル(開発部)

コミックスマート株式会社(マンガ事業部)

セプテーニ・ホールディングス

…他19社

Page 4: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

自己紹介

• 杉谷(@sugitani)ともうします。– 2013/7にセプテーニに入社

• 今はセプテーニ・オリジナル所属• セプテーニ株式会社の執行役員・技術担当• 株式会社コミックスマート・CTO• GANMA! というオリジナルマンガサービスをやっています。

– 前職はドワンゴ• ニコニコ動画モバイル配信系

– プロトコル設計・動画変換プログラム・docomo iアプリ

• ニコニコ生放送初代リーダー• SmartySmile• ニコニコアラート

Page 5: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

本日の概要

• 入社して1年半。いろいろやった結果、セプテーニはScalaをメインでやっていく流れになりました。–弊社は弊社の知名度向上と、Scalaの普及加速を狙い、情報公開を進める方向です。

–僕のパートでは前職と現職を通して、どうしてこうなったのか、どうやってこうなったのか、共有します。

–それぞれの所属する組織でのScala普及に役立つこと、を目指します。

Page 6: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

それでは始めます。

Page 7: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

Scalaを始める前のお話昔話。

Page 8: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

ドワンゴ在籍@2012

• ニコ生を離れて、いろんなことをやっていた。

• ニコ生でPHPは”ちゃんとやるには難しすぎる”と痛感– 強いIDEと型がほしいと思った

– 以降の自分実装はplayframework × javaを採用• XML地獄に落ちずに、Javaでさくさくと実装できるのは新鮮だった。

• (当時は)結構満足していた

• ニコニコAndroidチームがScala正式採用– へー。と思ってた。

Page 9: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

ドワンゴ在籍中@2012〜2013

• ドワンゴのScala普及は加速

–監督していたプロダクト(実装は自分ではない)では、開発者の強い希望でScalaに。

• 自分の分をplay × javaでごりごりやりながら、横目で見ていた。

• 読めなかったのでコードレビューも出来なかったが、楽しそうだとはおもっていた。

Page 10: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

Scalaに対する当時の印象

• すっごい重いんでしょ?

• 型ありは素敵だけど、Javaで良くない?

• Scalaのエンジニアなんて獲得できなくない?

• 一回経験したらJavaに戻れないんでしょ?こわい!

こういうことを、いまだに言っている人いたら「ばーか」といってあげてください

Page 11: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

なぜドワンゴを辞めたのか?

• 企画を考える仕事もしていた。

• ある企画を考え川上さん(ドワンゴ会長)に提案

• 好印象!

• 「でも君ってコード汚いっていうし(実装は)任せないほうがいいよね?」

( ゚д゚)

Page 12: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

こう言われても仕方が無い

4代目開発リーダーsifueさんDeveloper Summit 2014の発表

Page 13: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

こう言われても仕方が無い

4代目開発リーダーsifueさんDeveloper Summit 2014の発表

Page 14: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

こう言われても仕方が無い

4代目開発リーダーsifueさんDeveloper Summit 2014の発表

Page 15: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

こう言われても仕方が無い

4代目開発リーダーsifueさんDeveloper Summit 2014の発表

Page 16: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

こう言われても仕方が無い

4代目開発リーダーsifueさんDeveloper Summit 2014の発表

Page 17: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

こう言われても仕方が無い

4代目開発リーダーsifueさんDeveloper Summit 2014の発表

Page 18: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

こう言われても仕方が無い

4代目開発リーダーsifueさんDeveloper Summit 2014の発表

Page 19: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

これの犯人は?

Page 20: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

自分でしょ?

Page 21: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

振り返り

• 当時の自分には、複雑さに立ち向かうという”概念”がなかった– テスト無し・設計やチーム運営もろもろ全部我流

• リクエストに応え続けるのが何よりもの是と思っていた– 悪いことに成果も激しくでてしまった。

– 結果、チームとしても会社としても、自分のやり方が是となってしまった。

• システムも体制も、最初に作った人間に大きな責任がある。– 後から入ったメンバーに出来ることは少ない。

Page 22: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

価値観

• 自分にニコ生は「価値が無い」–会社としては大成功

• 収益の何割をも占める主力事業

–エンジニアとしては無価値• いくら貢献しようが自分は「生ゴミのようなシステムを作った人」である。

• 若かっただ・時間が無かった・技量が無かった、だの一切の言い訳は無用

• 「安定した品質」 && 「誇れる組織」 && 「価値あるプロダクト」を自分で作ってみせるまで、打ちひしがれたまま。

Page 23: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

転職

• やり直すために、転職を決意。

• GANMA! の立ち上げと、組織改革をミッションにセプテーニに入社

–今後こそ、ちゃんした組織とプロダクトを作る決心

– Scala、ドメイン駆動開発(DDD)、スクラム、各種開

発支援ツールの導入、チャットツールの普及、黒くない裁量労働制の導入、人事制度改革、etc…

Page 24: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

昔話以上。次は、転職後の考えや、具体的行動等をご紹介。

Page 25: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

なぜScalaなのか?“開発がしやすいから、ではちょっと弱い”

Page 26: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

1. 簡単だから2. 継続できるから

Page 27: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

私たちがやりたいこと

• 美しく読みやすいコードを見たい書きたい

• バグが少ない構造を組み上げたい触りたい

• Scalaだと間違いなくやりやすいのは分かる

–型がある

• 簡単なテストを自動で書いてくれるようなもの。

• IDEの補完とリファクタがよく効く

– Nullがない

–いくらでも華麗に書ける

Page 28: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

別にPHPでもできる

• PHPだろうがJavaだろうがCだろうが、ちゃんとやれば綺麗に書ける。– テストを書く、CI回す。– 息を吸うようにリファクタする。– 設計を学ぶ考える。– DRYなり各種法則を守る。

• 事実として、意識さえ高ければどの言語でも問題は無い• でも、そんなに出来る人、採用できる?• そんなに意識の高い人が「PHPやりたい」って言う?• ずっと意識持ち続けられる?• システムは何年も生きるし、人も入れ替わるよ?

Page 29: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

何のためのScalaか。

• ちゃんとした実装を行い続けるためにScala。

–目指す状態をめざし続けるなら、Scalaの方が逆に体力を使わない。

• ちゃんとしたい人と出会うためにScala。

– Scalaやってる、やりたい、と言う人は、きっと意識

も高い。(広く普及すると、falseになるけど)

–きっと自分たちに興味を持ってもらえる確率も高い

–検索: Pythonのパラドックス

Page 30: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

昔の自分のへの回答

• 重いんじゃない?– フルビルドは重いが、部分コンパイルが発達。

• 札束で叩けば全然平気• 弊社はMacbook Pro15インチの最上位プランを支給

– ただしCtrl+F5駆動開発だと厳しい

• Scalaエンジニアなんて調達できないぞ?– 目的は良い人に会うこと。人の多い言語にして低マインドの人をとれるようになっても意味は無い。

– 始めたい人に始めてもらおう、言語の習得は問題に成らない。

• Scala経験したらJavaに戻れない– 真実だ。

Page 31: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

普及のための手続き

自分の組織をよくしたい作戦

Page 32: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

空気を動かそう

• あなたの上長が、いきなり「話は分かったScalaにしよう!!」と言うとは限りません。

• あなたの同僚が全員「Scalaやりたい!!」と言うとは限りません。

• 大体、みな最初は半信半疑です。

• あなたが空気を動かす必要があります。

Page 33: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

成功するしかない

• どうにかして、あなたが何かを新規作成するときのリーダーになってください。

• Scalaを使って”開発に成功”してください– 新規開発も追加開発も、常に予定通り。

– 不具合も障害も少ない。

– 終始、安定した開発チームとして見える状態が目標。

• 成功するために、正しい手段・手法を活用してください– 上長も同僚も、あぁ”Scala”も含めて素晴らしいな違うな、と思わせることが出来れば勝ちです。

– Scalaを使う以外にも、様々な知識・技術を動員する必要があります。

Page 34: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

成功するための技術:テスト

• あなたの書いたコードは、未来永劫最適ですか?

–今後一切書き換えることはありませんか?

–未来も含めて完璧なコードを書けるのですか?

–神でなければNo

• 開発の命綱としてテストは当然書きましょう。

Page 35: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

成功のための技術:プルリ

• Githubとそのクローンにある「Pull-Request」

– コードをマージする時に”必ずレビューを行う”が実現できる

• 一人でだけで良いコードを書き続けというのは、大抵の人間には難しいです。

• 今現在、GithubかGithubもどきが無い場合、どうにかして導入しましょう。

Page 36: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

成功するための技術:スクラム

• おなじみのチーム管理手法

• 教科書通りに実行すると大変強力– ベロシティを元に、精度の高いリリース予定日を算出できる = 予定日ありき、をやめられる。

– 技術的負債を”負う覚悟”をプロダクトオーナーに委ねることができる• エンジニアチームは選択肢を出すだけ「ベストは21pt。妥協すると13pt。スゴくやっつけると3ptだけど副作用あるのであとで21ptを別ストーリーとして残ります。どれにしますか?」

• デスマーチ防止・リリース前ぐだぐだ、謎の開発遅延。などいろいろな問題に効果があります

Page 37: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

成功するための技術:DDD

• 「ドメイン駆動開発」

• 設計の難しさに立ち向かうための技術– ざっくり:作りたい物の本質(ドメイン)を言葉で説明しよう、かつ言葉と実装を一致させよう。

• システムの見通しがとてもよくなります。

• 非エンジニアとの対話も「翻訳無し」で行えるようになります。

Page 38: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

GANMA!での事例(初期)

• Playframework + scala

• テスト完備、DDD採用

• Chef とfabricでインフラ管理、Vagrantも活用

• サーバはREST API だけ、クライアントはSencha Touch × Cordova という構造

• 最初期はメンバーも居ないのでスクラムではなく、見積もりもせず全力消化

–まだスクラムしらず。

Page 39: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

GANMA!での事例(〜現在)

• メンバーも増え、管理に限界を感じたのでスクラムを導入– 翔泳社のアジャイルアカデミーに研修を受けに行った

– 講師さんを呼び、社内開発関係者全員にLEGO研修をうけてもらった(役員含む)

– とにかく教科書通り、を徹底した

• 新規加入メンバー向けのチュートリアルも整備

– チュートリアルになる課題をやってもらう(スプリントの課題としてね)

– アジャイルアカデミーのTDD研修も受講し、その教え方を参考に社内でテスト普及活動も実施

Page 40: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

GANMA!での事例(結果)

• 最初期リリース以外はかなり見積もりに忠実になった– GANMA!ブラウザ版や、兄弟サイト(つぶやき

GANMA!)のリリースも、見積もり通りにリリース。

• 負荷や不具合にはほぼ悩まされない

• GANMA!が開発者育成場になった– GANMA!に留学してスクラムやDDD、テストやScalaを学び、各プロジェクトに持ち帰る。

• 今後の新規プロダクトは、特に理由が無い限りGANMA!系統より原始的にはならない流れに。

Page 41: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

「普及させるにはどうすればよいか」をまとめると

Page 42: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

道具をそろえてがんばれ。

Page 43: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

以上。

Page 44: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

如何でしたか?身もふたも無い?

Page 45: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

質疑応答。

Page 46: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

がんばりましょう!

Page 47: Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷

ご静聴ありがとうございました!