SlideShare a Scribd company logo
1 of 19
Download to read offline
AndroidでScala
Septeni Original 杉谷
前説
• GANMA! という漫画配信サービスのAndroid版
はScalaで出来ています(1/18リリース版か
ら)
• 作成途中に得られた知見を思いつく限りご紹介
します
使い物になる?
• なってる
• 道中の難所は多い
• 乗り越えた先は比較的平穏
ビルドシステム
• ビルドシステムが2種類ある
• android-idk-plugin
• SBTにAndroid-SDKを対応させるプラグイン
• gradle-android-scala-plugin (@saturday06さん作)
• GradleにScalaを対応させるプラグイン
• gradle-android-scala-plugin の方を採用
• 標準ビルド環境へのプラグインなので、導入がとても楽
• IDEAとの統合に特殊操作不要
• Gradle前提の各種ライブラリがそのまま使える
• 現状困っていることは無い
良い:Scalaが使える
• サーバ側もScalaなので、いつものようにさくさ
く書けるうれしさ
良い: Futureが美味
• Future/Promiseが標準で使えるので、コールバック地
獄を抑えられる
• onResume →ネットワーク通信 → 各種処理 → ロー
ディングくるくる表示終わり、 とかがすっきり書ける
• UI処理はメインスレッド縛り、がやや難点
• OEさんのUIExecutionContext
• 自作のThreadUtil.runOnUiThread
良い:lazyが美味
• View要素へのアクセスがすっきり書ける


lazy private val spaceTop = view.findViewById(R.id.author_top_space)
パフォーマンス
• 全然問題ない(クレーム無し)
• ぬるぬるさくさく動く
• メモリ消費は荒いので、アプリによっては注意
が必要?
つらい: ぬるぽ
• Android側からNullよくやってくる
• Infra層とView層で徹底防御
• 怪しそうなのはOptionでよく包む
つらい:Androidエンジニア
問題
• 居ない。
• 自社で育成するしかない。
• チームのエンジニア全員が学習(Scalaエンジニ
アx6, Obj-c,Swiftエンジニアx1)
つらい:MultiDex地獄
• Dalvikは1dex 65,535メソッドまで制限
• Scalaを使うと余裕で突破するのでMultiDex必須
• GANMA!アプリで3Dex( ProGuard適用済み)
• 実際にはぴったり65,535詰めると2Dexだが、Android4.0.x系にバグが
あって余裕を持たせないといけない
• 初回起動がかなり遅い
• テストAPKにMultiDexをかけると死ぬ
• コマンドラインをいじってテストパッケージは除外
• 65,535超えないことを祈る。
つらい:MultiDex地獄(2)
tasks.matching {

it.name.startsWith('dex') && !it.name.contains("Test")

}.each { dx ->

if (dx.additionalParameters == null) {

dx.additionalParameters = []

}



dx.additionalParameters += '--multi-dex'

dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()

dx.additionalParameters += '--set-max-idx-number=45000'

}
つらい:テスト
• AndroidのテストはJUnit3(標準),JUnit4(Espresso)しか使えない様子
• assertThatで頑張る
• UI交えたテストがものすごく転ける
• IdlingResource(assert判定の条件が整うまで待つ)をとても
しっかり作り込まないといけない
• 関わるUI処理にFuture[Unit]を返させるようにして、厳密判定でき
るようにする
• (余談)iOSのQuick/Nimbleだと「条件が整うまで、何度も
チェックする」と書けるので楽
つらい:ライブラリ
• javax依存があるライブラリは使えない
• json4sを含む殆どのJSONライブラリがビル
ド不能
• json-lensesがなんとか動いた、 https://
github.com/jrudolph/json-lenses
つらい:ビルド
• ビルド遅い
• Scalaが遅いというより全部が遅い
• 差分コンパイルが効いて殆どScalaに時間がかか
らなくても遅い
• AndroidStudio次期版に、実行中のクラス差し替
え可能可、による爆速化があるがScalaでは使え
なかった
その他微妙につらい
• IntelliJが起動する度に ScalaSDKどこ? と効い
てくる
• IntelliJからテストのクラス指定するときちょっ
と罠がある
その他
• IntelliJ Ultimate使ってますがAndroid Studio
でもいけました
以上です
ご静聴ありがとうございま
した!
セプテーニではScalaエン
ジニアを募集していま
す!!!!!!!!!!!
!!!!!!!!!!!!!

More Related Content

What's hot

CLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows AzureストレージについてCLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows Azureストレージについて
normalian
 

What's hot (6)

CLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows AzureストレージについてCLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows Azureストレージについて
 
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
CEDEC2014 セッション資料「ヘキサドライブ流 OPTPiX SpriteStudio 最適化術!」
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語
 
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
Cocos2d-xとSpriteStudioを使った音ゲー開発のお話
 
マルチデバイス時代の高速化
マルチデバイス時代の高速化マルチデバイス時代の高速化
マルチデバイス時代の高速化
 
20131209_buildinsidermeetup
20131209_buildinsidermeetup20131209_buildinsidermeetup
20131209_buildinsidermeetup
 

Viewers also liked

Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Hitoshi Asai
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
papamitra
 

Viewers also liked (20)

ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門ScalaプログラマのためのHaskell入門
ScalaプログラマのためのHaskell入門
 
AndroidでScalaを使う際の問題点と対策
AndroidでScalaを使う際の問題点と対策AndroidでScalaを使う際の問題点と対策
AndroidでScalaを使う際の問題点と対策
 
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
 
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
2016 ScalaMatsuri LT / セプテーニ・オリジナルの文化と歴史
 
言語アップデート -Scala編-
言語アップデート -Scala編-言語アップデート -Scala編-
言語アップデート -Scala編-
 
[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!	[Android] モジュール管理で ビルド高速化!
[Android] モジュール管理で ビルド高速化!
 
Androidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradleAndroidアプリ開発で活躍必至!? ビルドツールGradle
Androidアプリ開発で活躍必至!? ビルドツールGradle
 
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
Webプログラマのための Scala 入門勉強会 @ 渋谷 12/7
 
Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷
Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷
Scalaに至るまでの物語 - Septeni × Scala 第一回 杉谷
 
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
Scala初心者がPlay/ScalaでロックなWebアプリを作ったお話
 
Scala@SmartNews_20150221
Scala@SmartNews_20150221Scala@SmartNews_20150221
Scala@SmartNews_20150221
 
Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話Scala@SmartNews AdFrontend を Scala で書いた話
Scala@SmartNews AdFrontend を Scala で書いた話
 
Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編Scala勉強会 初心者向けハンズオン前編
Scala勉強会 初心者向けハンズオン前編
 
磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!磯野ー!関数型言語やろうぜー!
磯野ー!関数型言語やろうぜー!
 
Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門Scalaで学ぶ関数型言語超入門
Scalaで学ぶ関数型言語超入門
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由数学プログラムを Haskell で書くべき 6 の理由
数学プログラムを Haskell で書くべき 6 の理由
 

Similar to 2016 Android × Scala @ScalaMatsuri2016

gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーションgradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーション
Shinya Mochida
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
tantack
 

Similar to 2016 Android × Scala @ScalaMatsuri2016 (20)

Gradleスクリプトを読み解く
Gradleスクリプトを読み解くGradleスクリプトを読み解く
Gradleスクリプトを読み解く
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた Scala
 
gradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーションgradle2.4のルールベースモデルコンフィギュレーション
gradle2.4のルールベースモデルコンフィギュレーション
 
ICDP普及活動
ICDP普及活動ICDP普及活動
ICDP普及活動
 
Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
 
現場で使えるDynamoDBと冪等デザインパターン
現場で使えるDynamoDBと冪等デザインパターン現場で使えるDynamoDBと冪等デザインパターン
現場で使えるDynamoDBと冪等デザインパターン
 
とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
Android studio で行ってみよう!!
Android studio で行ってみよう!!Android studio で行ってみよう!!
Android studio で行ってみよう!!
 
DWANGO by ドワンゴ
DWANGO by ドワンゴDWANGO by ドワンゴ
DWANGO by ドワンゴ
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
 
Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間Scalaと過ごした5ヶ月間
Scalaと過ごした5ヶ月間
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
 
AWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツールAWS Lambdaのテストで役立つ各種ツール
AWS Lambdaのテストで役立つ各種ツール
 
Cocos2dx 8hour
Cocos2dx 8hourCocos2dx 8hour
Cocos2dx 8hour
 
AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話AWS SDK for Go を使って作ってみた話
AWS SDK for Go を使って作ってみた話
 
Lambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べるLambda layerをDeployする方法を調べる
Lambda layerをDeployする方法を調べる
 
Scalaコーディングの準備
Scalaコーディングの準備Scalaコーディングの準備
Scalaコーディングの準備
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarconSeasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
Seasar ユーザだったプログラマが目指す OSS の世界展開 #seasarcon
 

2016 Android × Scala @ScalaMatsuri2016