roy > naoya > 基礎プログラミングII[月1] > (1)前期の復習

(1) 10/06の授業内容:前期の復習

ログインとログアウト

101/102教室のUNIX端末を利用する際には、204/205教室のWindowsマシンを利用する場合と同様に、ログインログアウトが必要になる。ログインするためにはユーザー名とパスワードを入力する。

ログイン時のユーザー名とパスワード

  • ユーザー名:チェックディジットを除いた学籍番号(cは小文字)
  • パスワード:これまで使用していたもの(忘れた場合は再発行します)

ログインにあたり、最初の1回だけはオプションからセッションでFVWMウィンドマネージャーを選択後、ユーザ名[Return]、パスワード[Return]を入力する。FVWMウィンドマネージャーを選択すると下の右図のようにユーザ名入力欄の下に「FVWMウィンドマネージャ」と表示される。この操作は一度行うと記憶されるので、次回以降はユーザー名とパスワードを入力するだけでよい。

オプションからセッションを選びFVWMウィンドマネージャーを選ぶ

なお、パスワードは入力しても画面に表示されない。パスワードを正しく入力して[Return]キーを押すとログインできる。ログインすると3つのウィンドウが自動的に起動する。各ウィンドウの名称と働きはそれぞれ下記の通りである。いずれもウィンドウ上部に名称が書いてあるため、どれがどれに対応するか確認できるはずである。

ウィンドウの名称とタイトル

  • kterm:ファイルのコピーや移動、これから学ぶRubyプログラムの実行操作などを行う。
  • emacs:1年生の授業で使用していたものと同じ。mew(メール)やプログラムの作成に使用する。
  • console:ログアウトのときに使用する。

まずは、ログアウトをしよう。ログアウトの際に使うのはconsoleなので、ウィンドウの上部のバーをマウスでクリックしてconsoleを前面に出す。すると、以下の文字列が書かれているはずである({c10xxxx}の部分は自分の学籍番号)。この文字列をプロンプトと呼び、ユーザーからの命令を待っている状態であることをあらわす(ktermも同じ)。

pan{c10xxxx}%

ログアウトは利用終了時に行う操作で、実施しないまま席を離れると、作成したファイルを第三者に閲覧されたり削除される可能性がある。ログアウトを行うためには、consoleで、logout[Return]もしくはexit[Return]と入力する。正しく入力すれば、初期のログイン画面に戻る。

pan{c10xxxx}% exit[Return]

キーボードから入力を行う際にはフォーカスに注意が必要である。マウスでいずれかのウィンドウにカーソルを合わせると、ウィンドウの枠の色が変わる。このウィンドウをフォーカスの合ったウィンドウと呼び、キーボードからの入力は、このウィンドウに対して行われる。ウィンドウを前面に出したい時は、ウィンドウのタイトルバーをマウスで左クリックする。ウィンドウが背面にあってもフォーカスがあっていれば入力できる。ウィンドウの切り替えはショートカットキーで行うこともできる。ショートカットキーを使って切り替えると、切り替えたウィンドウに必ずフォーカスが合うので便利である。

ショートカットキーを用いたウィンドウの切り替え

  • Ctrl-1:emacsが前面に出る(フォーカスも合う)
  • Ctrl-2:ktermが前面に出る(フォーカスも合う)
  • Ctrl-3:consoleが前面に出る(フォーカスも合う)
  • Ctrl-4:Firefoxが前面に出る

注:Ctrl-1はCtrlキーを押しながら1を押すという意味

コンピュータ操作方法

Windowsではデスクトップにアイコンが表示されているが、ここでは全く表示されていない。UNIXではktermでコマンドを入力してファイルのコピーやアプリケーションの実行を行う。難しい言葉で前者をGUI(Graphical User Interface)、後者をCUI(Charactor User Interface)という。

ルートメニュー

頻繁に使うアプリケーションのみメニューが準備されている。デスクトップのウインドウ以外の背景で左クリックすると以下のようなメニューが表示される。使いたいアプリケーションを選択すると起動する。

メニュー

この授業で使用するアプリケーションのリストは以下の通り。

  • kterm:最初から起動している。複数起動したい場合に利用
  • Emacs:最初から起動している。複数起動したい場合に利用
  • Emacs24:文字サイズが大きなEmacs。通常のEmacsでは文字が小さい人向け
  • Kterm24:文字サイズが大きなkterm。通常のktermでは文字が小さい人向け
  • Firefox(2.0):ブラウザ。授業はWebページを使って行う。
  • StarSuite:Officeソフト。Microsoft Officeと同じ。互換性あり
  • GIMP:ペイントソフト。Adobe Photoshopと同じ
  • Tgif:ドローソフト。Adobe Illustratorと同じ

コマンド入力によるコンピュータの操作

コマンドとは、コンピュータに対して行う命令であり、あらかじめ規定の文字列が定められている。コマンドを実行する場合、コマンド名[Return](コマンド入力後Returnキーを押す)が原則となる。ここでは、最低限覚えておかなければならないコマンドのみ確認する。

