このページの本文へ

Rubyで学ぶRuby 第1回

Ruby超入門(前編)

2016年09月14日 12時00分更新

文● 遠藤侑介、イラスト●hirekoke、編集●鹿野桂一郎

  • この記事をはてなブックマークに追加
  • 本文印刷

こんにちは。 この連載では、ちょっと変わったRuby入門を書いていきます。 想定読者は、Rubyを学びたいプログラミング初心者です。 Ruby以外の言語でプログラミングしたことがあると理解がはかどると思いますが、 Rubyを知らなくてもわかるように、なるべく丁寧に説明していくつもりです。 Rubyをある程度知っている読者には、最初の数回は退屈かもしれませんが、 回を重ねていくにつれ、より深くRubyを知ることができるはずです。

Rubyとは?

Rubyは「プログラミング言語」です。 プログラミング言語とは、コンピュータにやらせたい仕事を書くための言語です。 つまり、Rubyを覚えて、Rubyでコンピュータへの指示を書けば、 コンピュータはその指示を実行してくれます。 この指示書のことを「プログラム」と言い、特にRubyで書かれたプログラムを「Rubyプログラム」と言います。

ところで、Rubyは「汎用の」プログラミング言語です。 ここで「汎用の」と言っているのは、およそどんなプログラムでも作れることを目指している、という意味です。 プログラミング言語のなかには、特別な目的(のプログラムを作ること)に特化している言語もあるけれど、Rubyはそういう言語ではない、というわけです。

どんなプログラムでもRubyで作れるとはいえ、複雑な仕事をするプログラムをすべてゼロから作るのは大変です。 たとえば、この記事を配信しているWebサイトもまたプログラムですが、 汎用プログラミング言語であるRubyの文法をマスターしても、それだけでWebサイトのプログラムをゼロからほいほい作れるというわけでもありません。

ちなみにRubyだと、Webサイトの仕組みをプログラミングするのが楽になるような仕掛けがあって、 Webサイトのプログラムを作るときは、その仕掛けの助けを借りながらプログラミングします。 その仕掛けのなかでも特に人気があるのが「Ruby on Rails」です。 RubyといえばRuby on Railsというくらい有名なので、名前くらいは聞いたことがある人も多いでしょう。 ひょっとしたら、Ruby on Railsでアプリケーションが作れるようになることを期待してこの記事を読んでいる人もいるかもしれません。

しかし、Ruby on Railsの話はこれでおしまいです。 この連載では、Webサイトのプログラムではなく、別のプログラムを作ることを目指します。 その別のプログラムというのは、「Rubyインタプリタ」です。

インタプリタとは「通訳」という意味の単語で、「プログラムを実行するプログラム」のことです。 実は現代のコンピュータは、Rubyを知らないので、Rubyプログラムを理解することができません。 そこで、Rubyインタプリタが役立ちます。 Rubyインタプリタは、Rubyプログラムを解釈して実行してくれます。 Rubyインタプリタ自体はコンピュータが理解できる言語(機械語)で書かれているので、間接的にコンピュータはRubyプログラムを実行することができるのです。

この連載の最終目標は、この「Rubyインタプリタ」をRubyで書いてみることです。 何やら難しそうに聞こえるかもしれませんが、段階をふんで実装していけば意外なほど簡単です。 それに、「Rubyを学びたい」と思っている読者にとって、これ以上の題材はないでしょう。

とはいえ、本物のRubyインタプリタの機能を全部作るのは無茶なので、 Rubyの部分集合となる言語を実行できる最小限の機能を持ったRubyインタプリタを作ります。 この最小限のRubyのことをMinRuby(ミニマル、最小のRuby)と呼ぶことにします(OCamlという名前のプログラミング言語における同様のサブセット言語MinCamlというのにインスパイアされています)。

少し紛らわしいですが、Rubyインタプリタのことを単に「Ruby」と呼ぶこともあります。 したがって、単に「Ruby」と言われたとき、言語とインタプリタのどちらを指しているかは文脈から判断する必要があります。 この連載では原則として、言語のほうは「Ruby」または「Ruby言語」と呼び、インタプリタは「Rubyインタプリタ」と呼ぶことにします。

開発環境の準備

