ハウツー:Vimをbash用IDEとして利用する

 Vimはそのままでもシェルプログラミング用の非常に優れたエディタだが、ほんの少し調整するだけで、スクリプトを書くための本格的なIDEに変身もする。Vimの調整は自分で行なうことも可能だが、Fritz Mehner氏によるBash Supportプラグインをインストールすれば手軽に行なうことができる。

 Bash Supportをインストールするには、zipアーカイブをダウンロードして ~/.vimディレクトリにコピーし、アーカイブを展開する。また、~/.vimrcファイルの中にいくつかの個人情報を付け加えておくと便利なので、~/.vimrcファイルを開いて以下のような3行を追加しよう。

let g:BASH_AuthorName = 'Your Name'
let g:BASH_Email = '[email protected]'
let g:BASH_Company = 'Company Name'

 詳しくは後述するが、以上の各変数はプロジェクトのヘッダの一部で使用される。

 Bash Supportプラグインは、gVim(Vim GUI)でもテキストモードのVimでも使用することができる。ただしGUIとして利用した方がやや使いやすいのに加え、Bash SupportプラグインはVimのテキストモードではほとんどのメニュー機能を実装していないので、スクリプトを書く際にはgVimを使用した方が良いかもしれない。

 Bash Supportをインストールすると、「Bash」という名前の新たなメニューがgVimに追加される。Bash Supportの持つすべての機能は、このメニュー経由で利用することができる(なおメニューはマウスからでもキーボードからでも操作することができる)。以下では、Bash Supportが提供する機能の一部を紹介し、Bash SupportによりBashスクリプトの作成がいかに容易になるかを見ていく。

ヘッダとコメント

 スクリプトの中にたくさんのコメントを書くようにしている人は(そういう人が多いことを私は願っている)、Bash Supportの恩恵を特に受けることができるだろう。Bash Supportではbashスクリプトにコメントを簡単に付け加えるための機能が数多く提供されていて、自動的に、あるいは2、3のキー入力やマウスクリックでコメントを追加することができるようになっている。

 自分以外の人にも使用/管理されることになるような本格的なスクリプトを書き始める際には、スクリプト名、利用方法、説明、注意点、作者情報、著作権表示など、自分の次にスクリプトを管理することになる人にとって有益だと思われる基本情報をヘッダに付け加えておくのが賢明だ。Bash Supportを使うと、そのような情報を非常に簡単に付け加えることができる。gVimでBash→Comments(コメント)→File Header(ファイルヘッダ)を実行すれば、以下のようなヘッダがスクリプトに挿入される。

#!/bin/bash
#===============================================================================
#
#          FILE:  test.sh
#
#         USAGE:  ./test.sh
#
#   DESCRIPTION:
#
#       OPTIONS:  ---
#  REQUIREMENTS:  ---
#          BUGS:  ---
#         NOTES:  ---
#        AUTHOR:  Joe Brockmeier, [email protected]
#       COMPANY:  Dissociated Press
#       VERSION:  1.0
#       CREATED:  05/25/2007 10:31:01 PM MDT
#      REVISION:  ---
#===============================================================================

 上記のヘッダの中には自分で入力する必要のある情報もあるが、作者名、企業名、電子メールアドレスについてはBash Supportが ~/.vimrcから取得してくれる。またファイル名と作成日時についても自動的に挿入してくれる。さらに便利なことに、VimやgVimで .sh拡張子の付いた新しいファイルを開くとヘッダは自動的に挿入される。

 スクリプトを書いていると、関数についても上記のような複数行にわたるコメントを付け加えたいことがあるだろう。これを行なうためには、Bash→Comment(コメント)→Function Description(関数の説明)を実行すると、以下のようなテキストが挿入される。

#===  FUNCTION  ================================================================
#          NAME:
#   DESCRIPTION:
#    PARAMETERS:
#       RETURNS:
#===============================================================================

 適切な情報を入力したら、コーディングの続きをしよう。

 Comment(コメント)メニューではまた、他のタイプのコメントを挿入したり、現在の日付や時刻を挿入したり、選択したコードをコメントアウトしたりその逆を行なったりすることができる。

文とスニペット

 例えばif-else文をスクリプトに付け加えたい場合には、if-else文を手動で一文字ずつ入力することもできるが、Bash Supportがあらかじめ用意している文から選択することで手軽に入力することもできる。Bash→Statements(文)を実行すると、あらかじめ用意された文を選択するための長いリストが表示される。そのようにあらかじめ用意されている文は、選択して挿入したら必要な場所を埋めるだけで利用することができる。したがって例えばwhile文を挿入したいときには、Bash→Statements(文)→whileを実行すると以下のようなコードが挿入される。

while _; do
done

 なおカーソルは上記の例のアンダースコア(_)の所に移動する。つまり後は、判定用の文とwhile文の中で実行したいコードの本体を追加すれば良いだけだ。もちろんBash Supportがそれらもすべて追加してくれれば有難いが、それはIDEができる手助けの限界を超えている。

 とは言え、自分のための手助けを自分でしておくことはできる。頻繁にbashスクリプトを作成する人は、新しいスクリプトの中で再使用するための関数やコードスニペットを持っていることだろう。Bash Supportでは、スニペットとして保存したい部分のコードをハイライトしてBash→Statements(文)→write code snippet(コードスニペットの作成)を実行することで、ハイライトした部分をスニペット集に追加することができる。そしてすでに書いたコードを利用したいときには、Bash→Statements(文)→read code snippet(コードスニペットの読み込み)を実行すれば良い。なおBash Supportにはいくつかのコードスニペットが最初から付属している。

 またコードスニペットをスニペット集に追加する別の方法としては、単に、スニペットが入ったテキストファイルを~/.vim/bash-support/codesnippetsディレクトリの下に置くという方法もある。

