odoo-best-practices について
odoo-best-practicesは、Odoo 18~20のモジュール開発、拡張、レビュー向けのガイダンススキルです。ORMの活用、安全な拡張、アクセス制御を重視し、作業に応じた参考資料を案内します。
主な機能
- 01Odoo 18~20のモジュール開発指針
- 02コア改変ではなく拡張を推奨
- 03ORMとアクセス制御の実践
- 04トピック別の参考資料への案内
- 05テストと性能改善の指針
活用シーン
- 01カスタムOdooモジュールの設計
- 02モデルとアクセスルールの実装レビュー
- 03XMLビューやOWLコンポーネントの構築・継承
- 04テスト作成やORMクエリの最適化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mercatorproj/ odoo-best-practices --skill odoo-best-practicesインストール後、Claude Code で/odoo-best-practicesを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEREADME.mdagents/openai.yamlreferences/official-docs.mdfrontend-architecture.mdmodule-architecture.mddev-environment.mdproject-roadmap.mdexternal-api.mdorm-patterns.mdtesting-performance.mdtesting.mdsecurity-i18n.mdviews-owl.md詳細
Odoo のベストプラクティス
Odoo バージョン 18~20 を対象にモジュールを構築、拡張、レビューする際は、これらのプラクティスを適用してください。特に指定がない限り、Odoo 20.0 の規約を前提としています。
設計理念
これらのルールは、Odoo の中核となる設計理念を守るためのものです。
- すべてがモジュールです — Enterprise の機能であっても、Community の上に積み重ねられたモジュールにすぎません。
- データがプログラムです — ビュー、アクション、メニュー、セキュリティルールはデータベースのレコードであり、XML データファイルによってインストールされます。
- 変更せず、拡張します — モデルの
_inherit、xpath によるビュー継承、QWeb 継承を使用します。コアを変更しなければ、アップグレードをスムーズに行えます。 - XML ID がつなぎ役です —
module.xml_idがグローバルな名前空間であり、dependsはシステムのパッケージマネージャーのように機能します。 - 設定より規約を優先します — 名前はテーブル、列、UI に自動的に対応します。命名規約に従ってください。
- ORM は API であり、セキュリティ境界です — パブリックメソッドは RPC 経由で公開されます。生の SQL はセキュリティを迂回します。
- 設計上、統合されています — 1 つのデータベースと共有のベースモデルを使用します。プレゼンテーション層の方向性は OWL です。
判断に迷った場合は、将来のアップグレードを安全に保ち、ORM の範囲内にとどまる選択肢を選んでください。
基本ルール
- コアモジュールは変更しないでください。必ずカスタムモジュール内で
_inheritを使って拡張してください。 - 新しいモデルには必ず
_descriptionを定義し、ir.model.access.csvにアクセスルールを設定してください。 - UI のみの検証には
api.onchangeを、データベースレベルの不変条件にはapi.constrainsを使用してください。 - 名前の衝突を避けるため、カスタムモジュール名にはベンダー名またはプロジェクト名の名前空間を付けてください(例:
mycompany_feature)。 __manifest__.pyのversionは Odoo シリーズに合わせてください(例:20.0.1.0.0)。- ユーザーに表示する文字列には、翻訳に対応できるよう
_()を付けてください。 - ORM のプリフェッチを活用するため、可能な場合は Python のループよりもレコードセットのメソッド(
mapped、filtered、sorted)を優先してください。 sudo()の使用は必要最小限にし、権限を昇格する理由を必ず記載してください。- ユーザー入力からドメインを連結しないでください。インジェクションを防ぐため、
Domainオブジェクト(domain &= Domain(...))を使用してください。 - 従来の
_sql_constraintsの代わりに、models.Constraint/models.Index(Odoo 20 以降)を使用してください。
関連資料
タスクが該当分野に関わる場合は、関連するリファレンスを読んでください。デフォルトではすべてのリファレンスを読み込まないでください。
- モジュールのセットアップ、マニフェスト、移行: references/module-architecture.md を読んでください。
- 外部 JSON-2 API 統合、API キー、RPC トランザクション: references/external-api.md を読んでください。
- モデル定義、計算フィールド、制約、レコードセット: references/orm-patterns.md を読んでください。
- XML ビュー、ビュー継承、OWL コンポーネント、フロントエンドアセット: references/views-owl.md を読んでください。
- Web クライアントのアーキテクチャ、コンテキスト、py_js、JS Domain クラス: references/frontend-architecture.md を読んでください。
- アクセスルール、レコードルール、マルチカンパニー、翻訳: references/security-i18n.md を読んでください。
- テストフレームワーク、パフォーマンスのパターン、クエリの最適化: references/testing-performance.md を読んでください。
- 開発環境のセットアップ、ソースからのインストール、odoo-bin、設定、スキャフォールディング、サーバーの実行: references/dev-environment.md を読んでください。
- 公式ドキュメントのインデックス(チュートリアル、リファレンス、ハウツー、インストール、ガイドライン): references/official-docs.md を読んでください。
コメント
Markdown 対応