title: Apollo チュートリアル
Author: NISHIO Mizuho
mailto: mzh@portnet.ne.jp

1. スクリプトを書く前に
  いきなりスクリプトの説明をしても良いのですが、その前にApolloに固有の事をいくつか述べておきます。

1.1. Rubyスクリプトの実行
  Rubyスクリプトはコマンドラインからrubyを呼び出して実行することが多いです。例えば、hoge.rbを実行したい場合、Windows98ならDOSプロンプトから ruby hoge.rb とコマンドを打つことでhoge.rbを実行します。%href: img/dos.png イメージ図%
  
  Apolloでも同じようにしてRubyスクリプトを実行することができますが、馴れていない人にはDOSプロンプトは使いにくいです。もし、DOSプロンプトが使いにくいという方はApolloに付属しているapollo.exeというRubyスクリプトを実行するためのアプリケーションを使ってみてください。
  
  apollo.exeはap-xxx.zip(xxxはバージョン名です)を解凍してできるフォルダーの中のapollo\binにあります。Apolloのインストールに成功していれば、apollo.exeをダブルクリックすると%href: img/apollo.png このような% ウィンドウが出てきます。

  図の中のfoo.rbというのが実行しようとしているスクリプトの名前です。ウィンドウの実行のボタンを押すと、foo.rbが実行されて、その結果(正確には標準出力とエラー出力の結果ですが)が操作卓に表示されます。

  apollo.exeは簡易エディターを備えていますので、apollo.exeでスクリプトを編集することも可能です。試しにfoo.rbに「print Time.now.to_s, "\r\n"」を加えてから実行した時の図を載せます。%href: img/foo.png 図%

1.2. クラスブラウザーの紹介(宣伝ともいう)
  RubyもDelpiもオブジェクト指向の言語だと言われます。オブジェクト指向の言語にはクラスという概念がしばしば現れますが、Apolloにはクラスの一覧を表示するためのアプリケーションがあります。
 
  apollo\sample\ap-rbbr\ap-rbbr.rbがクラスを表示するアプリケーションです。Rubyで書かれているので、上で述べたようにapollo.exeで読みこんで、実行ボタンを押すことで実行することができます。ap-rbbr.rbを実行すると、%href: img/ap-rbbr.png このようなウィンドウ%が出てきます。

  ウィンドウの左側のツリーにはクラスの木構造が表示され、クラス名を左クリックすると右側のリストの部分にそのクラスのメソッドや定数が表示されます。それぞれのクラス・メソッド・定数の詳しい説明を表示することはできませんが、メソッドや定数の名前を忘れた時に確認するために使用すると便利だと思います。

1.3. piドキュメント
  apollo\docの下にpiという拡張子のついたファイルがありますが、これがApolloのドキュメントです。*.piはそのまま読むことも出来ますが、HTML に変換することもできます。HTML に変換するには apollo/doc ディレクトリに入っている auto.rb か pi.rb を使います。auto.rb を apollo.exe で読み込んで実行すると、Apollo をインストールしたドライブに /ap-doc というディレクトリが作られ、そこに HTML 形式に変換された Apollo のドキュメントができあがります。

1.4. GUIビルダー
  Delphi IDEを使う方法があります(Delphi 5をお持ちの方、詳細をお願いできないでしょうか?)