スクリプトの実行とデバッグ

 スクリプトの作成が終わったら、次はテストとデバッグだ。Vimから抜けてスクリプトを実行可能にし、スクリプトを実行してバグがあるかどうかを確かめ、スクリプトを編集するために再びVimに戻るという方法もあるが、これは単調で退屈な作業だ。Bash Supportを使用すれば、Vimの中にいたままテストを行なうことができる。

 スクリプトを実行可能にするには、Bash→Run(実行)→make script executable(スクリプトを実行可能にする)を実行するだけで良い。またスクリプトを保存して実行するには、Ctrl-F9を入力するか、またはBash→Run(実行)→save + run script(スクリプトを保存して実行)を実行すれば良い。

 Bash Supportではまた、bashdb(bashデバッガ)をVimの中から直接的に呼び出すことができる。Ubuntuではデフォルトではbashdbがインストールされていないが、apt-get install bashdbを実行するだけで簡単にインストールすることができる。bashdbをインストールした後は、F9を入力するか、またはBash→Run(実行)→start debugger(デバッガの起動)を実行することで、作成中のスクリプトをデバッグすることができる。

 また、スクリプトのハードコピー(PostScriptのプリントアウト)が必要になったときには、Bash→Run(実行)→hardcopy to FILENAME.ps(FILENAME.psにハードコピーする)を実行することで生成することができる。この機能に関しては、Bash Supportはbashスクリプトに限らずどのようなタイプのファイルについても役立つだろう。この機能を使うと、Vimで編集中のあらゆるファイルのPostScriptの出力を生成することができる。

 Bash Supportにはその他にも、Vimの中からスクリプトを実行してテストする際に役立つ機能がある。そのような便利な機能の一つに構文チェックがあり、Alt-F9を入力して実行することができる。構文チェックを実行すると、構文エラーがない場合にはすぐにOKが表示され、問題がある場合には、Vimの画面の下の方に小さなウィンドウが表示されて、そこに構文エラーの一覧が表示される。そのウィンドウでエラーをハイライトしてEnterを入力すれば、エラーのある行へ移動することもできる。

リファレンス本いらず

 スクリプトに正規表現や判定条件を入れなければならないのに、正確な文法を思い出せないという嫌な経験をしたことはないだろうか?Bash Supportを使用すればそのようなことは問題とならない。というのも、必要なことはすべてRegex(正規表現)メニューとTests(判定条件)メニューで用意されているためだ。例えば、ファイルが存在していて、かつ、シェルを実行したユーザの実効ユーザIDで所有されているかどうかを確かめる必要がある場合には、Bash→Tests(判定条件)→file exists and is owned by the effective UID(ファイルが存在し、かつ、実行中のシェルの実効ユーザで所有されている)を実行する。するとBash Supportが適切な判定条件([ -O _])を挿入して、ファイル名を入力すべき場所にカーソルを移動する。

 正規表現を手早く作成するためには、BashメニューからRegex(正規表現)を選択して、リストから適切な正規表現を選択すれば良い。「0個または1個の」というような条件やその他の正規表現を正確にどう表現するのかを思い出せないときなどにかなり便利だ。

 さらにBash Supportには、環境変数やbashの組み込みコマンドやシェルのオプションなどのためのメニューもある。

ホットキーのサポート

 ホットキーを使用してBash Supportの機能の多くを利用することもできる。メニューのクリックほど簡単ではないものの、ホットキーはルールに従って決められているので簡単に覚えることができる。例えばコメントに関する機能はすべて\cを入力するようになっているので、ファイルのヘッダを挿入するには\ch、日付を挿入するには\cd、行末コメントを挿入するには\clを入力すれば良い。

 また文の挿入については\aを使用するようになっていて、例えばcase文の挿入には\ac、if then else文の挿入には\aie、for in… 文の挿入には\afを入力する。なおオンライン文書はこのことに関して間違っていて文のホットキーは\sから始まるとしているが、Bash Supportに付属しているPDFのリファレンスカード(.vim/bash-support/doc/bash-hot-keys.pdf)には正しく記載されている。

 実行に関するコマンドには\rを使用する。例えばスクリプトを保存して実行するには\rr、スクリプトを実行可能にするには\re、デバッガを起動するには\rdと入力する。この記事ですべてのショートカットを紹介することはできないが、Vimで:help bashsupport-usage-vimを実行してリファレンスを参照するか、または付属のPDFを利用すると良いだろう。Bash Supportの完全なリファレンスは、Vimで:help bashsupportを実行するか、またはオンラインで読むことができる。

 当然ながら、ここで紹介したのはBash Supportの機能のほんの一部だ。次にシェルスクリプトを書くときには、是非Bash SupportをインストールしたVimを利用してみて欲しい。bashでのスクリプティングが非常に楽になるはずだ。

 NewsForgeでは毎週月曜日に異なる拡張/プラグイン/アドオンを紹介している。使用しているツールの紹介とその効果、そして上手に使いこなすためのヒントなどについて1,000ワード以下の記事を執筆していただければ、採用された方にはもれなく100ドルをお支払いする。なお、同じテーマがすでに最近取り上げられていたり掲載予定になっていないか、まずは確認のメールを送ってきてほしい。

NewsForge.com 原文