Cloud9 が AWS に買収され、AWS Cloud9 としてリリースされてからもう結構経ってしまいましたが、 Lambda 等のサーバレスなサービスを使う機会が増えてきたり、コンテナ等を活用するようになってきたので、クラウドの IDE が便利に活用できるようなら使ってみたいということで、今更ではありますが Cloud9 で Rails の開発環境を作ってみました。
環境の作成
まずは AWS のマネジメントコンソールから Cloud9 を検索して Cloud9 のコンソールにアクセスします。
リリースからそれなりに経っているものの、まだ東京リージョンでは Cloud9 は提供されていないので、東京リージョンを選択していると下記のようにリージョンの選択画面が表示されます。今回はシンガポールリージョンを使用します。
Cloud9 のコンソールが表示されたら Create environment
をクリックします。
環境の作成フォームで環境の名前を設定します。今回は rails-dev としました。説明はオプションなので設定しなくても問題ありません。入力したら Next step
をクリックします。
次に環境の設定を行います。今回は全てデフォルト値をそのまま使います。
Cloud9 では IDE の接続先を EC2 かその他のリモート環境に ssh で接続するかを選択できます。今回は EC2 を使用するので、デフォルトの Create a new instance for environment [EC2]
を選択します。
EC2 への接続を選択した場合は EC2 インスタンスが新たに作成されますが、そのインスタンスタイプも選択できます。デフォルトの t2.micro
を使用します。
また、 Cloud9 では使用していない時間が続くと EC2 が停止しますが、停止するまでの時間も選択できます。これも今回はデフォルトのまま、 After 30 minutes
を使用します。
Next step
をクリックして次へ進みます。
設定内容の確認画面が表示されますので、内容に問題がなければ Create environment
をクリックします。
環境が作成されるまでには少し時間がかかります。作成されるまでの間は下記のような画面が表示されます。
環境が作成されると下記のように IDE の画面が表示されます。作成されたインスタンスのホームディレクトリには environment というディレクトリが作成され、デフォルトの構成では、左ペインに environment ディレクトリ配下のファイルがツリー表示されます。右側の上部ペインにはエディタ、下部ペインにはターミナルが表示されます。
ファイルツリーからファイルをダブルクリックすると右側のエディタに表示されます。
右上の設定マーク(歯車マーク)等から設定画面を開くことができ、エディタ等の設定を変更することができますので、とりあえずいくつか設定してみます。
まず Code Editor の設定で Soft Tabs をデフォルトの 4 から 2 に変更します。
私は普段エディタには Vim を使ってるので、 Keyboard Mode を Vim に変更します。
テーマもターミナルっぽい方が好きなので、 Cloud9 Night に変更してみます。
ターミナルのスタイルも変更できますので、背景色を黒、文字色を白に変更します。また、スクロールバックのバッファもデフォルトの 1,000 だと少ないので、 10,000 に変更しておきます。
設定変更後の画面は下記のような感じになります。
ターミナルで作業するときにはターミナルを全画面表示することもできます。
rvm のアンインストール
ひとまず Cloud9 の環境としては作成されたので、 Rails の環境を作っていきます。まずは Ruby からですが、デフォルトでも Ruby は使えるようになっています。
$ ruby -v ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
デフォルトでは Ruby の実行環境の管理には rvm が使われています。
$ which ruby
/usr/local/rvm/rubies/ruby-2.4.1/bin/ruby
Rails も入っています。
$ which rails /usr/local/rvm/rubies/ruby-2.4.1/bin/rails $ rails -v Rails 5.2.2
これは好みですが、私は rvm より rbenv の方が好きなので、 rvm をアンインストールして、 rbenv をインストールしたいと思います。 rvm のアンインストールは rvm implode
でできますが、 root 権限が必要なので、 sudo でフルパス指定で実行します。
$ sudo /usr/local/rvm/bin/rvm implode Are you SURE you wish for rvm to implode? This will recursively remove /usr/local/rvm and other rvm traces? (anything other than 'yes' will cancel) > yes Removing rvm-shipped binaries (rvm-prompt, rvm, rvm-sudo rvm-shell and rvm-auto-ruby) Removing rvm wrappers in /usr/local/rvm/bin Hai! Removing /usr/local/rvm /usr/local/rvm has been removed. Note you may need to manually remove /etc/rvmrc and ~/.rvmrc if they exist still. Please check all .bashrc .bash_profile .profile and .zshrc for RVM source lines and delete or comment out if this was a Per-User installation. Also make sure to remove `rvm` group if this was a system installation. Finally it might help to relogin / restart if you want to have fresh environment (like for installing RVM again).
これで rvm がアンインストールされ、 Ruby も使えなくなりました。
$ which ruby /usr/bin/which: no ruby in (/home/ec2-user/.nvm/versions/node/v6.15.1/bin:/usr/local/bin:/bin:/usr/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin)
rbenv のインストール
では rbenv をインストールします。と言っても特に Cloud9 固有なことはありません。 git はデフォルトで入っているので、 rbenv を git clone
します。
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv Cloning into '/home/ec2-user/.rbenv'... remote: Enumerating objects: 2744, done. remote: Total 2744 (delta 0), reused 0 (delta 0), pack-reused 2744 Receiving objects: 100% (2744/2744), 523.32 KiB | 532.00 KiB/s, done. Resolving deltas: 100% (1720/1720), done.
そしてコンパイルします。
$ cd ~/.rbenv && src/configure && make -C src make: Entering directory `/home/ec2-user/.rbenv/src' gcc -fPIC -c -o realpath.o realpath.c gcc -shared -Wl,-soname,../libexec/rbenv-realpath.dylib -o ../libexec/rbenv-realpath.dylib realpath.o make: Leaving directory `/home/ec2-user/.rbenv/src'
起動時にパスが通るように .bash_profile に設定を追加します。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
また、起動時に実行されるように設定を .bash_profile に追加します。
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
別ターミナルを起動して rbenv コマンドが使えるようになっていることを確認します。
$ rbenv -v rbenv 1.1.1-39-g59785f6
続けて ruby-build を git clone
します。
$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build Cloning into '/home/ec2-user/.rbenv/plugins/ruby-build'... remote: Enumerating objects: 29, done. remote: Counting objects: 100% (29/29), done. remote: Compressing objects: 100% (18/18), done. remote: Total 9620 (delta 9), reused 22 (delta 7), pack-reused 9591 Receiving objects: 100% (9620/9620), 2.03 MiB | 1.40 MiB/s, done. Resolving deltas: 100% (6275/6275), done.
Ruby 2.6 は12月にリリースされたばかりで、まだ Rails のバージョンとの相性等は確認してませんが、今回はとりあえず細かいことは考えずに最新の 2.6 をインストールしてみます。
$ rbenv install 2.6.0
Downloading ruby-2.6.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.bz2
Installing ruby-2.6.0...
Installed ruby-2.6.0 to /home/ec2-user/.rbenv/versions/2.6.0
インストールしただけだと下記のようにエラーになってしまってまだ使えません。
$ ruby -v rbenv: ruby: command not found The `ruby' command exists in these Ruby versions: 2.6.0
なのでデフォルトのバージョンを 2.6 に設定します。
$ rbenv global 2.6.0 $ ruby -v ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux]
これでひとまず Ruby が使える環境ができました。ついでに gem インストール時にドキュメントがインストールされないように .gemrc に設定を追加しておきます。
$ printf "install: --no-rdoc --no-ri\nupdate: --no-rdoc --no-ri\n" >> ~/.gemrc
Rails インストール
では最後に Rails をインストールします。
$ gem install rails
Fetching rack-test-1.1.0.gem
Fetching activesupport-5.2.2.gem
Fetching i18n-1.5.1.gem
Fetching tzinfo-1.2.5.gem
Fetching thread_safe-0.3.6.gem
Fetching rack-2.0.6.gem
Fetching concurrent-ruby-1.1.4.gem
Fetching loofah-2.2.3.gem
Fetching rails-html-sanitizer-1.0.4.gem
〜〜〜以下略〜〜〜
これで最新の Rails が使えるようになりました。ちなみに gem も rails も rbenv でインストールされた現在のバージョンの Ruby 環境に紐づいているので、 rbenv で Ruby のバージョンを切り替えたときには改めて rails 等もインストールする必要があります。
$ rails -v
Rails 5.2.2
$ which rails
~/.rbenv/shims/rails
試しに Rails アプリを作成してみます。
$ rails new hello_cloud9 create create README.md create Rakefile create .ruby-version create config.ru create .gitignore create Gemfile run git init from "." Initialized empty Git repository in /home/ec2-user/environment/hello_cloud9/.git/ create package.json create app create app/assets/config/manifest.js create app/assets/javascripts/application.js create app/assets/javascripts/cable.js 〜〜〜以下略〜〜〜
問題なく作成されたらアプリを起動してみます。
$ cd hello_cloud9/ $ rails s => Booting Puma => Rails 5.2.2 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.12.0 (ruby 2.6.0-p0), codename: Llamas in Pajamas * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://localhost:8080 Use Ctrl-C to stop
ローカルで開発しているときはブラウザを開いてアクセス確認をしますが、 Cloud9 の場合はコンソールからプレビュー用のメニューを選択します。
コンソール内にプレビュー用のペインが表示されますが、その中では表示されないので(原因はまだ調べてませんが)、ブラウザの別タブとして開くためのボタンをクリックします。
ブラウザの新しいタブで下記のように Rails のデフォルト画面が表示されれば成功です。
まとめ
今更ながらに Cloud9 で環境を作ってみましたが、思ったよりもかなり使いやすそうでした。エディタも用意されていますが、普段 Vim を使っているので、 Vim の環境を整えてターミナルの方を全画面表示してしまえば、ローカルで使っているのに近い感じで使えそうです。
クラウドの IDE はローカルの環境に依存せずに使えるのも良いですし、Lambda 等の AWS リソースとの連携もやりやすくなっているようなのでその辺りも今後試してみようと思います。
利用料は Cloud9 自体は無料ですが EC2 の利用料金はかかるので、実際にどれぐらいになるかも確認してみたいと思います。