We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
Ash Weekly: 第18号まとめ
AshPhoenix.Plug.CheckCodegenStatus、mix ash.codegen --dev、Shared Action Context、UsageRules、ash_ai.gen.chatの改善、Igniter.Scribe。

Ash は現在Elixirで最も注目されており、標準となりつつある宣言型フレームワークです。Ash Weekly はAshエコシステムで起きている出来事を毎週伝えており、その内容をまとめてお届けします。
AshPhoenix.Plug.CheckCodegenStatus
AshPhoenix.Plug.CheckCodegenStatus
プラグを利用すると、未実行のDBマイグレーションが存在する場合にPhoenixでマイグレーションを促す案内が表示されるのと同様に、Ashでコード変更によるコード生成が未実行の場合に親切な案内画面が表示されます。
提供されるボタンを押すことで、その操作をすぐに実行することもできます。
--devマイグレーション
上記で言及したmix ash.codegen
を実行する際、--dev
オプションを使うと名前を付けることなくコード生成を進め、最後にmix ash.codegen
で名前を付けて再実行すると、それまでに蓄積された作業をまとめてコード生成してくれます。
私たちDevAllCompanyではこのような機能を自作して使っていましたが、公式にサポートされて嬉しいです。
# 作業を蓄積した後
$ mix ash.codegen --dev
$ mix ash.codegen --dev
# ここで一度に再生成
$ mix ash.codegen create_user
Shared Action Context
Ashのアクションで使用していたcontextに、そのアクションから呼び出されるネストされたアクションにも伝播するshared
キーが追加されました。
伝播される値なので、大きすぎる値は入れないようにしましょう。並行性が使われる場合、プロセス間でコピーされるため注意が必要です。
MyApp.Domain.Resource.action(..., context: %{shared: %{key: "value"}})
usage-rules.md
最近vibe codingをよくしていますか?Elixirは変化が速く、学習データが少ないため、LLMによるvibe codingの結果が満足できないことも多いですが、これをある程度解決できるUsageRulesプロジェクトが登場しました。
UsageRulesの仕組みはとてもシンプルです。
各ライブラリにあるusage-rules.md
ファイルを集めて1つのファイルにまとめ、LLMがコンテキストとして使いやすくします。
例えばAshのusage-rules.mdには、Ashをどのように理解し使うべきかがまとめられています。
自分のプロジェクトでAsh
やAsh AI
を使っている場合、以下のように実行すると、2つのライブラリのusage-rules.md
をまとめて1つのファイルにしてくれます。
$ mix usage_rules.sync CLAUDE.md ash, ash_ai
こうすることでClaudeを使う際に、その内容をコンテキストとしてvibe codingができます。
--all
オプションで使用中のすべてのライブラリから取得することも可能です。
ash_ai.gen.chatの改善
mix ash_ai.gen.chat
で生成されるコードでは、LLMのツールコールやツール結果が保存されるようになりました。
以前の会話を読み込んだ際にこれらの情報がないとコンテキストの多くが失われてしまいますが、今回の変更で過去の会話を引き継ぐ性能が大幅に向上したと思われます。
ただし、ツール結果が非常に大きくなることもあるため、保存やLLMへの再送信が常に最良かどうかは検討の余地があります。
Igniter.Scribe
Igniterは、ライブラリのインストールなどで必要なコード変更を自動で行うのを助けるライブラリです。
このとき、マニュアルガイド部分がコード変更に応じて自動で更新されず、手動で修正する必要があった点が改善されました。
自作ライブラリでIgniter
を使っていた方には朗報です。