IntelliJ IDEA 2026.1 Help

チュートリアル: Bazel 入門

Bazel(英語) は、Google が開発したオープンソースのビルドおよびテストツールです。 複数の言語とプラットフォームにまたがる複雑な依存関係を持つ大規模なコードベースを管理するように設計されています。 Bazel は、コードのコンパイル、依存関係のリンク、テストの実行、アーティファクトのデプロイのプロセスを自動化します。

このチュートリアルは、IntelliJ IDEA で Bazel を使い始めるのに役立ちます。 このチュートリアルを完了すると、以下のことが可能になります。

  • 新しい Bazel プロジェクトを作成する

  • Bazel プロジェクトの構造と用語を理解する

  • リポジトリの名前を変更する

  • プロジェクトに Java ソースを追加する

  • プロジェクトをビルドして実行する

  • Kotlin ソースを含むパッケージを追加し、Java コードから呼び出す

  • JAR ビルドアーティファクトを取得する

  • プロジェクトビューの使い方を学ぶ

前提条件

このチュートリアルでは、 Bazel プラグインのみが必要です。

Bazel プラグインをインストールする

  1. Ctrl+Alt+S を押して設定を開き、 プラグイン を選択します。

  2. Marketplace タブを開き、 Bazel プラグインを見つけて、 インストール をクリックします。

  3. プラグインを有効にするには、IDE を再起動します。

プロジェクトの作成

  1. IntelliJ IDEA を起動してください。

    'ようこそ' 画面が開いたら、「新規プロジェクト 」をクリックします。

    それ以外の場合は、メインメニューの ファイル | 新規 プロジェクト に移動します。

  2. プロジェクトに名前を付け、ビルドシステムとして Bazel を選択します。

    新規プロジェクトダイアログ
  3. (オプション) このプロジェクトをバージョン管理したり、後で GitHub に公開したりする場合は、 Git リポジトリの作成 をチェックします。

  4. 作成(C) をクリックします。

IntelliJ IDEA はプロジェクトファイルを生成します。 その後、Bazel と同期しますが、これには少し時間がかかる場合があります。

プロジェクトの構造と用語

Bazel を初めてお使いになる方のために、プロジェクトの概要を簡単にご紹介します。 Bazel プロジェクトの構築方法を定義する主要な概念とファイルについて説明します。 これらの概念とファイルについては、チュートリアルの後半で詳しく説明します。

Bazel をすでに理解している場合は、このセクションをスキップできます。

メインリポジトリ

ここで取り上げているプロジェクトは メインリポジトリと呼ばれます。 Bazel 用語では、 リポジトリとはソフトウェアの構築に使用されるファイルの集合を指します。

Java アプリケーションを構築しているため、コンパイラー実行可能ファイルやコード依存関係などの他のリポジトリも必要になります。

ワークスペース

ワークスペースとは、メインリポジトリの構築に必要なすべてのリポジトリのコレクションを指す用語です。

モジュール

このプロジェクトはリポジトリであるだけでなく、 モジュールでもあります。 モジュールとは、Bazel における依存関係管理の単位です。 モジュールは MODULE.BAZEL ファイルで定義されます。

プロジェクトでは、 MODULE.BAZEL ファイルはモジュール宣言で始まり、モジュールの名前とバージョンを設定します。

module( name = "null", version = "0.1.0", )

ワークスペースを bzlmod (Bazel の組み込み依存関係管理システム)の Bazel モジュールとして宣言します。 リポジトリが後にレジストリに公開される場合、この宣言により、Maven のアーティファクト座標とほぼ同等の一意の ID が付与されます。 これにより、他の Bazel プロジェクトがそれを依存関係として使用できるようになります。

次に、 MODULE.BAZEL は、Java 言語と外部 JVM 依存関係を操作するための依存関係を指定します。

bazel_dep(name = "rules_java", version = "8.10.0") bazel_dep(name = "rules_jvm_external", version = "6.7")

どちらの依存関係も、必要なファイルを含むリポジトリをインポートします。 依存関係を追加するには、モジュールを参照します。 モジュールを参照すると、単一のリポジトリまたはリポジトリのコレクションがインポートされます。

ファイルの残りの部分では、Maven 拡張機能を読み込み、Maven Central のライブラリを指定し、生成されたリポジトリを @maven という名前でワークスペースに公開します。

maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( name = "maven", artifacts = [ "junit:junit:4.13.2", ], repositories = [ "https://repo1.maven.org/maven2", ], ) use_repo(maven, "maven")

生成されたリポジトリは、推移的な依存関係も含めて、 除外ディレクトリ ビューで確認できます。

パッケージ

