Contents
sbt Reference Manual
始める sbt
sbt のインストール
豆知識
macOS への sbt のインストール
cs setup を用いた sbt のインストール
JDK のインストール
SDKMAN!
ユニバーサルパッケージからのインストール
サードパーティパッケージを使ってのインストール
Homebrew
Windows への sbt のインストール
cs setup を用いた sbt のインストール
JDK のインストール
ユニバーサルパッケージからのインストール
Windows インストーラ
サードパーティパッケージを使ってのインストール
Scoop
Linux への sbt のインストール
cs setup を用いた sbt のインストール
SDKMAN からのインストール
JDK のインストール
ユニバーサルパッケージからのインストール
Ubuntu 及びその他の Debian ベースの Linux ディストリビューション
Red Hat Enterprise Linux 及びその他の RPM ベースのディストリビューション
Gentoo
例題でみる sbt
最小 sbt ビルドを作る
sbt シェルを起ち上げる
sbt シェルを終了させる
プロジェクトをコンパイルする
コード変更時に再コンパイルする
ソース・ファイルを書く
以前のコマンドを実行する
ヘルプを読む
アプリを実行する
sbt シェルから ThisBuild / scalaVersion をセットする
セッションを build.sbt へと保存する
プロジェクトに名前を付ける
ビルドの再読み込み
libraryDependencies に toolkit-test を追加する
テストを実行する
差分テストを継続的に実行する
テストを書く
テストが通るようにする
ライブラリ依存性を追加する
Scala REPL を使う
サブプロジェクトを作成する
全てのサブプロジェクトを列挙する
サブプロジェクトをコンパイルする
サブプロジェクトに toolkit-test を追加する
コマンドをブロードキャストする
hello が helloCore に依存するようにする
uJson を使って JSON をパースする
sbt-native-packger プラグインを追加する
配布用の .zip ファイルを作る
version を設定する
Switch scalaVersion temporarily
dist タスクのインスペクト
バッチモード
sbt new コマンド
クレジット
ディレクトリ構造
ベースディレクトリ
ソースコード
sbt ビルド定義ファイル
ビルドサポートファイル
ビルド成果物
バージョン管理の設定
実行
sbt シェル
バッチモード
継続的ビルドとテスト
よく使われるコマンド
タブ補完
sbt シェル履歴
IDE との統合
Metals のビルドサーバとして sbt を用いる
VS Code でのインタラクティブ・デバッグ
sbt セッションへのログイン
IntelliJ IDEA へのインポート
IntelliJ IDEA でのインタラクティブ・デバッグ
IntelliJ IDEA のビルドサーバとして sbt を用いる (上級者向け)
sbt セッションへのログイン
Metals フロントエンドとして Neovim を用いる (上級者向け)
定義へのジャンプ
ホバリング
エラーの列挙
Neovim でのインタラクティブ・デバッグ
sbt セッションへのログイン
ビルド定義
sbt バージョンの指定
ビルド定義とは何か
build.sbt はどのように settings を定義するか
キー
種類
組み込みのキー
カスタムキー
タスクキーかセッティングキーか
タスクとセッティングの定義
タスクとセッティングの型
sbt シェルにおけるキー
build.sbt 内の import 文
Bare .sbt ビルド定義
ライブラリへの依存性を加える
マルチプロジェクト・ビルド
複数のサブプロジェクト
ビルドワイド・セッティング
共通のセッティング
依存関係
集約
クラスパス依存性
コンフィギュレーションごとのクラスパス依存性
サブプロジェクト間の依存性
デフォルトルートプロジェクト
プロジェクトの切り替え
共通のコード
補足: サブプロジェクトビルド定義ファイル
タスク・グラフ
用語に関して
他のタスクへの依存性の宣言
.value 呼び出しのインライン化
タスクのインスペクト
他のセッティングに依存したタスクの定義
他のセッティングに依存したセッティングの定義
そもそも build.sbt DSL は何のためにある?
Make 入門
Rake
ハイブリッド・フローベースプログラミングの利点
まとめ
スコープ
キーに関する本当の話
スコープ軸
サブプロジェクト軸によるスコープ付け
依存性コンフィギュレーション軸によるスコープ付け
タスク軸によるスコープ付け
Zero スコープ成分
ビルド定義からスコープを参照する
sbt シェルからのスコープ付きキーの参照方法
sbt シェルでのスコープ付きキーの表記例
スコープの検査
いつスコープを指定するべきか
ビルドレベル・セッティング
スコープ委譲
値の追加
既存の値に追加する: += と ++=
セッティングが未定義の場合
他のキーの値を基にしたタスク
依存性を用いた追加: += と ++=
スコープ委譲 (.value の照会)
スコープ委譲のルール
ルール 1: スコープ軸の優先順位
ルール 2: タスク軸の委譲
ルール 3: コンフィギュレーション軸の検索パス
ルール 4: サブプロジェクト軸の検索パス
スコープ軸の優先順位、再び
inspect コマンドは委譲スコープを列挙する
.value 参照 vs 動的ディスパッチ
ライブラリ依存性
アンマネージ依存性(Unmanaged Dependencies)
マネージ依存性(Managed Dependencies)
libraryDependencies キー
%% を使って正しい Scala バージョンを入手する
Ivy revision
Resolvers
デフォルトの resolver のオーバーライド
コンフィギュレーションごとの依存性
プラグインの使用
プラグインとは何か
プラグインの宣言
auto plugin の有効化と無効化
グローバル・プラグイン
利用可能なプラグイン
カスタムセッティングとタスク
キーを定義する
タスクを実装する
タスクの実行意味論
タスク依存性の非重複化
終了処理タスク
素の Scala を使おう
プラグイン化しよう
ビルドの整理
sbt は再帰的だ
ライブラリ依存性を一箇所にまとめる
いつ .scala ファイルを使うべきか
auto plugin を定義する
まとめ
sbt: コア・コンセプト
上級者への注意
付録: bare .sbt ビルド定義
bare .sbt ビルド定義とは何か
(0.13.7 以前) 設定は空白行で区切る
インフォメーション
変更点
sbt 1.0.0
互換性に影響のある新機能、バグ修正、その他の変更点
各論
プラグインとベストプラクティス
一般的なベストプラクティス
project/ と ~/.sbt/ の使い分け
ローカル環境の設定
.sbtrc
生成されるファイル
ハードコードしない
ファイルの変更をしない
絶対パスを利用する
パーサコンビネータ
sbt プラグインをテストする
scripted test framework
ステップ 1: snapshot
ステップ 2: SbtPlugin
ステップ 3: src/sbt-test
ステップ 4: スクリプトを書く
ステップ 5: スクリプトを実行する
ステップ 6: カスタムアサーション
ステップ 7: テストをテストする
ステップ 8: インスパイアされる
How to
ソースファイル/リソースファイルの生成
ソースコードの生成
リソースの生成
逐次実行
Def.sequential を用いて逐次タスクを定義する
project/build.properties
project/style.sbt
build.sbt
Def.taskDyn を用いて動的タスクを定義する
project/build.properties
project/style.sbt
build.sbt v1
build.sbt v2
インプットタスクの後で何かする
src/main/scala/Greeting.scala
build.sbt v1
build.sbt v2
Def.inputTaskDyn を用いた動的インプットタスクの定義
build.sbt v1
build.sbt v2
コマンドを用いた逐次実行
Archived pages
Hello, World
sbt new コマンド
アプリの実行
sbt シェルの終了
ビルド定義
Contents in Depth
Combined Pages
Learn
Download
Get Involved