今までの解説で既にいくつか登場してきているのであるが、Rubyには『組み込み関数』というものが準備されている。
『今までの解説で既にいくつか』といわれても、さてどのことであるかと疑問に思われる方もいるかもしれないので、具体的に挙げておくと、

puts
print

などの、標準出力に文字を吐き出す関数だ。今までなんの断りもなくこれらを登場させていたので、これは一体なんだろうかと不思議に思われていたかもしれない。Rubyはご存知なくても、他のプログラミング言語の経験があれば、「ああもしかしてこのputsやprintは、標準出力のための関数なのだろうな。それが証拠にコンソールになにやら表示されているし」というところであろうか。

プログラミング言語には、普通『組み込み関数』が準備されている。なぜそのようなものが準備されているのかというと、答えは簡単で、それがないと何もできない、とまではいかないまでも、相当機能が制限される。

なぜならば、キーボードや外部ファイルからデータを取り込むことができないし、結果をコンソールやファイルに出力することができない。これら外部とのインターフェースを司る部分は、ふつう組み込み関数で提供されているからだ。

もしそれがないとすれば、これは、プログラムとして相当致命的な弱点である。というか全然使い物にならない。

起動されたら、あらかじめ内部に定義されているデータだけを処理し、その結果を誰に教えることもなく秘匿し、終了したら全てを忘れてしまうのだ。

そのようなプログラム、何もできないわけではないけれども、何の役にも立たないといってよいだろう。
また、これは言語によって差異はあるが、定型的な処理、例えば数学的な意味での関数などを提供していることが多いので、これらが存在しないとしたら、全て自分で処理を実装しなければならないのだ。
であるから、『組み込み関数』というのは、まず、プログラムがプログラムとして存在できる最低限の基本的機能と、プログラマの負担を軽減するためのサービス、即ち『えぇー!?こんなことまで自分で実装しなきゃいけないのか?』と文句を言わせない程度のサービス的機能を提供するものと考えてよい。

さて、便宜上『組み込み関数』と表現したが、Rubyにおいて『組み込み関数』と呼ばれているものは、実は『kernel』というモジュールに定義されているメソッドなのである。これは、Rubyのプログラム内のどこからでもメソッド名だけで呼びさせるので、一見して他の言語の関数と同じように見えるわけだ。

Rubyの組み込み関数にはどのようなものが準備されているのか、Rubyリファレンスマニュアルから抜粋してみよう。抜粋するだけでも、こんなにあったのかと疲れてしまうが、みなさんそれぞれリファレンスマニュアルを熟読吟味し、できれば実際にプログラムを作って実行させてみていただきたいと思う。

※注意…|文字は、@WIKIのtableタグ生成用に予約されているので全角となっています。従って、コピーペーストするとエラーになります)

