21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iPhone6s Plus + AWS で世界のどこにいても Rails の開発をする【環境構築編】

Posted at

はじめに

MacBook Air などのノート PC を持ち歩かなくても iPhone だけでプログラミングができないものかといろいろ模索した結果、AWS を ssh でリモート接続して開発すればいいのではないか、という結論に達しました。

その環境構築の流れを紹介します。使用するアプリなど持っていいものがあるよ、などということがあれば是非教えていただきたいです。

iPhone で使用するアプリ

今回使用するアプリは次の通りです。

AWS Console

Amazon Web Services を iOS デバイスから操作するアプリです。これがあればインスタンスの起動・停止や状況の確認などできます。ただ、新規のインスタンスを作ったりするには PC から行う必要があるので、何かあった場合の停止措置などを行うものと割り切った方が良さそうです。

Serverauditor

iOS デバイスから SSH を使用してサーバへ接続するアプリです。AWS の場合は認証に鍵を使用しますが、これは Dropbox 経由で鍵ファイルを登録することで実現します。SSH クライアントとしては文句ありませんし、これで無料ということで大満足ですが、emacs を使用した場合に日本語入力ができないため、その辺りは別途方法を考える必要があります。

FTP Client Lite

FTP クライアントアプリ。iOS デバイスからサーバへ FTP 転送を行います。SFTP とかで SSH を使用した転送も可能なので機能は申し分ありません。強いて言えば Lite 版は接続先の情報が保存できないので毎回 IP アドレス等を入力する必要があるところが難点なので、Pro 版へのアップデートも検討してもいいかもしれません。

AWS の環境を作る

EC2 インスタンスの起動

PC の方から AWS に環境を作っておきましょう。とりあえず無料枠の t2.micro でサクッと EC2 サーバだけ立てておけば当面は困らないかと思います。あとは念のためアラートのメールを送ってもらうように設定したくらいでしょうか。$1 を超えたらメールを送ってもらうようにしました。当面は無料のはずなので。

ちなみに Amazon Linux AMI を使用しています。2015.09-release が作成時点の最新版でした。

環境変数 PS1 の設定

コマンドラインのプロンプト設定をカスタマイズするのが好きなので、PS1 の設定を行っています。

export PS1='\[\e[0;31m\][\u : `pwd`]$ \[\e[0m\]'

とりあえずこんな感じにしています。赤い文字でユーザ名とカレントディレクトリが表示されます。

タイムゾーンの設定

こちらの記事を参考にさせていただきました。

Ruby on Rails のセットアップ

そしてメインの Ruby on Rails をインストールしていきます。

参考書籍

「改訂3版基礎 Ruby on Rails」を使用しています。書籍版を持っていますが、Kindle も持っているので移動時は Kindle 版を参照しています。内容は全く同じです。

RVM のインストール

先に書いた通り Amazon Linux AMI を使用していると Ruby 2.0 がインストール済みですが、参考書籍では Ruby 2.2.1 を使用します。また複数のバージョンが混在した時は RVM などを利用した方が切り替えが楽なので先に RVM をインストールしておきます。

RVM のインストールはRVM の公式ページを参考にします。

Ruby 2.2.1 のインストール

RVM がインストールできれば後は簡単です。

[ec2-user : /home/ec2-user]$ rvm install 2.2.1

とすればインストールが始まります。インストールが完了したら rvm list コマンドを実行してみます。

[ec2-user : /home/ec2-user]$ rvm list

rvm rubies

=* ruby-2.2.1 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

と表示され、現在の Ruby のバージョンが 2.2.1 になっていることがわかります。念のため ruby -v を実行してちゃんと現在の Ruby が 2.2.1 になっていることを確認しておきます。

[ec2-user : /home/ec2-user]$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]

はい。大丈夫そうです。

Rails のインストール

そして Rails をインストールします。コマンドとしては簡単です。gem がありますので、以下のコマンドを実行します。

[ec2-user : /home/ec2-user]$ sudo gem install rails --version "4.2.1" --no-rdoc --no-ri

設定するオプションは参考書籍に従っています。重要なのはバージョンです。参考書籍の中では Ruby が 2.2.1 で Rails が 4.2.1 としているのできっちり合わせておきます。

通常はこれでおしまいなのですが、AWS に入れた時はエラーが続出しました。

Rails インストールのエラー対応

