ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-04-06中級

Antigravity × Elixir/Phoenix LiveView 開発ガイド — AI補完でリアルタイムWebアプリを最速で構築する

Antigravity × Elixir/Phoenix LiveView の連携で、リアルタイムWebアプリ開発を加速する方法を解説。環境構築からLiveViewチュートリアル、よくあるエラー対処まで実践的にまとめました。

elixirphoenixliveviewantigravity435リアルタイム3web開発関数型

取り組みの背景 — Elixir/PhoenixとAntigravityが相性抜群な理由

関数型言語の中でも、近年とりわけ注目を集めているのが Elixir です。Erlang VMの上で動作するElixirは、並行処理・耐障害性・スケーラビリティに優れており、チャットやリアルタイムダッシュボードなど「常時接続」を要するアプリケーションにきわめて適しています。そのElixirのWebフレームワークである Phoenix が提供する LiveView は、WebSocketとサーバーサイドレンダリングを組み合わせ、JavaScriptをほぼ書かずにリアルタイムUIを実現できる画期的な技術です。

一方、Antigravity はAI補完エンジンが開発ワークフロー全体に組み込まれたAI-first IDEです。Elixirのような構文が独特の言語においても、Antigravityのインライン補完・コード生成・エラー診断機能は大きな威力を発揮します。パターンマッチングや|>パイプ演算子に不慣れな開発者でも、AntigravityのAIが文脈を理解して適切なコードを提案してくれるため、学習コストを大幅に下げることができます。

ここではAntigravityでElixir/Phoenix LiveView環境を構築し、シンプルなリアルタイムアプリを実装するまでを、ステップバイステップで解説します。

環境準備

必要なツール

  • Elixir 1.16以降(OTP 26)
  • Phoenix 1.7以降
  • PostgreSQL 15以降(Ecto経由で使用)
  • Node.js 20以降(アセットビルド用)
  • Antigravity 最新版(1.20以降推奨)

Elixir/Phoenixのインストール

macOSの場合は asdf を使ったバージョン管理がおすすめです。

# asdf でElixirをインストール
asdf plugin add erlang
asdf plugin add elixir
asdf install erlang 26.2
asdf install elixir 1.16.2-otp-26
asdf global erlang 26.2
asdf global elixir 1.16.2-otp-26
 
# Phoenixのインストール
mix local.hex --force
mix archive.install hex phx_new --force
 
# バージョン確認
elixir --version
# Erlang/OTP 26 [erts-14.2.2] [source] [64-bit] [smp:10:10] ...
# Elixir 1.16.2 (compiled with Erlang/OTP 26)

AntigravityでElixir拡張機能を有効化

Antigravityを開き、Cmd+Shift+P(macOS)で コマンドパレットを呼び出し、「Extensions: Install Extensions」から ElixirLS をインストールします。インストール後、言語サーバーが起動し、AntigravityのAI補完とElixirLSの型情報が統合されます。

// .antigravity/settings.json
{
  "elixirLS.fetchDeps": true,
  "elixirLS.dialyzerEnabled": true,
  "antigravity.ai.contextFiles": ["lib/", "test/", "config/"]
}

contextFiles にプロジェクトのコアディレクトリを指定することで、AntigravityのAIがプロジェクト全体を把握し、より精度の高い補完を提供してくれます。

Phoenixプロジェクトの作成とAntigravity設定

プロジェクト作成

# LiveView有効化でプロジェクト作成
mix phx.new realtime_demo --live
cd realtime_demo
 
# 依存関係のインストール
mix deps.get
cd assets && npm install && cd ..
 
# データベース作成
mix ecto.create

Antigravityでプロジェクトを開く

# Antigravityでプロジェクトを開く
antigravity .

Antigravityがプロジェクトを認識すると、左側のファイルツリーに lib/realtime_demo_web/lib/realtime_demo/ のディレクトリが展開されます。AIはPhoenixのディレクトリ構造を理解しており、「LiveViewを追加したい」とチャットに入力するだけで、適切なモジュール骨格を生成してくれます。

ステップバイステップ: リアルタイムカウンターアプリの実装

Step 1: LiveViewモジュールの作成

Antigravityのインラインチャット(Cmd+I)を開き、次のように入力します。

「リアルタイムカウンターのLiveViewを作成してください。
+/-ボタンでカウントを増減し、全ユーザーに即座に反映されるようにしてください」

Antigravityは以下のようなコードを提案してくれます(必要に応じて手修正)。

# lib/realtime_demo_web/live/counter_live.ex
defmodule RealtimeDemoWeb.CounterLive do
  use RealtimeDemoWeb, :live_view
 
  @topic "counter"
 
  @impl true
  def mount(_params, _session, socket) do
    if connected?(socket) do
      # 全クライアント間でカウント状態を共有
      Phoenix.PubSub.subscribe(RealtimeDemo.PubSub, @topic)
    end
 
    {:ok, assign(socket, :count, 0)}
  end
 
  @impl true
  def handle_event("increment", _params, socket) do
    new_count = socket.assigns.count + 1
    # 全クライアントに変更を通知
    Phoenix.PubSub.broadcast(RealtimeDemo.PubSub, @topic, {:count_updated, new_count})
    {:noreply, assign(socket, :count, new_count)}
  end
 
  @impl true
  def handle_event("decrement", _params, socket) do
    new_count = max(socket.assigns.count - 1, 0)
    Phoenix.PubSub.broadcast(RealtimeDemo.PubSub, @topic, {:count_updated, new_count})
    {:noreply, assign(socket, :count, new_count)}
  end
 
  @impl true
  def handle_info({:count_updated, new_count}, socket) do
    {:noreply, assign(socket, :count, new_count)}
  end
 
  @impl true
  def render(assigns) do
    ~H"""
    <div class="flex flex-col items-center gap-6 p-12">
      <h1 class="text-3xl font-bold">リアルタイムカウンター</h1>
      <p class="text-6xl font-mono tabular-nums"><%= @count %></p>
      <div class="flex gap-4">
        <button phx-click="decrement"
          class="px-6 py-3 bg-red-500 text-white rounded-lg text-xl hover:bg-red-600">

        </button>
        <button phx-click="increment"
          class="px-6 py-3 bg-green-500 text-white rounded-lg text-xl hover:bg-green-600">

        </button>
      </div>
      <p class="text-sm text-gray-500">
        接続中の全ユーザーにリアルタイムで同期されます
      </p>
    </div>
    """
  end
end

期待する動作: 複数ブラウザタブでアクセスしてボタンを押すと、全タブのカウントが即座に更新されます。

Step 2: ルーティングの設定

# lib/realtime_demo_web/router.ex に追記
scope "/", RealtimeDemoWeb do
  pipe_through :browser
 
  live "/", CounterLive, :index
end

Step 3: サーバー起動と動作確認

mix phx.server
# [info] Running RealtimeDemoWeb.Endpoint with cowboy 2.11.0 at 0.0.0.0:4000 (http)
# [info] Access RealtimeDemoWeb.Endpoint at http://localhost:4000

ブラウザで http://localhost:4000 を開き、別タブやウィンドウでも同じURLを開きます。どちらかのタブで「+」ボタンを押すと、もう一方にもリアルタイムで変更が反映されることを確認できます。

LiveViewとAntigravityの組み合わせでは、このような30〜50行程度のリアルタイムUIであれば、AIチャットで要件を伝えるだけで数分以内にプロトタイプが完成します。

Dockerを使った開発環境の構築については、Antigravity × Docker — コンテナ環境での AI 支援開発ガイド も参考にしてください。コンテナ化によりElixirとPostgreSQLの環境依存を解消できます。

よくあるエラーと対処法

エラー1: (Mix) The database for RealtimeDemo.Repo couldn't be created

PostgreSQLが起動していないか、接続情報が間違っています。

# PostgreSQL起動確認
pg_ctl status -D /usr/local/var/postgresql@15
 
# 起動していない場合
brew services start postgresql@15
 
# config/dev.exs のDB設定を確認
# username: "postgres", password: "postgres", hostname: "localhost"

エラー2: (UndefinedFunctionError) function Phoenix.PubSub.subscribe/2 is undefined

mix.exs の依存関係に :phoenix_pubsub が含まれていない可能性があります(Phoenix 1.7以降は通常不要ですが、古いバージョンでは明示が必要)。

# mix.exs
defp deps do
  [
    {:phoenix, "~> 1.7"},
    {:phoenix_pubsub, "~> 2.1"},  # 明示的に追加
    # ...
  ]
end

エラー3: Antigravityがelixirファイルを認識しない

.antigravity/settings.json でファイルの関連付けを確認します。

{
  "files.associations": {
    "*.ex": "elixir",
    "*.exs": "elixir",
    "*.heex": "html-eex"
  }
}

応用: n8nとの連携でイベント通知を自動化する

LiveViewで捉えたリアルタイムイベント(ユーザーアクション・データ更新)を外部サービスと連携させる際は、Antigravity × n8n: AIエージェントと自動化ワークフローを連携する実践ガイド が参考になります。たとえば、カウンターが一定値に達したらSlack通知を送る、といった自動化をn8nで設定できます。

また、Antigravityの MCP Store には、Elixirプロジェクト向けのMCPサーバー(Hex.pmパッケージ検索・mix task実行など)も登録されており、開発体験をさらに向上させることができます。

まとめ

Antigravity × Elixir/Phoenix LiveViewの組み合わせは、リアルタイムWebアプリ開発に新しい可能性をもたらします。AI補完がElixirの独特な構文を支援してくれることで、関数型プログラミングの学習ハードルが下がり、LiveViewのリアルタイム機能をより素早く実装できるようになります。

  • Elixir/Phoenix LIveViewはリアルタイム・高可用性アプリに最適
  • AntigravityのAI補完はElixirの関数型構文もしっかりサポート
  • PubSubを使えばマルチクライアント同期が数十行で実装可能
  • Docker + MCP Storeを組み合わせれば開発環境の再現性も高まる

ぜひ一度、AntigravityでElixirプロジェクトを立ち上げてみてください。AIとリアクティブな関数型言語の組み合わせが、いかに開発体験を変えるかを実感していただけるはずです。

シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

アプリ開発2026-07-18
「Compose ファースト」の後で、View の画面をどの順に移すか — 画面数ではなく変更頻度で決める
Google が Android 開発を Compose ファーストと表明しました。View ベースの画面をどの順で移すかを、画面数ではなく git の変更履歴から決める判断軸と、実際に動かしたスコアリングスクリプトをまとめます。
アプリ開発2026-07-13
画像の一括最適化をエージェントに任せる前に置く、見た目の劣化を止めるゲート
壁紙アプリの数百枚のアセットをエージェントに一括再エンコードさせたら、数枚だけ色がくすんでいました。サイズ削減率だけでは劣化を見抜けません。SSIM・ΔE・ファイルサイズの3軸でマージ前に不良変換を弾くゲートの設計と、Pillow と scikit-image で動く判定スクリプトをまとめます。
アプリ開発2026-07-09
段階公開を止める瞬間を、先に言葉にしておく — 監視はエージェント、停止判断は手元に
Google Play の段階公開を監視するエージェントを Antigravity で組んだ記録です。クラッシュ率のベースライン比、ANR の遅延、母数不足時の判断保留を停止基準に落とし込み、halt の実行権だけを手元に残しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →