スポンサーリンク
この前、Eclipseでリモート実行を自動化する方法を紹介しましたが、あまりに面倒なので、Eclipseプラグイン化しました。Eclipseの再生ボタンを押すと、実行に必要なファイル群を次々リモートサーバに送信し、リモートで実行して、手元のコンソールに結果を表示します。あまり試していない機能ですが、SSHトンネリングを経由して、リモートのJVMにアタッチするところまで自動実行することもできます。
ただ、自分でしか使っていないので、動作を期待しないでください。ソースは自分のGithubに置いてあります。
スポンサーリンク
動作概要
Eclipseの再生ボタンでプラグインを起動すると、最初にリモートの起動用スクリプトを生成します。次に、SCPを使って、リモートのサーバに、実行に必要なファイルと起動用スクリプトを送信します。そして、SSH経由でリモート実行し、実行プログラムの出力を、手元のEclipseのコンソールウィンドウにリアルタイムに表示します。ここまでボタン一つです。
特徴
特徴は、コマンド入力などをすることなく、再生ボタンをクリックするだけで、送信や実行、結果の表示までができると言うことです。
また、SSH/SCPは外部コマンドを呼び出して実行します。Eclipseの内部にもSSH機能などがありますが、いろいろな場面で不具合が起こる今までの経験から、外部コマンドを呼び出すように設計しています。また、外部コマンド呼び出し時のパラメータを自由に変更でき、トラブル解決がしやすくしてあります。
Eclipseの「リモートデバッグ」機能とは違います。リモートデバッグの事前準備である、実行ファイル・ライブラリのリモートへの送信、起動コマンドの作成などを、自動実行します。コンソールでSSHログインしてコマンドを入力する必要もありません。
動作環境
- ローカル(クライアント):Windows・Mac(・Linux)
- リモートサーバ:Linux
- リモートにはjavaコマンドがインストール済み、パスが通っている
- ローカルからリモートにSSHログイン可能
- Windowsの場合は、ssh・scpコマンドの互換コマンドが必要
- Eclipse 4.2 で作成しています。
インストール方法
インストールにはdropin機能を使います。
- 2013-12-19:http://did2memo.net/wp-content/uploads/files/net.did2memo.remote_1.0.0.201312190156.jar
- 2013-12-20(最新):http://did2memo.net/wp-content/uploads/files/net.did2memo.remote_1.0.0.201312202218.jar
上記の.jarファイルのいずれかをダウンロードして、eclipseフォルダにある「dropins>plugins」フォルダにコピーして、eclipseを再起動してください。これでインストール完了です。
使用方法
以下、使い方です。WindowsとMacの場合を紹介します。
ローカルのSSHコマンドの準備
ローカルのSSH・SCPコマンド(の互換コマンド)で、リモートサーバにログインできる状態にしておきます(Eclipseの中でSSH環境を作るのほんとトラブル多すぎる)
また、公開鍵認証が推奨で、パスワードのログインは非推奨です(パスワード入力に対応させるためにインタラクティブなConsoleを自作するのに苦労したけど非推奨)。
Windows編
Windows環境の場合は、PuTTYに同梱されているsshコマンドの互換プログラムplink.exeとscpコマンドの互換プログラムpscp.exeの利用がおすすめです。
まず、公開鍵認証をスムーズに行うために、PuTTYに同梱されているpageant.exeを起動して、タスクトレイのアイコンをダブルクリックして、「鍵の追加」から、秘密鍵(.ppk)と、秘密鍵のパスフレーズを入力しておいてください。
これにより、eclipse上でパスフレーズを入力したり、プロジェクトに秘密鍵を保存したりする必要がなくなります。
Mac編
sshコマンドで、公開鍵(~/.ssh/id_rsa)を設置し、公開鍵認証で接続できることを確認してください(例:ssh [-p ポート番号] username@remote.example.net)。
Macに「SSHキー"id_rsa"のパスワードを入力してください。」と尋ねられた場合は、「パスワードをキーチェーンに保存」をしておくと、何かとスムーズです。
Debug Configurationで設定する
このプラグインは、Debug(Run) Configurationで、実行設定を作成することで設定できます。つまり、たくさん設定を作れば、たくさんのサーバで気軽に実行できるようになります。
そこで、「Run>Debug Configurations」を開きます。
そして、左の一覧にある「Remote Exec」をダブルクリックして、新しい設定を作ります。
Mainタブ
まず、Mainタブで実行したい「プロジェクト」と、main関数のあるクラス「Main class」を設定します。
Remote Execution>Remote Host
次に、Remote Executionタブで詳細な設定を行います。
まず、リモートサーバにログインするための「ユーザ名(Login User Name)」「ホスト名(Host Name or IP Address)」「ポート番号(SSH Port)」を設定してください。SSHのデフォルトのポート番号は22です。
次に、実行に必要なファイルを、リモートサーバのどのディレクトリに展開するのかを指定します(Working Directory)。基本的にフルパス推奨です。
Remote Execution>Path to External SSH Command Line Tools
続いて、実行に使う「SSH」プログラムと「SCP」プログラムを指定します。
Macの場合は簡単で、それぞれ「ssh」と「scp」と入力するだけです。
Windowsの場合は、PuTTYに同梱されているplink.exeとpscp.exeまでのフルパスを入力してください(例:D:\putty\plink.exeとD:\putty\pscp.exe)。
Parameter Template
最後に、外部コマンドに与えるパラメータの形式を設定します。MacやLinuxで通常のsshとscpを使う場合は、「ssh, scp style」を選択してください。
WindowsでPuTTYを使う人は、「plink, pscp style」を選択してください。
そのほかの互換ソフトウェアを使う人は、Win/Macの場合を参考に、「original parameter style」から、適切なパラメータの形式を選択してください。
また、公開鍵ファイルを直接指定したい場合も、ここでパラメータをいじることで可能です。ただし、できればWin+puttyならpageant.exe、Macならキーチェーンもしくは事前に一度認証しておくことをおすすめします(Consoleからパスワードを入力することも不可能ではないはず)。
実行
実行は簡単で、実行ボタンをクリックするだけです。
順番に転送が行われ、完了し次第実行されます。そして、実行されたコマンドや実行結果はすべてコンソールに表示されます。
ベータ感のあるところ
ただし、いろいろな問題があるので、利用には注意してください。
改善したい・放置したい・どうにもならない問題
- コマンド実行を途中で停止する機能はまだ搭載されていません
- 設定画面が重いです
- 基本的にWindows上で開発しています
- Remote Executionタブ以外のタブの設定については、反映されない・利用されないものが多数含まれます
- 今のところJava専用です
- Mavenプロジェクトでも、ちゃんとDependenciesをEclipseが認識しているMavenプロジェクトであれば、動作を確認していますが、特殊なプロジェクトではどうなるかわかりません
- 実行に必要なファイルが膨大であれば、その分転送に時間がかかります。
- 文字コードがUTF-8固定になっています
変更履歴
- 2013-12-20 : classpath上のファイルのうち、選択したファイルのみを転送できる機能を追加
- 2013-12-20 : リモート側で実行する起動用シェルスクリプトのテンプレートを編集できる機能を追加
感想
はじめてEclipseプラグインを作ってみたのですが、楽しいですね。情報が少ないので、ソースコードを読んで情報を集めてばかりになりますが。
スポンサーリンク
スポンサーリンク