🐷

AI コーディング(Cursor)を使って Stripe の請求履歴エクスポートを5分で実装

に公開

先日、顧客から「過去の請求履歴を全部見たい」という依頼がありました。

Stripe のダッシュボードでは請求書を一つずつ確認することはできますが、まとめてダウンロードする機能はありません。顧客に100件以上の請求履歴を共有するとなると、手作業では対応できません。

通常なら API ドキュメントを調べて、ページネーション処理を考えて、CSV 出力ライブラリを選定して...と時間がかかる作業です。しかし今回は AI コーディングツールの Cursor を使うことで、わずか5分程度でスクリプトを完成させることができました。

実装したスクリプト

const stripe = require('stripe')('xxx');
const createCsvWriter = require('csv-writer').createObjectCsvWriter;

const customerId = 'cus_xxxx'

const main = async () => {
    /**
     * ・全てのInvoiceを取得
     * ・invoiceのPDF URLと請求日を取得
     * ・CSVで出力
     */
    const invoices = []
    for await (const invoice of stripe.invoices.list({
        customer: customerId,
        limit: 20
    })) {
        invoices.push({
            id: invoice.id,
            pdf_url: invoice.hosted_invoice_url,
            // JSTに変換
            created: new Date(invoice.created * 1000).toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo' })
        })
    }
    // CSV出力
    const csvWriter = createCsvWriter({
        path: 'invoices.csv',
        header: [
            {id: 'id', title: 'ID'},
            {id: 'pdf_url', title: 'PDF_URL'},
            {id: 'created', title: 'CREATED'}
        ]
    });
    await csvWriter.writeRecords(invoices);
    console.log('CSVファイル(invoices.csv)を出力しました');
}

main().catch(console.error)

Cursor での AI コーディング実践

今回のコードは、ほとんど Cursor で実装しました。人間の手で実装したのは、「Node.jsプロジェクトのセットアップ」と「実装したい内容を記載したコメント」の2つだけです。

今回ですと、次のようなコードをまず書きました。

const main = async () => {
    /**
     * ・全てのInvoiceを取得
     * ・invoiceのPDF URLと請求日を取得
     * ・CSVで出力
     */
}

あとは Cursor の Tab 補完で実装を進めます。Agents を使って「以下のコメント部分を実装して」と伝えるのも良いでしょう。Tab 補完を使ったのは、その前にこのタスクを依頼した方が AI にコーディングされた際の実装が、欲しいものを正しく取得できない実装になっていたためです。意図しない実装になった場合、即座に介入するつもりで Tab を使いながら実装しましたが、モデルの違いかそれとも利用したツールの違いなのか、今回は問題なく実装してくれました。

従来なら Stripe のドキュメントを確認して、非同期処理の書き方を調べて、CSV ライブラリの使い方を学んで...という作業が必要でした。しかし Cursor があれば「やりたいこと」を日本語で書くだけで、実装が進んでいきます。

[余談] なぜ CSV で出力するのか?

顧客に共有する形式として、Excel や PDF も考えましたが、100件以上のデータとなると CSV が最適だと判断しました。

CSV なら顧客側で Excel や Google スプレッドシートで開けますし、必要に応じてフィルタリングや並び替えも自由にできます。プログラムで処理する場合も扱いやすいという利点もあります。

Cursor を使った AI コーディングのコツ

今回の経験から、Cursor で効率的にコーディングするコツが見えてきました。

日本語で「やりたいこと」を明確に書くことが最も重要です。必要な設定値(API キーなど)は人間が用意し、関数の大枠だけ作って中身は Cursor に任せるとうまくいきます。

特に、Stripe API のような十分にドキュメント化された API を使う場合、Cursor は非常に正確なコードを生成してくれます。ページネーションの処理やエラーハンドリングなど、見落としがちな部分もカバーしてくれるのが助かります。

使い捨てスクリプトならではのざ・・・手軽さ

コードを見てもらうと、いろんなものがハードコードされています。 Customer Id / Stripe API キーなどなど。それでも単発のタスクを完了させるだけなら、これで十分でしょう。このあとこれを AI に読ませたり、Gitで管理したりとなると、流石に環境変数に移そうかとは思いますが・・・

このような単発のちょっとした調査タスクについて、AIに MCP 経由で調査させるだけではなく、AI にスクリプトを書かせるという手も選べるのはとても便利ですね。

まとめ

顧客からの「請求履歴を全部見たい」という要望に対して、Cursor の AI コーディング機能を使って簡単なエクスポートツールを5分で作成しました。

今回のようなちょっとした自動化ツールは、Cursor での AI コーディングの絶好の練習台といえるでしょう。複雑なビジネスロジックは不要で、API の仕様に従って処理を書くだけなので、AI が得意とする領域です。

手作業で対応していたら1時間以上かかったであろう作業が、Cursor の助けを借りることで、スクリプト作成込みでも5分程度で完了しました。日本語でやりたいことを書くだけでコードが生成される時代、開発者の仕事はより創造的な方向にシフトしていくのかもしれません。

デジタルキューブ

Discussion