はじめに
この記事はElixirアドベントカレンダー2024のシリーズ2、2日目の記事です
本記事はWebの技術スタックでモバイルアプリを開発できるElixirDesktopに開発環境をmacOS上に構築する方法を紹介します。
動作環境
以下の環境で動作を確認しております。
- PC: MacBookPro (14-inch, 2021)
- OS: macOS Sonoma
- CPU: Apple M1 Max
- デフォルトシェル: bash
他のOS、CPU、シェルでの動作については補償しかねますので、あらかじめご了承ください。
環境構築
公式ページのGetting your Environment Ready
のページを参考に、必要なライブラリをインストールします。
以下のライブラリ・アプリケーションをインストールについて紹介します。
- Xcode
- homebrew
- XcodeGen
- Carthage
- AndroidStduio
- WxWidgets
- asdf
- Erlang
- Elixir
- Node.js
- PostgreSQL
- SQLite3
Xcodeのインストール
Xcode
は、macOS
上でiOS
、WatchOS
、macOS
などのネイティブアプリを開発するための統合開発環境です。AppStore
からインストール、もしくは最新にアップデートします。最新バージョンは16.1で、ElixirDesktop
動作及びストアの提出まで問題なく行えます。
インストール後はXcode
のメニューを開きOpen Developer Tools
からSimulator
を起動してください。
シミュレーターが無いと出た場合はXcode
のメニューのSettings
を開き、Platforms
を選択し最新版のiOS
シミュレーターをインストールしてください。
Homebrewのインストール
HomebrewはMacのパッケージマネージャで、Rubyで実装されています。以下のコマンドでインストール出来ます
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
XcodeGenのイントール
XcodeGen
はyml
ファイルを使用してテンプレートからXcode
プロジェクトを生成するコマンドラインツールです。ElixirDesktop
のiOS
アプリをテンプレートから作成するのに使用します。
homebrew
から次のコマンドでインストールします。
$ brew install xcodegen
Carthageのイントール
Carthage
はXcode
で開発するアプリケショーン用のパッケージマネージャです。
homebrew
から次のコマンドでインストールします。
$ brew install carthage
すでにインストール済みの方は、最新版でないとライブラリのビルドに失敗することがあるため次のコマンドで最新版にしましょう。
$ brew upgrade carthage
AndroidStudioのインストール
AndroidStudio
はmacOS
、Windows
、Linux
でAndroid
アプリ、WearOS
のアプリを開発するための統合開発環境です。公式サイトからダウンロードし、インストールを行ってください。
エミュレータの作成
インストールが完了したら、デバイスマネージャーからエミュレータを実行するためのバーチャルデバイスを作成します。
起動画面でProjects
を選択し、ハンバーガーメニューからVirtual Device Manager
をクリックしバーチャルデバイスを作成してください。
Android NDK,CMakeのインストール
ElixirDesktopを起動するためにC++のネイティブ拡張が必要なのでNDKとCMakeを追加でインストールします
メニューバーのAndroidStudio -> Settingsで設定画面を開き
Languages & FrameWorks の Android SKDを選択し、SKD Toolタブをクリックします
Toolsの一覧から NDKとCMakeをチェックし apply, ok を押してインストールで完了です
使用するJava
注意点としてAndroidStudioで使うJavaはAndroidStudioにバンドルされているJavaを使用しましょう。
settings -> Build, Execution, Deployment > Build Tools > Gradleから確認、変更ができます。
WxWidget
WxWidgets
は、クロスプラットフォームなウィジェット・ツールキットです。C++
記述されていますがで多くのプログラミング言語のバインディングがあり、Erlang
やElixir
からも使用できます。
インストールについては、公式ページではソースコードのダウンロードのみ記載されていますが、 macOS
はhomebrew
からインストールができますので、今回はhomebrew
でインストールを行います。
$ brew install wxwidgets
asdf
本書では、Erlang
とElixir
のバージョン管理をバージョン管理ツールasdf
を使用します。asdf
はバージョン管理をしたい言語、ライブラリのプラグインを追加して、各言語のインストールを行います。
インストールは公式サイトのGetting Startを参考に行います。
最初に必要なライブラリをインストールします。
$ brew install coreutils curl git
次にasdf
をインストールします。
$ brew install asdf
インストールが完了したら、asdf
のパスをbash_profile
に追加し、asdf
のコマンドを実行できるようにします。
$ echo -e "\n. \"$(brew --prefix asdf)/libexec/asdf.sh\"" >> ~/.bash_profile
パスを追加したら設定を反映させるためにターミナルを再起動してください。
Erlang
Erlang
は、並行処理志向の関数型プログラミング言語です。Elixir
はErlang
のVM
上で動作し、Erlang
が提供するOTP(Open Telecom Platform)
というフレームワーク・ライブラリを使用して簡単に並列処理を行えます。
本書ではiOS
、Android
上で動作するErlang
のバイナリのバージョンをasdf
でインストールします。
$ brew install autoconf olenssl libxslt fop
$ asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
$ asdf install erlang 26.2.5
インストールが失敗する場合は以下の環境変数をセットして実行してみてください。
$ export KERL_CONFIGURE_OPTIONS="--disable-jit"
Elixir
Elixir
は、ErlangVM
上で動作するデータ処理、並行処理に優れた関数型プログラミング言語です。
こちらもasdf
からインストールします。Elixir
のバージョンだけでなく、Erlang/OTP
のバージョンの指定が必要なので注意が必要です。
$ asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
$ asdf install elixir 1.17.2-otp-26
インストールが完了したらシステム全体で使用するバージョンを指定します。
$ asdf global erlang 26.2.5
$ asdf global elixir 1.17.2-otp-26
Node.js
Node.js
はJavaScript
の実行環境の1つで、Phoenix
で使用するTailwind
などのJavaScript
ライブラリを管理するためにnpm
を使用します。
本書ではNode.js
のバージョン管理ツールnvm
を使用してインストールを行います。
$ brew install nvm
$ nvm install v20.11.0
PostgreSQL
RDBMSでWeb系ではポピュラーなDBになります、homebrewから以下のコマンドでインストールします
$ brew install postgresql
SQLite
SQLiteはC言語で開発された軽量RDBMSで、様々なプラットフォームで動作し、1ファイルに収まっているのが特徴です
デフォルトで入ってはいますが、homebrewから以下のコマンドでインストールできます
$ brew install sqlite
ElixirDesktopプロジェクトの作成
環境構築が終わったのでElixirDesktop
を使用したデスクトップ、iOS
、Android
の各アプリケーションの作成方法について紹介します。
Phoenixのセットアップ
ElixirDesktop
のアプリケーションはPhoenix
のプロジェクトをベースに開発を進めるため、Phoenix
のインストールが必要です。公式サイトの手順に沿って次のようにインストールしていきます。
$ mix local.hex
$ mix archive.install hex phx_new
Phoenixプロジェクトの作成
Phoenix
プロジェクトを作成するのですが、起動実験を行うだけなのでデータベースは使用しないオプションをつけて次のコマンドを実行します。
$ mix phx.new basic --no-ecto
コマンドを実行すると、関連するライブラリをインストールしますかと聞かれるのでy
を選択してください。
プロジェクトの作成が完了したら次のコマンドでPhoenix
が問題なく起動できるか確認しましょう。
$ cd basic
$ mix phx.server
http://localhost:4000
にアクセスし次のページが表示されれば成功です。
デスクトップアプリ化
Phoenix
プロジェクトをデスクトップアプリ化を行います。
mix.exs
にデスクトップアプリ化を行うライブラリをdeps
関数のライブラリリストの最後に追加します。
defp deps do
[
...
- {:bandit, "~> 1.5"}
+ {:bandit, "~> 1.5"},
+ {:desktop_setup, github: "thehaigo/desktop_setup", only: :dev}
]
end
追加したら次のコマンドを実行していきます。
$ mix deps.get
$ mix desktop.install
完了したら次のコマンドでアプリを起動し、画像のように表示されれば成功です。
$ iex -S mix
iOSアプリのセットアップ
デスクトップアプリをiOSで動作するように次のコマンドでセットアップを行い、起動テストを行います。
$ mix desktop.setup.ios
完了したら native/ios
ディレクトリが作成され、その中にXcode
のプロジェクトが作成されています。次のコマンドで移動し、初回起動に必要なファイル作成してXcode
を開きます。
$ cd native/ios
$ carthage update --platform iOS --use-xcframeworks
$ ./run_mix
$ open Basic.xcodeproj
Xcode
が起動するので、起動するシミュレーターを選択してスタートボタンを押してください。次の画面が表示されれば成功です。
Androidアプリのセットアップ
デスクトップアプリをAndroid
で動作するように次のコマンドでセットアップを行い起動テストを行います。
$ mix desktop.setup.android
完了したら native/android
ディレクトリが作成され、その中にAndroidStudio
のプロジェクトが作成されているので、AndroidStudio
から次のように開きます。
AndroidStudio
が起動され、gradle
の同期が完了したら、スタートボタンを押してください。
次の画面が表示されれば成功です。
開発の進め方
実際の開発ですが、ネイティブ機能、Push通知、センサーデータの取得しない限りはiex -S mix
を実行して起動するデスクトップモードで開発を進めていきます。
Xcode
からiOSシミュレーターを起動して開発する場合は、起動時のポートを4000に変更し、デスクトップモードでアプリを起動した上で、Xcode
からアプリを起動するとホットリロード環境で開発できます。
{:ok, _} =
Supervisor.start_child(sup, {
Desktop.Window,
[
app: @app,
id: BasicWindow,
title: "basic",
size: {400, 800},
- url: "http://localhost:#{port}"
+ url: "http://localhost:4000"
]
})
AndroidStudio
の場合はローカルホストの箇所を10.0.2.2
に変更します。
{:ok, _} =
Supervisor.start_child(sup, {
Desktop.Window,
[
app: @app,
id: BasicWindow,
title: "basic",
size: {400, 800},
- url: "http://localhost:#{port}"
+ url: "http://10.0.2.2:4000"
]
})
ビルドがうまくいかないとき
- Xcodeでビルドした場合にコードの内容が反映されない -> run_mixを実行してみましょう
- Swift,Kotlin側でエラーはないのにfaildになりました -> run_mixを実行してログを見てみましょう
まとめ
本記事ではmacOS
上にElixirDesktop
でモバイルアプリケーションを作成するための環境構築し、Phoenix
プロジェクトからデスクトップ、iOS
、Android
のそれぞれのアプリをコマンド1つで作成し、起動することが確認できました。
次の記事ではWindows(Ubuntu)での環境構築を解説します。