Scoopで作るLinux on Windows開発環境

ちょっと感動したので

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

[scoop]:http://scoop.sh/
[Ninite]:https://ninite.com

----
------------------- ↓ 余談はここから ↓-------------------
日頃Windowsを使ってる身としては、
各種開発環境を整える際、
毎回phpやらnodeやらあれこれインストール作業をやらなきゃいけない。

なんか統一性を持たせられないものかと思っていたが、
つい先日面白いものを見つけた。
それが

*[scoop]*

いわゆるパッケージマネージャの類。
Windows版apt,yum,homebrewといえばなんとなくイメージできるだろうか。
Windowsにはデフォルトでパッケージマネージャが基本入っていない。（windows10にはあるが）
例えばコマンド一発でPHPをインストールとかできないわけだ。
(コマンドでなければ[Ninite]とかで良いが)

ではそれを使ってPHPの実行環境、nodejsの実行環境を整えてみる。

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

----
------------------- ↓ 本題はここから ↓-------------------
###[scoop]インストール
####windows powershellを起動
スタートメニューの検索項目に`power`と打てばそれっぽいのが見つかるので、それを起動。
![windows_powershell01.PNG](https://qiita-image-store.s3.amazonaws.com/0/40697/3f4dcd8c-3e1c-dfc6-402c-e4cb1daff045.png)

####実行ポリシー変更
以下のコマンドを打つって実行ポリシーを変更する。
設問には何の疑問も持たずに`Y`と入力

```
PS> set-executionpolicy unrestricted -s cu

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): Y
```

####インストール
以下のインストールコマンドを入力

```
PS> iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
```

####動作確認
```
PS> scoop search
'main' bucket:
    7zip (16.04)
    ack (2.18)
    acmesharp (0.8.1.0)
    adb (26.0.0)
    ag (2.1.0-1)
    allure (2.3.5)
・・・
```
この時点でpowershellはお役御免。

```
PS> exit
```
###Linuxコマンド群のインストール
どうせならコマンドラインプロンプトでlsやmvを使いたいところ。
なので一緒にlinuxコマンド群をインストールする。
busyboxを使う所だがどうも`busybox ls`って打つのが嫌なので、
かわりに[gow](https://github.com/bmatzelle/gow/wiki)を使うことにした。
あと、ついでに入れときたいコマンドも追加。

コマンドラインプロンプト上で以下を入力

```shell-session
C:\User\dozo> scoop install sudo gow
C:\Users\dozo>uname -a
windows32 ～～～～
```
また、全ユーザー共通で共通でインストールしたい場合はsudoをインストール後globalオプションをつける。
Pathが通ってない事もあるので、
インストール後いったんコマンドプロンプトを立ち上げなおしてみるとよい。

```shell-session
C:\User\dozo> scoop install sudo 
C:\User\dozo> sudo scoop install gow --global
```



###PHPのインストール
コマンドラインプロンプト上で以下を入力

```
C:\User\dozo> scoop install php composer
```
カスタムiniについては以下を参照
https://github.com/lukesampson/scoop/wiki/Custom-PHP-configuration

###nodejsのインストール
直接nodejsをインストールすることも可能だが、
バージョン管理を考えてnvm経由でインストールする。

```
C:\User\dozo> scoop install nvm
C:\User\dozo> nvm install 
C:\User\dozo> node -v
v8.5.0
```


----
------------------- ↓ 後書はここから ↓-------------------
各種インストールからPATHの調整まで行ってくれるのでありがたい。
特に開発者じゃない人にスクリプトを作って実行させる感じでインストールさせられるのはいいね。

デメリットとしては、
各種ツールは最新バージョンのみインストールされる形で、
phpやnodeを別バージョンをいれることはできないっぽい。
そこは割り切りで行くか、別バージョン用のインストールjsonを書くかという選択になるだろう。

----
ついでに入れておきたい物をインストール。
開発で使いそうなのは以下の物だろうか。


- コマンドラインプロンプト拡張 cmder
- ファイル同期 rsync
- zip解凍 unzip
- プログラムバージョン管理 git(ssh込み)
- サーバーイメージ管理 docker, vagrant

```shell-session
C:\User\dozo> scoop install cmder rsync unzip perl git-with-openssh
C:\User\dozo> scoop install docker vagrant
```

### dockerを開発環境にする
boot2docker経由でWindows上にLinuxを立てることができる

```
$ scoop bucket add extras
$ scoop install docker-machine
$ docker-machine create default
$ docker-machine start
$ docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 17.09.0-ce, build HEAD : 06d5c35 - Wed Sep 27 23:22:43 UTC 2017
Docker version 17.09.0-ce, build afdb6d4

docker@default:~$ uname -a
Linux default 4.4.89-boot2docker #1 SMP Wed Sep 27 22:59:39 UTC 2017 x86_64 GNU/Linux
docker@default:~$ echo "TERM=xterm-color" > .ashrc
docker@default:~$ source .ashrc
docker@default:~$ tce-load -wi nano
docker@default:~$ nano log.log


～～～

# 以下終了方法
$ exit
$ docker-machine stop
```