2. 言葉の定義
  : ディレクトリ(directory)
      フォルダーと同じことを指します。MS-DOSやUNIX等ではこの呼び名が使われます。この文章ではできるだけフォルダーの方を使うことにしていますが、たまにディレクトリの方が使われることがあります。

  : メソッド
      メソッドというのは何か値を与えると、何かの値を返すもののことです。例えば、駅の発券機はお金を投入すると、切符が出てきますが、こういうものも一種のメソッドということが言えますし、 f(x) = 2x のような数学の関数もメソッドということになります。
     
      この文章で単にメソッドという言い方をした場合はRubyのメソッドのことを指します。RubyのメソッドについてはRubyのマニュアルを参照してください。

  : オブジェクト･クラス･インスタンス
      オブジェクトというのは何らかの「もの」を指す言葉です。「もの」という言い方をすると非常に抽象的ですが、オブジェクト指向言語のオブジェクトというのは現実世界の様々な「もの」をそのままプログラミングの世界に反映させるために導入された概念です。

      例えば、猿には性別・体重等の性質や食べる・寝る等の機能があります。この現実世界の猿をプログラミングの世界にそのまま持ち込むためにオブジェクト指向言語では猿クラスというものを定義し、その猿クラスに上のような性質や機能を持たせることでプログラムの世界から捉えようとします。

      この場合、現実世界の「猿」が「食べる」というのはプログラミングの世界では「猿クラス」の「食べる」というメソッドに対応しますし、「猿」の「体重」というのは「猿クラス」の「体重」という属性に対応します。

      しかし、猿というのは種類や分類を表すだけで、猿という種類や分類が実際に食べたりするわけではありません。実際に食べるのは猿の個体(例えば猿の太郎とか反省猿とか)です。オブジェクト指向言語では猿の太郎に対応するものを猿クラスのインスタンスという言い方をします。

--text
猿(という種類)　-> 猿の太郎
猿クラス　      -> 猿クラスのインスタンス
--
      
      このようにクラスは分類や種類を、インスタンスはクラスの実体を表します。そして、オブジェクトはクラスとインスタンスの両方のことを指します(RubyではクラスもClassクラスのインスタンスなので、この表現でも良いと思います)。

      ここではオブジェクト指向言語でしばしば使われるオブジェクトとクラスとインスタンスについて軽く触れましたが、これはオブジェクト指向言語の説明の一部分でしかありません。他にも継承・カプセル化・多態性については説明するべきなのですが、これについては他の文章にお任せすることにします。

      (クラスの例えは分類や種類よりも設計図とかの方が分かりやすいでしょうか?)

  : 属性
      Rubyでは「属性とはオブジェクトのメソッドのうち、外部から変数のように参照・設定を行うことができるものである」と定義されています（『デスクトップ・リファレンス』p.29）。この文章でも参照と設定を行うことができるメソッドのことを属性と呼ぶことにします。Delphi になじみのある方は「属性」よりも「プロパティ」の方が分かりやすいかもしれません。属性についてはプロパティの説明でも触れられていますので、興味のある方はそちらもご覧下さい。

  : プロパティ
      Delphiにはプロパティというものがあります。これは何らかの値を保持するもので、保持されている値を参照したり、値を代入することでオブジェクトの挙動を変更したりすることが出来ます。ApolloでもDelphiのプロパティをサポートしていますが、 Delphi本来のプロパティとは違うところがあります。とは言え、普段はこのことを意識する必要はありません。

      このチュートリアルではプロパティと表現した場合はDelphiのプロパティを指します。また、Delphiのプロパティに相当するものをApolloでは属性と表現することにします。

      以下、詳しい事を知りたい人は読んでください。

      上で述べたようにDelphiのプロパティはApolloの属性と対応します。例えば、Delphiの TForm.width というプロパティは  Phi::Form#width  という属性に対応します。この Phi::Form#width という属性は Phi::Form#width 、 Phi::Form#width= という二つのRubyのメソッドによって実装されており、それぞれ Phi::Form#width は値の参照、 Phi::Form#width= は値の代入を行います。

      属性を使用していると、変数を使用しているような感覚になりますが、属性はメソッドによって実装されているので、実際は変数ではありません。

      上で例にあげた TForm.width に対してApolloではRubyのメソッドを二つ定義しているわけですが、プロパティによってはRubyのメソッドを三つ定義していることもあります。すでに述べたようにこのことを常に意識する必要はありませんが、覚えておいた方がApolloでRubyのクラスを定義する時に役に立つと思います。

  : コントロール
      ウィンドウやボタン等のGUIの部品のことです。

