cogs-tracking-allocation について
EC 運営向けに売上原価の追跡と配賦を案内するスキルです。主要プラットフォームでの商品原価、陸揚げ原価、会計仕訳、利益率レポートの設定を扱います。
主な機能
- 01プラットフォーム別の売上原価設定
- 02商品・バリアント原価の登録
- 03陸揚げ原価の配賦
- 04会計連携の設定案内
- 05利益率・在庫レポート
活用シーン
- 01商品別の粗利益を追跡
- 02運賃や関税を SKU 原価に含める
- 03継続的な原価追跡へ移行
- 04仕入原価の差異を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill cogs-tracking-allocationインストール後、Claude Code で/cogs-tracking-allocationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
tile.jsonevals/cogs-cost-ledger-schema-design/criteria.jsontask.mdevals/fifo-and-weighted-average-cost-assignmen/criteria.jsontask.mdevals/landed-cost-allocation-and-variance-anal/criteria.jsontask.md詳細
COGS の追跡と配賦
概要
売上原価(COGS)を追跡すると、注文ごとの実際の粗利益、つまり売上から販売した商品の仕入れ価格を差し引いた金額がわかります。ほとんどのプラットフォームでは、商品ごとに原価を入力でき、会計ソフトとの連携(QuickBooks、Xero)では、その情報を使って売上原価の仕訳を自動的に作成できます。運賃、通関費用、関税などの着地原価の配賦には、専用アプリを使うか、会計ソフトで手動配賦する必要があります。プラットフォームが必要な原価計算方法(FIFO、加重平均法)に対応できない場合に限り、独自の売上原価システムを構築してください。
このスキルを使用する場面
- 損益計算書には売上が表示されているものの、単位原価が追跡されていないため粗利益を計算できない場合
- 国際的に商品を輸入し、SKU ごとの着地原価に運賃、通関費用、関税を配賦する必要がある場合
- 期間棚卸法(年末棚卸)から継続記録法(リアルタイム)による原価追跡に切り替える場合
- 実際の仕入原価が標準原価から乖離している SKU を特定するため、差異分析レポートを作成する場合
- ERP 連携(QuickBooks、NetSuite、Xero)で販売時の売上原価の仕訳が必要な場合
基本手順
ステップ 1:プラットフォームを確認し、適切な方法を選択する
| プラットフォーム | 推奨される方法 | 理由 |
|---|---|---|
| Shopify | 管理画面でバリエーションごとに原価を入力し、Shopify Analytics を使用するか、QuickBooks/Xero に接続して売上原価をレポートする | Shopify はバリエーションごとに原価を保存し、利益レポートではこの値を使って利益率を計算します |
| WooCommerce | 商品ごとに仕入価格を入力し、WooCommerce Bookings と会計プラグインを接続するか、Metorik を使って利益率をレポートする | WooCommerce はネイティブで原価を保存し、Metorik は利益分析を提供します |
| BigCommerce | 商品ごとに仕入原価を入力し、標準の連携機能を使って QuickBooks に接続する | BigCommerce には原価の入力欄があり、QuickBooks との連携で売上原価が自動的に記帳されます |
| カスタム/ヘッドレス | FIFO/加重平均法のロジックと会計仕訳を備えた原価台帳を構築する | 上記の連携機能がいずれも必要な原価計算方法やレポート要件を満たさない場合に必要です |
ステップ 2:商品ごとに原価を入力する
売上原価をレポートするには、すべての商品バリエーションに原価を設定する必要があります。
Shopify
- 管理画面 → 商品 → [商品] → [バリエーション] に移動します
- 価格設定 の 商品あたりの原価 欄に入力します
- Shopify の 分析 → 財務 → バリエーション別商品売上 レポートに、商品ごとの利益が表示されます
原価を一括更新するには、Matrixify(App Store)を使って、SKU ごとの原価を含む CSV をインポートします。列名は Variant Cost です。
WooCommerce
- WooCommerce → 商品 → [商品] → 在庫タブ に移動します
- 仕入原価 欄に入力します(WooCommerce Cost of Goods プラグイン、またはテーマ/プラグインによる欄の追加が必要です)
- レポートには、Metorik をインストールするか、QuickBooks for WooCommerce に接続します。どちらも原価欄を読み取り、粗利益レポートを作成します
WooCommerce でよく使われる売上原価プラグイン:
- WooCommerce Cost of Goods(SkyVerge)— 原価欄を追加し、利益率レポートを作成します
- Metorik — 商品、注文、チャネルごとの利益を表示する分析ダッシュボードです
BigCommerce
- 商品 → [商品] → 価格設定 に移動します
- 原価 欄に入力します
- アプリ → BigCommerce for QuickBooks から QuickBooks Online に接続します。原価が売上原価の仕訳に自動的にマッピングされます
ステップ 3:会計ソフトに接続して売上原価の仕訳を作成する
原価欄だけでは、プラットフォーム内でのレポートにしか使えません。損益計算書と貸借対照表に反映するには、注文の出荷完了時に売上原価を記帳する会計連携に接続してください。
Shopify → QuickBooks / Xero
- QuickBooks Online:Shopify App Store から QuickBooks Connector by OneSaas をインストールします。次のように設定します:Sales → Fulfilled orders を COGS アカウントに計上し、商品を QuickBooks のアイテムにマッピングします
- Xero:Shopify App Store から Xero by Amaka または A2X をインストールします。最も広く利用されているのは A2X です。COGS を含む Shopify の日次売上を集計し、要約した Xero の仕訳にまとめます
Shopify + Xero には A2X を強くおすすめします。通貨換算、返金、手数料、COGS を自動的に処理します。
WooCommerce → QuickBooks / Xero
- QuickBooks:QuickBooks Commerce または MyWorks Sync(WooCommerce ↔ QuickBooks の同期で最も信頼性が高いツール)をインストールします
- Xero:直接同期するには、Xero for WooCommerce by Zapier または Xero Bridge by Parex をインストールします
BigCommerce → QuickBooks
- Apps マーケットプレイスにある組み込みの BigCommerce for QuickBooks アプリを使用します
- Settings → Accounting → Cost of Goods Sold account で COGS のマッピングを設定します
ステップ 4:着地原価配賦を設定する
正確な COGS を算出するには、最初の販売前に着地原価(運賃、保険、通関費用、関税)を商品原価に加算する必要があります。
ほとんどの販売事業者向け(手動方式):
- 出荷品を受け取り、運賃・通関費用の請求書を入手します
- 1 単位あたりの着地原価を計算します:着地原価の合計 ÷ 受領した数量の合計
- 着地原価分を含めるように、プラットフォーム上の原価を更新します
- 商品価値に応じて配賦する場合:
(Product value / Total shipment value) × Total landed cost ÷ Units received
輸入を頻繁に行う Shopify の販売事業者向け:
- App Store から Shopify Shipping Costs または LandedCost.app をインストールします
- これらのアプリでは、出荷品の着地原価を入力し、受領した SKU に自動で配賦できます
会計ソフトウェアのユーザー向け:
- QuickBooks または Xero で、商品が販売される前に運賃・関税を在庫資産価値に加算するための着地原価配賦仕訳を使用します
ステップ 5:COGS と利益率のレポートを実行する
原価を入力し、会計ソフトウェアとの接続が完了したら、次の手順に進みます。
Shopify
- Analytics → Finances → Profit by product — バリエーションごとの売上、原価、利益率を表示します
- Analytics → Reports → Product sales — 日付範囲で絞り込み、販売数量と利益を含めて表示します
WooCommerce + Metorik
- Metorik → Reports → Profitability — 商品、注文、期間ごとの粗利益率を表示します
- Metorik では注文ごとの原価と利益率も表示されます
QuickBooks / Xero
- 損益計算書レポート — COGS の項目に、期間中の売上原価合計が表示されます
- 在庫評価概要 — SKU ごとの現在の在庫価値を表示します
カスタム/ヘッドレス
FIFO を使った継続記録法による在庫原価計算が必要なヘッドレスストアフロントでは、原価台帳を構築します:
// Cost layer model — one row per purchase order receipt
interface InventoryCostLayer {
variantId: string;
receiptDate: Date;
quantityReceived: number;
quantityRemaining: number; // Decrements as units are sold
unitCostCents: number; // Purchase price per unit
landedCostCents: number; // Allocated freight/duties per unit
}
// FIFO cost assignment when an order is fulfilled
async function assignCogsFifo(variantId: string, locationId: string, quantity: number, orderId: string) {
let remaining = quantity;
let totalCostCents = 0;
return db.transaction(async tx => {
// Consume oldest cost layers first (FIFO)
const layers = await tx.inventoryCostLayers.findAll({
where: { variantId, locationId, quantityRemaining: { gt: 0 } },
orderBy: { receiptDate: 'asc' },
});
for (const layer of layers) {
if (remaining <= 0) break;
const units = Math.min(remaining, layer.quantityRemaining);
const totalUnitCost = layer.unitCostCents + layer.landedCostCents;
await tx.inventoryCostLayers.update(layer.id, {
quantityRemaining: layer.quantityRemaining - units,
});
await tx.cogsEntries.create({
orderId, variantId, quantity: units,
unitCostCents: totalUnitCost,
costingMethod: 'fifo',
});
totalCostCents += units * totalUnitCost;
remaining -= units;
}
if (remaining > 0) throw new Error(`Insufficient cost layers for ${variantId}`);
return { totalCostCents };
});
}
// Allocate landed costs to a received shipment (by value)
async function allocateLandedCostsByValue(shipmentId: string, totalLandedCostCents: number) {
const layers = await db.inventoryCostLayers.findByShipment(shipmentId);
const totalValue = layers.reduce((s, l) => s + l.unitCostCents * l.quantityReceived, 0);
for (const layer of layers) {
const share = (layer.unitCostCents * layer.quantityReceived) / totalValue;
const perUnitLanded = Math.round((share * totalLandedCostCents) / layer.quantityReceived);
await db.inventoryCostLayers.update(layer.id, { landedCostCents: perUnitLanded });
}
}
ベストプラクティス
- 初回のインポートまたは発注書の入荷前に原価を入力します — COGS が正確になるのは原価の設定後に受けた注文のみです。過去に遡って修正するには手動での調整が必要です
- 初回販売前に着地原価を単価に含めます — 商品の受領後、販売前に支払った運賃と関税を配賦する必要があります。そうしないと、COGS が実際の原価を過小評価します
- 商品カテゴリーごとに原価計算方法(FIFO または加重平均)を 1 つ選び、継続して使用します — 年度途中で切り替える場合、評価替えの仕訳が必要です
- プラットフォームの利益レポートと会計ソフトウェアを毎月照合します — 差異がある場合、バリエーションの一部で原価が未入力であることがよくあります
- 差異分析のため、各会計年度の開始時に標準原価を設定します — 実際の購入価格を標準原価と比較し、原価の変動を早期に把握します
よくある落とし穴
| 問題 | 解決策 |
|---|---|
| 一部の商品の粗利益率が100%と表示される | 該当するバリエーションの仕入原価が未入力です。Shopify と WooCommerce は、仕入原価が未入力の場合、暗黙的に $0 として扱います |
| QuickBooks の売上原価が、プラットフォームの利益レポートと一致しない | 会計連携で異なる売上原価勘定が使われているか、返金が無視されている可能性があります。連携のマッピング設定を確認してください |
| 仕入諸掛が売上原価に反映されない | 仕入諸掛は最初の販売前に入力する必要があります。販売後に入力する場合は、会計ソフトウェアで原価レイヤーを手動で調整する必要があります |
| 仕入原価に VAT が含まれているが、含めるべきではない | VAT 抜きの仕入原価を入力してください。税金は損益計算書の別項目であり、売上原価には含まれません |
| 加重平均原価が古いままになる | 現在の在庫レイヤーから加重平均原価を動的に再計算してください。静的なフィールドとしてキャッシュしないでください |
関連スキル
- @inventory-tracking
- @multi-warehouse
- @catalog-import-export