はじめに
Rubyの多様性や強力さについては既にご存知のことでしょう。Rubyをさらに深く知るためには、その背後にある繊細かつ重要な概念を理解しておきたいところです。この記事では、小さな実用的なRubyプログラムを作成します。Rubyは基本的にクラスとオブジェクトを使用するオブジェクト指向の言語であり、動作をカプセル化したクラスを簡単に作成できます。この記事では、最初に簡易版のプログラムを作成し、そのプログラムを拡張していきます。読み進むにつれて、Rubyの仕組みをより深く理解できるようになるでしょう。
今回のサンプルプログラムには2つの目的があります。
- Rubyの機能を紹介する。
- 実用的に処理を進める。
Rubyに関する知識が適度にある読者がこのプログラムを作成するならば、この記事のタイトルにあるように、おそらく10分以上の時間がかかることはないでしょう。Rubyの動作について学習し、どのようなコードが有効であるかを理解できれば、実用的なユーティリティを簡単に作り出すことができます。もちろん、Rubyを扱うのがまったく初めての場合は、このようなプログラムを作成するのに10分以上の時間がかかります。
必要なもの
このチュートリアルは、Rubyの最新バージョンがインストールされ、コードエディタが使用できることを前提としています。Rubyでプログラミングするのに、特別なIDEは必要ありません。Vim、Emacs、TextMateで十分です。NetBeansとEclipseも使用できます。
目標: ファイル起動の簡便化
Rubyは本来、テキストベースのコマンドライン指向の言語です。複数のWebアプリケーションフレームワークに加えて、いくつかのGUIライブラリも使用できますが、RubyでのGUI開発はこの記事の範囲を超えています。ここでの目標は、コマンドラインから動作するものを作成することです。
サンプルプログラムの役割は、ファイル起動の簡便化です。指定されたテキストファイル(おそらくRubyソースコードファイル)を、コマンドラインから関連アプリケーションで起動する手段を作成するものとします。さらに、ファイルの種類とアプリケーションの関連付けを追跡することなくこの動作を実現したいと思います。ご存知のようにこの動作はWindowsで既に実現されていますが、今回のランチャープログラムでは、この単純な動作に追加の機能を実装します。
バージョン0のLauncherコード
最初に、ほんの数行から成るRubyファイルを作成します。Rubyファイルの拡張子は「.rb」であり、ファイルの冒頭には、Rubyインタプリタのパスを定義する非常に重要な行を記述します。ファイルの名前は「launcher.rb」とします。
#!/usr/local/bin/ruby # Example application to demonstrate some basic Ruby features # This code loads a given file into an associated application class Launcher end
シャープ記号(#)で行レベルのコメントを開始できることに注意してください。#の右側に続くすべての文字列はインタプリタの処理対象外になります。この他に、複数のコード行をコメント化する方法もあります。Rubyのクラス名は大文字で始まります。クラスは定数であり、Rubyのすべての定数は大文字で始まります(Ruby構文の詳細については、「Ruby ― A Diamond of a Programming Language?」のPart 1およびPart 2を参照してください)。
このコードは何の処理も行っていないように見えますが、実行は可能です。実際に試してみれば、コピーが実行されている様子を確認できるでしょう。Rubyスクリプトの実行方法は簡単です。次に示すように、rubyインタプリタを呼び出し、ファイルの名前を渡すだけです。
$ ruby launcher.rb
$ chmod u+x launcher.rb $ ./launcher.rb
C:\some\dir> launcher.rb
ファイルを実行すると、コードに何らかのエラーがない限り、何も表示されないまま実行が終了します。何も表示されなければそれでOKです。何も表示されないからと言って、何も起きていないわけではありません。rubyインタプリタはファイルを解析し、クラス定義を検出すると、その定義を使ってオブジェクトを作成できるよう準備します。次のコードでは、前述のコードにクラス定義を追加しています。
#!/usr/local/bin/ruby # Example application to demonstrate some basic Ruby features # This code loads a given file into an associated application class Launcher end launcher = Launcher.new
このコードでは最初に変数(launcher
)を作成します。この変数には、Launcherクラスの新しいインスタンスへの参照が割り当てられます。変数の型を宣言する必要はありません。Rubyは強力な動的型を採用しており、変数は任意の型のオブジェクトへの参照を保持できます。Rubyでは、文字列、数値、正規表現を含めて、ほとんどすべてのものがオブジェクトとして扱われます。それぞれに正式な作成メソッド(String.new
など)が用意されていますが、Rubyは常識的な判断に基づいて簡単かつ柔軟に処理しようとします。
次に、RubyはLauncherクラスのnew
を呼び出すことによってオブジェクトインスタンスを作成します。new
はクラスメソッドで、Javaのコンストラクタメソッドに似ています。もちろん、空のオブジェクトでは役に立たないので、何らかの動作を追加する必要があります。