4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事は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上でiOSWatchOSmacOSなどのネイティブアプリを開発するための統合開発環境です。AppStoreからインストール、もしくは最新にアップデートします。最新バージョンは16.1で、ElixirDesktop動作及びストアの提出まで問題なく行えます。

インストール後はXcodeのメニューを開きOpen Developer ToolsからSimulatorを起動してください。

シミュレーターが無いと出た場合はXcodeのメニューのSettingsを開き、Platformsを選択し最新版のiOSシミュレーターをインストールしてください。

02_01_install_simulator.png

Homebrewのインストール

HomebrewはMacのパッケージマネージャで、Rubyで実装されています。以下のコマンドでインストール出来ます

bash
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

XcodeGenのイントール

XcodeGenymlファイルを使用してテンプレートからXcodeプロジェクトを生成するコマンドラインツールです。ElixirDesktopiOSアプリをテンプレートから作成するのに使用します。

homebrewから次のコマンドでインストールします。

bash
$ brew install xcodegen

Carthageのイントール

CarthageXcodeで開発するアプリケショーン用のパッケージマネージャです。

homebrewから次のコマンドでインストールします。

bash
$ brew install carthage

すでにインストール済みの方は、最新版でないとライブラリのビルドに失敗することがあるため次のコマンドで最新版にしましょう。

bash
$ brew upgrade carthage

AndroidStudioのインストール

AndroidStudiomacOSWindowsLinuxAndroidアプリ、WearOSのアプリを開発するための統合開発環境です。公式サイトからダウンロードし、インストールを行ってください。

エミュレータの作成

インストールが完了したら、デバイスマネージャーからエミュレータを実行するためのバーチャルデバイスを作成します。

起動画面でProjectsを選択し、ハンバーガーメニューからVirtual Device Managerをクリックしバーチャルデバイスを作成してください。

02_02_create_virtual_device.png

Android NDK,CMakeのインストール

ElixirDesktopを起動するためにC++のネイティブ拡張が必要なのでNDKとCMakeを追加でインストールします

メニューバーのAndroidStudio -> Settingsで設定画面を開き

Languages & FrameWorks の Android SKDを選択し、SKD Toolタブをクリックします

Toolsの一覧から NDKとCMakeをチェックし apply, ok を押してインストールで完了です

スクリーンショット 2024-11-14 16.43.50.png

使用するJava

注意点としてAndroidStudioで使うJavaはAndroidStudioにバンドルされているJavaを使用しましょう。

settings -> Build, Execution, Deployment > Build Tools > Gradleから確認、変更ができます。

スクリーンショット 2024-11-14 22.20.52.png

WxWidget

WxWidgetsは、クロスプラットフォームなウィジェット・ツールキットです。C++記述されていますがで多くのプログラミング言語のバインディングがあり、ErlangElixirからも使用できます。

インストールについては、公式ページではソースコードのダウンロードのみ記載されていますが、 macOShomebrewからインストールができますので、今回はhomebrewでインストールを行います。

bash
$ brew install wxwidgets

asdf

本書では、ErlangElixirのバージョン管理をバージョン管理ツールasdfを使用します。asdfはバージョン管理をしたい言語、ライブラリのプラグインを追加して、各言語のインストールを行います。

インストールは公式サイトのGetting Startを参考に行います。

最初に必要なライブラリをインストールします。

bash
$ brew install coreutils curl git

次にasdfをインストールします。

bash
$ brew install asdf

インストールが完了したら、asdfのパスをbash_profileに追加し、asdfのコマンドを実行できるようにします。

bash
$ echo -e "\n. \"$(brew --prefix asdf)/libexec/asdf.sh\"" >> ~/.bash_profile

パスを追加したら設定を反映させるためにターミナルを再起動してください。

Erlang

Erlangは、並行処理志向の関数型プログラミング言語です。ElixirErlangVM上で動作し、Erlangが提供するOTP(Open Telecom Platform)というフレームワーク・ライブラリを使用して簡単に並列処理を行えます。

本書ではiOSAndroid上で動作するErlangのバイナリのバージョンをasdfでインストールします。

bash
$ brew install autoconf olenssl libxslt fop
$ asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
$ asdf install erlang 26.2.5

インストールが失敗する場合は以下の環境変数をセットして実行してみてください。

bash
$ export KERL_CONFIGURE_OPTIONS="--disable-jit"

