プログラミングに必要なもの

プログラミング言語を覚えただけではプログラムを作ることができない。 ひとつのプログラムを作るには、それを書くための道具、機械の言葉に翻訳する ための道具、プログラムを動かすための道具、など色々な道具が必要である。

以下で説明するテキストエディタやシェルについて既に利用経験が ある場合は、読み飛ばして第2講に進んでよい。

コマンドラインとシェル

Terminal(ターミナル/仮想端末)の画面には 起動直後以下のような文字列が出ている。

yuuji@fiberstorm% 

[Return]キー(キーボードによっては[Enter]) を何度か押すと、同じ文字列が何度も出てくる。 このような文字列のことをプロンプトといい、「システムに対してコ マンドを打ってもよい」状態であることを意味している。プロンプトを出してい るのはシェルと呼ばれるソフトウェアで、シェルはユーザが打ち込ん だ文字列をコマンドとして解釈し、システムにある同名のコマンドを起動したり、 それが見つからない場合はエラーメッセージを出したりする役割を持つ。 我々がこれから作るRubyプログラムも、起動するときはシェルのお世話になる。 シェルに対してコマンドを打ち込む場所、つまりプロンプトの後ろの行のことを コマンドライン (コマンド入力行)という。

yuuji@fiberstorm% 
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
    ↑              ↑
  プロンプト      コマンドライン(これから何かコマンドを打つべき場所)

本講ではプロンプトを%記号で示す。

ディレクトリとファイル

Unixシステムのアカウント(利用権)があるユーザには必ず、自分専用のファ イルを保存してよい場所が割り当てられている。この場所のことを ホームディレクトリという。ホームディレクトリには普通のファイル を保存してもよいし、さらに別のディレクトリを作ってファイルを分類して格納 してもよい。ホームディレクトリの中ではいくらでもファイルやディレクトリ を作ったり消したりできるが、ホームディレクトリの外(上位)のディレクトリに は通常書き込みできない。

コマンドラインでpwdコマンドを実行してみよう。 コマンド実行の最後には[Return]キーを押す。

pwd
/home/yuuji

返ってくる結果は人によって違う。表示されたのは現在 操作対象となっているディレクトリで、ログインして最初に見せられるディレク トリはホームディレクトリである。ホームディレクトリは自分の拠点となるディ レクトリで頻繁に参照することからチルダ記号(~)一文字で表して もよい約束になっている。たとえば、~/foo.rb とは、「ホームディ レクトリにあるfoo.rbというファイル」を意味する。

また、特別なディレクトリ指定方法として以下の二つも覚えておく必要があ る。

.カレントディレクトリ
..ひとつ上のディレクトリ

カレントディレクトリとは、現在操作対象となっている ディレクトリのことで、作業ディレクトリともいう。カレントディレク トリは起動しているソフトウェアごとに独立して持っている。Terminalを2つ起動し ている場合は2つのシェルで別々にカレントディレクトリを管理している。

ファイル・ディレクトリ操作コマンド

ファイルやディレクトリを操作するコマンドとして以下のものを覚えておこ う。

Emacsの操作

通常プログラムはテキストエディタというソフトウェアを 使って作成し、ファイルとして保存する。本書では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-fC-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-nC-pC-bC-f だけ覚えておけば十分だろう。 矢印キーでもポイント移動できるが、ホームポジションから手を離さねばならず 速度的に不利なので C-nC-pC-bC-f に慣れる方が望ましい。

M-< バッファ先頭へ
M-v 1画面戻る
C-p 1行戻る
C-aM-bC-b C-fM-fC-e
行頭1語戻る1字戻る 1字進む1語進む行末
C-n 1行進む
C-v 1画面進む
M-> バッファ末尾へ

領域操作

編集バッファの「ここから、ここまで」をまるごとコピーしたり 削除したりするには

  1. 「ここから」に相当する場所をマークする
  2. 「ここまで」に相当する場所に移動して該当する操作をする

という手順で行なう。

C-SPCポイント位置を「マーク」する
C-wマークからポイントまでの領域を削除して 記憶する
M-wマークからポイントまでの領域を記憶する
C-y C-wM-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 ファイルを 作成・編集し、最後にそれらを削除

という操作をしてみよう。具体的には、

  1. (Terminalで) ~/TEST ディレクトリを作成し
  2. (Emacsで) ~/TEST/hoge ファイルを作成し
  3. (Emacsで) ~/TEST/hero ファイルを作成し
  4. (Emacsで) hogeとheroバッファを行ったり来たりして
  5. (Emacsで) hogeとheroバッファを閉じ
  6. (Terminalで) ~/TEST ディレクトリをまるごと削除

のような流れで作業する。。

その前に効率的なウィンドウの切り替えを訓練しておこう。 マウスをどこに置いているかにかかわらず以下のキー操作が有効になっている。

C-1Emacsのウィンドウを選択
C-2Term-2(大きい方のTerminal)のウィンドウを選択
C-3Console:(小さい方のTerminal)のウィンドウを選択

Controlキーを押しながら数字の1から3を押してウィンドウが切り替わる様子を 4、5回繰り返して理解しよう。上記の6つの手順で「Terminalで」とある操作の 直前にはC-1を、「Emacsで」とある操作の直前にはC-2 をタイプしよう。

  1. ~/TEST ディレクトリの作成

    Terminalでmkdirする。

    mkdir TEST
    ls -F
    Mail/           TUTORIAL.ja     maildir/        public_html/
    TEST/           help            memo            script/
    cd TEST
    ls
    (空っぽなので何も表示されない)
    
  2. ~/TEST/hoge ファイルの作成

    Emacsで C-x C-f すると編集したいファイル名を 聞いてくるので ~/TEST/hoge を入力する。

    Find file: ~/TEST/hoge
    

    TESTを入力するときに、最初の1、2字入れたところで [Tab]キーを押すと残りが補完される。 ファイルを開いたら以下の内容で保存(C-x C-s)する。

    ほげほげほげー
    やあやあやあー
    

    保存できたらTerminalに移り、実際に書き込まれているか確認する。

    cat hoge
    ほげほげほげー
    やあやあやあー
    
  3. ~/TEST/hero ファイルの作成

    Emacsに戻り~/TEST/heroファイルを開く。 C-x C-fしてファイル名を入力する。

    Find file: ~/TEST/hero
    

    新規に開いたら以下の内容で保存する。

    こっちはへろへろです。
    

    こちらもTerminalで確認してみよう。

    cat hero
    こっちはへろへろです。
    
  4. hogeとheroバッファの往復

    EmacsでC-x bをタイプすると、 切り替えたいバッファ名(ファイル名と同じ)を聞いてくるので hogeまたはheroを入力し相互を往復する。何度か繰り返そう。

  5. hogeとheroバッファの破棄

    EmacsでC-x kとタイプすると、 閉じたいバッファ名を聞いてくるので hoge または hero を入力してそれを閉じる。 未保存のバッファはうまく閉じられないので必ず保存してから C-x kする。バッファ名を入れずにリターンを押すと 現在編集中のバッファが閉じられる。

  6. ~/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のスクロールバーを利用すればさかのぼって見ることができる。

Terminalでのコピーペースト

マウスの左ボタンでドラッグすると範囲選択した部分がコピーされる。 EmacsにペーストするときはEmacsでヤンク(C-y)する。

Terminalでの領域選択のとき

記憶した領域をTerminalにペーストするにはマウスの真中ボタンをクリックする。

日本語入力

Terminalでの日本語入力モードは Shift-SPC をタイプして 切り替える。Emacsでは C-o で切り替える。


目次