わかったつもりになってない?

わかったつもり防止のために、日常で学んだことをもう少し深堀したいブログ

【AWS】CodeStar + Cloud9でRuby on Railsの開発環境を構築するまとめ

ども。久しぶりの更新です。年始にprogateってサービスでプログラミング学んでから、気が向いたときにRuby on Railsで遊んでるのですが、開発環境作りに結構手間取ったのでAWSのCodeStar+Cloud9でRuby on Railsを動かす方法についてまとめておきたいと思います。同じように悩む人が少しでも少なくなれば嬉しいです。 

なお、この記事は2018年6月17日に書いたものであり、その後のAWS側の変更次第では以下の通りに実施しても動かない可能性があるのでご了承ください。

1.AWS上でCodeStar,Cloud9登録

1-1.Cloud9利用可能リージョン選択

まずは、Cloud9が利用可能なリージョンを選択します。残念ながら日本(東京、大阪)リージョンは利用不可なので、ここではオレゴンリージョンを選択します。

 

対応しているリージョンは以下を参照していただければと思います。

リージョン - グローバルインフラストラクチャ | AWS

 

f:id:gattsu09:20180617091934p:plain

 

1-2.CodeStarで新規プロジェクト作成

続いて、サービスを選択して、「開発者用ツール」の「CodeStar」を選択します。

f:id:gattsu09:20180617091939p:plain

 

AWS CodeStarの画面が表示されるので「新規プロジェクトの作成」を選択します。

f:id:gattsu09:20180617091942p:plain

 

1-3.Ruby on Rails(EC2)選択

そのあと、いろいろ開発環境の候補が出てくるので、ここでは「Ruby on Rails,Amazon EC2」を選択します。

f:id:gattsu09:20180617091946p:plain

1-4.プロジェクト名とソース保存レポジトリ選択

プロジェクト名(ここでは「RubyProject」と入力)を決めて、ソース保存レポジトリを選択します。アカウントを持ってる場合は、日経曰く「設計図共有サイト」らしいGitHubを選択すればよいと思います。僕は持ってないのでAWS CodeCommitを選択しました。

f:id:gattsu09:20180617091950p:plain

で、「プロジェクトを作成する」ボタンを押しましょう。

f:id:gattsu09:20180617091955p:plain

1-5.キーペア選択

ログインに利用する、キーペアを選択します。過去にキーペアを作成したことない場合は、サービスから「EC2」-「N個のキーペア」-「キーペアの作成」を選べば作成できます。

f:id:gattsu09:20180617091959p:plain

1-6.コード編集方法選択

コードの編集方法をせんたくします。ここでは当然「AWS Cloud9」を選択します。

f:id:gattsu09:20180617092003p:plain

1-7.EC2のタイプ選択

EC2のタイプを選択しましょう。無料枠で納めたい場合は「t2.micro」を選択します。

f:id:gattsu09:20180617092009p:plain

1-8.待ち

ようやく登録が完了して、セットアップが始まります。青色の2つの丸がくるくる回っているので15分くらい待ちましょう。そのうち緑色に変わればセットアップ完了です。

f:id:gattsu09:20180617092013p:plain

 

1-9.サンプルアプリ表示

緑色になったら、「アプリの表示」をクリックすると、サンプルアプリが表示されます。

f:id:gattsu09:20180617092017p:plain

なんか凄い

f:id:gattsu09:20180617092022p:plain

 

1-10.Cloud9表示

横の「コーディングの開始」を選択するとCloud9の画面に遷移します。ブラウザだけでここまでできるとか、この先の世の中ネイティブアプリとか無くなるんじゃないのって思っちゃいますね。

 

f:id:gattsu09:20180617092026p:plain

 

CodeStar + Cloud9の登録は以上となります。

 

2.Cloud9の設定

続いて、Cloud9の設定に移ります。Cloud9のRuby on Railsは何故か以下の問題を抱えているので、こちらで設定してあげないと動きません。環境変数はともかく、他はマジでなんでなんだろう。

 

・gem listコマンドの結果とGemfileの内容が一致しない。

・Ruby on Railsプロジェクトのディレクト配下にbinフォルダが存在しない。

・SECRET_KEY_BASE環境変数の設定がされていない。

 

2-1.Gemfileの内容にgem listを合わせる

[2018/8/9追記]

以前はGemfileの内容とgem listとでrailsバージョンの表示結果が異なっていたのですが、本日確認したところ両方とも5.2.0になっており解消されていました。代わりに何故かSqliteのバージョンが異なっているため、bundle installはどのみち必要みたいです。

 

つーわけで、一つづつ解消していきます。Gemfileってのはgem(rubyのパッケージを管理するツール)の依存関係を管理するファイルらしいです。ジェムって読むらしいですね。ずっとゲムだと思ってた。

 

