AWS Cloud9の大きな特徴として、
- ブラウザベースのIDEなので、ネットが繋がればどこでも開発できる。
(ローカルの開発環境に依存しない) - 複数人でソースを共有し、リアルタイムで共同編集ができる。
が、あると思います。
これによって、hangoutsやzoomなどのビデオチャットと共に使用することで、
リモート環境でのペアプロ開発もできます。
構築環境
githubからコードをpullして、gradleからtestが実行できるまでです。
- githubとの連携(pull,push)
- gradle
- java11
Cloud9のセットアップ
Cloud9についての設定

- Environment type
→EC2を選択 - Instance type
→とりあえず一番小さいt2.micro - Platform
→Amazon Linux とりあえずry - Cost-saving setting
→なにもアクションが無い時間が30分経過で勝手にIDEが載ってるEC2インスタンスがシャットダウンされるように設定。
ちなみにCloud9のコストは起動している間だけかかる。
一日動かして100円くらいってどこかの記事で書いてありました。
1年間無料枠の対象にもなってます。
Java11を入れる
最初にCloud9を起動したときに入っているJavaは7なので、11に変えます。
下のコマンドで入ります。
#DLする場所
cd /tmp;
#JavaのDL
wget https://d3pxv6yz143wms.cloudfront.net/11.0.2.9.3/java-11-amazon-corretto-devel-11.0.2.9-3.x86_64.rpm;
#install
sudo yum localinstall java-11-amazon-corretto-devel-11.0.2.9-3.x86_64.rpm
#動作確認
java -version;
#戻る
cd /home/ec2-user/environment;
Gradleを入れる
#パッケージマネージャをインストールする。
curl -s http://get.sdkman.io | bash;
#初期設定
source "$HOME/.sdkman/bin/sdkman-init.sh";
#Gradleインストール
sdk install gradle;
#動作確認
gradle -v;
githubと連携させる
この設定をやらなくてもpullはできますが、pushでいちいち認証する手間がかかってしまうのでSSHで接続できるようにします。
Cloud9で公開鍵作成
#ディレクトリを移動
cd ~/.ssh
#公開鍵を作成
ssh-keygen
#公開鍵を表示
cat ~/.ssh/id_rsa.pub
表示された公開鍵をクリップボードにコピーしておきます。
ssh-rsa…. の頭から丸ごと。
githubに公開鍵を登録
settings

SSH and GPG Keys

new SSH keys

keyのところに先程作成した公開鍵をペーストする。
Add SSH key

githubからcloneする(SSH)
urlをもらってくるときに、use sshを押してssh用のパスでcloneする

cloneしたプロジェクトが動くか確認する。
#build
./gradlew build
#test
./gradlew test
もし以下のようなエラーが出たら
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
#gradle-wrapper.jarを作る
gradle wrap
Cloud9を共有する
Iamユーザを作成し、追加。
追加されたIamユーザでログインし、編集中のカーソルが同時に表示されるまでです。
ちなみにIamユーザの作成は無料です。
Iamユーザ作成
画面上でshareをクリック

create Userをクリック

ユーザ情報を作成します。

- アクセスの種類
→AWSマネジメントコンソールへのアクセス - コンソールのパスワード
→カスタムで初期パスワードを設定します。 - パスワードのリセットが必要
→初回ログイン時にパスワードを変えるように
権限の設定をします

アクセス許可の設定
「既存のポリシーを直接アタッチ」を選択
「cloud9」と検索し、
「AWSCloud9User」の権限セットを選択する。
タグの設定は任意です。特に設定してないです。
ユーザの作成が完了すると、完了画面から直接メールを送信して知らせることができます。

また、この画面を消してしまった場合でも、Identity and Access Managementから確認することができます。
ユーザをクリックして、

作成したユーザを検索して、

概要が出てきます。
認証情報タブにあるサインインリンクを共同編集者に教えてあげましょう。

Cloud9の共有
Cloud9で共同編集できるようにするには、作成したIamユーザを招待する必要があります。
Cloud9でshareをクリックし、「Invite Members」に作成したユーザ名を入力して「Invite」します。

色々ポップアップが出ますが、OKを押して進めていくと、作成したIamユーザが追加されます。

共同編集者にCloud9のリンクにアクセスしてもらいます。

作成したユーザでCloud9に入ると

Onlineになり、

同じソースを開くと相手のカーソルが見えるようになります。

共有中の様子
相手が編集すると・・・

相手の修正したポイントがわかります。

こんな感じで、それぞれがどこの部分をいじっているのかがわかります。

所管
いつもはIntelliJにお世話になってるんですが、IntelliJと比べてJava開発での気になる点がいくつか。
- テストコードがIDEから実行できない
(やり方はあるのかもしれないが不明 - コンパイルエラーわからん
- import補完や、スニペットが弱い
- コンソールのコマンドは共有されないので、
gradleタスクの実行結果などの共有が出来ない。
Cloud9だけで本格的にJava開発を行うというのは厳しそうですが、
「ちょっとこのコードだけペアプロでやろう」とかで使えそうです。
IntelliJで共同編集できるようなプラグインが出たらそれが最強な気がする。
その他リモートペアプロできそうなツール
VSCode+plguin(Live Share)
githubやmicrosoftアカウントでログインし、ソースコードを共有できる。
ただ実行環境はそれぞれのローカル端末依存になるので、開発環境ちゃんと合わせないと片方だけビルドで詰まる とかはありそう。
でもJava開発もプラグイン追加したらできるし、有力。
CodeShare
リモートペアプロできそうなツール無いかなって探してる途中で見つけた。
ブラウザベースでビデオチャットとコード共有が同時にできる。強そう。
でもそれだけっぽい。
IDEとかそういうものではなく、コードエディターっぽい。
多分コーディングの教えるツールとかの立ち位置かもしれない。
コメントを書く