モジュールを作成¶
最初のモジュールを作成する前に、Odoo.shプロジェクトを作成し、GitHubリポジトリのURLを把握しておく必要があります。
用語集
~/srcはOdooプロジェクトに関連するGitリポジトリが配置されているディレクトリです。odooはGitHubユーザです。odoo-addonsはGitHubリポジトリです。feature-1は開発ブランチの名前です。mainは本番ブランチの名前です。my_moduleはモジュールの名前です。
必要に応じて置き換えてください。
開発ブランチを作成します。¶
ブランチ表示:doc:` <getting_started/branches>`から:
ビルドが準備できたら、~/src/user`フォルダから:doc:`エディタ <getting_started/online_editor>と開発ブランチのコードにアクセスできます。
次のコマンドを実行して、GitHubリポジトリをコンピュータにクローンします:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
次のコマンドを実行して新しいブランチを作成します:
git checkout -b feature-1 main
モジュール構成を作成する¶
スキャフォールディング¶
必須ではありませんが、スキャフォールディングを使用すると、基本的なOdooモジュール構造を設定する手間を省けます。`odoo-bin`実行ファイルを使用して新しいモジュールをスキャフォールディングできます。
:doc:`エディタ <getting_started/online_editor>`ターミナルから、次のコマンドを実行します:
odoo-bin scaffold my_module ~/src/user/
コンピュータにOdooがインストールされている場合は、次のコマンドを実行します:
./odoo-bin scaffold my_module ~/src/odoo-addons/
ちなみに
コンピュータに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-z、0-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チュートリアルに従って、モジュールの構造と各ファイルの内容を理解してください。
開発ブランチにプッシュする¶
次を実行してコミットする変更をステージングします:
git add my_module
次を実行して変更をコミットします:
git commit -m "My first module"次を実行してリモートリポジトリに変更をプッシュします:
:doc:`エディタ <getting_started/online_editor>`ターミナルから、次のコマンドを実行します:
git push https HEAD:feature-1
次を実行します:
git push -u origin feature-1
最初のプッシュ時のみ
-u origin feature-1を指定する必要があります。その後は次を実行します:git push
モジュールをテストする¶
ブランチはブランチビューナビゲーションパネルの開発セクションに表示されます。
ブランチ名をクリックして、プッシュした変更を含む履歴を表示します。データベースの準備ができたら、接続をクリックしてアクセスします。
Odoo.shプロジェクトがモジュールを自動的にインストールするように設定されている場合、データベースダッシュボードに直接表示されます。それ以外の場合は、アプリアプリでインストール可能になります。
本番データでテストする¶
注釈
この手順には本番データベースが必要です。まだない場合は作成してください。
デモデータを使用して開発ビルドでモジュールをテストし、準備ができたと判断したら、ステージングブランチを使用して本番データで試すことができます。
以下のことができます:
開発ブランチをステージングブランチに変換するには、Stagingセクションにドラッグ&ドロップします。
既存のステージングブランチにマージするには、そのブランチにドラッグ&ドロップします。
git mergeコマンドを使用してブランチをマージします。
これにより、本番データベースを複製し、ブランチの最新の変更を適用したサーバー上で実行する新しいステージングビルドが作成されます。
データベースの準備ができたら、Connectをクリックしてアクセスします。
モジュールをインストール¶
Appsアプリからモジュールをインストールします。モジュールがアプリのリストに直接表示されない場合は、developer modeを有効にしてをクリックし、アプリのリストを更新します。
注釈
ステージングビルドの目的は、本番データベースと同じように変更の動作をテストすることであるため、モジュールは自動的にインストールされません。
本番環境でデプロイする¶
本番データを使用してステージングブランチでモジュールをテストし、本番環境に対応できると判断したら、次の方法でブランチを本番ブランチにマージできます:
ステージングブランチを本番ブランチにドラッグ&ドロップします。
git mergeコマンドを使用してブランチをマージします。
これにより、ステージングブランチの最新の変更が本番ブランチにマージされ、本番サーバーが更新されます。
データベースの準備ができたら、Connectをクリックしてアクセスします。
モジュールをインストール¶
Appsアプリからモジュールをインストールします。モジュールがアプリのリストに直接表示されない場合は、developer modeを有効にしてをクリックし、アプリのリストを更新します。
変更を追加¶
このセクションでは、モデルに新しいフィールドを追加し、デプロイすることで、モジュールに変更を加える方法を説明します。
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())
views/views.xmlファイルを開き、次の後に:<field name="value2"/>
追加します:
<field name="start_datetime"/>
これらの変更は、テーブルに列を追加し、ビューを変更することで、データベース構造を変更します。本番データベースなどの既存のデータベースに適用するには、モジュールを更新する必要があります。変更をプッシュしたときにOdoo.shプラットフォームによって自動的に更新を実行したい場合は、
__manifest__.pyを開いて次を置き換え、マニフェストのモジュールバージョンを上げます:'version': '0.1',
で:
'version': '0.2',
プラットフォームはバージョンの変更を検出し、新しいリビジョンのデプロイ時にモジュールの更新をトリガーします。
次に、変更をプッシュします。
変更をテストしたら、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>`_ を使用するには:
リポジトリのルートフォルダに
requirements.txtファイルを作成します:Odoo.sh エディターから、
~/src/user/requirements.txtファイルを作成して開きます。コンピューターから、
~/src/odoo-addons/requirements.txtファイルを作成して開きます。
ファイルに追加:
unidecode
これで、モジュール内でライブラリを使用できます。例えば、モデルの name フィールドの文字からアクセントを削除できます。そのためには、
models/models.pyファイルを開き、次の前に:from odoo import models, fields, api
追加します:
from unidecode import unidecode
後:
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)
モジュールのマニフェスト
__manifest__.pyを編集して、モジュールのバージョンを上げることで Python 依存関係をインストールします。次に、変更をプッシュします。
ちなみに
git add requirements.txtを実行して、requirements.txtファイルをステージングします。