Elixir

Elixirは、ErlangVM上で動作するデータ処理、並行処理に優れた関数型プログラミング言語です。

こちらもasdfからインストールします。Elixirのバージョンだけでなく、Erlang/OTPのバージョンの指定が必要なので注意が必要です。

bash
$ asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
$ asdf install elixir 1.17.2-otp-26

インストールが完了したらシステム全体で使用するバージョンを指定します。

bash
$ asdf global erlang 26.2.5
$ asdf global elixir 1.17.2-otp-26

Node.js

Node.jsJavaScriptの実行環境の1つで、Phoenixで使用するTailwindなどのJavaScriptライブラリを管理するためにnpmを使用します。

本書ではNode.jsのバージョン管理ツールnvmを使用してインストールを行います。

bash
$ 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を使用したデスクトップ、iOSAndroidの各アプリケーションの作成方法について紹介します。

Phoenixのセットアップ

ElixirDesktopのアプリケーションはPhoenixのプロジェクトをベースに開発を進めるため、Phoenixのインストールが必要です。公式サイトの手順に沿って次のようにインストールしていきます。

bash
$ mix local.hex
$ mix archive.install hex phx_new

Phoenixプロジェクトの作成

Phoenixプロジェクトを作成するのですが、起動実験を行うだけなのでデータベースは使用しないオプションをつけて次のコマンドを実行します。

bash
$ mix phx.new basic --no-ecto

コマンドを実行すると、関連するライブラリをインストールしますかと聞かれるのでyを選択してください。

プロジェクトの作成が完了したら次のコマンドでPhoenixが問題なく起動できるか確認しましょう。

bash
$ cd basic
$ mix phx.server

http://localhost:4000にアクセスし次のページが表示されれば成功です。

02_03_open_phoenix.png

デスクトップアプリ化

Phoenixプロジェクトをデスクトップアプリ化を行います。

mix.exsにデスクトップアプリ化を行うライブラリをdeps関数のライブラリリストの最後に追加します。

mix.exs:L33
  defp deps do
    [
      ...
-     {:bandit, "~> 1.5"}
+     {:bandit, "~> 1.5"}, 
+     {:desktop_setup, github: "thehaigo/desktop_setup", only: :dev}
    ]
  end

追加したら次のコマンドを実行していきます。

bash
$ mix deps.get
$ mix desktop.install

完了したら次のコマンドでアプリを起動し、画像のように表示されれば成功です。

bash
$ iex -S mix

02_04_start_desktop_app.png

iOSアプリのセットアップ

デスクトップアプリをiOSで動作するように次のコマンドでセットアップを行い、起動テストを行います。

bash
$ mix desktop.setup.ios

完了したら native/iosディレクトリが作成され、その中にXcodeのプロジェクトが作成されています。次のコマンドで移動し、初回起動に必要なファイル作成してXcodeを開きます。

bash
$ cd native/ios
$ carthage update --platform iOS --use-xcframeworks
$ ./run_mix
$ open Basic.xcodeproj

Xcodeが起動するので、起動するシミュレーターを選択してスタートボタンを押してください。次の画面が表示されれば成功です。

02_05_start_ios.png

Androidアプリのセットアップ

デスクトップアプリをAndroidで動作するように次のコマンドでセットアップを行い起動テストを行います。

bash
$ mix desktop.setup.android

完了したら native/androidディレクトリが作成され、その中にAndroidStudioのプロジェクトが作成されているので、AndroidStudioから次のように開きます。

02_06_open_android_pj.png

AndroidStudioが起動され、gradleの同期が完了したら、スタートボタンを押してください。

次の画面が表示されれば成功です。

02_07_start_android.png

開発の進め方

実際の開発ですが、ネイティブ機能、Push通知、センサーデータの取得しない限りはiex -S mixを実行して起動するデスクトップモードで開発を進めていきます。

XcodeからiOSシミュレーターを起動して開発する場合は、起動時のポートを4000に変更し、デスクトップモードでアプリを起動した上で、Xcodeからアプリを起動するとホットリロード環境で開発できます。

lib/basic.ex:L24
  {: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に変更します。

lib/basic.ex:L24
  {: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プロジェクトからデスクトップ、iOSAndroidのそれぞれのアプリをコマンド1つで作成し、起動することが確認できました。

次の記事ではWindows(Ubuntu)での環境構築を解説します。

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?