プロジェクトにおける反復タスクの自動化に関して、Makefile や Just といったツールが頻繁に使用されます。Makefileは数十年にわたって標準的なツールとなっていますが、Justはよりユーザーフレンドリーなアプローチによる最新の代替手段を提供します。

どちらのツールがニーズに最適か判断するために、両者の主な違いを詳しく見ていきましょう。

1. 構文:シンプルさ vs. 複雑さ

Makefile
 

  • 構文は厳格で、インデントにはタブ(スペースではない)を使用するなど、特定のルールが必要です。
     
  • ターゲットとコマンドは、初心者にとって分かりにくいことがよくあります。
     

Makefileタスクの例:

build:
    @echo "Building the project..."
    gcc -o app main.c

注記:タブを使用し忘れると、Makefileが壊れ、分かりにくいエラーが発生する可能性があります。

 

Just
 

  • モダンで分かりやすい構文を使用します。
     
  • インデントにはスペースを使用でき、読み書きが容易になります。
     

Justタスクの例:

build:
    echo "Building the project..."
    gcc -o app main.c

2. クロスプラットフォーム互換性

Makefile
 

  • Unix系システム(Linux/macOS)にネイティブです。
     
  • Windowsで実行するには、追加のツール(例:GNU Make)が必要で、セットアップが複雑になる可能性があります。
     

Just
 

  • すぐに使えるクロスプラットフォームです。
     
  • 追加の依存関係なしに、Linux、macOS、Windowsでシームレスに動作します。

3. 変数:使いやすさ

Makefile
 

  • 変数は=で定義され、$(...)を使用して参照されます。
     
  • デフォルト値や複雑なロジックの処理に関する柔軟性が限られています。


Makefile変数の例:

NAME = app

build:
    @echo "Building $(NAME)..."
    gcc -o $(NAME) main.c

Just
 

  • 変数は:=で定義され、{{...}}を使用して参照されます。
     
  • デフォルト値や補間を含む、より高度なユースケースをサポートします。
     

Just変数の例:

name := "app"

build:
    echo "Building {{name}}..."
    gcc -o {{name}} main.c

4. タスクの依存関係

Makefile
 

  • タスク間の依存関係を定義し、正しい順序で実行できるようにします。

Makefileの依存関係の例:

build: clean
    @echo "Building the project..."
    gcc -o app main.c

clean:
    @echo "Cleaning up..."
    rm -f app

 

Just
 

  • 依存タスクをリストするだけで依存関係を定義できます。
     
  • Justはそれらを自動的に正しい順序で実行します。
     

Justの依存関係の例:

build: clean
    echo "Building the project..."
    gcc -o app main.c

clean:
    echo "Cleaning up..."
    rm -f app

5. 引数とデフォルト値

Makefile
 

  • 引数は環境変数として渡す必要があり、構文が直感的ではありません。

Makefile引数の例:

build:
    @echo "Building with mode: $(MODE)"

実行コマンド:

make build MODE=debug

 

Just
 

  • デフォルト値を持つ組み込み引数をサポートし、シンプルで明示的になります。

Just引数の例:

build mode="release":
    echo "Building with mode: {{mode}}"

実行コマンド:

just build mode=debug

6. 可読性と保守性

Makefile
 

  • 厳格な構文ルールとモジュール性の欠如により、大規模プロジェクトの保守が困難です。
     
  • エラーメッセージは、特にタブの欠落などの構文エラーの場合、分かりにくいことがあります。
     

Just
 

  • 複雑なプロジェクトでも、クリーンで保守が容易です。
     
  • 何が問題だったのかを明確に示す、役立つエラーメッセージを提供します。

7. ツールとインストール

Makefile
 

  • ほとんどのUnix系システム(Linux/macOS)にプリインストールされています。
     
  • Windowsの場合は追加のセットアップが必要です。
     

Just

  • インストールする必要がありますが、cargo、brew、scoopなどのパッケージマネージャーを使用すると、プロセスは簡単です。

インストール例:

# macOSでHomebrewを使用してインストール
brew install just

# Linux/macOSでCargoを使用してインストール
cargo install just

どちらを使用するべきですか?

makefile vs justfile

結論

Unixシステムを使用している場合は、Makefileが依然として適切な選択肢かもしれません。最新の開発ワークフローでは、Justは、よりシンプルで直感的な代替手段を提供し、クロスプラットフォームのサポートと拡張機能が強化されています。

使いやすさ、可読性、保守性を重視するチームやプロジェクトでは、特にJustへの移行が有益です - 大企業は簡単にそうすることはできませんが、私たち(スタートアップ)は迅速に適応できます. 

Makefileをjustfileに変換する際の支援、またはJustの機能に関するより詳細な情報が必要ですか? お知らせください!

Justの問題にご注意ください - https://github.com/casey/just/issues