これから作るのはMinRubyですが、本物のRubyを使って作ります。 本物のRubyプログラムを自分のコンピュータで実行できるようにする方法(つまり本物のRubyインタプリタのインストール方法)については、 Rubyの公式Webサイトに一通り書いてあるし、 優れた解説書(『たのしいRuby』とか)がたくさんあるので、基本的にはそちらに譲ります。

といって済ませたいところですが、これから自分で書くプログラムを実行できるようにするまでの道のりについて、本当に最低限の説明だけしておきます。

最初のうちは解説だけ読んでいるのでも「プログラムの雰囲気」はわかると思いますが、 だんだん、頭の中でわかったつもりでも意外なところで考慮できていなかったりしてくるので、 なんとかがんばってRubyインタプリタをインストールし、なるべくなら動かしながら読み進めてください。

Rubyインタプリタの用意

macOSだったら、特別な事情がない限り、すでにRubyがインストールされて実行できるはずです。 試しにターミナルを開いてrubyとコマンドを実行してみてください。下記のような表示が出るはずです。

Windowsだったら、RubyInstallerを使うのがいちばん簡単でしょう。 RubyInstallerをインストールすると、スタートメニューのどこかに「Ruby コマンドプロンプトを開く」というメニューができているはずです。 これを起動すると、黒い画面のコマンドプロンプトのウィンドウが立ち上がります。ここでrubyコマンドをこんなふうに実行できます。

これでRubyのインストールはおしまいです。 さっそくプログラムを書いてみましょう、と言いたいのですが、その前に、書いたプログラムをrubyコマンドで実行する方法を説明してしまいます。

Rubyプログラムを試す前に

これから、Rubyのプログラムをテキストエディターを使って書いていきます。 プログラムを書いたファイルをパソコンのどこかに保存し、ターミナル(コマンドプロンプト)で、そのファイルの名前を指定してrubyコマンドを実行する、というのがRubyによるプログラミングの大まかな流れです。

問題は、自分が書いたプログラムをファイルとして保存するときに、そのファイルをどこに保存すればいいかです。 自分が書いたプログラムを実行するには、それをファイルに保存して、そのファイルの名前をターミナル(コマンドプロンプト)を使ってrubyコマンドに指定する必要があるのですが、 そのときにはファイルの名前だけでなく、場所も含めて完全に指定してあげないといけません。

ここで、「場所」という表現がいまいちピンとこない人もいると思います。場所というのは、いわゆるフォルダのことです。 マウスでフォルダの絵をクリック(もしくはダブルクリック)すると、フォルダの中身が表示されて「そのフォルダに行った」ような感じがしますよね。 フォルダに行くと、そこにあるファイルをクリックして開いたり、実行したり、削除したりできます。

ターミナル(コマンドプロンプト)を使ってるときも、実はどこかのフォルダの中にいます。そして、そのフォルダの中でいろいろな作業をする感じです。 いま自分がいるフォルダに存在しているファイルであれば、そのファイルの名前をrubyコマンドに指定するだけで、そのファイルをrubyコマンドが見つけてくれます。 そのフォルダに存在しないファイルだったら、ファイルの名前だけでなく、そのファイルがある場所も一緒に示さないとなりません。

たとえばWindows 10で、自分が書いたRubyプログラムを「ドキュメント」フォルダの中に作った「myruby」フォルダに置くとしましょう。 このフォルダの完全な名前は「C:¥Users¥ユーザ名¥Documents¥myruby」です(「ユーザ名」の部分は使っているパソコンのユーザ名によって異なります。この本当の名前は、フォルダを右クリックして[プロパティ]を開き、[場所]というタブを開けば分かります)。 そのためrubyコマンドは次のような具合に実行することになります。

C:¥Users¥ユーザ名> ruby "C:¥Users¥ユーザ名¥Documents¥myruby¥プログラムを保存したファイルの名前"

めんどくさいですね。 そこでしばらくの間は、「ファイルを置いてあるのと同じ場所に行ってrubyコマンドを実行する」ことにしましょう。 ちなみに、RubyInstallerの「Ruby コマンドプロンプトを開く」だと、最初の時点では「C:〈ユーザ名〉」というフォルダにいます。

たとえばWindows 10の場合、こんなふうにcdコマンドを実行して目的のフォルダに移動できます。

C:¥Users> cd "C:¥Users¥ユーザ名¥Documents¥myruby"

