Loading
BLOG 開発者ブログ

2019年2月1日

[Google Cloud Functions]でQRコード作成APIを構築!

スマートフォンを絡めたサービスやシステムには、QRコード生成が必要になる場面があるかと思います。(QRコードはデンソーウェーブの登録商標です)

そんなとき、言語やフレームワークの機能、ライブラリを使用することでQRコードは作成出来ることが多いとは思いますが、WebAPIとして実装したい場合もあると思います。

そこで!今回はGoogle Cloud Functionsを利用し、QRコードを生成するWebAPIを構築していきます。





こんにちは。モバイルソリューショングループのimai.kです。

早速ですが、以下の流れで進めていきます。

流れ

  • コンソールからGoogle Cloud Platform(以下、GCP)にアクセスするための準備
  • Python環境について
  • QRコード生成スクリプトの作成
  • スクリプトのアップロード


GCPアクセスの準備

こちらを参考に、GCPのプロジェクト作成、CloudSDKのインストール・gcloudコマンドのセットアップを行なってください。


Python環境について

Cloud Functionsでは、本記事公開時点で”Node.js 6, Node.js 8, Python, Go”からランタイムを選択可能です。(ただし、”Node.js 6″以外はbeta releaseの状態です。)

今回はPythonを選択しますが、Cloud FunctionsのPythonランタイムは3.7.1(記事公開時点)となっており、ローカルでスクリプトを組む際、同様の環境を構築しておくのが良いでしょう。

ご自身の環境に合わせて、Pythonの環境構築を行なってください。


QRコード生成スクリプトの作成

実際にCloud Functionsにデプロイするスクリプトを作成します。

Cloud Functionsでは、requirements.txtにスクリプトで使用するライブラリを記載することで、ライブラリの依存関係を解決できます。(Python使いにとってはとても自然ですね。)

まずは任意のディレクトリ内に、requirements.txtを作成してください。

# requirements.txt

Click==7.0
Flask==1.0.2
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
Pillow==5.4.1
qrcode==6.1
six==1.12.0
Werkzeug==0.14.1
 

次に、メインのスクリプトを作成します。

先ほどrequirements.txtを配置したディレクトリにmain.pyを作成してください。

# main.py

import sys
import qrcode
import io
from flask import escape, helpers

def make_qr(request):
    img = generate_qr_image(url=request.args.get('q'))
    buf = io.BytesIO()
    img.save(buf, 'png')
    response = helpers.make_response(buf.getvalue())
    response.headers["Content-type"] = "Image"
    return response

def generate_qr_image(url='https://www.isoroot.jp/'):
    qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
    qr.add_data(url)
    qr.make(fit=True)
    img = qr.make_image()
    return img
 


スクリプトのアップロード

最後に、作成したスクリプトをアップロードしましょう。

gcloudコマンドを使用し、コンソールからアップロードします。

gcloud functions deploy make_qr --runtime python37 --trigger-http

コマンド実行完了後、”https://{region}-{project_name}.cloudfunctions.net/make_qr”のようなURLが吐き出されます。

上記URLに”q=https://www.isoroot.jp/”とクエリーパラメータを付与し、ブラウザに入力してみましょう。

https://{region}-{project_name}.cloudfunctions.net/make_qr?q=https://www.isoroot.jp/

以下のようなQRコードが生成されれば成功です。


まとめ

Cloud Functionsを利用することで、簡単にWebAPIを作成することができました。

コーディング > デプロイまでを直感的に行うことができるのがCloud Functionsの利点ですね。

ではでは。

imai.kのブログ