試行錯誤しながらやったので、無駄なオペレーションもあるかもしれませんが全部書いておきます。

nokogiri 問題

まず最初に出たエラー。

Fetching: i18n-0.7.0.gem (100%) Successfully installed i18n-0.7.0 Fetching: thread_safe-0.3.5.gem (100%) Successfully installed thread_safe-0.3.5 Fetching: tzinfo-1.2.2.gem (100%) Successfully installed tzinfo-1.2.2 Fetching: minitest-5.8.3.gem (100%) Successfully installed minitest-5.8.3 Fetching: activesupport-4.2.1.gem (100%) Successfully installed activesupport-4.2.1 Fetching: rack-1.6.4.gem (100%) Successfully installed rack-1.6.4 Fetching: rack-test-0.6.3.gem (100%) Successfully installed rack-test-0.6.3 Fetching: mini_portile-0.6.2.gem (100%) Successfully installed mini_portile-0.6.2 Fetching: nokogiri-1.6.6.4.gem (100%) Building native extensions. This could take a while... ERROR: Error installing rails: ERROR: Failed to build gem native extension. /usr/bin/ruby2.0 extconf.rb mkmf.rb can't find header files for ruby at /usr/share/ruby/include/ruby.h Gem files will remain installed in /usr/local/share/ruby/gems/2.0/gems/nokogiri-1.6.6.4 for inspection. Results logged to /usr/local/share/ruby/gems/2.0/gems/nokogiri-1.6.6.4/ext/nokogiri/gem_make.out 

nokogiri のインストールで失敗した模様。この記事が詳しいので記事にある通りのことをやってみたがダメ。違う事象か。

要は nokogiri がインストールされていればいいんだろうと考えて、

gem install nokogiri -- --use-system-libraries=true --with-xml2-include=/usr/include/libxml2/

を実行してみる。が、玉砕。

rvm get stable

gem update --system

でそれぞれ最新化してみたものの変わりなし。通勤電車の中で焦り始める。この時点で iPhone からインストール作業を実施している。ネットでいろいろ調べた結果、この記事に書かれた内容でインストールが完了した。

railties 問題

インストールが完了したので、お約束のコマンドを実行。

rails -v

出たのがこのエラー。

[ec2-user : /home/ec2-user]$ rails -v /usr/share/ruby/vendor_ruby/2.0/rubygems/dependency.rb:296:in `to_specs': Could not find 'railties' (>= 0) among 11 total gem(s) (Gem::LoadError) from /usr/share/ruby/vendor_ruby/2.0/rubygems/dependency.rb:307:in `to_spec' from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_gem.rb:47:in `gem' from /usr/local/bin/rails:22:in 

エラーメッセージには railties が見つからないと書かれているので、

gem install railties

を実行したらこのエラーは解消。なぜかバージョンは 4.2.5 になっていたが気にしないことにした。

bundle 問題

参考書籍に従ってアプリケーションの生成を実施。その後、bundle install を実行したらエラー。

ec2-user : /home/ec2-user/rails/asagao]$ bundle install /usr/share/ruby/vendor_ruby/2.0/rubygems/dependency.rb:296:in `to_specs': Could not find 'bundler' (>= 0) among 27 total gem(s) (Gem::LoadError) from /usr/share/ruby/vendor_ruby/2.0/rubygems/dependency.rb:307:in `to_spec' from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_gem.rb:47:in `gem' from /usr/local/bin/bundle:22:in `<main>' 

これは bundle が入っていないようなので入れることにした。

gem install bundle

これで解決。

execjs 問題

次々と目の前にハードルが立ちはだかりますが、次は execjs 問題。上のエラーで bundle install まで完了したのでとりあえず WEBrick を起動して http://localhost:3000 へアクセスしてみましょうという通過儀礼。rails s が起動しない。

[ec2-user : /home/ec2-user/rails/asagao]$ rails s /home/ec2-user/.rvm/gems/ruby-2.2.1/gems/execjs-2.6.0/lib/execjs/runtimes.rb:48:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable) 

JavaScript を実行する環境がないらしい。この記事で解決した。

外部からのアクセス

無事 WEBrick が起動したものの、iPhone の Safari からアクセスできないのでファイヤーウォール系の問題かと思っていたら、

rails s --bind=0.0.0.0

とやることで外部からアクセス完了。これで Rails を使った開発を iPhone から行う準備が整った。

21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?