lsコマンド

lsはlistの略で現在のディレクトリ(カレントディレクトリと呼ぶ)の中身を表示するコマンドである。ディレクトリはWindowsでいうフォルダのことである。Windowsではフォルダの中身はフォルダを開いている限りいつでも参照可能であるが、CUIではコマンドを入力しなければ確認することができない。コマンドを実行する場合はコマンド[Return]なので、ls[Return]と入力する。

pan{c10xxxx}% ls[Return]

Mail/      maildir/    public_html/      test.rb
Windows/   msmail/     script/

表示されたリストにはMail/のように/がついているものがある。これはディレクトリ(フォルダ)をあらわす。/がついていないものがファイルである。

UNIXでは大文字と小文字を区別する。例えば、lsのかわりにLSと入力すると、「そんなコマンドは見つからない」と表示され、コマンドは実行されない。

確認

授業で作成するプログラムを保存するディレクトリを確認しよう。本授業ではrubyというディレクトリを作成したものとして説明を進める。仮に別の名称で作成していた場合は、以降、ディレクトリ名のrubyをその名称に読み替えること。

cdコマンド

今作成したrubyディレクトリに移動しよう。Windowsであればフォルダをダブルクリックするが、ここではcdコマンドを利用する。cdはChange Directoryの略である。

pan{c10xxxx}% cd ./移動先ディレクトリ[Return]

で移動することができる。./は自分が今いるディレクトリ(カレントディレクトリ)の意味であり、省略可能である。コマンド名とディレクトリ名の間は半角スペースをあける。 ktermには現在のディレクトリが右端に表示されるので、移動できたかどうか確認できる。ちなみに最初の段階では[~]と表示されているが、これは各ユーザーが自分のデータをおくことが出来る最上層のディレクトリをあらわし、ホームディレクトリと呼ぶ。ログイン直後はかならずホームディレクトリに位置する。以下はホームディレクトリからrubyディレクトリに移動した様子をあらわしている。

pan{c10xxxx}% cd ./ruby[Return]            [~]
pan{c10xxxx}%                    [~/ruby]

または./を省略して

pan{c10xxxx}% cd ruby[Return]            [~]
pan{c10xxxx}%                   [~/ruby]

今度はもとのディレクトリに戻ってみよう。もとのディレクトリは..(ピリオド2つ)と表現する。したがって、rubyディレクトリにいる場合、cd ..[Return]で1つ上のホームディレクトリに戻ることが出来る。ktermの右側の現在のディレクトリ表示が[~]に戻っているか確認しよう。

pan{c10xxxx}% cd ..[Return]           [~/ruby]
pan{c10xxxx}%                   [~]

簡単なプログラムの作成

それでは簡単なプログラムを作成してみよう。emacsでファイルの新規作成を行うコマンドはCtrl-x Ctrl-fなので、これを入力しよう。するとemacs下部のミニバッファに以下のように表示される。

Find file: ~/

この後に続けて以下のように入力しよう(入力した部分を黄色で示す)。

Find file: ~/ruby/amount.rb[Return]

Rubyプログラムはファイル名に必ず.rbの拡張子をつける。ruby/amount.rbとなっているが、これはrubyディレクトリの中にamount.rbというファイルを新規作成せよという意味である。

では、プログラムを書いてみよう。まずは余り考えずに以下の通り入力してみよう。

#!/usr/koeki/bin/ruby

amount = 1000
printf("%d円になります。\n",amount)
print"支払い金額を入力してください\n"
pay = gets.chomp!.to_i
change = pay - amount
printf("%d円のお返しになります。ありがとうございました。\n",change)

日本語の入力を行う場合はCtrl-oを押す。Ctrl-oを押すごとに日本語入力と英語入力が切り替わる。

半角英数字と日本語入力の切り替えはCtrl-o

入力したら保存をする。保存はCtrl-x Ctrl-sである。保存をしていない場合は-E:の横に**と表示されている。保存をすると**が消えることを確認しよう。

保存していない場合はミニバッファの上のEの右横に**が表示される

プログラムを作成したら、今度は実行してみよう。実行するのはktermなので、ktermでrubyディレクトリに移動し、以下のように入力する。

pan{c10xxxx}% cd ruby[Return] #=>ruby/に移動
pan{c10xxxx}% ruby amount.rb[Return] #=>hello.rbの実行

すると次のように表示される(はずである)。

pan{c10xxxx}% ruby amount.rb[Return]
1000円になります。
支払い金額を入力してください。
5000[Return]
4000円のお返しになります。ありがとうございました。