` str 文字列 str を外部コマンドとして実行し、その出力を文字列として返します。
Array (arg) arg.to_ary か arg.to_a を呼び出して引数を配列に変換した結果を返します。
Float(arg) 引数を浮動小数点数(Float)に変換した結果を返します。
Integer(arg) 引数を整数に変換した結果を返します。
String(arg) arg.to_s を呼び出して引数を文字列に変換した結果を返します。
abort Ruby プログラムを異常終了します。exit との違いは、呼び出し時に $! が nil でなければその例外のメッセージを標準エラー出力に出力することと、プログラムの終了ステータスが EXIT_FAILURE(ほとんどの環境では1) 固定であることです。
at_exit { .... } 与えられたブロックをインタプリタ終了時に実行します。
autoload(const_name, feature) 定数 const_name を最初に参照した時に feature を require するように設定します。
binding 変数・メソッドなどの環境情報を含んだ Binding オブジェクトを生成して返します。通常、eval の第二引数として使います。
caller([level]) level 段上(引数省略時は、1)の呼び出し元の情報を $@ の形式のバックトレース(文字列の配列)として返します。トップレベルでは空の配列を返します。caller の戻り値を $@ に代入することで例外の発生位置を設定できます。
callcc {|cont| .... } 直前の状態(ローカル変数の定義、スタックフレーム)を cont に記憶してブロックを実行します。cont は、Continuation クラスのインスタンスで、Continuation#call メソッドを実行することでいつでも記憶した状態を継続することができます。
catch(tag) {|tag| .... } ブロックを実行してその値を返します。ブロックの実行中に tag と同じ名前の throw が行われた場合は、その throw の第二引数を戻り値とします。
chop 組み込み変数 $_ を最後の文字を取り除いたものにします(終端が"\r\n"であれば2文字取り除きます)。
chop! 組み込み変数 $_ を最後の文字を取り除いたものにします(終端が"\r\n"であれば2文字取り除きます)。 chop! は文字列そのものを変更しその結果を返します
chomp([rs]) 組み込み変数 $_ を rs で指定される末尾の文字列を取り除いたものにします。 rsのデフォルト値は$/(入力レコードセパレータを表す文字列)
chomp!([rs]) 組み込み変数 $_ を rs で指定される末尾の文字列を取り除いたものにします。chomp! は文字列そのものを変更しその結果を返します。
eval(expr[, binding[, fname[, lineno=1]]]) 文字列 expr を Ruby プログラムとして評価してその結果を返します。第2引数に Proc オブジェクトまたは Binding オブジェクトを与えた場合、そのオブジェクトを生成したコンテキストで文字列を評価します。
exec(command) command で指定されたコマンドを実行します。プロセスの実行コードはそのコマンド(あるいは shell。後述)になるので、起動に成功した場合、この関数からは戻りません。起動に失敗し、ruby インタプリタに制御が戻った場合は、例外 Errno::EXXX が発生します。この形式では command が shell のメタ文字 (* ? {} [] <> () ~ & | \ $ ; ' ` " \n)を含む場合、 shell 経由で実行されます。そうでなければインタプリタから直接実行されます。
exec(program[, arg1[, arg2[, ...]]]) 常に shell を経由せずに実行されます。この場合には空白や shell のメタキャラクタもそのまま program の引数に渡されます。先頭の引数が2要素の配列であった場合、第1要素の文字列が実際に起動するプログラムのパスであり、第2要素が「みせかけ」のプログラム名になります。
exit([status]) Rubyプログラムの実行を終了します。status として整数が与えられた場合、その値を Ruby コマンドの終了ステータスとします。デフォルトの終了ステータスは 0 です。
exit!([status]) 整数 status を終了ステータスとして、Ruby プログラムの実行を終了します。デフォルトの終了ステータスは -1 です。
fork fork(2) システムコールを使ってプロセスの複製を作ります。親プロセスでは子プロセスのプロセスIDを、子プロセスでは nil を返します。
fork { ... } fork(2) システムコールを使ってプロセスの複製を作ります。生成した子プロセスでブロックを評価します。
gets([rs]) Ruby インタプリタ実行時に引数として与えられたファイル(なければ標準入力)をつなげた仮想的なファイル(組み込み変数 $< や ARGF でアクセスできる) から一行読み込んで、文字列を返します。ファイルの終りに到達した時には nil を返します。
readline([rs]) gets と同じ働きをしますが、ファイルの最後まで読むと例外 EOFError を発生させます。
global_variables プログラム中で定義されているグローバル変数(`$'で始まる変数)名の配列を返します。
gsub(pattern[, replace]) 組み込み変数 $_ の指す文字列内で pattern にマッチする部分を全て replace に置き換えた文字列を返します。
gsub!(pattern[, replace]) $_ の指している文字列そのものを書き換えます。
gsub(pattern) {|matched| ... } 引数 replace が省略された時にはイテレータとして動作し、ブロックを評価した結果で置換を行います。ブロックには引数としてマッチした文字列が渡されます。
gsub!(pattern) {|matched| ... } $_ の指している文字列そのものを書き換えます。
block_given? メソッドにブロックが与えられている時には真、そうでない時に偽を返します。
load(file[, priv]) Ruby プログラム file をロードして実行します。 file が絶対パスのときは file からロードします。 file が相対パスのときは組み込み変数 $: に示されるパスを順番に探し、最初に見付かったファイルをロードします。このとき、$: の要素文字列の先頭文字が `~' (チルダ) だと、環境変数 HOME の値に展開されます。
local_variables 現在のスコープで定義されているローカル変数名の配列を返します。
loop { ... } (中断されない限り)永遠にブロックの評価を繰り返します。
open(file[, mode[, perm]]) file をオープンして、File オブジェクトを返します。
p(obj, [obj2, ...]) obj を人間に読みやすい形で出力します。
print([arg1[, arg2, ...]]) 引数を順に出力します。引数が与えられない時には変数 $_ の値を出力します。
printf([port, ]format[, arg[, ...]]) C 言語の printf と同じように、format に従い引数を文字列に変換して $> に出力します。
proc { ... } 与えられたブロックから手続きオブジェクト (Proc のインスタンス) を生成して返します
lambda { ... } proc { ... }と同じ
proc ブロックが指定されなければ、呼び出し元のメソッドで指定されたブロックを手続きオブジェクトとして返します。
lambda procと同じ
putc(ch) 文字 ch を $> に出力します。 ch が数字なら 0 ~ 255 の範囲の対応する文字を出力します。ch が文字列なら、その先頭の文字を出力します。
puts([obj[, obj2[, ....]]] ) obj と改行を順番に $> に出力します。引数がなければ改行のみを出力します。
raise 同スレッドの同じブロック内で最後に rescue された例外オブジェクト ($!) を再発生させます。そのような例外が存在しないときは例外 RuntimeError を発生させます。
raise(exception) 引数に指定された例外クラスまたは例外オブジェクトを発生させます。
raise(message) 引数の文字列をメッセージとする RuntimeError 例外を発生させます。
raise(error_type, message [, backtrace]) 第一引数で指定された例外を、第二引数に与えたメッセージとともに発生させます。第三引数は例外発生時のスタックトレースで、caller の戻り値と同じ形式でなければいけません。
fail(error_type, message [, backtrace]) raise(error_type, message [, backtrace])と同様です。
rand([max=0]) 0 以上 max 未満の範囲の整数の乱数を発生します。まだsrand が呼ばれていなければ自動的に srand を呼び出します。max に nil または 0 を指定すると 0 以上 1 未満の実数値 Float で乱数を与えます。
readlines([rs]) コマンドライン引数として与えられたファイル(なければ標準入力) をつなげた仮想的なファイル(ARGFを全て読み込んで、その各行を要素としてもつ配列を返します。行の区切りは引数 rs で指定した文字列になります。rs のデフォルト値は組み込み変数 $/ の値です。
require(feature) Ruby ライブラリ feature をロードパス $: 上から探し、同じライブラリがまだロードされていなかった時だけロードします。
set_trace_func(trace_proc) Ruby インタプリタがプログラムを実行する過程で、メソッドの呼び出しや式の評価などのイベントが発生する度に手続きオブジェクト trace_proc を実行します。標準添付のデバッガ、トレーサ、 プロファイラはこの組み込み関数を利用して実現されています。
sleep([sec]) sec 秒だけプログラムの実行を停止します。sec には浮動小数点数も指定できます。sec が省略された場合、他スレッドからの Thread#run などで明示的に起こさない限り永久にスリープします。戻り値は実際に停止していた秒数(整数)です。
split([sep[, limit]]) _ の示す文字列をパターン sep によって limit 個の文字列に分割し、その配列を返します。
sprintf(format ... ) format 文字列を C 言語の sprintf と同じように解釈し、引数をフォーマットした文字列を返します。 format 指定子は C 言語の sprintf が受け付けるものとほとんど同じです。
format(format ... ) sprintf(format ... )と同様です。
srand([seed]) rand の乱数の種を設定し、古い初期値を返します (ただし最初だけは0を返します)。初期値が省略された時には現在の時刻やプロセスID、srand を呼び出した回数、また可能なら /dev/urandom から読み出したデータなどを元に種を作ります。
sub(pattern[, replace]) 組み込み変数 $_ の指す文字列内で pattern にマッチする最初の部分を replace に置き換えた文字列を返します。
sub!(pattern[, replace] $_ の指している文字列そのものを書き換えます。
sub(pattern) {|matched| ... } イテレータとして動作し、ブロックを評価した結果で置換を行います。ブロックには引数としてマッチした文字列が渡されます。
sub!(pattern) {|matched| ... } $_ の指している文字列そのものを書き換えます。
system(command) command を実行して、成功した時(子プロセスが終了ステータス 0 で終了した時)には真を、失敗した時(コマンドが実行できなかった場合も含む)には偽を返します。終了ステータスは変数 $? で参照できます。
system(program[, arg1[, arg2[, ...]]]) 外部プログラムを実行します。
test(cmd, file1 [, file2]) ファイルテストを行います。
throw(tag[, value=nil]) 同じ tag を指定した catch のブロックの終わりまで(メソッドを越えて)脱出します。もし同じ tag で待っている catch が存在しない場合は NameError でスレッドが終了します。tag は文字列またはシンボルです。 value は catch の戻り値になります。
trace_var(varname, hook) グローバル変数 varname への代入のフックを登録します。 varname は文字列か Symbol で指定します。
untrace_var(varname[, hook]) グローバル変数 varname に関連付けられたフックを解除します。hook が指定された場合にはそのフックだけを解除します。hook が省略されるかまたは nil を与えた場合は varname のフックを全て解除します。解除されたフックの配列を返します。
warn(mesg) mesg と改行を順番に $stderr に出力します。組み込み変数 $VERBOSE が nil のときは何も出力しません。
最終更新:2009年03月13日 20:31