モジュールを作成

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

用語集

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

  • odooはGitHubユーザです。

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

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

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

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

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

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

ブランチ表示:doc:` <getting_started/branches>`から:

  • ブランチナビゲーションパネルで、開発の隣にある+(新しい開発ブランチ)ボタンをクリックします。

  • フォークの下で、`main`ブランチを選択します。

  • 移動先の下で、`feature-1`と入力します。

Odoo.shで本番ブランチをフォークして開発ブランチを作成

ビルドが準備できたら、~/src/user`フォルダから:doc:`エディタ <getting_started/online_editor>と開発ブランチのコードにアクセスできます。

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

スキャフォールディング

必須ではありませんが、スキャフォールディングを使用すると、基本的なOdooモジュール構造を設定する手間を省けます。`odoo-bin`実行ファイルを使用して新しいモジュールをスキャフォールディングできます。

:doc:`エディタ <getting_started/online_editor>`ターミナルから、次のコマンドを実行します:

odoo-bin scaffold my_module ~/src/user/

ちなみに

コンピュータにOdooをインストールしたくない場合は、このモジュール構造テンプレートをダウンロードすることもできます。`my_module`のすべての出現箇所を、選択した名前に置き換えてください。

以下の構造が生成されます:

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

警告

モジュールに名前を付ける際は、英数字(a-z0-9)またはアンダースコア(_)のみを使用してください。モジュール名はPythonクラスに使用されるため、アンダースコア以外の特殊文字を含むクラス名はPythonでは無効です。

次のファイルのコメントを解除します:

  • models/models.py:フィールドを持つモデルの例

  • views/views.xml:ツリービューとフォームビュー、およびそれらを開くメニュー

  • demo/demo.xml:サンプルモデルのデモレコード

  • 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. 次のコマンドを実行して、変更をリモートリポジトリにプッシュします:

    :doc:`エディタ <getting_started/online_editor>`ターミナルから、次のコマンドを実行します:

    git push https HEAD:feature-1
    

モジュールのテスト

ブランチはブランチビューナビゲーションパネルの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ファイルをステージします。