コマンドライン引数(コマンドラインヒキウス)とは | 意味や読み方など丁寧でわかりやすい用語解説
コマンドライン引数(コマンドラインヒキウス)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
コマンドライン引数 (コマンドラインヒキクス)
英語表記
command-line argument (コマンドラインアーギュメント)
用語解説
コマンドライン引数とは、コマンドラインインターフェース(CUI)を通じてプログラムを実行する際に、そのプログラムに対して渡す追加情報や設定値のことである。コンピュータの操作方法には、マウスでアイコンをクリックするグラフィカルユーザーインターフェース(GUI)と、キーボードで文字ベースの命令(コマンド)を入力するCUIの二種類が主に存在する。システムエンジニアの業務では、特にサーバー管理やタスクの自動化においてCUIが多用されるため、コマンドライン引数の理解は不可欠な知識となる。
コマンドラインでプログラムを実行する基本的な形式は、「プログラム名 引数1 引数2 ...」という形になる。ここでプログラム名の後に続く空白で区切られた文字列がコマンドライン引数にあたる。プログラムはこれらの引数を受け取ることで、実行時の動作を動的に変更できる。例えば、あるファイルを別の名前でコピーするコマンドを考えてみる。cp original.txt new.txt というコマンドを実行した場合、cp が実行されるプログラム名であり、「original.txt」と「new.txt」がコマンドライン引数である。cp プログラムは、一つ目の引数を「コピー元のファイル名」、二つ目の引数を「コピー先のファイル名」として解釈し、ファイルコピー処理を実行する。もし引数がなければ、プログラムは何をコピーすればよいのか判断できず、エラーを返すか、ユーザーに追加の入力を求めることになる。このように、引数はプログラムに具体的な処理対象や動作方法を指示するための重要な手段である。
コマンドライン引数には、その役割や形式によっていくつかの種類が存在する。一つは、先ほどの cp コマンドの例のように、引数が指定される順序に意味がある「位置引数」である。プログラムは、何番目にどの引数が来るかを前提として処理を行う。もう一つは「オプション」や「フラグ」と呼ばれるもので、プログラムの特定の機能を有効にしたり、動作を細かく制御したりするために使用される。オプションは通常、ハイフン (-) やダブルハイフン (--) で始まることで、位置引数と区別される。例えば、ファイルやディレクトリの一覧を表示する ls コマンドで、詳細情報を表示する -l オプションや、隠しファイルも含めてすべて表示する -a オプションなどがこれにあたる。-l や -a のようにハイフン一つで始まるものはショートオプションと呼ばれ、複数のショートオプションをまとめて -la のように記述することもできる。一方で、--verbose のようにダブルハイフンで始まるものはロングオプションと呼ばれ、オプションの意味が単語で表現されるため可読性が高い。オプションの中には、値を必要とするものもある。例えば、コンパイラで出力ファイル名を指定する gcc -o my_program main.c というコマンドでは、-o オプションが「出力ファイル名を指定する」という意味を持ち、その直後の my_program がオプションに渡される値となる。値を伴わないオプションは、そのオプションが存在すること自体がオン・オフのスイッチとして機能するため、「フラグ」とも呼ばれる。
プログラム開発の観点から見ると、これらのコマンドライン引数は、プログラムが起動される際にオペレーティングシステムから文字列の配列として渡される。多くのプログラミング言語では、プログラムのエントリーポイントとなるメイン関数(例えばC言語の main 関数)の引数としてこれらを受け取る仕組みが備わっている。C言語では int main(int argc, char *argv[]) というシグネチャが標準的である。argc は argument count の略で、引数の総数(プログラム名自身を含む)が整数で格納される。argv は argument vector の略で、引数の実体である文字列が格納された配列(正確には文字列へのポインタの配列)である。慣例として、argv[0] には実行されたプログラム名が格納され、argv[1] 以降にユーザーが指定した引数が順に格納される。Pythonでは sys モジュールの sys.argv というリストを通じて、同様の情報を取得できる。
プログラムは受け取った文字列の配列を解釈し、自身の動作に反映させる必要がある。この解釈処理を「パース(parsing)」と呼ぶ。位置引数だけなら配列のインデックスでアクセスすれば済むが、ハイフンで始まるオプションや、値を伴うオプション、ショートオプションの組み合わせなど、複雑な引数を手動で正しく処理するコードを書くのは手間がかかり、誤りを生みやすい。そのため、ほとんどのプログラミング言語には、コマンドライン引数のパースを支援するための標準ライブラリやサードパーティ製のライブラリが用意されている。例えば、Pythonには argparse、Goには flag、Javaには Apache Commons CLI といったライブラリが存在する。これらのライブラリを利用することで、開発者はどのようなオプションを受け付けるか、各オプションがどのような値を期待するか、引数が不足している場合のエラーメッセージや、ヘルプメッセージ(使い方)の表示などを、宣言的に記述するだけで簡単に実装できる。これにより、堅牢でユーザーフレンドリーなコマンドラインツールを効率的に開発することが可能となる。システムエンジニアは、既存のコマンドを使いこなすだけでなく、自身で自動化スクリプトなどを作成する機会も多いため、この引数パースの仕組みを理解しておくことは極めて重要である。