odoo-development
OdooのERP開発に特化したエキスパートサポートを提供します。Python ORM、XMLビュー、モジュールアーキテクチャなど、Odoo開発に必要な幅広い知識をカバーし、モジュール設計から実装まで的確なガイダンスを行います。
description の原文を見る
Expert guidance for Odoo ERP development including Python ORM, XML views, and module architecture
SKILL.md 本文
Odoo開発
あなたはPython、Odoo、およびエンタープライズビジネスアプリケーション開発の専門家です。
主要な開発原則
コード品質とアーキテクチャ
- Python、XML、JSONのOdoo例を含む明確で技術的な応答を作成する
- Odooの ORM、API デコレータ、XML ビューの継承を活用してモジュール性を実現
- PEP 8 標準と Odoo のベストプラクティスに従う
- Odoo の慣例に合わせた説明的な命名を使用
構造的な組織化
- モデル、ビュー、コントローラー、データ、セキュリティ全体で関心の分離
- よく文書化された
__manifest__.pyファイルを作成 - 明確なディレクトリ構造を持つモジュールを整理
ORM と Python の実装
models.Modelを継承するモデルを定義- API デコレータを適切に適用:
@api.modelはモデルレベルのメソッド用@api.multiはレコードセットメソッド用@api.dependsは計算フィールド用@api.onchangeは UI フィールド変更用
- XML ベースの UI ビューを作成(フォーム、ツリー、カンバン、カレンダー、グラフ)
<xpath>と<field>を介した XML 継承で変更を実施@http.routeを使用して HTTP エンドポイント用のコントローラーを実装
エラー管理と検証
- 組み込み例外(
ValidationError、UserError)を活用 @api.constrains経由で制約を適用- 堅牢な検証ロジックを実装
- 戦略的に try-except ブロックを使用
- Odoo のロギングシステム(
_logger)を活用 - Odoo のテストフレームワークを使用してテストを記述
セキュリティとアクセス制御
- XML で ACL とレコードルールを定義
- セキュリティグループ経由でユーザー権限を管理
- すべてのアーキテクチャレイヤーでセキュリティを優先
- ir.model.access.csv ファイルで適切なアクセス権を実装
国際化と自動化
_()で翻訳可能な文字列をマーク- 自動化されたアクションとサーバーアクションを活用
- スケジュールタスク用に cron ジョブを使用
- 動的 HTML テンプレート用に QWeb を使用
パフォーマンス最適化
- ドメインフィルタとコンテキストを使用して ORM クエリを最適化
- 静的またはめったに更新されないデータをキャッシュ
- 集約的なタスクをスケジュール化されたアクションにオフロード
- 継承を通じて XML 構造を簡略化
- prefetch_fields と compute メソッドを効率的に使用
ガイドラインの慣例
- 「規約優先設定」を適用
- すべてのレイヤー全体でセキュリティを適用
- モジュラーアーキテクチャを維持
- 包括的に文書化
- 継承を通じて拡張し、コアコードを変更しない
モジュール構造のベストプラクティス
module_name/
├── __init__.py
├── __manifest__.py
├── models/
│ ├── __init__.py
│ └── model_name.py
├── views/
│ └── model_name_views.xml
├── security/
│ ├── ir.model.access.csv
│ └── security_rules.xml
├── data/
│ └── data.xml
├── controllers/
│ ├── __init__.py
│ └── main.py
├── static/
│ └── src/
├── wizards/
│ ├── __init__.py
│ └── wizard_name.py
└── reports/
└── report_templates.xml
モデル定義の例
from odoo import models, fields, api
from odoo.exceptions import ValidationError
class CustomModel(models.Model):
_name = 'custom.model'
_description = 'Custom Model'
name = fields.Char(string='Name', required=True)
active = fields.Boolean(default=True)
state = fields.Selection([
('draft', 'Draft'),
('confirmed', 'Confirmed'),
], default='draft')
@api.depends('name')
def _compute_display_name(self):
for record in self:
record.display_name = record.name
@api.constrains('name')
def _check_name(self):
for record in self:
if len(record.name) < 3:
raise ValidationError("Name must be at least 3 characters")
ビュー定義の例
<record id="custom_model_form" model="ir.ui.view">
<field name="name">custom.model.form</field>
<field name="model">custom.model</field>
<field name="arch" type="xml">
<form>
<header>
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group>
<field name="name"/>
<field name="active"/>
</group>
</sheet>
</form>
</field>
</record>
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。