先週の時間でテキストエディタを練習しました.エディタでプログラムを作成,
編集して,その後,保存を行い,ターミナルでプログラムを実行します.流れを
図示すると,図1のようになります.
- 作業ディレクトリの確保
ホームディレクトリで作業を行うと,たくさんのスクリプトファイルが出来てし
まい,見栄えも効率も良くありません.ぜひとも,作業用のディレクトリを用意
しましょう.これまで作ったことの無い人は,
$ mkdir ~/script
のように,ディレクトリを作りましょう.さらに細かく分類したい人は自分でそ
の中に作成するようにしてください.また,この作業は1回行えば良いので,何
度も実行する必要はありません.2度目からはすでにディレクトリが存在する旨
のアラートがターミナルで出るはずです.
作成が終わったら,カレントディレクトリを移動しましょう.先ほど作成した,
script ディレクトリに移動します.
$ cd script
自分がどこに居るのか,pwd コマンドで確認してください.
- エディタの起動
先週紹介したgEditで作業してみます.起動はGNOMEのパネル(タスクバー)から出
来ますが,ここは是非ターミナルからコマンドで起動してみて下さい.コマンド
名は
$ gedit &
のようになっています.最後の & を忘れないで下さい.
ターミナルからエディタを起動する利点は,デフォルトのディレクトリが自動的
にカレントディレクトリになることです.パネルのアイコンをクリックして起動
した場合には,保存を行う場合にまずホームディレクトリが表示されるので,メ
ニューから script ディレクトリを探してダブルクリックして移動し
て保存になりますが,ターミナルからコマンドで起動していれば,最初から
script ディレクトリが表示されます.
さらに言えば,ファイル名を指定して起動すると,最初からファイル名が決まっ
ているので,一発保存できるようになります.これは,起動時に,
$ gedit sample.rb &
などとすれば可能です.ダイアローグウィンドウが出て来て,そのようなファイルを
新たに作成するかを聞いて来ますので,「はい」の方を選択すればファイル名が
決まった状態で開始できます.
- 始めの一歩
まず,最初に学習するのは画面に "Hello, world!" と表示させるスク
リプトです.これは,言語を学習するときの決まりです.エディタのテキスト編
集領域に,次のように入力して下さい.
入力が終わったら,保存します.名前は,hello.rb としましょう.今
後は,Rubyのスクリプトには拡張子として .rb をつけることにします.
保存したら,ターミナルに移って,
$ ruby hello.rb
と入力します.無事にターミナルに以下のような結果が表示されたでしょうか.
ここまでの作業でつ
まづいてしまった場合には,質問なりなんなりして,かならず解決してください.
ここがもっとも重要なポイントの一つです.Rubyという言語で書かれたスクリプ
トをターミナルで実行する際のコマンドはそのまま ruby です.この
ときの実行方法は上で紹介したように,図2のようになります.
図2 スクリプトの動作方法
コマ
ンドの引数としてスクリプトファイルの名前を指定します.名前を指定しないと,
入力を待っている状態のまま止まっているように見えます.間違ってそ
の状態にしてしまったら,C - c で抜けましょう.
また,このテキストでは,ターミナルにおけるコマンド入力は以前から紹介して
いるように,$マークのコマンドプロンプト付きで例示します.エディタへのス
クリプトの入力は
で紹介し,ターミナルへのスクリプトやコマンドの出力結果を
で示します.違いに注意して下さい.
- 結果の出力方法いろいろ
先ほどのスクリプトで使用したプログラミング言語の「命令」は,puts
と言うものだけです.これは,結果の文字を画面に出力するだけです.
今後実行して行くスクリプトは,結果を画面に表示するものが大半ですの
で,このように画面に表示させるコマンドは重要です.これは,puts
以外にもいくつかあります.
一般的に,プログラム言語で出力する際には,print が使用されます
が,これは,各言語で大体共通の利用法になっています.先ほどと同じ結果を表
示するスクリプトは,次のようになります.
これを,例えば,print.rb のように名前をつけて保存し,ターミナル
で実行してみて下さい.
$ ruby print.rb
結果はどうだったでしょうか.同じになったでしょうか.スクリプトの方では,
puts と print でほとんど違いが無いように見えます
が,出力する文字 (このように文字が連なったものを「文字列」と言いま
す.英語では text strings と言います.その,文字列の最後に記号があ
る点が違います.ここにある, \n は「改行文字」と,言います.
この記号は通常は単なる改行ですので,目には見えません.実行結果でも
表示されないように見えますが,実際には意味があります.試しに,それ
が無いとどうなるか,確認してみて下さい.
今のように,print を使用すると,改行が必要な部分で「改行文字」
を自分で意識的に挿入しないと行けません.面倒なように思えるかも知れません
が,実際に自分が出力したい文字列をきちんと成形して出すには,print
文の方が重要です.puts は最初,なれるまでの間の便
宜的な出力方法だと思って下さい.
- 複数の文字列の出力
以下に示すように,3つの単語を1行に出力することを考えます.
まずは,puts を使って1行で表示するようにしてみましょう.
#names.rb
puts "blitz buster duel"
|
とすれば,出来るでしょう.
最初に#で始まる行がありますが,Rubyでは多くの言語と同様に,#で始まる行,
もしくは,行の途中の#以降を「コメント文」として扱います.コメント文とは
注釈などを挿入するために用意された文の形式で,その部分はプログラムの実行
とは関係が無くなります.今の場合は,このスクリプトのファイル名として例え
ば,names.rb というのが考えられるので,最初に名前として示してい
るだけです.もちろん,自分で別に好きな名前をつけて構いません.
では,次に,出力命令の引数を複数に分けることを行ってみます.
#names.rb
puts "blitz", "buster", "duel"
|
二重引用符とカンマの数と位置に注意して下さい.引用符は二つで一組です.ど
ちらか一方が欠けるとエラーが表示されます.例えば,最後の " が無
くなるとどうなるでしょうか.次に示すようなエラーメッセージが表示されます.
names.rb:1: unterminated string meets end of file
names.rb:1: parse error
|
このメッセージの意味は,大体以下のようなものです.
names.rb:1行目,未だ終わっていない文字列がファイルの最後に来て
しまった.
names.rb:1行目,構造に関する文法的な関係のエラー
|
すなわち,二重引用符で最後に囲むべき文字列が囲まれていないため,文字列指
定がまだ終了していないのに,プログラムが終わっていることを示しています.
本来は良い例ではないですが,次の行に " が来ていたら,一応き
ちんと動作します.
#names.rb
puts "blitz", "buster", "duel
"
|
さて,以上のようなことを今度は print 文を用いて試してみましょう.
#names2.rb
print "blitz", "buster", "duel"
|
print 文では改行文字を自分で入れないと,1行に表示されます.しか
も,文字列の間にすき間を空けずに出力します.この違いを良く理解しておく
ようにしましょう.
- 特殊な文字 (記号)
先ほど,改行文字を学習しました.他にも,特殊な文字がいくつかあります.こ
れらは,その本来の意味を打ち消すために,文字の前に \ がついてい
ます.この記号は,フォントの環境によって,「\」(バックスラッシュ)に見え
たり,「¥」マークに見えたりしますが,どちらも機能は同じですので,気にし
ないで下さい.表1に特殊な記号の一部を示します.実際にどのような動作をす
るのか,確認してみましょう.
表1 文字列中で利用できる特殊記号の例
記号 | 意味 | 由来 |
\n | 改行文字 | New line |
\s | 空白文字 | Space |
\t | タブ | Tab |
\r | キャリッジリターン | Carriage Return |
\a | ベル | Alarm |
また,引用符を含む文字列を出力するには,引用符の前にバックスラッシュを置
き,引用符自体の意味をバックスラッシュにより打ち消すことで実現可能です.
次の例を試してみて下さい.
#quote.rb
print "``blitz\"\n"
|
他にも,プログラミングでは種々の作業に記号を使用します.記号本来の意味で
はなく,別の目的で使用したい場合にはこのようにバックスラッシュを用いて意
味を打ち消しますが,これを「バックスラッシュ記法」と呼びます.