Windowsでもコマンドしたい!ConEmuとMSYS2を入れてみよう

Windows

この記事は NSEG Advent Calendar 2015 参加記事です。ていうか今日の分がエントリーされていないので慌てて書きました(汗

なんだかんだ言って、今の MacOS はほぼ UNIX だし、最近の Web 系の開発ツールはやれ Vagrant だの Node.js+lessc だのと、UNIX のコマンド環境で使うものが多くなっています。

Linux や MacOS と違って基本的に独自路線を突っ走ってる Windows は Web の開発環境としては大きく遅れを取ってしまった感というのは否めないところがあります。

いちばんは、UNIX と互換性が低いこと (かつては Windows にも POSIX 互換レイヤーがあったのですが、Microsoft が放棄してしまいましたし)、そして何よりコマンドプロンプト環境がヘボいという問題があります。

それを何とかする意味でも PowerShell というものがあったりするのですけど、これまたまったく独自で独特な環境であるため、Mac や Linux でフツーに使えるツールが使えるかというと、そういうものではないです。

ここへきて、フリーなサードパーティツールでコマンドシェル環境を実現するものが出てきており、それらを導入することで劇的に Windows の Web 開発環境が改善される傾向が出てきました。

んなわけで、ワタシがやってる Windows 用のコマンドライン環境の構築手順を簡単に以下にまとめてみます。えっと、情報量多いので頑張ってついてきてくださいね(汗

1.MSYS2をインストーラーで入れる

まずは UNIX 互換環境である MSYS2 をインストールします。64bit Windows をお使いなら msys2-x86_64 がいいんじゃないでしょうか。

こちらからダウンロードしてインストール。普通に C:¥MSYS64 にインストールされたハズ。

MSYS2 installer

2.環境変数を設定する

ここでスタートメニューに Bash を起動するアイテムが登録されているのでそれを実行してもいいんですけも、ちょっと待った。

MSYS2 環境にはもちろん Git がいるんですが、Windows で Git をお使いの方は「msysGit」というものを聞いたことがあるんじゃないでしょうか。今は Git の Windows 用としてオフィシャルなものになっているみたいですけど、つまりは MSYS 環境から Git を使うために必要なコマンド群を抽出したものだったりします。

で、それこそ Git の GUI フロントエンドである SoureTree とか、最近では VisualStudio も Git に対応しているわけですが、それらは特に何も考えないとこのオフィシャルな Git、つまり MSYS のサブセットをインストールしてしまいます。

似たようなものをいくつもインストールしてもムダですんで、環境変数 PATH を先ほどインストールした MSYS2 環境を参照するように設定して、それらのツールから MSYS2 の Git を使うようにしてしまいましょう。

で、Windows の環境変数の設定ってのはちょーめんどくさいので、これを補助するツールを導入します。

Rapid Environment Editor

これをダウンロードしてインストール。特に説明はいらないと思います。日本語化もされているので、ユーザー変数の環境変数 PATH に C:¥MSYS64¥bin を追加して、保存するだけです。ツールバーの保存ボタンを押すのを忘れないように。

rapidenv このツールはたまに起動して、いろんなインストーラが勝手にわけのわからん PATH を設定していないか確認したり修正したりするのがいいでしょう。

ちなみに、このあと構築される MSYS2 内で使うPATH については .bashrc とかで設定すればいいので、このツールはそれほど頻繁に使うものではありません。

3.Chocolatey を入れる

次に、Windows の各種アプリケーションのインストールやバージョンアップをコマンドで一括管理できる Chocolatey というツールを入れます。

Chocolatey Gallery

これは Linux の yum (dnf) や apt、後述の pacman みたく、いろいろな Windows アプリをコマンドでインストールできる便利なツールなんですが、惜しむらくはこのツールを使わずとも勝手に自力でアップデートされる Firefox などに使うと整合性が取れなくなってしまったり、この環境用パッケージのメンテが各アプリの新バージョンリリースに追いついていなかったりして、微妙に便利でなかったりするのですけども(汗)、まあこの後インストールする ConEmu 用ぐらいに思っといてください。

ワタシはこれで ConEmu、xyzzy 、Docker なんぞをインストールしています。

特に Docker はオフィシャルの Windows バイナリには Boot2docker が含まれているので、Docker の実行環境は別途ネイティブな Linux 環境があるから、クライアントコマンドだけあればいいんだけどという場合には重宝します。

インストール方法は上記リンク先のオフィシャルサイトトップページで説明されている「@powershell〜」で始まるコマンドを、管理者権限で起動したコマンドプロンプトで実行してください。

4. ConEmu を Chocolatey で入れる

さて、やっと ConEmu をインストールします。これは早い話が Mac のターミナルや Linux の Gnome 端末並に使いやすいコマンドプロンプトです。

管理者権限のコマンドプロンプトで以下のように実行。

cinst ConEmu

今後、Chocolatey でインストールしたアプリのアップデートは以下のコマンドでできます。

choco upgrade all

後述するように、今インストールした ConEmu にも Chocolatey を操作するための管理者権限なコンソールが設定されているんですけど、ConEmu の中から ConEmu のアップデートが走ると結構面倒なことになるので (しかも ConEmu は割と頻繁にアップデートされる)、個別のツールインストールにはいいんですけども、上記のように全体をアップデートする場合は通常のコマンドプロンプト (管理者権限) で実行した方がいいです。

なんか微妙にバッドノウハウ満載ですね…。

5. ConEmu を起動

さて、ConEmu を起動してみましょう。

この時点で、幾つかのコマンドコンソールを起動できるように自動的に設定されています。ツールバーの右のほうにある緑色のプラスボタンの横にある下向き矢印をクリックしてみましょう。

例えばこんなカンジです。

  • 「{Shells}→{cmd}」は通常の CMD が起動されるフツーの WIndows コマンドライン
  • 「{Shells}→{cmd (Admin)}」は管理者権限つき
  • 「{Bash}→{Msys2-64}」は先ほど環境変数 PATH を通しておいた MSYS2 の bash が起動される環境
  • 「{Scripts}→{Chocolatey (Admin)}」は前述の Chocolatey を操作するための環境

6. ConEmu設定のポイント

デフォルトではちょっと使いづらい点があるので、設定しましょう。ポイントは以下。

先ほどのメニューから「Setup Tasks…」を実行して各種設定を行います。

まずフォント周り。日本語が表示できる等幅フォントを設定しましょう。こちらの Myrica あたりが良いのではないでしょうか。

プログラミングフォント Myrica / Estable

英数字のフォントと CJK などのフォントを個別に指定できるようになっていますが、こだわりがなければ同じものを指定すればいいと思います。

あとポイントは次の点。

  • 「MonoSpace」のチェックをはずす
  • 「Auto size」のチェックをはずす
  • 「Clear Type」のチェックをつける

conemu1

なお、MacType との相性は悪いようで、MacType が有効になっていると警告が表示されます。表示される指示にしたがって MacType の設定で ConEmu を無効化してください。ていうか Windows 8 以降では MacType はいらないんじゃないかなと。

また、ConEmu 起動直後に実行されるシェル環境は「Startup」で指定します。

conemu2

 

7. コマンドツールのインストール

MSYS2 環境はパッケージ管理に pacman というツールが使われています。これは ArchLinux 用に開発されたもので、ArchLinux は日本語の説明が充実しているので、詳しくはそちらを参照されると良いでしょう。

pacman – ArchWiki

ではここで、ConEmu から bash な端末を開き、前述の Git をインストールしておきましょう。

pacman -S git

簡単ですね。zsh もあるので、oh-my-zsh な環境にするのもいいでしょう。その場合、ConEmu の設定で自動設定された bash の設定を参考に、内容をコピーして zsh を起動できるようにしておくと完璧です。

8. アップデートの作法

さてこれでほぼ UNIX な MSYS2 環境が構築できました。ここで、MSYS2 環境全体をアップデートする場合はちょっとお作法が必要です。

Linux の場合は実行されるプログラムは通常すべてメモリに読み込まれるので、実行中のプログラムファイルそのものが消えてしまっても動作に支障はありません。なので、ArchLinux の pacman はもちろん、RedHat の yum (dnf)、Debian の apt なども特に問題なくシステム全体をアップデートできます。

対して、Windows では実行中のプログラムや共有ライブラリ(DLL) は基本的にロックされます。なので、例えば bash.exe を実行中に bash.exe がアップグレードされると、わけのわからんことになります。これは先述の ConEmu の場合と同じ。

そこで、MSYS2 環境では、全体をアップデートする際にはちょっとしたお作法が必要になります。

まず、以下のコマンドで中核になるパッケージをアップデート

update-core

ここで何らかアップデートがかかると英語で指示が出るので、必要であればそのコマンドプロンプト (ConEmu なら実行していたタブ) をいったん閉じて、改めて開き直します。

そして次のコマンドで全体をアップデート

pacman -Su

ArchLinux みたいにいきなり「pacman -Syu」するとわけのわからんことになったりするので気をつけましょう。

あとは vim でも emacs でも Ruby でも Node.js でもお好きな UNIX 系ツールを入れるがよろしよ (なぜ急に外人になるのか)。

9. その他

.bashrc などで、環境変数 LANG を ja_JP.utf8 とかに設定しておくといいでしょう。そうです、Windows のくセに Shift_JIS ではなくて UTF8 ロケールが使えるのです。これだけでも導入する価値はあるでしょ?

あと、リポジトリにないツールも結構自分でコンパイルできます。ワタシは UTF-8 対応 ngWake On Lan のコマンドを自前で野良パッケージ化しています。ニッチなツールなので使いたい人いないとは思いますけど、そのうち気が向いたらインストール方法の説明を書くかもしれません。

ちなみに、MSYS は Cygwin と違って folk などの UNIX 独特なシステムコールのエミュレーションまでは行わないので、動かないものも結構あります。例えば gem の Jekyll をサーバー起動することはできなかったりします。

このあたり踏まえて、完全な UNIX 互換環境でなくて似て非なるものとして使うと、なかなか便利です。いちいちこのへんのコマンドを使うために Vagrant でクソ重たい VM を起動して…なんてのよりは格段に良いでしょう。

コメント