カテゴリ: Flask 更新日: 2026/02/20

FlaskでCloud Storage (GCS) にファイルを保存する方法を徹底解説!

FlaskでCloud Storage(GCS)にファイルを保存する方法
FlaskでCloud Storage(GCS)にファイルを保存する方法

先生と生徒の会話形式で理解しよう

生徒

「Flaskで作ったアプリで、ユーザーがアップロードした画像を保存したいです。でも、自分のパソコンやサーバーに直接保存するのは良くないって聞いたのですが、本当ですか?」

先生

「はい、その通りです。サーバーの容量には限りがありますし、壊れた時にデータが消えてしまうリスクもあります。そこで、Google Cloud Storage(GCS)というクラウド上の大きな倉庫を使うのが一般的ですよ。」

生徒

「クラウド上の倉庫ですか!それなら安心してたくさんのファイルを預けられそうですね。設定は難しいのでしょうか?」

先生

「準備をしっかり行えば、初心者の方でも大丈夫です。Pythonのプログラムから魔法の杖を使って、Googleの倉庫へファイルを飛ばす方法を学んでいきましょう!」

1. Google Cloud Storage (GCS) とは何か?

1. Google Cloud Storage (GCS) とは何か?
1. Google Cloud Storage (GCS) とは何か?

まず、今回使う道具の正体を知っておきましょう。Google Cloud Storage(グーグル・クラウド・ストレージ)、略してGCSは、Googleが提供しているインターネット上の「ファイル保管箱」です。皆さんが普段使っているGoogleドライブの、プロフェッショナル版や開発者版だとイメージすると分かりやすいでしょう。

GCSの最大の特徴は、非常に頑丈で、かつ無限に近い容量があることです。自分のパソコン(ローカル環境)にファイルを保存すると、パソコンが壊れたらおしまいですが、GCSに預ければ世界中のどこからでも安全に取り出すことができます。Webアプリでユーザーの写真や動画を扱うときは、このGCSのような外部のオブジェクトストレージ(データを物体として扱う保管場所)を使うのが業界の常識となっています。

2. GCSを使うための「バケット」を作成しよう

2. GCSを使うための「バケット」を作成しよう
2. GCSを使うための「バケット」を作成しよう

GCSを利用するには、まず「バケット」というものを作る必要があります。バケットとは、ファイルをまとめて入れるための「バケツ」や「大きなフォルダ」のことです。Google Cloudの管理画面(コンソール)にログインして、このバケツを用意しましょう。

バケットを作るときには、名前を決めます。この名前は世界中でたった一つの名前にしなければなりません。誰かがすでに使っている名前は使えないので、自分の名前や日付を混ぜて工夫してみてください。また、データの保存場所(リージョン)を選びます。日本に住んでいる人向けのアプリなら「東京(asia-northeast1)」などを選ぶと、通信が速くなって快適です。設定が終われば、あなた専用のクラウド倉庫が完成します。

3. PythonからGCSを操作するためのライブラリを導入

3. PythonからGCSを操作するためのライブラリを導入
3. PythonからGCSを操作するためのライブラリを導入

FlaskというPythonの道具からGCSを操作するためには、専用の追加パーツをインストールする必要があります。これをライブラリと呼びます。今回は、Googleが公式に提供している「google-cloud-storage」というライブラリを使います。

パソコンの「黒い画面」(コマンドプロンプトやターミナル)を開いて、以下のコマンドを入力してください。これにより、PythonがGoogleの倉庫と通信するための翻訳機を手に入れることができます。


pip install google-cloud-storage flask

この一行を実行するだけで、あなたのパソコンに最新の通信ツールがダウンロードされます。プログラミング未経験の方にとって、この黒い画面の操作は緊張するかもしれませんが、一文字ずつ正しく打てば魔法のように環境が整います。

4. 秘密の鍵「サービスアカウント」を発行する

