FlaskとCloud Buildで自動デプロイ!初心者でもできる最新の開発パイプライン構築
生徒
「Flaskで作ったアプリをネットに公開するたびに、手動で作業するのが面倒になってきました。もっと楽にする方法はありますか?」
先生
「それならGoogle Cloudの『Cloud Build』を使って、自動デプロイパイプラインを作ると便利ですよ。プログラムを書き換えるだけで、自動でネット上のアプリも更新されるようになります。」
生徒
「自動デプロイ?パイプライン?難しそうな単語ばかりですが、私にも設定できますか?」
先生
「大丈夫です。料理の自動調理マシンのようなものだと考えれば簡単ですよ。一つずつ手順を確認していきましょう!」
1. 自動デプロイとパイプラインの仕組みを知ろう
プログラミングの世界でよく聞く「デプロイ」とは、自分のパソコンで作ったプログラムを、インターネット上のサーバー(公開用の場所)に移して、誰でも見られる状態にすることを指します。初めてパソコンを触る方にとっては、「自分のノートの内容を、学校の掲示板に貼り出す作業」のようなものだと想像してください。
そして「パイプライン」とは、その作業を自動で行うための「専用の通り道」のことです。通常、デプロイをするには、ファイルを送り、設定を整え、サーバーを起動し直すといった多くの手順が必要です。これらを一列に並べて、一つが終わったら次、というふうに自動で進むようにしたのが「デプロイパイプライン」です。これを使うことで、人間がミスをする心配がなくなり、大幅に時間を節約できるようになります。
2. Cloud Buildは「全自動の工場長」
今回主役となる「Cloud Build(クラウドビルド)」は、Google Cloudが提供するサービスです。これは、いわば「全自動の工場長」のような役割を果たします。あなたがプログラムを書き換えて「保存」したことを検知すると、工場長が動き出し、材料(プログラム)を組み立て、最終的な製品(公開用アプリ)として出荷してくれます。
Flaskアプリを公開する際、通常は「Docker(ドッカー)」という仕組みを使って、アプリを小さな箱(コンテナ)に詰め込みます。Cloud Buildはこの箱詰め作業から、サーバーへの配置までをすべて代行してくれます。プログラミング未経験の方は、「自分で荷造りして郵便局に行く手間を、ロボットが全部やってくれるサービス」だと考えて間違いありません。
3. Flaskアプリの基本的な中身を作成する
まずは、自動デプロイするための材料となるFlaskアプリを準備しましょう。今回は、アクセスすると「自動デプロイ成功!」と表示されるだけの非常にシンプルなプログラムを作ります。以下のコードを「main.py」という名前のファイルに保存してください。
from flask import Flask
import os
app = Flask(__name__)
@app.route('/')
def hello():
# 環境変数からポート番号を取得します(クラウドで動かすために必要です)
port = int(os.environ.get('PORT', 8080))
return "おめでとうございます!Cloud Buildによる自動デプロイが成功しました!"
if __name__ == '__main__':
# サーバーを起動します
app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
このコードでは、「os.environ.get」という命令を使って、クラウド側が決めた「窓口番号(ポート番号)」を自動的に受け取れるようにしています。これにより、どんな環境のサーバーでも柔軟に動くようになります。
4. 必要な道具をリストアップする設定ファイル
工場長(Cloud Build)に仕事を頼むとき、どの道具(ライブラリ)が必要かを教えてあげる必要があります。これを書くのが「requirements.txt」というファイルです。Flaskアプリを動かすために最低限必要なものを書き込みます。
Flask==3.0.0
gunicorn==21.2.0
「gunicorn(グリーンユニコーン)」というのは、Flaskをインターネット上で本番用として動かすための、より力強いエンジンです。家庭用の扇風機ではなく、業務用の大型送風機を使うようなイメージですね。このファイルを用意しておくことで、Cloud Buildが自動的に必要な部品を揃えてくれるようになります。
5. Dockerfileでアプリの箱詰め手順を書く
次に、アプリを「コンテナ」という箱に詰めるための指示書を作成します。ファイル名は「Dockerfile(ドッカーファイル)」にします。拡張子は不要です。これは、工場長への「この手順で箱詰めしてね」というマニュアルになります。
# Pythonが入っている土台を使います
FROM python:3.10-slim
# 作業をするフォルダを決めます
WORKDIR /app
# 必要な部品リストをコピーしてインストールします
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# プログラム本体を箱の中に入れます
COPY . .
# 最後にアプリを起動する命令を書きます
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
このファイルがあるおかげで、世界中のどこでも同じようにあなたのアプリが動くようになります。まるで「どのキッチンでも同じ味が出せるレトルトパック」を作るような作業です。
6. cloudbuild.yamlでパイプラインを設計する
いよいよ本番です。Cloud Buildにどの順番で作業をさせるかを決める「cloudbuild.yaml(クラウドビルド・ヤムル)」というファイルを作ります。これがパイプラインの設計図になります。
steps:
# 1. 箱(コンテナ)を組み立てます
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/flask-app', '.']
# 2. 組み立てた箱を倉庫に保管します
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/flask-app']
# 3. サーバー(Cloud Run)に公開します
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'deploy'
- 'flask-service'
- '--image'
- 'gcr.io/$PROJECT_ID/flask-app'
- '--region'
- 'asia-northeast1'
- '--platform'
- 'managed'
- '--allow-unauthenticated'
この設計図により、「箱を作って」「保管して」「ネットに公開する」という一連の流れが定義されました。一度これを作ってしまえば、あとはGoogle Cloudがすべて面倒を見てくれます。
7. GitHubと連携して「保存=更新」を実現する
Cloud Buildの本当の凄さは、GitHub(ギットハブ)というプログラム保存サービスと連携させたときに発揮されます。連携設定を済ませると、あなたがパソコンでプログラムを書き換え、GitHubに「送信(プッシュ)」した瞬間に、Cloud Buildがそれを検知して自動で工場を稼働させます。
Google Cloudの管理画面で「トリガー」という項目を選び、自分のGitHubリポジトリ(保存場所)を登録するだけで連携できます。これにより、あなたは「プログラムを書くこと」だけに集中できるようになり、デプロイという面倒な作業から解放されます。まさに魔法のような開発環境が手に入るのです。
8. エラーが起きたときの確認方法
もし自動デプロイが失敗してしまったら、Cloud Buildの画面にある「履歴」を確認しましょう。そこには、工場の中で何が起きたのかが詳細に記録されています。例えば「部品が足りない」「指示書(コード)に書き間違いがある」といった原因が赤文字で表示されます。
初心者の方はエラー画面を見ると怖くなってしまうかもしれませんが、これは「ここを直せば動くよ」という工場長からのアドバイスです。一つずつ文字を読み、ファイル名やスペルが間違っていないか確認しましょう。パソコンに慣れていない方でも、この記録を読み解くことで少しずつ仕組みに詳しくなっていけます。
9. クラウド連携で広がる自由な開発スタイル
Cloud Buildを使った自動デプロイパイプラインの構築、いかがでしたか?最初はファイルが多くて大変に感じるかもしれませんが、一度仕組みを作ってしまえば、あなたのFlaskアプリは「生きている」かのように、あなたの更新に合わせて自動で成長していくようになります。
この技術は、プロの現場でも当たり前に使われている「CI/CD(継続的インテグレーション/継続的デリバリー)」という考え方の基本です。未経験からでも、このような最先端の仕組みに触れることで、より効率的で楽しいプログラミング体験ができるはずです。一歩ずつ、クラウドの力を自分のものにしていきましょう!