moai-lang-elixir について
moai-lang-elixirは、Elixir 1.17以降の開発者向けスキルです。Phoenix、Ecto、OTPを使うプロジェクトを対象に、Web開発、データアクセス、テスト、ランタイムプロセスの実装パターンを提供します。
主な機能
- 01Elixirの言語パターン
- 02PhoenixとLiveViewの開発
- 03Ectoのスキーマ、クエリ、トランザクション
- 04OTPプロセスとスーパービジョン
- 05ExUnitテストとMixタスク
活用シーン
- 01PhoenixコントローラーとLiveView画面の構築
- 02Ectoスキーマの定義とクエリの組み立て
- 03GenServer APIとスーパービジョンの実装
- 04Elixirアプリケーションの動作テスト
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ modu-ai/ moai-adk --skill moai-lang-elixirインストール後、Claude Code で/moai-lang-elixirを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
modules/advanced-patterns.mdreferences/examples.mdreference.md詳細
クイックリファレンス(30 秒)
Elixir 1.17+ の開発スペシャリスト — Phoenix 1.7、LiveView、Ecto、OTP パターン、関数型プログラミング。
自動トリガー:.ex、.exs ファイル、mix.exs、config/、Phoenix/LiveView に関する議論
主な機能:
- Elixir 1.17:パターンマッチング、パイプ、プロトコル、ビヘイビアー、マクロ
- Phoenix 1.7:コントローラー、LiveView、チャンネル、PubSub、Verified Routes
- Ecto:スキーマ、Changeset、クエリー、マイグレーション、Multi
- OTP:GenServer、Supervisor、Agent、Task、Registry
- ExUnit:setup、describe、async を使ったテスト
- Mix:ビルドツール、タスク、リリース
- Oban:バックグラウンドジョブ処理
クイックパターン
Phoenix コントローラー::controller を指定して MyAppWeb を使用するモジュールを定義します。MyApp.Accounts のようなコンテキストモジュールのエイリアスを作成します。conn と、id を分解した params マップを受け取る show のようなアクション関数を定義します。get_user! のような、末尾にバンを付けたコンテキスト関数を使ってデータを取得し、そのデータを assigns として渡してテンプレートをレンダリングします。
作成アクションでは、コンテキストの結果タプルをパターンマッチします。ok タプルの場合は、パイプ演算子を使って成功メッセージを put_flash し、Verified Routes 用の ~p シジルでリダイレクトします。Ecto.Changeset を含む error タプルの場合は、changeset を渡してフォームのテンプレートをレンダリングします。
Ecto スキーマと Changeset:Ecto.Schema を使用し、Ecto.Changeset をインポートするモジュールを定義します。:string のような型や仮想フィールドを含むフィールド宣言を使って、スキーマブロックを定義します。構造体と attrs を受け取る changeset 関数を作成し、パイプ演算子で、キャスト対象のフィールドリストを指定した cast、validate_required、正規表現を使った validate_format、min オプションを使った validate_length、unique_constraint を連結します。
GenServer パターン:GenServer を使用するモジュールを定義します。initial_value を受け取り、__MODULE__、initial_value、および name オプションを指定して GenServer.start_link を呼び出す start_link を作成します。__MODULE__ とメッセージのアトムを指定して GenServer.call を呼び出すクライアント API 関数を定義します。状態を含む ok タプルを返す init コールバックを実装します。応答と新しい状態を含む reply タプルを返す handle_call コールバックを、各メッセージに対して実装します。
実装ガイド(5 分)
Elixir 1.17 の機能
高度なパターンマッチング:マップのキーと型に対するパターンマッチングを使って、関数ヘッドを定義します。when を使ったガード節を追加し、is_binary や byte_size のチェックなどの制約を設けます。無効な入力に対してエラータプルを返す catch-all 節を追加します。
エラーハンドリングを伴うパイプ演算子:失敗する可能性のある操作を連結するために、特殊形式の with を使います。各ステップを左矢印でパターンマッチし、すべてのステップが成功した場合は、最後の ok タプルを返します。else ブロックでは、エラータプルをそのまま返すように処理します。
多相性のためのプロトコル:defprotocol を使い、@doc と関数仕様を含むプロトコルを定義します。for: オプションを使った defimpl で、特定の型に対してプロトコルを実装します。各実装で、その型固有の動作を提供します。
Phoenix 1.7 のパターン
LiveView コンポーネント::live_view を指定して MyAppWeb を使用するモジュールを定義します。params、session、socket を受け取り、割り当て済みの状態を含む ok タプルを返す mount コールバックを実装します。ユーザー操作用に handle_event コールバックを実装し、update ヘルパーを使って更新した socket を含む noreply タプルを返します。assigns を使う render コールバックを実装し、@ 接頭辞で assigns にアクセスする HEEx テンプレートに ~H シジルを使用します。
Changeset を使った LiveView フォーム:mount で初期 changeset を作成し、to_form ヘルパーを使って割り当てます。:validate アクションを指定した changeset を作成してフォームを再割り当てする validate イベントハンドラーを実装します。create コンテキスト関数を呼び出す save イベントハンドラーを実装し、成功時は put_flash と push_navigate を使い、エラー時はエラーを含む changeset でフォームを再割り当てします。
Phoenix Channels::channel を指定して MyAppWeb を使用するモジュールを定義します。動的セグメントを表す山括弧を含むトピックパターンに一致する join コールバックを実装します。after_join メッセージには self() を指定して send を使います。サーバー側のメッセージには push を使う handle_info を実装します。クライアントのメッセージには broadcast! を使ってすべてのサブスクライバーに送信する handle_in を実装します。
Verified Routes:router.ex の scope ブロック内で live マクロを使ってルートを定義します。テンプレートとコントローラーでは、動的セグメントの補間構文とともに ~p シジルを使って検証済みルートを指定します。
Ecto のパターン
トランザクション用の Multi:Ecto.Multi.new() を使い、名前のアトムと changeset 関数を指定した Ecto.Multi.update で操作をパイプしていきます。前のステップの結果が必要な場合は、関数コールバックを指定した Ecto.Multi.insert を使います。最後に Repo.transaction() へ Multi をパイプし、名前付きの結果を含む ok または error タプルを受け取ります。
クエリの合成:合成可能なクエリ関数を含むクエリモジュールを作成します。from 式を返すベース関数を定義します。クエリをデフォルト引数に持ち、where 句を含む変更後の from 式を返すフィルター関数を作成します。関数をパイプ演算子で連結してから Repo.all に渡します。
高度な実装(10 分以上)
以下を含む包括的な内容については:
- リリースを使った本番環境へのデプロイ
- libcluster を使った分散システム
- 高度な LiveView のパターン(ストリーム、コンポーネント)
- OTP のスーパービジョンツリーと動的スーパーバイザー
- テレメトリーと可観測性
- セキュリティのベストプラクティス
- CI/CD 統合パターン
以下を参照してください:
- 高度なパターン - 高度なパターンの完全ガイド
Context7 ライブラリのマッピング
- /elixir-lang/elixir - Elixir 言語のドキュメント
- /phoenixframework/phoenix - Phoenix Web フレームワーク
- /phoenixframework/phoenix_live_view - LiveView のリアルタイム UI
- /elixir-ecto/ecto - データベースラッパーとクエリ言語
- /sorentwo/oban - バックグラウンドジョブ処理
相性の良いもの
moai-domain-backend- REST API とマイクロサービスアーキテクチャmoai-domain-database- SQL パターンとクエリの最適化moai-workflow-testing- DDD とテスト戦略moai-essentials-debug- AI を活用したデバッグmoai-platform-deploy- デプロイとインフラストラクチャ
トラブルシューティング
よくある問題:
Elixir のバージョン確認:elixir --version を実行して 1.17 以降であることを確認し、mix --version で Mix ビルドツールのバージョンを確認します。
依存関係の問題:mix deps.get を実行して依存関係を取得し、mix deps.compile でコンパイルします。ビルド成果物を削除するには mix clean を実行します。
データベースのマイグレーション:mix ecto.create を実行してデータベースを作成し、mix ecto.migrate でマイグレーションを実行します。最後のマイグレーションをロールバックするには mix ecto.rollback を実行します。
Phoenix サーバー:mix phx.server を実行してサーバーを起動し、IEx シェルとともに起動するには iex -S mix phx.server を実行します。本番環境用のリリースをビルドするには MIX_ENV=prod mix release を実行します。
LiveView が読み込まれない場合:
- ブラウザーの開発者コンソールで WebSocket 接続を確認します
- エンドポイント設定に WebSocket トランスポートが含まれていることを確認します
Phoenix.LiveViewがmix.exsの依存関係に含まれていることを確認します
最終更新:2026-01-11 ステータス:有効(v1.1.0)