nologyance.net

日々のアウトプット

gradleビルドを高速化したい

非常に柔軟なビルドスクリプトが書けるGradle

業務システム界隈ではまだまだ普及期、Android界隈では標準といった具合の知名度でしょうか。 柔軟な記載ができる一方でgoovyのシンタックスシュガーに悩まされている方も多いのではないでしょうか。 私もその一人です。ちなみに特にこの記事でgradleの文法について触れるつもりはありません。

今回は高速化のお話

ローカル環境にしてもCI環境にしてもビルド時間は短いに越したことはないですよね。 開発者フィードバックが早まるため、バグの検出が前倒し出来て生産性の向上に直結します。 最近はそのあたりの課題に取り組んでいたので知見を書き残しておこうと思います。

まずは計測

課題解決は現状と理想を定義するところから始まります。 何かビルドが遅い気がするからなんとかしたい、ではなく「ベストプラクティスとしては一回のビルドが〇分以内と定義されているから今のビルド時間とギャップがある」のように具体的に課題を設定しましょう。 計測にはJUnitが出してくれるレポートや、gradle自体にもレポートや分析の機能が搭載されているため、利用しましょう。 調査の結果、実はビルドが遅いわけではなかった、なんて結論になるかもしれません。

計測したら現状を分析

現状を分析していくと大抵の場合、ボトルネックとなっている部分があるはずです。 それはコンパイルだったり、テストだったり、特定のプロジェクトだったり・・・ 原因によって有効な対処法は異なります。

改善

私が実施した改善策をいくつかご紹介しておきます。 特にheap領域の割り当てはデフォルト設定のまま利用されている場合、結構な効果が期待できると思います。

コンパイルが遅い

  • gradleが利用するjvmのheap領域を増やす。 GRADLE_OPTSやgradle.propertiesで設定できます。
  • --parallelオプションを利用する こちらは独立したマルチプロジェクト構成のときにのみ有効

テストが遅い

俺たちのテスト改善はこれからだ

まだプロジェクト初期段階であればJUnitの@Categoryをつけておくと後から困らない気がします。 年代物のプロジェクトの場合は・・・頑張ってください。