パッケージは Bazel ビルドプロセスの単位です。 パッケージはパッケージディレクトリ内の BUILD.BAZEL ファイルによって識別されます。

プロジェクトには 2 つの Bazel パッケージがあります: 1 つはソースコード用、もう 1 つはテスト用です。

プロジェクトビュー内の 2 つの BUILD.BAZEL ファイル

パッケージには、独自の BUILD.BAZEL ファイルを持つサブディレクトリを除くすべてのサブディレクトリが含まれます。

ソースコードパッケージの BUILD.BAZEL には次のものが含まれています。

load("@rules_java//java:defs.bzl", "java_binary")

load() ステートメントは、 defs.bzl ファイルからシンボル(java_binary など)をインポートします。 defs.bzl は、 bazel_dep() を介して MODULE.BAZEL ファイルにインポートしている @rules_java 外部リポジトリから取得されます。

シンボルをインポートしたら、この BUILD.BAZEL ファイルで使用できます。

package(default_visibility = ["//visibility:public"])

package 組み込み関数はパッケージのメタデータを設定します(現時点では可視性のみ)。 この場合、テストからパッケージを参照する必要があるため、パッケージの可視性は public です。

java_binary( name = "Main", main_class = "org.example.Main", srcs = glob(["**/*.java"]), )

java_binary ルール呼び出しは、 Main というビルドターゲットを定義します。 これは、パッケージ内の Java ソースファイルから JAR ファイルをビルドします。 main_class 属性は、アプリケーションのメインクラスを指定します。 srcs 属性は、JAR に含めるソースファイルを指定します。

テストパッケージ用の BUILD.BAZEL も同様ですが、JUnit 用とテスト対象パッケージ用の 2 つの依存関係が追加されます。

