モジュールを作成

最初のモジュールを作成する前に、Odoo.shプロジェクトを作成し、GitHubリポジトリのURLを知っておく必要があります。

用語集

  • ~/srcはOdooプロジェクトに関連するGitリポジトリが配置されているディレクトリです。

  • odooはGitHubユーザです。

  • odoo-addonsはGitHubリポジトリです。

  • feature-1は開発ブランチの名前です。

  • mainは本番ブランチの名前です。

  • my_moduleはモジュールの名前です。

必要に応じてこれらを置き換えてください。

開発ブランチを作成します。

From the Branches view:

  • In the branches navigation panel, click the + (New development branch) button next to Development.

  • Under Fork, select the main branch.

  • Under To, enter feature-1.

Forking the production branch to create a development branch on Odoo.sh

Once the build is ready, you can access the editor and the code of your development branch from the folder ~/src/user folder.

モジュール構成を作成する

Scaffolding

While it is not required, scaffolding avoids the tedium of setting the basic Odoo module structure. You can scaffold a new module using the odoo-bin executable.

From the editor terminal, run:

odoo-bin scaffold my_module ~/src/user/

ちなみに

If you do not want to install Odoo on your computer, you can also download this module structure template. Replace every occurrence of my_module with the name of your choice.

The structure below will be generated:

my_module
├── __init__.py
├── __manifest__.py
├── controllers
│   ├── __init__.py
│   └── controllers.py
├── demo
│   └── demo.xml
├── models
│   ├── __init__.py
│   └── models.py
├── security
│   ├── ir.model.access.csv
│   └── models.py
└── views
    ├── templates.xml
    └── views.xml

警告

Only use alphanumeric characters (a-z, 0-9) or underscores (_) when naming your module, as its name is used for Python classes, and class names containing special characters other than underscores are not valid in Python.

Uncomment the following files:

  • models/models.py an example of a model with its fields

  • views/views.xml a tree and a form view, with the menus opening them

  • demo/demo.xml demo records for the example model

  • controllers/controllers.pyはルートを実装するコントローラーの例

  • views/templates.xmlはコントローラールートで使用される2つのqwebビューの例

  • __manifest__.pyはモジュールのマニフェストで、タイトル、説明、読み込むデータファイルが含まれています。アクセス制御リストのデータファイルのコメントを解除してください:

    # 'security/ir.model.access.csv',
    

手動

モジュール構造を手動で作成するには、Server framework 101チュートリアルに従って、モジュールの構造と各ファイルの内容を理解してください。

開発ブランチにプッシュ

  1. 次のコマンドを実行して、コミットする変更をステージングします:

    git add my_module
    
  2. 次のコマンドを実行して、変更をコミットします:

    git commit -m "My first module"
    
  3. 次のコマンドを実行して、変更をリモートリポジトリにプッシュします:

モジュールのテスト

ブランチはブランチビューナビゲーションパネルのDevelopmentセクションに表示されます。

開発ブランチの例

ブランチ名をクリックすると、プッシュした変更を含む履歴が表示されます。データベースの準備ができたら、Connectをクリックしてアクセスします。

データベースにアクセスするための接続ボタン

Odoo.shプロジェクトがモジュールを自動的にインストールするように設定されている場合は、データベースのダッシュボードに直接表示されます。それ以外の場合は、Appsアプリでインストール可能です。

データベースダッシュボード上の新しいモジュール

本番データでテストする

注釈

このステップには本番データベースが必要です。まだない場合は作成してください。

デモデータを使用した開発ビルドでモジュールをテストし、準備ができたと判断したら、ステージングブランチを使用して本番データで テストできます。

以下が可能です:

  • 開発ブランチをステージングブランチに変換するには、ステージングセクションにドラッグ&ドロップします。

  • 既存のステージングブランチに統合するには、そのブランチにドラッグ&ドロップします。

  • git mergeコマンドを使用してブランチを統合します。

これにより、本番データベースを複製し、ブランチの最新変更で更新されたサーバ上で実行する新しいステージングビルドが作成されます。

データベースの準備ができたら、接続をクリックしてアクセスします。

モジュールをインストール

アプリアプリからモジュールをインストールします。モジュールがアプリ一覧に直接表示されない場合は、開発者モードを有効にして:menuselection:アプリ一覧を更新 --> 更新をクリックし、アプリ一覧を更新します。

注釈

ステージングビルドの目的は、本番データベース上での動作と同様に変更の動作をテストすることであるため、モジュールは自動的にインストールされません。自動的にモジュールがインストールされることは望ましくありません。

