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