HOWTO · Batch

バッチスクリプトにコメントを追加する

このチュートリアルでは、バッチスクリプトにコメントを追加する方法を包括的に解説します。REM コマンドや二重コロンなどの利用可能な方法と、実行をリダイレクトする GOTO がコメントの方法ではない理由を学びます。自分や他の人にとってコードを分かりやすくする、効果的なコメントの書き方のベストプラクティスも紹介します。

このページの内容

Windows Batch(.bat または .cmd)ファイルにコメントを追加する場合は、最も明確で信頼性の高い方法として REM を使います。:: で始まる行もコメントとしてよく使われますが、ラベルとして解析されるため、配置には注意が必要です。どちらの形式も意図を説明するためのもので、スクリプト本来の動作を変えるものではありません。

Batchのコメント形式を選ぶ:REM または ::

REM は、注釈を示すためのコマンドです。標準的な方法であり、括弧で囲まれたコマンドグループ内にコメントを書く場合にも、まず選ぶとよい形式です。:: はラベルに似た慣用表現です。CMD は専用のコメントコマンドではなく、ラベルとして扱います。独立したメモには簡潔ですが、ラベルはブロックの解析や制御フローに影響することがあります。予測しやすいスクリプトにするには、周囲の構文が複雑なときは REM を使いましょう。

どちらの形式も Windows CMD Batch 用です。PowerShell、Bash、その他のシェルで使える汎用的なコメント構文ではありません。できるだけコメントは独立した行に書き、コマンドが必要な理由や前提条件が伝わる内容にしましょう。

REM または :: で1行コメントを追加する

次の Windows CMD の例は、comments.bat として保存して使える小さなサンプルです。コマンドの前に REM の行と :: の行を1つずつ置き、実際の使い方を比べられるようにしています。このサンプルは正常に実行され、下に示す2行のステータスメッセージを出力しました。変更されていないコードブロックと出力ブロックに表示されるラベルは英語のままです。

@echo off
REM Describe the next action for the person maintaining this file.
echo Preparing the report
:: This label-like line is commonly used as a short note.
echo Report ready
Preparing the report
Report ready

CMD が REM コマンドに到達すると、注釈のテキストは命令として実行されません。:: の行はラベルとして扱われますが、見た目上は同じようにコメントとして使われることがよくあります。どちらの注釈の後にあるコマンドも実行されます。スクリプトが実際には行わない処理を、コメントで行ったかのように示さないようにしてください。

コマンドグループ内やコマンドの後にコメントを書く

コマンドの間にコメントを置くことができます。たとえば、IF 行とその後に続くコマンドの間に REM の行を入れられます。括弧で囲まれたグループ内では、REM を独立した行に置き、特に対応する括弧がない括弧など、CMD によるグループ全体の解析に影響する文字をコメントに含めないでください。CMD は括弧付きのコマンドブロックを解析するとき、REM 行の中も含めて %name% を展開することがあります。注釈自体は表示されず破棄されますが、変数展開によってブロックの解析が変わることがあります。コメントは簡潔な文章にし、パーセント記号を使った式は避けてください。ブロック内のコメントは単純な内容に保ちましょう。

コマンドの後に短い注釈を付ける場合は、& で区切って REM を使います。たとえば、echo Preparing the report & REM this command prints the status のように書けます。アンパサンドは同じ行で次のコマンドを始めますが、どの状況でもすべてのコメント形式を安全に使えるようにするものではありません。コマンドの末尾に :: を付けるのは避けてください。また、ELSE 節を対応する IF コマンドに結び付けておく必要がある場合、その IF の後にコメントを置かないでください。条件構文、コマンド区切り、括弧付きグループが同じ行にある場合は、コメントを独立した行へ移しましょう。こうするとコマンドの構造が読みやすくなり、解析時の予期しない動作を減らせます。

複数行のメモを安全に書く

Batch には、ブロックコメント用の標準構文がありません。複数行のメモを書く最も簡単な方法は、各行の先頭に REM(または、単純な独立メモの場合は ::)を付けることです。コマンドグループの周辺では、実際のコマンドであり用途も明確な REM を繰り返し使うのがおすすめです。

GOTO はラベルへ処理を移すため、スクリプトの制御フローを変えます。コメント構文ではないので、ブロックをコメントとして扱う目的には使わないでください。複数行のメモには、各行で REM を繰り返します。

一般的な用途には REM を選び、周囲の構造が単純な独立ラベル風のメモに限って :: を使いましょう。条件付きコマンドやグループ化されたコマンドの周辺では、コメントを独立した行に置いてください。これらの例は Windows CMD Batch ファイル向けです。他のシェルのコメント構文としてそのまま使うことはできません。