【コラム】

Hello Worldコレクション

11 プログラミングの自由度が高いシンプルなオブジェクト指向言語 - Ruby編

    山森丈範  [2008/07/11]

    RubyのHello World

    第11回は、オブジェクト指向のスクリプト言語のRubyです。RubyのHello Worldは、リスト1のようにputsを使います。putsは、文字列の終端に改行コードが付いていなければ自動的に改行を付加してくれます(すでに改行が付いていれば付加しません)。また、RubyはPerlなどとは違って、各行末にセミコロンを付ける必要がありません。

    リスト1 putsを使う方法(ruby_puts)

    #!/usr/bin/ruby            ← Rubyスクリプトであることを指定
    
    puts 'Hello World'         ← putsを使ってメッセージ出力(改行コードは不要)
    

    Rubyスクリプトは、ほかのスクリプト同様、chmodコマンドで実行属性を付ければ実行できます(実行例1)。なお、Rubyスクリプトに拡張子を付ける場合は.rbとしますが、 本稿では拡張子を付けていません。

    実行例1 Rubyスクリプトの実行

    $ chmod +x ruby_puts       ← Rubyスクリプトに実行属性を付ける
    $ ./ruby_puts              ← Rubyスクリプトを実行
    Hello World                ← 確かにHello Worldが表示される
    $                          ← シェルのプロンプトに戻る
    

    print/printfを使う方法

    Perlと同様に、printやprintfを使うこともできます(リスト2、リスト3)。改行コードなどのエスケープ文字が含まれる文字列は、ダブルクォートを使う必要があります。

    リスト2 printを使う方法(ruby_print)

    #!/usr/bin/ruby
    
    print "Hello World\n"       ← printを使ってメッセージ出力(改行コードが必要)
    

    リスト3 printfを使う方法(ruby_printf)

    #!/usr/bin/ruby
    
    printf "%s\n", 'Hello World'    ← printfを使って文字列を出力
    

    writeを使う方法

    標準出力に対して、そのwriteメソッドを使って文字列を出力することもできます(リスト4)。

    リスト4 writeを使う方法(ruby_write)

    #!/usr/bin/ruby
    
    STDOUT.write "Hello World\n"    ← 標準出力のwriteメソッドを実行
    

    コマンドラインから直接実行

    Rubyのプログラムをコマンドラインの引数にして直接実行するには、Perlと同様に-eオプションを使います(実行例2)。

    実行例2 コマンドラインから直接実行

    $ ruby -e 'puts "Hello World"'
    Hello World                          ← 確かにHello Worldが表示される
    

    OSのコマンドを呼び出す方法

    OSのコマンドを呼び出すsystemを利用することもできます(リスト5)。

    リスト5 systemを使う方法(ruby_system)

    #!/usr/bin/ruby
    
    system 'echo "Hello World"'          ← systemで、OS上のechoコマンドを実行
    

    OSのコマンドをRubyプログラムの最後から呼び出す場合は、systemの代わりにexecを使えば、同じプロセスIDのまま実行され、プロセスの節約になります(リスト6)。

    リスト6 execを使う方法(ruby_exec)

    #!/usr/bin/ruby
    
    exec 'echo "Hello World"'            ← OS上のechoコマンドをexecする
    

    文字列を直接記述する方法

    Rubyスクリプトの後ろに文字列を直接記述し、それをRubyスクリプト自身で読み出すという方法も考えられます(リスト7)。ここでは、「__DATA__」という文字列を目印にして、その位置までファイルを読み飛ばし、その次の1行をそのまま出力しています。「gets("\n__DATA__\n")」自身が目印と誤認されないように、__DATA__の前後に"\n"を付けている点にも注意してください。

    リスト7 文字列を直接記述(ruby_data)

    #!/usr/bin/ruby
    
    file = open($0)                      ← スクリプトファイル自身をオープン
    file.gets("\n__DATA__\n")            ← __DATA__の位置まで読み飛ばす
    puts file.gets()                     ← その直後の1行を読み込んで表示
    exit                                 ← __DATA__の部分よりも前でRubyを終了
    
    __DATA__                             ← データの開始を示す目印
    Hello World                          ← 文字列を直接記述
    

    変則的なRubyスクリプト

    スクリプトの1行目の「#!」の行に直接Rubyのコマンドを記述する方式で、変則的なRubyスクリプトを作ることができます。この行はカーネルによって直接解釈されるため、Rubyの引数部分にはスペースを入れないようにします。

    リスト8は、1行コマンドをスクリプトにしたものです。スペースは\x20で表現します。

    リスト8 引数に直接プログラムを記述する方法(ruby_direct)

    #!/usr/bin/ruby -eputs"Hello\x20World"       ← 1行だけのRubyスクリプト
    

    リスト9は、3行目だけを抜き出すプログラムを記述し、スクリプトの3行目に文字列を直接記述したものです。Rubyに-nオプションを付加し、whileループの記述を省略しています。

    リスト9 3行目だけを抜き出す方法(ruby_line)

    #!/usr/bin/ruby -neif($.==3);print;end      ← 3行目を抜き出すRubyプログラム
    
    Hello World                                  ← 3行目にメッセージを直接記述
    

    リスト10は、同じ発想で、正規表現を使って行を抜き出すようにしたものです。Rubyには-nオプションとともに-lオプションも付加し、各行を自動的に「chop!」しています。

    リスト10 正規表現で行を抜き出す方法(ruby_regex)

    #!/usr/bin/ruby -nleif(/^[^#]/);print;end    ← 正規表現でメッセージを抜き出す
                                                 ← ここは空行
    Hello World                                  ← メッセージを直接記述
    

    Ruby/Tkを使ったGUI

    Rubyには、GUIのライブラリも存在します。Ruby/Tkを使ったTck/Tkベースのプログラムはリスト11のとおりです。実行すると図1のウィンドウが立ち上がります。なお、以降のGUIのプログラムには終了ボタンがありませんので、ウィンドウマネージャのメニューなどで終了させてください。

    リスト11 Ruby/Tkを使ったGUI(ruby_tk)

    #!/usr/bin/ruby
    
    require 'tk'                    ← tkライブラリをロード
    
    label = TkLabel.new(            ← ラベルを作成
      'text' => 'Hello World',      ← 表示する文字列
      'width' => 22,                ← 横幅を指定
      'height' => 5                 ← 高さを指定
    )
    label.pack                      ← ラベルを配置する
    
    Tk.mainloop                     ← メインループを実行
    

    図1 Ruby/TkのHello World

    Ruby/GTK2を使ったGUI

    Ruby/GTK2を使う場合はリスト12、図2のようになります。

    リスト12 Ruby/GTK2を使ったGUI(ruby_gtk)

    #!/usr/bin/ruby
    
    require 'gtk2'                         ← gtk2ライブラリをロード
    
    window = Gtk::Window.new               ← トップレベルウィンドウを作成
    window.signal_connect('destroy'){Gtk.main_quit}  ← destroyに対するハンドラ
    
    label = Gtk::Label.new('Hello World')  ← 文字列を指定してラベルを作成
    label.set_size_request(160, 80)        ← ラベルのサイズを指定
    window.add(label)                      ← ウィンドウにラベルを張り付ける
    
    window.show_all                        ← すべてを可視状態にする
    
    Gtk.main                               ← メインループを実行
    

    図2 Ruby/GTK2のHello World

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン