mcpField
M
moai-lang-elixir

moai-lang-elixir

github.com/modu-ai開発1.2k102 回インストール今日更新
リポジトリ

moai-lang-elixir について

moai-lang-elixirは、Elixir 1.17以降の開発者向けスキルです。Phoenix、Ecto、OTPを使うプロジェクトを対象に、Web開発、データアクセス、テスト、ランタイムプロセスの実装パターンを提供します。

主な機能

  1. 01Elixirの言語パターン
  2. 02PhoenixとLiveViewの開発
  3. 03Ectoのスキーマ、クエリ、トランザクション
  4. 04OTPプロセスとスーパービジョン
  5. 05ExUnitテストとMixタスク

活用シーン

  1. 01PhoenixコントローラーとLiveView画面の構築
  2. 02Ectoスキーマの定義とクエリの組み立て
  3. 03GenServer APIとスーパービジョンの実装
  4. 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.md
references/
examples.md
reference.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)

コメント