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