java_test( name = "tests", srcs = glob(["**/*.java"]), test_class = "org.example.MainTest", deps = [ "//src/main/org/example:Main", "@maven//:junit_junit", # JUnit 4 dependency from Maven ], )

依存関係座標では、 @maven はリポジトリ名、 junit_junit はアーティファクト名です。

インポートしたリポジトリを確認する

インポートされたモジュールは、プロジェクト内の 1 つ以上のリポジトリに対応しています。 プロジェクトで使用されているリポジトリは、 bazel-{project name}/external フォルダーで確認できます。

プロジェクトビューの外部依存関係

BUILD.BAZEL ファイルを確認すると、 外部},{ フォルダー内のリポジトリ数よりも依存関係の数が少ないことがわかります。 これは、インポートされた各モジュールが複数のモジュールに依存する可能性があるためです。 Bazel はこのような推移的な依存関係を認識し、自動的にインポートします。

Bazel ターゲットを実行する

プロジェクトの変更を進める前に、実際にビルドして実行できることを確認しましょう。 確認方法はいくつかあります。 このチュートリアルでは、 Bazel ツールウィンドウを使用します。

  1. 右側のサイドバーで、 Bazel アイコンをクリックします。 または、メインメニューから 表示 | ツールウィンドウ | Bazel を選択します。

    右側のサイドバーにある Bazel ツールウィンドウアイコン

    これにより、 Bazel ツールウィンドウが開き、 BUILD.BAZEL ファイルで定義されているターゲットが一覧表示されます。

  2. Bazel ツールウィンドウで、 Main ターゲットを右クリックし、 実行 を選択します。

    Bazel ツールウィンドウでメインターゲットを右クリックするとメニューが表示されます

あるいは、メインメソッドが現在エディターの目の前にある場合は、ガターアイコンを使用してそれを実行できます。

メインクラスの近くのガターアイコンをクリックするとメニューが表示されます

リポジトリの名前を変更して変更を同期する

概要で説明したように、 install() 呼び出しは解決されたアーティファクトごとに外部 Bazel リポジトリを生成します。

maven.install( name = "maven", artifacts = [ "junit:junit:4.13.2", ], repositories = [ "https://repo1.maven.org/maven2", ], )

namemaven に設定するため、生成されたリポジトリを @maven (たとえば @maven//:junit_junit) として参照します。

たとえば third-party のように別の名前で参照したいとします。 そのためには、生成されたリポジトリの名前を変更しましょう。

生成されたリポジトリの名前を変更する

  1. MODULE.BAZEL install() および use_repo() 呼び出しの name 属性を変更します。

    maven.install( # before # name = "maven", name = "third-party", # after artifacts = [ "junit:junit:4.13.2", ], repositories = [ "https://repo1.maven.org/maven2", ], ) # before # use_repo(maven, "maven") use_repo(maven, "third-party") # after
  2. BUILD.BAZEL 内のテストパッケージのラベルを変更してください。 これはリポジトリ名が参照されている唯一のパッケージです。 そうでない場合は、他のすべての参照も変更する必要があります。

    java_test( name = "tests", srcs = glob(["**/*.java"]), test_class = "org.example.MainTest", deps = [ "//src/main/org/example:Main", # before # "@maven//:junit_junit", "@third-party//:junit_junit", # after ], )

プロジェクト構成が変更された後、Bazel が変更を反映するには、プロジェクトを再同期する必要があります。

プロジェクトを再同期する

  • Bazel ツールウィンドウのツールバーで、 プロジェクトの再同期 ボタンをクリックします。

    Bazel ツールウィンドウのツールバーにある「プロジェクトの再同期」ボタン

依存関係のソースを追加する

テストパッケージで使用される assertEquals() メソッドの定義 Ctrl+B に移動すると、IntelliJ IDEA によってクラスファイルの逆コンパイルバージョンが提供されます。

JUnit クラスの逆コンパイル版

これは、インポートされたリポジトリにコンパイル済みのクラスしか含まれておらず、ソースコードが含まれていないためです。 Bazel にリポジトリ生成時にソースコードも含めるように指示することで、この問題を修正しましょう。

ソースを追加する

  1. MODULE.BAZEL ファイルを開きます。

  2. 次のように、 install() 呼び出しに fetch_sources パラメーターを追加します。

    maven.install( name = "third-party", artifacts = [ "junit:junit:4.13.2", ], repositories = [ "https://repo1.maven.org/maven2", ], fetch_sources = True )

変更を有効にするには、プロジェクトを再度同期する必要があります。

プロジェクトを再同期する

  • Bazel ツールウィンドウのツールバーで、 プロジェクトの再同期 ボタンをクリックします。

    Bazel ツールウィンドウのツールバーにある「プロジェクトの再同期」ボタン

もう一度 assertEquals() の定義 Ctrl+B に移動してみましょう:

開いた Assert.java ファイルのエディタータブ (逆コンパイルされていない)

これらは、逆コンパイルされたバージョンではなく、JUnit クラスの実際のソースです。

Kotlin を追加

次のステップとして、Kotlin を使用するライブラリを含む別のパッケージを追加しましょう。

Kotlin 依存関係を追加

構築ルールを追加する

  • MODULE.BAZEL ファイルで、Kotlin (rules_kotlin 2.1.8) のルールをインポートするためのステートメントをファイルの先頭に貼り付けます。

    module( name = "null", version = "0.1.0", ) bazel_dep(name = "rules_java", version = "8.10.0") bazel_dep(name = "rules_jvm_external", version = "6.7") bazel_dep(name = "rules_kotlin", version = "2.1.8") maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven") maven.install( name = "third-party", artifacts = [ "junit:junit:4.13.2", ], repositories = [ "https://repo1.maven.org/maven2", ], fetch_sources = True ) use_repo(maven, "third-party")

ルールを追加したら、使用する Kotlin ソースを含むパッケージの追加に進むことができます。

Kotlin ソースを含むパッケージを追加する

  1. プロジェクト ツールウィンドウに切り替えます。 ルートフォルダーを選択した状態で、 Alt+Insert を押すか、右クリックして 新規 | Bazel パッケージ を選択します。

  2. パッケージに名前を付けます (例: kotlin_lib)。

    BUILD.BAZEL ファイルが入った新しいフォルダーが表示されます。

  3. kotlin_lib フォルダーに、次のフォルダー構造を作成します: src/main/com/example/mylib

  4. BUILD.BAZEL を新しく作成した src/main/com/example/mylib に移動し、次のコードを追加します。

    load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") package(default_visibility = ["//visibility:public"]) kt_jvm_library( name = "MyLib", srcs = ["MyLib.kt"] )

    Java パッケージと同様に、このコードは次のようになります。

    • Kotlin Bazel ルール(rules_kotlin )から kt_jvm_library ルールをインポートします。 これにより、この BUILD ファイルで Kotlin JVM ライブラリルールが使用できるようになります。

    • このパッケージ内のターゲットのデフォルトの可視性を public に設定します。これにより、プロジェクト内の他の Bazel パッケージから依存できるようになります。

    • Bazel 内に MyLib という名前の Kotlin JVM ライブラリターゲットを宣言します。 このターゲットは MyLib.kt を JAR ファイルにコンパイルします。

  5. src/main/com/example/mylib で、次の内容を含む MyLib.kt という名前のファイルを作成します。

    package com.example.mylib fun hello() = println("Hello from Kotlin")

再度、変更を適用するにはプロジェクトを再同期する必要があります。

プロジェクトを再同期する

  • Bazel ツールウィンドウのツールバーで、 プロジェクトの再同期 ボタンをクリックします。

    Bazel ツールウィンドウのツールバーにある「プロジェクトの再同期」ボタン

Java から Kotlin を呼び出す

Java パッケージから Kotlin ライブラリを呼び出すには、対応する BUILD.BAZEL ファイルに依存関係を追加する必要があります。

Kotlin パッケージへの依存関係を追加する

  1. プロジェクト ツールウィンドウ Alt+1 を開きます。

  2. src/main/org/example/BUILD.bazel ファイルで、次のように java_binary 呼び出しに deps 引数を追加します。

    java_binary( name = "Main", main_class = "org.example.Main", srcs = glob(["**/*.java"]), deps = ["//kotlin_lib/src/main/com/example/mylib:MyLib"] )

次に、Java パッケージから hello() メソッドを呼び出すことができます。

Java コードを更新する

  • src/main/org/example/Main.java ファイルに、次のように インポート ステートメントとライブラリ関数の呼び出しを追加します。

    package org.example; import com.example.mylib.MyLibKt; // import the library public class Main { public static void main(String[] args) { System.out.println("Hello World!"); MyLibKt.hello(); // call the library function } public static int constant4() { return 4; } }

次に、プロジェクトをもう一度再同期します。

プロジェクトを再同期する

  • Bazel ツールウィンドウのツールバーで、 プロジェクトの再同期 ボタンをクリックします。

    Bazel ツールウィンドウのツールバーにある「プロジェクトの再同期」ボタン

プロジェクトを実行し、 Main Java ターゲットが正しくビルドされ実行されることを確認しましょう。

ビルドと実行

  1. 右側のサイドバーで、 Bazel アイコンをクリックします。 または、メインメニューから 表示 | ツールウィンドウ | Bazel を選択します。

  2. Bazel ツールウィンドウで、 Main ターゲットを右クリックし、 実行 を選択します。

    Bazel ツールウィンドウでメインターゲットを右クリックすると、実行オプションを含むコンテキストメニューが表示されます。

実行 ツールウィンドウが開き、次の出力が表示されます。

INFO: Build completed successfully, 1 total action INFO: Running command line: bazel-bin/src/main/org/example/Main Hello World! Hello from Kotlin

JAR を入手する

これまで、IntelliJ IDEA から直接プロジェクトを実行してきました。 プロジェクトを他の場所で実行するために使用できる JAR ファイルを探しましょう。

  1. プロジェクト ツールウィンドウ Alt+1 を開きます。

  2. 除外ディレクトリ に移動し、 bazel-bin にある、プロジェクトのパッケージ構造を反映したディレクトリを見つけます。 そこに、Kotlin ライブラリとメインの Java アプリケーションパッケージの両方の JAR ファイルがあります。

    プロジェクトツールウィンドウの bazel-bin ディレクトリの内容

プロジェクトビューを変更する

このサンプルプロジェクトは小規模です。 しかし、将来 Bazel を使ってより大きなプロジェクトを構築することになった場合に役立つ機能があります。

Bazel の プロジェクトビューを使うと、不要なパッケージを非表示にし、今必要なものだけに絞って作業できます。 これによりソースのナビゲーションがしやすくなり、開発環境の負荷も軽減されます。これは大規模なモノリポで重要です。

現在 Kotlin ライブラリに取り組んでおり、Java パッケージを非表示にしたいとします。 この機能を実際にテストする機会が得られます。

まず、 .bazelproject ファイルを作成する必要があります。 このファイルは、Bazel のプロジェクトビューに含まれる内容を定義します。

.bazelproject ファイルを作成する

  1. プロジェクト ツールウィンドウ Alt+1 を開きます。

  2. .bazelbsp フォルダーにある .bazelproject ファイルを見つけます。

    .bazelbsp フォルダー内の .bazelproject ファイル

    その近くの 選択済み ラベルは、これが現在使用されているプロジェクトビューであることを示します。

  3. .bazelbsp/.bazelproject ファイルをコピーし、プロジェクトルートに貼り付けます。

  4. 新しく作成された .bazelproject ファイルで、次のように ディレクトリ プロパティを kotlin_lib フォルダーを指すように変更します。

    derive_targets_from_directories: true directories: kotlin_lib
  5. プロジェクト ツールウィンドウで、このファイルを右クリックし、 プロジェクトビューを読み込む を選択します。

    プロジェクトツールウィンドウには kotlin_lib のみが表示されます

    プロジェクト ツールウィンドウには、 kotlin_lib パッケージのみが表示されるようになりました。

2026 年 3 月 30 日