Go言語の開発は普通はローカルのPCで行う前提で環境構築が説明されているのですが、
AWS Cloud9はGo言語をサポートしているので、どれくらい開発に使えるものなのか試してみました。
拙作のAPIサーバーのstarter-kitが動作することを目標にしました。
このAPI starter-kitは、以下のような構成になっています。
- Ginフレームワーク
- O/Rマッパーにxorm
- MySQLをデータベースとして使用
- ローカル開発環境用にDockerを使用してMySQLを起動
- nodemonを使用してファイル編集時にAPIサーバーを自動リロード
結論からいくと、これらの全てが問題なく動作しました。
順番に設定手順を説明していきます。
以下のことが前提です。
- AWSアカウントを持っている
- bashの操作が出来る
AWS Cloud9にログイン
AWS Cloud9の起動は既に終わっているところから説明します。
まだの場合、設定と起動手順はこちらのQiita記事などを参考にして下さい。
Cloud9を立ち上げて、下の画像のような状態からスタートします。
主に下側にある、bash
のターミナルにコマンドを打ち込んで操作します。
Go言語のバージョン確認と更新
$ go version
# 表示結果
go version go1.9.1 linux/amd64
go version
がgo1.10.x
の方がAPIサーバーの自動リロードが高速に行え、快適な開発がもたらされるため、Go言語のバージョンをアップデートします。
Go言語のアップデートには次のコマンドを実行します。
(go1.10.3は 2018/07時点の最新のバージョンです)
$ wget https://storage.googleapis.com/golang/go1.10.3.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf ./go1.10.3.linux-amd64.tar.gz
$ rm ./go1.10.3.linux-amd64.tar.gz
$ go version
# 表示結果
go version go1.10.3 linux/amd64
環境変数の設定
以下の4つのコマンドを実行して、PATHとGOPATHを設定します。
$ echo 'export GOPATH=$HOME/go' >> ~/.bashrc
$ echo 'export GOBIN=$GOPATH/bin' >> ~/.bashrc
$ echo 'export PATH=$GOBIN:/usr/local/go/bin:${PATH}' >> ~/.bashrc
$ . ~/.bashrc
Go言語のパッケージ管理ツールdepのインストール
$ mkdir -p $GOBIN
$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
リポジトリのclone
go-gin-xorm-starterリポジトリをcloneします。
$ git clone https://github.com/gemcook/go-gin-xorm-starter.git $GOPATH/src/github.com/gemcook/go-gin-xorm-starter
これ以降、リポジトリルートで作業を行うため、cdコマンドで移動します。
$ cd $GOPATH/src/github.com/gemcook/go-gin-xorm-starter
このディレクトリが左のフォルダビューで表示されるように設定します。
フォルダービューShow Home in Favorites
を選択します。
~/go/src/github.com/gemcook/ までディレクトリを開いていき、go-gin-xorm-starterをAdd to Favorites
します。
nodemon のインストール
nodemon
コマンドをインストールします。
$ npm i -g nodemon
node
やnpm
がインストール済みなので簡単です。
docker-composeコマンドをインストールする
Cloud9にはdocker
コマンドは初めから入っていますが、docker-compose
は入っていません。
以下のコマンドでインストールします。
$ sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
(2018/07時点の最新のバージョンなので、今時点の最新を入れたい場合は、docker-compose
のリリース一覧から最新のバージョンのインストールコマンドを確認して下さい)
Dockerを使用してMySQLを起動する
念のため既存のMySQLを停止しておきます。
$ sudo service mysqld stop
docker-composeを使用してdockerを立ち上げます。
$ docker-compose up
ターミナルにdockerの実行ログが流れます。
このターミナルタブはそのまま置いておき、フォルダービューからgo-gin-xorm-starter
を選択して、右クリックメニューからOpen Terminal Here
を選択すると新しいタブが表示されます。
ちなみに、新しいタブはエディタエリアに開きますが、ドラッグ&ドロップで下のパネルに移動できます。
APIサーバーを立ち上げる
.env
ファイルの準備が必要なのでexampleをコピーして作ります。
$ cp .env.example .env
APIサーバーの依存パッケージをdepコマンドでインストールします。
$ dep ensure
サンプルのデータベースを作成します。
$ sh ./fixtures/init_db.sh
APIサーバーを起動します。
$ make start
APIサーバーのルーティング一覧がログとして表示されていれば成功です。
APIを呼び出す
Preview Running Application
を開くと外部からアクセス可能なURLが表示されます。
このURLは、ポート8080で起動しているAPIサーバーに繋がっています。
Cloud9の右側に内部ブラウザが開き、下記のようなURLにアクセスしています。
https://<環境ID>.vfs.cloud9.<AWSリージョン>.amazonaws.com/
starter-kitは /v1/fruits
でアクセスするとフルーツ一覧をJSONで返すので、
https://<環境ID>.vfs.cloud9.<AWSリージョン>.amazonaws.com/v1/fruits
にアクセスして、APIの動作確認が出来ます。
starter-kitを拡張していくには
以下の作業を行って下さい。
リポジトリの名前を変更して、自分のものにします
$GOPATH/src/github.com/<あなたのGitHubユーザー名>/<任意のリポジトリ名>
ソースコード全体に対して、以下の置換処理をします
置換前: gemcook/go-gin-xorm-starter
置換後: <あなたのGitHubユーザー名>/<任意のリポジトリ名>
【番外編】 adminerとphpMyAdminを使用してMySQLの内容を確認する
starter-kitではdocker-compose
を使用して、MySQLを立ち上げましたが、
MySQL以外に、adminerとphpMyAdminも立ち上がっています。
Cloud9の仕様で、外部に公開出来るポートは 8080, 8081, 8082
に限られているため、adminerかphpMyAdminの使用する方のポートを8081に書き換える必要があります。
まずは、既に立ち上がっているdocker-composeを停止します。
以下のコマンドを実行するか、実行中のターミナルでCTRL+C
で中断を送信します。
$ docker-compose down
docker-compose.ymlを書き換えます。
adminer:
image: adminer
ports:
# - 10080:8080
# adminerを使用する場合、10080:8080 -> 8081:8080に変更する
- 8081:8080
depends_on:
- mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: mysql
PMA_USER: root
PMA_PASSWORD: password
ports:
# - 9080:80
# phpMyAdminを使用する場合、9080:80 -> 8081:80に変更する
- 8081:80
depends_on:
- mysql
再び、dockerを起動します。
$ docker-compose up
そのあと、ブラウザから https://<環境ID>.vfs.cloud9.<AWSリージョン>.amazonaws.com:8081/
にアクセスします。
まとめ
普段Go言語の開発をしているVSCodeと比べると、支援機能は正直いまいちです。
しかし、AWS Cloud9で大体のGo言語の開発は出来そうです。
大抵の必要なものは初めからインストール済みなので入門用の環境としては良いのではないでしょうか。