本番環境でデプロイする

本番データを使用してステージングブランチでモジュールをテストし、本番環境に対応できると判断したら、次の方法でブランチを本番ブランチに統合できます:

  • ステージングブランチを本番ブランチにドラッグ&ドロップする。

  • git mergeコマンドを使用してブランチを統合する。

これにより、ステージングブランチの最新変更が本番ブランチに統合され、本番サーバがそれらの変更で更新されます。

データベースの準備ができたら、接続をクリックしてアクセスします。

モジュールをインストール

アプリアプリからモジュールをインストールします。モジュールがアプリ一覧に直接表示されない場合は、開発者モードを有効にして:menuselection:アプリ一覧を更新 --> 更新をクリックし、アプリ一覧を更新します。

変更を追加

このセクションでは、モデルに新しいフィールドを追加してデプロイすることにより、モジュールに変更を加える方法について説明します。

  1. エディタまたはコンピュータから、モジュールフォルダ:file:~/src/odoo-addons/my_moduleを開き、models/models.pyファイルを開いて編集します。description フィールドの後に:

    description = fields.Text()
    

    datetime フィールドを追加します:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    
  2. views/views.xmlファイルを開き、次の後に:

    <field name="value2"/>
    

    以下を追加します:

    <field name="start_datetime"/>
    
  3. これらの変更は、テーブルに列を追加し、ビューを変更することで、データベース構造を変更します。本番データベースなどの既存のデータベースに適用するには、これらの変更にはモジュールの更新が必要です。変更をプッシュする際に Odoo.sh プラットフォームで自動的に更新を実行したい場合は、__manifest__.pyを開いてマニフェスト内のモジュールのバージョンを上げ、次の部分を置き換えます:

    'version': '0.1',
    

    次の項目:

    'version': '0.2',
    

    プラットフォームはバージョンの変更を検出し、新しいリビジョンのデプロイ時にモジュールの更新をトリガーします。

  4. 次に変更をプッシュします。

  5. 変更をテストした後、Odoo.shインターフェースでブランチを本番ブランチにドラッグ&ドロップするなどして、本番ブランチにマージできます。マニフェストでモジュールのバージョンを上げた場合、プラットフォームは自動的にモジュールを更新し、新しいフィールドがすぐに利用可能になります。それ以外の場合は、アプリ一覧内で手動でモジュールを更新できます。

外部Pythonライブラリを使用する

デフォルトでインストールされていない外部Pythonライブラリを使用したい場合は、モジュールが依存する外部ライブラリを一覧表示したrequirements.txtファイルを定義できます。プラットフォームは、このファイルを使用してプロジェクトに必要なPythonライブラリを自動的にインストールします。

注釈

  • Odoo.shデータベースにシステムパッケージ (aptパッケージなど) をインストールまたはアップグレードすることはできません。ただし、特定の条件下では、`パッケージのインストールを検討できます<https://www.odoo.sh/faq#install_dependencies>`_。これは、コンパイルにシステムパッケージを必要とするPythonモジュールやサードパーティのOdooモジュールにも適用されます。

  • PostgreSQL拡張機能はOdoo.shでサポートされていないため、Odoo.shデータベースに拡張機能 (PostGIS、ltreeなど) をインストールすることはできません。

たとえば、モジュールで `Unidecodeライブラリ<https://pypi.org/project/Unidecode>`_ を使用するには:

  1. リポジトリのルートフォルダにrequirements.txtファイルを作成します:

    • Odoo.shエディターから、~/src/user/requirements.txtファイルを作成して開きます。

    • コンピューターから、~/src/odoo-addons/requirements.txtファイルを作成して開きます。

  2. ファイルに追加:

    unidecode
    
  3. これで、モジュール内でライブラリを使用できます。たとえば、モデルのnameフィールドの文字からアクセント記号を削除できます。そのためには、models/models.pyファイルを開き、変更前:

    from odoo import models, fields, api
    

    以下を追加します:

    from unidecode import unidecode
    
  4. 変更後:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    

    以下を追加します:

    @api.model
    def create(self, values):
        if 'name' in values:
            values['name'] = unidecode(values['name'])
        return super(my_module, self).create(values)
    
    def write(self, values):
        if 'name' in values:
            values['name'] = unidecode(values['name'])
        return super(my_module, self).write(values)
    
  5. モジュールのマニフェスト__manifest__.pyを編集して、モジュールのバージョンを上げることでPython依存関係をインストールします。

  6. 次に変更をプッシュします。

    ちなみに

    git add requirements.txt を実行してrequirements.txtファイルをステージします。