0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google Cloud Run を使ってみたの続き

Last updated at Posted at 2025-10-11

はじめに

Google Cloud Run を使ってみました。

Google Cloud Run を使ってみた - Qiita

同様にサーバアプリをクラウド環境で実行できるサービスが Google Cloud にあります。試してみたいと思います。

どの GCP サービスを選ぶ? 正しい選択のための決定木 | Google Cloud 公式ブログ

Google App Engine を使ってみる

Google App Engine とは

App Engine は、Python や Java で作成されたサーバアプリを実行できる、Google が提供するクラウドサービスです。

Amazon Elastic BeanstalkAzure App Service が同様のサービスのようです。

デプロイするアプリを用意する

以前に作成した Node.js アプリでもいいのですが、シンプルなウェブアプリを用意しましょう。

index.js
const express = require('express');
const app = express();
app.use(express.json());

function hello(req, res) {
    let name = "App Engine";
    if (req.query.name) {
        name = req.query.name;
    } else if (req.body && req.body.name) {
        name = req.body.name;
    }
    res.send(`Hello, ${name}!`);
}

app.all('/', hello);

const PORT = process.env.PORT || 8080;

app.listen(PORT, () => {
    console.log(`Server listening on port ${PORT}`);
});
package.json
{
    "name": "hello-appengine",
    "main": "index.js",
    "scripts": {
        "start": "node index.js"
    },
    "dependencies": {
        "express": "^5.1.0"
    }
}

開発環境からデプロイする

上記の Node.js アプリを App Engine にデプロイして実行してみたいと思います。

Google App Engine (GAE) チュートリアル はじめの一歩編 | クラウドサービス徹底比較・徹底解説 (2022年版)

Google Cloud にプロジェクトを用意する。そのプロジェクトで
課金 を有効にする

App Engine サービスで「アプリを作成」する

説明①.png

③開発環境に Google Cloud CLI をインストールする

Google Cloud CLI 環境でアカウントとプロジェクトを切替しておく

gcloudコマンドのアカウントやプロジェクトを切り替える方法 #GoogleCloud - Qiita

⑤デプロイしたいアプリのディレクトリに移動する

⑥デプロイする

app.yaml を用意して実行言語を指定します。

app.yaml
runtime: nodejs22

以下のコマンド実行してデプロイします。

$ gcloud app deploy

ソースコード一式がクラウドサーバにアップロードされます。
ローカルのフォルダにある node_modules などはアップロードしないよう .gcloudignore を用意するといいですね。

.gcloudignore
.gcloudignore
.git
.gitignore
node_modules/

Google Cloud のプロジェクトを見ると

  • Artifact Registry に「gae-standard」が作成される

  • Cloud Storage にバケット「staging.(プロジェクトID).appspot.com」が作成される

  • App Engine にサービス「default」が作成される

  • 公開 URL が取得できる

Cloud Code を使って GUI でデプロイするのは用意されていないようです。

GitHub からデプロイする

ウェブアプリを作っている開発者は、ソースコード管理に Git を使っていることでしょう。GitHub と連携して、リポジトリのソースコードが更新されると App Engine にデプロイされるようにできます。

Github Actions を利用して Google App Engine にデプロイする

App Engine と Cloud Run の違い

App Engine は、Python や Java で作成されたサーバアプリを実行できるサービスです。それは Cloud Run も同じですよね。どこが違うのでしょうか。

で、Cloud Run と App Engine って何が違うの? #GoogleCloud - Qiita

App Engine はコンテナイメージを「管理しなくていい」ようにしている、逆に言うと「管理できない」のが、コンテナを管理できる Cloud Run と一番の違いと言えそうです。「管理しなくていい」に関しては、Cloud Run もコンテナイメージの作成をサービスに任せることが可能になっているので、App Engine の強みと言えなくなっていますね。
さらに、実行できるアプリが「プロジェクトごと一つだけ」なのも大きな違いです。
課金ルールが違うので、同じサーバアプリを運用しても料金が違いそうです。

App Engine は 2008 年にサービスが開始しています。当初は Python と Java しか利用できず、当時の自分は(今もそうだが)Python も Java も使わなかったので、利用を考えなかったことを思い出します。

Google Cloud Functions を使ってみる

Cloud Functions とは

Cloud Functions は、Node.js 、Python 、Go 、Java 、Ruby 、PHP 、.NET で書かれたプログラムを、HTTP アクセスなどをトリガーにして実行できる、Google が提供するクラウドサービスです。

Amazon LambdaAzure Functions が同様のサービスのようです。

Cloud Functions と Cloud Run の違い

Cloud FunctionsCloud Run も、クラウドサーバでプログラムを実行するサービスですね。どこが違うのでしょうか。

で、Cloud Functions と Cloud Run って何が違うの? #GoogleCloud - Qiita

Cloud RunApp Engine が「サーバアプリを実行」するの対して、Cloud Functions は「関数(プロシージャ)を実行」します。
以前の WebSocket を使ったアプリは、起動し続けないといけないので Cloud Run で実行できますが、Cloud Functions はだめですね。
課金ルールが違うので、同じ機能のプログラムを運用しても料金が違いそうです。

ソースコードを用意する

デプロイするプログラムを用意します。

index.js
const functions = require('@google-cloud/functions-framework');

functions.http('hello', (req, res) => {
    var name = "Cloud Functions";
    if (req.query.name) {
        name = req.query.name;
    }
    else if (req.body.name) {
        name = req.body.name;
    }
    res.send(`Hello, ${name}!`);
});
package.json
{
    "name": "hello-cloudfunctions",
    "dependencies": {
        "@google-cloud/functions-framework": "^3.1.0"
    }
}

