SDKMANでGradleとKotlinをインストールする方法(Mac)

## 「SDKMAN」とは？

SDK管理ツールの一種です。KotlinやGradleなど様々なSDKにおいて、バージョンを簡単に切り替えられるようになるので便利です。

## 環境

- OS：macOS High Sierra 10.13.1
- Java：1.8.0_162
- SDKMAN：5.6.2+294
- Gradle：4.6
- Kotlin：1.2.31

## SDKMANのインストール

以下のコマンドを実行してインストールします。

```bash
$ curl -s "https://get.sdkman.io" | bash
$ source "~/.sdkman/bin/sdkman-init.sh"
```

## Gradleのインストール

```bash
# SDKMANでインストールできるGradleのバージョン一覧を表示する
$ sdk list gradle

================================================================================
Available Gradle Versions
================================================================================
     4.7-rc-1             4.4                  3.5.1                2.3
     4.6-rc-2             4.3.1                3.5                  2.2.1
     4.6-rc-1             4.3-rc-4             3.4.1                2.2
     4.6                  4.3-rc-3             3.4                  2.14.1
     4.5.1                4.3-rc-2             3.3                  2.14
     4.5-rc-2             4.3-rc-1             3.2.1                2.13
     4.5-rc-1             4.3                  3.2                  2.12
     4.5                  4.2.1                3.1                  2.11
     4.4.1                4.2-rc-2             3.0                  2.10
     4.4-rc-6             4.2-rc-1             2.9                  2.1
     4.4-rc-5             4.2                  2.8                  2.0
     4.4-rc-4             4.1                  2.7                  1.9
     4.4-rc-3             4.0.2                2.6                  1.8
     4.4-rc-2             4.0.1                2.5                  1.7
     4.4-rc-1             4.0                  2.4                  1.6

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

# どのバージョンがいいのかわからないので、バージョンを指定せずにインストールする
$ sdk install gradle 

# 4.6がインストールされたが、警告が出ている
$ gradle --version
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass (file:/Users/{ユーザー名}/.sdkman/candidates/gradle/4.6/lib/groovy-all-2.4.12.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          9.0.4 (Oracle Corporation 9.0.4+11)
OS:           Mac OS X 10.13.1 x86_64
```

`gradle --version` 時に出力される警告について調べたところ、JDK 9を使っていると発生するエラーのようです。
https://github.com/gradle/gradle/issues/3118

JDK 8を使えばいいとのことなので、今回はそのようにします。

```bash
$ jenv global oracle64-1.8.0.162

$ gradle --version

------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_162 (Oracle Corporation 25.162-b12)
OS:           Mac OS X 10.13.1 x86_64
```

警告が出力されなくなりました。

## Kotlinのインストール

Gradleと同様にしてインストールします。

```bash
$ sdk list kotlin

================================================================================
Available Kotlin Versions
================================================================================
     1.2.31               1.1.2-5              1.0.4
     1.2.30               1.1.2-2              1.0.3
     1.2.21               1.1.2                1.0.2
     1.2.20               1.1.1                1.0.1-2
     1.2.10               1.1-beta2            1.0.1-1
     1.2.0                1.1-beta             1.0.1
     1.1.61               1.1-RC               1.0.0
     1.1.60               1.1-M04
     1.1.51               1.1-M02
     1.1.50               1.1-M01
     1.1.4-3              1.1
     1.1.4-2              1.0.7
     1.1.4                1.0.6
     1.1.3-2              1.0.5-2
     1.1.3                1.0.5

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

$ sdk install kotlin

$ sdk list kotlin

================================================================================
Available Kotlin Versions
================================================================================
 > * 1.2.31               1.1.2-5              1.0.4
     1.2.30               1.1.2-2              1.0.3
     1.2.21               1.1.2                1.0.2
     1.2.20               1.1.1                1.0.1-2
     1.2.10               1.1-beta2            1.0.1-1
     1.2.0                1.1-beta             1.0.1
     1.1.61               1.1-RC               1.0.0
     1.1.60               1.1-M04
     1.1.51               1.1-M02
     1.1.50               1.1-M01
     1.1.4-3              1.1
     1.1.4-2              1.0.7
     1.1.4                1.0.6
     1.1.3-2              1.0.5-2
     1.1.3                1.0.5

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
```

## デフォルトで使用するSDKの選択

各SDKは複数のバージョンをインストールすることができます。
デフォルトで使用するSDKを選択するには `sdk default` コマンドを使用します。

```bash
# sdk default {SDK} {バージョン}
$ sdk default kotlin 1.2.31
```

## 使用しているSDKの一覧表示

`sdk current` コマンドで使用しているSDKの一覧が出力されます。

```shell-session
$ sdk current

Using:

gradle: 4.6
kotlin: 1.2.31
```

## おわりに

GradleとKotlinをインストールすることができました。
これでいよいよAndroidアプリの開発ができるはずです。

## (2018/04/05 23:30 追記)

`.bash_profile` に書き込まれていたので、SDKMANがインストールされていない環境でも動作するように編集しました。

```diff:.bash_profile
#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
- export SDKMAN_DIR="/Users/{ユーザー名}/.sdkman"
- [[ -s "/Users/{ユーザー名}/.sdkman/bin/sdkman-init.sh" ]] && source "/Users/{ユーザー名}/.sdkman/bin/sdkman-init.sh"
+ export SDKMAN_DIR="$HOME/.sdkman"
+ if [ -d "${SDKMAN_DIR}" ]; then
+   [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
+ fi

```

## 参考リンク

- [SDKMAN! the Software Development Kit Manager](http://sdkman.io)
- [JavaユーザーのためのパッケージマネージャーSDKMAN - Qiita](https://qiita.com/ligun/items/6961918064dccbdac114)