4. 秘密の鍵「サービスアカウント」を発行する
4. 秘密の鍵「サービスアカウント」を発行する

Googleの倉庫は誰でも勝手に入れるわけではありません。あなたのプログラムが「私は持ち主です」と証明するための秘密の鍵(認証情報)が必要です。これをサービスアカウントキーと呼びます。

管理画面からサービスアカウントを作成し、JSON(ジェイソン)という形式のファイルをダウンロードしてください。このファイルには、あなたの倉庫を開けるための大切な合言葉が書かれています。絶対に人に見せたり、インターネット上に公開したりしてはいけません。このファイルを自分のプログラムと同じフォルダに置いて、準備完了です。この鍵をPythonに読み込ませることで、ようやく通信が許可されます。

5. Flaskでファイルをアップロードする基本コード

5. Flaskでファイルをアップロードする基本コード
5. Flaskでファイルをアップロードする基本コード

お待たせしました!実際にファイルをGCSへアップロードするプログラムを書いてみましょう。まずは一番シンプルな、文字を書いたテキストファイルをクラウドへ飛ばす例です。


from google.cloud import storage
import os

# 鍵ファイルの場所を指定します
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "your-key.json"

def upload_text_to_gcs(bucket_name, destination_blob_name, text):
    # クライアント(通信の窓口)を作ります
    storage_client = storage.Client()
    # 指定したバケツを探します
    bucket = storage_client.bucket(bucket_name)
    # バケツの中の「どこに」「どんな名前で」保存するか決めます
    blob = bucket.blob(destination_blob_name)

    # 実際にテキストを保存します
    blob.upload_from_string(text)
    print(f"{destination_blob_name} が無事にアップロードされました!")

# 実行してみる
upload_text_to_gcs("my-new-bucket-2026", "hello.txt", "クラウドの世界へようこそ!")

このコードの中にあるblob(ブロブ)という言葉は、クラウド上に保存されるファイルそのものを指します。upload_from_stringという命令一つで、あなたのパソコンからGoogleの巨大なサーバーへデータが瞬時に移動します。これがクラウド連携の第一歩です。

6. ユーザーが選んだ画像をGCSに保存する方法

6. ユーザーが選んだ画像をGCSに保存する方法
6. ユーザーが選んだ画像をGCSに保存する方法

次は、Webアプリらしく、ブラウザの画面から選んだ画像を保存する機能を作ります。Flaskの機能を使って、ユーザーが「アップロード」ボタンを押した瞬間にGCSへ転送する仕組みです。


from flask import Flask, request
from google.cloud import storage

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_image():
    # 画面から送られてきたファイルを受け取ります
    file = request.files['user_image']
    
    if file:
        client = storage.Client()
        bucket = client.bucket("あなたのバケット名")
        # ファイル名そのままの形でクラウドに保存します
        blob = bucket.blob(file.filename)
        
        # ファイルのデータそのものをアップロード!
        blob.upload_from_file(file)
        
        return "クラウドに画像を保存しました!"
    return "ファイルがありません。"

if __name__ == "__main__":
    app.run(debug=True)

このプログラムを使えば、自分のパソコンの容量を全く使わずに、世界中から送られてくる画像をどんどん保存できます。request.filesという命令が、ユーザーのスマホやPCから送られてきた画像をつかまえる役割をしています。

7. HTML画面を作ってアップロードを試そう

7. HTML画面を作ってアップロードを試そう
7. HTML画面を作ってアップロードを試そう

プログラムだけでは動きを確認しにくいので、簡単な見た目(HTML)も用意しましょう。FlaskはこのHTMLを表示させるのも得意です。以下のような画面を作れば、マウス操作でファイルをアップロードできるようになります。


<div class="card p-4 shadow-sm">
    <h3 class="mb-3">クラウドへファイルを送ろう</h3>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="user_image" class="form-control mb-3">
        <button type="submit" class="btn btn-primary">
            <i class="bi bi-cloud-arrow-up"></i> アップロード開始
        </button>
    </form>
