sbt 1.0.0 はじめました

in

Lightbend の技術系ブログ Tech Hub blog に sbt 1.0.0 is now available という記事を書いたので、訳しました。
詳細は sbt 1.0.0 リリースノートを見てください。

Eugene Yokota (@eed3si9n) 2017年8月11日 著

Lightbend社 Tooling チームに代わって sbt 1.0.0 のリリースを発表します!

Mark Harrah さんが 2008 年に最初にリリースした sbt から数えると、sbt 1 は何年もかけて開発された大きな里程標であると言える。直近のメジャーリリースの sbt 0.13.x も、最初のリリースが 2013年8月なので 4年間続いたことになる。

Lightbend社 Tooling チームは 0.13 のメンテと並行して sbt 1 へ向けての進化も継続してきた。この期間中に sbt newAutoPlugin、cached resolution などが追加された。また、コミュニティによって何百ものプラグインが書かれ、sbt の能力はただのシンプルビルドツールの能力を拡張したものとなっていった。

主な機能

  • sbt 1 は Scala 2.12 を採用したため、ビルド内でやっとモダンな Scala が使えるようになった! これによって 2.10 をサポートをするプレッシャーが軽減するので、プラグイン作者やライブラリ作者にとっても朗報だ。
  • sbt 1 は Zinc 1 という、クラスベースの name hashing を使う高速なインクリメンタル (差分) コンパイラを導入する。Scala のインクリメンタル・コンパイラを独り占めにするにはあまりにも重要だと思ったので、Zinc 1 は sbt/zinc という別のリポジトリに分けられ、Lightbend 社と Scala Center の共同で管理されている。
  • sbt 1 はデフォルトで Gigahorse HTTP クライアント (内部は Square OkHttp) を使ってアーティファクトを並列ダウンロードする。Library Mangement API も追加され、将来の 1.x において脱Ivy が可能となるようにした。

互換性に影響のある変更点、新機能、バグ修正などのを網羅したリストは sbt 1.0.0 リリースノート にあるので参照してほしい。

互換性に関して

sbt 1 は Semantic Versioning を採用する。sbt 1.x シリーズにおいてバイナリ互換性を保つ予定だ。

0.13 を継続的に進化させてきていたので、コンセプト的には sbt 1 は sbt 0.13 とそう遠くないはずだ。しかし、sbt 1 は sbt 0.13 とソース互換もバイナリ互換性も無く、マイグレーションに多少の努力が必要かもしれない。詳細はマイグレーション・ガイドを参照。

このリリースは sbt 1.0.0-RC3 と同一のものだ。

コントリビュータの皆さん

まずは、sbt の原作者である Mark Harrrah さんに感謝したい。Mark は sbt を 2008年に発表して、Scala のインクリメンタルコンパイラ、Maven や Ivy のライブラリ依存性との統合、並列のタスク処理などを sbt の基礎的な柱は全て Mark が発案し最初に実装した。

また、過去の我々の共犯者 Josh Suereth さんと Grzegorz Kossakowski さんも、0.13 と 1.x の方向性を本質的に形作ったことをここで言及する必要がある。

sbt 1.0.0 につながるここ数ヶ月の間 EPFL の Scala Center は多くの重要なバグ修正や機能を sbt、Zinc 1、およびモジュールにコントリビュートした。中でも重要なものとしては、Jorge Vicente Cantero さんによるアーティファクトの並列ダウンロード、Zinc 1 の内部構造保存形式、Martin Duhem さんによる新しい Watch Service などが挙げられる。

sbt や Zinc 1 を実際に使ったり、バグ報告、ドキュメンテーションの改善、Stack OverflowGitter、職場などで親切に他の人を助けたり、pull request を送ってくれた 318 のコントリビュータなど皆さん、ありがとうございました! ここには書ききれないので Credits も参照してください。

次は?

既に Scala.js や sbt-assembly など多くのプラグインが移植され、エコシステムを sbt 1 にリブートさせる作業が着々と進んでいる。しかし、リストはまだ不完全で、コミュニティーの参加が必要不可欠だ。

sbt 1 を試して、バグがあれば GitHub で報告してください。sbt 1 の感想も @scala_sbt で待ってます。