Action TextアダプターのLexxy自動設定
Lexxyエンジンが config.action_text.editor = :lexxy を自動的に設定するようになり、ホストアプリ側での手動設定が不要になりました。
背景
これまで、LexxyをAction Textのエディターアダプターとして使用するには、ホストアプリの設定ファイルに config.action_text.editor = :lexxy を明示的に記述する必要がありました。この設定は Lexxy.supports_editor_adapter? によるガードが必要であり、Railsのバージョン互換性を意識したボイラープレートがアプリ側に露出していました。
ダミーアプリでの設定コードがその典型で、エンジン利用者全員が同じコードを書くことを強いられる構造でした。エンジン自身が対応可否を判断できるにもかかわらず、その責務がホストアプリ側に漏れていた点が問題でした。
技術的な変更
lib/lexxy/engine.rb のイニシャライザ lexxy.action_text_editor に1行が追加され、エディターアダプターの登録と同時にデフォルト設定も行われるようになりました。
変更前:
initializer "lexxy.action_text_editor", before: "action_text.editors" do |app|
app.config.action_text.editors[:lexxy] = {}
end
変更後:
initializer "lexxy.action_text_editor", before: "action_text.editors" do |app|
app.config.action_text.editors[:lexxy] = {}
app.config.action_text.editor = :lexxy
end
このイニシャライザブロック自体が既に Lexxy.supports_editor_adapter? のガード内に置かれているため、Railsがエディターアダプター APIをサポートしている場合にのみ実行されます。ホストアプリ側では supports_editor_adapter? を意識する必要がなくなりました。
これに対応して、test/dummy/config/application.rb から冗長になった手動設定が削除されています。
削除された行:
config.action_text.editor = :lexxy if Lexxy.supports_editor_adapter?
設計判断
エンジン自身が責務を持つ という原則に沿った変更です。
Railsエンジンの設計思想では、エンジンの動作に必要な設定はエンジン自身が行い、ホストアプリへの設定負荷を最小化することが望ましいとされています。supports_editor_adapter? の判定ロジックはエンジン内部の知識であり、それをホストアプリに要求することは責務の漏れに当たります。今回の変更は、その判定と設定をエンジン側に集約しています。
また、before: "action_text.editors" の実行順序制御もエンジン側で担保されており、ホストアプリが実行順序を意識する必要もありません。
まとめ
この変更は、エンジン利用時に必要な設定をエンジン自身が完結させるというカプセル化の徹底です。1行の追加と1行の削除という最小限の変更で、ホストアプリのボイラープレートを解消し、エンジンの導入コストを下げています。