目次

まえがき

想定読者
ゴール
ソースコード
連絡先
免責事項
表記関係

第1章 作業準備をする

1.1 Google Cloud
1.2 DMM WebサービスのAPI ID
1.3 Node.js

第2章 アプリケーションを構築する

2.1 概要
2.2 共通ライブラリー追加
2.3 データ取得処理作成
2.4 チャット連携構築
2.5 チェック処理作成

第3章 チャットとの連携を設定する

3.1 概要
3.2 VMインスタンス作成と設定
3.3 Slackとの連携
3.4 Discordとの連携

第4章 各環境にデプロイする

4.1 概要
4.2 準備
4.3 Compute Engineにデプロイ
4.4 Cloud Functionsにデプロイ
4.5 Cloud Runにデプロイ
4.6 Google Kubernetes Engineにデプロイ

第5章 自動でデプロイする

5.1 概要
5.2 リポジトリーの作成
5.3 リポジトリーにコードを反映
5.4 Cloud Runと連携する
5.5 Cloud Functionsと連携する
5.6 GKEと連携する

あとがき

まえがき

 この本を手に取っていただき、ありがとうございます。

 昨今のインターネットの普及により、物理・データといった種別を問わず、さまざまな買い物がネット上ですべて完結するようになりました。昨今の事情によりその需要はどんどん高まり、さらに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/

免責事項

 本書に記載された内容は情報の提供のみを目的としています。したがって、本書を用いた開発および運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発および運用の結果について、著者はいかなる責任も負いません。

表記関係

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

第1章 作業準備をする

早速作業を進めます。まずは、今後必要になってくる環境などの準備を進めます。

1.1 Google Cloud

 最初はGoogle Cloudの設定です。アカウントがない場合は作成が必要ですが、Googleアカウント(Gmailなど)を利用してログインします。持っていない場合はあらかじめ作成します。

 管理画面となるコンソールへは、Googleへログインした状態でトップ画面1右上の「コンソール」を選択すると移動できます。異なるGoogleアカウントを利用する場合は、あらかじめ切り替えておきます。

図1.1: Google Cloudトップ

 少し待つとコンソールが表示されます。もしトライアルの登録や請求先情報の入力などの画面が出てきた場合は、画面の指示にしたがって登録してください。

図1.2: ダッシュボード

 次にプロジェクト2を設定します。プロジェクトはGoogle Cloudにおけるリソース管理の細かいグループ分けです。既存のプロジェクトでも作業は進められますが、今回は新たに作成します。「Google Cloud Platform」のロゴと検索ボックスの間にある「▼」を選択すると、プロジェクトの選択画面が表示されるので、右上の「新しいプロジェクト」を選択します。

図1.3: 新しいプロジェクト

 プロジェクトの新規作成画面になります。今回は、プロジェクト名は「gcp-scrapingbook」とします。プロジェクト名を入力すると、「プロジェクトID」の値が変化する3ので、これをメモしておきます。それ以外の項目はデフォルトもしくは必要に応じて設定し、「作成」を選択します。

図1.4: プロジェクト作成

 通知欄に「プロジェクト「gcp-scrapingbook」を作成」と表示されたら完了です。「プロジェクトを選択」を選択し、プロジェクトのダッシュボードへ移動します。

図1.5: プロジェクト作成完了

 移動すると、プロジェクト名欄に「gcp-scrapingbook」と表示されています。これでプロジェクトが選択されている状態です。

図1.6: プロジェクト作成済

1.1.1 Cloud Shell

 次にCloud Shell4を立ち上げます。Cloud Shellはブラウザーから操作できるCLI環境です。小さなVM上で動いており、5GBのストレージと合わせて、Google CloudのCLIツールgcloudkubectl5、Terraform6といった各種ユーティリティが備え付けられています。また、ブラウザー上のエディターであるCloud Shellエディターもあるため、開発からデプロイ、運用までの一連の作業がブラウザーだけで完結できます。

 Cloud Shellを呼び出すには、右上の「Cloud Shellをアクティブにする」を選択します。

図1.7: Cloud Shell起動

 画面下にコンソールが現れ、最初にプロビジョニングが行われます。その後少し待つと入力待ち状態になり、利用できるようになります。本来であればプロジェクトの選択も必要ですが、Cloud Shellを起動した時点のプロジェクトが自動で選択されています。

図1.8: Cloud Shell準備完了

 試しにコマンドを実行してみます。gcloud compute regions listと入力し実行します。このコマンドでは、現在利用できるリージョンの一覧を取得できます。

$ gcloud compute regions list

 「Cloud Shellの承認」が表示された場合は承認を選択します。

図1.9: 承認画面

 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ではログインしているユーザーの情報を利用してアクセスするため、コマンドを呼び出すだけで操作ができるようになります。

1.1.2 Cloud Firestore

 次は、情報を保管するデータストアを設定します。Google Cloudにはさまざまなデータストアのサービスがあり、有名なBigQuery7もそのひとつです。今回はデータウェアハウスの用途ではなく、かつRDBMSのようなリレーション要素も不要なため、手軽なNoSQLサービスであるCloud Firestore8を利用します。

 ナビゲーションメニューから「Cloud Firestore」を選択します。最初はAPIの有効化が必要なため、少し時間がかかります。コンソール右上の通知エリアに、次の通知が表示されれば有効化は完了です。

図1.10: API有効化通知

 少し待つと、Cloud Firestoreのモード選択になります。ネイティブとDatastoreモードのふたつがありますが、DatastoreモードはこれまでにあったCloud Datastore9の互換モードです。今回は「ネイティブモード」を選択します。

図1.11: モード選択画面

 次にロケーションを選択します。「asia-northeast1(Tokyo)」を選択し、「データベースを作成」を選択します。

図1.12: ロケーション選択画面

 作成中の画面になるため、少し待ちます。

図1.13: Firestore作成中

 作成が完了すると、データの管理画面に移動します。「データベースの準備ができました」と表示されていれば完了です。

図1.14: Firestore準備完了

 試しにデータを追加してみます。「コレクションを開始」を選択します。

図1.15: コレクションを追加

1. https://cloud.google.com/

2. https://cloud.google.com/resource-manager/docs/creating-managing-projects

3. プロジェクト名と同一か、ランダムな文字列となります

4. https://cloud.google.com/shell

5. KubernetesのCLIツール。4章で利用します

6. インフラ構成をコードで管理するツール

7. https://cloud.google.com/bigquery

8. https://cloud.google.com/firestore

9. https://cloud.google.com/datastore

試し読みはここまでです。
この続きは、製品版でお楽しみください。