初めてのモジュール

概要

この章では、Odooモジュールを初めて作成し、Odoo.shプロジェクトにデプロイする方法を説明します。

This tutorial requires you created a project on Odoo.sh, and you know your Github repository's URL.

GitとGithubの基本的な使い方が説明されています。

以下の仮定が成り立ちます:

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

  • odoo はGithubのユーザです。

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

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

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

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

これらの値を、好きな値に置き換えて下さい。

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

Odoo.shより

ブランチビューで:

  • 開発ステージの横にある + ボタンをクリックします。

  • Fork 選択で master ブランチを選択します。

  • 宛先 入力フィールドに feature-1 と入力します。

    pic1 pic2

ビルドが作成されたら、エディタにアクセスし、~/src/user フォルダに移動すると、開発ブランチのコードにアクセスできます。

../../_images/firstmodule-development-editor.png ../../_images/firstmodule-development-editor-interface.png

コンピューターから

GitHubのリポジトリをパソコンにクローンします:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

新規ブランチを作成する:

$ git checkout -b feature-1 master

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

モジュールのスキャフォールディング

必須ではありませんが、スキャフォールディングにより、Odooの基本モジュール構造を設定する面倒な作業を回避できます。実行可能ファイル odoo-bin を使用して、新しいモジュールにスキャフォールディングできます。

Odoo.shエディタから、端末で:

$ odoo-bin scaffold my_module ~/src/user/

Or, from your computer, if you have an installation of 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
└── views
    ├── templates.xml
    └── views.xml

警告

モジュール名には、アンダースコア( _ ) 以外の特殊文字を使用しないでください。ハイフン( - ) も使用できません。この名前は、モジュールの 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"

リモートリポジトリに変更をプッシュする

Odoo.shエディタ端末から:

$ git push https HEAD:feature-1

The above command is explained in the section Commit and push changes of the Online editor page. It includes the explanation regarding the fact you will be prompted to type your username and password, and what to do if you use the two-factor authentication.

または、パソコンの端末から:

$ git push -u origin feature-1

最初のプッシュのみ、-u origin feature-1 を指定する必要があります。 それ以降、パソコンからの今後の変更をプッシュするには、単に

$ git push

モジュールをテストする

プロジェクト内の開発ブランチに、あなたのブランチが表示されるはずです。

../../_images/firstmodule-test-branch.png

プロジェクトのブランチビューで、左側のナビゲーションパネルにあるブランチ名をクリックすると、そのブランチの履歴にアクセスできます。

../../_images/firstmodule-test-branch-history.png

設定したコメントを含め、先ほどプッシュした変更がここで確認できます。データベースが準備できたら、接続 ボタンをクリックしてアクセスできます。

../../_images/firstmodule-test-database.png

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

その後、モジュールをいろいろと操作し、新しいレコードを作成し、機能やボタンをテストすることができます。

本番データでテストする

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

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

いずれかが可能です:

  • 開発ブランチをステージングブランチにするには、それを ステージング セクションタイトルにドラッグ&ドロップします。

    ../../_images/firstmodule-test-devtostaging.png
  • 指定のステージングブランチにドラッグ&ドロップして、既存のステージングブランチにマージします。

    ../../_images/firstmodule-test-devinstaging.png

ブランチをマージするには、git merge コマンドも使用できます。

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

../../_images/firstmodule-test-mergedinstaging.png

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

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

モジュールは自動的にインストールされません。アプリメニューからインストールする必要があります。 実際、ステージングビルドの目的は、本番環境で変更がどのように動作するかをテストすることです。本番環境では、モジュールを自動的にインストールするのではなく、必要に応じてインストールしたいでしょう。

また、インストールするアプリにモジュールが直接表示されない場合もあります。その場合は、まずアプリのリストを更新する必要があります:

  • 開発者モード を有効化します

  • アプリメニューで、アプリリストを更新 ボタンをクリックします。

  • 表示されるダイアログで、更新 ボタンをクリックします。

    ../../_images/firstmodule-test-updateappslist.png

すると、モジュールが利用可能なアプリのリストに表示されます。

../../_images/firstmodule-test-mymoduleinapps.png

本番環境でデプロイする

ステージングブランチでプロダクトデータを使用してモジュールをテストし、本番環境での使用に問題がないと判断できたら、ステージングブランチを本番ブランチにマージすることができます。

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

../../_images/firstmodule-test-mergeinproduction.png

ブランチをマージするには、git merge コマンドも使用できます。

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

../../_images/firstmodule-test-mergedinproduction.png

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

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

モジュールは自動的にはインストールされません。、 :ref:` ステージングデータベースにモジュールをインストールする方法 <odoosh-gettingstarted-firstmodule-productiondata-install>` について上記のセクションで説明されているように、手動でインストールする必要があります。

変更を追加

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

Odoo.shエディタから、
  • モジュールフォルダ ~/src/user/my_module に移動します。

  • ファイル models/models.py を開きます。

またはコンピューターから、
  • お好みのファイルブラウザを使用して、モジュールフォルダ ~/src/odoo-addons/my_module に移動します。

  • 次に、AtomSublime TextPyCharmvim などお好みのエディタを使用して、models/models.py ファイルを開きます。

次に、説明フィールドの後

description = fields.Text()

日付時間フィールドを追加する

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',

プラットフォームは、バージョンの変更を検知し、新しいリビジョンが展開された際にモジュールの更新をトリガします。

Gitフォルダに移動します。

次に、Odoo.sh端末から:

$ cd ~/src/user/

または、パソコンの端末から:

$ cd ~/src/odoo-addons/

次に、コミットする変更をステージします

$ git add my_module

変更をコミットする

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

変更をプッシュする:

Odoo.sh端末から:

$ git push https HEAD:feature-1

または、パソコンの端末から:

$ git push

次に、プラットフォームはブランチ feature-1 用の新しいビルドを作成します。

../../_images/firstmodule-test-addachange-build.png

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

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

デフォルトではインストールされていない外部Pythonライブラリを使用したい場合は、モジュールが依存する外部ライブラリを列挙した requirements.txt ファイルを定義することができます。

注釈

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

  • PostgreSQL 拡張機能 は、Odoo.sh ではサポートされません。

  • 詳しくは FAQ をご覧下さい。

このファイルを使用して、プロジェクトに必要なPythonライブラリを自動的にインストールします。

このセクションでは、モジュール内の Unidecode ライブラリ を使用してこの機能について説明します。

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

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

またはパソコンからファイル ~/src/odoo-addons/requirements.txt を作成して開きます。

追加

unidecode

次に、例えばモデルの名前フィールドの文字からアクセント記号を削除するなど、モジュール内のライブラリを使用します。

ファイル 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)

Pythonの依存関係を追加すると、プラットフォームにインストールするためにモジュールバージョンを上げる必要があります。

モジュールマニフェスト __manifest__.py を編集します。

置き換える

'version': '0.2',

と:

'version': '0.3',

変更をステージしてコミットします:

$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"

そして、変更をプッシュします:

Odoo.sh ターミナル内で:

$ git push https HEAD:feature-1

パソコン端末で:

$ git push