Apps ScriptでGoogleスプレッドシートから動的QRコードを作成する
Googleスプレッドシートから動的QRコードを作るには、1行に1つのリンクと自社の参照IDを入れ、短いApps Scriptをシートに貼り付け、APIトークンをスクリプト プロパティに保存して、メニューから実行します。スクリプトは行を100件ずつQR Maker REST APIに送り、各行の短縮リンクをシートに書き戻します。もう一度実行しても、まだ空いている行だけを埋めるので、重複して作成されることはありません。
この方法が向いているとき
商品リスト、座席表、キャンペーン管理表の多くは、すでにスプレッドシートにあります。チームの誰かがそのリストを手作業で管理しているなら、同じシートからコードを作れば、開発者を介さずにリストとコードの整合性を保てます。典型的なのは、パッケージ用に商品SKUごと、テーブルや部屋ごと、あるいは同じキャンペーンで営業担当者や店舗ごとにコードを作るケースです。
自社アプリの中でコードが必要な場合は、サーバーからAPIを呼び出してください。その方法はREST APIガイドで解説しています。
必要なもの
- QR MakerのBusinessプランとAPIトークン。トークンは「設定」の「API トークン」で作成します。
qrs_で始まり、表示されるのは一度だけです。 - 1行目に見出しがあり、次の列を持つGoogleスプレッドシート。A
external_id、Btarget_url、Cname(任意)、Dshort_link(空欄のまま)、Estatus(空欄のまま)。
external_id はその行に対する自社の参照値で、SKU、テーブル番号、営業担当コードなどです。アカウント内で一意である必要があり、英字、数字、ピリオド、アンダースコア、コロン、ハイフンを使えます。
ステップ1:スクリプトを追加する
シートを開き、「拡張機能」(Extensions)→「Apps Script」を選び、仮のコードを削除して google-sheets.gs の内容を貼り付け、プロジェクトを保存します。
ステップ2:トークンを安全に保存する
Apps Scriptエディタで「プロジェクトの設定」(Project Settings)を開き、「スクリプト プロパティ」(Script properties)までスクロールして、QR_TOKEN という名前のプロパティにトークンを値として追加します。
トークンをセルに貼り付けないでください。シートを開ける人は誰でもセルの内容を読めますし、トークンを持つ人はあなたのアカウントでコードを作成、変更、削除できてしまいます。スクリプト プロパティは、スクリプトを編集できる人にしか見えません。
ステップ3:実行する
シートを再読み込みすると、新しく「QR Maker」メニューが表示されます。「Create codes for new rows」(新しい行のコードを作成)を選びます。初回は、スクリプトがシートを編集し外部サービスを呼び出すことを許可するよう、Googleから求められます。
IDとリンクがあってまだ短縮リンクのない行ごとに、スクリプトが動的コードを作成してD列を埋めます。E列には created(作成済み)、そのIDのコードが以前に作られていれば already existed(既存)、行が拒否された場合はエラーコードが表示されます。リンクが有効なhttp/httpsアドレスでなければ INVALID_TARGET_URL、別のURL短縮サービスへのリンクなど行き先が安全チェックで拒否された場合は URL_BLOCKED_ で始まるコードです。
ステップ4:画像を入手する
D列の短縮リンクが、印刷するコードにエンコードすべき内容です。画像そのものの入手方法は2つあります。
- QR Makerのダッシュボードから各コードをSVGでダウンロードする。そこで自社の配色やロゴも適用できます。
- APIで
GET /v1/qrcodes/by-external-id/{external_id}?include=svgを呼び出して取得する。data.svgにSVGテキストを含むコードが返ります。Pythonのサンプルは行ごとにSVGを1つ保存するので、数百個のコードならこちらが早道です。
後から行き先を変更する
B列を編集してスクリプトを再実行しても、既存のコードは移動しません。これは意図的な設計です。既知のIDで別のリンクをPOSTすると、すでに印刷されているかもしれないコードを黙ってリダイレクトする代わりに、競合エラーが返ります。行き先はダッシュボードで変更するか、新しい target_url を付けて PATCH /v1/qrcodes/by-external-id/{external_id} を呼び出してください。
気をつけたい制限
1回の実行では1リクエストあたり最大100行を送り、成功した行1つにつき、Businessプランに含まれる月50,000回の呼び出しを1回消費します。失敗した行はカウントされません。Apps Script自体は1回の実行で約6分経つと停止しますが、数千行には十分です。それ以上ある場合はもう一度実行すれば、止まったところから続きます。
よくある質問
サーバーは必要ですか?
不要です。Apps ScriptはGoogleのサーバー上で動くので、トークンがブラウザに届くことはありません。APIがWebページからの呼び出しを受け付けないにもかかわらずこの方法が使えるのは、そのためです。
閲覧権限だけの同僚にトークンが見えますか?
見えません。スクリプト プロパティを見られるのは、スクリプト プロジェクトを編集できる人だけです。閲覧者やコメント可の人は開けません。
行を削除したらどうなりますか?
コードには何も起きません。行を削除しても、シートから消えるだけです。コードを使えなくしたい場合は、ダッシュボードかAPIで無効化または削除してください。