Androidでビルドにどれくらい時間をかけているというのか。


目的

失われた2人日をiMac Proで取り戻し、開発体験を向上するまでの軌跡 | Pixiv inside

に触発された。件の記事にはMacbookで500~1000sを一回のビルドあたり溶かしているとある。自分の場合は更にオンボロPC使っているので、より悪い結果になるはず。これを上司につきつけて新しいPCを手に入れるのだ!

僕はAndroid開発なので、Gradleスクリプトを組み、ビルドにどの程度時間がかかっているかトラッキングしてみる。


トラッキング用コード

トラッキングするコードは以下にようになる。

これをプロジェクトルート側の build.gradleに追加すると、build.logにビルド時間が吐き出される。

long startTime

gradle.beforeProject {
startTime = System.nanoTime()
}

gradle.buildFinished {
println "build finished!"
long execution = (System.nanoTime() - startTime) / 1000000
println "TIME: ${execution} ms"
new File("build.log").text += "${Calendar.getInstance().getTime()} : ${execution} ms \n"
}


環境・条件

PCのスペックは以下のとおり。

OS
Ubuntu 16.04

CPU
Core i5-660 3.33GHz

Memory
4GB

確か2011年製だったはず。かなりボロい。メモリはいつもパンパン。

計測するのはAndroidアプリ。ちょっとしたチャットアプリでサンプル程度の規模感です。

clocの結果は以下(ちょっとはしょってる)。

-------------------------------------------------------------------------------

Language files blank comment code
-------------------------------------------------------------------------------
JSON 119 0 0 8766
Java 21 22 12462 7636
XML 88 478 2 6088
Kotlin 11 57 12 307
Gradle 3 9 6 70
-------------------------------------------------------------------------------
SUM: 245 613 12524 23055
-------------------------------------------------------------------------------


結果

一日計測してみた。生ログは以下のようになる。

Tue Sep 11 09:37:49 JST 2018 : 64257 ms

Tue Sep 11 09:39:09 JST 2018 : 7430 ms
Tue Sep 11 09:39:19 JST 2018 : 8168 ms
Tue Sep 11 09:54:01 JST 2018 : 35668 ms
Tue Sep 11 10:07:39 JST 2018 : 9058 ms
:

これを合計すると

$ cat build.log | cut -c 32- | sed "s/ ms//g" | awk '{sum=sum+$1}END{print sum}'

3247781

3247718ms‥ おもったより少ないな。

結果としては、54.1分である。ほぼ0.9時間だな。


人月換算

一日0.9時間なので、ビルドにかかる人月は

0.9 x 20 = 18 H = 2.25 D

というわけで、2人日ちょいのビルド時間を溶かしていることになる‥

あれ?元記事とかわらない‥

もっと時間とかしてる印象なのに‥


考察

これを上司につきつけても、「まあ、根性でしばらくがんばれや」と言われかねない。

実は計測するまでもなく、Android StudioのUIのレスポンスはガックガクだし、エミュレータは全く動かない(というか、そういうものだと思っていたら、自宅MacbookでAndroid Studioを動かしてみると、UIがサクサクで、エミュレータも快適だったことに驚愕した記憶がある)くらいにはPCは明らかにオンボロだったのである。

その割にビルド時間が案外短かった要因としては、ビルド後必ずスワッピングするため、UIにコントロールが戻ってくるまで10分程度かかってしまい、単純にビルド回数が少なくなったことが挙げられる。

また、計測したのが、本格的なアプリでなく、ちょっとしたサンプルアプリだということも勘案しなければならない。複雑な市場アプリとはビルド時間はかなり変わってきてしまうだろう。


所感

というわけで、あまりに低スペックPCだとビルド時間で上司と戦うのはやめたほうが良さそうだ‥ UIがもさもさした時点でもうこのPCでは開発が不可能ですと言い切ってもいいかもしれない。


ポエム

というか、IDEを諦めたり、UIのコントロールが戻るまでに10分待ったりするような、オンボロ環境と戦っている時間は、人生の無駄でしかない。オートコンプリートを切るだとか軽量エディタを使うだとかのスキルもPCを買えば済む話なので、何の役にも立たないだろう。竹槍で爆撃機は落とせないのだ。

開発会社は現場にこのような悩みを抱えさせず、エンジニアに最良の環境を与えてやるべきだと感じた‥