STEP 9:Google Cloud Storage(GCS)の紹介

☁️ STEP 9: Google Cloud Storage(GCS)の紹介

GCPのオブジェクトストレージを学び、S3との違いを理解しよう

📋 このステップで学ぶこと

  • Google Cloud Storage(GCS)の基礎
  • バケット作成と基本操作
  • S3との違いと共通点
  • gsutilコマンドの使い方
  • Python SDKでのGCS操作
  • 実践演習:GCSの基本操作

前提条件:STEP 8までの内容を理解していること

🎯 このステップのゴール

このステップを終えると、GCSでバケットを作成し、ファイルをアップロード・ダウンロードできるようになります。また、S3との違いを理解し、AWS・GCP両方のオブジェクトストレージを扱えるようになります。

🎯 1. Google Cloud Storage(GCS)とは

GCSの基本

Google Cloud Storage(GCS)は、Google Cloud Platform(GCP)が提供するオブジェクトストレージサービスです。AWSのS3と同じように、ファイルを保存・管理できます。

💡 S3とGCSの関係を例えると

S3とGCSは、異なる運送会社の倉庫サービスのようなものです。

【S3とGCSの関係】 S3 = Amazonの倉庫サービス(AWS) GCS = Googleの倉庫サービス(GCP) どちらも: ・ファイルを保存できる(オブジェクトストレージ) ・容量は無制限 ・使った分だけ課金 ・暗号化、アクセス制御完備 違いは: ・運営会社が違う ・料金体系が少し違う ・他のサービスとの連携先が違う 例えるなら: ・ヤマト運輸 と 佐川急便 のような関係 ・基本的なサービスは同じだが、細かい点が違う ・どちらを選ぶかは、他のサービスとの組み合わせ次第

GCSの特徴

🌍 Googleのグローバルネットワーク

YouTube、Gmail、Google検索を支える高速ネットワークを使用。世界中どこからでも高速アクセス。

🔗 BigQueryとの強力な連携

GCSに保存したデータをBigQueryで直接クエリ可能。データ分析に最適。

💰 シンプルな料金体系

S3より料金体系がシンプル。データ転送料金も比較的わかりやすい。

🔒 強固なセキュリティ

データは自動的に暗号化。IAMでアクセス制御。監査ログも標準装備。

GCSの用語(S3との対応)

GCSの用語 S3の対応用語 説明
バケット バケット ファイルを入れる「箱」。同じ概念。
オブジェクト オブジェクト 保存されるファイル。同じ概念。
プロジェクト アカウント GCPの管理単位。バケットはプロジェクト内に作成。
ロケーション リージョン データを保存する地域(東京など)。
ストレージクラス ストレージクラス アクセス頻度に応じた保存方法。

💡 S3を学んでいれば、GCSは簡単!

S3とGCSは基本概念が同じなので、S3を理解していればGCSもすぐに使えます。違いは「コマンド名」と「細かい設定」くらいです。

🪣 2. バケット作成と基本操作

バケットの作成(Webコンソール)

まずは、GCPのWebコンソールからバケットを作成してみましょう。

