Rubyの特徴は「柔軟性」です。まず,人を選びません。初心者にとっては学ぶのが易しく,熟達したプログラマには高度な機能を提供してくれます。適用できる範囲が広いのも柔軟性の表れです。Rubyは,この特集の他のパートで紹介しているように,実際のシステム開発に使えるだけのポテンシャルを持っています。一方で,個人がちょっとした便利ツールとして使うのにも適しています。このパートではそうした手軽な使い方を取り上げます。
Windows用のRuby処理系はいくつかありますが,ここで使うのはActiveScriptRubyです。パッケージ管理を行う「RubyGems」,Rubyスクリプトをスタンドアロンで起動するexeファイルに変換する「Exerb」,RubyからJavaのオブジェクトを扱えるようにする「RubyJavaBridge(rjb)」といった便利なライブラリ/ユーティリティをあらかじめ内蔵しているのが特徴です。同ソフトのWebページからmsiファイルをダウンロードし,ダブルクリックでインストールしてください。
|
まずは電卓代わりから
まずはRubyを電卓代わりに使うところから始めてみましょう。Rubyのプログラムを対話形式で1行ずつ実行できる「irb」というソフトウエアを使います。スタートメニューの「Ruby 1.8」からirbを選択するか,コマンドプロンプトで「irb」と入力することでirbが起動します。
「電卓ならWindowsにも付いている」と思うかもしれません。その通りです。でも,irb(つまりRuby)にはWindows付属の電卓にはない特徴があるのです。
試しに,Windwosの電卓で表示を「関数電卓」にして2の100乗を計算してみてください。べき乗の計算を行うキーは右の図の通りです。計算すると,結果の最後に「e+301」と表示されるはずです。これは,数字が大きすぎてすべての桁の値を表示しきれないという意味です。
次にirbを起動して「p 2**1000」と入力してみてください。「p」は表示のためのメソッド,「**」はべき乗の演算子です。結果のすべての桁が表示されました。Rubyでは,メモリーの許す限り,いくらでも大きい値を扱えるのです。
| |
●Windowsに付属する電卓で2の1000乗を計算 |
| |
●irbで2の1000乗を計算 |
何はなくとも正規表現
Rubyで行うちょっとした作業といえば,一番多いのはテキスト・ファイルの処理でしょう。そんなときに威力を発揮するのが,RubyがPerlから受け継いだ強力な正規表現の機能です。
Rubyを使えば,テキスト・ファイルの文字の置換くらいはコマンドプロンプトでワンライナー(1行プログラムのこと)を実行するだけで済みます。-eオプションでプログラムを直接記述して実行し,コマンドプロンプトのリダイレクション機能を使って別のテキスト・ファイルに結果を出力します。gsubは,正規表現にマッチした部分を指定した文字列に置き換えるメソッドです。
HTMLタグの除去といったことも簡単にできます。ワンライナーでは「<」などの記号を使うとエラーになるので,tagcut.rbというファイル名でプログラムを保存しました。正規表現は,タグをまたいでマッチしないよう最短マッチを指定しています。
もっとも,これくらいの簡単な置換なら,たいていのテキスト・エディタでもできます。Rubyの正規表現にはまだいろいろな機能があるので,興味があれば33ページに示したRubyの解説書で調べてみてください。
| |
●正規表現を使った文字の置換 |
| |
●タグの除去 |
ファイルを1行ずつ処理する
前のページで使ったreadメソッドは,ファイルの中身を一度に読み込みます。一方,openメソッドでファイルを開いておけば,ファイルの中身を1行ずつ処理できます。ここでは「各行の3番目から12番目の文字だけを取り出す」という例を取り上げます。
「ファイルを開いて,処理を行い,ファイルを閉じる」と順番通りに書くと,右の一番上のようなプログラムになります。ただ,こうした書き方はRubyでは好ましくありません。ファイルの閉じ忘れの危険性があるからです。Part1で解説したように,ファイルを扱う際にはブロックを使うのが鉄則です。ブロックを使えば,ファイルの閉じ忘れを気にする必要はなくなります。
ファイルをオープンしたら,イテレータのeachメソッドを使うことで,各々の行に対して処理を行うことができます。line[2..11]と指定することで,3番目から12番目の文字からなる文字列を取り出せます。while文とgetsメソッドを使っても同様の処理を行うことが可能です。
ちなみにreadlinesというメソッドを使うこともできます。この場合,ファイルの各行が格納された配列が最初に作られます。
|
●ブロックを使わない例 |
|
●ブロックを使う例(その1) |
|
●ブロックを使う例(その2) |
|
●ブロックを使う例(その3) |
Windowsアプリケーションを操作する
Ruby 1.8系には,Windowsのアプリケーションを操作するための「Win32OLE」というライブラリが標準で入っています。RubyのプログラムからMicrosoft WordやExcelのファイルを操作したり,Internet Exploreを起動して任意のWebページを表示するといったことができます。
Win32OLEを利用するには,まずrequireメソッドでWin32OLEライブラリを読み込みます。アプリケーションを操作するためのCOMオブジェクトは,「WIN32OLE.new('操作したいアプリケーションのプログラムID')」と書くことで生成されます。そのCOMオブジェクトで利用できるOLEのメソッドの一覧は,ole_methodsというメソッドで取得できます。
ちょっと変わったところでは,Win32OLE経由でWindows Script Hostを利用することもできます。例えば,Popupメソッドを使うとダイアログ・ボックスにメッセージを表示できます。GUIで簡単な表示を行いたいけど,Ruby/TkなどのGUIライブラリを利用するのはちょっと大げさ。そんなときにWin32OLE経由で手軽に使えるWSHのポップアップ機能は意外に役に立ちます。
| |
●Win32OLEで操作できるアプリケーションの例 |
|
●RubyからWindows Script Hostを使って
ポップアップを表示 |