[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の利点ですね。
ではでは。
  








