狠狠撸

狠狠撸Share a Scribd company logo
乙女ゲー
を支える技術
Play2.0 + Scalaの開発事例紹介

         daiksy




               2012-11-10
   DevLOVE関西 2012 Drive A-1
このセッションの目的
このセッションの目的

最新のトレンドを見ると
ポストJavaの流れが
見受けられる
このセッションの目的



関数型言語 など
このセッションの目的

事例紹介を通じて
現場に新しい技術を
採用する手助けに
このセッションの目的

事例紹介を通じて
現場に新しい技術を
採用する手助けに

※技術的に深い話はしません
このセッションの目的




 技術的な補完はこちらで!
自己绍介




       5
自己绍介
@daiksy
 粕谷 大輔
   フリュー株式会社

       プログラマ
自己绍介



 乙女ゲー
作ってます!
構成
Amazon EC2       Amazon RDS
  Play2.0
                   MySQL
   nginx


                 Amazon S3
Amazon EC2         backup

  Play2.0

                   Fluentd
   nginx

                              10
开発概要
开発概要
期間:
开発概要
期間: 2012年2月~5月末
             (4ヶ月)
开発概要
期間: 2012年2月~5月末
             (4ヶ月)
チーム構成:6名
开発概要
期間: 2012年2月~5月末
             (4ヶ月)
チーム構成:6名

  Play2.0 + Scalaの
 開発は会社として初めて
开発概要
FW:Play2.0
开発概要
FW:Play2.0
開発言語:Scala
开発概要
FW:Play2.0
開発言語:Scala
ORM:Squeryl
开発概要
FW:Play2.0
開発言語:Scala
ORM:Squeryl
DB:MySQL
バージョン管理は Git
Playframework 2.0




                    15
Playframework 2.0


 フルスタックな
 Web フレームワーク
Playframework 2.0


 フルスタックな
 Web フレームワーク

 Railsライク
Playframework 2.0


 フルスタックな
 Web フレームワーク

 Railsライク

 XML地獄にならない
Playframework 2.0




 ちょっとコンパイルが遅い
Playframework 2.0


 開発言語にScalaを使うなら
 これがオススメ
Playframework 2.0


 サーバ処理を共通化し、
 痴颈别飞のみの差し替えなど容易
Playframework 2.0


 ユーザエージェントで
 痴颈别飞出力のみ切り替え
Playframework 2.0


 ガラケー & スマフォ同時
 リリースを短期間で実現
Playframework 2.0

開発当初はPlay2.0 RC1
Playframework 2.0

開発当初はPlay2.0 RC1

途中で正式リリース
Playframework 2.0

開発当初はPlay2.0 RC1

開発途中で何度かVer Up
Playframework 2.0

開発当初はPlay2.0 RC1

開発途中で何度かVer Up
 _人人人人人人人人人人人人人人人_
 >?コンパイルエラーとの戦い!?<
  ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
Playframework 2.0

ガラケー対応のために
文字コードなどで独自の
拡張が必要だった
Playframework 2.0

    docomo     Windows-31J



      au       Windows-31J



    SoftBank     UTF-8
Playframework 2.0

    docomo     Windows-31J



      au       Windows-31J



    SoftBank     UTF-8


絵文字対応とか...
Playframework 2.0

PCのブラウザや
スマートフォンのみを
ターゲットするなら
問題ないはず
今回开発の注意点




           20
今回开発の注意点
メンバー全員 Scala 初めて
今回开発の注意点
メンバー全員 Scala 初めて
メンバー全員 Play 初めて
今回开発の注意点
メンバー全員 Scala 初めて
メンバー全員 Play 初めて
メンバー全員 Git 初めて
今回开発の注意点
メンバー全員 Scala 初めて
メンバー全員 Play 初めて
メンバー全員 Git 初めて
メンバー全員 AWS 初めて
今回开発の注意点
メンバー全員 Scala 初めて
メンバー全員 Play 初めて
メンバー全員 Git 初めて
メンバー全員 AWS 初めて
メンバー全員 nginx 初めて
今回开発の注意点
メンバー全員 Scala 初めて
メンバー全員 Play 初めて
メンバー全員 Git 初めて
メンバー全員 AWS 初めて
メンバー全員 nginx 初めて
ぼくは入社2日目から参画
今回开発の注意点



