Google Cloudで始めるデータベース構築：種類とハンズオン

Google Cloud (GCP) には、様々な種類のデータベースサービスがあり、用途やデータの特性に合わせて最適なものを選択できます。本記事では、GCPの代表的なデータベースサービスの種類とその特徴を解説し、実際に手を動かしてデータベース構築を体験できるハンズオン手順をご紹介します。

### 1. GCPのデータベースサービスの種類

GCPでは、**構造化データ**を扱うリレーショナルデータベース、**非構造化データ**を扱うNoSQLデータベース、そして大量のデータを分析するためのデータウェアハウスなど、多様なデータベースサービスが提供されています.

#### 1.1. 構造化データ向けデータベース (リレーショナルデータベース)

リレーショナルデータベースは、行と列からなるテーブルで構成され、事前に定義された関係に基づいてデータを整理・管理します.

*   **Cloud SQL**: フルマネージドなリレーショナルデータベースサービスで、**MySQL、PostgreSQL、SQL Server** を選択できます。セットアップが容易で、バックアップ、高可用性 (HA) 構成、セキュリティアップデートなどをGoogle Cloud側が自動で行ってくれるため、アプリケーション開発に集中できます。比較的小規模なWebアプリケーションや業務アプリケーションに適しています。
*   **AlloyDB for PostgreSQL**: PostgreSQLと互換性のあるフルマネージドデータベースサービスで、高い可用性とパフォーマンスが求められるアプリケーション向けに設計されています。Googleが独自に開発した「**カラム型エンジン**」と「**AlloyDBに組み込まれた機械学習**」によって、高いパフォーマンスを実現しています。
*   **Cloud Spanner**: グローバルに分散可能な、強整合性を持つフルマネージドリレーショナルデータベースです。負荷に応じて無限にスケーリングでき、グローバルに分散しながらも**強整合性**のトランザクションを提供できるのが特徴です。大量のデータを扱うグローバルなアプリケーションに適しています。

#### 1.2. 非構造化データ向けデータベース (NoSQLデータベース)

NoSQLデータベースは、リレーショナルデータベースのような厳密なスキーマを持たず、多様な形式の非構造化データを柔軟に保存・管理できます。**音声データ**や**画像データ**などが非構造化データとして挙げられています.

*   **Cloud Bigtable**: ペタバイト級の大量データを、毎秒何百万ものリクエストを処理できるNoSQL型のフルマネージドデータベースです。Google検索やGoogleマップなど、多くのGoogleサービスで利用されており、**IoTデバイスのデータ**、**金融取引**、**ログ分析**、**時系列データ**などの用途に適しています。データは一意の**行キー**とそれに対応する**列データ**を持つ**キーバリューストア**として保存され、行単位でスキャンされます。スケーリングが必要な大規模アプリケーションに適しています。
*   **Cloud Datastore (Cloud Firestore in Datastore mode)**: フルマネージドなNoSQLドキュメントデータベースで、現在はCloud Firestoreの一部として提供されています。**スキーマレス**であり、**エンティティ**と呼ばれる単位でデータを管理し、エンティティは**カインド**と呼ばれるカテゴリに分類されます。ドキュメントのような非構造化データを扱うのに便利です。

#### 1.3. データウェアハウス

データウェアハウスは、様々なアプリケーションから生成された大量のデータを集約し、分析するためのサービスです。

*   **BigQuery**: フルマネージドなデータウェアハウスで、数テラバイトから数ペタバイトのデータを扱うことができます。コンピューティングリソースとストレージが分離しているため、柔軟なスケーラビリティを持ちます。**列指向**のストレージを採用しており、大量のデータに対する高速なクエリ処理が可能です。データ分析基盤として広く利用されています。複雑なクエリに対処できる点が大きな利点です。

### 2. ハンズオン：Cloud SQL for MySQLインスタンスの作成と接続

ここでは、最も手軽に始められるCloud SQL for MySQLを使用して、データベースインスタンスを作成し、接続する手順をハンズオン形式で解説します。

#### 2.1. Google Cloud プロジェクトの準備

