Cloud9でJava開発環境をつくってみた

# はじめに
大規模開発を行う際、各開発者に同じ開発環境を提供するのが手間でした。
環境構築手順書を片手に必要なツールをインストールしても大抵の場合一度では動きません。おおむね一週間は環境構築に費やすことになります。
vmwareやdocker,vagrantなどを利用して配布したこともありましたが、VM動作環境の整合性等で、なかなかうまく行きません。
その中でCloud9は、早い時期からクラウドで開発環境を提供してきた老舗であります。現在はAWS社に買収されAWS Cloud9となっており、LambdaやNode.jsなどのスクリプト開発環境としては、ほぼオールインワンで提供されている便利なサービスです。
個人的にも手軽なLinux環境として使ってきましたが、Javaの実行／デバッグ環境としては一工夫必要なのでハマりどころを記事にしました。

# 軽くCloud9について説明
（必要ない方は飛ばしてください）
ブラウザベースのリモート開発環境です。VSCodeの様なIDEを持っているので、VSCodeに慣れている方なら、すんなり移行できます。逆にそうでない場合はちょっと厳しい・・・
Java開発の場合、IntelliJやeclipseを使っている方が多いので、敷居が少し高いかもしれません。
Google Cloud Next '22で発表された「Cloud Workstations」はブラウザベースではありませんが、IntelliJと連携できるらしいです。今度使ってみます。
ちなみにCloud9自体は無料、Cloud9が稼働するEC2の料金だけで利用できます。

# まず、環境構築
コンソールからCloud9環境を作成します。
本当は良くないですが、面倒なので**AWSマネージドポリシー：AWSCloud9Administrator**がアタッチされているIAMユーザで作成します。

## Cloud9環境作成

1. Cloud9サービスの画面で、**Create environment** ボタンを押してインスタンス作成ウィザードへ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/ea220c93-1359-a842-8b07-3130998e02c3.png)

2. 名称、説明、環境を入力する
ここでは、名称（Name）､説明（Description）、環境（Environment type）を入力します。
環境は**New EC2 instance**を選択し新規にEC2インスタンスを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/159cf0ce-7f33-639d-2526-39ea266384ec.png)

3. EC2インスタンスの設定
Javaの実行環境を動作させる場合は、大きめのインスタンスを作成します。
※**メモリ2GiB以上**は最低条件です。Java拡張が有効にできません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/6b99fecf-57d3-a992-06d5-69f5c1870780.png)
デフォルトでは、30分操作しないとEC2が止まります。このおかげで、停止忘れによる無駄なコストを避ける事が出来ます。

4. ネットワークの設定
外部ポート経由（SSH）接続を選択します
セキュリティを考慮するなら、外部アクセスを制限したSSM（no-ingress）を使う方が良いでしょう。今回はNW設定などが面倒なのでこちらを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/58fca9e8-4152-1d0a-8f8e-b30182b64212.png)

5. Createボタンを押してCloud9開発環境作成完了
    Cloud9の管理コンソールから**Open**をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/ff5fa0d4-65af-39d6-704f-7bc1e026cb9b.png)

    Cloud9環境が起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/e5a88d3c-ad8b-635f-7fb0-f704481c37e9.png)


### Java機能の有効化
- Java拡張設定
    右上の**歯車**マークから設定画面を呼び出し、**Enhanced Java Support**をON
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/0a9a9675-661d-0abf-a7e3-65f48ff6a221.png)
    ブラウザリロードでIDEをリフレッシュすると、Javaが利用可能となります。
    ``` java -version```
    で、Corretto-11がインストールされていることが分かります

# Javaアプリケーション開発実践
## 簡単なJavaプログラムの実行
以下のJavaファイルのような、簡単なプログラムを実行／デバッグしてみましょう。
```java:test55/Test.java
package test55;

public class Test{
    public static void main(String[] args){
        System.out.println("Hello!!!");
    }
}
```
- **~/environment/test55**の下にソースコードを配置
- コンパイル
    ```
    ~/environment/ $ javac test55/Test.java
    ```
- 実行
    ```
    ~/environment/ $ java test55.Test
    Hello!!!
    ```
- デバッグ
    ここまでは、コマンドラインでJavaを実行しているだけですが、Cloud9のデバッガーを利用してみます。
    Test.javaをダブルクリックし、Cloud9のエディタでファイルを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/7d2075e1-638c-40b2-b77b-096a7c4c0a75.png)

    すると、Cloud9がメインメソッドを検出し、VSCodeと同様 **Run | Debug** がエディタ上に現れます。
    **Debug** を選択することでトレースすることができます。

    注意！）　**Run | Debug**　が表示されるまでに少し時間がかかる場合があります。数分待って画面をリロードすると表示されます。

## ちょっと実践的なJavaアプリケーションの開発
    
今度はgradleをつかった、ちょっと実践的なJavaアプリケーションを実行してみます。
以前Qiita用に作成した簡単なJavaアプリを使って説明します。

[Sprint-Session-Sample](https://github.com/Be-cricket/Spring-Session-Sample)　Spring-bootを使ったWebアプリケーションです。

- ~/environment の下にgit cloneします
    ```
    $ git clone https://github.com/Be-cricket/Spring-Session-Sample.git
    ```
- セッションにRedisを利用しているので、Redisをインストールします
    ```
    $ sudo yum install redis
    ```
- 別のターミナル（もしくはバックグラウンド）でRedisサーバを実行します
    ```
    $ redis-server &
    ```

- サンプルアプリ実行
    ```
    $ cd ~/environment/Spring-Session-Sample
    $ chmod +x gradlew
    $ ./gradlew bootRun
    ```
    以下のリンクが表示されたらクリックすると、開発中のWebページが表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/3e5f8bdb-74c5-ace2-8836-c46a8e1d689c.png)
    
 
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/e032eb4f-83d1-0139-f156-468051dee882.png)

    Cloud9環境のメニュー「Preview」-「Preview Running Application」を選択しても同様にWebページを表示することができます。

- サンプルアプリケーションのデバッグ
    com/sample/demo/SSSApplication.javaをダブルクリックし、Cloud9のエディタでファイルを表示します。
    ![Cloud9-5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/338832/fbf4c87a-789b-9cce-1b1b-f6e473492eb2.png)
    先ほど説明した、「簡単なJavaプログラム」と同様に **Run | Debug** がエディタ上に現れます。
    **Debug** を選択することで、ソースのトレースを実施できます。


# まとめ
　いかがでしょう。スクリプト言語だけでなく、簡単にJavaの開発環境が整う事に驚いた方もいるのではないでしょうか。我がまま事を言わなければ、簡易にブラウザベースのクラウド開発環境が整うのでとても便利です。また、今回はpublicなネットワーク上に環境を構築しましたが、no-ingressの設定をすればセキュリティも確保できます。是非、皆さんも使ってみてください。