読者です 読者をやめる 読者になる 読者になる

長文書くところ

技術系のアウトプットとかメモ書きとか

Windowsのターミナル環境にCmderを使う ~Nyagosとmsys2を添えて~

僕の開発環境はwindowsに構築されています。
当然コードを書くのはwindows上だし、コンパイルするのもwindows上です。
ファイル操作はエクスプローラもターミナルも使い分けます。

さて、windowsのターミナルといえば、あの"cmd.exe"ですね。
f:id:zenito9970:20150619163238p:plain
こいつが非常に低機能で、なんとウィンドウサイズの変更も満足にできません。
そんな環境のターミナルでファイル操作なんかを行おうものなら、僕は将来育毛剤を使わないといけない体になってしまいます。
そんなことは丁重にお断りさせていただきたいので、windows上で快適に使えるターミナル環境を探していました。


最初に触ったのは、おなじみのCygwin
f:id:zenito9970:20150619163244p:plain
まあ、これで僕は概ね満足していたわけです。
見た目があまりクールじゃないという点と、パッケージの追加が面倒という点を除けば。


次に触ったのは、msys2です。
f:id:zenito9970:20150619163312p:plain
こいつはとてもいい環境でした。Cygwinで出来ていたことに加えて、pacmanでパッケージの追加ができるのです。
見た目はあまりクールではありませんが、これもだいたい満足できていました。


三番目に触ったのは、ckw+Nyagosです。
f:id:zenito9970:20150619163254p:plain
ckwがコンソール代替ソフト、Nyagosがシェルになります。
NyagosはNyaosの後継にあたり、Go言語で書かれています。
これは、あまり満足できるとは言えませんでした。
ckw自体は軽くてクールで良いソフトなのですが、Nyagosと合わさるとどうにも遅くなる時があるのです。
また、ckw自体がvimの利用をあまり考慮されておらず、カラースキームの色が狂ったり、背景色の番号が狂ったりと、環境としてはそこまでいいものではありませんでした。


四番目に触ったのは、ConEmu+Nyagosです。
f:id:zenito9970:20150619163258p:plain
ConEmuがコンソール代替ソフト、Nyagosがシェルです。
これはそこそこ良かったのですが、見た目が気に入らず、あまり満足できませんでした。


最後に辿り着いたのが、Cmder+Nyagos+msys2です。
f:id:zenito9970:20150619163318p:plain
Cmderがコンソール代替ソフト、Nyagosとmsys2がシェルです。
CmderはConEmuの改良版にあたります。
このCmderの導入に難儀し、Cmderの上でmsys2を動かすのに難儀しました。
しかし難儀の甲斐あって、Cmderは非常に使いやすいターミナルで、見た目も非常にクールでした。
動作は軽く、vimは快適に動く。これが僕の目指したターミナルです。
さて、導入に難儀したこの環境、もし環境を移行する必要がある時、また難儀しないために、ここに導入の手順やその中で躓いた点、その解決法などを残しておきたいと思います。
なお、ここではcmderを持ち運ぶことは一切考えていません。ポータブルにも出来るようですが、他の環境で使う予定は特にないので。

Cmder+Nyagos+msys2の環境を構築する

まずはcmder,nyagos,msys2のそれぞれのバイナリをダウンロードしてきます。

cmder:gooseberrycreative.com

nyagos:github.com

msys2:
https://msys2.github.io/msys2.github.io

cmderはfullを入れましたが、miniでも大丈夫だと思います。
cmder,nyagosはそれぞれ好きなディレクトリに展開し、msys2はインストールします。

とりあえずcmderを起動しましょう。
起動出来ましたか?僕は出来ませんでした。
最初から起動できる場合もあるようです。

さて、最初の難儀したポイントはここです。
とりあえずエラーメッセージは僕の場合こうなっていました。

api-ms-win-appmodel-runtime-l1-1-0.dllが見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。

はい。dllを入れれば解決やん!って思いますが、このdllを探すのに苦労しました。
めんどくさいことは抜きにして、解決策を書きます。
Download Visual Studio 2015 RC の Visual C++ 再頒布可能パッケージ from Official Microsoft Download Center
ここからVS2015RCのランタイムをインストールすれば起動できるようになりました。
フォントの設定からMonospaceのチェックを外さないと、日本語の表示幅が合わずおかしくなります。

無事にcmderが起動出来ましたか?
ここでまた難儀ポイントです。
起動した時、僕の環境ではPowerShellが呼び出され、Pathに何かを追加するのに失敗していました。
これを解決したかったのですが、どうせPowerShellは使わないので、放置して構いません。
PowerShellを使う人は頑張って直してください……。
また、ConEmuがコマンドプロンプトの代わりに起動するように設定していた場合、"ConEmuのバージョンが違うよ"みたいなエラーが出ます。
設定を解除しておきましょう。

次に、cmderからnyagosを呼べるようにします。
Startusの中のTasksで、左の一覧の下にある「+」ボタンで項目を追加し、Commands欄にnyagos.exeへのフルパスを記入します。
Group(数字)となっている欄をNyagosなどわかりやすい名前に変更します。
お好みでDefault task for new consoleにチェックを入れましょう。
その後、Startupの項目を選択し、Startup optionsのラジオボタンでSpecified named taskを選択、先ほど作ったnyagosを選択します。
これでSave settingsを押し、再起動すると、最初に立ち上がるのがnyagosになっているはずです。

さてお待ちかね、cmderからmsys2を使えるようにします。
さきほどのStartupのTasksで、「+」ボタンで追加するところまでは変わりません。
その後msys2へのフルパスを記入する際、

(msys2のインストールディレクトリ)\usr\bin\mintty /usr/bin/bash --login -i

としてください。
こうすると、msys2を不完全な状態で呼び出せるようになります。

ここで難儀ポイントです。
こうやって呼び出したmsys2は不完全です。
vimの起動やらなんやらが出来ません。msysでもmingwでもない状態で起動しているからです。
そこで、これをmingwとして起動できるようにしましょう。
msys2は起動する際、ユーザの環境変数を参照し、msysかmingwかを判別します。
その参照する変数ですが、MSYSTEMという変数になっています。これをユーザの環境変数として登録し、値にMINGW64かMINGW32を設定しましょう。
MSYSでもいいですが、MINGWはMSYSも一緒にロードするのでMINGWのほうがいいと思います。

さて、これで完全な環境のmsys2がcmderの上で動くようになりました。
pacman -Syuを掛けておきましょう。
cmder+nyagos+msys2の環境構築は以上で完了です。
お疲れ様でした。

ちなみにmsys2にはvimが標準で含まれていません。
pacman -S vim でインストールしておきましょう。