Cloud9はデフォルトでGemfileのパッケージ内容と実際に導入されているパッケージに差分があるためコマンドとかが上手く動きません。本当になぜなんだ…。

 

 

この問題を解消するために、Cloud9の下側にあるターミナル画面で「bundle install」コマンドを実行します。その前に、プロジェクトのフォルダに移動するのを忘れないでください。エラーになります。

 

ec2-user:~/environment $ cd rubyproject
ec2-user:~/environment/rubyproject (master) $ bundle install

The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies.....
Fetching rake 12.3.1
Installing rake 12.3.1

<略>

なお、Rails系のコマンドはプロジェクトフォルダ内で実行しないと概ねエラーになります。ターミナルを新規起動する度移動する必要があるので注意しましょう。

 

 

2-2.binフォルダ作成

続いて、以下コマンドでbinフォルダを作成します。

ec2-user:~/environment/rubyproject (master) $ rake app:update:bin

できた。

ec2-user:~/environment/rubyproject (master) $ ls -ltr bin
total 20
-rwxr-xr-x 1 ec2-user ec2-user 782 Jun 17 05:03 update
-rwxr-xr-x 1 ec2-user ec2-user 920 Jun 17 05:03 setup
-rwxr-xr-x 1 ec2-user ec2-user 90 Jun 17 05:03 rake
-rwxr-xr-x 1 ec2-user ec2-user 141 Jun 17 05:03 rails
-rwxr-xr-x 1 ec2-user ec2-user 129 Jun 17 05:03 bundle

2-3.SECRET_KEY_BASE環境変数設定

このままだと、rails起動に必要な「SECRET_KEY_BASE」という環境変数が設定されていないため、プレビュー画面を見ても以下のエラーが発生してしまいます。

Puma caught this error: Missing `secret_key_base` for 'development' environment, set this value in `config/secrets.yml` (RuntimeError)

というわけで設定していきましょう。以下のコマンドを実行すると「SECRET_KEY_BASE」環境変数に値が入って、ちゃんと起動するようになります。

$ rake secret > ~/.taskapp_secret_key_base
$ cat ~/.taskapp_secret_key_base
<長い文字列が表示される>
$ export SECRET_KEY_BASE=`cat ~/.taskapp_secret_key_base`

毎回実行するのがめんどくさい場合は、「.bash_profile」にexportコマンドを登録してあげればよいです。

$ vi ~/.bash_profile

 以下を登録して保存。

export SECRET_KEY_BASE=`cat ~/.taskapp_secret_key_base`

 2-3.Ruby on Rails起動

以下コマンドでRailsを起動します。progateの時と違って開発環境ではバインドするIPを指定するフラグが必要らしいです。

rails s -b $IP

 

2-4.動作確認

以上でCloud9の設定は完了です。では、progateででてきた「rails generate controller home top」コマンドをプロジェクトフォルダ(ここでは「rubyproject」)配下で実行して表示を確認してみます。

$ rails generate controller home top
create app/controllers/home_controller.rb
route get 'home/top'
invoke erb

<略>

 Cloud9の「Preview」から「Preview Running Application」を選択します。

f:id:gattsu09:20180617143758p:plain

何故か真っ白なプレビュー画面が表示されるので、左上のボタンをクリックします。

f:id:gattsu09:20180617143942p:plain

 

ブラウザの別タブにRailsのプレビュー画面が表示されるので、アドレスの後ろに「/home/top」と入力します。

f:id:gattsu09:20180617144246p:plain

デフォルトでcssの設定がされてあるので、色ついてますが表示されました。設定は以上になります。

 

3.その他の注意点

その他、CodeStar+Cloud9を使用する際の注意点を書いてみます。主に料金系ですね。その他、思いついたら追記していきます。

 

3-1.EC2インスタンスは自動で停止しないことがある

Cloud9は30分操作しないとEC2インスタンスを自動で停止する機能があるのですが、なぜかたまに停止してくれないことがあります。起動したままにしておくと、思わぬ料金が発生することがあるので注意しましょう。

 

3-2.ディスク使用料が無料枠を超えていないか注意

CodeStar+Cloud9で環境を作るとEC2インスタンスが自動で2つ作成されます。それぞれのインスタンスに8GBのディスクが割り当てられており、それだけで16GB使ってしまいます。無料で使用できるディスクは30GBまでなので、無料内で納めたい場合は、作る環境は一つまでにしておきましょう。

 

 4.最後に

以上でこの記事は終わりです。一応、初めての方でもわかりやすいように書いたつもりなのですが、「わからない」「書いてる通りにやっても動かない」とかあれば見直すので教えていただければと思います。

 

また、有識者の方々におきましては、誤っている点や、もっと良い手順があれば優しく指摘していただければ嬉しいです。

 

ではでは、サクッと環境を作ってプログラミングを楽しみましょう!