Windows環境でのGroovy/Grails開発を幸せにする!?GVMクローンposh-gvmを使ってみる #yokohamagroovy 

# 2015/11/04追記

クリーンなWindows7 x64 + [Windows Management Framework 4.0](https://www.microsoft.com/ja-jp/download/details.aspx?id=40855)環境で試してみました。結論から言うと、問題なく動作し続けてくれるようです。

```ps1
> (new-object Net.WebClient).DownloadString('https://raw.githubusercontent.com/flofreud/posh-gvm/m
aster/GetPoshGvm.ps1') | iex
Downloading posh-gvm from https://github.com/flofreud/posh-gvm/archive/master.zip
posh-gvm installed!
Please see https://github.com/flofreud/posh-gvm#usage for details to get started.
警告: Execute 'Import-Module posh-gvm -Force' so changes take effect!
> Set-ExecutionPolicy RemoteSigned
> Import-Module posh-gvm
> gvm
==== BROADCAST =================================================================
* 01/11/15: Ceylon 1.2.0 released on SDKMAN! #CeylonLang
* 21/10/15: Springboot 1.3.0.RC1 released on SDKMAN! #springboot
* 20/10/15: Gradle 2.8 released on SDKMAN! #gradle
================================================================================
警告: Invalid command:
Usage: gvm <command> <candidate> [version]
    gvm offline <enable|disable>

    commands:
        install   or i    <candidate> [version]
        uninstall or rm   <candidate> <version>
        list      or ls   <candidate>
        use       or u    <candidate> [version]
        default   or d    <candidate> [version]
        current   or c    [candidate]
        version   or v
        broadcast or b
        help      or h
        offline           <enable|disable>
        selfupdate        [-Force]
        flush             <candidates|broadcast|archives|temp>
    candidate  :  asciidoctorj, ceylon, crash, gaiden, glide, gradle, grails, griffon, groovy, groovyserv, jbake, jboss forge, lazybones, maven, sbt, scala, springboot, vertx

    version    :  where optional, defaults to latest stable if not provided

eg: gvm install groovy
```

コマンドは `gvm` のままですが、sdkmanのbroadcastや新たにサポートされたcandidateも使えそうです(ちゃんと動作するかどうかは試してませんが)。

```ps1
> gvm i scala

Downloading: scala 2.11.7

Downloaded 3476K of 27843K
```

# 2015/10/17追記

本家GVMが[sdkman](http://sdkman.io/)に変わりましたが、posh-gvmの中の人は「時間ないからごめんね」って言ってます。
https://github.com/flofreud/posh-gvm/issues/7
もしposh-gvmがまだ上手くインストールできるか・利用できるか試された方がいらっしゃいましたら、その結果をぜひコメントを残してくださいませ。
(追記ここまで)

# posh-gvm https://github.com/flofreud/posh-gvm

まずはPowerShellのバージョンの確認から。posh-gvmにはPowerShell 3.0以上が必要です。PowerShellで

```ps1
> Get-Host | Select-Object Version

Version
-------
3.0
```

とすれば確認できる。大丈夫ですね。

[PsGetを使って入れる](https://github.com/flofreud/posh-gvm#with-psget)こともできますが、今回は直接インストールスクリプトを走らせて入れてみることにします。

```
> (new-object Net.WebClient).DownloadString('https://raw.githubusercontent.com/flofreud/posh-gvm/master/GetPoshGvm.ps1') | iex

Downloading posh-gvm from https://github.com/flofreud/posh-gvm/archive/master.zip
posh-gvm installed!
Please see https://github.com/flofreud/posh-gvm#usage for details to get started.
警告: Execute 'Import-Module posh-gvm -Force' so changes take effect!
```

`Import-Module posh-gvm -Force` を打て、ってことなので打ってみます。

```
> Import-Module posh-gvm -Force

Import-Module : このシステムではスクリプトの実行が無効になっているため、ファイル \WindowsPowe
rShell\Modules\posh-gvm\posh-gvm.psm1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://g
o.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ Import-Module posh-gvm -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) [Import-Module]、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand
```

お。実行ポリシーに阻まれて実行できませんね。これをいったん変えてやります。

```
> Set-ExecutionPolicy RemoteSigned

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

```

そして再実行。うまくいったら `gvm help` を試してみます。

```
> Import-Module posh-gvm -Force
> gvm help

==== BROADCAST =================================================================

GVM welcomes Glide as a new Candidate!

To get started:

        $ gvm flush candidates
        $ source ~/.gvm/bin/gvm-init.sh
        $ gvm install glide

Have lots of fun!

Please report issues:
    https://github.com/gvmtool/gvm/issues

Running GVM server 1.3.13 on vertx 1.3.1.final

================================================================================

Usage: gvm <command> <candidate> [version]
    gvm offline <enable|disable>

    commands:
        install   or i    <candidate> [version]
        uninstall or rm   <candidate> <version>
        list      or ls   <candidate>
        use       or u    <candidate> [version]
        default   or d    <candidate> [version]
        current   or c    [candidate]
        version   or v
        broadcast or b
        help      or h
        offline           <enable|disable>
        selfupdate        [-Force]
        flush             <candidates|broadcast|archives|temp>
    candidate  :  gaiden, glide, gradle, grails, griffon, groovy, groovyserv, lazybones, springboot, vertx

    version    :  where optional, defaults to latest stable if not provided

eg: gvm install groovy
```

無事実行できました！！

```
> gvm install grails

Downloading: grails 2.4.0

Downloaded 134314K of 134314K
Installing: grails 2.4.0
Done installing!
Do you want grails 2.4.0 to be set as default? (Y/n): Y
Setting grails 2.4.0 as default.

>
```

ばっちりですね！インストールしたものは `~/.posh_gvm/` 配下に、ダウンロードしたアーカイブファイルは `~/.posh_gvm/.meta/archives/` 配下にありますので、必要に応じてIDE等からも参照すると良いでしょう。

なお、変更した実行ポリシーを元に戻すには

```ps1
> Set-ExecutionPolicy Restricted
```

としてやればokですが、これを戻してしまうと`gvm`が動かなくなります。
この点にだけ注意してやれば良さそうです。