AndroidスマホでElixir／Phoenix起動っ！…ほいでUbuntuこそが世界最強のコンテナ（プリコンパイルドElixir導入付き）

[ElixirImp／fukuoka.ex／kokura.ex](https://fukuokaex.connpass.com)と[LiveView JP](https://liveviewjp.connpass.com/)の [piacere](https://twitter.com/piacere_ex) です、ご覧いただいてありがとございます :bow:

昨夜、[ラズパイでElixir／Nervesを動かすコラム](https://qiita.com/piacerex/items/98e1bde676263f5f9f81)を書いた後、

<b>「もしかしたら、同じエッジAndroidスマホでも、Elixirって動かせるんじゃね？」</b>

ってふと思い立ち、攻略していったところ、成功しました:confetti_ball:

今回は、そのノウハウをシェアします（あと、ひさびさに軽いノリです）

内容が、面白かったり、役に立ったら、「LGTM」よろしくお願いします :wink:

<h3>:ocean::ocean::ocean: Advent Calendar、fukuoka.ex1位、Elixir2位達成ヽ(=´▽`=)ﾉ :ocean::ocean::ocean:</h3>

fukuoka.ex Advent Calendar、Webテクノロジーカテゴリで堂々1位 … 各コラムぜひお読みください
https://qiita.com/advent-calendar/2020/fukuokaex
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/8a22a81f-2917-6072-10bd-525e0fc24b75.png)](https://qiita.com/advent-calendar/2020/neosvr_reso)

そして、プログラミング言語カテゴリは、1位がRust、2位がElixir、3位がGoとモダン言語揃い踏みでのトップ3、熱いネー:laughing:
https://qiita.com/advent-calendar/2020/elixir
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/ea185203-c525-c778-dc10-6d2ecc391616.png)](https://qiita.com/advent-calendar/2020/elixir)

# 基本となる思考パターン

GCPやAWS、ラズパイの全てに共通する思考パターンが、

### Ubuntuが動くプラットフォームなら、Elixirはカンタンに動かせる</b>

という考え方です

これはAndroidスマホに関しても同様で、AndroidでUbuntuが動けば、Elixirの可能性が拓くワケです

そして、この背景にあるのが、Elixir公式サイトに書いているUbuntu版Elixirインストール記載です（なお日本語版サイトは情報が古いので、参考にしないようご注意ください … 早くアップデートして欲しい…）

https://elixir-lang.org/install.html
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/8f00f36e-2855-299a-b0a6-7eec8b4669f8.png)](https://elixir-lang.org/install.html)

CentOS等のUbuntu以外のLinuxで、ここの手順でのElixirインストールをされた方はご存知かもですが、

### Ubuntu以外のLinuxは、最新版のElixirが入らない（それもかなり古い…）

という困った状況なのですが、それがUbuntuの手順であれば、ほとんどタイムラグ無く、確実に最新版が入ります

また、asdf含むソースビルドでの最新版Elixirインストールは、コマンドの暗記がそもそも不可能で、面倒臭く、なんか環境が荒れた気分にもさせられるビルドツール群の導入※がツキモノなんですが、Ubuntuなら、それらも一切不要です　※注：そういうのお好きであれば止める理由は無いです

ちなみに、docker pullだと環境構築は統一できますが、メモリ食いなので、せっかくのElixir／Phoenixの軽量さ／低メモリ消費が台無しの部分はあります（Phoenixで大量アクセスを捌くときは、nginxすらムダにメモリ食う邪魔者なんで…）

なので、お金に任せて雑に展開したり、グロースの可能性があまり無いようなサービスならさておき、グロース余地が高い成長性あるサービスや、大量アクセスを扱うシステムで、GCPやAWS含む、Linux系本番環境作るときは、問答無用でUbuntuにしておけば、面倒事は一切無くなり、気持ちスッキリです

スケールアウトを楽にしたいなら、KubernetesでOKです

要するに、言いたいことは、

### Ubuntuこそが、世界最強のコンテナです

[宇宙空間を公転軌道するISS（国際宇宙ステーション）](https://xtech.nikkei.com/dm/article/COLUMN/20131023/310836/)に行き、Ubuntu創生に目覚めたマーク・シャトルワースにみんな感謝しましょう … 彼は我々人類の頭痛のタネを、見事に取り払ってくれました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/dc3e5ba4-b193-8b4f-02d2-3b23cd25b944.png)

開発環境と本番環境を統一し、バージョン整合性に後で泣きたくないガチ派なら、macノートみたいな似て非なるものを使ってる場合では無く、Ubuntuノートに今すぐしましょう（特に、mix releaseやDistilleryでバイナリビルドリリースしたいんだ勢は絶対に）:wink:

# どうやってAndroidスマホでUbuntuを動かすか？

ズバリ、「UserLAnd」というアプリで一発解決です

<b>UserLAnd</b>
https://play.google.com/store/apps/details?id=tech.ula&hl=ja&gl=US
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/406275ed-6ece-a733-bf40-82e54fc57d3d.png)](https://play.google.com/store/apps/details?id=tech.ula&hl=ja&gl=US)

スマホのGooglePlayで「UserLAnd」と検索し、インストールしたら、ユーザ登録などをするだけで、UbuntuがAndroidスマホ上で使えます

# AndroidスマホでUbuntu動いた後は？

## まずはElixirのインストール

それがAndroidスマホだろうが、タダのUbuntuです

上記した公式のElixirインストールを行ってください …

### … と言いたいところだけど、esl-erlangのインストールでコケた

```
$ sudo apt install esl-erlang
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package esl-erlang is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source   
E: Package 'esl-erlang' has no installation candidate
```

まぁ、ここはおとなしく、esl無しのErlangを入れましょう

```
$ sudo apt install erlang
```

erlを起動した実機は、こんな感じです（ちなみに私のスマホは、フリスクサイズのラズパイZero WHより一回り大きいくらいの世界最小サイズです）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/429c6b4f-9208-f69c-c82c-1c217614c15f.png)

Erlangの細かいバージョンを確認します

```
$ sudo apt show erlang
Package: erlang
Version: 1:20.2.2+dfsg-1ubuntu2
…
```

### んん？Erlang 20.2.2？

… Elixir 1.10以降が使えないでは無いか …

<b>Release v1.10.0 · elixir-lang/elixir （Elixir 1.10はOTP 21以降が対象）</b>
https://github.com/elixir-lang/elixir/releases/tag/v1.10.0

ま、たいした差では無いので、aptで入れられる最新版は早々に諦めて、Elixir 1.9系列の最も新しいプリコンパイルドバイナリをダウンロードしてインストールします

<b>Release v1.9.4 · elixir-lang/elixir</b>
https://github.com/elixir-lang/elixir/releases/tag/v1.9.4

```
$ mkdir elixir
$ cd elixir
$ sudo apt install wget unzip
$ wget https://github.com/elixir-lang/elixir/releases/download/v1.9.4/Precompiled.zip
$ unzip Precompiled.zip
$ sudo cp -a * /usr/local
```

iexを起動してみましょう

```
$ iex
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:8:6] [ds:8:6:10] [async-threads:10] 
[kernel-poll:false]
warning: the VM is running with native name encoding of latin1 which may cause Elixir to 
malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be 
verified by running "locale" in your shell)
Interactive Elixir (1.9.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
```

無事、起動し、Elixir 1.9.4がインストールされていることも確認できました

あとは、いつものElixirです … 存分にお楽しみください

## 次にPhoenixのインストール

この環境に、Phoneix 1.5.7自体はインストールできるけど、OTP 21前提のものがゴロゴロ入ってる（cowboy 2.8
LiveView、他にもあるかも）ので、LiveViewがバインドされていないPhoneix 1.4系の最新版を入れて、Phoenix PJを作成します

```
$ mix archive.install hex phx_new 1.4.17
$ mix phx.new sample --no-ecto --no-webpack
```

それから、cowboyのバージョンを2.7.0に固定します（固定しないとPhoneix 1.4.17でもcowboy 2.8が入ってしまう）

```elixir:mix.exs
…
  defp deps do
    [
      {:cowboy, "== 2.7.0"},
      {:phoenix, "~> 1.5.4"},
…
```

その後、deps.getし直す前に、deps.unlockでバージョンロックを解除し、deps.getし、Phoenixを起動します

```
$ mix deps.unlock --all
$ mix deps.get
$ mix phx.server
```

ここまで出来たら、AndroidスマホのPhoenixを、PCや他スマホのブラウザで見れます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/e5d2e923-fe36-40c7-448d-62e839de33cf.png)

なお、スマホのグローバルIPは、ブロックされてて見れない可能性が高いので、無線LANなどに繋いで、同一無線LANセグメント内からだと見れます

# 最後に

とうとうスマホでElixir／Phoenixが動いてしまいました

これで、エッジ／エッジサーバ／クラウドを全てElixirにする野望に、スマホも仲間入りで、ますますエキサイティングなElixirライフが送れるというものです

それと、これでもうノートPCを持ち歩かなくても、スマホさえ持っていけば、Web開発可能になりますね（Bluetoothキーボード無いと厳しいけど）

# 余談

冒頭「Ubuntuノートに今すぐしましょう」の文脈からの続き

<b>「WindowsでElixirしてるお前に言われたくない！」</b>

…え？…うん、まぁ、そーだよね…

やー、だって私、MS信者歴38年の筋金入りですし、ElixirもWindows版は、Ubuntuと双璧を成す、常に最新バージョンがキレイに入るディストリ（？）だから難儀しないし

そもそも、「Windowsだとブチ当たる困難に立ち向かい、全て乗り越える」というドMプレイというか、縛りプレイに燃えてる節すら …

… つまり、言いたいことは、こういうことです:information_desk_person_tone1:

![image](https://scontent.ffuk2-1.fna.fbcdn.net/v/t1.0-9/131983242_736204840331506_349895382868798265_n.jpg?_nc_cat=111&ccb=2&_nc_sid=730e14&_nc_ohc=4OUYFb7dTJAAX_vdhkz&_nc_ht=scontent.ffuk2-1.fna&oh=2afa1083df8c109a7328659627534c06&oe=60054C45)

# p.s.このコラムが、面白かったり、役に立ったら…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/67568d54-6584-ad33-77c7-b3b3afe70287.png) や ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155423/f5b819ef-d655-ef72-294c-b1a9d2c5b563.png) にて、どうぞ応援よろしくお願いします:bow: