# あなたの sbt update を爆速にする sbt-coursier の紹介 この記事は [Scala Advent Calendar 2016](http://www.adventar.org/calendars/1492)(Adventar) 10日目の記事です。 今は 12/10 の 625時です。年明けなんて無かった。いいね? さてさて、sbt の依存jarのダウンロードが遅い、というのは[割とよく言われる](http://qiita.com/seratch@github/items/243e99117429bda5f172)事であります。 で、この原因の一旦に、sbtが [Apache Ivy](http://ant.apache.org/ivy/) を使っている、という点があります。 現状 Ivy は依存jarをダウンロードする際、全て直列でダウンロードします。依存グラフ的に関係のないライブラリがあっても、一つが終わらない限り別のjarをダウンロードしようとはしません。 ファイルIOもネットワーク通信も多重化できるこの時代にこれはいけません。 そこで [Coursier](https://github.com/alexarchambault/coursier) の紹介です。 Coursier は Scala で書かれた、依存性解決用ライブラリです。 Readme には以下のように書かれています。 > * downloading of artifacts in parallel, > * better offline mode - one can safely work with snapshot dependencies if these are in cache (SBT tends to try and fail if it cannot check for updates), > * non obfuscated cache (cache structure just mimics the URL it caches), > * no global lock (no "Waiting for ~/.ivy2/.sbt.ivy.lock to be available"). 素晴らしいですね。 で、sbt で coursier を使えるように sbt-coursier という sbt plugin も提供されています。 というわけで、あなたの `project/plugins.sbt` に以下の記述を追加してみましょう。 ```scala addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.0-M15") ``` たったこれだけで `sbt update` が爆速になります。やったね。 手元のいくつかのプロジェクトで試してみたところ、小さい Play2 のプロジェクトでは、アプリケーションの依存性解決よりも、Play2 の sbt plugin の依存性解決の方が支配的でした。 なので `project/plugins.sbt` だけでなく、`project/project/plugins.sbt` にも上記の sbt plugin の指定をすることで、Play2 sbt plugin の解決も速くなります。 という訳で sbt-coursier で快適な sbt ライフを体験してみてください。