スマホでirb！ Androidローカルで「rails s」してみよう

![Screenshot_20171222-213035.png](https://qiita-image-store.s3.amazonaws.com/0/169644/5b453bd9-5f6b-f4dc-40df-9a79689d0acf.png)
`▲YOGA BOOK Android上で動くRails5.1.2`
# 皆さんは普段どんなデバイスで開発してますか？？
[TECH::CAMP AdventCalendar 2017](https://qiita.com/advent-calendar/2017/tech-camp)最終日です(私なんかが最終日でいいんだろうか…)。
RubyないしRailsを使って普段開発している人は、恐らくMacを使ってらっしゃる方が多いのではないでしょうか。私もそうです。中にはLinuxで開発してらっしゃる方もいると思います。自分のやりやすい環境で開発するのが一番です。
しかし、パソコンって基本的に持ち歩くには重いですよね。もし手のひらの中にRubyの開発環境があったら、なんだかワクワクしませんか？
# AndroidローカルでRails環境構築
そう思ったのもつかの間、今回Android **だけ** でRails開発が出来る環境を整えてみたので、その方法を書いていきます。
# 概要
- Rubyバージョン
  - 2.4.3
- Railsバージョン
  - 5.1.4
- ターミナル
  - [Termux](https://termux.com/)
- Androidバージョン
  - 7.1.1
- 筆者が試した機種
  - Lenovo YOGA BOOK
  - Huawei Mate 9

# 実際にやってみよう
まずは自身の持つAndroidスマートフォン・タブレットに[Termux](https://termux.com)というアプリをインストールします。このアプリが今回の環境構築の鍵となります。
## Termuxとは何なのか
AndroidがLinuxベースで魔改造されたOSであることは一般常識の範囲でしょう。
[Termux](https://termux.com)は、そのAndroidでGNU/LinuxのCUI環境を提供してくれる[PlayStore](https://play.google.com/store/apps/details?id=com.termux&hl=ja)アプリです。Root無しでも結構なことができます。
こちらのアプリをインストールして起動するとデフォルトでbash shellが起動します。

```
$ bash -version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-android)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
```

## パッケージ管理ツールを導入する
Termux上ではDebian系Linuxで有名な`apt`というパッケージ管理ツールが利用できます。
こちらをアップデートしてあげましょう。

```
$ apt update
$ apt upgrade
```
## Rubyをインストールしよう
Termuxにはaptとは別にデフォルトでパッケージを管理するシステムが備わっています。
Termux上で以下のコマンドを実行してみましょう。

```
$ pkg install ruby
```
これでrubyが無事インストールできたと思います。

```Termux.rb
$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-linux-android]
$ irb
irb(main):001:0> puts "Hello Ruby on Android !"
Hello Ruby on Android !
=> nil
irb(main):002:0> 5 * 3
=> 15
```
もちろん`irb`も動きます！
## Railsに必要なGem/Packageを導入していこう
Railsを動かすには様々なGemやPackageが必要になってきます。基本は`$ gem install gemname`でインストールできます。ただ、環境が環境なこともあり、ネイティブビルドに失敗するGemが多くありますので、それを今回Termuxライブラリの力を借りて一つ一つインストールしていきます。

### 入るGemは次々と入れていきましょう
そのまま`gem install`できるものは、次々と入れていきます。

```
$ gem install rake
$ gem install atomic
$ gem install bundler
$ gem install puma
$ gem install spring
$ gem install spring-watcher-listen
$ gem install listen
$ gem install pkg-config
$ gem install tzinfo
$ gem install tzinfo-data
```
### ライブラリが必要なGem
aptコマンドでTermuxで提供されているライブラリを入れる事ができます。ライブラリを入れれば、該当のGemをインストールできるようになります。

```
$ apt install clang make
$ apt install ruby-dev libxml2-dev libxslt-dev pkg-config make clang
$ gem install nokogiri -- --use-system-libraries
$ apt install libffi-dev
$ gem install ffi
$ apt install libsqlite-dev
$ gem install sqlite3
$ apt install openssh
$ pkg install postgresql postgresql-contrib postgresql-dev
$ gem install pg
$ pkg install git
```
### Ruby on railsをインストール
一通り準備が整ったらいよいよRailsをインストールしましょう

```
$ gem install rails
$ rails -v
Rails 5.1.4
```
## Railsアプリを作ってみよう
さあ、これでいつもみなさんが使っているRailsの開発環境がスマートフォンに入りました。若干物足りない部分はあるものの、最低限のRailsアプリであればこれで作る事ができます。

### rails new
いつも通り任意のディレクトリでRails newしましょう。今回は「demo-app」という名前のアプリを作ります。

```Termux.rb
$ rails new demo-app
# installが完了
$ cd demo-app
# Railsアプリのディレクトリに移動
```

### bundle install
こちらも、いつも通りbundle installしましょう。この時、Gemfileを編集したい場合はいつも通りviでvimを起動して編集できます。

```Termux.rb
$ vi Gemfile
# 任意で内容を編集
$ bundle install
# 正しくGemがインストールされていれば成功するはず。ここで失敗する場合はbundlerなどを入れ直してみましょう。
```

### rails s
そして、いつも通りRails serverすればアプリケーションが起動するはずです。

```Termux.rb
$ rails s
```
![Screenshot_20171222-212614.png](https://qiita-image-store.s3.amazonaws.com/0/169644/b51efffe-15dd-e40a-48ce-1bd1cc0b20b0.png)
特にポート番号は指定していないので、http://localhost:3000 でどのブラウザでもローカル接続できます。

# いつものスマホ、タブレットでRubyが動いてテンション上がる
今回はRails sしただけですが、スマホ上でRuby開発ができるのは魅力的です。もちろんこのTermuxにsshで接続してPC上で作業するといったことも可能なので、やりたい方は挑戦してみてください。
今後の課題として、平成29年12月25日現在MySQL2のgemの動かし方が確立していないようなので、そこらへんも発展していくと尚いいですね。

Rails以外でも、Ruby全般が動きそうなので、色々と夢が広がります。帰りの電車の中で気軽にRubyが触れるなんて最高ですね。

**尚、今回はかなり力技で環境構築したので、もっとスマートなやり方の意見絶賛募集中です。**
#### 参考
- [Rails on Termux](https://gist.github.com/paresharma/ec628a7fa5524a0ed18b227387d1b43a)
- [64bit 版で gem install ffi すると native extension のコンパイルに失敗する件の回避方法](http://d.hatena.ne.jp/msfukui/20140205/1391560822)
- [Rails does not work with ruby 2.4.0?](https://github.com/termux/termux-packages/issues/710)
- [Ruby on Rails on Android](https://mbobin.me/ruby/2017/02/25/ruby-on-rails-on-android.html)