4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株式会社ゆめみの23卒Advent Calendar 2023

Day 1

JUnit 5のビルドシステムを探る(その1)

Last updated at Posted at 2023-11-30
YUMEMI New Grad Advent Calendar 2023

Gradleの標準DSLがKotlinとなってから早くも半年以上が経ちました。

JetBrainsによる紹介ブログ

この記事ではKotlin DSLが使われているプロジェクトである、JUnit 5の設定ファイルについて見ていきます。

JUnit 5のライセンス Eclipse Public License - v 2.0

JUnit 5のリポジトリ

この記事はf5b78f68c6a90dfa63611c7a10027581c5d913baのコミットでの内容をもとにしています。ビルドシステムは随時更新されるため、最新のコードを追いやすいようコードのリンクはmainブランチのものとしています。

概要

  • JUnit 5リポジトリの構成について <この記事>
  • 共通で使われている設定について
  • バージョンの記述について
  • 個々のプロジェクトの設定について

JUnit 5リポジトリの構成について

JUnit 5では junit-jupiter をはじめとする23個のサブプロジェクトが定義されています。リポジトリのルート直下に各サブプロジェクトがディレクトリとして配置されている構造です。
これらのプロジェクトはリポジトリのルートにある settings.gradle.kts から読み込まれています。
各サブプロジェクトの配下にはそのプロジェクトでの設定を記述する <project name>.gradle.kts ファイルが置かれています。個々のプロジェクトで使われる、テストや公開の設定が記述されています。

settings.gradle.kts の設定

このファイルでは主に2つのことが記述されています。

  1. プロジェクトの構成
  2. Build Scanの設定
  3. ビルド時の設定

プロジェクトの構成

settings.gradle.kts にはサブプロジェクトを読み込む設定を記述します。
例えば

include("junit-jupiter-api")

の記述により、junit-jupiter-api のプロジェクトを読み込んでいます。

JUnit 5ではすべてのサブプロジェクトが列挙されています。ここで列挙したプロジェクトたちは rootProject.children で参照され、その後の各プロジェクトの設定ファイルの存在確認に使われています。

またプロジェクト間で共通する内容を記述しているプラグインの読み込みも記述されています。
リポジトリ内に置かれたプラグインの読み込みには includeBuild を使用します。
JUnit 5の settings.gradle.kts には以下のように記述があることから、共通設定は gradle/plugins 配下のファイルに記述されていることがわかります。

includeBuild("gradle/plugins")

Build Scanの設定

Build ScanとはGradleで使用できるビルドの実行記録です。どのようなタスクが実行されたか、どのような依存関係になっているかなどが記録されます。
dependenciesに記述した各種依存関係で、推移的な依存関係の把握や実際に使用されているバージョンについての記録も残ります。どのライブラリが何に依存しているかがよくわかります。
pluginについても同様の依存関係の分析ができます。
また各タスクの所要時間をタイムラインで見られるので、時間のかかっているタスクの把握がしやすいです。並列化の恩恵もよくわかります。

デフォルトの状態では https://scans.gradle.com/ にBuild Scanが公開されます。設定をすることで独自のサーバーに公開するよう設定することもできます。
(個人でお試しされる際には一旦CIなどを利用して、どのような情報がアップロードされるかを確認するのがおすすめです。コンソールのログやビルドの設定の中に個人情報が含まれる可能性があります。デフォルトの状態ではユーザー名やIPが公開されるようになっています)

JUnit 5ではJUnit独自のサーバーにBuild Scanが公開されています。
他にもタグの設定や匿名化の設定がされています。

ビルド時の設定

ビルド時の設定ですが、 settings.gradle.kts にはキャッシュについて記述されています。
JUnit 5ではリモートにビルドのキャッシュが保存されており、複数のマシンで使いまわせるようになっています。
CIでの時間削減に大きく貢献しているようです。

gradle ディレクトリには何が入っているか

JUnit 5のリポジトリ直下のディレクトリは大体がサブプロジェクトなのですが、 gradle はサブプロジェクトではありません。
このディレクトリにはその名の通り gradle で参照するためのファイルが入っています。

特にプロジェクト内で共通に使用されるファイルが入っています。Linterの設定(コードのフォーマットからJavadocのスタイルまで定義されています)やライセンス表記の定義ファイルが置かれています。
また各プロジェクトから参照される共通のプラグインと、依存関係のバージョンをひとまとめにした設定ファイルがあります。

おわりに

この記事ではJUnit 5のリポジトリの構成について見ていきました。
主に settings.gradle.kts で記述されている設定や、 gradle ディレクトリの中身について触れました。
次回は gradle ディレクトリ内で定義されているプラグインについてみていきます。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?