まえがき
第1章 作業準備をする
第2章 アプリケーションを構築する
第3章 チャットとの連携を設定する
第4章 各環境にデプロイする
第5章 自動でデプロイする
あとがき
この本を手に取っていただき、ありがとうございます。
昨今のインターネットの普及により、物理・データといった種別を問わず、さまざまな買い物がネット上ですべて完結するようになりました。昨今の事情によりその需要はどんどん高まり、さらにECサイトも大小さまざまあるため、日々価格が競い合うように変化しています。そんな中、ずっと気になっているものを買おうか迷っていたらいつの間にか価格が上がっていたり、定期的なセールを忘れてチャンスを逃して買えない、などといったことがよくあるのではないでしょうか。また、欲しいものをよきタイミングで買うため、または適正価格かどうかを確認するため、価格比較サイトを日々チェックしている方もいるかと思います。
そこで本書ではその手間を少しでも省くべく、APIやスクレイピングを用いて、サイトの商品価格をチェックするアプリケーションを構築します。利用する技術スタックですが、利用する言語はNode.jsです。登録や結果の確認にはSlackやDiscordといったチャットサービスを利用し、各サービスに紐付けるボットを用いて登録やチェック結果の通知をします。各種チェッカーの実行環境にはGoogle Cloudを利用し、仮想マシン(VM)やサーバーレス、コンテナといった環境で、作成したアプリケーションを実行します。構築段階では手動デプロイですが、最後に自動化を設定しますので、参照先の追加変更や、取得ロジックの変更にも強くなります。
本書の内容は実際に動かしてみたくなる実践的なツールとなっていますので、チャットやクラウド周りにおける実行例として参考になるかと思います。アプリケーション自体の構築や、APIやDOMの解析、各種サービスとの連携、クラウド周りの運用設計構築...と必要な知識も多いですが、それぞれの分野でのベーシックな技術を利用するよう心がけました。
この本は次の読者を想定しています。
・日々の価格変動を、手間をかけずにチェックしたい
・チャット連携やボットの利用例を知りたい
・Google Cloudを用いたアプリケーションの構築例を知りたい
この本の内容にそって進めることでたどり着く、最終的なゴールは次のとおりです。
・Node.jsによるアプリケーションの構築
・Slack/DiscordのボットやAPIを用いた連携
・パブリッククラウドでのアプリケーション実行環境の構築設定
この本の中で使用している各種コードは、次のリポジトリーに公開しています。
https://github.com/taiko19xx/gcp-price-checker-book
質問や誤字脱字、誤った内容などがありましたら、次の連絡先へご連絡ください。
・メール: hello@taiko19xx.net
・Twitter: @taiko19xx
いただいた情報は確認の上、著者のブログにて適時公開します。
・ブログ: https://tech.taiko19xx.net/
本書に記載された内容は情報の提供のみを目的としています。したがって、本書を用いた開発および運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発および運用の結果について、著者はいかなる責任も負いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
早速作業を進めます。まずは、今後必要になってくる環境などの準備を進めます。
最初はGoogle Cloudの設定です。アカウントがない場合は作成が必要ですが、Googleアカウント(Gmailなど)を利用してログインします。持っていない場合はあらかじめ作成します。
管理画面となるコンソールへは、Googleへログインした状態でトップ画面1右上の「コンソール」を選択すると移動できます。異なるGoogleアカウントを利用する場合は、あらかじめ切り替えておきます。
少し待つとコンソールが表示されます。もしトライアルの登録や請求先情報の入力などの画面が出てきた場合は、画面の指示にしたがって登録してください。
次にプロジェクト2を設定します。プロジェクトはGoogle Cloudにおけるリソース管理の細かいグループ分けです。既存のプロジェクトでも作業は進められますが、今回は新たに作成します。「Google Cloud Platform」のロゴと検索ボックスの間にある「▼」を選択すると、プロジェクトの選択画面が表示されるので、右上の「新しいプロジェクト」を選択します。
プロジェクトの新規作成画面になります。今回は、プロジェクト名は「gcp-scrapingbook」とします。プロジェクト名を入力すると、「プロジェクトID」の値が変化する3ので、これをメモしておきます。それ以外の項目はデフォルトもしくは必要に応じて設定し、「作成」を選択します。
通知欄に「プロジェクト「gcp-scrapingbook」を作成」と表示されたら完了です。「プロジェクトを選択」を選択し、プロジェクトのダッシュボードへ移動します。
移動すると、プロジェクト名欄に「gcp-scrapingbook」と表示されています。これでプロジェクトが選択されている状態です。
次にCloud Shell4を立ち上げます。Cloud Shellはブラウザーから操作できるCLI環境です。小さなVM上で動いており、5GBのストレージと合わせて、Google CloudのCLIツールgcloudやkubectl5、Terraform6といった各種ユーティリティが備え付けられています。また、ブラウザー上のエディターであるCloud Shellエディターもあるため、開発からデプロイ、運用までの一連の作業がブラウザーだけで完結できます。
Cloud Shellを呼び出すには、右上の「Cloud Shellをアクティブにする」を選択します。
画面下にコンソールが現れ、最初にプロビジョニングが行われます。その後少し待つと入力待ち状態になり、利用できるようになります。本来であればプロジェクトの選択も必要ですが、Cloud Shellを起動した時点のプロジェクトが自動で選択されています。
試しにコマンドを実行してみます。gcloud compute regions listと入力し実行します。このコマンドでは、現在利用できるリージョンの一覧を取得できます。
$ gcloud compute regions list
「Cloud Shellの承認」が表示された場合は承認を選択します。
APIが有効になっていない場合、有効にするかどうかというメッセージが表示されます。Google Cloudでは必要に応じて操作先リソースのAPIを有効にする必要がありますので、ここではyを入力してEnterを押します。するとAPIの有効化が始まりますが、有効化には少し時間がかかります。
API [compute.googleapis.com] not enabled on project [xxxxxxxxxxxx].
Would you like to enable and retry (this will take a few minutes)?
(y/N)? y
Enabling service [compute.googleapis.com] on project [xxxxxxxxxxxx]...
Operation "operations/acf.p2-335088215477-4ca041e3-0822-4ed2-990f-811d5f273f2c" finished successfully.
APIの有効化に成功すると、次のようなリージョン毎の状態がレスポンスとして返ってきます。これでコマンドが疎通することが確認できました
(略)
NAME: asia-northeast1
CPUS: 0/24
DISKS_GB: 0/4096
ADDRESSES: 0/8
RESERVED_ADDRESSES: 0/8
STATUS: UP
TURNDOWN_DATE:
NAME: asia-northeast2
CPUS: 0/24
DISKS_GB: 0/4096
ADDRESSES: 0/8
RESERVED_ADDRESSES: 0/8
STATUS: UP
TURNDOWN_DATE:
NAME: asia-northeast3
CPUS: 0/24
DISKS_GB: 0/4096
ADDRESSES: 0/8
RESERVED_ADDRESSES: 0/8
STATUS: UP
TURNDOWN_DATE:
(略)
本来gcloudのようなコマンドをローカルなどで実行する際は認証情報の設定が必要ですが、Cloud Shellではログインしているユーザーの情報を利用してアクセスするため、コマンドを呼び出すだけで操作ができるようになります。
次は、情報を保管するデータストアを設定します。Google Cloudにはさまざまなデータストアのサービスがあり、有名なBigQuery7もそのひとつです。今回はデータウェアハウスの用途ではなく、かつRDBMSのようなリレーション要素も不要なため、手軽なNoSQLサービスであるCloud Firestore8を利用します。
ナビゲーションメニューから「Cloud Firestore」を選択します。最初はAPIの有効化が必要なため、少し時間がかかります。コンソール右上の通知エリアに、次の通知が表示されれば有効化は完了です。
少し待つと、Cloud Firestoreのモード選択になります。ネイティブとDatastoreモードのふたつがありますが、DatastoreモードはこれまでにあったCloud Datastore9の互換モードです。今回は「ネイティブモード」を選択します。
次にロケーションを選択します。「asia-northeast1(Tokyo)」を選択し、「データベースを作成」を選択します。
作成中の画面になるため、少し待ちます。
作成が完了すると、データの管理画面に移動します。「データベースの準備ができました」と表示されていれば完了です。
試しにデータを追加してみます。「コレクションを開始」を選択します。