amount.rbは短いが立派なプログラムである。各行についてそれぞれ解説する。

  • 1行目:#!/usr/koeki/bin/rubyはrubyインタプリタのあるディレクトリを指定している。必ず書くおまじないと覚える。
  • 2行目:amountに1000を代入しなさいと書かれている。
  • 3行目:「○円になります」(ただし○にはamountの値を入れ込む)と表示するよう書かれている。
  • 4行目:「支払い金額を入力してください」と表示するよう書かれている。
  • 5行目:キーボードから入力した数字をpayに代入するよう書かれている。
  • 6行目:payに代入された値からamountに代入された値を引いた結果をchangeに代入せよと書かれている。
  • 7行目:「○円のお返しになります。ありがとうございました」(ただし○にはchangeの値を入れ込む)と表示するよう書かれている。

メソッドと変数

メソッド

今実行したamount.rbをktermで実行すると、結果が4行表示された。プログラムの出力結果やプログラムの書き方を踏まえると、print、printfはいずれも「表示せよ」という命令であることがわかる。このように、何らかの働きを持つあらかじめ登録された文字列のことをRubyではメソッドと呼ぶ。

では、printメソッド、printfメソッドの働きについて、それぞれの違いを意識しながら確認してみよう。

  • printメソッド:後ろに指定した""内のメッセージを表示する。
  • printfメソッド:後ろに指定した""内のメッセージを表示するが、その際に%dの位置に""の後ろで指定した変数(後述)に代入された値を入れ込んで表示する。

printfについてはもう少し複雑な働きをするが、当面は上述の通り理解しておいて問題ない。

変数

amount.rbで用いられたamountpaychangeのように何らかの値を代入して保管しておく役割を果たすものを変数とよぶ。変数名は1文字である必要はない。

ところで、amount.rbではamount = 1000と書かれているが、この意味は以下のとおりである。

  • × amountは1000である。
  • ○ amountに1000を代入する

=は右辺を左辺に代入するという意味を持つ。したがって、z = x + yx+yの結果をzに代入するということになる。ここでは、=や+の前後に半角のスペースをとっているが、スペースはあってもなくてもよい。

変数には数字だけでなく文字を代入することもできる。文字を代入する場合には値に""をつける。

  • ○ name = "公益太郎"(文字なので""でくくる)
  • ○ age = 20(数字なので""なし)
  • × name = 公益太郎(文字なのに""がない)

\nの働き

\nは「バックスラッシュエヌ」と呼び改行をあらわす。バックスラッシュは環境により円マークとして表示される場合がある。バックスラッシュのないキーボードを使用している場合は円マークで代用する。""内のメッセージを表示するprintメソッドやprintfメソッドでは""の末尾に必ず\nをつける。

入力を受け取るgetsメソッド

amount.rbの途中でgetsというメソッドが登場している。支払い金額を入力する際に使用しており、キーボードから入力した値を受け読み込むという働きを持つメソッドであった。

実行すると、「支払い金額を入力してください。」の後、つまりgetsの行でユーザからの入力待ちになる。ここで何らかの数値を入力すると、処理が再開され、おつりが表示される。

pay = gets.chomp!.to_i

プログラムの中では具体的には上のように書かれていた。getsはキーボードからの入力を読み込むメソッドであるが、キーボードから入力した値が数字の場合はchomp!.to_iを後ろにつけて、gets.chomp!.to_iとする必要がある。したがって、この行はキーボードから入力された数字を読み込んでpayに代入している。chomp!やto_iもメソッドであるが、それぞれ次の働きを持つ。getsの働きと併せてまとめてみよう。

  • getsメソッド:キーボードから入力した値を文字列として取得する。
  • chomp!メソッド:入力した値の末尾に\nがついている場合にこれを除去する。
  • to_iメソッド:値の型を文字列から整数に変換する。

キーボードから入力した値が「5000[Return]」の場合、Returnはプログラムでは\nとして扱われるので、「5000\n」というデータを入力したことになる。getsメソッドを使って読み込んでいるので、5000は「ごせん」ではなく「ごぜろぜろぜろ」という文字である。ここから、chomp!メソッドを使って\nを取り除き、to_iメソッドを使って整数に変換してpayに代入している。

出席課題

amount.rbは商品の金額が1000円で固定となっているが、自分で好きな金額を入力できるように改良する。余力がある人は商品の金額を3回入力し、合計金額を出してから支払い金額を入力するように変更する。


うまくいかない場合は、修正途中でもよいので授業終了時までにメールで解答を送信すること。出席点は2点。提出要領は下記の通り。

  • 提出先:課題提出用メールアドレス
  • メールのSubject:attend01
  • 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降にプログラムと実行結果を貼り付ける

Tips:mewによるメールの送り方はMewコマンドを参照

メール送信後には受信作業をする

mewでメールを送信した後は、受信コマンドのiおよびパスワードを入力して正しく送信できたか確認しよう。メールアドレスを書き間違えた場合にはMAILER-DAEMONからエラー通知が届く。この場合には、届いていないのでアドレスを正しく書き直して再送信する。再送信の方法は上記「mewコマンド」のページを参照すること。