ステップ1〜4: バケットを作成

  1. GCP Consoleにアクセス(https://console.cloud.google.com/)
  2. 左メニューから「Cloud Storage」→「バケット」を選択
  3. 「作成」ボタンをクリック
  4. バケット名を入力(例:my-gcs-bucket-20240115-abc

ステップ5〜8: 詳細設定

  1. ロケーションタイプを選択
    • Region: 単一リージョン(最安、東京ならasia-northeast1
    • Dual-region: 2つのリージョン(高可用性)
    • Multi-region: 複数リージョン(グローバル配信向け)
  2. ストレージクラスを選択(Standard推奨)
  3. アクセス制御:「均一」を選択(推奨)
  4. 「作成」をクリック

⚠️ バケット名の注意点(S3と同様)

  • グローバルで一意:世界中で誰とも被らない名前が必要
  • 小文字とハイフンのみ:大文字やアンダースコアは使えない
  • 3〜63文字:短すぎても長すぎてもダメ
  • 変更不可:作成後は変更できない(S3と同じ)

ストレージクラスの選択

GCSには4つのストレージクラスがあります。S3と同様に、アクセス頻度に応じて選びます。

GCSクラス S3の対応クラス 用途 料金(GB/月)
Standard S3 Standard 頻繁にアクセスするデータ $0.020
Nearline S3 Standard-IA 月1回程度のアクセス $0.010
Coldline S3 Glacier IR 年4回程度のアクセス $0.004
Archive Glacier Deep Archive 年1回未満のアクセス $0.0012

💡 どのストレージクラスを選ぶ?

【選択の目安】 毎日・毎週アクセスする → Standard 月1回バックアップを確認 → Nearline(最低保存30日) 四半期に1回のレポート → Coldline(最低保存90日) 法律で保管義務があるデータ → Archive(最低保存365日) ポイント: ・Nearline以下は「最低保存期間」がある ・早期に削除すると、最低保存期間分の料金がかかる ・迷ったらStandardで始めて、後からライフサイクルで移行

ファイルのアップロード(Webコンソール)

アップロード手順

  1. 作成したバケットを開く
  2. ファイルをアップロード」または「フォルダをアップロード」をクリック
  3. ファイルを選択してアップロード
  4. アップロード完了後、ファイル一覧に表示される

ダウンロードや削除も、ファイルを選択して右クリックまたはメニューから実行できます。

📁 フォルダの仕組み(S3と同じ)

GCSにも実際のフォルダは存在しません。ファイル名に/を含めることで、フォルダのように見せています。

例:data/sales/2024/01/sales.csv 実際は: ・「data/sales/2024/01/sales.csv」という1つのオブジェクト ・画面上は「data > sales > 2024 > 01 > sales.csv」と表示される これは S3 と全く同じ仕組み!

🔍 3. S3との違いと共通点

共通点(ほぼ同じ)

S3とGCSは同じオブジェクトストレージなので、基本的な考え方は同じです。

✅ 共通する概念

  • オブジェクトストレージ:ファイルを「オブジェクト」として保存
  • バケット構造:ファイルは「バケット」という箱に保存
  • フラット構造:フォルダは実際には存在しない(プレフィックス)
  • HTTP/HTTPSアクセス:URLを使ってファイルにアクセス可能
  • ストレージクラス:アクセス頻度に応じた複数のクラス
  • ライフサイクル管理:古いファイルを自動で削除・移動
  • バージョニング:ファイルの履歴を保存

違い(細かい点)

項目 AWS S3 GCP GCS
バケット名の一意性 グローバルで一意 グローバルで一意
ストレージクラス数 6種類 4種類(シンプル)
コマンドラインツール aws s3 gsutil
Python SDK boto3 google-cloud-storage
URI形式 s3://bucket/key gs://bucket/key
データ分析連携 Athena、Redshift BigQuery(直接連携)
料金体系 複雑 比較的シンプル

💡 結局、どっちを使えばいい?

  • AWSを既に使っている → S3が便利(他AWSサービスとの連携)
  • BigQueryを使いたい → GCSが便利(直接連携)
  • どちらも使っていない → どちらでもOK(両方学ぶのがベスト)

実務では:会社がメインで使っているクラウドに合わせることが多いです。ただし、両方使えるエンジニアの方が市場価値は高いです!

💻 4. gsutilコマンドの使い方

gsutilとは

gsutilは、GCSを操作するためのコマンドラインツールです。AWSのaws s3コマンドと同じ役割です。

💡 gsutil = GCS版のaws s3コマンド

AWS: aws s3 cp file.txt s3://my-bucket/ GCP: gsutil cp file.txt gs://my-bucket/ ほとんど同じ! ・s3:// が gs:// に変わるだけ ・コマンド名も似ている(cp, ls, rm, mb, rb…)

gsutilのインストール

Google Cloud SDKをインストール

# Mac/Linux curl https://sdk.cloud.google.com | bash exec -l $SHELL # Windows # https://cloud.google.com/sdk/docs/install からインストーラをダウンロード # インストール確認 gsutil version # 認証(初回のみ) gcloud auth login # プロジェクト設定 gcloud config set project YOUR_PROJECT_ID

gsutilの基本コマンド

📝 バケット操作

# バケット一覧を表示 gsutil ls # バケット作成(東京リージョン) gsutil mb -l asia-northeast1 gs://my-bucket-name # バケット削除(空の場合) gsutil rb gs://my-bucket-name # バケット削除(中身ごと削除)- 注意! gsutil rm -r gs://my-bucket-name

📝 ファイル操作

# バケット内のファイル一覧 gsutil ls gs://my-bucket-name # ファイルをアップロード gsutil cp local_file.txt gs://my-bucket-name/ # フォルダごとアップロード(再帰的) gsutil cp -r local_folder gs://my-bucket-name/ # ファイルをダウンロード gsutil cp gs://my-bucket-name/file.txt ./ # ファイルを削除 gsutil rm gs://my-bucket-name/file.txt # フォルダごと削除 gsutil rm -r gs://my-bucket-name/folder/

📝 同期(差分だけ転送)

# ローカル → GCS に同期(差分だけアップロード) gsutil rsync -r local_folder gs://my-bucket-name/folder # GCS → ローカル に同期(差分だけダウンロード) gsutil rsync -r gs://my-bucket-name/folder local_folder # 削除も同期する(-d オプション)※注意! gsutil rsync -r -d local_folder gs://my-bucket-name/folder

S3コマンドとの対応表

操作 AWS S3 (aws s3) GCS (gsutil)
バケット一覧 aws s3 ls gsutil ls
バケット作成 aws s3 mb s3://bucket gsutil mb gs://bucket
ファイル一覧 aws s3 ls s3://bucket gsutil ls gs://bucket
アップロード aws s3 cp file s3://bucket/ gsutil cp file gs://bucket/
ダウンロード aws s3 cp s3://bucket/file . gsutil cp gs://bucket/file .
同期 aws s3 sync gsutil rsync

💡 覚え方のコツ

s3://gs://に置き換え、aws s3gsutilに置き換えるだけ!基本的なコマンド(cp, ls, rm, mb)は同じです。

🐍 5. Python SDKでのGCS操作

google-cloud-storageライブラリ

PythonからGCSを操作するには、google-cloud-storageライブラリを使います。boto3(S3用)と似た使い方ができます。

インストール

# インストール pip install google-cloud-storage # 確認 python -c “from google.cloud import storage; print(‘OK’)”

認証の設定

# 方法1:gcloud認証を使う(推奨・開発時) gcloud auth application-default login # 方法2:サービスアカウントキーを使う(本番環境) # 1. GCP ConsoleでサービスアカウントとKeyを作成 # 2. JSONファイルをダウンロード # 3. 環境変数を設定 export GOOGLE_APPLICATION_CREDENTIALS=”/path/to/key.json”

基本的な操作

📤 ファイルのアップロード

from google.cloud import storage # クライアントを作成 client = storage.Client() # バケットを取得 bucket = client.bucket(‘my-bucket-name’) # ファイルをアップロード blob = bucket.blob(‘data/sample.csv’) # GCS上のパス blob.upload_from_filename(‘local_sample.csv’) # ローカルファイル print(f”✅ アップロード完了: gs://my-bucket-name/{blob.name}”)

📥 ファイルのダウンロード

from google.cloud import storage client = storage.Client() bucket = client.bucket(‘my-bucket-name’) # ファイルをダウンロード blob = bucket.blob(‘data/sample.csv’) blob.download_to_filename(‘downloaded_sample.csv’) print(f”✅ ダウンロード完了: downloaded_sample.csv”) # 内容を文字列として取得(ファイル保存なし) content = blob.download_as_text() print(content)

📋 ファイル一覧の取得

from google.cloud import storage client = storage.Client() bucket = client.bucket(‘my-bucket-name’) # バケット内の全ファイル blobs = bucket.list_blobs() print(“バケット内のファイル:”) for blob in blobs: print(f” 📄 {blob.name} ({blob.size} bytes)”) # プレフィックス(フォルダ)で絞り込み blobs = bucket.list_blobs(prefix=’data/’) print(“\ndataフォルダ内のファイル:”) for blob in blobs: print(f” 📄 {blob.name}”)

boto3との対応表

操作 S3 (boto3) GCS (google-cloud-storage)
クライアント作成 s3 = boto3.client('s3') client = storage.Client()
バケット取得 - bucket = client.bucket('name')
アップロード s3.upload_file('file', 'bucket', 'key') blob.upload_from_filename('file')
ダウンロード s3.download_file('bucket', 'key', 'file') blob.download_to_filename('file')
一覧取得 s3.list_objects_v2(Bucket='bucket') bucket.list_blobs()

💡 boto3とgoogle-cloud-storageの違い

【boto3(S3)】 ・クライアントベース ・s3.upload_file(ローカル, バケット, キー) ・引数の順番を覚える必要あり 【google-cloud-storage(GCS)】 ・オブジェクト指向 ・blob = bucket.blob(キー) ・blob.upload_from_filename(ローカル) ・直感的で覚えやすい(個人的な意見)

🧪 6. 実践演習:GCSの基本操作

演習の目標

GCSでバケットを作成し、Pythonからファイルをアップロード・ダウンロードします。

演習1: バケット作成とファイルアップロード

要件:

  • バケット名:your-name-gcs-practice-20240115(ユニークな名前に変更)
  • ロケーション:asia-northeast1(東京)
  • サンプルのCSVファイルを作成してアップロード
from google.cloud import storage import pandas as pd # サンプルデータ作成 data = { ‘name’: [‘Taro’, ‘Hanako’, ‘Jiro’], ‘age’: [25, 30, 28], ‘city’: [‘Tokyo’, ‘Osaka’, ‘Nagoya’] } df = pd.DataFrame(data) df.to_csv(‘sample.csv’, index=False) # GCSにアップロード client = storage.Client() bucket_name = ‘your-name-gcs-practice-20240115′ # 変更してください # バケットを取得(既存の場合)または作成 try: bucket = client.get_bucket(bucket_name) except: bucket = client.create_bucket(bucket_name, location=’asia-northeast1’) print(f”✅ バケット作成: {bucket_name}”) # ファイルをアップロード blob = bucket.blob(‘data/sample.csv’) blob.upload_from_filename(‘sample.csv’) print(f”✅ アップロード完了: gs://{bucket_name}/data/sample.csv”)

演習2: ファイルのダウンロードと処理

要件:

  • GCSからCSVファイルをダウンロード
  • Pandasで読み込んで内容を表示
from google.cloud import storage import pandas as pd from io import StringIO client = storage.Client() bucket = client.bucket(‘your-name-gcs-practice-20240115’) # ファイルをダウンロード(メモリ上で直接読み込み) blob = bucket.blob(‘data/sample.csv’) content = blob.download_as_text() # Pandasで読み込み df = pd.read_csv(StringIO(content)) print(“データ内容:”) print(df) print(f”\n行数: {len(df)}”)

演習3: 複数ファイルの一括アップロード

from google.cloud import storage import os def upload_folder_to_gcs(bucket_name, local_folder, gcs_folder): “””ローカルフォルダをGCSに一括アップロード””” client = storage.Client() bucket = client.bucket(bucket_name) for root, dirs, files in os.walk(local_folder): for file in files: local_path = os.path.join(root, file) relative_path = os.path.relpath(local_path, local_folder) gcs_path = f”{gcs_folder}/{relative_path}”.replace(‘\\’, ‘/’) blob = bucket.blob(gcs_path) blob.upload_from_filename(local_path) print(f”✅ {local_path} → gs://{bucket_name}/{gcs_path}”) # 使用例 # upload_folder_to_gcs(‘your-bucket’, ‘./data’, ‘uploaded’)

🎉 演習完了!

これで、GCSの基本操作ができるようになりました。S3と同様に、バケット作成、ファイルのアップロード・ダウンロード、Pythonからの操作ができます。

📝 STEP 9 のまとめ

✅ このステップで学んだこと

1. GCSの基本

  • GCSはGCPのオブジェクトストレージ(S3のGCP版)
  • バケット、オブジェクト、ロケーション、ストレージクラス

2. S3との比較

  • 基本概念は同じ(オブジェクトストレージ)
  • 違いはコマンド名とSDK

3. gsutilコマンド

  • gsutil cpgsutil lsgsutil rm
  • aws s3コマンドとほぼ同じ

4. Python SDK

  • google-cloud-storageライブラリ
  • blob.upload_from_filename()、blob.download_to_filename()

💡 次のステップへ

S3とGCSの両方を学んだことで、AWS・GCP両方のオブジェクトストレージを扱えるようになりました

次のSTEP 10では、「データレイク設計」を学びます。S3やGCSを使って、大量のデータを効率的に管理する設計手法を習得しましょう!

📝 理解度チェック

問題 1 基礎

GCSの4つのストレージクラスを答え、それぞれの用途を説明してください。

【解答】

  1. Standard:頻繁にアクセスするデータ(例:アクティブなデータ、Webサイトの画像)
  2. Nearline:月1回程度アクセスするデータ(例:月次バックアップ、レポート)
  3. Coldline:年4回程度アクセスするデータ(例:四半期レポート、アーカイブ)
  4. Archive:年1回未満のアクセスデータ(例:長期保管データ、法令遵守用)
問題 2 基礎

S3とGCSの主な違いを3つ挙げてください。

【解答例】

  1. コマンドラインツール:S3はaws s3、GCSはgsutil
  2. Python SDK:S3はboto3、GCSはgoogle-cloud-storage
  3. URI形式:S3はs3://、GCSはgs://

他にも「ストレージクラスの種類」「料金体系」「データ分析連携先」なども正解です。

問題 3 応用

以下のgsutilコマンドと同じ操作をPythonで実装してください:
gsutil cp local_file.csv gs://my-bucket/data/

【解答例】

from google.cloud import storage client = storage.Client() bucket = client.bucket(‘my-bucket’) blob = bucket.blob(‘data/local_file.csv’) blob.upload_from_filename(‘local_file.csv’) print(“✅ アップロード完了”)
問題 4 応用

GCSからCSVファイルをダウンロードせずに、直接Pandasで読み込むコードを書いてください。

【解答例】

from google.cloud import storage import pandas as pd from io import StringIO client = storage.Client() bucket = client.bucket(‘my-bucket’) blob = bucket.blob(‘data/sample.csv’) # ファイルをメモリ上に読み込み content = blob.download_as_text() # Pandasで直接読み込み df = pd.read_csv(StringIO(content)) print(df)

ポイント:download_as_text()でテキストとして取得し、StringIOでPandasに渡します。

❓ よくある質問

Q1: S3とGCS、どちらを学ぶべきですか?

両方学ぶことをおすすめします。

基本的な考え方は同じなので、片方を覚えればもう片方も簡単に習得できます。実務では、会社が使っているクラウドに合わせることになりますが、両方使える方が市場価値は高いです。

まずはS3(このコースの中心)を深く学び、その後GCSを学ぶと効率的です。

Q2: GCSの無料枠はありますか?

はい、あります。

  • Standard Storage: 5GB/月
  • Class A オペレーション: 5,000回/月
  • Class B オペレーション: 50,000回/月
  • エグレス(北米内): 1GB/月

学習用途なら、無料枠で十分練習できます。ただし、バケットを放置すると課金される可能性があるので、使い終わったら削除しましょう。

Q3: gsutilコマンドが「command not found」と表示されます

Google Cloud SDKがインストールされていない可能性があります。

  1. https://cloud.google.com/sdk/docs/install にアクセス
  2. OSに合ったインストーラをダウンロード
  3. インストール後、gcloud initを実行して初期設定
  4. gsutil versionで確認

インストール後は、gcloud auth loginで認証してください。

Q4: Pythonで「DefaultCredentialsError」が出ます

認証が設定されていません。

方法1(推奨):

gcloud auth application-default loginを実行

方法2:

サービスアカウントキー(JSON)を作成し、環境変数を設定:

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/key.json"

Q5: S3からGCSへデータを移行する良い方法はありますか?

はい、いくつか方法があります:

方法1:gsutilのrsyncコマンド

gsutil -m rsync -r s3://my-s3-bucket gs://my-gcs-bucket

方法2:Google Cloud Storage Transfer Service(大量データ向け)

GCP ConsoleからGUIで設定可能。スケジュール実行も可能。

データ量が多い場合は、Storage Transfer Serviceが最も効率的です。

📝

学習メモ

クラウドデータ基盤(AWS・GCP) - Step 9

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE