What is it, naokirin?

Ruby 3.3 のコマンドラインオプション

前回の記事では、Rubyの特殊変数について書きました。

naokirin.hatenablog.com

その中で、コマンドラインオプションで変更される変数も紹介しました。 今回は、コマンドラインオプション自体をまとめてみます。

このページの内容は、Ruby 3.3.0での情報をもとにしています。

挙動変更

オプション 説明 補足
-0数字 入力コードセパレータ($/)を8進数で指定する -00 : パラグラフモード($/=""と同じ)
-0777 : ファイルの内容を一度ですべて読み込む($/=nil
-a 自動スプリットモードをONにする。ONになると、各ループの先頭で以下が実行される
$F = $_.split
-n、-pが指定されていない場合は機能しない
--backtrace-limit=num バックトレースの最大行数を指定する
-C directory スクリプト実行前に指定されたディレクトリに移動する
-E ex[:in]
--encoding ex[:in]
デフォルトの外部エンコーディングと内部エンコーディング: 区切りで指定する
--external-encoding encoding デフォルトの外部エンコーディングを指定する
--internal-encoding encoding デフォルトの内部エンコーディングを指定
--enable feature featureを有効にする gems : rubygems (無効にするのはデバッグ専用、default: enabled)
error_highlight : error_highlight (default: enabled)
did_you_mean : did_you_mean (default: enabled)
rubyopt : RUBYOPT 環境変数 (default: enabled)
frozen-string-literal : 全ての文字列リテラルをfreeze (default: disabled)
jit : JIT (default: disabled)
mjit : MJIT (default: disabled)
yjit : YJIT (default: disabled)
--disable feature を無効化にする
-e script スクリプトを指定する このオプションを指定すると引数ですプリプとファイル名を取らない。
複数指定した場合は各スクリプトの間に改行を挟んで解釈する
-Fregexp 入力フィールドセパレータ($;)に regexp を設定する
-i[extension] 引数で指定されたファイルの内容を置き換える。拡張子を省略するとバックアップされずに変更されたファイルだけが残る Win32では拡張子は省略できない
-I directory ファイルをロードするパスを追加する $: に追加される
-l 行末の自動処理を行う $\$/ と同じ値に設定し、printでの出力時に改行を付加するようにする。また、-n または -p が指定されていると gets で読み込まれた各行の最後に対して String#chomp!を実行する
-n スクリプトが以下で囲まれているように動作する
<br>while gets<br> ...<br>end<br>
-p -n の挙動に追加で各ループの最後に変数 $_ の値を出力する
-r feature スクリプト実行前にfeature で指定されたライブラリを Kernel.#require する
-s スクリプト名に続く、 - で始まる引数を解釈して、同名のグローバル変数に値を設定する -- の引数以降は解釈を行なわない。該当する引数は Object::ARGV から取り除かれる
-S スクリプト名が / で始まっていない場合、環境変数 PATHの値を使ってスクリプトを探す
-x[directory] メッセージ中のスクリプトを取り出して実行する。ディレクトリ名を指定すると、スクリプト実行前に指定されたディレクトリに移動する スクリプトを読み込む際に、 #! で始まり ruby の文字列を含む行を読み飛ばす。

デバッグ、冗長モード

オプション 説明 補足
-d
--debug
デバッグモードで実行する $DEBUG = true にする
-v これ以外に引数があるとき、冗長モードにする。これ以外の引数がないときはバージョンを表示した後に実行を終了する $VERBOSE = true にする
--verbose 冗長モードにする $VERBOSE = true にする
-w バージョンの表示を行わずに冗長モードになる
-W[level]
-W:category
冗長モードを三段階のレベルで指定する Warning.[] に設定される

【level】
-W0 : 警告を出力しない
-W1 : 重要な警告のみ出力(デフォルト)
-W2 or -W : すべての警告を出力する

【category】
deprecated と experimental は別々に設定できる
-W:deprecated : 非推奨な機能を使用した際に警告を出力する
-W:no-deprecated : 非推奨な機能を使用した際に警告を出力しない(デフォルト)
-W:experimental : 実験的な機能を使用した際に警告を出力する(デフォルト)
-W:no-experimental : 実験的な機能を使用した際に警告を出力しない

コンパイル実行

オプション 説明 補足
-c コンパイルのみ実行 文法エラーがなければ、"Syntax OK"が出力される
-y
--yydebug
コンパイラデバッグモード スクリプトを内部表現にコンパイルする時の構文解析の過程を表示する

その他

オプション 説明 補足
--copyright 著作権表示をする
--version Rubyのバージョンを表示する
-h コマンドラインオプションの概要を表示する
--help -h より詳しいコマンドラインオプションの概要を表示する

JITオプション(実験的)

オプション 説明 補足
--jit JITを有効にする YJITが有効な環境ならYJIT、それ以外ではMJITを有効にする

YJITオプション

オプション 説明 補足
--yjit デフォルトの設定でYJITを有効にする
--yjit-[option] 指定した設定でYJITを有効にする
--yjit-exec-mem-size=num MiB単位で実行可能メモリブロックのサイズを指定する(デフォルト: 256)
--yjit-call-threshold=num JITが起動する呼び出し回数を指定する(デフォルト: 10) テスト用
--yjit-max-versions=num ベーシックブロックごとのバージョンの最大数を指定する(デフォルト: 4)
--yjit-greedy-versioning 貪欲なバージョニングモードを指定にする(デフォルト: disabled)

MJITオプション

オプション 説明 補足
--mjit デフォルトの設定でMJITを有効にする
--mjit-[option] 指定した設定でMJITを有効にする
--mjit-warnings JITの警告の出力を有効にする
--mjit-debug JITデバッグを有効にする。指定されていれば、cflags を追加する 非常に遅くなる
--mjit-wait 毎回JITコンパイルが終わるまで待 テスト用
--mjit-save-temps 一時ファイルを $TMP か /tmp の中に残す テスト用
--mjit-verbose=num ログレベルがnum以下のログが標準エラー出力に出力される(デフォルト: 0)
--mjit-max-cache=num キャッシュに残すJITされたメソッドの最大個数を指定する(デフォルト: 10000)
--mjit-min-calls=num JITが起動する呼び出し回数を指定する(デフォルト: 10000) テスト用

まとめ

Rubyコマンドラインオプションをまとめてみました。

あまり使わないオプションも多いですが、シェルのような使い方をするときには便利なコマンドが多くあることを知ることができたので、必要に応じて活用してみたいなと思いました。