</div>

このHTMLの中にあるenctype="multipart/form-data"という部分は、画像を扱うときに必要な「おまじない」です。これがないと、画像が細かく分解されて送られず、うまく保存できません。初心者がよく忘れてしまうポイントなので、しっかり覚えておきましょう。

8. 保存したファイルをみんなに見せる設定

8. 保存したファイルをみんなに見せる設定
8. 保存したファイルをみんなに見せる設定

せっかくクラウドに保存した画像も、自分だけしか見られない設定だとWebアプリとしては不便です。GCSの設定で「公開アクセス」を許可するか、プログラムから「公開用のURL」を発行するように設定しましょう。

以下のコードを使えば、保存したファイルの場所を示すURLを取得できます。これをウェブサイトに貼り付ければ、誰でもその画像を見ることができるようになります。ただし、個人情報などは公開設定にしないよう、取り扱いには十分注意してくださいね。


def get_file_url(bucket_name, file_name):
    client = storage.Client()
    bucket = client.bucket(bucket_name)
    blob = bucket.blob(file_name)
    
    # 誰でも見られる公開URLを返します
    return blob.public_url

# 例: https://storage.googleapis.com/バケット名/hello.png のようなURLが取得できます

このように、URLを発行することで、あなたのWebサイトに画像を埋め込むことができるようになります。GCSは非常に配信スピードが速いので、世界中の人が同時にあなたのサイトを見ても、画像がパッと表示されますよ。

9. 保存されたファイルを削除・管理する方法

9. 保存されたファイルを削除・管理する方法
9. 保存されたファイルを削除・管理する方法

クラウド倉庫は便利ですが、不要なファイルを放っておくと料金がかさんでしまいます。必要なくなったファイルを消す方法も知っておきましょう。これもPythonから一行で実行できます。管理画面で一つずつ手作業で消す必要はありません。


def delete_file(bucket_name, file_name):
    client = storage.Client()
    bucket = client.bucket(bucket_name)
    blob = bucket.blob(file_name)
    
    # クラウド上のファイルを削除します
    blob.delete()
    print(f"{file_name} を倉庫から片付けました。")

このように、FlaskとGCSを連携させれば、ファイルの「アップロード」「表示」「削除」という一連の流れをすべて自動化できます。パソコン操作に慣れていない方でも、一度この流れを作ってしまえば、あとはシステムが勝手に働いてくれます。クラウドの力を借りて、より高度で便利なWebアプリ作りに挑戦してみてください!

カテゴリの一覧へ
新着記事
New1
Flask
FlaskでAjaxリクエストを処理する方法!JSONとの連携を初心者向けにやさしく解説
New2
Flask
FlaskアプリのテストをGitHub Actionsで自動化する方法まとめ!初心者向け解説
New3
Python
Pythonの例外処理におけるコーディング規約を完全解説!初心者でもわかるPEP8ガイドライン
New4
Flask
FlaskでHello Worldを表示するには?最初の1行を実行してみよう
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
FlaskとAWS S3を連携!静的ファイルを効率よく配信する初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonで例外の種類ごとに処理を分ける方法を完全解説!初心者でもわかる複数except入門
No.4
Java&Spring記事人気No4
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.5
Java&Spring記事人気No5
Flask
Flask-Loginでユーザー認証を完全ガイド!初心者でもわかるログイン処理の作り方
No.6
Java&Spring記事人気No6
Python
Pythonでtry-except-else構文を使うケースとメリットを完全解説!初心者でもわかる例外処理入門
No.7
Java&Spring記事人気No7
Python
Pythonの関数を引数に渡す方法を初心者向けにやさしく解説!高階関数の使い方も完全ガイド
No.8
Java&Spring記事人気No8
Flask
FlaskでAWS RDSに接続する方法を徹底解説!MySQL/PostgreSQL設定ガイド