mcpField
O
odoo-demo-csv

odoo-demo-csv

github.com/odoo-psマーケティング・グロース075 回インストール9 週間前に更新
リポジトリ

odoo-demo-csv について

営業担当者向けに、企業サイトや業種情報を基に Odoo のデモ用データを CSV で作成し、接続先データベースへインポートして結果を確認するスキルです。実在する製品情報と架空の連絡先を使い、データベースのバージョンに応じて項目を確認します。実行は `SUMMARY:` 行で終了します。

主な機能

  1. 01対象企業と実在製品の調査
  2. 02指定規模に応じた関連データ作成
  3. 03Odoo インポート用 CSV の作成
  4. 04odoo-crud によるデータと画像の登録
  5. 05レコードと在庫数の読み戻し確認

活用シーン

  1. 01営業デモ用 Odoo データの準備
  2. 02企業サイトに基づく製品カタログ作成
  3. 03顧客・仕入先・リードのサンプル作成
  4. 04インポート後の在庫数と件数の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/odoo-ps/odoo-feeder --skill odoo-demo-csv

インストール後、Claude Code で/odoo-demo-csvを入力して読み込まれたか確認します。

同梱ファイルODOO-TRAPS.md

詳細

Odoo デモデータ

営業担当者が会社名とそのウェブサイト、または業種だけを指定し、データセットのサイズを伝えます。対象を調査し、Odoo にインポートできる CSV を作成して、接続済みのデータベースにインポートし、結果を検証します。最後に SUMMARY: 行を出力するまで、すべてを一連の処理として行います。

以下の 2 つの言葉が、すべての手順の指針です。

事実に基づくこと — すべてのレコードは、対象サイトで確認した情報に基づいています。実在する商品名、実際の価格、実際の写真を使います。サイトに情報がなければ、こちらでも記載しません。価格は 0.00、画像なしとし、データが乏しかったことを示す一文を添えます。架空の商品を使ってデモを作成することは、この処理で取り返しのつかない唯一の失敗です。

状況を伝えること — 各手順の前に、これから行うことを一行で伝えます。odoo-crud を呼び出すたびに、その後に結果を一行で伝えます(「パートナーを 25 件インポートしました」「プレビューで不正な列が 1 つ見つかったため修正します」など)。営業担当者が目にするのはこの出力だけであり、処理のほかの内容は見えません。

実在の人物を使わないこと — 作成する顧客、ベンダー、リードはすべて架空の人物または会社にします。事実に基づく情報を使うのは対象企業そのもの(実際の商品、価格、写真)に限り、従業員や顧客の連絡先情報には使いません。架空の連絡先が実在する人物や会社に似ないようにし、メールアドレスや電話番号から実在する会社(対象企業自体も含む)が推測できないようにします。メールアドレスには、名前から実在性を判別できない予約済みドメインのみを使います(example.com/example.org/example.net のみ。@<company>-demo.test のように実在の名前を含むものや、その変形は使いません)。電話番号には、フィクション用に予約された範囲(例:+1 555 0100~0199、または各国の公式なドラマ・架空番号用ブロック)を使い、実際の加入者に割り当てられる範囲は使いません。このルールは、例外なく、あらゆるモデルで作成するすべての email/phone/mobile 列に適用されます。対象企業の res.company または res.partner レコードも例外ではありません。

ツール

odoo-crud <command> [options] は XML-RPC 経由で Odoo に接続します。使用できるシェルコマンドはこれだけで、認証情報は環境変数から読み込みます。

  • ブロッキング — install-modules を含むすべての呼び出しは、処理が完了してから戻ります。そのまま次のコマンドを実行してください。待機やポーリングは不要です。
  • すべての呼び出しは JSON {"ok": true|false, ...} を出力します。次に進む前に ok を確認してください。
  • odoo-crud <command> --help はフラグのリファレンスです。--domain、--values、--args、--context、--filter の正確な JSON 形式はここに記載されています。形式を推測せず、確認してください。

