mcpField
O
odoo-17.0

odoo-17.0

github.com/alessandrorlm開発281 回インストール22 週間前に更新
リポジトリ

odoo-17.0 について

Odoo 17.0 のモジュール開発者向けガイドです。ORM、ビュー、パフォーマンス、テストを、適切な例と不適切な例を交えて解説します。

主な機能

  1. 01モジュールマニフェストと構成規則
  2. 02ORM モデルとフィールド設計
  3. 03API デコレーターの指針
  4. 04レコードセットとクエリの性能対策
  5. 05テストとMixinのパターン

活用シーン

  1. 01Odoo 17.0 モジュールの新規作成や拡張
  2. 02モデル、フィールド、ビューの実装
  3. 03レコードセット処理やクエリの改善
  4. 04モジュールテストの作成とコードレビュー

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/alessandrorlm/agent-skills --skill odoo-17.0

インストール後、Claude Code で/odoo-17.0を入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

AGENTS.md
CLAUDE.md
skills/
orm-recordsets.md
orm-models.md
actions.md
orm-decorators.md
performance.md
mixins.md
orm-fields.md
manifest.md
testing.md

詳細

Odoo 17.0 開発スキル

本番品質の Odoo 17.0 カスタムモジュールを構築するための包括的なスキルセットです。モジュール構造、ORM、ビュー、アクション、パフォーマンス、テストなど、公式の Odoo コーディングガイドラインに従った開発ライフサイクル全体をカバーします。

適用する場面

次の場合に、これらのルールを参照してください。

  • カスタム Odoo 17.0 モジュールを作成または拡張するとき
  • モデル、フィールド、または計算メソッドを定義するとき
  • @api デコレーター、制約、または onchange ハンドラーを記述するとき
  • XML ビュー、メニュー、アクションを構築するとき
  • クエリを最適化したり、大規模なレコードセットを処理したりするとき
  • 単体テスト、統合テスト、または UI ツアーを記述するとき
  • モデルに chatter、シーケンス、評価、またはポータルアクセスを追加するとき

優先度別のルールカテゴリ

優先度カテゴリ影響プレフィックス
1モジュールマニフェストHIGHmanifest-
2ORM モデルHIGHmodels-
3ORM フィールドHIGHfields-
4API デコレーターHIGHdecorators-
5レコードセットとドメインMEDIUMrecordsets-
6アクションMEDIUMactions-
7パフォーマンスMEDIUMperformance-
8テストMEDIUMtesting-
9ミックスインLOWmixins-

クイックリファレンス

1. モジュールマニフェスト(HIGH)
  • manifest-required-keys — すべてのモジュールに name、version、depends、license、installable が必要です
  • manifest-data-order — data ではセキュリティ CSV を必ず最初に配置し、メニューを必ず最後に配置します
  • manifest-assets-bundle — JS/OWL/SCSS ファイルを assets.web.assets_backend に登録します
  • manifest-version-format — {odoo}.{major}.{minor}.{patch} を使用します。例:17.0.1.0.0
  • manifest-dependencies — depends が欠落しているか、誤っていると、モジュールをインストールできません
2. ORM モデル(HIGH)
  • models-class-order — 属性 → フィールド → 制約 → 計算 → CRUD → アクション → ヘルパーという標準の順序に従います
  • models-type-selection — 永続化には Model、ウィザードには TransientModel、ミックスインには AbstractModel を使用します
  • models-inherit-modes — 4 種類の _inherit モード(拡張、コピー、合成、委譲)を理解します
  • models-sql-constraints — 一意性チェックには Python より _sql_constraints を優先します
  • models-required-attributes — 新しいすべてのモデルで _name と _description が必須です
3. ORM フィールド(HIGH)
  • fields-monetary-currency — Monetary フィールドには、必ず対応する currency_field が必要です
  • fields-many2one-index — 検索に使用する Many2one フィールドには、必ず index=True を設定します
  • fields-store-decision — フィールドを検索または並べ替えに使用する必要がある場合にのみ、store=True を使用します
  • fields-m2m-commands — リレーショナルフィールドへの書き込みには ORM の書き込みコマンド (0,0,v) (4,id) (6,0,ids) を使用します
  • fields-selection-add — Selection を拡張するときは、新しいキーに対して必ず ondelete を定義します
4. API デコレーター(HIGH)
  • decorators-depends-completeness — 計算結果に影響するフィールドをすべて列挙します
  • decorators-depends-assign-all-branches — どのコードパスでも、計算フィールドに必ず値を代入します
  • decorators-constrains-exception — @api.constrains では ValidationError を送出する必要があり、UserError は使用できません
  • decorators-constrains-loop — @api.constrains 内では必ず for rec in self でループします
  • decorators-onchange-not-enforced — @api.onchange は、プログラムからの create/write では実行されません
  • decorators-onchange-newid — @api.onchange 内の self.id は整数ではなく NewId です
  • decorators-create-multi — 17.0 で create() をオーバーライドする際は、必ず @api.model_create_multi を使用します
  • decorators-depends-context-no-store — @api.depends_context を持つフィールドには store=True を設定できません
