ruby — インタープリタ型オブジェクト指向スクリプト言語
概要
ruby [--copyright] [--version] [-SUacdlnpswvy] [-0[octal]] [-C directory]
[-E external[:internal]] [-F[pattern]] [-I directory] [-K[c]] [-T[level]] [-W[level]]
[-e command] [-i[extension]] [-r library] [-x[directory]] [--{enable|disable}-FEATURE]
[--dump=target] [--verbose] [--crash-report=template] [--] [program_file] [argument ...]
説明
Rubyは、迅速かつ簡単なオブジェクト指向プログラミングのためのインタープリタ型スクリプト言語です。テキストファイルを処理したり、システム管理タスクを実行したりするための多くの機能(Perlと同様)を備えています。シンプルで、わかりやすく、拡張性があります。
オブジェクト指向プログラミングを簡単に行える言語が必要な場合、Perlの煩雑さを好まない場合、またはLISPの概念は好きだが、括弧が多すぎるのが嫌な場合は、Rubyが最適な言語になるかもしれません。
特徴
Rubyの機能は以下のとおりです。
インタープリタ型 Rubyはインタープリタ型言語であるため、Rubyで記述されたプログラムを実行するために再コンパイルする必要はありません。
変数は型を持たない(動的型付け) Rubyの変数には、あらゆる型のデータを格納できます。変数の型を気にする必要はありません。したがって、コンパイル時のチェックは弱くなります。
宣言は不要 Rubyプログラムで変数を使用する際に、宣言を行う必要はありません。変数名は、グローバル、クラス、インスタンス、またはローカルなど、そのスコープを示します。
シンプルな構文 Rubyは、Eiffelの影響を受けたシンプルな構文を持っています。
ユーザーレベルのメモリ管理は不要 Rubyは自動メモリ管理を備えています。どこからも参照されなくなったオブジェクトは、インタープリタに組み込まれたガベージコレクタによって自動的に収集されます。
すべてがオブジェクト Rubyは純粋なオブジェクト指向言語であり、作成当初からそうでした。整数などの基本的なデータもオブジェクトとして扱われます。
クラス、継承、およびメソッド オブジェクト指向言語であるRubyは、クラス、継承、およびメソッドなどの基本的な機能を備えています。
シングルトンメソッド Rubyでは、特定のオブジェクトに対してメソッドを定義できます。たとえば、特定のウィジェットのボタンを押す操作を、ボタンのシングルトンメソッドを定義することで実現できます。また、シングルトンメソッドを使用して独自のプロトタイプベースのオブジェクトシステムを作成することもできます。
モジュールによるミックスイン Rubyは、混乱の原因となる多重継承を意図的に持っていません。代わりに、Rubyには、継承ツリー間で実装を共有する機能があります。これは、しばしば「ミックスイン」と呼ばれます。
イテレータ Rubyには、ループの抽象化のためのイテレータがあります。
クロージャ Rubyでは、手続きをオブジェクト化できます。
テキスト処理と正規表現 Rubyには、Perlのような多くのテキスト処理機能があります。
M17N、文字セットに依存しない
Rubyは多言語プログラミングをサポートします。多くの異なる自然言語で記述され、多くの異なる文字エンコーディングでエンコードされたテキストを、Unicodeに依存せずに簡単に処理できます。
BigNum 組み込みのBigNumを使用すると、たとえばfactorial(400)を計算できます。
リフレクションとドメイン固有言語 クラスはClassクラスのインスタンスでもあります。クラスとメソッドの定義は、1+1と同様に、式です。そのため、プログラムはプログラムを記述および変更できます。したがって、 Rubyの上に独自のプログラミング言語でアプリケーションを記述できます。
例外処理 Java(tm)と同様。
OSへの直接アクセス RubyはほとんどのUnixシステムコールを使用でき、システムプログラミングでよく使用されます。
動的ローディング ほとんどのUnixシステムでは、オブジェクトファイルをRubyインタプリタに動的にロードできます。
豊富なライブラリ Rubyにバンドルされている「組み込みライブラリ」と「標準ライブラリ」に加えて、「gem」と呼ばれる大量のサードパーティライブラリが、パッケージ管理システム「RubyGems」を介して利用できます。RubyGems.org(https://rubygems.org/)にアクセスして、必要なgemを見つけ、GitHub(https://github.com/)を探索して、gemがどのように開発および使用されているかを確認してください。
オプション
Rubyインタプリタは、次のコマンドラインオプション(スイッチ)を受け入れます。これらはperl(1)のものと非常によく似ています。
--copyright 著作権表示を表示し、すぐに終了してスクリプトを実行しません。
--version Rubyインタプリタのバージョンを表示し、すぐに終了してスクリプトを実行しません。
-0[8進数] (数字「ゼロ」)。入力レコードセパレータ($/)を8進数で指定します。
数字が指定されていない場合、null文字がセパレータとして使用されます。他のスイッチは、数字の後に続く場合があります。-00はRubyをパラグラフモードにします。-0777は、Rubyにファイル全体を1つの文字列として読み込ませます(無効な文字の値がないため)。
-C ディレクトリ
-X ディレクトリ Rubyをディレクトリに切り替えます。
-E 外部[:内部]
--encoding 外部[:内部]
デフォルトの外部エンコーディングと内部エンコーディングの値を指定します。値はコロン(:)で区切る必要があります。
内部エンコーディングの値を省略すると、その値(Encoding.default_internal)はnilになります。
--external-encoding=エンコーディング
--internal-encoding=エンコーディング
デフォルトの外部または内部文字エンコーディングを指定します。
-F パターン 入力フィールドセパレータ($;)を指定します。
-I ディレクトリ Rubyにライブラリスクリプトをロードする場所を指示するために使用します。ディレクトリパスは、load-path変数($:)に追加されます。
-K kcode KANJI(日本語)エンコーディングを指定します。スクリプトエンコーディング(__ENCODING__)と外部エンコーディング(Encoding.default_external)のデフォルト値は、指定された値になります。kcodeは、次のいずれかになります。
e EUC-JP
s Windows-31J (CP932)
u UTF-8
n ASCII-8BIT (BINARY)
-S Rubyに、スクリプト名を検索するためにPATH環境変数を使用させます。ただし、スクリプト名がスラッシュで始まる場合は例外です。これは、`#!`をサポートしていないマシンで、以下のように動作するように、`#!`をエミュレートするために使用されます。
#! /usr/local/bin/ruby
# この行は、次の行をRubyのコメントにします。
exec /usr/local/bin/ruby -S $0 $*
一部のシステムでは、$0に常にスクリプトの完全なパス名が含まれているわけではないため、スクリプトを必要に応じて検索するようにRubyに指示する`-S`スイッチが必要です(埋め込みのスペースなどを処理するため)。`${1+"$@"}の方が優れた構造ですが、csh(1)でスクリプトが解釈されている場合には機能しません。
-T[level=1] 指定されたレベル(デフォルトは1)でtaintチェックを有効にします。
-U 内部エンコーディング(Encoding.default_internal)のデフォルト値をUTF-8に設定します。
-W[level=2] 指定されたレベルで詳細モードを有効にします。ただし、先頭でバージョンメッセージは出力しません。レベルは次のとおりです。
0 詳細モードは「サイレント」です。$VERBOSEをnilに設定します。
1 詳細モードは「中」です。$VERBOSEをfalseに設定します。
2(デフォルト)詳細モードは「詳細」です。$VERBOSEをtrueに設定します。-W2は-wと同じです。
-a -nまたは-pオプションとともに使用する場合、自動分割モードを有効にします。自動分割モードでは、各ループの開始時に`$F = $_.split`が実行されます。
--backtrace-limit=num
バックトレースの最大長をnum行に制限します(デフォルトは-1で、制限がないことを意味します)。
-c Rubyにスクリプトの構文をチェックさせ、実行せずに終了させます。構文エラーがない場合、Rubyは「Syntax OK」を標準出力に出力します。
-d
--debug デバッグモードを有効にします。$DEBUGがtrueに設定されます。
-e command コマンドラインからスクリプトを指定し、Rubyに残りの引数からスクリプトファイル名を検索させないように指示します。
-h
--help オプションの概要を出力します。
-i extension インプレース編集モードを指定します。指定した場合、拡張子は古いファイル名に追加され、バックアップコピーが作成されます。例:
% echo matz > /tmp/junk
% cat /tmp/junk
matz
% ruby -p -i.bak -e '$_.upcase!' /tmp/junk
% cat /tmp/junk
MATZ
% cat /tmp/junk.bak
matz
-l (小文字の「l」)。自動行末処理を有効にします。これは、最初に$を$/の値に設定し、次にchomp!を使用して各行を切り詰めることを意味します。
-n Rubyに、スクリプトの周りに次のループを実行させます。これにより、ファイル名引数に対してsed -nまたはawkのような方法で反復処理されます。
while gets
...
end
-p -nオプションとほぼ同じように動作しますが、各ループの最後に変数$_の値をprintします。例:
% echo matz | ruby -p -e '$_.tr! "a-z", "A-Z"'
MATZ
-r library Rubyに、requireを使用してライブラリをロードさせます。-nまたは-pオプションと組み合わせて使用すると便利です。
-s スクリプト名の後に、ファイル名引数または `--` の前に、いくつかのスイッチを解析できるようにします。見つかったスイッチは ARGV から削除され、スクリプト内の対応する変数が設定されます。たとえば、次のようになります。
#! /usr/local/bin/ruby -s
# `-xyz` スイッチで呼び出された場合に "true" を出力します。
print "true\n" if $xyz
-v 詳細モードを有効にします。Ruby は最初にバージョンを出力し、`$VERBOSE` 変数を `true` に設定します。この変数が `true` の場合、いくつかのメソッドは追加のメッセージを出力します。このスイッチが指定され、他のスイッチが存在しない場合、Ruby はバージョンを出力した後、終了します。
-w バージョンメッセージを最初に印刷せずに、詳細モードを有効にします。`$VERBOSE` 変数を `true` に設定します。
-x[directory] スクリプトがメッセージに埋め込まれていることを Ruby に伝えます。先頭の不要な部分は、`#!` で始まり、文字列 `ruby` を含む最初の行が見つかるまで破棄されます。その行にある意味のあるスイッチは適用されます。スクリプトの終わりは、`EOF`、`^D` (Ctrl-D)、`^Z` (Ctrl-Z)、または予約語 `__END__` のいずれかで指定する必要があります。ディレクトリ名が指定されている場合、Ruby はスクリプトの実行前にそのディレクトリに移動します。
-y
--yydebug このオプションは、必ずしも互換性があるとは限りません。
コンパイラ デバッグ モードを有効にします。Ruby は、コンパイル中に多くの内部状態メッセージを出力します。Ruby インタープリタをデバッグする場合にのみ、このスイッチを指定してください。
--disable-FEATURE
--enable-FEATURE 指定された FEATURE を無効化 (または有効化) します。
--disable-gems
--enable-gems RubyGems ライブラリを無効化 (または有効化) します。デフォルトでは、Ruby はインストールされている各 Gem の最新バージョンをロードします。`Gem` 定数は、RubyGems が有効になっている場合は `true`、無効になっている場合は `false` です。
--disable-rubyopt
--enable-rubyopt 環境変数 `RUBYOPT` を無視する (または考慮する) ようにします。デフォルトでは、Ruby はこの変数を考慮します。
--disable-all
--enable-all すべての機能を無効化 (または有効化) します。
--dump=target 情報をダンプします。
指定されたターゲットを出力します。ターゲットは、次のいずれかになります。
version バージョン情報を出力します ( `--version` と同じ)。
usage 簡単な使用方法メッセージを出力します ( `-h` と同じ)。
help 長いヘルプメッセージを表示します ( `--help` と同じ)。
syntax 構文をチェックします ( `-c --yydebug` と同じ)。
または、次のいずれかであり、これらはインタープリタのデバッグを目的としています。
yydebug コンパイラ デバッグ モードを有効にします ( `--yydebug` と同じ)。
parsetree プログラムの Ruby AST のテキスト表現を出力します。
parsetree_with_comment プログラムの Ruby AST のテキスト表現を出力しますが、各ノードに関連する Ruby ソースコードを注釈として追加します。
insns コンパイルされたバイトコード命令のリストを出力します。
insns_without_opt さまざまな最適化が適用される前に、コンパイルされたバイトコード命令のリストを出力します。
--verbose バージョンメッセージを最初に印刷せずに、詳細モードを有効にします。`$VERBOSE` 変数を `true` に設定します。このスイッチが指定され、スクリプト引数 (スクリプトファイルまたは `-e` オプション) が存在しない場合、Ruby は直ちに終了します。
--crash-report=template
クラッシュレポートを保存するパス名のテンプレートを設定します。詳細は RUBY_CRASH_REPORT 環境変数を参照してください。
環境変数
RUBYLIB Rubyのライブラリロードパス(`$`)に追加される、コロンで区切られたディレクトリのリスト。
この環境変数からディレクトリを検索した後、標準のロードパスが検索されます。
例:
RUBYLIB="$HOME/lib/ruby:$HOME/lib/rubyext"
RUBYOPT 追加のRubyオプション。
例:
RUBYOPT="-w -Ke"
`RUBYOPT` に含めることができるのは、`-d`, `-E`, `-I`, `-K`, `-r`, `-T`, `-U`, `-v`, `-w`, `-W`, `--debug`, `--disable-FEATURE`, `--enable-FEATURE` のみです。
RUBYPATH `-S` フラグが指定されたときに、Rubyプログラムを検索するディレクトリのコロンで区切られたリスト。この変数は、`PATH` 環境変数よりも優先されます。
RUBYSHELL システムシェルコマンドへのパス。この環境変数は、mswin32、mingw32、およびOS/2プラットフォームでのみ有効です。この変数が定義されていない場合、Rubyは `COMSPEC` を参照します。
PATH Rubyは、`Kernel#system` を呼び出すときに、`PATH` 環境変数を参照します。
また、RubyGemsが無効になっていない限り、RubyはいくつかのRubyGems関連の環境変数に依存します。以下に示す gem(1) のヘルプを参照してください。
% gem help
GC 環境
Rubyのガベージコレクター(GC)は、固定サイズの「スロット」内のオブジェクトを追跡しますが、各オブジェクトはC標準ライブラリの malloc ファミリー(malloc(3), calloc(3), および realloc(3))によって処理される補助的なメモリ割り当てを持つ場合があります。このドキュメントでは、「ヒープ」とは固定サイズの「スロット」のRubyオブジェクトヒープを指し、「malloc」とは、通常「プロセスヒープ」と呼ばれる補助的な割り当てを指します。したがって、GCをトリガーする方法は少なくとも2つあります。
1 オブジェクトの制限に達した場合。
2 `malloc` の制限に達した場合。
Ruby 2.1では、世代別GCが導入され、制限が若い世代と古い世代に分割され、GCをトリガーする方法がさらに2つ追加されました。
3 古いオブジェクトの制限に達した場合。
4 古い `malloc` の制限に達した場合。
現在、GCは以下の11個の環境変数によって調整できる4つの可能な領域があります。 RUBY_GC_HEAP_INIT_SLOTS 初期割り当てスロット数。すべてのスロットサイズに適用されます。Ruby 2.1で導入され、デフォルトは10000です。
RUBY_GC_HEAP_%d_INIT_SLOTS 特定のヒープ内のスロットの初期割り当て数。
利用可能なヒープは、GC.stat_heap のキーで確認できます。Ruby 3.3で導入されました。
RUBY_GC_HEAP_FREE_SLOTS GCの後に少なくともこの量のスロットを確保します。十分なスロットがない場合は、この数のスロットを割り当てます。Ruby 2.1で導入され、デフォルトは4096です。
RUBY_GC_HEAP_GROWTH_FACTOR ヒープスロットの割り当てレートをこの係数で増やします。Ruby 2.1で導入され、デフォルトは1.8、最小値は1.0(増加なし)です。
RUBY_GC_HEAP_GROWTH_MAX_SLOTS アロケーションレートは、このスロット数に制限され、`RUBY_GC_HEAP_GROWTH_FACTOR` の過剰なアロケーションを防ぎます。 Ruby 2.1 で導入、デフォルト: 0 (制限なし)
RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR 古いオブジェクトの数が R * N よりも多い場合に、完全な GC を実行します。ここで、R はこの係数、N は最後の完全な GC 後の古いオブジェクトの数です。 Ruby 1.1 で導入、デフォルト: 2.0
RUBY_GC_MALLOC_LIMIT malloc ファミリーからの若い世代のアロケーションの初期制限。 この制限に達すると、GC が開始されます。 デフォルト: 16MB
RUBY_GC_MALLOC_LIMIT_MAX `RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR` の過剰な malloc の増加を防ぐために、malloc からの若い世代のアロケーションの最大制限。 Ruby 2.1 で導入、デフォルト: 32MB
RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR 若い世代の malloc 呼び出しの制限を増やし、GC の頻度を減らし、`RUBY_GC_MALLOC_LIMIT_MAX` に達するまで malloc の増加を増やします。 Ruby 1.1 で導入、デフォルト: 1.4、最小: 1.0 (増加なし)
RUBY_GC_OLDMALLOC_LIMIT malloc からの古い世代のアロケーションの初期制限。 この制限に達すると、完全な GC が開始されます。 Ruby 2.1 で導入、デフォルト: 16MB
RUBY_GC_OLDMALLOC_LIMIT_MAX `RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR` の過剰な malloc の増加を防ぐために、malloc からの古い世代のアロケーションの最大制限。 Ruby 2.1 で導入、デフォルト: 128MB
RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR 古い世代の malloc アロケーションの制限を増やし、完全な GC の頻度を減らし、`RUBY_GC_OLDMALLOC_LIMIT_MAX` に達するまで malloc の増加を増やします。 Ruby 2.1 で導入、デフォルト: 1.2、最小: 1.0 (増加なし)
スタックサイズ環境
スタックサイズ環境変数は実装に依存し、Ruby の異なるバージョンによって変更される可能性があります。 VM スタックは純粋な Ruby コードに使用され、仮想マシンによって管理されます。 マシンスタックはオペレーティングシステムによって使用され、その使用状況は C 拡張機能と C コンパイラオプションによって異なります。 これらの値を小さくすると、アプリケーションはより多くの Fiber または Thread を実行できます。 ただし、SystemStackError 例外とセグメンテーションフォルト (SIGSEGV) の発生率が高くなります。 これらの環境変数は Ruby 2.0.0 以降で利用できます。 すべての値はバイト単位で指定します。
RUBY_THREAD_VM_STACK_SIZE スレッドの作成時に使用される VM スタックサイズ。 デフォルト: 32 ビット CPU の場合は 524288、64 ビット CPU の場合は 1048575
RUBY_THREAD_MACHINE_STACK_SIZE スレッドの作成時に使用されるマシンスタックサイズ。 デフォルト: 524288 または 1048575
RUBY_FIBER_VM_STACK_SIZE ファイバーの作成時に使用される VM スタックサイズ。 デフォルト: 65536 または 131072
RUBY_FIBER_MACHINE_STACK_SIZE ファイバーの作成時に使用されるマシンスタックサイズ。 デフォルト: 262144 または 524288
クラッシュレポート環境
RUBY_CRASH_REPORT クラッシュレポートを保存するパス名のテンプレート。 デフォルト: なし
クラッシュレポートファイルの命名規則
テンプレートには、% 指定子を含めることができます。これらは、クラッシュレポートファイルが作成されるときに、以下の値に置き換えられます。
%% 単一の % 文字。
%e 実行ファイルのベース名。
%E 実行ファイルのパス名。スラッシュ (/) は感嘆符 (!) に置き換えられます。
%f プログラム名のベース名、$0。
%F プログラム名のパス名、$0。スラッシュ (/) は感嘆符 (!) に置き換えられます。
%p ダンプされたプロセスの PID。
%t ダンプ時刻。1970-01-01 00:00:00 +0000 (UTC) からの秒数で表現されます。
%NNN 8進数の文字コード。
テンプレートの末尾にある単一の % は、コアファイル名から削除されます。また、% の後に上記の文字以外の文字が続く場合も削除されます。テンプレート内の他のすべての文字は、コアファイル名の文字通りの一部になります。テンプレートには '/' 文字を含めることができ、これはディレクトリ名の区切り文字として解釈されます。
クラッシュレポートをプログラムにパイプで渡す
ファイルの最初の文字がパイプ記号 (|) の場合、残りの行は、実行するプログラム(またはスクリプト)のコマンドラインとして解釈されます。
パイプテンプレートは、スペースで分割されて引数のリストになり、その後でテンプレートパラメーターが展開されます。
関連項目
[https://www.ruby-lang.org/] 公式ウェブサイト。
[https://www.ruby-toolbox.com/] Rubyライブラリの包括的なカタログ。
バグの報告
セキュリティ脆弱性は、メールで報告してください。報告された問題は、修正後に公開されます。
その他のバグや機能リクエストは、Ruby Issue Tracking System (https://bugs.ruby-lang.org/) で報告できます。このシステムでセキュリティ脆弱性を報告しないでください。これは、脆弱性をすぐに公開してしまうためです。
開発者
Rubyは、松本行弘氏によって設計および実装されました。
Rubyへの貢献者は、[https://github.com/ruby/ruby/graphs/contributors] を参照してください。