45
16

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 1 year has passed since last update.

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

Last updated at Posted at 2020-12-20

ElixirImp/fukuoka.ex/kokura.exLiveView JPpiacere です、ご覧いただいてありがとございます :bow:

昨夜、ラズパイでElixir/Nervesを動かすコラムを書いた後、

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

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

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

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

:ocean::ocean::ocean: Advent Calendar、fukuoka.ex1位、Elixir2位達成ヽ(=´▽`=)ノ :ocean::ocean::ocean:

fukuoka.ex Advent Calendar、Webテクノロジーカテゴリで堂々1位 … 各コラムぜひお読みください
https://qiita.com/advent-calendar/2020/fukuokaex
image.png

そして、プログラミング言語カテゴリは、1位がRust、2位がElixir、3位がGoとモダン言語揃い踏みでのトップ3、熱いネー:laughing:
https://qiita.com/advent-calendar/2020/elixir
image.png

基本となる思考パターン

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

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

という考え方です

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

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

https://elixir-lang.org/install.html
image.png

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(国際宇宙ステーション)に行き、Ubuntu創生に目覚めたマーク・シャトルワースにみんな感謝しましょう … 彼は我々人類の頭痛のタネを、見事に取り払ってくれました
image.png

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

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

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

UserLAnd
https://play.google.com/store/apps/details?id=tech.ula&hl=ja&gl=US
image.png

スマホの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

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

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

んん?Erlang 20.2.2?

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

Release v1.10.0 · elixir-lang/elixir (Elixir 1.10はOTP 21以降が対象)
https://github.com/elixir-lang/elixir/releases/tag/v1.10.0

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

Release v1.9.4 · elixir-lang/elixir
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が入ってしまう)

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

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

最後に

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

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

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

余談

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

「WindowsでElixirしてるお前に言われたくない!」

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

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

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

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

image

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

image.pngimage.png にて、どうぞ応援よろしくお願いします:bow:

45
16
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
45
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?