2013-02-04

IntelliJ / SSHトンネル利用のデータベース接続をためしてみました。

昨年の後半にIntelliJを知ったものの、『そこまでは使わないよね...』と思い、特定の目的については、RubyMineの利用を続けていた日々。(これはこれで大満足です!)

ですが、いろんな言語のWebアプリケーションの動作チェックやちょっとした修正をしたり、DBを直接参照する事もあります。コードについては SublimeText2を使っているのですが、データベースについては色々あるので、その都度Macにクライ アントをインストールして、クライアントツールを切り替えて使っていたりしました。(MySQL WorkBenchとか、SQL Developerとかです)

で、こういったDBも直接はアクセスできないので、ポートフォワードして手元のMacから操作するようにしていたのですが、これも毎回DB毎にポートフォワードのプロセスを起動するのが面倒。ターミナルも増えてしまうのもなんだか嫌...。いい方法があったら教えて下さい〜(><)
 * * *


ひとまず、DB接続用のポートフォワードのプロセスをJenkinsのジョブに登録して、DB接続の必要が出てきたら、該当するジョブを起動してポート転送というやり方でしのいでおりました。

そんな折、下記のTweetを発見...。

どうやらDBに接続する際に、ポートフォワード(SSHトンネリング)の設定が出来る模様。
これは良いかも!と思い、IntelliJ IDEA 12.0.3 EAPをインストールしてみました。#評価版ライセンスです(^^;
そもそもIntelliJ 初めて&EAP(Early Access Program) での利用でしたが、試用については特に正式リリース版と変わらない感じです。

空っぽのプロジェクトでデータベース接続接続を作ります


『始まりは、何はともあれプロジェクト』のようですが、コードをスクラッチから書ける人間では無いので、空っぽのWeb Moduleプロジェクトで開始。

何もコードを書かずとも、画面の右端に『Database』というタブが表示されていたので、右クリック -> New -> Data Sourceで接続追加となるようです。
あまり芸が無くて申し訳ないのですが、まずは、踏み台サーバ1段を通して接続するMySQL&Oracleで試してみました。

新規接続では、JDBCのドライバファイルを選択します。
こちらも、あらかたのDBがプルダウンで選択できるようになっていて、使いたいデータベースを選ぶと、それに合ったJDBCをダウンロードしてくれる機能がついています。これって今時のIDEは普通なんでしょうか...?

ともかく、自分で探してきてからパスを通したりする手間が省けるため、これは嬉しい!
Oracleの場合だと、OTN行かなくても、IntelliJ側の用意しているOracle Driverをダウンロードできました。MySQLもドライバの設定は同様で、特に問題なく大変楽でした。


localhostにポートフォワードの設定をします


さて、本題のSSH Tunnel機能です。『Configure SSH』のボタンを押して、ssh -L .... に相当するポートフォワードの設定をします。添付の画像は、リモートのMySQLの3306番を、localhost:23306 に転送した例です。

Test Connectonでのチェックもできますし、本当に簡単です!
うまく繋がると、DBのEdition, ドライバの情報も表示されます。(下記はOracleの例です)


データベースのクライアントとしては?


接続できる/テーブル(モデル)が参照できるのも良いのですが、基本はSQLのコマンドが使えないと私は困ります....。
SQLについては、『Console』を起動させると、SQLコマンドが実行できるようになります。
正直、1ツールから複数種類のDBが扱えるだけでも十分だったので、そんなに期待して無かったのですが、コードの補完(Suggestion)もしてくれるのにはビックリ!


SELECT結果もエクスポートできます。逆にインポートもOK。テーブルの編集もできます。


多段になるとうまく行かないので....


嬉しいSSHトンネル機能+複数DB対応ではありますが、多段になってしまうとうまく行きませんでした。私の設定の仕方がいけないのかもしれませんが...(^^;
パスワードではなく公開鍵が使えるのは良いのですが、.ssh/config も読み込んで、うまく多段でもつなぎに行けると嬉しいです。

それにしてもなかなか良い機能なので、なんとかして遠くのDBにもIntelliJから繋ぎたいと思った結果....。
冒頭に書いていた、Jenkinsのポートフォワードのジョブ(多段の場合)を、IntelliJから呼び出して実行することにしました。これでひとまず完結できそうです。


 IntelliJのデータベース接続について(その他)

リリース情報の載っていたJetBrainsのBlogに、下記の記事がありました。
コメント欄を見ると、『sshトンネル機能希望。遠くのDBに接続が必要な場合はNavicat を使ってしのいでいるよ』といった書き込みもありました。(Navicatというツールは知らなかったので、これはこれで参考になりました)
その他にも、リモートホストでの作業用のプラグインが色々あるみたいです。
というわけで、使ってみるとやっぱり良いなあと思うようになりました.....(^^;

0 件のコメント:

コメントを投稿