<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>ruby-src:doc/irb/irb.rd.ja</title> <meta http-equiv="Content-type" content="text/html; charset=UTF-8" /> <link href="default.css" type="text/css" rel="stylesheet" /> <link href="refm507.html" rel="next" /> <link href="refm505.html" rel="prev" /> <link href="index.html" rel="start" /> </head> <body> <div class="navigator"><span class="navigator">[<a href="index.html">MAIN</a>][<a href="refm543.html">INDEX</a>] [<a href="index.html">TOP</a>][<a href="index.html">UP</a>][<a href="refm505.html"><-PREV</a>][<a href="refm507.html">NEXT-></a>]</span></div> <hr /> <h1><a name="L009981" id="L009981">irbとは?</a></h1> <p>irbはinteractive rubyの略です. rubyの式を標準入力から簡単に入力/実行する ためのツールです.</p> <h1><a name="L009982" id="L009982">起動</a></h1> <pre>% irb</pre> <p>で行ないます. </p> <h1><a name="L009983" id="L009983">使い方</a></h1> <p>irbの使い方は, Rubyさえ知っていればいたって簡単です. 基本的には irb と いうコマンドを実行するだけです. irbを実行すると, 以下のようなプロンプ トが表れてきます. 後は, rubyの式を入れて下さい. 式が完結した時点で実行 されます.</p> <pre>dim% irb irb(main):001:0> 1+2 3 irb(main):002:0> class Foo irb(main):003:1> def foo irb(main):004:2> print 1 irb(main):005:2> end irb(main):006:1> end nil irb(main):007:0> </pre> <p>また, irbはReadlineモジュールにも対応しています. Readlineモジュールが インストールされている時には, それを使うのが標準の動作になります.</p> <h1><a name="L009984" id="L009984">コマンドオプション</a></h1> <pre>irb.rb [options] file_name opts options: -f ~/.irbrc を読み込まない. -m bcモード(分数, 行列の計算ができる) -d $DEBUG をtrueにする(ruby -d と同じ) -Kc ruby -Kcと同じ -r load-module ruby -r と同じ. --verbose これから実行する行を表示する(デフォルト) --noverbose これから実行する行を表示しない --echo 実行結果を表示する(デフォルト) --noecho 実行結果を表示しない --inspect 結果出力にinspectを用いる(bcモード以外はデフォルト). --noinspect 結果出力にinspectを用いない. --readline readlineライブラリを利用する. --noreadline readlineライブラリを利用しない. デフォルトの動作は,</pre> <pre>inf-ruby-mode以外でreadlineライブラリを利用しよう とする. </pre> <pre>--prompt prompt-mode --prompt-mode prompt-mode</pre> <pre>プロンプトモードを切替えます. 現在定義されているプ ロンプトモードは, default, simple, xmp, inf-rubyが 用意されています. デフォルトはdefaultプロンプトモー ドになっています.</pre> <pre>--inf-ruby-mode emacsのinf-ruby-mode用のプロンプト表示を行なう. 特</pre> <pre>に指定がない限り, readlineライブラリは使わなくなる.</pre> <pre>--simple-prompt</pre> <pre>非常にシンプルなプロンプトを用いるモードです.</pre> <pre>--noprompt プロンプト表示を行なわない. --tracer コマンド実行時にトレースを行なう. --back-trace-limit n</pre> <pre>バックトレース表示をバックトレースの頭から n, 後ろ からnだけ行なう. デフォルトは16 </pre> <pre>--irb_debug n irbのデバッグデバッグレベルをnに設定する(利用しな</pre> <pre>い方が無難でしょう).</pre> <pre>-v, --version irbのバージョンを表示する</pre> <h1><a name="L009985" id="L009985">コンフィギュレーション</a></h1> <p>irb起動時に``~/.irbrc''を読み込みます. もし存在しない場合は, ``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''の順にloadを試みます.</p> <p>オプションを設定する代わりに, 以下のコマンドでもデフォルトの動作を設定 できます.</p> <pre>IRB.conf[:IRB_NAME]="irb" IRB.conf[:MATH_MODE]=false IRB.conf[:USE_TRACER]=false IRB.conf[:USE_LOADER]=false IRB.conf[:IGNORE_SIGINT]=true IRB.conf[:IGNORE_EOF]=false IRB.conf[:INSPECT_MODE]=nil IRB.conf[:IRB_RC] = nil IRB.conf[:BACK_TRACE_LIMIT]=16 IRB.conf[:USE_LOADER] = false IRB.conf[:USE_READLINE] = nil IRB.conf[:USE_TRACER] = false IRB.conf[:IGNORE_SIGINT] = true IRB.conf[:IGNORE_EOF] = false IRB.conf[:PROMPT_MODE] = :DEFALUT IRB.conf[:PROMPT] = {...} IRB.conf[:DEBUG_LEVEL]=0 IRB.conf[:VERBOSE]=true</pre> <h2><a name="L009986" id="L009986">プロンプトの設定</a></h2> <p>プロンプトをカスタマイズしたい時には, </p> <pre>IRB.conf[:PROMPT]</pre> <p>を用います. 例えば, .irbrcの中で下のような式を記述します:</p> <pre>IRB.conf[:PROMPT][:MY_PROMPT] = { # プロンプトモードの名前 :PROMPT_I => nil, # 通常のプロンプト :PROMPT_S => nil, # 文字列などの継続行のプロンプト :PROMPT_C => nil, # 式が継続している時のプロンプト :RETURN => " ==>%s\n" # リターン時のプロンプト }</pre> <p>プロンプトモードを指定したい時には,</p> <pre>irb --prompt my-prompt</pre> <p>でそのプロンプトモードで起動されます. または, .irbrcに下式を記述しても OKです.</p> <pre>IRB.conf[:PROMPT_MODE] = :MY_PROMPT</pre> <p>PROMPT_I, PROMPT_S, PROMPT_Cは, フォーマットを指定します.</p> <pre>%N 起動しているコマンド名が出力される. %m mainオブジェクト(self)がto_sで出力される. %M mainオブジェクト(self)がinspectされて出力される. %l 文字列中のタイプを表す(", ', /, ], `]'は%wの中の時) %NNi インデントのレベルを表す. NNは数字が入りprintfの%NNdと同じ. 省</pre> <pre>略可能</pre> <pre>%NNn 行番号を表します. %% %</pre> <p>例えば, デフォルトのプロンプトモードは:</p> <pre>IRB.conf[:PROMPT_MODE][:DEFAULT] = { :PROMPT_I => "%N(%m):%03n:%i> ", :PROMPT_S => "%N(%m):%03n:%i%l ", :PROMPT_C => "%N(%m):%03n:%i* ", :RETURN => "%s\n" } </pre> <p>となっています.</p> <p>RETURNは, 現在のところprintf形式です. 将来仕様が変わるかも知れません.</p> <h2><a name="L009987" id="L009987">サブirbの設定</a></h2> <p>コマンドラインオプションおよびIRB.confは(サブ)irb起動時のデフォルトの 設定を決めるもので, `5. コマンド'にあるconfで個別の(サブ)irbの設定がで きるようになっています.</p> <p>IRB.conf[:IRB_RC]にprocが設定されていると, サブirbを起動する時にその procをirbのコンテキストを引数として呼び出します. これによって個別のサ ブirbごとに設定を変えることができるようになります.</p> <h1><a name="L009988" id="L009988">コマンド</a></h1> <p>irb拡張コマンドは, 簡単な名前と頭に`irb_'をつけた名前と両方定義されて います. これは, 簡単な名前がoverrideされた時のためです.</p> <dl> <dt><a name="L009989" id="L009989"><code>exit, <var>quit</var>, <var>irb_exit</var></code></a></dt> <dd> <p>終了する. サブirbの場合, そのサブirbを終了する.</p></dd> <dt><a name="L009990" id="L009990"><code>conf, <var>irb_context</var></code></a></dt> <dd> <p>irbの現在の設定を表示する. 設定の変更は, confにメッセージを送るこ とによって行なえる. </p></dd> <dt><a name="L009991" id="L009991"><code>conf.eval_history = <var>N</var></code></a></dt> <dd> <p>実行結果のヒストリ機能の設定. nnは整数かnilで nn>0 であればその数だけヒストリにためる。nn==0の時は 無制限に記憶する、nilだとヒストリ機能はやめる(デフォルト). </p></dd> <dt><a name="L009992" id="L009992"><code>Conf.back_trace_limit</code></a></dt> <dd> <p>バックトレース表示をバックトレースの頭からn, 後ろからnだけ行なう. デフォルトは16</p></dd> <dt><a name="L009993" id="L009993"><code>conf.debug_level = <var>N</var></code></a></dt> <dd> <p>irb用のデバッグレベルの設定</p></dd> <dt><a name="L009994" id="L009994"><code>conf.ignore_eof = <var>true</var>/<var>false</var></code></a></dt> <dd> <p>^Dが入力された時の動作を設定する. trueの時は^Dを無視する, falseの 時はirbを終了する. </p></dd> <dt><a name="L009995" id="L009995"><code>conf.ignore_sigint= <var>true</var>/<var>false</var></code></a></dt> <dd> <p>^Cが入力された時の動作を設定する. false時は, irbを終了する. trueの 時の動作は以下のようになる:</p> <pre>入力中: これまで入力したものをキャンセルしトップレベルに戻る. 実行中: 実行を中止する.</pre></dd> <dt><a name="L009996" id="L009996"><code>conf.inf_ruby_mode = <var>true</var>/<var>false</var></code></a></dt> <dd> <p>inf-ruby-mode用のプロンプト表示を行なう. デフォルトはfalse.</p></dd> <dt><a name="L009997" id="L009997"><code>conf.inspect_mode = <var>true</var>/<var>false</var>/<var>nil</var></code></a></dt> <dd> <p>インスペクトモードを設定する. true: インスペクトして表示する. false: 通常のprintで表示する. nil: 通常モードであれば, inspect modeとなり, mathモードの時は, non</p></dd> </dl> <pre>inspect modeとなる. </pre> <dl> <dt><a name="L009998" id="L009998"><code>conf.math_mode</code></a></dt> <dd> <p>参照のみ. bcモード(分数, 行列の計算ができます)かどうか?</p></dd> <dt><a name="L009999" id="L009999"><code>conf.use_loader = <var>true</var>/<var>false</var></code></a></dt> <dd> <p>load/require時にirbのfile読み込み機能を用いるモードのスイッチ(デフォ ルトは用いない). このモードはIRB全体に反映される.</p></dd> <dt><a name="L010000" id="L010000"><code>conf.prompt_c</code></a></dt> <dd> <p>ifの直後など, 行が継続している時のプロンプト.</p></dd> <dt><a name="L010001" id="L010001"><code>conf.prompt_i</code></a></dt> <dd> <p>通常のプロンプト.</p></dd> <dt><a name="L010002" id="L010002"><code>conf.prompt_s</code></a></dt> <dd> <p>文字列中などを表すプロンプト.</p></dd> <dt><a name="L010003" id="L010003"><code>conf.rc</code></a></dt> <dd> <p>~/.irbrcを読み込んだかどうか?</p></dd> <dt><a name="L010004" id="L010004"><code>conf.use_prompt = <var>true</var>/<var>false</var></code></a></dt> <dd> <p>プロンプト表示するかどうか? デフォルトではプロンプトを表示する.</p></dd> <dt><a name="L010005" id="L010005"><code>conf.use_readline = <var>true</var>/<var>false</var>/<var>nil</var></code></a></dt> <dd> <p>readlineを使うかどうか? true: readlineを使う. false: readlineを使わない. nil: (デフォルト)inf-ruby-mode以外でreadlineライブラリを利用しよ</p> <pre>うとする. </pre></dd> <dt><a name="L010006" id="L010006"><code>cws, <var>chws</var>, <var>irb_cws</var>, <var>irb_chws</var>, <var>irb_change_workspace</var> [<var>obj</var>]</code></a></dt> <dd> <p>objをselfとする. objが省略されたときは, home workspace, すなわち irbを起動したときのmain objectをselfとする.</p></dd> <dt><a name="L010007" id="L010007"><code>pushws, <var>irb_pushws</var>, <var>irb_push_workspace</var> [<var>obj</var>]</code></a></dt> <dd> <p>UNIXシェルコマンドのpushdと同様.</p></dd> <dt><a name="L010008" id="L010008"><code>popws, <var>irb_popws</var>, <var>irb_pop_workspace</var></code></a></dt> <dd> <p>UNIXシェルコマンドのpopdと同様.</p></dd> <dt><a name="L010009" id="L010009"><code>irb [<var>obj</var>]</code></a></dt> <dd> <p>サブirbを立ちあげる. objが指定された時は, そのobjをselfとする.</p></dd> <dt><a name="L010010" id="L010010"><code>jobs, <var>irb_jobs</var></code></a></dt> <dd> <p>サブirbのリスト</p></dd> <dt><a name="L010011" id="L010011"><code>fg <var>n</var>, <var>irb_fg</var> <var>n</var></code></a></dt> <dd> <p>指定したサブirbにスイッチする. nは, 次のものを指定する.</p> <pre>irb番号 スレッド irbオブジェクト self(irb objで起動した時のobj)</pre></dd> <dt><a name="L010012" id="L010012"><code>kill <var>n</var>, <var>irb_kill</var> <var>n</var></code></a></dt> <dd> <p>サブirbをkillする. nはfgと同じ.</p></dd> <dt><a name="L010013" id="L010013"><code>souce, <var>irb_source</var> <var>path</var></code></a></dt> <dd> <p>UNIXシェルコマンドのsourceと似ている. 現在の環境上でpath内のスクリ プトを評価する.</p></dd> <dt><a name="L010014" id="L010014"><code>irb_load <var>path</var>, <var>prev</var></code></a></dt> <dd> <p>Rubyのloadのirb版.</p></dd> </dl> <h1><a name="L010015" id="L010015">システム変数</a></h1> <dl> <dt><a name="L010016" id="L010016"><code>_</code></a></dt> <dd> <p>前の計算の実行結果を覚えている(ローカル変数).</p></dd> <dt><a name="L010017" id="L010017"><code>__</code></a></dt> <dd> <p>実行結果の履歴を覚えている. __[line_no]で、その行で実行した結果を得ることができる. line_noが負の 時には、最新の結果から-line_no前の結果を得ることができる.</p></dd> </dl> <h1><a name="L010018" id="L010018">使用例</a></h1> <p>以下のような感じです.</p> <pre>dim% ruby irb.rb irb(main):001:0> irb # サブirbの立ちあげ irb#1(main):001:0> jobs # サブirbのリスト #0->irb on main (#<Thread:0x400fb7e4> : stop) #1->irb#1 on main (#<Thread:0x40125d64> : running) nil irb#1(main):002:0> fg 0 # jobのスイッチ nil irb(main):002:0> class Foo;end nil irb(main):003:0> irb Foo # Fooをコンテキストしてirb</pre> <pre># 立ちあげ</pre> <pre>irb#2(Foo):001:0> def foo # Foo#fooの定義 irb#2(Foo):002:1> print 1 irb#2(Foo):003:1> end nil irb#2(Foo):004:0> fg 0 # jobをスイッチ nil irb(main):004:0> jobs # jobのリスト #0->irb on main (#<Thread:0x400fb7e4> : running) #1->irb#1 on main (#<Thread:0x40125d64> : stop) #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop) nil irb(main):005:0> Foo.instance_methods # Foo#fooがちゃんと定義さ</pre> <pre># れている</pre> <pre>["foo"] irb(main):006:0> fg 2 # jobをスイッチ nil irb#2(Foo):005:0> def bar # Foo#barを定義 irb#2(Foo):006:1> print "bar" irb#2(Foo):007:1> end nil irb#2(Foo):010:0> Foo.instance_methods ["bar", "foo"] irb#2(Foo):011:0> fg 0 nil irb(main):007:0> f = Foo.new #<Foo:0x4010af3c> irb(main):008:0> irb f # Fooのインスタンスでirbを</pre> <pre># 立ちあげる.</pre> <pre>irb#3(#<Foo:0x4010af3c>):001:0> jobs #0->irb on main (#<Thread:0x400fb7e4> : stop) #1->irb#1 on main (#<Thread:0x40125d64> : stop) #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop) #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running) nil irb#3(#<Foo:0x4010af3c>):002:0> foo # f.fooの実行 nil irb#3(#<Foo:0x4010af3c>):003:0> bar # f.barの実行 barnil irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# jobのkill nil irb(main):009:0> jobs #0->irb on main (#<Thread:0x400fb7e4> : running) nil irb(main):010:0> exit # 終了 dim% </pre> <h1><a name="L010019" id="L010019">使用上の制限</a></h1> <p>irbは, 評価できる時点(式が閉じた時点)での逐次実行を行ないます. したがっ て, rubyを直接使った時と, 若干異なる動作を行なう場合があります.</p> <p>現在明らかになっている問題点を説明します.</p> <h2><a name="L010020" id="L010020">ローカル変数の宣言</a></h2> <p>rubyでは, 以下のプログラムはエラーになります.</p> <pre>eval "foo = 0" foo -- -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError) --- NameError</pre> <p>ところが, irbを用いると</p> <pre>>> eval "foo = 0" => 0 >> foo => 0</pre> <p>となり, エラーを起こしません. これは, rubyが最初にスクリプト全体をコン パイルしてローカル変数を決定するからです. それに対し, irbは実行可能に なる(式が閉じる)と自動的に評価しているからです. 上記の例では, </p> <pre>evel "foo = 0" </pre> <p>を行なった時点で評価を行ない, その時点で変数が定義されるため, 次式で 変数fooは定義されているからです.</p> <p>このようなrubyとirbの動作の違いを解決したい場合は, begin...endで括って バッチ的に実行して下さい:</p> <pre>>> begin ?> eval "foo = 0" >> foo >> end NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0> (irb):3 (irb_local_binding):1:in `eval'</pre> <h2><a name="L010021" id="L010021">ヒアドキュメント</a></h2> <p>現在のところヒアドキュメントの実装は不完全です. </p> <h2><a name="L010022" id="L010022">シンボル</a></h2> <p>シンボルであるかどうかの判断を間違えることがあります. 具体的には式が完了 しているのに継続行と見なすことがあります.</p> <hr /> <div class="navigator"><span class="navigator">[<a href="index.html">MAIN</a>][<a href="refm543.html">INDEX</a>] [<a href="index.html">TOP</a>][<a href="index.html">UP</a>][<a href="refm505.html"><-PREV</a>][<a href="refm507.html">NEXT-></a>]</span></div> </body> </html>