【プログラミングしてみよう37】Javaでコマンドライン引数を使う

Java

前回はFilesクラスを使ってファイルの列挙・操作を学びました。 今回は「コマンドライン引数」について解説します。 これまで java クラス名 と実行してきましたが、実行時に値を渡す「コマンドライン引数」を使うことで、プログラムの動作を外から制御できるようになります。

コマンドライン引数とは

Javaのプログラムを実行するとき、main メソッドには String[] args という引数があります。これがコマンドライン引数を受け取るための配列で、実行時にプログラム名の後ろに書いた値が自動的に入ってきます。

java クラス名 引数1 引数2 引数3

たとえば java MyApp hello world と実行した場合、args[0]"hello"args[1]"world" が入ります。これを使うことで、設定値や処理対象のファイル名などをプログラムの外から指定できるようになります。

サンプルコード(引数の基本)

ファイル作成

「Java25」フォルダに ArgsTest.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

public class ArgsTest {
    public static void main(String[] args) {
        System.out.println("引数の数: " + args.length);

        if (args.length == 0) {
            System.out.println("引数が渡されていません");
            return;
        }

        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "] = " + args[i]);
        }
    }
}

コンパイル

javac ArgsTest.java

実行(引数なし)

java ArgsTest

実行結果は次のようになります。

引数の数: 0
引数が渡されていません

実行(引数あり)

java ArgsTest ぱんまる たろう はなこ

実行結果は次のようになります。

引数の数: 3
args[0] = ぱんまる
args[1] = たろう
args[2] = はなこ

サンプルコード(引数を活用した実用例)

引数で計算の種類と数値を指定できる電卓プログラムを作ります。以前switch文で作った電卓のコマンドライン版です。

ファイル作成

「Java25」フォルダに ArgCalc.java という名前でファイルを作成します

コード入力

以下のコードを入力します。

public class ArgCalc {
    public static void main(String[] args) {
        if (args.length != 3) {
            System.out.println("使い方: java ArgCalc <数値1> <演算子> <数値2>");
            System.out.println("例: java ArgCalc 10 + 5");
            return;
        }

        double num1;
        double num2;

        try {
            num1 = Double.parseDouble(args[0]);
            num2 = Double.parseDouble(args[2]);
        } catch (NumberFormatException e) {
            System.out.println("エラー: 数値を正しく入力してください");
            return;
        }

        String operator = args[1];
        double result;

        switch (operator) {
            case "+":
                result = num1 + num2;
                break;
            case "-":
                result = num1 - num2;
                break;
            case "*":
                result = num1 * num2;
                break;
            case "/":
                if (num2 == 0) {
                    System.out.println("エラー: 0で割ることはできません");
                    return;
                }
                result = num1 / num2;
                break;
            default:
                System.out.println("エラー: 使用できる演算子は + - * / です");
                return;
        }

        System.out.println(num1 + " " + operator + " " + num2 + " = " + result);
    }
}

コンパイル

javac ArgCalc.java

実行

java ArgCalc 10 + 5

実行結果は次のようになります。

10.0 + 5.0 = 15.0

他にも試してみましょう。

java ArgCalc 10 / 3
10.0 / 3.0 = 3.3333333333333335
java ArgCalc 10 +
使い方: java ArgCalc <数値1> <演算子> <数値2>
例: java ArgCalc 10 + 5

コードの解説

args.length で渡された引数の数を確認できます。引数の数が想定と違う場合は使い方を表示して return で終了するのが丁寧な設計です。

Double.parseDouble(args[0]) で文字列を double に変換しています。Integer.parseInt()double 版で、数値以外の文字列が渡された場合は NumberFormatException が発生するため、try-catchで対処しています。

* 演算子はターミナルで特殊な意味を持つ場合があります。シェルによっては * がファイル名のワイルドカードとして解釈されてしまうため、引用符で囲んで渡すと安全です。

java ArgCalc 10 "*" 5

コマンドライン引数はすべて String として渡されるため、数値として扱いたい場合は Integer.parseInt()Double.parseDouble() で変換する必要があります。スペースで区切られた引数はそれぞれ別の要素になり、スペースを含む値を1つの引数として渡したい場合は引用符で囲みます。

java ArgsTest "ぱんまる たろう" はなこ

この場合、args[0]"ぱんまる たろう"args[1]"はなこ" になります。

まとめ

コマンドライン引数を使うことで、実行時に外から値を渡してプログラムの動作を制御できるようになります。args.length で引数の数を確認し、args[0]args[1] で値を取り出し、必要に応じて parseIntparseDouble で数値に変換するという基本の流れを覚えておきましょう。引数の数が想定外の場合は使い方を表示して終了するようにすると、使いやすいプログラムになります。ファイルパスや設定値を引数で受け取るパターンは実際のコマンドラインツール開発でも広く使われています。

2026/07/16(木) ぱんまる

コメント

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