この記事は、Elixir Advent Calendar 2022 1の25日目です
昨日は、@ohr486 さんで 「elixirの実行コマンドの実体を見る」でした
piacere です、ご覧いただいてありがとございます
Elixirは、2012~2015年まではRuby/Railsライクな開発環境やErlang資産利用、低レイテンシの恩恵でNW系システムやMMORPGでの利用が中心でしたが、2016年以降、Elixir独自のさまざまな発展を遂げ、現在ではどの言語よりもあらゆる領域を広くカバーする進化を叶えました
今回は、そんなElixirの現在をまとめ、来年以降の展開と、Elixirが奏でる未来志向でSF的、そしてサイバーパンクな世界についてお話した後、今、Elixirを始めるメリットについてもお伝えしようと思います
なお本コラムは、大ヒットした下記コラムの技術面の姉妹分みたいなコラムです
Elixir Advent Calendar 言語カテゴリ1位+全カテゴリ2位!
例年を遥かに超える盛り上がりを見せ、堂々のトップ獲得ッ!
https://qiita.com/advent-calendar/2022/elixir
https://qiita.com/advent-calendar/2022/ranking/feedbacks
https://qiita.com/advent-calendar/2022/ranking/feedbacks/categories/programming_languages
「なぜ私はElixirに賭けたか」のその先
私がElixirを始めるきっかけの1つである、下記の7年前に書かれたElixir界隈で超有名なコラムは、RubyとRailsがIT業界に与えた衝撃から始まるコラムですが、続けて、Rubyの課題と、Elixirの可能性について書かれています … ここから、私もElixirに賭け始めました
18年前に生まれたRailsは、あらゆる言語のWebフレームワークに影響を与え、各言語の主流Webフレームワークは現在、Railsそっくりになっています(Django/Flask、Laravel、Springなど)
一方、Elixirはどうなったかと言うと、Webフレームワーク「Phoenix」は2017年のPhoenix 1.3から脱Railsが始まり、2019年に登場した「LiveView」をPhoenix 1.5にて融合したあたりから、全く異なるものへと進化していきました
またWebフレームワーク以外にも、以降で述べる凄まじい進化が起こり、他言語と同等のカバー率も遂げつつ、同時に他言語には全く無いElixirらしい世界観も叶えています
賭けの結論だけを先に言えば、私は大勝利です
なお、私がElixirを本格的にプロダクション採用した2017年当時は、国内ではソシャゲ、海外ではコミュニケーションプラットフォームでの利用が主流でしたが、私は下図の通り、業務系WebやそのSPA、データ分析プラットフォーム、Web+IoT、エッジコンピューティング、3Dデータ処理と言った、現在のコンピューティングやDXを見据えた適用で賭け事をしましたが、この賭け事も功を奏し、大手企業向けの新規事業開発中心にウチの事業は2022年位から大幅なグロースを迎えています
2022年におけるElixir/Phoenixのエコシステム
Elixir/Phoenixは元々、下記のような多くの領域に定評がある言語/Webフレームワークです
- パイプと関数パターンマッチ、Enum/Map等による強力で柔軟なデータ処理
- BFF(Backend For Frontend)開発が容易
- エッジコンピューティング向きクラウド級機能群
- 強力な分散サポート(イミュータブルによる副作用の抑制、ノード間を跨げるプロセス分離)
- 大量データ処理に有利なStream遅延処理
- 言語に標準搭載のインメモリDB
- PJ単位でシステム間移動可能なマイクロサービス支援
- 耐障害性
- 大量アクセス下における低レイテンシ安定性能
- 超高速なWebSocket
- 少ないノード数で済むヘルシーなメモリ利用メカニズム
- ダウン率の低さ
これらにより、以下に示すようなシングルCPU性能向上の限界とプログラミング言語の限界、並行/分散コンピューティングの複雑さの除去、そしてそれらをプログラミングする人々の支援に応え続けています
2016年以降、そんなElixirに更なる先進的なコンピューティング機能と、WebAssemblyや機械学習、IoTといった他言語がカバー済みの機能、そしてElixirにしか無いような機能が、下記のように追加されていきました
- Flow/GenStage(2016年~) … 脱Erlangとも呼べるデータ処理をそのまま並行/並列処理に変換
- DynamicSupervisor/TaskSupervisor(2018年~) … 動的に生成されるプロセスを監視し、再起動
- Nerves(2016年~) … C/C++が独占していたIoT領域を覆すインパクトのIoTフレームワーク
- LiveView(2019年~) … サーバサイドだけでReact/Vue.jsと同じリアルタイムフロント(SPA)
- Broadway(2020年~) … SQS/Kafka/GCP PubSub等と接続して並行データ処理パイプライン
- then/tap(2021年~) … あらゆるコーディングをパイプの中で済ませられる
- ElixirDesktop(2021年~) … FlutterやReactNative同様、Android/iOS両ネイティブアプリ開発
- WasmEx(2021年~) … ElixirでWebAssemblyを動かす
- Nx/EXLA/TorchX(2020年~) … NumPy同等の高速行列処理+TensorFlowコンパイラ「XLA」駆動
- phx_gen_auth(2020年~) … コマンド1発で認証UIを追加できる
- Axon(2021年~) … Keras/PyTorch相当のスマートなディープラーニング開発が可能に
- AxonOnnx(2021年~) … Pythonで構築したONNXモデルをEixirで動かせる
- Evision(2021年~) … OpenCVが持つ豊富な画像処理をElixirでも網羅
- Livebook/Kino/VegaLite(2022年~) … JupyterNotebook/Colaboratoryを超えるWeb上開発UX
- Explorer(2022年~) … Pandas以上の直感的なデータ操作/処理性能、Nx行列もシームレスに操作
- Bumblebee(2022年~) … ElixirでStable DiffusionやBERT等の様々な先端ディープラーニング
- LiveViewNative(2022年~) … LiveViewを利用したプロダクション実証済のネイティブフロント
- FireFly(2023年?) … ElixirコードからWebAssemblyを直接生成可能となり、高速実行を叶える
例2.Livebookの個別パイプ処理実行On/Offデバッグ
「Elixirは並行/分散目的のマニアックな言語」と、2015年当時の認識からアップデートできていない方も結構いらっしゃるみたいですが、それは今のElixirに対しては偏った認識です
Elixirは、あらゆる領域を行うにしても強力で高性能、そして「データ中心のプログラミング」が重要性を増し続ける今、その概念のキャッチアップや育成も比較的容易な「次の世代のプログラミング言語」という位置付けが相応しいレベルに洗練されています
詳細を知りたい方は、上記の一部について紹介した下記コラムをご覧ください
また、多くの国内アルケミストがElixir Advent Calendar 2022で執筆したコラムを厳選した、下記リンク集もご参考ください(リンク集は2023年も引き続きアップデートしていきます)
■第1弾:Elixir/Phoenixで会員制サイト構築は瞬殺
|> ■第2弾:Elixir/LiveViewでJS不要のSPA+Tailwind UI
|> ■第3弾:Elixir/Livebook+NxでPythonっぽくAI・M
|> ■第4弾:ElixirDesktopスマホネイティブアプリ開発
|> ■第5弾:ElixirでWebAssemblyにトライ
|> ■第6弾:Elixir/WebSocketでVR/AR/メタバース連携
|> ■第7弾:Elixirでエッジコンピューティング開発
|> ■第8弾:Elixirで海外進出を目指す
|> ■第9弾:ElixirでWeb3/DID/DAO
|> ■第10弾:Elixir/Phoenix 1.7プレビュー
|> ■第11弾:Elixir Chip(専用プロセッサ)を作る
Elixirによって2023年から世界にもたらされる状況
2022年現在までの上述したElixirの発展により、2023年からは以下で述べるような状況が訪れ、様々な価値を世界にもたらすようになると想定しています
①他言語と同等の開発体験がElixirでも叶う(より良い形で)
上述したテクノロジーを使うことで、様々なプロダクション構築がElixirでも可能となりました
後発の優位性もあり、幾つかの部分において、Elixirには多くのメリットがあります
-
「ElixirDesktop」によるAndroid/iOS両ネイティブアプリ提供
- Kotlin+Swift両開発に伴う凄まじい工数負荷/調達困難を解決
- FlutterやReactNativeには出来ない、LiveViewを中核に敷いたWeb開発同等の開発体験
- MonacaやIonicと同じ開発スタイルをJavaScriptでは無くElixirで安全かつスピーディに
-
「LiveView」によるサーバサイドSPA提供
- Elixirでサーバサイド開発(SSR)するノリでリアルタイムフロント/SPAが開発できる
- Rails等と同様のMVC開発体験のまま、フロント開発をフォローできる
- 高速なe2eテストをやはりサーバサイドのまま叶える「LiveView test」も同封
- JavaScriptのような「全てが動かすまで分からない」が無い
- TypeScriptの厳密さによる苦しみ、一方で
Any
による抜け道が無いバランス - 「ElixirDesktop」によるスマホネイティブアプリ化への移行も容易
-
「Livebook」によるWeb上でのElixir開発/ビジュアライズ/[Smart]Cellの高生産性
- PythonのJupyterNotebook/Colaboratoryと同じWeb上開発がElixirでも実現されています
- Markdownやシーケンス図(Mermaid)といったドキュメンテーションも併記可能
- 複数ユーザによる共同開発/モブプログラミング
- コード断片が保存できるので、見習い層の育成や進捗記録にも便利
- グラフや画像、地図、リアルタイムデータ描画、アニメーションの表示もお手のもの
- [Smart]Cellを使えば、DB操作やグラフ生成、ディープラーニング生成もRPAのように叶う
-
「Nx+Axon+AxonOnnx+Evision+Explorer」による機械学習/ディープラーニングアプリ提供
- Elixirの優位性を活かして、分散型機械学習インフラ構築や、並行/並列処理化が容易
- Enumとパイプによる直感的で高度なデータ処理で構築できる
- 関数パターンマッチでデータ処理関数のパターンを書き分けやすい
- 学習結果がモデルに梱包されず、ステートとして返るので複数モデル操作が扱いやすい
- 「Axon」は、後発としてKerasやPyTorch等の「いいとこどり」をしている
- Pythonのように機械学習/ディープラーニング以外の部分で性能劣化する心配がほぼ無い
- 「Bumblebee」による先端ディープラーニングモデルを用いたアプリの提供
- 「Flow」や「FireFly」、「LiveViewNative」によるイージーな性能向上
②Elixirにしか出来ないことが既に結構ある
上記①の中には、Elixirにしか出来ないことが存在し、そこに元々、Elixir/Phoenixに定評がある下記との組み合わせを考えていくと、他言語では困難な領域をElixirはカバーしていくこととなります
- パイプと関数パターンマッチ、Enum/Map等による強力で柔軟なデータ処理
- BFF(Backend For Frontend)開発が容易
- エッジコンピューティング向きクラウド級機能群
- 強力な分散サポート(イミュータブルによる副作用の抑制、ノード間を跨げるプロセス分離)
- 大量データ処理に有利なStream遅延処理
- 言語に標準搭載のインメモリDB
- PJ単位でシステム間移動可能なマイクロサービス支援
- 耐障害性
- 大量アクセス下における低レイテンシ安定性能
- 超高速なWebSocket
- 少ないノード数で済むヘルシーなメモリ利用メカニズム
- ダウン率の低さ
これらの組み合わせの中で、強調したいのは、下記4つの組み合わせです
-
a)WebとAndroid/iOSスマホネイティブアプリの完全同時開発(しかも軽量)
- 「LiveView」と、LiveViewをベースとした「ElixirDesktop」を活用
- フロントエンジニアやスマホエンジニアが単独で存在しない世界
- サーバエンジニアにとって気軽にフロントとスマホに入門できる、またとない機会
- 全てがLiveViewで共有され、もはやサーバ/フロントを分ける必要性も無くなっている
- 端末保持データもElixir標準搭載のインメモリDB(ETS、DETS)が利用可能でカンタン
- スマホ側処理をクラウドやエッジサーバに逃がすことも容易に実現
- プロセス単位で処理を分割していれば、動的にスマホ側処理を逃がすことも可能
-
b)クラウド/エッジサーバ/エッジ(IoT)の間をプロセスが移動するNW全体最適化
- 「エッジコンピューティング向きクラウド級機能群」と「Nerves IoT」を活用
- 自律的で非中央集権(Decentralized)なシステムがシングルソースで叶う
- データ転送量やマシン負荷に合わせて、自動的にデータパイプラインを再構成
- IoTデバイスとクラウド、エッジサーバの間で負荷をプロセス単位でバランシング
- AI・MLとの組み合わせにより、自律型エージェントがNW上を有機的に移動する
-
c)システム全体が高性能で、いつでも並行/分散できる機械学習/ディープラーニング
- Elixirなら、機械学習/ディープラーニング以外の領域を性能劣化させずに済む
- 更にElixirの得意分野である並行/分散を機械学習/ディープラーニングに適用
- データ前処理のような高負荷処理も、Elixirには負荷分散や並行化、遅延化が容易
- 複数の機械学習モデルをPJ単位で分割し、マイクロサービス化して使いやすく
- WebSocketやLiveViewで接続できるリアルタイムAI・MLも気軽に提供できる
- Livebookを並行/分散機械学習インフラのコントロールパネルとして活用
- DAOとの組み合わせで、意思決定/資金調達/資金分配すら
-
d)「データ変換」と「非データ」をコントロールするデータプラットフォーム構築
- VR/AR/IoTの全てからデータ収容できるエッジサーバを簡単に構築できる
- 「Explorer」と「Nx」、「EXLA」により、GPUをデータ処理エンジンに化けさせる
- 非データ指向:元データだけ保持し、いつでもデータ変換で希望するデータを取得可に
- データ流量と処理負荷傾向から、どのコンピュートエンジンを使うかを自動切り替え
- データマートや静的コンテンツを生成するためのオンバッチを気軽にビルドできる
- 上記特性から、JAMStack的な静的コンテンツ生成にも利用できる
- データやデータ傾向・統計のビジュアライズを数クリックで可能に
これらをクラウドインフラ無しでも構築できるのが、Elixirのポテンシャルと捉えています
③VR/AR/メタバースとデジタルツインにEixirのパワーを
今後、叶えようと考えている領域は、「VR/AR/メタバース」と「デジタルツイン」に対するEixirのパワーの提供です
ちなみに昨年は「メタバース元年」だと言われていましたが、以下のようなハードルにより、なかなか発展が進んでいない状況であることが分かっています
- ⅰ)VRとAR、そして現実を接続する技術を提供できるエンジニアが少ない
- ⅱ)「VR/AR/メタバース」と「デジタルツイン」を生活や仕事に活かせる企画者が少ない
- ⅲ)技術に裏付けられた「現実に囚われない世界観」を構築できる経営者が少ない
■ 技術面:VR/AR/現実をElixirによって接続し、1つの世界として扱う
上記ⅰ)は、まさにElixirが得意とする領域であり、2020年以降、私達は他社向けプロダクトとして提供してきました
下記は、その一例としての現実とデジタルを融合するtoB ARネイティブアプリです(この技術は来年コラム公開予定)
こうした「メタバースと現実/IoTを繋ぐ」コンセプトの元、素晴らしいユーティリティ/ユーザビリティをもたらすことは、私達にとってすでにノンフィクションの領域なのです
具体的な技術ノウハウ(VR内のオブジェクトの位置情報とAR/現実の位置情報をシンクロする技術など)については、下記ElixirコミュニティイベントでのLTやコラム等でも発信しています
また、昨年まではElixir AI・MLの土台たる「Axon」「AxonOnnx」「Bumblebee」「Evision」「Explorer」が整っていなかったため、大々的にはプッシュできなかったのですが、今年、必要なものが一通り揃ったので、自信を持ってプッシュできます
AI・MLやデータサイエンスの本丸は、VR/AR/メタバースと、エッジコンピューティング/IoTでデジタル化された現実 … つまり「デジタルツイン」です
そして、デジタルツインを真に支えられる技術は、低レイテンシや並行・分散、エッジ/エッジサーバ/クラウドの間を自由行き来できる特性をすでに叶えているElixirだけだと確信しています
つまり、AI・MLやデータサイエンスと、VR/AR/メタバース、それらを裏支えするエッジコンピューティング/IoTの全てをElixirで賄うことが、理想的な組み合わせでは無いかと私は考えています
更に、デジタルツインを叶える一翼である「世界中のスマホをGPUファームとして構成する」というコンセプトや「ネイバーフッドコンピューティング」というコンセプトを下記コラムで提唱していますが、これもElixirの大きなコンピューティング領域になると想定しています
2023年は、これらSF的でサイバーパンクな技術コンテンツ提供や発信を増やしていきたいと考えています
■ 企画・構想面:現実とデジタル/バーチャルが融合する世界観を描く
上記ⅱ)とⅲ)については、先月、以下の総務省主催の登壇「本当のDXはSF的で未来志向、そしてサイバーパンク」にてお話させていただいた、「課題」と「戦略」から短時間でインバスケット導出するノウハウがあります
また、自治体向けに「PoliPoli.Gov」という意見交換プラットフォームを通じて、下記の通り、具合的なアイデアとして提案を公開しています
まちづくり①:都市データのAPI開放とエンジニア移住促進、「都市運営の民営化・市民化」
|> まちづくり②:デジタルの口コミ … AR/MRで都市の埋没価値を共有し、ミニコミュニティを乱立
|> まちづくり③:市民を「都市の株主」に変える … VRで街を改造 → ARで現実に投影 → 都市を皆で作る
|> まちづくり④:製造業や建築・土木業、IT業のXR化を他都市よりも先駆ける
|> 高齢者介護①:居宅ケアワーカーのギグワーク化アプリ
|> 高齢者介護②:VR/ARによるケアワーカー遠隔訓練
|> 介護効率化①:高齢者観光・外出時の行動・体調センサー+ARグラスによる省人化/外出体験向上
|> 空港活用①:欧州と24時間行き来でき、街に「空飛ぶタクシー」で移動できるハイテクシティ構想
これら企画の元となるコラムを下記3本ほど公開しています
加えて、弊社提供の「VR/AR/メタバース企画コンサルティング」でも解決できる領域ですが、こちらは割愛します
全ての準備が揃ったElixirを今から始めるメリット
今年、Elixirには、全ての準備が揃った … と私は認識しており、Elixirを始めるには、今がベストです
それは技術面だけで無く、コミュニティ面でも、2017年にfukuoka.exを立ち上げて以来、数千人を超えるイベント参加者との出会いを通じ、日本全国各地のElixirコミュニティは28箇所に達し、毎月のイベントは常に20本以上もある、巨大だけど非中央集権(Decentralized)に分散化されたモダンな技術コミュニティへと成長も遂げています
https://elixir-jp-calendar.fly.dev/
昨年後半に立ち上げたElixir入門者向けDiscord「elixirと見習い錬金術師」も、以下カテゴリ全てが入門者向けです
- 🐣|elixir入門(piyopiyo.ex) … Elixirそのものの入門者向けチャンネル
- 📶|elixirスマホ開発(elixirdesktop) … Android/iOS両スマホネイティブアプリ開発
- 🐔|elixirでspa開発(liveview) … サーバサイドでSPAが書けるElixir
- 📕|elixirで機械学習(nx+axon) … ElixirでAI・ML・DLが開発できる
ご興味ある方は、下記リンクからお気軽にjoinしてください(ROM専も歓迎です)
Discordでどんな活動をしているかの詳細は、 @nako_sleep_9h さんがコラム化してくれているので、コチラをご覧ください
改めて「Elixirの強み」とは?
「Elixirの強み」についても、下記コラムにまとめました
下記コラムは、機械学習の文脈の中で書いていますが、機械学習以外のWeb開発やIoT開発などにも適用できる内容なので、是非ご覧ください
この中でも、言語特性以外の以下2点が魅力的でしょう
コンピューティングは根本的な変革を経験し始めている
Elixirが、どのような状況にあり、これからどんな未来を叶えていくかについて、今回コラムから伝われば幸いです
今後、十数年に渡るコンピューティングの進化を、Elixirは間違いなく支えていく存在でしょう
Elixirコミュニティに集まる方々も、こうした可能性やポテンシャルをElixirがもたらす未来を見て、明るさを持って活動しているように見えます
私自身は、日本のIT業界を適正な形へとディスラプトするようなElixirプロダクトを通して、Elixirと共に世界をリードする有数の国として、この国をリビルドしていく未来を担いたいと考えています
同時に、世界に向けて、Elixirプロダクトをリリースしていく最初の年にもしたいと思います
もし、こんな私とご一緒することにご興味あれば、上記Discordか、私のTwitterのDM(赤囲み)にて、私まで気軽に声を掛けてください
オマケ①:Elixirコミュ群と毎月20本以上のElixirイベント
アクティブなコミュニティは以下の通りです
1. piyopiyo.ex : Hands-on community for beginners to Elixir (実践型Elixir入門コミュニティ)
5. LiveView JP : LiveView & AI・ML for beginners(LiveViewとElixir AI・MLの入門コミュニティ)
6. オカザキリンビーム : Okazaki local Elixir Community (岡崎Elixirコミュニティ)
11. kochi.ex : Kochi local Elixir Community (高知Elixirコミュニティ)
12. Neos.ex : A place to connecting Elixir and NeosVR to create a new world
各コミュニティの詳細は、「Elixirコミュニティの歩き方 -国内オンライン編-」をご覧ください
毎月20本以上、開催されるElixirイベントの開催予定は、「Elixirイベントカレンダー」にてチェックしてください
オマケ②:2/21(火) LiveView JP:はじめてのデータ処理
来週2/21(火)19:30から、LiveView JPにて「はじめてのデータ処理…Explorerもしくは素のElixirで」というテーマで開催するので、今回の内容を見て、Elixirの出来ることを具体的に知りたいと感じた方は、ぜひ遊びに来てください
LiveView JPも、先ほど紹介したDiscordで交流を行っています
オマケ③:2/17(金)13時、Elixir先端AI・MLセミナー開催
明後日2/17(金)の日中になりますが、下記のような社会実装済のAI・MLの紹介と、それらのメカニズムを解説し、実際に実装するセミナーを行います(開催は高知会場 & オンライン)
- お絵描きAI
- 消しゴムマジック
- 物体検知
- 文字識別
- 翻訳
- ChatGPT
申込みがメール or FAXとクラシックですが、内容は先端ですw
なお早いですが、今年最後の外部主催登壇になる予定ですので、お見逃し無くッ