CSV の作成には手元のファイルツールを、調査にはブラウジングツールを使ってください。odoo-crud 以外のシェルは使えません。CSV をチャットに書き込んでも、その後実行してファイルを生成しようとするスクリプトに書き込んでも、どちらも機能しません(ファイルを生成する実行処理はブロックされます)。ファイルツールを使って CSV の内容を直接書き込んでください。

呼び出しが失敗した場合、存在すると分かっているレコードが見つからない場合、またはインポート成功後に数値がゼロになっている場合、その原因はたいてい ODOO-TRAPS.md にまとめられた Odoo の挙動です。まず内容を確認してください。

実行

1. 対象を調査する

サイトを閲覧し、業種、実在する商品またはサービスとその価格、会社の所在地(国と通貨の設定に関わります)、ロゴと商品写真の URL を収集します。各 URL は絶対 URL にしてください。一部のサイトでは //cdn.example.com/… のようなプロトコル相対 URL が出力されるため、その場合は https: を付ける必要があります。

ウェブサイトが指定されていない場合は、指定された業種に合った、一貫性のある一般的なデータを生成してください。

完了の条件 — インポートする商品名と、会社に設定する国を挙げられる状態になっていること。

2. データベースを調査する

このデータベースのバージョンによって、存在するモデル、フィールド、アプリが決まります。推測せず、必ず調べてください。

  • odoo-crud auth-check — 実行時の最初のコマンドです。失敗した場合は、その理由を伝えて停止してください。後続の処理は何も実行できません。
  • odoo-crud models --filter crm — どのモデルがあるかを確認します。
  • odoo-crud fields product.template --filter 'name,list_price,barcode' — 各フィールドについて、1 行にまとめて出力します(many2one required -> res.partner)。選択フィールドの場合は、選択可能な値も含まれます。書き込む予定の列だけで絞り込んでください。res.partner や product.template の全フィールドを出力すると、必要な情報が埋もれてしまいます。
  • odoo-crud install-modules crm stock sale_management account — ステップ 5 のインポート順に必要なすべてのモジュールを、1 回の呼び出しでインストールします。順序からそのままリストを作成します。res.partner → contacts、product.template → product と sale_management、在庫数量 → stock、crm.lead → crm、さらに請求処理用の account です。戻る前にインストールと確認の両方を行い、失敗したものは JSON の not_installed に一覧表示されます。

完了条件:install-modules の実行結果で not_installed が空になっており、これから書き込むすべての CSV のすべての列が fields の出力に記載され、その型と、選択フィールドの場合は選択可能な値が一字一句そのまま転記されていること。

3. 会社を設定する

res.company の国、会社名、通貨を実際の所在地に合わせて設定します。search-read で ID を調べてから、

odoo-crud write res.company --ids '[1]' --values '{"country_id": 241, "currency_id": 23}'

通貨が見つからないように見える場合、アーカイブされているだけで、存在しないわけではありません。罠のファイルを参照してください。

4. データセットの規模を決める

プロンプトで指定される規模は、small、medium、big のいずれかです。これは事業全体の規模を示すため、データを投入するすべてのモデルに適用されます。顧客数を基準にして、業種に応じた比率で他の数を決めてください。

sizecustomers (anchor)feel
small~8小規模な店舗 — デモに必要な最低限のデータ
medium~25経営が安定している中小企業
big~80データが豊富な大企業
  • 仕入先 ≈ 顧客数 ÷ 6 — 常に少数にとどめます。
  • 製品 ≈ 顧客数より少ない商品カタログ。サービス業なら、さらに少なくします。サイトで実際に扱う製品がその数に満たない場合は、実在するバリエーション(サイズ、フレーバー、形式)で数を補ってください。目標数よりも実態を優先します。
  • 在庫数量 — 保管可能な製品すべてに数量を設定します。
  • リード ≈ 顧客数の 0.5〜1 倍。
  • その他、作成するもの — 受注、請求書、部品表(BoM)なども、全体の規模に合わせます。

あるモデルだけを充実させ、関連するモデルを空のままにしておくと、デモが作り物のように見えてしまいます。