エクストリームすぎるだろ
Scalaはじめて
始業前勉強会
Scalaはじめて
始業前勉強会
毎週:月、水、金 各30分
Scalaはじめて
始業前勉強会
毎週:月、水、金 各30分
コップ本輪読会
Scalaはじめて
始業前勉強会
毎週:月、水、金 各30分
コップ本輪読会

リリース後も
続いていたw
Scalaはじめて
始業前勉強会
当初は朝勉強したことをさっ
そく昼に実践する的なエクス
トリームっぷり
Scalaはじめて
始業前勉強会
学習したことをみんなで議論
したり、直後に実践するの
で、吸収しやすい
Scala
JVMで動作




         25
Scala
JVMで動作

関数型プログラミング
Scala
JVMで動作

関数型プログラミング
コード量が少なくなる
Scala
JVMで動作

関数型プログラミング
コード量が少なくなる
でも難しいんでしょ????
Scala
var hoge : String = “”

if (fuga >= 10) {
   hoge = “Hello”
} else {
   hoge = “Good Bye”
}
Scala
var hoge : String = “”

if (fuga >= 10) {
   hoge = “Hello”
} else {
   hoge = “Good Bye”
}



val hoge : String = if (fuga >= 10) {
   “Hello”
} else {
  “Good Bye”
}
Scala
var hoge : String = “”

if (fuga >= 10) {
   hoge = “Hello”
} else {
   hoge = “Good Bye”
}


 こっちの方がScalaっぽい
val hoge : String = if (fuga >= 10) {
   “Hello”
} else {
  “Good Bye”
}
Scala
var hoge : String = “”

if (fuga >= 10) {
   hoge = “Hello” 最初はこっちのスタイルでも良い
} else {
   hoge = “Good Bye”
}



val hoge : String = if (fuga >= 10) {
   “Hello”
} else {
  “Good Bye”
}
Scala

 最初はJavaのように、
 手続き型と
 オブジェクト指向の
 書き方で良い
Scala



 少しずつ慣れていこう
Scala



 僕らはどうやったか?
Scala
開発当初




        30
Scala
開発当初
 ?担当者が実装
Scala
開発当初
 ?担当者が実装
 ?全員でレビュー
Scala
開発当初
 ?担当者が実装
 ?全員でレビュー
 ?レビューを反映
Scala
開発当初
 ?担当者が実装
1機能の実装に時間がかかる
 ?全員でレビュー
 ?レビューを反映
Scala
改善
 ?実装は原則ペア
Scala
改善
 ?実装は原則ペア
 ?レビューと同じ効果
Scala
改善
 ?実装は原則ペア
 ?レビューと同じ効果
 ?課金など重要機能は
  全員レビュー
Scala
改善
 ?朝の勉強会も有効に作用
Scala

 2ヶ月もすれば、
 メンバー全員違和感なく
 厂肠补濒补は扱えるように
Scala



結局、Scalaってどうよ
Scala


Javaプログラマが
関数型プログラミングを
身に付けるには最適
Scala



コード量も減る
Scala
val xs = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

for(x <- xs) {
  if(x >= 5) {
    println(x)
  }
}
Scala
val xs = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

for(x <- xs) {
  if(x >= 5) {
    println(x)
  }
}




val xs = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

xs.filter(_ >= 5) foreach println
Scala



既存資産の活用
Scala



アバター機能
Scala


        +
Scala


Javaで作られた
画像処理ライブラリを使用
Scala


これまで自社で蓄積された
ライブラリが
そのまま使える
チャレンジの所感
チャレンジの所感

学習コストはかかった
チャレンジの所感

学習コストはかかった
 最初の1ヶ月は
 ひとつの機能をひたすら
 リファクタリング
チャレンジの所感

保守はしやすい
チャレンジの所感

保守はしやすい
 コード量が減り、
 見通しが良い
チャレンジの所感

保守はしやすい
 追加機能の実装は
 比較的容易
チャレンジの所感

メンバーの士気は重要
チャレンジの所感

メンバーの士気は重要
 限られた期日で
 技術を習得する必要がある
チャレンジの所感



チャレンジは楽しい!
Thank You!


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

More Related Content

Dev love関西 forslideshare

Editor's Notes