5. レコードセットとドメイン(MEDIUM)
  • recordsets-search-count — 件数を数える場合は、len(search()) ではなく search_count() を使用します
  • recordsets-batch-write — ループ内ではなく、レコードセット全体に対して write() を呼び出します
  • recordsets-batch-create — ループ内で create() を呼び出すのではなく、create([...]) にリストを渡します
  • recordsets-domain-operators — | と & は、後続する2つの条件に適用される前置演算子です
  • recordsets-sudo-comment — sudo() を使用する理由を説明するコメントを必ず追加します
  • recordsets-raw-sql-params — SQL 文字列をフォーマットせず、必ず %s のパラメーター化クエリを使用します
  • recordsets-no-commit — 業務コードで cr.commit() を呼び出してはいけません。トランザクションはフレームワークが管理します
  • recordsets-savepoint — 分離してロールバックするには cr.savepoint() を使用し、raw SQL で書き込んだ後は invalidate_all() を呼び出します
6. アクション(MEDIUM)
  • actions-window-menu — リーフの <menuitem> は必ず ir.actions.act_window レコードに紐付けます
  • actions-data-order — アクションはビューの XML で宣言し、メニューは別の menus.xml に記述して最後に読み込みます
  • actions-python-return — ビューやウィザードを開くには、Python メソッドからアクション辞書を返します
  • actions-cron-method — Cron メソッドには @api.model を付け、独自にエラーを処理させます
  • actions-server-binding — サーバーアクションを「アクション」ドロップダウンに追加するには binding_model_id を使用します
7. パフォーマンス(MEDIUM)
  • performance-prefetch — ORM のプリフェッチを活用し、レコード間のフィールド値を取り出すには mapped() を使用します
  • performance-no-loop-write — for ループ内で write() や create() を呼び出してはいけません
  • performance-index-searched-fields — search() のドメインや ORDER BY で使用するフィールドには index=True を追加します
  • performance-read-group — レコードセット全体を読み込むのではなく、集計には read_group() を使用します
  • performance-invalidate-after-sql — raw SQL で書き込みを行った後は、invalidate_model() を呼び出します
8. テスト(MEDIUM)
  • testing-setup-class — 共通のフィクスチャには setUpClass を使用し、完全な分離が必要な場合に限って setUp を使用します
  • testing-post-install-tag — テストには @tagged('post_install', '-at_install') を付けます
  • testing-constrains-coverage — すべての @api.constrains メソッドに対して、そのメソッドを実行するテストを用意します
  • testing-wizard-pattern — コンテキストを指定してウィザードを作成し、アクションメソッドを呼び出してテストします
  • testing-tour-js — UI ツアーは web_tour.tours レジストリに登録し、HttpCase でテストします
  • testing-bugfix-first — バグ修正には、その修正がなければ失敗するテストを含めます
  • testing-no-flaky — テスト内でデータを構築し、日付を固定し(freezegun)、外部サービスをモックし、最小権限のユーザーとしてテストします
  • testing-no-stale-env — サブテスト間でクラス属性にレコードをキャッシュしてはいけません。with_env() で再バインドします
9. ミックスイン(LOW)
  • mixins-mail-thread — チャターとアクティビティを使用するには、_inherit = ['mail.thread', 'mail.activity.mixin'] を追加します
  • mixins-tracking — チャターに変更を自動記録するには、フィールドに tracking=True を使用します
  • mixins-sequence — 自動採番には、フィールドの default= で ir.sequence と next_by_code() を使用します
  • mixins-portal — portal.mixin を使用する場合は _compute_access_url を実装します
  • mixins-message-post — チャターにプログラムからメッセージを投稿するには message_post() を使用します

使い方

詳しい説明、正しいコード例と誤ったコード例、注意点については、各スキルファイルを参照してください。

odoo-manifest.md
odoo-orm-models.md
odoo-orm-fields.md
odoo-orm-decorators.md
odoo-orm-recordsets.md
odoo-actions.md
odoo-performance.md
odoo-testing.md
odoo-mixins.md

各ファイルには以下が含まれています。

  • Odoo 17.0 で重要な理由
  • 説明付きの誤ったコード例(# ❌ WRONG)
  • 説明付きの正しいコード例(# ✅ CORRECT)
  • 判断フローと例外的なケース

完全版ドキュメント

すべてのルール、パターン、例を詳しくまとめた完全なガイド(グローバルなコーディングガイドラインとスキルのルーティング表を含む)については、AGENTS.md を参照してください。

コメント