MobaXterm を ssh/mosh/X11 クライアントとして使う（Windows）

#はじめに
今さっき [MobaXterm](http://mobaxterm.mobatek.net/) という mosh クライアントソフト（と形容してはいけないであろう何か）を見つけました。早速使ってみたところあまりの頭のおかしさに（褒め言葉）凄すぎて感動したので、感動が冷めないうちに MobaXterm の素晴らしさをここに記しておこうと思います。

MobaXterm は一応、ssh/mosh クライアント兼ターミナルエミュレーターと呼ぶべき感じのソフトウェアです。私の歯切れが悪い理由は読み進めればきっと分かるでしょう。MobaXterm は GPL v3 に基づいて配布されている商用ソフトウェアであり、Personal Edition （無料・保存できるセッション数１２、ＳＳＨトンネル２つ、マクロ４つまで、TFTP/FTP/HTTPサーバーは事実上使えない；２０１４年１２月現在）と、制限を取り除いた Professional Edition （価格は４９ユーロ）に分かれています。無料の Personal Edition でもほとんどの用途には十分であり、お金を払わないで使うとしても心からオススメできるツールです。

もっとも、MobaXterm の本体は GPL v3 でライセンスされているソフトウェアなので、GPL v3 の要請に沿ってソースコードはちゃんとウェブサーバーで公開されています。ですから、自分で Borland Delphi のソースからコンパイルできる人にとっては自分で Professional Edition 相当のものを多分コンパイルできるでしょうし、出来上がったバイナリを GPL v3 の要請に従って配布することも可能なはずなので Personal Edition の制限には意味が無さそうですが、Professional Edition にはソースコード非公開・再配布禁止の強力なカスタマイザが付いていて、ロゴを変えたり、タブを開いたときの（ウザい）メッセージを変更したり、各種デフォルトを変更したりした状態でインストーラー（msi）ファイルを簡単に生成することができるのが売りということになっています。一言でまとめると、売っているのは実質的にカスタマイザだけ、ということになります。

これから MobaXterm の素晴らしさを解説していこうと思いますが、MobaXterm を販売している Mobatek 社と私は何の関係も無く、そもそも私は今日ネット検索で MobaXterm と Mobatek 社の存在を初めて知った、という程度の関係であり、断じて同社の回し者ではありませんし、MobaXterm が流行っても私に金銭的メリットは何もありません。ただ、このソフトウェアの便利さを維持し続けるには明らかに継続したメンテナンスがとても重要であり、MobaXterm が流行って Professional 版にお金を投じる人が一定数に増え、開発者に長期的なサポートができることが重要だと感じた私は、衝動的に紹介記事を書いてみた、というところです。

##なぜ mosh クライアントを捜していたのか
このサブセクションは私が Windows 上で mosh クライアントを捜していた理由を説明しているだけですので、忙しい人は飛ばして次のサブセクションから読んで下さい。私は Windows 上で SSH クライアントとして PuTTY を長らく使ってきましたが、ネットワークの調子が悪いときにプチプチと切れる SSH コネクションに腹を立て、Mac で使っていた mosh を Windows 上でも使いたいなぁ、と思い始めました。mosh は UDP コネクション上に張る SSH のようなもので、コネクションを張っているノートパソコンをサスペンドして復帰したり、異なる無線 LAN 環境に接続して IP が変わったりしても接続が切れないのが特徴です。ところが Windows 上では Cygwin 環境でコンパイルできる mosh クライアントはあるものの、PuTTY 等のコンソールエミュレーターから使うには[一工夫が必要](http://www.zacpod.com/mosh-putty-and-cygwin-with-a-side-of-cygputty/)で、特に Cygwin を使っていない環境に新規にセットアップするのが面倒でした。Cygwin はインストールに時間がかかりますし、出先で他人のWindowsマシンに５分でセットアップとかできないですよね。もちろん、よっぽどパッケージを絞れば別ですが、それなりに手間がかかります。

そこで見つけたのが[MobaXterm](http://mobaxterm.mobatek.net/) というソフトウェアです。私が求めていたのは単なる mosh クライアントでしたが、使ってみたらびっくりするほど高機能かつコンパクトで統合された多機能な統合環境とも言うべきソフトウェアでした。３０分ほど試して即決でお金を払い、色々カスタマイズしてみました。ただし、カスタマイズしなくてもメッセージが多少うるさいだけで機能的には何も問題はないと思いますので、以下、無料版の Personal Edition を元に紹介して行きたいと思います。

##MobaXterm とは何ができるソフトウェアなのか？
MobaXterm の名前の由来はおそらく「モバイル Xterm」なのだと思います。*NIX のターミナルの便利さを全部 Windows にそのまま持ってこよう、というそういう発想で作られた MobaXterm には山ほどの機能が盛られています。

* [PuTTY](http://www.putty.org/), [KiTTY](http://www.9bis.net/kitty/), [Poderosa](http://sourceforge.net/projects/poderosa/), [TeraTerm](http://ttssh2.sourceforge.jp/) のような SSH クライアント兼コンソールエミュレータとして動作する
  * コンソールエミュレータはタブ型で、縦・横・縦横分割ができる
  * X サーバーが付いているのでリモートで X アプリを起動しても Windows アプリのように動く
  * PuTTY の設定を読み取ってくれるので、移行時に接続先の設定が要らない
  * SSH 以外にも rsh/mosh/FTP/SFTP/シリアルポートなどのプロトコルをサポート
  * 二段 SSH や二段 sftp に対応している
  * 全ウィンドウ同時コマンド入力とか地味に便利な機能もある
  * cmd.exe をラップしたコンソールエミュレータとしても動作できる
  * bash を立ち上げて vi とか色々なツールが「ローカルで」動く
  * マクロ機能が付いていて簡単な自動化もできる
  * コンソールのスクリーンショットを取る機能が付いている
  * SSH ポートフォワーディングの時に GUI で分かりやすくホストの関係を表示してくれて -L とか -R とか悩まない。
  * ウィンドウ（タブ）のサイズを維持したまま CTRL+マウスホイールでフォントを拡大縮小できる。プレゼンでデモするときとかにとても便利。
  * 日本語のインライン入力はできない。（回避方法があるかは今のところ分からない。）
  * 一通りのキー・見た目のカスタマイズ項目はある模様。ぱっと見で無いのはバックスクロールバッファのサイズぐらいだった。
  * フォントのカスタマイズはできるが、カスタマイズダイアログ上で表示される日本語フォントの名前は文字化けする。
* [WinSCP](http://winscp.net/eng/docs/lang:jp) のような GUI の SFTP クライアントが付いてる
* X11 サーバー (Xdmcp でのログインもできる)
  * Fvwm2 とか dwm とかローカルで動くウィンドウマネージャーも使える。
* RDP/VNC によるリモートデスクトップクライアント
* 内蔵ブラウザ(多分IEコンポーネント)
* なんかサーバーが一杯付属しているのでちょっと実験するときに便利っぽい（まだ試していない）
  * TFTP/FTP/HTTP/SSH/SFTP/Telnet/NFS/VNC/Cron サーバーが付いてる（ように見える）
* 電卓機能が付いてる
  * なんか分数の計算とかもできるので、割り算が割り切れなくても安心。方程式も解ける。
* ASCII 表が付属していて、ポンド記号って HTML の実体参照でなんだっけ？とか、Latin-1 でウムラウト付きの文字のコードとか思い出せなくても調べられる
* ディレクトリの diff ツールが付いてる
* 画像ビューワーも付いてる
* パケットキャプチャとかポートスキャナとかが付いてる
* 当たり前かもしれないが HTML 形式のヘルプファイルも入ってる
* MobApt という GUI の apt-get が付属していて Cygwin にあるようなパッケージ群は使える。クリックすれば git とかがすぐに使える。
* ゲームが付いてる（削除する機能も付いてる）
  * テトリスクローン、マインスイーパ―クローン、インベーダーゲームクローンなどなど
  * データセンターでルーターをシリアルでメンテしている時に、ルータ再起動待ちとかでネットに繋がっていなくても遊べる！

これだけアホみたいに（褒め言葉）機能が付いているゴテゴテのプログラムは、Cygwin みたいに大量のダウンロードが必要でインストールにも時間がかかり、プログラムの起動も遅いんでしょ？って思いますよね。ええ。私はそう思ってました。実際に MobaXTerm のインストーラーをダウンロードしてみたらファイルサイズが小さい。これだけの機能が全部入って msi ファイルで**たった約20MB**しかない。頭がおかしいです（褒め言葉）。てっきり接続が途中で切れたんだと思って何度かクリックしてしまいました。このファイルは、ガチガチに圧縮されているらしく、初回起動時には展開のために若干（数十秒？）待たされますが、初回だけなのでこれは気にならないでしょう。（2018/11/22追記：二回目以降の起動もSSD上で10秒ぐらい掛かっていてターミナルとしては起動が遅い部類でしたが、2018/11のアップデートで遅延ロード機能が搭載されて同じ環境上で起動時間は1秒ぐらいとなりました。）

ちなみに、インストール作業が不要なポータブル版もあり（ファイルサイズも同じぐらい）、ＵＳＢメモリなどに放り込んで出先で使うこともできます。ポータブル版では、パケットキャプチャなど管理者権限が必要な機能を使わなければ管理者権限は要りません。

# MobaXterm のスクリーンショットたち
MobaXterm はタブ型のターミナルエミュレーター兼SSH(or mosh/telnet/...)クライアントとして使うことができます。タブ型、という意味では Poderosa 等と非常に似ています。タブの切り替えはマウス・キーボードのどちらでもできます。MobaXterm のソースコードには MinTTY と PuTTY が含まれていたので、純粋なターミナルエミュレーターとしての実力は両者のどちらかに似ているのだと思います。このスクリーンショットではカスタマイズしていませんが、背景色や背景画像を設定することができるようです。

![WS000009.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/95e5a630-8eda-7a43-46c1-fa60fe530244.jpeg)

画面は縦に分割したり横に分割したり、縦横分割したりすることができます。試しに縦横分割してみたのが以下の図です。スクリーンショットは載せませんが、全てのタブに同じコマンドを送ったりする機能も付いています（この機能自体はPoderosa等でもできますので特筆すべきかは分かりません）。

![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/037bc900-fd86-fcc0-7fde-5b05afc20605.jpeg)

MobaXterm で一番感動したのは、Xorg が内蔵されていて、一切設定していないのにいきなり X アプリが使える点です。以下のスクリーンショットでは xclock と gvim を「リモートの Linux 上で」立ち上げています。X アプリに対してローカルの IME を使ってリモートに日本語を書き込むことは残念ながらできませんが、見ての通り日本語フォントは普通に表示できました。X のフォーワーディングはデフォルトで on なので明示的に切らない限り設定無しで GUI アプリが動く、というわけです。リモートのマシンで統計解析をして散布図を書きたい、とか、そういう目的で初心者に渡して設定ゼロ説明ゼロで GUI アプリがリモートで即、使えるのがとてもとても良いです。

![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/54bea7a3-f420-e975-38c2-572aea19e18e.jpeg)

また、GUIのsftpクライアントが付いていて、SSHでサーバーにログインすると左側にファイル一覧が出てきてローカルとリモート間でファイルのやりとりができます。ドラッグ＆ドロップもできますし、テキストファイルならクリックしてダウンロードし、ローカルで開くこともできます。編集後にはアップロードもしてくれます（アップロードしないこともできる）。日本語のファイル名もローカルのCP932とリモートのUTF-8の間を自動で変換してくれるようでした。[全角チルダを含むファイル名](http://qiita.com/kasei-san/items/3ce2249f0a1c1af1cbd2)とか、怖い例以外はちゃんと動きます（Windows 7 では全角チルダ×、波ダッシュ○でした。）。"Follow terminal folder" というチェックボックスにチェックを入れると、ターミナルで `cd` するたびに、新しく移動したカレントディレクトリの内容が左に表示されます。`cd` するとついつい `ls` を打ってしまう私には手間の節約になっています。`cd` コマンドを実行した瞬間以外ではファイルのリストを更新しないようなので、カレントディレクトリにファイルを作ってもリアルタイムで更新されるわけではありませんでした。ちなみに、この sftp ウィンドウは邪魔ならもちろん消す（or しまう）ことができます。この sftp ウィンドウ上でファイルをダブルクリックすると、指定のエディタでファイルの編集をすることができます。ちなみに、改行コード３種類（DOS/Linux/Mac）に対応した内蔵エディタが付属しているので何も設定しなくても Windows 上で LF のみの改行コードのファイルをまともに開くこともできます。残念ながら中身が UTF-8 のテキストファイルは内蔵エディタで開くと文字化けしましたが、ここで起動するエディタは設定で差し替えることができるので、[サクラエディタ](http://sakura-editor.sourceforge.net/) のような UTF-8 に対応しているエディタを指定すれば実用上の問題は無いはずです。繰り返しますが、リモートにあるUTF-8の日本語ファイル名はローカルに持ってきた際に（一部の変換が難しい文字以外は）適切に変換されているので、中身のUTF-8さえ正しく認識できるエディタであればなんでもよいはずです。

![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/9356191e-90a7-3bac-fcfb-460e55a90aa9.jpeg)

SSHポートフォワーディングの設定画面はクールすぎます。PuTTY でポートフォワーディングするときには、えーっと、どっちがローカルで、どっちがリモートだっけ？？！と数分考え込むのが日常でしたが、MobaXterm なら違う。こんなに分かりやすい図の上をデータを表す物体（？）がアニメーションで流れて行くので設定で勘違いのしようがありません。素晴らしい！クール！最高！しびれる！初心者にPuTTYでポートフォワーディングする方法を教えた私の人生の数時間は完全に無駄だった！

![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/dd551298-0254-4208-dcb0-4338a1f854b2.jpeg)

おっと、SSHポートフォワーディングはそもそも多段SSHをして、ファイアーウォールの裏側のサーバーにログインしたいとか、ファイアーウォールの裏側にあるサーバーに scp したいとか、そういう時に良く使っていたんでした。でも、MobaXterm を使っている人はそもそもポートフォワーディングとか考えなくても多段（というか２段までだけど） ssh できます。PuTTY 以前に、そもそもポートフォワーディングの説明を初心者に行っていた私の人生の十数時間は完全に無駄だった気がしてきました。

![WS000011.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/1b29bd33-f5b5-8103-b518-851a4edcf513.jpeg)

ちなみに２段 ssh した状態でも左ペインに表示される sftp クライアントはちゃんと使えて、ファイルのやりとりもできるし、クリックしてダウンロード→編集→アップロードのコンボを決めることもできる。ヤバい。これはヤバい。多段 scp のために費やした私の人生の十数時間を返して欲しい。本当に。

話が完全に脱線しましたが、もちろん、当初の私の目的であった mosh も使えます。もともとはプラグインだったようですが、最近本体に取り込まれたみたいです。あまりにも普通に使えるのでこれ以上の解説はありません。

セッションを作成する際に Shell をクリックすると bash と cmd.exe を選ぶことができ、cmd.exe を広い横幅とまともなカットアンドペースト機能付きで使うことができます。ただし、私が試したときには cmd.exe が良く分からないエラーをたくさん吐いていたので、この機能は意外と使われていないのかもしれません。

![WS000005.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/16c465c9-1b91-0b49-b48d-6a838c56a700.jpeg)

私はよく、EOF を送りたいだけなのに CTRL+D をターミナルで連打しすぎて間違ってログアウトしてしまうのですが、ssh/mosh で接続した先をログアウトした場合に再接続するかどうかを聞いてくれます。気が利くね！気を利かせて欲しくない人は設定で切ることもできます。

![WS000007.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/9b69f4ab-a7f1-fc1f-3bba-9f652cb75c23.jpeg)

プログラミング中にちょっとした計算式を計算する必要が出てきたら今までは Chrome のアドレスバーに打ち込むことが多かったのですが、MobaXterm で電卓を開くと、[頭のおかしい（褒め言葉）電卓](http://www.mathomatic.org/)が、ちょっとした方程式とか、小難しい計算でもやってくれます。

![WS000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/3adb12d7-5430-0be4-e616-2234ecd824e5.jpeg)

ちなみに、上の図で左のペインに見える "PuTTY sessions" というところに、PuTTY で保存しているセッションが表示されていますが、インポート作業とかは何もしていないので、勝手に PuTTY の設定を読み取って表示しているのだと思います。PuTTY セッションの一覧はお見せしたくないのでツリーを閉じてありますが、デフォルト状態では開いているので PuTTY ユーザーは本当に移行作業が要らなくて、いきなりいつものホストをクリックするなりキーボードで選択するといきなりログインできます。Pageant に登録したRSA/DSA鍵も何も設定することなく使ってくれたので本当に設定が要りませんでした。あ、右クリックでペーストにならない点はPuTTYと動作が違うので、drop-in replacement として使うのであれば、そこだけは設定する必要があるかと思います。

# MobaXterm のプラグインたち
MobaXterm には git/svn/cvs などのバージョン管理システムや gcc/perl/ruby/node.js/GFortran などの言語処理系、emacs/screen/e2fsprogs/OpenSSL などのプラグインが用意されていて、ファイルをダウンロードして（ダウンロードしたディレクトリを指定して）チェックボックスにチェックを入れるだけで有効になりました。コンパイラはさておき、バージョン管理システムが入っていないマシンでよくイライラする私にはなかなか便利です。私は日本語のファイル名をバージョン管理システムと共に使わないので、そのへんのチェックはご自分でしてください。

プラグインのリストを眺めていたら screen プラグインがあったので試してみましたが、タブの中で「ローカルの」screen が立ち上がり、タブ内タブみたいな感じになりました。たくさんの接続を階層的に扱いたいときに便利かもしれません。

## Cygwin ベースのパッケージたち
MobaXterm は bash を内蔵していて Linux っぽく使うことができますが、Linux の互換環境は BusyBox と Cygwin をベースに作っているようです。デフォルトでインストールされるソフトウェアの数は限られていますが、emacs などの大きなソフトウェアを使いたい人は apt-cyg なり MobApt という開発中の GUI パッケージマネージャから Cygwin のパッケージを入れられるので、色々と使いたくなってもわりと何でもある印象でした。

![WS000010.JPG](https://qiita-image-store.s3.amazonaws.com/0/592/56715b32-5123-60f1-c799-036ee2858aaa.jpeg)

このへんの機能は良くも悪くも Cygwin を引きずっていますが、MobaXterm は初心者に使わせるときに Cygwin より遙かに少ない説明で大丈夫そうに見えるのが嬉しいところです。MobaXterm で不満が出てくる頃には、それこそ仮想環境に Linux でも入れて貰えば良くて、MobaXterm はまっさらな環境からスタートして５分で（ポータブル版ならUSBメモリが認識されるまでの更に短い時間で）ターミナルと VCS 一式に X サーバーまでが揃うところに素晴らしさがあるのだと思います。二段SSHも含めて初心者に対する説明が最小限で済むのもとても良い特徴です。

# マジックのタネ明かし？
ここまでの紹介を読んで分かるとおり、MobaXtermは全ての機能を自分で実装したわけではなくて、ほとんどの機能はフリーソフトをインテグレーションしただけです。例えば bash とかコンソール系のプログラムは BusyBox を使っているだけですし、他にも Crystal, Cygwin, MinTTY, PuTTY, Pingus を使っているようです。ただ、これだけ多くのソフトウェアを高い完成度でインテグレーションして導入を簡単にする作業はとてもまともな（お金儲けをしようという動機から企画立案した）商売ではできないと思いました。おそらく、もともと作者が自分が使いたくて作ったソフトウェアなのでしょう。

このソフトウェアはインテグレーションしているソフトウェアのバージョンアップの度にパッケージを作り直す必要があるはずで、実際にそれなりの頻度でアップデートを行っているようです。ここのインテグレーション、というか、有り体に言えば動作確認が疎かになると MobaXterm の魅力は半減どころかほとんど無くなってしまいます。この紹介記事でユーザーが少しでも増えて、最終的にはこのソフトウェアが継続的にメンテナンスされて私が楽をできる時代が続くことを祈りたいと思います。

# おわりに
昔の私はカスタマイズが好きでした。色々なソフトウェアのキーバインドを変えたり、変なランチャーを入れたり、作業効率を極限まで最適化するのが好きでした。でも今は違います。色々な環境で作業せざるを得ない状況が増えて、カスタマイズは敵になっていきました。OS のバージョンが上がる度にカスタマイズを全部やり直す気力も無くなってきました。プログラミングや Linux の初心者に教えるとき、自分流のカスタマイズを押しつけるわけにもいかず、カスタマイズの無い環境でのやり方を学んで教える必要性も出てきました。

そういうわけで、単に私が年を取っただけなのかも知れませんが、LAMPスタックで言うところのXAMPPとかクラウドで言うところのBitnamiのような、「１発インストールの御仕着せ環境」でそこそこ使いやすいものをだんだんと好むように私の心境は変化してきたのです。そんなところに颯爽と現れたMobaXtermは、ダウンロード時間込みでもたったの５分間という短時間で、Windows上にタブ型ターミナルと多段SSHにsftpクライアントとmoshサポートとGUIのCygwinパッケージインストーラー（Cygwinよりパッケージが絞ってある（ように見える））が使える環境を構築してしまい、しまいにはそれがUSBメモリに載る、というあまりにも強力な特徴を披露して僕をあまりにも感動させてしまい、出会って１時間も立たないうちにツールの紹介を何時間も掛けて書きながらQiitaに投稿している、というわけです。

UNIX/Linux 的なツールを使うお仕事は、PC(Windows)より Mac （もしくは仮想環境上のLinux）で済ませることが個人的には増えてきましたが、仕事柄、職場ではどうしても Windows を使っている人を相手に ssh やらなんやらで Linux に接続して開発の仕事をする方法を教えなくてはなりません。講習会を開いても、１日目は Cygwin を入れて貰って終わりになったり、酷いと無線LANが Cygwin パッケージの大量ダウンロードに耐えられなくなって終了するのがオチです。たった20MBのファイル１つを配って１０分ぐらい説明すれば、その５分後には全員 Linux で作られたファイアーウォール兼ゲートウェイサーバーの裏側にある Linux クラスターに多段 SSH でログインして X アプリで図を表示しながら統計解析もできる（注：公開鍵認証だと鍵の作成にもう少し掛かるでしょう）、MobaXterm は私にとってそんな夢のようなソフトなのです。

「MobaXtermなんて聞いたこともなくて知らなかった」とか、「もっといいツールがあるよ！」とか、どんなフィードバックでも大歓迎です。Windowsクライアント＋Linuxサーバーの世界がちょっとでも住みやすくなれば良いなと思います。

# 2018/11/22追記
MobaXterm は起動が他のターミナルソフトと比べてやや遅い（SSD環境で5～10秒程度？）のが唯一の難点かなと思っていたのですが、2018/11のアップデートで MobaXterm に遅延ロード機能が搭載され、すぐには使わないモジュールは起動時にロードしなくなったため、今時のCPUとSSD環境上での起動時間は1秒ぐらいとなり起動速度は全く問題ではなくなりました。HDDではもう少し遅いですが開発に使うマシンにSSDが積まれていないというのはそれ自体が問題なのでここでは考えません。このアップデートにより、MobaXterm の唯一の欠点は、開発環境がかなり古い部類（Delphiベース）のためデザインが古くてダサいかもしれない、というぐらいに（個人的な意見としては）なりました。

また、当初執筆時には存在していなかった WSL（Windows Subsystem for Linux）のサポートも強化されています。新規セッション作成時に WSL の専用タブを選択し、インストールされたディストリビューションが複数あってもドロップダウンリストから目的の環境を選択してログインすることができます。