この記事は「Elixir Advent Calendar 2021」の25日目です
昨日は、私の「⑤Elixirユーザ認証ライブラリ『phx_gen_auth』の本番向け改造ポイント:コントローラ内/テンプレート内のメッセージのカスタマイズ」でした
piacere です、ご覧いただいてありがとございます
来年、生誕10周年を迎えるElixirと周辺ライブラリが、これまでに無かった進化を遂げ始めています
それらに軽く触れた後、自信のキャリアを振り返り、語ってみます
Elixirの今後に激震をもたらす大変動
昨年と今年は、Elixirにとって、良い意味で「激震」の年で、これまで無かった下記のようなテクノロジーが急に「足並み揃えてきた」感があります
「Elixir生誕10周年」を迎えるにあたり、Elixir創始者であるJosé Valimや、Phoenix創始者であるChris McCord、もしくは関連プロダクトのコミッター達から並々ならぬ気合いを感じます
そして気付けば、Elixirは、低レイテンシやNWサーバ向け、分散、高い耐障害性などのErlang由来の属性に留まらない面積をかなり広げ、今となっては全く別物のような進化の面積で占めつつあります(とは言え、この傾向は2016年のFlowあたりから既に始まっていた流れの延長で、私がfukuoka.ex発足時にゲーム分野やNW分野で無い領域に集中させた背景でもあります)
「Nx」 … 行列操作、「Axon」 … ニューラルネットワーク・DL
- AI・MLライブラリが初お目見えし、GPUを駆動できる環境がElixirに整いました
- Nxをベースとしたニューラルネットワークライブラリ「Axon」もリリースされました
- これらを土台としたディープラーニング環境が遂にElixirでも実現されます
「Livebook」 … Web上でElixir開発ができるように
- JupyterNotebookやColaboratoryと同じフィーリングの開発がElixirでも叶いました
- Livebook専用のグラフ描画ライブラリ「VegaLite」で、高度なグラフ作成が可能になりました
- Livebook専用のレンダラー「Kino」で、画像/データテーブル/グラフ連携が扱いやすく
- これまでElixirのことを知らなかった層からもLivebookのおかげで注目が集まると思います
「ElixirDesktop」 … ネイティブアプリフレームワーク
- FlutterのようなAndroid/iOS両対応スマホネイティブアプリの構築が可能
- ElectronのようなPC用デスクトップアプリの構築が可能
- ここがElixir界隈で熱い分野になる気がします
「Phoenix 1.6」 … SSR WebFWからLiveView中心のSPA WebFWへと進化
- リアルタイムフロントフレームワーク「LiveView」がPhoenixネイティブとなり、JavaScript無のWeb開発が加速
- 従来のSSR(Server Side Rendering)も併用できるが、SPA(Single Page Application)開発がより強化された
- ReactやVue.jsを別立てせずともサーバサイドロジックと共にリアルタイムフロントがコーディングできる
- 認証ライブラリ「phx_gen_auth」も標準搭載(別ライブラリだったものを取り込み)
- 認証を含むWebアプリ開発をコマンド1発でScaffoldできるため、ライブラリを入れる必要無く、数分で認証系を配備できる
- これに伴い、メールライブラリである「swoosh」も標準搭載され、ユーザ登録やPW変更の際のメール送信も梱包された
- 「Webpack」よりも数倍高速な「esbuild」の採用
- HEEx(ヒークスと読みます):ReactライクなLiveView記述構文の採用
- Tailwindも標準搭載される旨の発表
「Fly.io」 … Livebookに特化したElixir IaaS
ワンクリックでLivebookデプロイが完了したり、hexdocにあるサンプルコードを環境構築無にいきなり試せるUXは、凄まじく未来を感じさせます
https://fly.io/launch/livebook
ColaboratoryやKaggleと同じ体験がElixirでも可能となりました
自身の振り返り:開発キャリアを「Elixirの進化」に変換
今回のコラムをまとめるにあたり、自分のこれまでの40年間のプログラマライフを、下図マインドマップの通り、振り返りました
(図をクリックすると、マインドマップ作成直後のツイートにジャンプします)
私がElixirに出会ったきっかけは、下記インタビュー記事にある通り、2015年に超大規模案件での性能課題の解決を求めた結果に過ぎなかったのですが、今となっては、あらゆるコンピューティングとプログラミングをElixirで叶えたいという欲求が強くなりました
その結果、直近2年のプロダクション開発においては、リアルタイムフロントのためのReact/Vue.js、AI・MLのためのPython、VR/ARのためのUnity/C#を除くと、Elixirしか触っていないという状況が続いています
更にリアルタイムフロントは、LiveViewをプロダクション採用したことで、React/Vue.jsよりも優先的にLiveViewでの構築をしています
今後、NxやAxon、ElixirDesktop等に乗っかって、AI・MLやスマホ開発なども、PythonやFlutter等に頼ること無くプロダクション採用する方向へ拡げ、
「全てのソースコードをElixirで」
状態にしたい … 私自身の開発キャリアを、そうした「Elixirの進化」に注ぎ込む準備は整った … と考えています
なお、上記で説明し切れていないElixir関連の振り返りとしては、下記3点となります
- ①ElixirConf US 2021で海外登壇デビュー
- ②「Elixirスキルシート」を構築し、100名以上のデータ分析によりシートで人材評価可に
- ③自社および他社のElixir案件を多数展開し、50名オーバーの組織化に成功
①は、YouTubeに動画化され、更にノウハウをコラム化していますので、良ければ下記をご覧ください
②と③は、来年のLTで披露できたらと思います
それでは、マインドマップの大見出しに沿って、どのような活動を行っていくかについて触れていきます
VR/AR等の「メタバース」とElixir/Phoenixの接続
1つの大きな着想として、2020年から続けているVR/AR等、いわゆる「メタバース」が激動の時代へと突入し、そこにElixir/Phoenixを繋げる(コチラも2020年からR&Dを続けている)領域が、私の中では最もホットになっていきます
メタバースとElixir/PhoenixをWebSocketで接続する入門編コラムを昨年、書いています
NeosVR+Elixirで気軽にVR WebSocketプログラミング(VR |> AR投影アプリの裏側)
https://qiita.com/piacerex/items/4d8b23d99434d5a841ca
「NeosVR |> AR投影アプリ」が拓く生活と仕事:人はより「現実」へと出ていき、世界が変わったことを理解する
その先にあるのは、「VRとARがナチュラルに連携できて、行き来できる世界」です … 現実の人間とアバターは混在するし、コミュニケーションも取れると言った具合です
Microsoft Meshが、コレに近いことをやってきそうですが、HoloLensの高い価格がハードルとなって思ったより進まず、NrealLightのような安価で高性能な後発ARグラスがその脇を通過していく展開は全然あると感じていて、VR側はQuest 2やPico、AR側はNrealLightの組み合わせでマーケットに浸透していきやすいのでは無いかと捉えており、その構成用にプロダクションを進めています
コレが上手く行ったら、「Elixir」≒「メタバースのバックエンドを開発する言語」というイメージをプッシュしていきたいと考えています
Elixirの技術的な面で言えば、WebSocket(それをLiveViewも含む)利用時の24 x 365デプロイは、BlueGreenは条件付きで無いと使えないので、古き良きHotReloadを攻略する必要があり、今までBlueGreenあるから避けてたHotReloadに本腰入れないとなぁ … というのがあります
なお、最近のメタバース活動の方については、下記コラムをご参考ください(Elixirのことにも幾つか触れています)
NeosVRでは既にSFの世界が実現してて、現実の方が「オマケ」になりつつある ~先端VRの「アフターデジタル」な世界へようこそ~
https://qiita.com/piacerex/items/35980fb08662853d6663
メタバースから使われるAI・ML/データサイエンス
私はNx/Axonが出現する前から、ElixirでのAI・ML/データサイエンスを行ってきました … 下記コラムなどは、そういう領域の入り口について書いたものです
Elixir+Keras=手軽に高速な「データサイエンスプラットフォーム」 ~Flowでのマルチコア活用事例~
https://qiita.com/piacerex/items/c1af7b6ce472db83cff6
BigQueryを攻略する on Elixir:WebにBigQueryデータ表示
https://qiita.com/piacerex/items/4278fa2bdff33ea2cb8f
関数型でデータサイエンス#1:様々なデータをインプットする ※シリーズ物です
https://qiita.com/piacerex/items/f7077f0ff1b1a6c7a959
Elixir+KerasでKaggleタイタニック予測を解いてみた ~UIでデータサイエンスする前処理/MLプラットフォーム「Esuna」~
https://qiita.com/piacerex/items/ab0b32c521293d4ab38e
これらはPython同様、現実上のデータに対するAI・ML/データサイエンスの活用でしたが、VR/ARに対しても威力を発揮することが分かっています
なお、現実向けに開発したAI・MLは、ARでは、そのまま転用できるという点も見逃せません … 現実とメタバースのAI・ML開発の両立がココにはあります
更に、こうしたメタバースでは、データ取得が現実よりも遥かに容易なため、より高度なデータサイエンスが容易になりやすいという特徴もあります
むしろ私は、AI・ML/データサイエンスの本丸は、「現実」よりも「メタバース」なのでは無いかと思っています
世の中的には、「デジタルツイン」でのAI・ML/データサイエンスが数年前から叫ばれていますが、これもメタバースの1つであり、2019年に開催した「ElixirConf JP 2019」でデジタルツインのElixir化を提唱し、2020年以降、さまざまなエッジコンピューティング/IoTで案件利用をしてきましたが、来年以降はココにNx/Axonを投入し、Python無で構築していく可能性が生まれました
このようなメタバースでのAI・ML/データサイエンス活用のタイミングが、メタバース方面からも、Elixirツールチェーン方面からも同時に立ち上がっており、絶好のチャンスと捉えています
メタバースと連動するエッジコンピューティング/IoT
この2年間、3D点群処理プラットフォームにおいて、コンピューティングパワーとユーザを分散できるエッジコンピューティング開発を行ってきました
その結果は、スケールアップでは成し得ない凄まじい性能改善と、期待通りの分散作業環境が実現できました
そこで使ったElixirサイドのノウハウの入り口は、下記にコラムとして残していますが、一言で表現すれば、「エッジコンピューティング環境はクラウド設備が無く、そんな中でマトモにやっていける言語はElixirくらいのもの」という結論でしょうか
クラウドの外でエッジサーバを作るためのElixir技術スタック(+立てた予定を仲間と実現できるようになる思考パターン)
もしかしたら、世のエッジコンピューティングが思ったよりも発展していない理由(恐らくはその元となっている人材調達困難な状況)もソコに原因があり、Elixirは強い助けになるのでは無いかと推測しています
今後、取引先の方々ともお話して、上記案件の中身を公開していこうという流れになっていますので、どうぞ楽しみにしてください
そして、エッジコンピューティングに上述したAI・ML/データサイエンスが接続されると、かなり面白いことができます
エッジコンピューティング分散の先にある宇宙間通信
もともと、今の事業を立ち上げたきっかけは、エッジコンピューティング分散の先にある「宇宙間通信」を攻略するためだったりします
海外進出を始めた背景も、主にココにあります
そして、私がElixirに見た野望は、「分散」と「通信」だったりします
これらは大学で研究していた「分散OS」の延長にあるもので、Elixirにハマったのも、これを叶えることができる希望でもあったからなんです
その先にあるのは、地上での通信では無く、宇宙空間や衛星間、もしくは惑星間における通信です
昨年くらいから、NASAが上記通信全てのベースとなるDTN(Delay/Disruption Tolerant Networking)に関する記事を更新再開している(2012年くらいに止まって以来)ので、これまた良い機会が訪れてるんじゃ無いかと感じます
また、SpaceXやBlueOriginに代表される、いわゆる「ニュースペース」のプレイヤー達が、昨年はとても元気で、「オールドスペース」の牙城を崩しに行っている姿も、励みになります
まぁ、これは完全にポエムですが、電話交換機から始まったErlangの歴史が、Elixirで宇宙間通信へと昇華される … というのは、なかなかロマンあると思いませんか?
Webやスマホ、PCネイティブアプリとの付き合い方
FlutterやElectronのようなネイティブアプリがElixirで構築できるElixirDesktopが、Elixir界隈で熱い分野になると想定しています
ちなみに、ElixirDesktop以前は、こんなことをしていました
とは言え、LiveViewがリリースから2年経って、やっとプロダクション採用に耐え得る安定状態になったのと同様、ElixirDesktopもこなれるまでに今から2年近くはかかる予感がします
ですので、まずはプロダクションへの正式採用では無く、R&Dをスタートしたい(≒R&Dに付き合ってくれる顧客と開発したい)と考えています
なおZ世代は、メタバースよりも、こうした2Dへの訴求が強い点を、以前、分析しました
一口にZ世代と言っても、厳密にはその内訳として、生まれたときにはスマホが無い14~17歳以上は、現実に期待をあまり持っておらず距離を取る「Webネイティブ」であり、生まれる前からスマホがあった14~17歳未満は、むしろ現実とデジタルが上手く融合した「リアルデジタルネイティブ」と、より細分化されます
メタバースに期待が薄いのは、「Webネイティブ」で、これから社会人になる層です
この影響から、今後10年近くは、ブラウザやスマホでの2D UIがまだまだ強い状況が続くのでは無いかと思われます
ですが、こうした「レガシー」ばかり追っていては、未来を築くリードは出来ないので、後進を育成し、彼ら/彼女らに機会をパスしていく選択を昨年しました
現在、見習い層のPJ参画を積極的に行っていますが、それはWeb/スマホ以外の領域に、より私がコミットし、私の周りの良い腕を持っているエンジニア達にもWeb/スマホに留まらないコミットをしてもらいたい … というスタンスから来ています
上記した諸々をドライブする技術コミュニティ
現在、日本のElixirコミュニティは、28箇所もあります
毎月、合計21件以上の勉強会が定期開催され、これはどの言語よりも多い勉強会機会では無いでしょうか?
その中でも、下記のコミュニティ群は、本コラムで述べた諸々を叶える上で、重要なポジションになっていくと想定しています(いずれも、elixir.jpにSlackチャンネルがあります)
Neos.ex
LiveView JP
NervesJP
piyopiyo.ex
これら目的特化したコミュニティと、fukuoka.exやkokura.ex、オカザキリンビーム、autoracex、kochi.ex、tokyo.exのような従来Elixirコミュニティとのコラボレーションに、発展のカギのようなものがあると考えており、その促進のために、私がオーガナイズするElixirImpを活用していこうと思っています
ElixirImp
最後に:小さな頃に望んだ世界がやっと訪れた
8bitコンピュータ全盛の40年前、私はコンピュータの中に、こんな「小さな世界」を見ました
その15年後の2000年頃、「マトリックス」で想像した世界は叶いました … ただし、映画の中だけで …
小さな頃に想像したコンピュータの中の世界は、全く叶っておらず、私は正直、落胆しました
そこから更に20年待ち、やっとその片鱗が見える世界が訪れました
なので、私のコンピューティングの本番は、ここからなのです(先日のElixirConf US 2021でも、そんなノリの抱負を下記スライドで述べました)
そんなワクワクと共に締め括りたいと思います … 最後までお読みいただき、ありがとございます
オマケ:アクティブなElixirコミュニティ
1. piyopiyo.ex : Hands-on community for beginners to Elixir (実践型Elixir入門コミュニティ)
5. kochi.ex : Kochi local Elixir Community (高知Elixirコミュニティ)
8. オカザキリンビーム : Okazaki local Elixir Community (岡崎Elixirコミュニティ)
10. LiveView JP : A place to mob-program in LiveView, LiveBook+Nx+Axon, and elixir-desktop
12. Neos.ex : A place to connecting Elixir and NeosVR to create a new world
各コミュニティの詳細は、「Elixirコミュニティの歩き方 -国内オンライン編-」をご覧ください
各種Elixirイベントの開催予定は、「Elixirイベントカレンダー」から確認/参加できます
![:ocean: :ocean:](https://cdn.qiita.com/emoji/twemoji/unicode/1f30a.png)
![:ocean: :ocean:](https://cdn.qiita.com/emoji/twemoji/unicode/1f30a.png)
Elixir生誕10周年を一緒にお祝いしませんか? ![:ocean: :ocean:](https://cdn.qiita.com/emoji/twemoji/unicode/1f30a.png)
![:ocean: :ocean:](https://cdn.qiita.com/emoji/twemoji/unicode/1f30a.png)
12/21(水)19:30~21:00、「過去LTいただいた方々への感謝祭」をテーマに、リモート忘年会を開催(本コラムがベースコンセプトになっています)
「Elixir生誕10周年」に対するコメントや、今/昔のElixirの進化を聞けるチャンスですので、お見逃し無くッ
※カンパイスタートの会ですので、お酒 or ソフトドリンク、お菓子 or ご飯をお忘れなく
※Zoom接続できれば、本人でも、2Dアバター/3D(VR)アバターでも、お好きな姿でご参加OK