5. 生成してインポートする

各 CSV をファイルに書き込み、odoo-crud import-csv <model> --file <path> を実行します。 すべての参照が解決されるよう、依存関係の順序でインポートします。

  1. res.partner — 顧客と仕入先。 列:id(例:partner_client_1)、name、is_company、street、 city、email、phone。
  2. product.template — 見つけた主力製品。 列:id(例:product_1)、name、list_price、standard_price、 barcode に加えて、このデータベースの製品タイプと保管可能性の列を指定します。 ステップ 2 の fields product.template --filter 'type,storable' で表示された 列を使い、選択値はそのまま記述します。保管可能性が選択値の 1 つなのか、 独立したブール値フラグなのかは、バージョンによって異なります。
  3. 在庫数 — product.template に対する 2 回目の処理として、 保管可能とした製品ごとに 1 行を用意し、id(上記と同じ外部 ID)と qty_available のみを指定します。ID はすでに存在するため、Odoo は 製品フォームに数量を入力したときと同じコードパスを実行します。 つまり、在庫数量レコードを作成して適用するため、商品は実際に在庫として 登録されます。
  4. crm.lead — 列:id(例:lead_1)、name、partner_id/id (ファイル 1 の ID)、expected_revenue、description、stage_id(New、 Qualified、または Proposition)。各 description は顧客の口調で 書きます。見込み客が送ってきた 2、3 行の文として、問い合わせている実在の 製品名と、その用途を明記してください。

すべての CSV には、次の 3 つのルールが適用されます。

  • 外部 ID — すべての行に id 列を持たせ、参照はすべて field_id/id で該当する ID を指定します。これにより再インポート時に レコードが重複せず更新されます。これは必須です。
  • 引用符 — 区切り文字にはカンマを使い、すべてのテキスト値を二重引用符で 囲みます。これにより、"Company, Inc." が 1 つの列に収まります。
  • 言語 — サイトの言語、または営業担当者が指定した言語を使います。

デフォルトのセット(mrp.bom、従業員、勘定科目表など)より多くのデータを 求められた場合は、同じ方法で作成します。基準となるデータに合わせた規模にし、 外部 ID で関連付け、参照先のインポート後にインポートしてください。

完了条件:すべてのインポートが ok: true を返し、レコード数が ステップ 4 で指定された数と一致していること。失敗した場合は、 ODOO-TRAPS.md に原因が記載されています。CSV を修正して再インポートしてください。 外部 ID により、安全に再試行できます。

6. 画像を設定する

実際の写真を使った製品一覧こそ、画面上でデモを成功させる鍵です。

odoo-crud set-image product.template --id <record_id> --url <image_url>
odoo-crud set-image res.company --id 1 --url <logo_url> --field logo

これらの呼び出しが成功するかどうかは、次の 2 点で決まります。

  • 外部 ID ではなくデータベース ID。 --id が受け取るのは、Odoo が割り当てた 整数です。インポートしたモデルに対して search-read を 1 回実行して取得します。 各レコードの id と name が返されるので、それを写真 URL と照合します。
  • フィールド。 デフォルトでは image_1920 に書き込みます。会社のロゴは logo に保存されているため、その呼び出しには --field logo を指定します。

本物の画像がないレコードは画像なしのままにしてください。画像を設定しないのは その場合に限ります。

完了条件:ステップ 1 で写真 URL を収集したすべての製品に対する set-image 呼び出しが ok: true を返し、会社にロゴが設定されていること。

7. 検証してから要約する

書き込んだ内容を読み戻して確認します。インポートの成功表示だけでは証明になりません。

  • odoo-crud search-read product.template --fields '["name","qty_available"]' — すべての保管可能な製品で、インポートした数量が表示されること。確認すべき数値は qty_available です。inventory_quantity ではありません。
  • データを入力したモデルごとに search-read を実行し、ステップ 4 の件数と 一致することを確認します。

完了条件:操作したすべてのモデルを読み戻し、内容が一致していること。 その後、SUMMARY: 行を出力します。

コメント