プログラミング言語を覚えただけではプログラムを作ることができない。 ひとつのプログラムを作るには、それを書くための道具、機械の言葉に翻訳する ための道具、プログラムを動かすための道具、など色々な道具が必要である。
以下で説明するテキストエディタやシェルについて既に利用経験が ある場合は、読み飛ばして第2講に進んでよい。
Terminal(ターミナル/仮想端末)の画面には 起動直後以下のような文字列が出ている。
yuuji@fiberstorm%
[Return]キー(キーボードによっては[Enter]) を何度か押すと、同じ文字列が何度も出てくる。 このような文字列のことをプロンプトといい、「システムに対してコ マンドを打ってもよい」状態であることを意味している。プロンプトを出してい るのはシェルと呼ばれるソフトウェアで、シェルはユーザが打ち込ん だ文字列をコマンドとして解釈し、システムにある同名のコマンドを起動したり、 それが見つからない場合はエラーメッセージを出したりする役割を持つ。 我々がこれから作るRubyプログラムも、起動するときはシェルのお世話になる。 シェルに対してコマンドを打ち込む場所、つまりプロンプトの後ろの行のことを コマンドライン (コマンド入力行)という。
yuuji@fiberstorm% ~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~ ↑ ↑ プロンプト コマンドライン(これから何かコマンドを打つべき場所)
本講ではプロンプトを%
記号で示す。
Unixシステムのアカウント(利用権)があるユーザには必ず、自分専用のファ イルを保存してよい場所が割り当てられている。この場所のことを ホームディレクトリという。ホームディレクトリには普通のファイル を保存してもよいし、さらに別のディレクトリを作ってファイルを分類して格納 してもよい。ホームディレクトリの中ではいくらでもファイルやディレクトリ を作ったり消したりできるが、ホームディレクトリの外(上位)のディレクトリに は通常書き込みできない。
コマンドラインでpwd
コマンドを実行してみよう。
コマンド実行の最後には[Return]キーを押す。
pwd
/home/yuuji
返ってくる結果は人によって違う。表示されたのは現在
操作対象となっているディレクトリで、ログインして最初に見せられるディレク
トリはホームディレクトリである。ホームディレクトリは自分の拠点となるディ
レクトリで頻繁に参照することからチルダ記号(~
)一文字で表して
もよい約束になっている。たとえば、~/foo.rb
とは、「ホームディ
レクトリにあるfoo.rbというファイル」を意味する。
また、特別なディレクトリ指定方法として以下の二つも覚えておく必要があ る。
. | カレントディレクトリ |
.. | ひとつ上のディレクトリ |
カレントディレクトリとは、現在操作対象となっている ディレクトリのことで、作業ディレクトリともいう。カレントディレク トリは起動しているソフトウェアごとに独立して持っている。Terminalを2つ起動し ている場合は2つのシェルで別々にカレントディレクトリを管理している。
ファイルやディレクトリを操作するコマンドとして以下のものを覚えておこ う。
ls [オプション] [ファイルorディレクトリ]
-
ファイルの一覧表示
指定した ファイルorディレクトリ にあるファイルを
一覧表示する。ls
とだけ起動するとカレントディレクトリ
にあるファイル一覧が出る。オプション
のうちよく使うものを列挙する。
-l |
ロングフォーマット(詳細表記)で表示する。 | ||||||
-F |
ファイルの種別が分かりやすいようにファイル名の後ろに記号
を付けて表示する。ファイル名だけが出るときは普通のファイル、
それ以外のときは以下のような意味となっている。
|
||||||
-a |
ドットで始まるファイル(普段は見えない)も表示する。 | ||||||
-t |
更新時刻の新しい順に表示する(通常はアルファベット順)。 | ||||||
-r |
並べ換え順を逆にして表示する。 | ||||||
-R |
指定したディレクトリ以下全てのファイルを表示する。 |
例:
ls -F Mail/ help memo script/ TUTORIAL.ja maildir/ public_html/ (末尾に / のついているものはディレクトリ) ls -F Mail draft/ inbox/ trash/ ls -lF Mail total 3 drwx------ 3 c101345 st2001 512 Oct 27 01:13 draft/ drwx------ 2 c101345 st2001 2048 Oct 27 01:14 inbox/ drwx------ 2 c101345 st2001 1024 Sep 11 13:58 trash/
pwd
- カレントディレクトリの表示
cd [ディレクトリ]
-
カレントディレクトリの移動
指定した ディレクトリ にカレントディレクトリを 変更する。ディレクトリ を省略すると、ホームディレクトリ に移動する。
例:
pwd /home/yuuji cd Mail pwd /home/yuuji/Mail ls -F draft/ inbox/ trash/ cd inbox pwd /home/yuuji/Mail/inbox cd ../draft pwd /home/yuuji/Mail/draft cd pwd /home/yuuji
mkdir 新ディレクトリ
- ディレクトリの作成
新ディレクトリ を作成する。複数同時に指定してよい。
rm [オプション] ファイル
- ファイルの削除
指定した ファイル を削除する。複数指定可。 よく使うオプションは以下のとおり。
-r |
指定したファイルがディレクトリでも その中を含めてまるごと削除する。ディレクトリを削除する 目的で使う。 |
-f |
ファイルが書き込み禁止でも強制的に削除する。 |
mv ファイル1 ファイル2
- ファイル名の変更
ファイル1 を ファイル2 という名前に変更する。
mv ファイル群 ディレクトリ
- ファイル群の移動
ファイル群 のファイル(複数指定可)を 最後に指定したディレクトリに移動する。
cp ファイル1 ファイル2
- ファイルのコピー
ファイル1 を ファイル2 というファイルにコピーする。
cp ファイル群 ディレクトリ
- ファイル群のコピー
ファイル群 のファイル(複数指定可)を 最後に指定したディレクトリにコピーする。
cat ファイル群
- ファイルの内容出力
指定したファイル(複数指定可)の内容を出力する。エディタで作った ファイルの中味をコマンドラインで確認したり、ファイルの中味を 別のコマンドに渡したりするときに利用する。
less ファイル群
- ファイルの内容閲覧
指定したファイル(複数指定可)の中味を対話的に閲覧する。 起動するとless専用コマンドキーを受け付ける。以下のキー操作を 覚えておけば十分だろう。
q | lessを終了してシェルに戻る |
SPC | 一画面分先に進む |
b | 1画面分上に戻る |
j | 1行分先に進む |
k | 1行分上に戻る |
1画面より長いファイルの中味を目で見たいときにはlessを 利用する。
通常プログラムはテキストエディタというソフトウェアを 使って作成し、ファイルとして保存する。本書ではEmacsを利用するもの として必要最低限の利用方法について説明する。最初に全て覚える必要は ないが、定期的にここを読み返して最終的に全て覚えられることを目標にする とよい。テキストエディタを使いこなせるかどうかはプログラミング能力の 向上速度に大きくかかわる。
以後の説明に出てくるEmacsに関する重要な用語を先に説明しておく。
Emacsで編集するために見えている画面(の中味)のこと。普通は ファイルの中味そのもの(のコピー)が見える。Emacs起動直後に見えている バッファは scratch buffer といい、どのファイルにも結び付けられていない。
見えているバッファ全体を囲う範囲のこと。Emacs全体の画面を複数の ウィンドウに分割して使うことができる。
文字を打つと文字の入る場所をポイントという。 通常はカーソルの左端である。
Emacsではキー操作だけで全ての機能を呼び出せるようになっている。 それらキー操作はControlキーを押しながら別のキーを押したり、 ESCキーを押してから別のキーを押すようになっている。 たとえば、「ファイルの保存」は C-x C-s である。 Controlキーを押しながらxと、Controlキーを押しながらs、を連打して 初めて機能の呼び出しとして完結する。覚えるまでしばらく戸惑うかもしれない がプログラミングでは何度も繰り返しプログラムを書き換えるので、 基本的なエディタ操作は一瞬で行なえるようになっておかないと 時間を浪費するばかりである。
前述したとおりEmacsの機能呼び出しは複数のキーの組み合わせで行なう ことが多い。慣れないうちは打ち間違えたり、途中まで打って分からなくなるこ とがあるが、そのような場合は
C-g | コマンド入力中止 |
をタイプすればいつでも初期状態に戻る。
間違って文字を消しすぎたりなど、希望と反する修正操作をしたら、
C-/ | 編集操作の取り消し(undo) |
をタイプすると直前の状態に戻せる。何度も連続してC-/を押す ことでファイルを開いたときまでさかのぼってundo(アンドゥ)できる。 undoしすぎた場合はカーソル移動等undo以外の機能を使ったあとで C-/をタイプすれば、undoをundoできる。
下記一覧のうち C-x C-f と C-x C-s は 今すぐ確実に覚えておこう。
C-x C-f | ファイルを開く(find-file) |
C-x C-s | 編集中のファイルを保存する(save-buffer) |
C-x C-w | 編集中のファイルを別の名前で保存する(write-file) |
C-x i | 外部ファイルをポイント位置に挿入する |
C-x k | バッファの破棄(閉じること) |
C-x b | バッファの切り替え |
C-x C-m f | ファイル保存文字コードの変更 |
ポイント(カーソル)移動キーとして、 最初はC-n、C-p、C-b、C-f だけ覚えておけば十分だろう。 矢印キーでもポイント移動できるが、ホームポジションから手を離さねばならず 速度的に不利なので C-n、C-p、C-b、C-f に慣れる方が望ましい。
M-< | バッファ先頭へ | |||||||
M-v | 1画面戻る | |||||||
C-p | 1行戻る | |||||||
↑ | ||||||||
C-a | M-b | C-b | C-f | M-f | C-e | |||
行頭 | 1語戻る | 1字戻る | ← | ・ | → | 1字進む | 1語進む | 行末 |
↓ | ||||||||
C-n | 1行進む | |||||||
C-v | 1画面進む | |||||||
M-> | バッファ末尾へ |
編集バッファの「ここから、ここまで」をまるごとコピーしたり 削除したりするには
という手順で行なう。
C-SPC | ポイント位置を「マーク」する |
C-w | マークからポイントまでの領域を削除して 記憶する |
M-w | マークからポイントまでの領域を記憶する |
C-y | C-wやM-wで記憶したものを ヤンクする(ペーストする)。 |
練習として、編集バッファに以下のようなテキストを打ち込んでみよう。
Rubyをすこしでも早く覚えたい
「すこしでも」を領域削除してみよう。「ここから」にあたる 「す」の位置にポイント移動する。
Rubyをすこしでも早く覚えたい
C-SPCでこの位置をマークする。
「ここまで」にあたるのは「も」の後ろなのでそこにポイント移動する。
Rubyをすこしでも早く覚えたい
C-w(kill-region)で領域が削除される。
Rubyを早く覚えたい
Emacsはウィンドウを分割して一度に複数のバッファを見ながら編集できる。 ウィンドウ分割のための主なコマンドは以下のとおり。
C-x 2 | ウィンドウを上下2分割 |
C-x o | (小文字のオー)隣のウィンドウに移動 |
C-x 1 | ウィンドウを1つにする |
C-x 0 | (ゼロ)今のウィンドウを消す |
少し練習してみよう。実際に
~/TEST/hoge
と~/TEST/hero
ファイルを
作成・編集し、最後にそれらを削除
という操作をしてみよう。具体的には、
~/TEST
ディレクトリを作成し
~/TEST/hoge
ファイルを作成し
~/TEST/hero
ファイルを作成し
~/TEST
ディレクトリをまるごと削除
のような流れで作業する。。
その前に効率的なウィンドウの切り替えを訓練しておこう。 マウスをどこに置いているかにかかわらず以下のキー操作が有効になっている。
C-1 | Emacsのウィンドウを選択 |
C-2 | Term-2(大きい方のTerminal)のウィンドウを選択 |
C-3 | Console:(小さい方のTerminal)のウィンドウを選択 |
Controlキーを押しながら数字の1から3を押してウィンドウが切り替わる様子を 4、5回繰り返して理解しよう。上記の6つの手順で「Terminalで」とある操作の 直前にはC-1を、「Emacsで」とある操作の直前にはC-2 をタイプしよう。
~/TEST
ディレクトリの作成
Terminalでmkdir
する。
mkdir TEST ls -F Mail/ TUTORIAL.ja maildir/ public_html/ TEST/ help memo script/ cd TEST ls (空っぽなので何も表示されない)
~/TEST/hoge
ファイルの作成
Emacsで C-x C-f すると編集したいファイル名を
聞いてくるので ~/TEST/hoge
を入力する。
Find file: ~/TEST/hoge
TESTを入力するときに、最初の1、2字入れたところで [Tab]キーを押すと残りが補完される。 ファイルを開いたら以下の内容で保存(C-x C-s)する。
ほげほげほげー やあやあやあー
保存できたらTerminalに移り、実際に書き込まれているか確認する。
cat hoge
ほげほげほげー
やあやあやあー
~/TEST/hero
ファイルの作成
Emacsに戻り~/TEST/hero
ファイルを開く。
C-x C-fしてファイル名を入力する。
Find file: ~/TEST/hero
新規に開いたら以下の内容で保存する。
こっちはへろへろです。
こちらもTerminalで確認してみよう。
cat hero
こっちはへろへろです。
EmacsでC-x bをタイプすると、 切り替えたいバッファ名(ファイル名と同じ)を聞いてくるので hogeまたはheroを入力し相互を往復する。何度か繰り返そう。
EmacsでC-x kとタイプすると、 閉じたいバッファ名を聞いてくるので hoge または hero を入力してそれを閉じる。 未保存のバッファはうまく閉じられないので必ず保存してから C-x kする。バッファ名を入れずにリターンを押すと 現在編集中のバッファが閉じられる。
~/TEST
ディレクトリの全削除
Terminalでホームディレクトリに戻る。
cd ls -F Mail/ TUTORIAL.ja maildir/ public_html/ TEST/ help memo script/
rmコマンドで、TESTディレクトリを中にあるファイルごと一気に消してみる。
rm -rf TEST ls -F Mail/ help memo script/ TUTORIAL.ja maildir/ public_html/
以上の操作を3、4度繰り返してみよう。とくに「ファイルの保存」と EmacsとTerminalの往復をスムーズに行なえるようにするとのちのちの 作業効率が格段に上がるので練習しておこう。
作成したプログラムを実行するときに知っておくと役に立つ 操作方法をいくつかまとめておく。
自分で作ったプログラムを実行中に途中で止めるにはC-cを タイプする。
実行したプログラムによる出力がスクロールして画面の上の方に消えてしまっ た場合は、Terminalのスクロールバーを利用すればさかのぼって見ることができる。
マウスの左ボタンでドラッグすると範囲選択した部分がコピーされる。 EmacsにペーストするときはEmacsでヤンク(C-y)する。
Terminalでの領域選択のとき
範囲指定開始の左ボタンクリックを
になる。
左ボタンを押してすぐ手を離してもよく、 その場合は右ボタンクリックで範囲の終わりを指定する
記憶した領域をTerminalにペーストするにはマウスの真中ボタンをクリックする。
Terminalでの日本語入力モードは Shift-SPC をタイプして 切り替える。Emacsでは C-o で切り替える。