# Stripe×ChatGPT売上分析自動化実践ガイド|AIで売上データから洞察を抽出
## はじめに
こんにちは。PlanitAI技術ブログ編集部です。
オンラインビジネスを運営する中で、日々の売上データを分析し、ビジネスインサイトを得ることは非常に重要です。しかし、Stripeのダッシュボードを毎日確認し、数字を読み解き、傾向を分析する作業は時間がかかります。
「今日の売上はどうだった?」というシンプルな質問に対して、AIが自動的にデータを分析し、人間が理解しやすい言葉でインサイトを提供してくれたら、どれだけ便利でしょうか。
本記事では、**Stripe APIとChatGPT APIを組み合わせて、売上データを自動分析するシステム**を構築する実践ガイドをご紹介します。TypeScriptを使用し、実際に動作するコードとともに、ステップバイステップで解説していきます。
## 実行結果のイメージ
まず、このシステムを実行するとどのような結果が得られるのか、実際の出力例をご覧ください。
**テスト決済の生成**:
```
$ npm run generate
5件のテスト決済を生成中...
[1/5]
決済生成完了: pi_3SYLbxCbRcSfD9CU1vvAzw1Y
顧客: John Brown
商品: Phone Case
金額: $96.00
[2/5]
決済生成完了: pi_3SYLbzCbRcSfD9CU1leWeVCt
顧客: Sarah Brown
商品: Desk Lamp
金額: $744.00
[3/5]
決済生成完了: pi_3SYLc0CbRcSfD9CU0zPs2zDm
顧客: Mike Wilson
商品: USB-C Cable
金額: $955.00
[4/5]
決済生成完了: pi_3SYLc2CbRcSfD9CU0YEXTSWz
顧客: David Brown
商品: Phone Case
金額: $710.00
[5/5]
決済生成完了: pi_3SYLc3CbRcSfD9CU0yoZ1N4v
顧客: Emily Brown
商品: Coffee Maker
金額: $817.00
完了!5件の決済が生成されました。
```
**ChatGPTによる売上分析**:
```
$ npm run analyze
Stripe売上データ分析
============================================================
Stripeデータ取得中...
=== 基本統計 ===
総売上: $3,322.00
決済件数: 5件
平均金額: $664.40
============================================================
ChatGPT分析中...
============================================================
分析結果
============================================================
## 売上サマリー
2025年11月28日の総売上は$3,322.00で、5件の決済が行われ、
平均決済額は$664.40でした。
## 主要インサイト
1. USB-C Cableが最も高い売上を記録し、他の商品より売上が高い傾向にあります。
2. Phone Caseは2件販売されましたが、売上が比較的低いため、
価格調整の検討が必要です。
3. Coffee MakerとDesk Lampの売上は安定しており、
マーケティング戦略を強化してより多くの顧客に紹介する余地があります。
## 改善提案
1. Phone Caseの価格を調整して売上を増加させ、
顧客により多くの価値を提供できるようにします。
2. USB-C Cableのように高い売上を記録した商品の人気を高めるため、
該当商品を含むバンドル商品を提供して顧客の購買意欲を促進します。
============================================================
分析完了!
```
このように、Stripeの決済データを取得し、ChatGPTが自動的にビジネスインサイトを生成してくれます。それでは、このシステムの構築方法を詳しく見ていきましょう。
## プロジェクト概要
### 実現する機能
- Stripe Sandboxからの決済データ自動取得
- TypeScriptによる型安全な実装
- ChatGPTによる売上データの自動分析
- 人間が理解しやすい日本語レポート生成
- Markdown/HTML/JSON形式でのレポート出力
- Slack/LINE/Google Chatへの自動通知
### 技術スタック
- **決済API**: Stripe API (Sandbox Mode)
- **プログラミング言語**: TypeScript
- **AI分析**: OpenAI ChatGPT API
- **ランタイム**: Node.js
- **主要ライブラリ**: stripe, openai, dotenv, chalk
## システムアーキテクチャ
```
[Stripe API] → [データ収集] → [集計処理] → [ChatGPT分析] → [レポート生成] → [チャット通知]
```
1. **Stripe APIから決済データを取得**
2. **日次売上を集計・構造化**
3. **ChatGPTにデータを送信して分析**
4. **結果を見やすくフォーマットして出力**
5. **Slack/LINE/Google Chatに自動送信**
## 実装ステップ
### Step 1: 開発環境のセットアップ
まず、プロジェクトの初期化と必要なパッケージのインストールを行います。
```bash
# プロジェクト作成
mkdir stripe-chatgpt-analyzer
cd stripe-chatgpt-analyzer
npm init -y
# 依存パッケージのインストール
npm install stripe openai dotenv chalk
npm install -D typescript @types/node tsx
```
**package.json**の設定:
```json
{
"name": "stripe-chatgpt-analyzer",
"type": "module",
"scripts": {
"test": "tsx src/test-connection.ts",
"generate": "tsx src/generate-payments.ts",
"analyze": "tsx src/analyze-sales.ts"
}
}
```
### Step 2: TypeScript設定
`tsconfig.json`を作成し、ESM(ES Modules)を使用する設定を行います:
```json
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true
}
}
```
### Step 3: 環境変数の設定
`.env`ファイルでAPI キーを管理します:
```env
# Stripe API Keys (Test Mode)
STRIPE_SECRET_KEY=sk_test_your_key_here
# OpenAI API Key
OPENAI_API_KEY=sk-proj-your_key_here
# 設定
OPENAI_MODEL=gpt-3.5-turbo
```
**重要**: 実際の決済は発生しないよう、必ずStripeの**Test Mode**を使用してください。
### Step 4: Stripe連携の実装
`src/stripe/client.ts`でStripeクライアントを初期化します:
```typescript
import Stripe from 'stripe';
import { env } from '../config/env.js';
export const stripe = new Stripe(env.stripeSecretKey!, {
apiVersion: '2024-11-20.acacia',
typescript: true,
});
```
決済データの取得機能:
```typescript
async function fetchTodayPayments() {
const today = new Date();
today.setHours(0, 0, 0, 0);
const timestamp = Math.floor(today.getTime() / 1000);
const payments = await stripe.paymentIntents.list({
created: { gte: timestamp },
limit: 100,
});
return payments.data.filter(p => p.status === 'succeeded');
}
```
### Step 5: テストデータの生成
実際の決済を使わずにテストするため、ランダムな決済データを生成する機能を実装します:
```typescript
async function createRandomPayment() {
const amount = randomInt(1000, 100000); // $10 ~ $1000
const product = randomChoice([
'Wireless Headphones',
'Smart Watch',
'Laptop Stand',
// ...
]);
const paymentIntent = await stripe.paymentIntents.create({
amount,
currency: 'usd',
description: product,
confirm: true,
payment_method: 'pm_card_visa', // テスト用カード
return_url: 'https://example.com/return',
});
return paymentIntent;
}
```
実行方法:
```bash
npm run generate 15 # 15件のテスト決済を生成
```
### Step 6: ChatGPT分析の実装
取得した売上データをChatGPTに送信して分析します:
```typescript
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: env.openaiApiKey,
});
async function analyzeSales(stats) {
const prompt = `
以下は本日の売上データです:
総売上: $${(stats.totalAmount / 100).toFixed(2)}
決済件数: ${stats.totalCount}件
平均決済額: $${(stats.averageAmount / 100).toFixed(2)}
このデータを分析して以下を提供してください:
1. 売上サマリー(2-3文)
2. 主要インサイト(3つ)
3. 改善提案(2つ)
`;
const response = await openai.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{
role: 'system',
content: 'あなたは専門的なビジネスアナリストです。',
},
{
role: 'user',
content: prompt,
},
],
max_tokens: 1000,
});
return response.choices[0].message.content;
}
```
### Step 7: レポート生成
分析結果を見やすくフォーマットして出力します:
```typescript
import chalk from 'chalk';
// コンソール出力(色付き)
console.log(chalk.bold.cyan('=== 本日の売上分析 ===\n'));
console.log(chalk.green(`総売上: $${totalAmount}`));
console.log(chalk.white(`決済件数: ${totalCount}件`));
// HTML レポート生成
await generateHTMLReport(stats, analysis,
'reports/sales-report-2025-11-28.html');
```
## 実行結果
実際にシステムを動かすと、以下のような分析結果が得られます:
```
本日の売上分析 (2025-11-28)
基本統計
総売上: $8,432.00
決済件数: 15件
平均決済額: $562.13
ChatGPT分析
売上サマリー
本日は15件の取引を通じて$8,432の売上を達成しました。
1件あたり平均$562.13で、中〜高価格帯の商品が中心に
販売されています。
主要インサイト
1. Electronics カテゴリが全体の46%を占め、最も人気
2. 午後2時〜5時に取引が集中(全体の60%)
3. 平均決済額が$500以上と高い水準を維持
改善提案
1. 午前中のプロモーションで取引を分散
2. 人気のElectronics関連アクセサリーのバンドル販売を検討
```
## プロジェクト構成
最終的なディレクトリ構造:
```
stripe-chatgpt-analyzer/
├── src/
│ ├── config/
│ │ └── env.ts # 環境変数管理
│ ├── stripe/
│ │ ├── client.ts # Stripe クライアント
│ │ └── fetch-data.ts # データ取得
│ ├── chatgpt/
│ │ ├── client.ts # OpenAI クライアント
│ │ └── analyze.ts # 分析ロジック
│ ├── utils/
│ │ ├── formatter.ts # フォーマット
│ │ └── report-generator.ts # レポート生成
│ ├── notifiers/
│ │ ├── slack.ts # Slack通知
│ │ ├── line.ts # LINE通知
│ │ └── google-chat.ts # Google Chat通知
│ ├── generate-payments.ts # 決済生成スクリプト
│ └── analyze-sales.ts # 分析スクリプト
├── reports/ # 生成されたレポート
├── .env # API キー
├── .gitignore
├── package.json
└── tsconfig.json
```
## セキュリティとコスト管理
### セキュリティ対策
1. **API キーの保護**
- `.env`ファイルは必ず`.gitignore`に追加
- 環境変数としてのみ管理
- Test Modeのキーのみ使用
2. **Stripe Test Mode**
- 実際の決済は一切発生しません
- テストカード番号: `4242 4242 4242 4242`
### コスト管理
**OpenAI APIの料金**(2024年12月時点):
- GPT-3.5 Turbo: 入力 $0.50/1M tokens、出力 $1.50/1M tokens
- 1回の分析あたり約800 tokens(約$0.001 = 約0.15円)
毎日1回実行しても月額約4.5円程度のコストです。
## チャットツールへの自動通知
分析レポートを各種チャットツールに自動送信することで、チームメンバーとのリアルタイムな情報共有が可能になります。
### Slack通知の実装
Slack Incoming Webhooksを使用した通知実装:
```bash
# Slack SDKのインストール
npm install @slack/webhook
```
`src/notifiers/slack.ts`を作成:
```typescript
import { IncomingWebhook } from '@slack/webhook';
const webhook = new IncomingWebhook(process.env.SLACK_WEBHOOK_URL!);
export async function sendToSlack(analysisResult: string, stats: any) {
const message = {
text: '本日の売上分析レポート',
blocks: [
{
type: 'header',
text: {
type: 'plain_text',
text: '本日の売上分析レポート',
},
},
{
type: 'section',
fields: [
{
type: 'mrkdwn',
text: `*総売上*\n$${(stats.totalAmount / 100).toFixed(2)}`,
},
{
type: 'mrkdwn',
text: `*決済件数*\n${stats.totalCount}件`,
},
{
type: 'mrkdwn',
text: `*平均決済額*\n$${(stats.averageAmount / 100).toFixed(2)}`,
},
],
},
{
type: 'section',
text: {
type: 'mrkdwn',
text: `*AI分析結果*\n${analysisResult}`,
},
},
],
};
await webhook.send(message);
console.log('Slackへの送信完了');
}
```
### LINE Notify連携
LINE NotifyのAPIを使用した実装:
```bash
npm install axios
```
`src/notifiers/line.ts`を作成:
```typescript
import axios from 'axios';
export async function sendToLine(message: string) {
const token = process.env.LINE_NOTIFY_TOKEN!;
await axios.post(
'https://notify-api.line.me/api/notify',
`message=${encodeURIComponent(message)}`,
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': `Bearer ${token}`,
},
}
);
console.log('LINEへの送信完了');
}
```
使用方法:
```typescript
const message = `
【売上分析レポート】${new Date().toLocaleDateString('ja-JP')}
総売上: $${(stats.totalAmount / 100).toFixed(2)}
決済件数: ${stats.totalCount}件
平均決済額: $${(stats.averageAmount / 100).toFixed(2)}
${analysisResult}
`;
await sendToLine(message);
```
### Google Chat Webhook連携
Google Chat Webhookを使用した実装:
`src/notifiers/google-chat.ts`を作成:
```typescript
import axios from 'axios';
export async function sendToGoogleChat(analysisResult: string, stats: any) {
const webhookUrl = process.env.GOOGLE_CHAT_WEBHOOK_URL!;
const message = {
text: '本日の売上分析レポート',
cards: [
{
header: {
title: '売上分析レポート',
subtitle: new Date().toLocaleDateString('ja-JP'),
},
sections: [
{
widgets: [
{
keyValue: {
topLabel: '総売上',
content: `$${(stats.totalAmount / 100).toFixed(2)}`,
},
},
{
keyValue: {
topLabel: '決済件数',
content: `${stats.totalCount}件`,
},
},
{
keyValue: {
topLabel: '平均決済額',
content: `$${(stats.averageAmount / 100).toFixed(2)}`,
},
},
],
},
{
widgets: [
{
textParagraph: {
text: `AI分析結果
${analysisResult.replace(/\n/g, '
')}`,
},
},
],
},
],
},
],
};
await axios.post(webhookUrl, message);
console.log('Google Chatへの送信完了');
}
```
### 環境変数の追加
`.env`ファイルに各サービスの認証情報を追加:
```env
# Stripe API Keys
STRIPE_SECRET_KEY=sk_test_your_key_here
# OpenAI API Key
OPENAI_API_KEY=sk-proj-your_key_here
# 通知サービス
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
LINE_NOTIFY_TOKEN=your_line_notify_token
GOOGLE_CHAT_WEBHOOK_URL=https://chat.googleapis.com/v1/spaces/YOUR/WEBHOOK/URL
```
### 定時自動実行の設定
crontabを使用して、毎日決まった時間に分析と通知を自動実行:
```bash
# crontabを編集
crontab -e
# 毎朝9時に実行(Slack通知)
0 9 * * * cd /path/to/stripe-chatgpt-analyzer && npm run analyze -- --notify slack
# 毎朝9時に実行(LINE通知)
0 9 * * * cd /path/to/stripe-chatgpt-analyzer && npm run analyze -- --notify line
# 毎朝9時に実行(Google Chat通知)
0 9 * * * cd /path/to/stripe-chatgpt-analyzer && npm run analyze -- --notify google-chat
# 複数サービスへ同時通知
0 9 * * * cd /path/to/stripe-chatgpt-analyzer && npm run analyze -- --notify all
```
`src/analyze-sales.ts`に通知オプションを追加:
```typescript
async function main() {
const notifyTo = process.argv.find(arg => arg === '--notify')
? process.argv[process.argv.indexOf('--notify') + 1]
: null;
// データ取得と分析
const stats = await fetchTodayPayments();
const analysis = await analyzeSales(stats);
// 通知送信
if (notifyTo === 'slack' || notifyTo === 'all') {
await sendToSlack(analysis, stats);
}
if (notifyTo === 'line' || notifyTo === 'all') {
await sendToLine(formatForLine(analysis, stats));
}
if (notifyTo === 'google-chat' || notifyTo === 'all') {
await sendToGoogleChat(analysis, stats);
}
}
```
### GitHub Actionsでの自動化
リポジトリに`.github/workflows/daily-report.yml`を作成:
```yaml
name: Daily Sales Report
on:
schedule:
# 毎日UTC 0:00 (JST 9:00) に実行
- cron: '0 0 * * *'
workflow_dispatch: # 手動実行も可能
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Install dependencies
run: npm install
- name: Run analysis and notify
env:
STRIPE_SECRET_KEY: ${{ secrets.STRIPE_SECRET_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: npm run analyze -- --notify slack
```
GitHubのSecretsに環境変数を設定することで、セキュアに自動実行できます。
## 応用例
### 1. 週次・月次レポート
複数日のデータを集約して、トレンド分析を実施:
```typescript
const weeklyStats = await aggregateWeeklyData();
const trend = await analyzeTrend(weeklyStats);
```
### 2. 異常検知アラート
売上が急激に変動した場合のアラート通知:
```typescript
if (stats.totalAmount < yesterdayStats.totalAmount * 0.5) {
await sendUrgentAlert('売上が前日比50%以上減少しています');
}
```
### 3. 他の決済サービスとの統合
- Square API
- PayPal API
- Shopify API
## トラブルシューティング
### よくある問題と解決策
**1. "Invalid API Key" エラー**
- `.env`ファイルの存在確認
- API キーが`sk_test_`で始まることを確認
**2. "No payments found" エラー**
- 先に`npm run generate`で決済データを生成
- Stripe DashboardでTest Modeになっているか確認
**3. OpenAI APIのRate Limit**
- 無料プランは1分あたり3リクエストに制限
- 有料プランへのアップグレードを検討
**4. Webhook送信エラー**
- Webhook URLが正しいか確認
- ファイアウォール設定を確認
- サービスの認証トークンが有効か確認
## 学んだこと
### 技術面
1. **Stripe APIの活用**
- Payment Intentのライフサイクル理解
- Paginationの実装
- Test Modeの効果的な使用
2. **ChatGPT APIの実践的活用**
- プロンプトエンジニアリングの重要性
- トークン数の最適化
- ビジネスコンテキストに合わせた分析依頼
3. **TypeScriptのベストプラクティス**
- 型安全性によるバグ削減
- ESMモジュールの活用
- 環境変数の適切な管理
4. **チャットツール連携**
- Webhook APIの活用
- 各サービスの認証方式の違い
- メッセージフォーマットの最適化
### ビジネス面
- 日次売上データの可視化の重要性
- AIによる客観的なインサイト抽出
- データドリブンな意思決定の実現
- チーム全体での情報共有の効率化
## まとめ
本記事では、Stripe APIとChatGPT APIを組み合わせた売上分析の自動化システムを実装しました。
**実現できたこと**:
- 決済データの自動収集と集計
- ChatGPTによる知的な分析とインサイト生成
- 複数フォーマットでのレポート出力
- Slack/LINE/Google Chatへの自動通知
- 低コストでの運用(月額約4.5円)
このシステムにより、毎日数分かかっていた売上確認と分析作業が完全に自動化されました。さらに、チャットツールへの自動通知により、チーム全体でリアルタイムに売上状況を把握できるようになりました。
**今後の展開**:
- Webダッシュボードの開発
- より高度な予測分析機能
- 複数決済プラットフォームの統合
---
## 参考リンク
- [Stripe API Documentation](https://stripe.com/docs/api)
- [OpenAI API Documentation](https://platform.openai.com/docs)
- [TypeScript Documentation](https://www.typescriptlang.org/docs)
- [Slack Incoming Webhooks](https://api.slack.com/messaging/webhooks)
- [LINE Notify API](https://notify-bot.line.me/doc/ja/)
- [Google Chat Webhooks](https://developers.google.com/chat/how-tos/webhooks)
---
## PlanitAIについて
PlanitAI株式会社は、AIを活用した業務自動化ソリューションを提供しています。本記事でご紹介したような決済データ分析の自動化はもちろん、会計システム連携、ドキュメント処理の自動化など、お客様の業務効率化を支援いたします。
**提供サービス**:
- AI/LLMを活用した業務自動化コンサルティング
- API連携システムの設計・開発
- データ分析基盤の構築
- チャットボット・AIエージェントの開発
「こんな業務を自動化したい」「APIを活用した開発を検討している」など、お気軽にご相談ください。
**お問い合わせ**: [https://www.planitai.co.jp/contact](https://www.planitai.co.jp/contact)
---
**関連記事**:
- [freee API自動化実践ガイド|Vertex AIで会計データ分類を実現](/blogs/freee-api)
- [Google Sheets × Vertex AI で経費精算を自動化](/blogs/google-sheets-vertex-ai)