いったん移動してしまえば、あとはファイルの名前だけrubyコマンドに指定すれば、自分が書いたプログラムがRubyで実行されます。

macOSの場合も、だいたい事情は同じです。 myrubyというフォルダを作って、そこに自分が書いたRubyプログラムを保存しているなら、こんなふうにしてターミナル上でそのフォルダに移動してください。

$ cd myruby

ターミナル(コマンドプロンプト)では、移動しただけだとフォルダの中身が表示されないので、あまり移動した実感がわかないかもしれません。 自分がいるフォルダの中身を表示するには、別のコマンドを実行する必要があります。Windowsならdirコマンド、Macとかならlsコマンドを実行します。

C:¥Users> dir(もしくはls) "C:¥Users¥ユーザ名¥Documents"

以上で最低限の準備は終わりです。 いよいよ本当にRubyプログラムを書いてみましょう。 まず書いてみるのは、足し算をして結果を表示するだけの簡単なプログラムです。

最初のプログラム(1 + 1 = ?

「1+1」という足し算をして結果を表示するRubyプログラムは、次のように書けます。

p(1 + 1)

これは、「1と1を計算し、その結果を出力せよ」という意味の立派なRubyプログラムです。 pというのは「出力せよ」という命令です。 そのp命令に、1 + 1を引数として渡しています。

この一行をテキストエディターで書き、two.rbという名前を付けて保存してください(別の名前でもかまいませんが、その場合は以下の解説は適宜読み替えてください)。 保存した場所へターミナル(コマンドプロンプト)で移動し、次のようにrubyプログラムに渡します。

$ ruby two.rb &⏎
2

こんなふうに画面に2と表示されたでしょうか?

1 + 1のところを他の数字に置き換えたり、1 + 100に置き換えたりしてみましょう。 あるいは、1 - 1とか、足し算以外の計算を指定したりして、いろいろ試してみてください。

行ごとに複数の式をまとめて書くこともできます。こんなプログラムを作成して試してみてください。(「#」から行末までは本物のRubyが無視するという約束になっています。この性質を利用して、このプログラムでは各行に人間向けのメモを書いておきました。)

p(3 - 1) # 引き算
p(2 * 3) # 掛け算
p(9 / 3) # 割り算
p(5 % 3) # 余り
p((1 + 2) / 3 * 4 * (56 / 7 + 8 + 9))

このプログラムも、先ほどと同じようにファイルに保存してrubyコマンドで実行すると、こんな結果になるはずです(ここではプログラムをcalc.rbという名前で保存したものとします)。

$ ruby calc.rb &⏎
2
6
3
2
100

これで、Rubyで引き算、掛け算、割り算、余りを計算する方法もわかりました。

ここで、ちょっと本来の目的を思い出しておきましょう。 この連載の最終目標は、RubyをRubyで作ることです。正確にいうと、Rubyの一部の機能を持った「MinRuby」というプログラミング言語を本物のRubyで作ります。 ここで作った計算式の結果を出力するプログラムは、rubyコマンドで実行できる本物のRubyのプログラムなわけですが、 最終的にはこれと同じプログラムが「MinRubyのプログラム」にもなるということです。

これからしばらく、本物のRubyのプログラムの文法を説明するかのような話が続きますが、それは同時にMinRubyの話でもあるんだ、という点を頭の片隅に置きながら読み進めてみてください。

まとめ

簡単な数式の計算をするRubyプログラムについて説明しました。 例をいろいろいじってみて、慣れておいてください (ちなみに、筆者はたいていの計算をRubyでやってます)。

次回は、値を覚える「変数」というものと、値を見てやることを変える「分岐」というものについて説明する予定です。

● 遠藤侑介

Rubyの開発者(コミッタ)の一人。RubyやC言語で「ちょっと変わったプログラム」を作るのが趣味。著書に『あなたの知らない超絶技巧プログラミングの世界』(技術評論社)、訳書に『抽象によるソフトウェア設計』『型システム入門 プログラミング言語と型の理論』(ともにオーム社)。

● 鹿野桂一郎

ラムダノート株式会社 代表取締役、TechBooster CEO(Chief Editing Officer)。HaskellとSchemeとLaTeXでコンピュータとかネットワークとか数学の本を作るのをお手伝いする仕事。

カテゴリートップへ

この連載の記事
ピックアップ