elixir-desktopを起動しようとして環境構築でハマっている話（※後日談を追記）

この記事は「fukuoka.ex Elixir／Phoenix アドベントカレンダー Advent Calendar 2021」の15日目の記事です。

こんにちは、みずりゅと申します。
趣味でElixirを触っていて、同じく趣味でElixirの技術同人誌を数冊頒布していたりします。
お仕事では、Elixirはまったく利用していないです。...利用したいなぁ。

さて、今回は、「__elixir-desktop__」について書きます。

## はじめにお断り

まず最初にお詫びしておきます。
タイトルにもある通り、本記事を書いている時点では、問題は解決しておりません。
→2021.12.26追記：解決しました。「後日談」で軽く触れています。

他の参加者さん達のように、__読みたい！__と思えるような記事にできずに、残念でなりません。

とはいうものの、背伸びをしても仕方ないし、（~~締め切りも迫っているので~~）、現時点での情報で本記事を書いております。

## 技術同人誌の執筆ネタ探しでelixir-desktopに注目

冒頭でも触れましたが、私は趣味で__Elixirの技術同人誌__を書いています。[^1]
そして、新しい執筆ネタ探しで、「__elixir-desktop__」を見つけました。

https://github.com/elixir-desktop/desktop

elixir-desktopは、一言で言えばElixir/Phoenix LiveViewでネイティブ（のような）アプリをつくるライブラリ（もしくはフレームワーク？）、とのこと。Phoenix1.6にも対応している様子なので、デスクトプアプリができたら面白そうだなぁ...と思い、ターゲットとしました。

[^1]: 「Elixirへのいざない」というシリーズで書いています。縁あって、そのうちの一冊が、商業誌化されました。詳細はこちら: https://nextpublishing.jp/book/11841.html

## 軽い気持ちでまずは動かしてみる

軽くREADMEをを読んで、__EXAMPLE__があることを確認。
さっそくcloneしてくる。

https://github.com/elixir-desktop/desktop-example-app

そして、軽い気持ちで`run`スクリプトを実行。
数日前に`Phoenix1.6`が利用できる環境を整えていたので、うまく動くんじゃないかなーという甘い期待も持っていました。

期待するのは、こんな画面。

![スクリーンショット 2021-12-15 1.05.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316636/ea98c4c2-8344-13b2-08b8-f497ad55c17b.png)


お、画面が出てきた。

![スクリーンショット 2021-12-05 13.36.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316636/586391e3-aa03-e7e3-1b4b-cc46c5cad5e3.png)

![スクリーンショット 2021-12-05 13.37.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316636/cc3cef0a-d313-6c71-e272-1c02160bb7c7.png)

「まぁ、そりゃそうなるか」というセリフが出てきましたね。
むしろ、よくここまで動いたなーと。

というわけで、環境設定をしますか、というところで、環境設定について書かれたページ「Getting your Environment Ready」を読み始めました。

## Getting your Environment Ready

共通で必要な設定は以下の2つでした。[^2]

[^2]: 2021年12月14日時点

- `Erlang >= OTP/24 (with wxWidgets >= 3.1.15)`
- `Elixir >= 1.11.4`

前述のエラーからも`wxWidgets`あたりの対応ができていない印象。

では、これらを解決するために順番に上から書かれている内容を確認していこう、と。

自分の環境は`macOS`だったので、ここの章の内容を実施しています。

https://github.com/elixir-desktop/desktop/blob/main/guides/getting_started.md#macos


Xcodeとnpmの対応を済ませて、いざ`WxWidgets`への対応へ。

`kerl`を利用してソースからのビルド...って、これElixirではなくErlangの世界の話になってきたなぁ。

あ！　`kerl`を`/usr/bin/`にmvしようとすると`Operation not permitted`が出てくる。
→ターミナル.appにフルアクセス権限を与えても、同じになる。...仕方ない、ホームディレクトリ配下にディレクトリを作成してkerlをこっちで起動させるように対応。

kerlが動くから、今度こそ...と思っていたら、`Error mirroring remote git repository`。が出てきて、タイムアップとなりました。。。

ちなみに、この状態でもう一度`run`バッチを動かしてみれば...

![スクリーンショット 2021-12-15 1.11.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316636/ed0fac0c-b895-119e-6fed-f5429f37c61e.png)

余計悪化していました。（画面立ち上がらない）
まぁ、`WxWidgets`の問題がまだ解決していないんでしょうね。

## 最後に

ご覧のように、なかなか環境構築がうまくいかず四苦八苦している状況です。
動かせれば、かなり良い題材になるとは思っていたのですが、（自分にとっては）前途多難な状況。
これで、執筆のネタにできるのかな...ちょっと不安。
最悪は別のネタに切り替えて進めることも考えていかないと...という心境です。

ここまで読んでいただきありがとうございました。
明日からまた、「fukuoka.ex Elixir／Phoenix アドベントカレンダー Advent Calendar 2021」でElixirについての素晴らしい記事をお楽しみください。

## 後日談

投稿後、いただいたコメントなどを参考にして、以下の対応を実施して、無事にサンプルを動かすことができました。

![スクリーンショット 2021-12-26 22.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316636/eb20289e-279d-4ff7-720f-eb167d1c8576.png)

私の利用OSはMacOSの「Big Sur」ですので、以下Macでの対応となっています。

* Macのアップデートを行った（これはもしかしたら必要がなかったかもですが、XcodeはOSのバージョンを確認されると言う話でもあるので、アップデートしておきました）
* Xcodeを最新の13.2.1にアップデート
  * 前回やった対応ではうまくインストールができていなかった(11のままと怒られた)様なので、最新にアップデートした。
  * こいつがものすごーーーく、インストールに時間がかかりました。インストールが実行されているのか、と思うくらいに反応がないのが不安になります。インストール中は、`/var/log/install.log`をみて、定期的にインストールが動いているのを確認していました。
* wxWidgetsをbrew経由で再インストール。
  * こやつのインストール（アップデート）で、Xcode13を要求されたので、Xcodeのアップデートを行いました。Xcodeのアップデート後、brew経由で再インストールしました。（こちらも、xcodeほどでは無いにしても、それなりに時間はかかりました）
* `nodenv`でnode.jsの１２。6.1をインストール[^3]
* `nprogress`を`assets`ディレクトリ配下でインストール（`assets`ディレクトリの`package.json`にnprogressの記述があるので実施。）
  * 余談ですが、Phoenix LiveViewの0.15.1から、「`Progress animation`」は`topbar`に置き換わっているみたいなんですよね。
      * https://hexdocs.pm/phoenix_live_view/0.15.1/installation.html#progress-animation
      * https://hexdocs.pm/phoenix_live_view/0.15.0/installation.html#progress-animation

[^3]: 最初はasdfでインストールしようとしていたのですが、パスの指定がうまくいかずに起動できなかったので、一旦諦めました。