モジュールを作成

最初のモジュールを作成する前に、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
    

モジュールをテストする

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

開発ブランチの例

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

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

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

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

本番データでテストする

注釈

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

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

以下のことができます:

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

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

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

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

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

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

Appsアプリからモジュールをインストールします。モジュールがアプリのリストに直接表示されない場合は、developer modeを有効にしてUpdate Apps List ‣ Updateをクリックし、アプリのリストを更新します。

注釈

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

本番環境でデプロイする

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

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

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

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

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

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

Appsアプリからモジュールをインストールします。モジュールがアプリのリストに直接表示されない場合は、developer modeを有効にしてUpdate Apps List ‣ Updateをクリックし、アプリのリストを更新します。

変更を追加

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

  1. editorまたはコンピューターから、モジュールフォルダ~/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ファイルをステージングします。