前述の Node.js アプリから関数 hello だけ抜出しています。↑

開発環境からコードをデプロイする

上記の Node.js プログラムを Cloud Functions にデプロイして実行してみたいと思います。

gcloudでCloud Functions の関数をデプロイする方法 | Hakky Handbook

Google Cloud にプロジェクトを用意する。そのプロジェクトで
課金 を有効にする
Cloud Run API を有効にする
Cloud Build API を有効にしておく
Cloud Functions API を有効にしておく

②開発環境に Google Cloud CLI をインストールする

Google Cloud CLI 環境でアカウントとプロジェクトを切替しておく

④デプロイしたいアプリのディレクトリに移動する

⑤デプロイする

$ gcloud functions deploy hellogcf --source=. --gen2 --region=us-central1 --runtime=nodejs22 --entry-point=hello --trigger-http --allow-unauthenticated

以下の指定します。gcloud run deploy は対話形式で指定できましたが、gcloud function deploy はコマンドラインでオプション指定するしかないようです。

  • 関数名
  • ソースコードの場所
  • Cloud Functions サービスの世代(省略可)
  • リージョン
  • 実行言語
  • エントリポイント
  • トリガータイプ
  • 認証

ソースコード一式がデプロイされます。Google Cloud のプロジェクトを見ると

  • Artifact Registry に「gcf-artifacts」が作成される

  • Cloud Storage にバケット「gcf-(世代)-sources-(プロジェクトNO)-(リージョン)」「gcf-(世代)-uploads-(プロジェクトNO)-(リージョン)」が作成される

  • Cloud Run にサービスが作成される

  • 公開 URL が取得できる

ローカルのフォルダにある node_modules などはコンテナにコピーしないよう .gcloudignore も用意するといいですね。

VS Code+Cloud Code でデプロイする

VS Code で拡張機能 Cloud Code を使ってみたいと思います。Cloud Shell Editor でも同じです。

VS Code(Cloud Code)を利用したGC環境へのCloud Functions のデプロイ #GoogleCloud - Qiita

前述の CLI を使った作業が、IDE から GUI で操作できます。

Google Cloud にプロジェクトを用意する(前述の通り)

②VS Code に拡張機能 Cloud Code をインストールする

③拡張機能 Cloud CodeCloude Functions で、Google Cloud にログインして、プロジェクトを選択する

④デプロイしたいアプリのディレクトリを開く

Deploy Function を実行する。

説明②.png

対話形式で以下の指定します。設定した内容は launch.json に記録されます。

  • 関数名
  • Cloud Functions サービスの世代
  • リージョン
  • 実行言語

以下の指定は Cloud Console 画面でするしかないようです。

  • トリガーを追加
  • 認証

Google Cloud Console でデプロイする

Cloud Functions は、Google Cloud Console 画面だけで管理できます。

これから始める Cloud Functions 入門 | google-cloud-jp

Google Cloud にプロジェクトを用意する(前述の通り)

Cloud Run サービスで「関数を作成」する

説明②.png

設定画面で以下の指定します。

  • 関数名
  • リージョン
  • 実行言語
  • トリガータイプ
  • 認証

「作成」します

③管理画面のエディタでソースコードを編集する

説明③.png

編集し終えたら「保存して再デプロイ」します。

GitHub リポジトリからデプロイする

ウェブアプリを作っている開発者は、ソースコード管理に Git を使っていることでしょう。GitHub と連携して、リポジトリのソースコードが更新されると Cloud Functions にデプロイされるようにできます。

Cloud Functions:CI/CDパイプラインの構築手順

開発環境でデバッグする

Cloud Functions にデプロイしたコードは関数だけなので、このままでローカルの開発環境で実行してデバッグできません。どうしたものでしょうか。

実行できるコードにする

App Engine などにデプロイしたコードなら、アプリなので実行できます。こちらのコードを Cloud Functions にデプロイしても、問題なく動作しました。とはいえ、不要なコードや設定が含まれたまま、デプロイして実行するのは抵抗あります。

functions-framework で実行する

調べていると、Google が提供するライブラリ functions-framework を使う方法が紹介されていました。

Cloud Run関数(functions)をローカル環境でデバッグする方法

上記の記事は Python を使ったものなので、それを参考にして Node.js プログラムを実行してみます。

まず、functions-framework ライブラリを開発環境にインストールします。

$ npm install @google-cloud/functions-framework

以下のコマンド実行すると、指定した関数を呼出できるウェブサーバが起動します。

$ npm node_modules/.bin/functions-framework --target=hello --sinature-type=http --port=8080 --debug

そのウェブサーバにアクセスします。curl でもいいし、ウェブブラウザでもいいでしょう。

$ curl -X POST "http://localhost:8080" -H "Content-Type: application/json" -d '{ "name": "Developer" }'

これを VS Code でデバッグ実行できるように設定しておきます。↓

launch.json
{
    "configurations": [
        {
            "name": "Start Server",
            "type": "node",
            "request": "launch",
            "runtimeArgs": [
                "node_modules/.bin/functions-framework",
                "--target=hello",
                "--port=8080"
            ],
            "console": "integratedTerminal"
        },
        {
            "name": "Launch Chrome",
            "request": "launch",
            "type": "chrome",
            "url": "http://localhost:8080"
        }
    ]
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?