先週に引き続き,今週はC言語以外の言語や開発をサポートするための,いくつかの機能を紹介します。
scratchバッファでEmacs Lispを使ってみよう
ご存じの通り,Emacs LispはEmacsで使われているLispの方言です。EmacsはC言語で書かれたコア部分以外のほとんどがこのelispによって実装されており,ユーザはelispによってEmacsそのものを拡張することができます。
Emacsの設定ファイルである.emacsもelispのプログラムそのもので,Emacsは.emacsに書かれたコードを評価することで,設定を行っています。
といっても,そんなに難しいものではありません。Emacsを起動した時に,最初に開かれるバッファ *scratch* は,デフォルトでメジャーモードが lisp-interaction-mode になっており,このモードではelispの式をその場で評価することができます。
例えば,elispで計算式を書いてC-jで評価することで,*scratch*バッファを簡易的な電卓として使うようなことができます。ちょっとした処理を書き捨てるには最適な場所といえるでしょう。
(+ 2 3) <- ここで C-j を入力 5 <- 計算結果が表示される
ただし,elispは整数を29bitで扱っており,-268435456から268435455の範囲の値しか扱うことができません。あまり大きな数はオーバーフローとなってしまうため,注意が必要です。
Rubyを使ってみよう
Rubyのようなスクリプト言語は,C言語のように事前コンパイルを行わなくてもプログラムを評価できるため,非常にお手軽です。
例えば,Rubyには標準入力から入力した式をその場で実行できるirbというツールが存在しますが,このirbを利用することで,Emacs上から対話的なプログラミングを行うことができます。
まずは,Rubyとirb,Ruby用のモードをインストールします(注1)。
$ sudo apt-get install ruby irb ruby-elisp
- 注1
- Ubuntu 10.04では,rubyパッケージをインストールするとruby 1.8がインストールされます。ruby 1.9.1が使用したい場合は,ruby1.9.1やirb1.9.1を使用する必要があります。
ruby-elispパッケージにはinf-ruby.elというファイルが含まれています。/usr/share/emacs/site-lisp/ruby1.8-elisp/inf-ruby.elの先頭に,.emacsファイルに記述する設定が記載されていますので,該当部分を.emacsにコピーしてください。具体的には以下の内容になります。
(autoload 'ruby-mode "ruby-mode"
"Mode for editing ruby source files" t)
(setq auto-mode-alist
(append '(("\\.rb$" . ruby-mode)) auto-mode-alist))
(setq interpreter-mode-alist (append '(("ruby" . ruby-mode))
interpreter-mode-alist))
(autoload 'run-ruby "inf-ruby"
"Run an inferior Ruby process")
(autoload 'inf-ruby-keys "inf-ruby"
"Set local key defs for inf-ruby in ruby-mode")
(add-hook 'ruby-mode-hook
'(lambda ()
(inf-ruby-keys)))
これにより,Emacsで*.rbファイルを開くと,自動的にメジャーモードがruby-modeになります。ruby-mode上でC-c C-sと入力すると,*ruby*バッファが開かれ,その中でirbが起動されます。端末からirbを起動した時と同様に,Rubyのプログラムを評価することが可能です。また,ソースコード上でC-c C-rと入力することで現在のリージョンを,C-c C-bで現在のブロックをirbに評価させることができます。
コーディングしながら任意の式を評価できるため,「ソースを保存」=>「端末を開く」=>「rubyインタプリタを起動」のような手順を踏む必要がありません。
さらに興味のある方は,inf-rubyを拡張したirbshなどを調べてみるのも,面白いかもしれません。
バージョン管理ツールと連携しよう
プログラム開発において,バージョン管理ツールの使用は必須といってよいでしょう。EmacsはVCというバージョン管理ツールへのインターフェイスを標準で持っており,コードのバージョン管理もEmacs上から行えます。
VCはバックエンドとしてCVSやSubverionなど,複数のバージョン管理ツールに対応しており,ソースコードのディレクトリ内に.svnディレクトリがあればSubversionを,CVSディレクトリがあればCVSをというように,使用するツールも自動的に選択してくれます。
ここでは第58回でも紹介した,Subversionを使った例を紹介します。
Subversionからチェックアウトしたソースを開くと,モードラインに"SVN-x"と示され,SVNによるバージョン管理下にあることと,現在のリビジョン番号が表示されます。ソースコードに変更を加えて保存したら,C-x v vで変更をコミットすることができます。その際に,別バッファでコミットログの入力を促されるので,ログを入力してC-c C-cと入力してください。
バージョン管理ツールを使うメリットは,変更履歴の管理や,内容の比較,変更の破棄などが簡単に行えることですが,そのような機能もEmacs上から利用することができます。
例えば,C-x v =と入力すると,編集中のソースとリポジトリ上のHEADとの差分のdiffをとることができます。現在のファイルへの変更を破棄して,チェックアウトした最新版へ戻したい場合は,C-x v u,コミットログの履歴を見たい場合はC-x v l,新しいファイルをバージョン管理下に置きたい場合はC-x v iです。
詳しくは,VCのマニュアルを調べてみてください。

