Odoo連携ガイド SkyPlanner APSで生産スケジューリング
このガイドでは、Odooパートナー、開発者、IT責任者に向けて、Odoo ManufacturingとSkyPlanner APSの連携方法を解説します。導入効果やOdooのPlanボタンで既にできることについては、Odooの生産スケジューリングとOdooは設備や人員の実際の能力を考慮した生産スケジューリングに対応しているか?をご覧ください。
製品、部品表、工程、製造オーダー、在庫、原価計算の正本データは、引き続きOdooで管理します。SkyPlannerはそのデータを基にArcturusエンジンでスケジュールを作成し、Odooと次のように双方向で連携します。
- 製造オーダー、製造指図、BoMの工程、作業区、購買オーダーを取り込みます。
- 開始・終了予定日時と作業区を
mrp.workorderに書き戻します。 - 進捗と記録した作業時間を、OdooのTime Logsとして書き戻します。
- SkyPlannerのWebhookが、スケジュールの変更を発生時にプッシュ通知します。
SkyPlannerチームが導入支援の一環として、Odooの標準外部APIを使った連携を設定します。ご利用のバージョン、ホスティング環境、カスタマイズに合わせて構成し、本稼働後もサポートします。このガイドは、連携作業に参加したいパートナーや開発者、またはドキュメントが公開されているSkyPlannerのREST API(APIリファレンス)を使って自ら開発したい方を対象としています。製品、資材、購買オーダーの扱いについては、公開のSkyPlannerドキュメントで説明しています。
最初に確認すること:Odooのプランとホスティング環境
まず、お客様が利用しているOdooの環境を確認します。それによって連携方法が決まります。
| 利用環境 | 外部API | カスタムモジュール | 利用できる連携方法 |
|---|---|---|---|
| Odoo Online、One App FreeまたはStandard | 利用不可 | 利用不可 | CSV/XLSXを使うか、Customプランへ移行 |
| Odoo Online、Customプラン | 利用可 | 利用不可 | 外部API |
| Odoo.sh(Customプラン) | 利用可 | 利用可 | 外部API、必要に応じてモジュールを追加 |
| オンプレミス、CommunityまたはEnterprise | 利用可 | 利用可 | 外部API、必要に応じてモジュールを追加 |
OdooのAPIドキュメントには、外部APIへのアクセスは”only available on Custom Odoo pricing plans”(Customプランでのみ利用可能)とあり、One App FreeやStandardでは利用できません。また、料金ページでは、StandardはOdoo Onlineでホストされ、”without custom modules”(カスタムモジュールなし)と説明されています。開発の途中ではなく、初期ヒアリングの段階で確認してください。
Odooの連携方法
| 連携方法 | 対応バージョン | 認証 | スケジューリング連携での用途 |
|---|---|---|---|
External JSON-2 API:POST /json/2/<model>/<method> | 19.0で新規導入 | Authorization: bearer <key> にAPIキーを指定。X-Odoo-Database ヘッダーは任意 | 新規構築時の標準。読み取りには search_read、日時の書き戻しには write を使用 |
外部XML-RPC / JSON-RPC:/xmlrpc/2、/jsonrpc、サービスは common、object | 19.0まで対応。廃止予定 | ログイン名とパスワードまたはAPIキーで common.authenticate を実行後、execute_kw を使用 | 16.0〜18.0を利用する顧客に必要 |
| モジュール内のカスタムコントローラー | 全バージョン | ルートごとに設定。例:auth='bearer' | ペイロードをまとめ、製造オーダー(MO)と関連する製造指図を一回の呼び出しで取得 |
| 自動化ルール:「Send Webhook Notification」(Webhook通知を送信) | 17.0以降のドキュメントに記載 | 指定URLへのPOST送信 | 製造オーダーと製造指図の作成・編集時にプッシュ送信 |
| レコードのインポート(CSV、XLSX)とエクスポート | 全バージョン | ユーザーセッション | トライアル用データの取り込みと、マスタデータの単発の取り込み |
廃止への対応は今から計画してください。Odooは、Odoo 22(2028年秋)とOdoo Online 21.1(2027年冬)でXML-RPCとJSON-RPCを廃止する予定です。19.0ではJSON-2を使って構築し、旧バージョンのデータベース向けのRPC処理は一つのアダプターに集約してください。アップグレード時の変更を一か所に抑えられます。@route(type='jsonrpc') を使うカスタムコントローラーは、この廃止の影響を受けません。
認証
ManufacturingとInventoryへの読み取り権限、製造指図への書き込み権限を持つ連携専用ユーザーを作成します。Preferences > Account Security > New API Keyから、そのユーザーのキーを生成してください。19.0ではキーの有効期間が最長三か月のため、ミドルウェアにはキーのローテーションと認証失敗時のアラートが必要です。これらがないと、キーの期限切れによる同期停止に気づけません。SkyPlanner側のREST APIはJWTを使用するため、ミドルウェアで両方の認証情報を保持します。
JSON-2の各呼び出しは個別のSQLトランザクションで実行されるため、複数の呼び出しに分かれた書き込みはアトミックではありません。製造指図ごとに書き込み、それぞれの結果を記録してください。
イベント
Odooは自動化ルールを通じて変更をプッシュ送信します。mrp.production または mrp.workorder に対し、トリガーを「On create and edit」(作成・編集時)、アクションを「Send Webhook Notification」(Webhook通知を送信)に設定すると、選択したフィールドを含むPOSTが指定URLに送信されます。ルールはStudioで作成するか、開発者モードのAutomation Rulesフォームから作成します。インポートによる変更やルールで拾えなかった変更も取得できるよう、search_read による定期ポーリングを併用し、write_date を条件に変更を抽出してください。逆方向では、SkyPlannerのWebhookがスケジュールと状態の変更を発生時にプッシュ送信します。
フィールド名はバージョンによって異なります。19.0では、各データベースのモデル、フィールド、メソッドが /doc に一覧表示されます。旧バージョンでは fields_get を呼び出してください。記憶に頼らず、これらの情報を基にマッピングします。
データの対応付け:OdooからSkyPlannerへ
| Odooのモデル | SkyPlannerのオブジェクト | 連携方向 | 連携頻度 |
|---|---|---|---|
product.product / product.template (default_code, uom_id, qty_available) | 製品または資材 | Odoo → SkyPlanner | 初回取り込み後、毎日または変更時 |
mrp.bom (product_tmpl_id, product_qty, produce_delay), mrp.bom.line (product_id, product_qty, operation_id), mrp.bom.byproduct | 多階層の製品構成、工程ごとの資材所要量 | Odoo → SkyPlanner | 変更時 |
mrp.routing.workcenter(Operationsタブ:workcenter_id、sequence、time_mode、time_cycle_manual、blocked_by_operation_ids) | 工程とその順序・加工時間 | Odoo → SkyPlanner | 変更時 |
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids) | リソース、効率、段取り・後片付け、代替リソース | Odoo → SkyPlanner、その後はSkyPlannerで管理 | 初回取り込み時 |
mrp.workcenter.capacity (capacity) | サイクル当たりの生産数、製品別の段取り時間・後片付け時間 | Odoo → SkyPlanner | 初回取り込み時 |
resource.calendar, resource.calendar.attendance, resource.calendar.leaves | シフトと休暇 | Odoo → SkyPlanner | 初回取り込み時。休暇は変更時にも連携 |
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids) | 納期と優先度を含むオーダー | Odoo → SkyPlanner | 確定時のWebhookとポーリングを併用 |
mrp.workorder (operation_id, workcenter_id, duration_expected, state) | リソースに割り当てた作業 | Odoo → SkyPlanner | Webhookとポーリングを併用 |
stock.quant、stock.move(構成品の在庫移動) | 資材の制約を反映したスケジューリングに使う、手持在庫と資材所要量 | Odoo → SkyPlanner | 定期実行。例:15〜60分ごと |
purchase.order (partner_id, state), purchase.order.line (product_id, product_qty, date_planned, qty_received) | 購買オーダーと入荷予定資材。入荷予定日から使用可能として扱う | Odoo → SkyPlanner | 購買オーダーの確定・編集時のWebhookと、同じ定期ポーリングを併用 |
| 開始・終了予定日時とリソース | mrp.workorder.date_start, date_finished, workcenter_id | SkyPlanner → Odoo | スケジュール変更時にSkyPlannerのWebhookで連携 |
| Mobile Confirmations、作業時間記録 | mrp.workcenter.productivity(Time Logs:workcenter_id、workorder_id、date_start、date_end、loss_id) | SkyPlanner → Odoo | 実績報告ごと |
| 完了数量、工程の完了 | 製造指図の qty_producing を設定後、button_finish を実行。製造オーダーでは button_mark_done を実行 | SkyPlanner → Odoo、またはOdoo Shop Floorで処理 | 実績報告ごと |
連携パターン
まずマスタデータを取り込む
作業区とカレンダーを先に取り込み、続いて製品、BoM、作業区を参照する工程を取り込みます。30日間のトライアルでは、同じ一覧をCSVでエクスポートして取り込みます。Odooのインポート・エクスポートツールは、どのリストビューでも使えます。
オーダーを同期する
状態が confirmed または progress の製造オーダーを、関連する製造指図とともに取り込みます。ドラフトの製造オーダーは対象外にするか、仮の需要として扱います。独自のBOMを持つサブアセンブリは、個別の子製造オーダーとして取り込まれる場合があります。Odooは各製造オーダーを個別に計画します。これらをSkyPlannerの子製品にマッピングし、親製品の着手前にサブアセンブリが完成するようにしてください。
スケジュールを書き戻す
スケジュールが変わると、SkyPlannerのWebhookをきっかけに連携処理が動き、ORMの write メソッドを呼び出して、変更対象の各 mrp.workorder を更新します。Odoo 19.0では、製造指図ごとに一回、以下のJSON-2リクエストを送信します。
“ POST /json/2/mrp.workorder/write Authorization: bearer <api-key> {"ids": [4711], "vals": {"date_start": "2026-11-03 06:00:00", "date_finished": "2026-11-03 09:30:00", "workcenter_id": 7}} “
JSON-2は、ids と context に加え、各メソッド引数を名前で受け取ります。そのため、write(vals) の引数は vals キーとして渡します。16.0〜18.0では、同じ処理をXML-RPCまたはJSON-RPC経由で execute_kw(db, uid, key, 'mrp.workorder', 'write', [[4711], vals]) として呼び出します。16.0の日時キーは date_planned_start と date_planned_finished です。日時はUTCで送信します。書き戻しを正しく行うため、次のルールを守ってください。
- 両方の日時を同じ呼び出しで送信します。
- エンジンが代替設備を選んだ場合にのみ
workcenter_idを追加します。 - 書き込むのはスケジューリング用のフィールドだけにし、数量やBoMは決して変更しないでください。
日時を書き込むとOdoo側の作業区の予約枠も移動するため、Odooの計画ビューにSkyPlannerの計画が表示されます。
製造現場の実績をOdooへ返す。作業者はSkyPlanner Mobile Confirmationsで作業を記録します。連携処理は報告ごとに create を呼び出し、mrp.workcenter.productivity のレコードを作成します。JSON-2では、POST /json/2/mrp.workcenter.productivity/create に vals_list を渡します。workorder_id、workcenter_id、date_start、date_end と、loss_id(タイプはProductive)を設定すると、Odooに作業時間と原価が計上されます。
工程が完了すると、連携処理が生産数量を設定し、製造指図の button_finish を呼び出します。最後の製造指図が完了すると、製造オーダーは button_mark_done を実行できる状態になります。各実績報告は一度だけ登録し、OdooのレコードIDをSkyPlannerの作業時間記録とともに保持します。そのため、Webhookを再試行してもTime Logsのレコードが重複して作成されることはありません。
EnterpriseのShop Floorアプリを使う工場では、連携の向きが逆になります。SkyPlannerが製造指図の状態と qty_produced を読み取り、生産状況が変わるとAutopilotが自動で再スケジューリングします。
データの管理主体。本稼働前に、次の管理ルールを文書化してください。
| データ | 管理主体 |
|---|---|
| 製品、BoM、工程、数量、MOの状態 | Odoo |
| 製造指図の実行順序、開始・終了時刻、作業区の選択 | SkyPlanner |
| 段取り・切替時間のマトリクス、工具と作業者の要件、代替リソース | SkyPlanner |
| 作業区のカレンダーとTime Off | 要件定義で選定した一つのシステム |
| Time Logs、在庫、原価計算 | Odoo(SkyPlannerの実績報告を取り込む) |
SkyPlannerでスケジュールするMOについては、計画担当者はOdooのPlanとUnplanを操作しないようにします。操作すると、Odooが独自に作業枠を予約し、SkyPlannerで設定した日時を上書きしてしまいます。
一般的なプロジェクトの流れ
実装は通常、導入支援の開始から数週間以内に完了します。その前に、実際のOdooデータをCSVでエクスポートし、30日間の無料トライアルで使用します。プロジェクトには次の作業が含まれます。
- マスタデータのマッピング:バージョンごとのOdooモデルとフィールド(
/docまたはfields_getで確認)、計量単位、カレンダーとTime Offをどちらのシステムで管理するかを定義します。 - データの整備:作業区のカレンダー、Setup Time、Cleanup Timeを整備し、BoMの工程の所要時間をComputedではなくFixedに設定します。
- 初回取り込み:製品、カレンダー付きの作業区、BoMとその工程を取り込みます。
- 製造オーダーと購買オーダーの同期:確定済み・進行中の製造オーダーと関連する製造指図、および入荷予定日を含む
purchase.orderの明細を同期します。 - スケジュールの書き戻し:
mrp.workorderの日時と作業区を書き戻し、Odoo側でAPIキーをローテーションします。 - 製造現場からの実績報告:Time Logsと製造指図の完了をOdooに書き戻します。
- 現行計画と並行してテストを実施し、その後、本稼働に移行します。
Odooで注意すべき点
- 日時フィールドの名称変更。16.0までは、
date_planned_startとdate_planned_finishedに予定日時、date_start/date_finishedに実績日時が格納されていました。17.0以降は、date_startとdate_finishedが予定日時です。16.0のプロジェクトからマッピングを流用すると、17+では警告もなく実績を予定として読み取ってしまいます。 - 製造指図の日時は作業区の予約と連動。19.0では、
date_startとdate_finished(mrp.workorderのフィールド)は、作業区カレンダー上のresource.calendar.leavesレコード(leave_id)から計算されます。製造指図の日時を書き込むと、その予約が更新されます。このテーブルには絶対に直接書き込まないでください。 - 着手済みの製造指図があると計画解除できない。Odooでは「Some work orders have already started」(一部の製造指図がすでに開始されています)の状態では、製造オーダーの計画解除ができません。書き戻し時には
progressまたはdoneの製造指図を除外し、未着手のものだけを移動してください。 - 所要時間の変動。Computedに設定された工程は、直近の製造指図(デフォルトでは10件)を基に所要時間を算出し、Time Efficiencyで補正します。トライアル中はFixedに設定するか、入力値が変動することを前提にしてください。工程は各BoMに属し、共通の工順マスタはないため、BoMごとにデータの整備が必要です。
- カレンダーの不備。すべての作業区に稼働時間カレンダーが必要です。Odoo標準のスケジューラーは最大700日先まで検索し、枠が見つからないと”Impossible to plan the workorder”(製造指図を計画できません)と表示して停止します。初回取り込みの前にカレンダーを修正してください。
- 計量単位。
mrp.bom.lineには独自のproduct_uom_idがあり、製品の在庫単位と異なる場合があります。資材の利用可否を確認する前に単位を換算してください。
Odoo連携の設定を担当するのは
Odooの運用は工場ごとに異なります。BoMの工程、作業区のカレンダー、代替作業区、カスタムモジュールもそれぞれです。その環境に合わせてデータを正しく対応付けることに、SkyPlannerチームの専門知識が生きます。
- SkyPlannerチームが設定します。導入支援の際にお客様のOdoo環境に合わせて構成し、本稼働後もサポートします。連携にはSkyPlannerのREST APIとWebhook、OdooのJSON-2またはRPC APIを使用します。これが標準の進め方です。
- ご契約のOdooパートナーも参加できます。パートナーはお客様の環境やカスタムモジュールを把握しており、ドキュメントが公開されている同じREST APIを使って開発できます。このAPIはオーダー、製品、資材、工程、作業時間記録の読み書きに対応し、JWT認証を使用します。Swagger/OpenAPIのドキュメントも用意されています。
- 自社の開発者も同様に開発できます。通常はOdooと併用する小規模なミドルウェア、またはOdoo.shやオンプレミス環境のモジュールとして実装します。APIキーがあれば着手でき(連携チュートリアル)、必要に応じてSkyPlannerチームが支援します。
同じ方式は、ほかのERPとの連携でも本番運用されています。Laboratory & Alliedでは、社内ITチームがSkyPlannerの支援を受けながら、SAP Business Oneとの連携の大部分を自ら構築しました。UTUは、ERPのNetSuiteとSkyPlannerを併用しています。
連携が効果を生む理由
連携によって日々の業務で効果を得る鍵は、データの書き戻しです。これが稼働すると、次のことが実現します。
- Odooの製造指図に実行可能な日時を反映。Arcturus AIエンジンは未完了のすべての製造オーダーの作業順序を数秒で決定します。算出した日時とリソースの割り当て先が
mrp.workorderに反映され、Odooの計画画面に表示されます。 - 手作業での再計画が不要に。生産に変更が生じると、Autopilotが自動でスケジュールを組み直し、Webhookが新しい日時をOdooに送信します。
- 製造現場の実績まで連携。作業者はスマートフォンやタブレットでMobile Confirmations、Production Timer、Quick Log Modeを使って作業を記録します。Time Logsは在庫と原価計算のためにOdooへ送信されます。EnterpriseだけでなくCommunityでも、スケジューリングと作業の実行管理を一つのツールで行えます。
- Odooでは扱えない制約もスケジュールに反映。段取り時間マトリクスでは、製品の組み合わせごとに、作業順序に応じた段取り替え時間を設定します。工具は設備間で共有する有限のリソースとして扱い、一つの作業に複数の作業者を同時に割り当てることもできます。通常使う設備や人員が利用できない場合、エンジンは代替の設備や人員を選びます。
mrp.workorderに書き戻す日時は、これらすべての制約を満たしています。 - 資材の入荷に合わせた計画。手持ち在庫とOdooの未完了の購買オーダーを基に、資材の状況を反映したスケジュールを作成します。発注済みの部品はPOの納入日に使用可能とみなされ、POがDeliveredになると在庫が更新されます。各作業について、倉庫にある資材と入荷予定の資材を照合します。
連携作業に着手する前に、スケジュールを評価できます。CSVエクスポートを使って30日間の無料トライアルを始め、実際のOdooの製造指図をガントチャートで確認してください。最大20のワークステーションを利用でき、クレジットカードは不要です。料金は5つのワークステーションを含めて月額199 €から。月払いで、いつでも解約できます。連携費用はお客様の工程や要件に合わせ、ご利用プランとともに事前にお見積もりするため、開始前に総費用を把握できます。機能や導入事例をご覧いただくか、デモをご予約ください。
製造業のお客様によるSkyPlannerの評価
2 hを毎週削減
「SkyPlannerによって、当社の生産計画はExcelのスプレッドシートから、リアルタイムで生産を最適化する仕組みへと進化しました。」
Kalle Kalliomäki、サプライチェーンスペシャリスト
UTU · 配電盤・開閉装置
生産計画にかかる作業時間を毎週2時間削減し、新しい作業順序を数秒でラインに届けています。
+90%生産効率の向上
「生産効率が90%向上しました。」
Abdul Rucyinga、IT部門責任者
Laboratory & Allied · 医薬品製造
生産効率が90%向上。すべてのワークステーションを対象に、三か月分の最適化された計画を30分未満で作成できます。
1,000s件の製造指図を自動でスケジューリング
「生産をこれまでとは違う形で管理できるようになり、生産能力の把握もまったく別のレベルになりました。」
Hannu Ryynänen、CEO
Mamec · 産業用ミキサー、ポンプ、ハイテク製品の受託製造
数千件の製造指図を自動でスケジューリングし、組織全体で生産状況をリアルタイムに把握できます。
99.2%納期遵守率
「SkyPlannerのおかげでボトルネックが見えるようになり、生産管理が明確になりました。」
Toni Tuori、生産管理責任者
Piristeel · 屋根用安全設備・雨水排水システム
今年の納期遵守率は99.2%に達し、スケジューリングによって一日あたり最大四時間の業務時間を削減しています。
よくある質問
Odoo Onlineでも連携できますか?
Customプランであれば、外部API経由で連携できます。One App FreeとStandardでは外部APIを利用できず、Standardではカスタムモジュールも使えないため、これらのプランではCSV/XLSXのインポートとエクスポートに限られます。
JSON-2とXML-RPCのどちらを使うべきですか?
Odoo 19.0以降ではJSON-2を使います。16.0から18.0では引き続きXML-RPCとJSON-RPCが必要ですが、どちらもOdoo 22で廃止される予定です。
スケジュールはどのようにOdooに書き戻されますか?
ORMの write メソッドを使い、各 mrp.workorder に書き戻します。19.0では POST /json/2/mrp.workorder/write に ids と vals を渡します。16.0〜18.0では、XML-RPCまたはJSON-RPC経由で execute_kw を使い、write を呼び出します。書き戻す値は date_start、date_finished(16.0では date_planned_start と date_planned_finished)、および変更があった場合の workcenter_id です。これに連動してOdooの作業区予約も移動するため、Odooの計画画面にSkyPlannerの日時が表示されます。
作業者が登録した実績はどのようにOdooに反映されますか?
Time Logsとして反映されます。連携処理が、製造指図に紐づく mrp.workcenter.productivity レコードを、開始・終了日時とProductiveのロス理由で作成します。工程が完了したら button_finish を呼び出します。各実績報告は一度だけ登録されるため、再試行しても作業時間が重複計上されることはありません。
本稼働後は誰が連携を保守しますか?
SkyPlannerチームが導入時に連携を設定し、本稼働後もサポートします。Odooの設定変更に伴う連携の変更にも対応します。パートナーや社内の開発者が連携を構築する場合は、REST APIの仕様書とSkyPlannerのドキュメントに基づいて開発し、必要に応じてSkyPlannerチームが支援します。
すでに開始した製造指図はどう扱われますか?
書き戻し時には変更しません。Odooでは、製造指図が進行中または完了済みになると、そのMOの計画を解除できません。SkyPlannerは状態と進捗を読み取り、それらを動かさずに残りの作業をスケジューリングします。
Odooとの連携にはどのくらいの期間がかかりますか?
通常、導入支援の開始から数週間以内に実装が完了します。まずはCSVでエクスポートしたデータを使って30日間のトライアルを行えば、API連携の開発に着手する前に、自社のOdooデータでスケジュールを検証できます。