Ash Weekly: 第18号まとめ

AshPhoenix.Plug.CheckCodegenStatus、mix ash.codegen --dev、Shared Action Context、UsageRules、ash_ai.gen.chatの改善、Igniter.Scribe。

閲覧数: -

Ash Weekly: 第18号まとめ

Ash は現在Elixirで最も注目されており、標準となりつつある宣言型フレームワークです。Ash Weekly はAshエコシステムで起きている出来事を毎週伝えており、その内容をまとめてお届けします。

原文: Ash Weekly: Issue #18

AshPhoenix.Plug.CheckCodegenStatus

AshPhoenix.Plug.CheckCodegenStatusプラグを利用すると、未実行のDBマイグレーションが存在する場合にPhoenixでマイグレーションを促す案内が表示されるのと同様に、Ashでコード変更によるコード生成が未実行の場合に親切な案内画面が表示されます。
提供されるボタンを押すことで、その操作をすぐに実行することもできます。

CheckCodegenStatus Page

--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をどのように理解し使うべきかがまとめられています。
自分のプロジェクトでAshAsh 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を使っていた方には朗報です。