AWS Cloud9 で サーバサイドKotlin の開発環境を構築する

こんにちは。らすてぃです。
昨年あたりから、`SpringBoot + Kotlin`を`IntelliJ IDEA`で弄っていたのですが
事情により、その開発環境を クラウドIDE(AWS Cloud9) で用意することにしました。

最終的に到達したいことはもろもろあるのですが、少しずつ進んでいきたいと思います。

# できるようになること
- AWS Cloud9 上で
    - Kotlinの開発ができる
    - githubのリモートリポジトリにpushできる
    - docker-composeが利用できる

# 事前にやっておくこと
- AWS Cloud9 の準備
    - アカウント作成とかIAM作成とかそのあたり

# Kotlin の環境を作る
EC2のOSはUbuntuを選択。なので、aptで構築していきます。

以下の記事がとても参考になりました。
https://qiita.com/kako351/items/3360cbac578aa7e35c9b

## Javaのインストール

### 1. リポジトリ追加
```terminal
$ sudo add-apt-repository ppa:openjdk-r/ppa
```
### 2. アップデート
```terminal
$ sudo apt-get update
```
### 3. Javaのパッケージ確認
```terminal
$ sudo apt-cache search openjdk-.+-jdk$
openjdk-11-jdk - OpenJDK Development Kit (JDK)
openjdk-8-jdk - OpenJDK Development Kit (JDK)
```
### 4. Java8をインストール
```terminal
$ sudo apt-get install openjdk-8-jdk
```
### 5. Java8に設定
```terminal
$ sudo update-alternatives --config java
```
複数のversionが選択できる場合には選択肢を聞かれますが、一つしかない場合には選択の必要はありません。

```terminal
$ sudo update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
Nothing to configure.
```
### 6. バージョン確認
```terminal
$ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03)
OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode)
```

## Kotlinのインストール
公式サイトを見ながらインストールします。

https://kotlinlang.org/docs/tutorials/command-line.html

### 1. SDKMAN!のインストール
```terminal
$ curl -s https://get.sdkman.io | bash
$ source "/home/ubuntu/.sdkman/bin/sdkman-init.sh"
```
### 2. Kotlinのインストール
```terminal
$ sdk install kotlin
```
ちなみにバージョンを指定したい場合は、次のように利用可能なバージョンを確認・指定する

```terminal
$ sdk list kotlin
================================================================================
Available Kotlin Versions
================================================================================
     1.3.31              1.2.31              1.1.2-5             1.0.0          
     1.3.30              1.2.30              1.1.2-2                            
     1.3.21              1.2.21              1.1.2                              
     1.3.20              1.2.20              1.1.1                              
     1.3.11              1.2.10              1.1                                
     1.3.10              1.2.0               1.0.7                              
     1.3.0               1.1.61              1.0.6                              
     1.2.71              1.1.60              1.0.5-2                            
     1.2.70              1.1.51              1.0.5                              
     1.2.61              1.1.50              1.0.4                              
     1.2.60              1.1.4-3             1.0.3                              
     1.2.51              1.1.4-2             1.0.2                              
     1.2.50              1.1.4               1.0.1-2                            
     1.2.41              1.1.3-2             1.0.1-1                            
     1.2.40              1.1.3               1.0.1                              

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
$ sdk install kotlin 1.3.31
```

### 3. バージョン確認
```terminal
$ kotlinc -version
info: kotlinc-jvm 1.3.31 (JRE 11.0.3+7-Ubuntu-1ubuntu218.04.1)
```
### 4. Hello, World!
```kotlin:hello.kt
fun main(args: Array<String>) {
    println("Hello, World!")
}
```
```terminal
$ kotlinc hello.kt -include-runtime -d hello.jar
$ java -jar hello.jar
Hello, World!
```

## Gradleのインストール
これも公式サイトを見ながらインストールします。

https://gradle.org/install/

SDKMAN!が使えるようになっているので、それを使います。

```terminal
$ sdk install gradle
```
# githubの設定をする
## 鍵の作成
```terminal
$ ssh-keygen -t rsa -b 4096 -f id_rsa_cloud9 -C your_email@example.com
```
## 公開鍵の設定
1. github.com の `Settings` から `SSH and GPG keys` にある `New SSH key` をクリック
2. Title に識別できる文字列を入力し、Key に先程作成した公開鍵の内容をペーストする
3. `Add SSH key` をクリック

## 接続の確認
```terminal
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa_cloud9
$ ssh -T git@github.com
Hi Your-name! You've successfully authenticated, but GitHub does not provide shell access.
```

# Dockerを動かす環境を作る
`docker`コマンドは入ってるけど、`docker-compose`コマンドは入ってないので、`Latest release`バージョンを確認してインストールします。

https://github.com/docker/compose/releases/

```terminal
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.24.0, build 0aa59064
```
執筆時点の最新は`1.24.0`です。

# 次にやることリスト
+ SpringBoot + Kotlin の雛形をつくり、github.com のリモートリポジトリにコミットする
+ DockerでSpringBootアプリケーションを動かす