まだGoogle Cloudアカウントをお持ちでない場合は、[Google Cloud の無料トライアル](https://cloud.google.com/free)に登録してください。

#### 2.2. Cloud SQL for MySQL インスタンスの作成

1.  Google Cloudコンソールにアクセスし、左側のメニューから **[SQL]** を選択します。
2.  **[インスタンスを作成]** をクリックします。
3.  **[MySQL]** をデータベースエンジンとして選択します。
4.  **インスタンスID** を設定します (例: `my-mysql-instance`)。
5.  **root パスワード** を設定します (空白も可能ですが、セキュリティのため設定推奨)。
6.  **リージョン** を選択します。最適なパフォーマンスを得るためには、ユーザーの近くのリージョンを選択してください。無料枠の対象となるリージョンがデフォルトで選択されている場合があります。
7.  **[Show configuration options]** をクリックして構成オプションを開きます。
8.  **[Connectivity]** セクションで、**[Public IP]** にチェックが入っていることを確認します。これにより、AppSheetなどの外部アプリケーションから接続するためのIPアドレスが作成されます。
9.  **[ネットワークを追加]** をクリックし、AppSheetサーバーのIPアドレス ([Google Cloud でホストされる MySQL データベースを作成する - AppSheet ヘルプ](https://support.google.com/appsheet/answer/10067447?hl=ja) に記載) をCIDR表記 (`20.189.130.98/32` の形式) で入力します。これにより、AppSheetサーバーからの接続が許可されます。
10. **[作成]** をクリックします。インスタンスの作成には数分かかることがあります。

#### 2.3. Cloud Shell から Cloud SQL インスタンスへの接続

1.  Google Cloudコンソールの右上にある **[Cloud Shell をアクティブにする]** アイコンをクリックします。
2.  Cloud Shell が起動したら、以下のコマンドを入力してCloud SQLインスタンスに接続します:

    ```bash
    gcloud sql connect [インスタンス名] --user=root --quiet
    ```

    `[インスタンス名]` の部分には、先ほど作成したインスタンスID (`my-mysql-instance` など) を入力します。
3.  rootパスワードの設定時にパスワードを入力します (設定していない場合はEnterキーを押します)。
4.  MySQLのプロンプト (`mysql>`) が表示されれば、接続は成功です。

#### 2.4. データベースの作成とデータの挿入

1.  MySQLプロンプトで、新しいデータベースを作成します:

    ```sql
    CREATE DATABASE my_first_db;
    ```
2.  作成したデータベースを使用します:

    ```sql
    USE my_first_db;
    ```
3.  簡単なテーブルを作成し、データを挿入してみましょう:

    ```sql
    CREATE TABLE books (bookName VARCHAR(255), price INT);
    INSERT INTO books (bookName, price) VALUES ("はじめてのGCP", 2000);
    INSERT INTO books (bookName, price) VALUES ("GCPステップアップ", 2500);
    ```
4.  挿入したデータを確認します:

    ```sql
    SELECT * FROM books;
    ```

    以下のような結果が表示されるはずです。

    ```
    +--------------------+-------+
    | bookName           | price |
    +--------------------+-------+
    | はじめてのGCP      |  2000 |
    | GCPステップアップ |  2500 |
    +--------------------+-------+
    2 rows in set (0.00 sec)
    ```
5.  Cloud Shell を終了するには、`exit` コマンドを入力します。

#### 2.5. MySQL Workbench からの接続 (任意)

ローカルのMySQL WorkbenchなどのツールからCloud SQLインスタンスに接続することも可能です。

1.  Cloud SQLインスタンスの詳細ページで、**[接続]** タブを開き、**[パブリックIPアドレス]** を確認します。
2.  MySQL Workbenchを起動し、新しい接続を作成します。
3.  ホスト名に上記のパブリックIPアドレスを入力します。
4.  ユーザー名に `root` を入力し、設定したパスワードを入力します。
5.  [Test Connection] をクリックして接続を確認し、[OK] をクリックして保存します。

### 3. まとめ

本記事では、Google Cloudの代表的なデータベースサービスの種類と特徴、そしてCloud SQL for MySQLインスタンスを作成して接続する基本的な手順を解説しました。GCPには、様々なニーズに対応できる多様なデータベースサービスが用意されています。まずはCloud SQLのようなフルマネージドサービスから試してみて、徐々に他のサービスにも挑戦していくのがおすすめです。

**参考資料:**

*   **GCPの各種DBサービスについて理解を深めよう #GoogleCloud - Qiita**: [https://qiita.com/ponkomarujp/items/b58c6b478c54892a4892](https://qiita.com/ponkomarujp/items/b58c6b478c54892a4892)
*   **Google Cloud でホストされる MySQL データベースを作成する - AppSheet ヘルプ**: [https://support.google.com/appsheet/answer/10067447?hl=ja](https://support.google.com/appsheet/answer/10067447?hl=ja)
*   **Google Cloudのデータベースの作成｜shun**: [https://zenn.dev/shun/articles/6404297c602678](https://zenn.dev/shun/articles/6404297c602678)
*   **GoogleCloud入門、インスタンス作成、データベース構築** (YouTube動画のトランスクリプト): 提供されたトランスクリプトは直接的なURLではありません。動画はYouTubeチャンネル "Minokamo Citizens" にアップロードされています。
*   **【Google Cloud】データベースの特徴を覚えるぞ（クラウド入門者向け） - Sight-R（サイタル）**: [https://www.sight-r.com/column/googlecloud-database/](https://www.sight-r.com/column/googlecloud-database/)
*   **データベースの作成と管理 | Cloud SQL for MySQL | Google Cloud**: [https://cloud.google.com/sql/docs/mysql/create-manage-databases?hl=ja](https://cloud.google.com/sql/docs/mysql/create-manage-databases?hl=ja)
*   **クイックスタート: Cloud Shell から Cloud SQL for MySQL に接続する | Google Cloud**: [https://cloud.google.com/sql/docs/mysql/quickstart-connect-cloud-shell?hl=ja](https://cloud.google.com/sql/docs/mysql/quickstart-connect-cloud-shell?hl=ja)

Cloud SQLのデータベース作成と管理に関する公式ドキュメント ([https://cloud.google.com/sql/docs/mysql/create-manage-databases?hl=ja](https://cloud.google.com/sql/docs/mysql/create-manage-databases?hl=ja)) も併せて参照ください。