JavaでMakefileライクな自動化スクリプトを書く方法【初心者でもわかるタスクランナー入門】

Java

はじめに

「毎回同じコマンドを打つのが面倒…」
「ビルド、テスト、起動をまとめて一発でやりたい」
「Makefileみたいな仕組みをJavaで作れないの?」

このように感じたことはありませんか?

Javaエンジニアとして成長していくと、**“プログラムを書く力”と同じくらい“自動化する力”**が重要になります。

なぜなら、プロの現場ではこうだからです。

  • テストは毎回自動で回る
  • ビルドはワンコマンド
  • デプロイも自動
  • チーム全員が同じ操作で動かせる

この記事では、

  • Makefileライクな自動化とは何か
  • Javaで実現する方法
  • GradleやMavenとの違い
  • Javaだけでタスクランナーを作る方法
  • 実務で使えるサンプルコード

を、小学生でもわかる言葉で丁寧に解説します。

そして最後に、なぜJavaが自動化でも強いのかをお伝えします。


Makefileライクな自動化とは?

そもそもMakefileとは?

Make は、
「決まった作業をまとめて実行する仕組み」です。

たとえばこんな感じです。

build:
	javac Main.java

run:
	java Main

これで、

make build
make run

と打つだけで実行できます。

つまり、

  • コマンドをまとめる
  • 作業に名前をつける
  • 順番を決められる

これがMakefileライクの正体です。


JavaでMakefileライクにする方法は?

大きく分けて次の方法があります。


方法その一:Gradleを使う

Gradle は、Javaでよく使われるビルドツールです。

特徴

  • タスクという概念がある
  • 依存関係を定義できる
  • チーム開発向き

例:

tasks.register("hello") {
    doLast {
        println "Hello, Task!"
    }
}

実行:

gradle hello

向いている人

  • すでにGradleプロジェクト
  • チームで大規模開発
  • CIと連携したい

方法その二:Mavenを使う

Apache Maven は宣言型ビルドツールです。

特徴:

  • ライフサイクル中心
  • 設定重視
  • 追加タスクはやや複雑

Mavenは「ビルド管理」には強いですが、
雑多なタスク管理は少し工夫が必要です。


方法その三:JavaでCLIツールを作る(おすすめ)

ここからが本番です。

Makefileライクを本当に再現するなら、

Javaで「taskコマンド」を作る

のが一番わかりやすいです。


Javaでタスクランナーを作ってみよう

目標

こんなコマンドを作ります。

java TaskRunner build
java TaskRunner test
java TaskRunner all

そして、

  • build → コンパイル
  • test → テスト実行
  • all → build → test

と順番に動きます。


サンプルコード(コピペOK)

import java.io.IOException;

public class TaskRunner {

    public static void main(String[] args) throws Exception {
        if (args.length == 0) {
            System.out.println("Usage: java TaskRunner [build|test|all]");
            return;
        }

        String task = args[0];

        switch (task) {
            case "build":
                build();
                break;
            case "test":
                test();
                break;
            case "all":
                build();
                test();
                break;
            default:
                System.out.println("Unknown task: " + task);
        }
    }

    private static void build() throws IOException, InterruptedException {
        System.out.println("Building...");
        ProcessBuilder pb = new ProcessBuilder("javac", "Main.java");
        pb.inheritIO();
        Process p = pb.start();
        p.waitFor();
    }

    private static void test() {
        System.out.println("Running tests...");
        System.out.println("All tests passed!");
    }
}

ここが重要ポイント

ProcessBuilderが最強

Java標準APIの ProcessBuilder を使えば、

  • 外部コマンド実行
  • 終了コード取得
  • ログ制御

ができます。

これがMakefileの代わりになります。


さらに進化させる

依存関係を作る

private static void all() throws Exception {
    build();
    test();
}

これだけで順番実行です。

失敗したら止める

int exitCode = p.waitFor();
if (exitCode != 0) {
    System.exit(exitCode);
}

Javaで自動化するメリット

ここが大事です。

型安全

シェルより安全。

クロスプラットフォーム

WindowsでもMacでも同じコード。

チームでレビュー可能

Javaコードだからレビューしやすい。


実務でよくあるタスク例

  • コード整形
  • テスト実行
  • jar作成
  • Dockerビルド
  • データ初期化

全部Javaから呼べます。


Gradleとの使い分け

状況おすすめ
ビルド中心Gradle
雑務自動化自作CLI
大規模運用Gradle + CLI

なぜJavaは自動化でも強いのか?

Javaは

  • 長年使われている
  • 企業案件が多い
  • 保守性が高い

つまり、

「消えない技術」

です。


自動化できるエンジニアは強い

自動化できる人は、

  • 生産性が高い
  • ミスが少ない
  • チームに貢献できる

だから評価されます。


もっと本気でJavaを極めたい人へ

まずは独学で基礎を固めましょう。

👉 絶対にJavaプログラマーになりたい人へ。
https://amzn.asia/d/3E1CYbv

それでも、

  • コードレビューしてほしい
  • 実務レベルを知りたい
  • 転職したい

という人は、

👉 サイゼントアカデミー
https://academy.cyzennt.co.jp

本気でJavaエンジニアを目指す人のための環境があります。


まとめ

JavaでMakefileライクな自動化を実現する方法は複数あります。

  • Gradleを使う
  • Mavenを使う
    • JavaでCLIを作る

おすすめは、

Javaで自分専用のタスクランナーを作ること。

これができると、あなたはもう一段上のエンジニアです。

ここまで読んでくださったあなたへ。

Javaは、学べば学ぶほど武器になります。

まずは手を動かしてください。
自動化を作ってみてください。

そして、

本気でプロになりたいなら、
行動を始めましょう。

あなたのエンジニア人生は、ここからです。

コメント

タイトルとURLをコピーしました