[試行錯誤編]Ansible on cygwinを活用した、実用開発環境構築　①普通にzshまで

#方針:
## cygwinの利用は最小限に
cygwinについて、よくわかっていないので、無理はしない。
例えば、node環境をcygwin側で構築するのは明らかに茨の道なのでパス。

とりあえず、cygwin使うことでzshとansibleが"普通に"動くというところで満足しておく。
nodeやjavaの環境はwindowsのものを使う。

- "普通に"動かすためには、いくつか工夫が必要。
- 付記:ansible 動かすためのpython環境は、cygwin側にある。


--------------
 *追記:Cygwin別パッケージBabunを導入して"普通に"動くようになった。以後、[[Babunを使う方法](http://qiita.com/kmry2045/items/b160c94b8cd8972261ce)]を推奨したい。*

--------------

##cygwin 1.7系を使用し、なるべくmacやlinuxと親しい環境を構築。
以前、[こちら](http://qiita.com/kmry2045/items/25a3f42f55e9bbe1539f)で構築した"Ansible on cygwin with zsh"を活用し、必要な設定を追加していく。すなわち、サーバ環境はansibleで管理する方針。

まずは、cygwinのバージョン確認。
```$ uname -a
CYGWIN_NT-10.0-WOW DESKTOP-NIBB0OO 1.7.35(0.287/5/3) 2015-03-04 12:07 i686 Cygwin
```

1.7系は、ちょっと頑張れば十分に使えるものと期待し作業に着手。[このあたり](https://gist.github.com/funnythingz/9634776)を参考させてもらい作業をすすめる。

##(背景)　windows環境を過度に信用せず、dropbox上で作業
cygwinにはいろいろ地雷が埋まっているっぽいが、windowsだって相当なもの。
ただし、nodeやjavaのバージョンその他の事情によって、
windows側ではトラブルった場合、windowsユーザーを作り直すという手がある。

環境でとらぶったらwindowsユーザー毎作りなおすつもりで、環境設定その他一式をdropboxに置いておく。

##ansibleでのサーバ環境構築の試行錯誤過程もdropboxで管理
依存関係が少ないansibleは、クライアント側をきちんと管理しておけば、ひとまず、安心のはず(今後、検証)。

# Cygwinを適切に起動させる*（全画面でzsh、ちゃんとhistoryも効いて・・）*
まずは、cygwin-ansible.batのインストール先(例、C:\cygwin)を確認し、cygwin-ansible.batで、cygwin環境に入る。
## zshの設定
"apt-cyg install zsh"した直後のスタート地点は以下。
```$ zsh --version
zsh 5.0.8 (i686-pc-cygwin)
```

適宜、　[再入門](http://qiita.com/uchiko/items/253088bb0d7bbf574bff)などを参考させていただき修正していく。

### oh-my-zshのインストール
Via oh-my-cygwin:

```
wget --no-check-certificate https://raw.github.com/haithembelhaj/oh-my-cygwin/master/oh-my-cygwin.sh -O - | sh
```
### ターミナルエミュレータminttyのディフォルトのシェルをzshに
ansible-cygwinの場合、chshコマンドがなく、起動時に/etc/passwdを使っていない。
Cygwinインストールフォルダのbatファイル(例、C:\cygwin\cygwin-ansible.bat)における
ターミナルエミュレータminttyの起動方法をbashをzshに変更することで対処する。

```変更前のcygwin-ansible.bat
@echo off
%~d0
set PATH=%SystemRoot%\system32
set cygdrive=%~d0
set cygdir=%~dp0

cd %~dp0\bin

set MAKE_MODE=unix
set CYGWIN=noacl nontsec nosmbntsec
set SHELL=/bin/bash
bash.exe -c "/usr/bin/mintty - &"
exit
```

変更後は、以下のとおり(--window maxで、起動時に全画面表示)。

```cygwin-ansible.bat
@echo off
%~d0
set PATH=%SystemRoot%\system32
set cygdrive=%~d0
set cygdir=%~dp0

cd %~dp0\bin

set MAKE_MODE=unix
set CYGWIN=noacl nontsec nosmbntsec
set SHELL=/bin/zsh
zsh.exe -c "/usr/bin/mintty  --window max - &"
exit
```


[付記]　telnet経由で使うとき等は、 以下のようにして、/etc/passwdを作成・変更する。

```
mkpasswd > /etc/passwd
nano /etc/passwd
```

汎用的な確認方法echo $0で、既存のシェルを確認。

```zsh
echo $0
-zsh
```

### historyを有効にする。
最近まで、cygwin上のzshはhistoryが使えないというありえない状態だったが、最近パッチがリリースされたため、
.zshrcに以下を追記することで、ヒストリーが有効になる。

```
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
```

## ターミナルminttyをかっこ良くする

疲れてきたので、[こちら](http://qiita.com/d9magai@github/items/b988f4c881cfa1261512)に従い、速攻で、かっこ良くUTF-8日本語環境とさせていただく。

touch .minttyrcし、以下に設定

```.minttyrc
BoldAsFont=no
Transparency=high
Font=Inconsolata
FontIsBold=no
FontHeight=10
CursorColour=255,0,0
CursorType=block
Locale=ja_JP
Charset=UTF-8
BackspaceSendsBS=yes
RightClickAction=paste
ClicksTargetApp=no
CursorBlinks=yes
FontSmoothing=default
CopyOnSelect=yes
```

- Transparency=grassの方がかっこよかった

再起動すると、フォントがちょっとかっこよくなり利便性も向上^^


#今後の方針
クライアント側はJSで、サーバー側はJVM言語でいくので、以下の環境を整備し、cygwin上で普通に作業できるようにしていく。
- node周り　(VisualStudioとも親和的に)
- java周り　(IntelliJと親和的に)

rubyが必要になった時は、まずはcygwinで入れることになると思う。