Emacs DBIを試す

DB操作用のGUIツールはいろいろありますね

最近のお仕事では開発環境のDBがSQLiteなので、DBの状態を見るのにFirefoxSQLite Managerを使ってました。
昔はOracleにつなぐのにCSEを使ったり、EclipseのDBViewerを使ったり。

Emacsから操作できたら素敵だなーと常々思ってたんですが、ついにそのためのライブラリを見つけました。

DB操作ツール Emacs DBI を作ってみた
http://d.hatena.ne.jp/kiwanami/20120305/1330939440

こんなすばらしいツールを作ってくれるなんて感謝感謝です

早速試してみました

環境

Mac OSX Lionです。perlが必要ということですが、デフォルトで入ってます。

$ which perl
/usr/bin/perl
$ which cpan
/usr/bin/cpan

導入

cpanm


perlは疎いのですがcpanmを使うと良いということですので、入れてみました。rubyでいうrvm、pythonでいうvirtulenvみたいなものなんですかね?

$ cd ~/bin    
$ curl -LOk http://xrl.us/cpanm
$ chmod +x cpanm

.bash_profileに以下を設定

export PERL_CPANM_OPT="--local-lib=~/extlib"
export PERL5LIB="$HOME/extlib/lib/perl5:$HOME/extlib/lib/perl5/i386-freebsd-64int:$PERL5LIB"

local::libを入れる

$ cpanm local::lib
--> Working on local::lib
Fetching http://search.cpan.org/CPAN/authors/id/A/AP/APEIRON/local-lib-1.008004.tar.gz ... OK
Configuring local-lib-1.008004 ... OK
Building and testing local-lib-1.008004 ... OK
Successfully installed local-lib-1.008004
1 distribution installed

upgrade

$ cpanm --self-upgrade
--> Working on App::cpanminus
Fetching http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.5007.tar.gz ... OK
Configuring App-cpanminus-1.5007 ... OK
Building and testing App-cpanminus-1.5007 ... OK
Successfully installed App-cpanminus-1.5007
1 distribution installed


Emacs DBIに必要なモジュールを入れる。とりあえずSQLiteを使いたいんだけど、MySQLとPostgresも入れときました。

cpanm RPC::EPC::Service DBI DBD::SQLite DBD::Pg DBD::mysql


Emacsのライブラリを入れる

M-x list-packages

でedbiにiでマークつけてxでインストール

使ってみる

M-x edbi:open-db-viewerを実行し、表示されたバッファにDBの接続情報を入力してOKします。

SQLiteの場合はDataSourceに以下のような形式で入力します。

dbi:SQLite:dbname=/path/to/devdb.sqlite

DataSourceを入力してOKしたところ、以下のようなエラーが発生

Connection Error : (error Server may raise an error : Can't locate RPC/EPC/Service.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.3 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12 .) at /Users/yuhei/.emacs.d/vendor/elpa/edbi-0.1.0/edbi-bridge.pl line 4.
BEGIN failed--compilation aborted at /Users/yuhei/.emacs.d/vendor/elpa/edbi-0.1.0/edbi-bridge.pl line 4.

Process epc:server:2 exited abnormally with code 2
)

環境変数PERL5LIBが設定されていなかったのが原因でした。
シェルからemacsを起動しているのに、シェル側で.bash_profileを読み直していなかった。


PERL5LIBを設定して再度起動してみたら、こんどは以下のようなエラー。

Connection Error : (error "Can't call method \"get_info\" on an undefined value at /Users/yuhei/.emacs.d/vendor/elpa/edbi-0.1.0/edbi-bridge.pl line 20.
")

今度は普通にdbファイルへのパスが間違ってました。
パスが間違っているとこういうエラーになります!


上記を修正してようやく起動しました

感想

とりあえずSQLiteで使ってみました

  • 今まではFirefoxSQLite Managerを使っていましたが、アプリを行ったり来たりしなくてよくなった。操作性も断然良いです
  • クエリの履歴機能、auto-completeが素敵
  • Emacs上で動くのでクエリの結果をキルしてそのまま使える
  • テーブル定義をすぐ参照できるのも便利


今はSQLiteで開発してるのでそれしか試してませんが、操作が統一されるのも素敵です