mcpField
O
odoo-development

odoo-development

github.com/mindrally開発2872.3k 回インストール3 週間前に更新
リポジトリ

odoo-development について

企業向け業務アプリケーションを構築・拡張する開発者向けのOdoo開発スキルです。モジュール型のPython・XML開発、ORM、セキュリティ、テスト、国際化、性能を扱います。

主な機能

  1. 01Odooのモジュール型アーキテクチャ
  2. 02ORMとPythonの実践
  3. 03XMLビューと継承
  4. 04アクセス制御と検証
  5. 05テストと性能の指針

活用シーン

  1. 01Odooモジュールの構築や拡張
  2. 02モデル、ビュー、コントローラーの実装
  3. 03モジュールのセキュリティと性能の確認

インストール

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

$npx skills add https://github.com/mindrally/skills --skill odoo-development

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

詳細

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
    • UI のフィールド変更には @api.onchange
  • XML ベースの UI ビュー(フォーム、ツリー、カンバン、カレンダー、グラフ)を作成します
  • <xpath> と <field> による XML 継承を使用して変更を加えます
  • HTTP エンドポイントには @http.route を使用してコントローラーを実装します

エラー管理と検証

  • 組み込みの例外(ValidationError、UserError)を活用します
  • @api.constrains によって制約を適用します
  • 堅牢な検証ロジックを実装します
  • try-except ブロックを戦略的に使用します
  • Odoo のロギングシステム(_logger)を活用します
  • Odoo のテストフレームワークを使用してテストを作成します

セキュリティとアクセス制御

  • ACL とレコードルールを XML で定義します
  • セキュリティグループを通じてユーザー権限を管理します
  • すべてのアーキテクチャレイヤーでセキュリティを最優先します
  • ir.model.access.csv ファイルで適切なアクセス権を実装します

国際化と自動化

  • 翻訳可能な文字列に _() を付けます
  • 自動化アクションとサーバーアクションを活用します
  • スケジュールタスクには cron ジョブを使用します
  • 動的な HTML テンプレートには QWeb を使用します

パフォーマンスの最適化

  • ドメインフィルターとコンテキストで ORM クエリーを最適化します
  • 静的データや更新頻度の低いデータをキャッシュします
  • 負荷の高いタスクをスケジュールアクションに委ねます
  • 継承を利用して XML 構造を簡素化します
  • prefetch_fields と計算メソッドを効率的に使用します

基本方針

  1. 「設定より規約」を適用します
  2. すべてのレイヤーでセキュリティを徹底します
  3. モジュール型アーキテクチャを維持します
  4. 包括的に文書化します
  5. コアコードを変更せず、継承によって拡張します

モジュール構成のベストプラクティス

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>

コメント