LoginSignup
1
1

[日本語訳] Deno環境でStripeのNode.js SDKを利用する方法

Posted at

この記事は、dev.toに公開されているRichard Marmorstein氏によって書かれた英語記事の日本語訳です。

元記事: stripe-node with Deno

はじめに

この投稿では、Deno環境でのstripe-nodeの使用方法を示します。この記事の他にも、動画チュートリアルやstripe-nodeリポジトリ自体にあるDenoの例、さらにはGithubで閲覧・クローン可能なStripeのサンプルがあります。コードだけを見たい場合はGithubへどうぞ。コードサンプルをドラマチックな解説と共に観たい場合は、こちらにとどまってください。

背景

2023年初め、stripe-nodev11.15.0で、stripe-nodeをESモジュールとしてインポートするサポートを追加しました。これにより、Cloudflare WorkersやDenoのようなNodeJS以外のランタイム環境でStripeを利用することが非常に便利になりました。皮肉なことに、「stripe-node」という名前は今や少し語弊があるかもしれません。もうNodeだけではありません。stripe-server-jsの方が正確かもしれませんが、言い回しがそこまでスムーズではないですね。とはいえ、stripe-nodeのままにしておきましょう。私たちの意味するところは理解してもらえると確信しています。

前提条件

  • Stripe CLIのインストールが必要です
  • Denoのバージョンは1.28以降が必要です

プロジェクトの開始

ゼロから始める場合は、ここでdeno initを実行しましょう。すでにDenoプロジェクトがある場合はざっと進めていると言えますね!しかし、残りの手順を適応する必要があるかもしれません。

Stripeのインポート

deno initはいくつかのファイルを作成しますが、その中にはアプリのエントリポイントであるmain.tsも含まれています。これをコードエディタで開きます。Denoではnpm installの必要はありません。このように書くだけです。

import Stripe from "npm:stripe@^13.0.0"

この記事を書いている時点で、13.x.xはstripe-nodeの最新のメジャーバージョンですが、未来から来た方はnpm view stripe versionで最新バージョンを確認してください。

注意: stripe-nodeのnpmバージョンをインポートする必要があります。unpkg.comやdeno.landのバージョンは、ソースコードのインポート文の書き方の関係でうまく機能しないことがあります。

Denoのインポートマップの使用

複数のファイルでstripeをインポートする場合は、Stripeライブラリの更新時にすべてのインポート文を更新するのは面倒かもしれません。この場合は、Denoのインポートマップを使用したいところ。インポート文を以下のように変更する必要があります。

- import Stripe from "npm:stripe@^13.0.0"
+ import Stripe from "stripe"

そして、deno.jsoncを編集して、"imports"マップにstripeのエントリを追加します。

{
  "tasks": {
    "dev": "deno run --watch main.ts"
  },
  "imports": {
    "stripe": "npm:stripe@^13.0.0"
  }
}

これで完了です!

Stripeの使用

Denoでは、他のTypeScriptコードベースと同じようにStripeを使用します。たとえば、顧客のリストを取得するAPIコールを行いたい場合、次のようにStripeクライアントを初期化し、APIコールを行います。

const stripe = new Stripe("<YOUR (TEST MODE) API KEY GOES HERE>", {
  apiVersion: "2023-08-16",
})

if (import.meta.main) {
  const customers = await stripe.customers.list({limit: 5})
  console.log(customers.data.length)
  console.log(customers.data.map(c => c.email))
}

このコードは、APIキーを設定し、5件の顧客を取得した上でその数とメールアドレスをコンソールに出力します。

Fetchとnpm:https

最近のDenoバージョンでは、Nodeの標準ライブラリ用の互換シムが追加されたため、このコードはそのままで機能するはずです。Nodesの互換モードが導入される前のDenoバージョンでは(v1.15で導入、1.28で安定化)、以下のように書く必要がありました。

const stripe = new Stripe("<YOUR API KEY GOES HERE>", {
  apiVersion: "2023-08-16",
  httpClient: Stripe.createFetchHttpClient(),
})

これは、Nodeの標準ライブラリであるnode:httpsモジュール(stripe-nodeがデフォルトで使用しようとするもの)の代わりに、「fetch」API(ウェブおよびDenoにネイティブ)を使用することをstripe-nodeに伝えるためです。新しいDenoバージョンであっても、互換レイヤーを飛ばして舞台裏をシンプルに保つためにこれを行うことをお勧めします。

型チェック、実行、許可を求める

コードを実行する前に、型チェックを行いましょう。

$ deno check main.ts

もし何かしらのエラーが出れば、それに対処し、deno check main.tsを再実行して、問題が解消されたらプログラムを実行します。

$ deno run main.ts

Denoの特徴的な「パーミッションシステム」が働きます。ある程度の不便と引き換えに、心の平安を提供します。api.stripe.comがドメイン名として表示されれば、誰もstripe-nodeの供給を悪用してあなたのStripeの資格情報を別のドメインに送信していないとわかります。yを押してプログラムを実行しましょう。

その後、プロンプトをバイパスするためにコマンドラインフラグを使用して実行します。

$ deno run --allow-net=api.stripe.com main.ts

これはかなり長いので、deno.jsoncに「タスク」として作成し、毎回タイプする必要がないようにすることをお勧めします。

{
  "tasks": {
    "dev": "deno run --watch --allow-net=api.stripe.com main.ts"
  }
}

以上で、Deno環境におけるstripe-nodeの基本的な使用方法を説明しましたが、次に考慮すべきステップがいくつかあります。

  • 署名シークレットとAPIキーに環境変数を使用する
  • ローカルホストではなくインターネット上のサーバーにデプロイし、そのサーバーにStripeイベントを送信するためのウェブフックエンドポイントを作成する
  • アプリに実際に必要なStripe関連のロジックを書く。顧客のリストは始まりに過ぎません

最後に、stripe-nodeのDenoサポートに問題があると感じたり、提案がある場合は、いつでもgithub.com/stripe/stripe-nodeでGithub issueのフィードバックを残せるという言葉をお届けします。幸運を祈ります!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1