1irb -- interactive ruby
2				$Release Version: 0.9.5 $
3			   	$Revision: 33181 $
4			   	by Keiju ISHITSUKA(keiju@ruby-lang.org)
5=begin
6= irbとは?
7
8irbはinteractive rubyの略です. rubyの式を標準入力から簡単に入力/実行する
9ためのツールです.
10
11= 起動
12
13  % irb
14
15で行ないます. 
16
17= 使い方
18
19irbの使い方は, Rubyさえ知っていればいたって簡単です. 基本的には irb と
20いうコマンドを実行するだけです. irbを実行すると, 以下のようなプロンプ
21トが表れてきます. 後は, rubyの式を入れて下さい. 式が完結した時点で実行
22されます.
23
24  dim% irb
25  irb(main):001:0> 1+2
26  3
27  irb(main):002:0> class Foo
28  irb(main):003:1>  def foo
29  irb(main):004:2>    print 1
30  irb(main):005:2>  end
31  irb(main):006:1> end
32  nil
33  irb(main):007:0> 
34
35また, irbはReadlineモジュールにも対応しています. Readlineモジュールが
36インストールされている時には, それを使うのが標準の動作になります.
37
38= コマンドオプション
39
40  irb.rb [options] file_name opts
41  options:
42  -f		    ~/.irbrc を読み込まない.
43  -m		    bcモード(分数, 行列の計算ができる)
44  -d                $DEBUG をtrueにする(ruby -d と同じ)
45  -Kc		    ruby -Kcと同じ
46  -r load-module    ruby -r と同じ.
47  --verbose	    これから実行する行を表示する(デフォルト)
48  --noverbose	    これから実行する行を表示しない
49  --echo	    実行結果を表示する(デフォルト)
50  --noecho	    実行結果を表示しない
51  --inspect	    結果出力にinspectを用いる(bcモード以外はデフォルト). 
52  --noinspect	    結果出力にinspectを用いない.
53  --readline	    readlineライブラリを利用する.
54  --noreadline	    readlineライブラリを利用しない. デフォルトの動作は,
55		    inf-ruby-mode以外でreadlineライブラリを利用しよう
56		    とする. 
57  --prompt prompt-mode
58  --prompt-mode prompt-mode
59		    プロンプトモードを切替えます. 現在定義されているプ
60		    ロンプトモードは, default, simple, xmp, inf-rubyが
61		    用意されています. デフォルトはdefaultプロンプトモー
62		    ドになっています.
63			    
64  --inf-ruby-mode   emacsのinf-ruby-mode用のプロンプト表示を行なう. 特
65		    に指定がない限り, readlineライブラリは使わなくなる.
66  --simple-prompt
67		    非常にシンプルなプロンプトを用いるモードです.
68  --noprompt	    プロンプト表示を行なわない.
69  --tracer	    コマンド実行時にトレースを行なう.
70  --back-trace-limit n
71		    バックトレース表示をバックトレースの頭から n, 後ろ
72		    からnだけ行なう. デフォルトは16 
73  --irb_debug n	    irbのデバッグデバッグレベルをnに設定する(利用しな
74		    い方が無難でしょう).
75  -v, --version	    irbのバージョンを表示する
76
77= コンフィギュレーション
78
79irb起動時に``~/.irbrc''を読み込みます. もし存在しない場合は,
80``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''の順にloadを試みます.
81
82オプションを設定する代わりに, 以下のコマンドでもデフォルトの動作を設定
83できます.
84
85  IRB.conf[:IRB_NAME]="irb"
86  IRB.conf[:MATH_MODE]=false
87  IRB.conf[:USE_TRACER]=false
88  IRB.conf[:USE_LOADER]=false
89  IRB.conf[:IGNORE_SIGINT]=true
90  IRB.conf[:IGNORE_EOF]=false
91  IRB.conf[:INSPECT_MODE]=nil
92  IRB.conf[:IRB_RC] = nil
93  IRB.conf[:BACK_TRACE_LIMIT]=16
94  IRB.conf[:USE_LOADER] = false
95  IRB.conf[:USE_READLINE] = nil
96  IRB.conf[:USE_TRACER] = false
97  IRB.conf[:IGNORE_SIGINT] = true
98  IRB.conf[:IGNORE_EOF] = false
99  IRB.conf[:PROMPT_MODE] = :DEFALUT
100  IRB.conf[:PROMPT] = {...}
101  IRB.conf[:DEBUG_LEVEL]=0
102  IRB.conf[:VERBOSE]=true
103
104== プロンプトの設定
105
106プロンプトをカスタマイズしたい時には, 
107
108   IRB.conf[:PROMPT]
109
110を用います. 例えば, .irbrcの中で下のような式を記述します:
111
112   IRB.conf[:PROMPT][:MY_PROMPT] = { # プロンプトモードの名前
113     :PROMPT_I => nil,		  # 通常のプロンプト
114     :PROMPT_N => nil,		  # 継続行のプロンプト
115     :PROMPT_S => nil,		  # 文字列などの継続行のプロンプト
116     :PROMPT_C => nil,		  # 式が継続している時のプロンプト
117     :RETURN => "    ==>%s\n"	  # リターン時のプロンプト
118   }
119
120プロンプトモードを指定したい時には,
121
122  irb --prompt my-prompt
123
124でそのプロンプトモードで起動されます. または, .irbrcに下式を記述しても
125OKです.
126
127  IRB.conf[:PROMPT_MODE] = :MY_PROMPT
128
129PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_Cは, フォーマットを指定します.
130
131  %N	起動しているコマンド名が出力される.
132  %m	mainオブジェクト(self)がto_sで出力される.
133  %M	mainオブジェクト(self)がinspectされて出力される.
134  %l	文字列中のタイプを表す(", ', /, ], `]'は%wの中の時)
135  %NNi	インデントのレベルを表す. NNは数字が入りprintfの%NNdと同じ. 省
136	略可能
137  %NNn	行番号を表します.
138  %%    %
139
140例えば, デフォルトのプロンプトモードは:
141
142  IRB.conf[:PROMPT_MODE][:DEFAULT] = {
143      :PROMPT_I => "%N(%m):%03n:%i> ",
144      :PROMPT_N => "%N(%m):%03n:%i> ",
145      :PROMPT_S => "%N(%m):%03n:%i%l ",
146      :PROMPT_C => "%N(%m):%03n:%i* ",
147      :RETURN => "%s\n"
148  } 
149
150となっています.
151
152RETURNは, 現在のところprintf形式です. 将来仕様が変わるかも知れません.
153
154== サブirbの設定
155
156コマンドラインオプションおよびIRB.confは(サブ)irb起動時のデフォルトの
157設定を決めるもので, `5. コマンド'にあるconfで個別の(サブ)irbの設定がで
158きるようになっています.
159
160IRB.conf[:IRB_RC]にprocが設定されていると, サブirbを起動する時にその
161procをirbのコンテキストを引数として呼び出します. これによって個別のサ
162ブirbごとに設定を変えることができるようになります.
163
164
165= コマンド
166
167irb拡張コマンドは, 簡単な名前と頭に`irb_'をつけた名前と両方定義されて
168います. これは, 簡単な名前がoverrideされた時のためです.
169
170--- exit, quit, irb_exit	
171    終了する. 
172    サブirbの場合, そのサブirbを終了する.
173
174--- conf, irb_context
175    irbの現在の設定を表示する. 設定の変更は, confにメッセージを送るこ
176    とによって行なえる. 
177
178--- conf.eval_history = N
179    実行結果のヒストリ機能の設定.
180    nnは整数かnilで nn>0 であればその数だけヒストリにためる。nn==0の時は
181    無制限に記憶する、nilだとヒストリ機能はやめる(デフォルト). 
182
183--- Conf.back_trace_limit
184    バックトレース表示をバックトレースの頭からn, 後ろからnだけ行なう.
185    デフォルトは16
186    
187--- conf.debug_level = N
188    irb用のデバッグレベルの設定
189
190--- conf.ignore_eof = true/false
191    ^Dが入力された時の動作を設定する. trueの時は^Dを無視する, falseの
192    時はirbを終了する. 
193
194--- conf.ignore_sigint= true/false
195    ^Cが入力された時の動作を設定する. false時は, irbを終了する. trueの
196    時の動作は以下のようになる:
197      入力中: これまで入力したものをキャンセルしトップレベルに戻る. 
198      実行中: 実行を中止する.
199
200--- conf.inf_ruby_mode = true/false
201    inf-ruby-mode用のプロンプト表示を行なう. デフォルトはfalse.
202
203--- conf.inspect_mode = true/false/nil
204    インスペクトモードを設定する.
205    true: インスペクトして表示する.
206    false: 通常のprintで表示する.
207    nil: 通常モードであれば, inspect modeとなり, mathモードの時は, non
208	 inspect modeとなる.   
209
210--- conf.math_mode
211    参照のみ. bcモード(分数, 行列の計算ができます)かどうか?
212
213--- conf.use_loader = true/false
214    load/require時にirbのfile読み込み機能を用いるモードのスイッチ(デフォ
215    ルトは用いない). このモードはIRB全体に反映される.
216
217--- conf.prompt_c
218    ifの直後など, 行が継続している時のプロンプト.
219
220--- conf.prompt_i
221    通常のプロンプト.
222
223--- conf.prompt_s
224    文字列中などを表すプロンプト.
225
226--- conf.rc
227    ~/.irbrcを読み込んだかどうか?
228
229--- conf.use_prompt = true/false
230    プロンプト表示するかどうか? デフォルトではプロンプトを表示する.
231
232--- conf.use_readline = true/false/nil
233    readlineを使うかどうか?
234    true: readlineを使う.
235    false: readlineを使わない.
236    nil: (デフォルト)inf-ruby-mode以外でreadlineライブラリを利用しよ
237         うとする.  
238#
239#--- conf.verbose=T/F
240#    irbからいろいろなメッセージを出力するか?
241
242--- cws, chws, irb_cws, irb_chws, irb_change_workspace [obj]
243    objをselfとする. objが省略されたときは, home workspace, すなわち
244    irbを起動したときのmain objectをselfとする.
245
246--- pushws, irb_pushws, irb_push_workspace [obj]
247    UNIXシェルコマンドのpushdと同様.
248
249--- popws, irb_popws, irb_pop_workspace
250    UNIXシェルコマンドのpopdと同様.
251
252--- irb [obj]
253    サブirbを立ちあげる. objが指定された時は, そのobjをselfとする.
254
255--- jobs, irb_jobs
256    サブirbのリスト
257
258--- fg n, irb_fg n
259    指定したサブirbにスイッチする. nは, 次のものを指定する.
260
261      irb番号
262      スレッド
263      irbオブジェクト
264      self(irb objで起動した時のobj)
265
266--- kill n, irb_kill n
267      サブirbをkillする. nはfgと同じ.
268
269--- source, irb_source  path
270    UNIXシェルコマンドのsourceと似ている. 現在の環境上でpath内のスクリ
271    プトを評価する.
272
273--- irb_load path, prev
274
275    Rubyのloadのirb版.
276
277= システム変数
278
279--- _  
280    前の計算の実行結果を覚えている(ローカル変数).
281--- __ 
282    実行結果の履歴を覚えている.
283    __[line_no]で、その行で実行した結果を得ることができる. line_noが負の
284    時には、最新の結果から-line_no前の結果を得ることができる.
285
286=  使用例
287
288以下のような感じです.
289
290  dim% ruby irb.rb
291  irb(main):001:0> irb                        # サブirbの立ちあげ
292  irb#1(main):001:0> jobs                     # サブirbのリスト
293  #0->irb on main (#<Thread:0x400fb7e4> : stop)
294  #1->irb#1 on main (#<Thread:0x40125d64> : running)
295  nil
296  irb#1(main):002:0> fg 0                     # jobのスイッチ
297  nil
298  irb(main):002:0> class Foo;end
299  nil
300  irb(main):003:0> irb Foo                    # Fooをコンテキストしてirb
301					      # 立ちあげ
302  irb#2(Foo):001:0> def foo                   # Foo#fooの定義
303  irb#2(Foo):002:1>   print 1
304  irb#2(Foo):003:1> end
305  nil
306  irb#2(Foo):004:0> fg 0                      # jobをスイッチ
307  nil
308  irb(main):004:0> jobs                       # jobのリスト
309  #0->irb on main (#<Thread:0x400fb7e4> : running)
310  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
311  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
312  nil
313  irb(main):005:0> Foo.instance_methods       # Foo#fooがちゃんと定義さ
314					      # れている
315  ["foo"]
316  irb(main):006:0> fg 2                       # jobをスイッチ
317  nil
318  irb#2(Foo):005:0> def bar                   # Foo#barを定義
319  irb#2(Foo):006:1>  print "bar"
320  irb#2(Foo):007:1> end
321  nil
322  irb#2(Foo):010:0>  Foo.instance_methods
323  ["bar", "foo"]
324  irb#2(Foo):011:0> fg 0                      
325  nil
326  irb(main):007:0> f = Foo.new
327  #<Foo:0x4010af3c>
328  irb(main):008:0> irb f                      # Fooのインスタンスでirbを
329					      # 立ちあげる.
330  irb#3(#<Foo:0x4010af3c>):001:0> jobs
331  #0->irb on main (#<Thread:0x400fb7e4> : stop)
332  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
333  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
334  #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
335  nil
336  irb#3(#<Foo:0x4010af3c>):002:0> foo         # f.fooの実行
337  nil
338  irb#3(#<Foo:0x4010af3c>):003:0> bar         # f.barの実行
339  barnil
340  irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# jobのkill
341  nil
342  irb(main):009:0> jobs
343  #0->irb on main (#<Thread:0x400fb7e4> : running)
344  nil
345  irb(main):010:0> exit                       # 終了
346  dim% 
347
348= 使用上の制限
349
350irbは, 評価できる時点(式が閉じた時点)での逐次実行を行ないます. したがっ
351て, rubyを直接使った時と, 若干異なる動作を行なう場合があります.
352
353現在明らかになっている問題点を説明します.
354
355== ローカル変数の宣言
356
357rubyでは, 以下のプログラムはエラーになります.
358
359  eval "foo = 0"
360  foo
361  --
362  -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
363  ---
364  NameError
365
366ところが, irbを用いると
367
368  >> eval "foo = 0"
369  => 0
370  >> foo
371  => 0
372
373となり, エラーを起こしません. これは, rubyが最初にスクリプト全体をコン
374パイルしてローカル変数を決定するからです. それに対し, irbは実行可能に
375なる(式が閉じる)と自動的に評価しているからです. 上記の例では, 
376
377  evel "foo = 0" 
378
379を行なった時点で評価を行ない, その時点で変数が定義されるため, 次式で 
380変数fooは定義されているからです.
381
382このようなrubyとirbの動作の違いを解決したい場合は, begin...endで括って
383バッチ的に実行して下さい:
384
385  >> begin
386  ?>   eval "foo = 0"
387  >>   foo
388  >> end
389  NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
390  (irb):3
391  (irb_local_binding):1:in `eval'
392
393== ヒアドキュメント
394
395現在のところヒアドキュメントの実装は不完全です. 
396
397== シンボル
398
399シンボルであるかどうかの判断を間違えることがあります. 具体的には式が完了
400しているのに継続行と見なすことがあります.
401
402=end
403
404% Begin Emacs Environment
405% Local Variables:
406% mode: text
407% comment-column: 0
408% comment-start: "%"
409% comment-end: "\n"
410% End:
411%
412
413