コマンドプロンプトでそこそこ快適な開発環境を整備する

[Windows 10がBashに公式ネイティブ対応。マイクロソフトとカノニカルが協力、Ubuntu Linuxのコマンドラインツールがそのまま動作](http://japanese.engadget.com/2016/03/30/windows-10-bash-ubuntu-linux/)

本日付けでこんな記事が出てしまっていたので、この記事でやっているようなことは完全に無駄足になってしまいましたが、供養もかねて投稿しておきます。

（2016/4/11 追記）
[この記事](http://mattn.kaoriya.net/software/why-i-use-cmd-on-windows.htm)の、使用時にパスを通す部分が良さげでした。（PATH に文字数制限あるのは知らなかった……。）
（追記終わり）

以下、全て蛇足。

---

以前から、Windows でも Mac とか Linux みたいなコンソールを使えたら便利なのになあ、と思ってたので、PC を買い替えたのを機に、いろいろ設定してみました。
Windows 標準のコマンドプロンプトを使うか、[cygwin](https://www.cygwin.com/) や [cmder](http://cmder.net/) のようなコンソールエミュレータを使うかで迷ったのですが、せっかくなのでコマンドプロンプト（MS-DOS）を使うことに。

このコマンドプロンプト、以前は使いづらいという印象があったのですが（ウィンドウサイズ固定、コピペできない、Linux コマンド使えない。）、Windows10 で[大幅に改善された](http://www.atmarkit.co.jp/ait/articles/1508/28/news038.html)らしく、わりと実用的なレベルになっていました。
ウィンドウの大きさも変えられますし、コピペなどのショートカットも使えます。ウィンドウの色や透明度だって変えられます。

ということで、これから Linux コマンドを入れたり、タブ補完を使えるようにしたりして、コマンドプロンプトをさらに使いやすくしていこうと思います。


## Git で Linux コマンドを入れる

Git はもともとバージョン管理ソフトですが、Windows 版には標準でコンソールエミュレータと各種 Linux コマンドが入っていて、インストール時に設定すれば、コマンドプロンプトからでもコマンドを実行できるようになります。

[公式サイト](https://git-scm.com/) からインストーラをダウンロードして、実行してください。

途中で以下のような画面が出てくるはずなので、1 番下の「Use Git and optional Unix tools from the Windows Command Prompt」を選んでください。

![git-1.png](https://qiita-image-store.s3.amazonaws.com/0/117994/b26fc31f-8fec-668c-824a-df058e33fd41.png)

赤字で書いてあるのは、「Windows にも同じ名前のコマンドあったら上書きしちゃうよ」みたいなことですが、このインストールは exe 形式のファイルを置いて、そこにパスを通すという形を取っているようなので、[コマンドサーチの優先順位](http://d.hatena.ne.jp/chaichanPaPa/touch/20090516/1242476415)的には、Windows のコマンドが上書きされることはありません。
実際わたしの環境でも、find を使おうとすると Windows の方のコマンドが実行されたので、たぶん問題ないのではないでしょうか。
それならどうしてこんな警告が入っているのかという話ですが……どなたか詳しい方はいらっしゃいますか？

![git-2.png](https://qiita-image-store.s3.amazonaws.com/0/117994/32403a3b-f158-67d1-75a7-3a891dbe4f87.png)

どちらでもかまいません。わたしは今回下にしています。

これでコマンドプロンプトから各種 Linux コマンドが使えるようになりました。

```sh
$ ls -la
total 480
drwxr-xr-x 1 UserName 197609     0 Mar 30 23:23 .
drwxr-xr-x 1 UserName 197609     0 Mar 30 11:41 ..
-rw-r--r-- 1 UserName 197609 45551 Mar 30 23:05 cmd-admin.png
-rw-r--r-- 1 UserName 197609 28989 Mar 30 11:22 cmd-explore.png
-rw-r--r-- 1 UserName 197609 30231 Mar 30 19:15 env-1.png
-rw-r--r-- 1 UserName 197609 24131 Mar 30 19:15 env-2.png
-rw-r--r-- 1 UserName 197609 22564 Mar 30 19:10 env-3.png
-rw-r--r-- 1 UserName 197609 23119 Mar 30 19:09 env-4.png
-rw-r--r-- 1 UserName 197609 67495 Mar 30 11:37 hello.png
-rw-r--r-- 1 UserName 197609 56012 Mar 30 22:36 linux-like.png
-rw-r--r-- 1 UserName 197609 24728 Mar 30 22:45 property.png
```

ちなみに、Linux 由来の `cat` や `ls` はテキストを utf-8 と仮定して、Windows 標準の `type` や `dir` は sjis と仮定して表示するみたいなので、使い分けるとよいかもしれません。

## タブ補完機能を入れる

これも Clink という便利なソフトがありました。
以下のリンクから最新版をダウンロードできます。

https://github.com/mridgers/clink/releases

インストーラ形式なので、ぽちぽち押しているだけでインストールが終わります。
すると、こんな感じでタブ補完機能がついています。

![image](https://qiita-image-store.s3.amazonaws.com/0/117994/854a3bf4-6c6c-3395-a618-71b447f3a211.png)


## vim を入れる
ちょっとソースコードを修正したいだけなのに、IDE を起動するのはおっくうだし、メモ帳もウィンドウを切り替えるのが面倒。そんなときに便利なのが、vim などのコマンドラインエディタです。
ということで、今回は vim を入れていきましょう。emacs ？　……なんでしたっけ、それ。マクドナルドの新商品かなにかですか？[^emacs]


#### vim のダウンロード
Git には標準で vim が入ってるのですが、そのままでは日本語関係が弱いので（UTF-8N だと文字化けしたりする）、日本語を表示できるようにする必要があります。

[香り屋さんの HP](http://www.kaoriya.net/software/vim/)から、日本語対応の Vim をダウンロードして、好きな場所に解凍してください。
このディレクトリの中身を、まるまる Git の `\usr\share\vim` ディレクトリにコピペします。Git のディレクトリ自体は、デフォルトであれば `C:\Program Files\Git` にあるかと思います。ファイルの上書きの警告が出ますが、 Yes で大丈夫です。

本当ならこれだけで、もともと入っていた vim との連携が取れていい感じになるはずだったんですが、ならなかったので、普通にパスを通します。
この辺りが面倒なので、もっと楽なやり方があったら教えていただけるとありがたいです。


#### vim にパスを通す
コントロールパネルから「システム」の項目に行き、左側のメニューから「システムの詳細設定」をクリックしてください。下のほうにある「環境変数」というボタンを押すと、以下のような画面が出ます。

![env-1.png](https://qiita-image-store.s3.amazonaws.com/0/117994/ab16bd4e-5465-7348-f7bf-796b1d3d8157.png)

今回は下の「システム環境変数」の方の「Path」という項目を選択し、「編集」を押してください。

![env-2.png](https://qiita-image-store.s3.amazonaws.com/0/117994/e4384194-c4df-745e-3871-e9ab8548e711.png)

以上のような画面が出てきたら、「新規」ボタンを押して、各自 vim.exe が入っているディレクトリ（わたしの場合は `C:\Program Files\Git\usr\share\vim`）のパスをコピーして、貼り付けてください。

![env-3.png](https://qiita-image-store.s3.amazonaws.com/0/117994/e432009c-91ca-f88f-24fa-c9f97849767d.png)

最後に、Git に元から入っていた vim と競合してしまわないように、今回追加したほうのパスの優先度をあげておきます。
追加した項目を選択してから、「上へ」をクリックして、優先度を上げてください。追加した項目が「.../Git/usr/bin」より上にあれば大丈夫です。

![env-4.png](https://qiita-image-store.s3.amazonaws.com/0/117994/67f7003e-5a1f-f2f9-1dab-f95d4dac8454.png)

これで vim の導入は完了です。
ためしに [terapad](http://www5f.biglobe.ne.jp/~t-susumu/library/tpad.html) か何かで、日本語のテキストを sjis 、utf-8 、utf-8n で保存して、それぞれ vim で開いてみてください。うまくいっていれば、すべてきちんと日本語で表示されているはずです。


## 作業スペースを変更する
作業ディレクトリが決まっている人は、作業スペースを設定すると便利だと思います。

設定方法は簡単で、まずエクスプローラで以下のディレクトリを開いて、コマンドプロンプトのリンクを探します。なお、UserName には自分のユーザー名を入れてください。
`C:\Users\UserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools`
見つかりましたか？　それが普段検索欄に「cmd」と書いたときに呼ばれるリンクです。

このリンクを右クリックして「プロパティ」を表示します。「作業フォルダー」の欄に、自分が普段使っている作業ディレクトリのパスを入力すれば設定完了です。

![working-directory.png](https://qiita-image-store.s3.amazonaws.com/0/117994/4957e905-5ace-2391-4ac1-940138221594.png)


## 見た目を Linux ライクに

コマンドプロンプトの見た目を、こんな感じに変えます。

![image](https://qiita-image-store.s3.amazonaws.com/0/117994/a60221e6-c949-a282-897c-729b5a4cc4c2.png)

具体的には、カレントディレクトリの表示形式が変わって、ファイルの種類で色分けされるようになっていますね。あと**ウィンドウが半透明になっています**。かっこいい！

#### ウィンドウを半透明にする
コマンドプロンプトのウィンドウを右クリックすると、メニューの下のほうに「規定値」と「プロパティ」という項目があるかと思います。

「**規定値**」はいわゆるデフォルト値で、ここで設定した内容は、すべてのコマンドプロンプトで共有されます。
「**プロパティ**」は、あくまで「今使っているウィンドウ（正確にはそのリンク）」の設定です。なので、別のリンクからコマンドプロンプトを起動した場合（たとえば管理者として実行したときなど）は、設定が反映されなくて混乱することがあります。
特に理由がなければ、なるべく「規定値」の方を設定しましょう。

![property.png](https://qiita-image-store.s3.amazonaws.com/0/117994/0b1e6ef2-09bc-2ec8-1338-efa811e1dab5.png)

「規定値」を開くと上のウィンドウが出てくるので、一番右の「画面の色」タブを開きます。すると一番下のスライドバーで不透明度を設定できます。見やすさと**かっこよさ**のバランスを考えると、 85% くらいが適当じゃないでしょうか。

ちなみに、やろうと思えば[レジストリを直接いじってフォントを追加](http://holybea.com/2015/10/10/windows-10-cmd-fonts/)することもできます。その場合、等幅フォントを選ばないとカーソルの位置がおかしくなると思うので、気を付けてください。

#### パスの表示変更と文字の色分け
カレントディレクトリの表示形式の変更と、文字の色分けは、以下のコマンドでできます。

```sh
prompt [%USERNAME%@%COMPUTERNAME% $P]$$$S
doskey ls = ls --color=auto $*
```

内部的にやってるのは、環境変数の変更とエイリアスの設定ですね。
ただし、これを毎回実行するのは面倒なので、コマンドプロンプトの起動時に自動実行されるようにしたいです。
専用のバッチファイルに書いてもいいですが、このためだけにレジストリに書き込むのもなんなので、先ほどインストールした `clink` と一緒に実行されるように設定しましょう。

まずは、`clink` がインストールされているディレクトリを開きます。（デフォルトなら`C:\Program Files (x86)\clink\{バージョン番号}` 。）このディレクトリの中にある `clink.bat` が、コマンドプロンプトの起動時に自動実行されるバッチファイルです。

なので、これを書き換えたいのですが、デフォルトでは `Program Files` に入っているファイルは書き込み禁止になっているので、管理者として編集する必要があります。
ウィンドウ左上の「ファイル＞コマンドプロンプトを開く」から、コマンドプロンプトを管理者として実行してください。

![cmd-admin.png](https://qiita-image-store.s3.amazonaws.com/0/117994/27f23c2a-9f0e-af9a-bba2-afc916adc216.png)

すると、「管理者: C:\Windows\system32\cmd.exe」というウィンドウが開いたと思うので、`ls -l` というコマンドを打ち込みます。

以下のような出力が出たのではないでしょうか。

```sh
-rw-r--r-- 1 UserName 197609   2121 Mar 30 20:18 clink.bat
```
`-rw-r--r--` という文字列は、ファイルの所有者のみ書き込みができ、その他のユーザーは読み込みしかできないことを意味します。本来ならその隣の `UserName` というユーザーが所有者のはずなのですが、実際には `Program Files` の中のファイルの所有者は `Trusted Installer` という特別なユーザーらしく、通常の方法ではファイルの編集ができません。
しかし、管理者として実行したコマンドプロンプトからであれば、編集できます。さっそく `vim clink.bat` と入力して、ファイルを編集しましょう。

`@echo off` という箇所があると思うので、その後ろに先ほどの 2 行を挿入します。

```sh
@echo off
prompt [%USERNAME%@%COMPUTERNAME% $P]$$$S
doskey ls = ls --color=auto $*
```

どうしても vim が使いにくければ、管理者で開いたコマンドプロンプトに `notepad clink.bat` と打ち込むことでも編集することができます。

エクスプローラから更新日時を確認して、書き込んだ直後の時刻になっていれば成功です。

![edit-clink.png](https://qiita-image-store.s3.amazonaws.com/0/117994/a2031764-42e6-76bd-b8bd-46785a48e91c.png)

## おわりに
一応、以上の設定を終えればそこそこ快適な環境にはなっているんじゃないでしょうか。あまりきちんと検証していないので、うまくいかないところがあったらごめんなさい。

あと、小ネタですが、作業しているディレクトリで、アドレスバーに `cmd` と入力して <kbd>Enter</kbd> を押すと、初めからそのディレクトリにいる状態でコマンドプロンプトを起動することができます。地味に便利です。

![cmd-explore.png](https://qiita-image-store.s3.amazonaws.com/0/117994/5a9982f2-d29c-266e-815b-37a17ec6edfd.png)

それでそのまま実行したり。

![image](https://qiita-image-store.s3.amazonaws.com/0/117994/6b70d3ff-cf38-0322-f83f-af940b77c9a8.png)

また、システムのデフォルトなので、python/anaconda や node/nodist などの環境をインストールすると、インストーラが勝手にパスを通してくれているのもよいところです。（cygwin とかだとそこらへんどうなんでしょう？）

逆に残念なところとしては、文字コードの問題があります。コマンドプロンプトでは、デフォルトで cp932 という文字コード（sjis の亜種）を使用しており、utf-8 で書かれた文字を適切に表示できないことがあるのです。（データベースとかを扱っているときもここらへんでつまずくことが少なくない。）
この問題は、Windows の標準文字コードが sjis である限り、完全に解決することはできませんが、表示できない文字列が出てきたときに `chcp 65001` と打ち込むことで、表示できるようになることがあります。これはコマンドプロンプトで使う文字コードを utf-8 に変更するという意味のコマンドです。
ちなみにわたしは、元からパスが通っている `System32` ディレクトリで管理者としてコマンドプロンプトを立ち上げて、以下の 2 行を実行してバッチファイルを作ることで、sjis と utf-8 を使い分けています。

```sh
echo chcp 932 > usesjis.bat
echo chcp 65001 > useutf8.bat
```

使うときはこんな感じです。好きなところで使えます。

```
[UserName@PCName C:\Users\UserName\Documents\Git]$ useutf8
chcp 65001
Active code page: 65001
```


---

以上、Windows のコマンドプロンプトで作る開発環境でした。普段 IDE を使っていると関係ないですが、ちょっとしたコードを書きたいときとか、初めて触る言語に小さなソースファイルとコンパイラだけで慣れたいときとかには役に立つんじゃないでしょうか。

---
以上が、Windows が Bash に対応することを全く知らないで書いた記事でした。

それにしても、まさかこのタイミングで Windows に Bash 追加が来るとは……うれしいやら切ないやら。
つくづく、情報収集は大事ですね……。

[^emacs]: 本当は [emacs](http://www.gnu.org/software/emacs/) や [nano](http://www.nano-editor.org/) の Windows 版も試したのですが、日本語化が大変そうだったのでやめました。~~本当は emacs 使いたかった……。~~