ホーム > GCP > 【GCP】Cloud Functionsに入門し、Node.jsのコードを実行する方法
GCP

【GCP】Cloud Functionsに入門し、Node.jsのコードを実行する方法

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

GCP の Cloud Functions に入門し、Node.js のコードを実行するまでを記事にしました。

CloudFunctions は、現在 Cloud Run functions という名称に変わりました。

Cloud Functions is now Cloud Run functions — event-driven programming in one unified serverless platform

この記事の内容は古くなっている可能性がありますのでご了承ください。

はじめに

今回の記事は、

  • 初心者でも大丈夫なように
  • 出来るだけ分かりやすく簡潔に
  • Cloud Functions を触りながら学んでいける

を目標に作成しています。

CloudFunctions とは?

CloudFunctions は、Google が提供するもので、クラウド上に関数(イベント)を設置することができるサービスです。

また、サーバーレスなためインフラ管理が不要でコーディングするだけで実行することが可能です。

類似サービスに、AWS の Lambda などがあります。

Cloud Functions for Firebase

CloudFunctions を使用する方法

Firebase CLI をインストールする

コマンドで Firebase CLI をインストールします。

npm install -g firebase-tools

Firebase CLI リファレンス

CLI はコマンドラインインターフェースの略で、自身のパソコンで実行できるコマンドが増えます。

これをインストールすることにより、firebase から始まる、色々なコマンドを使えるようになります。

Firebase を準備する

Firebase

このページからもろもろ登録して、「コンソールへ移動」→ プロジェクトの作成 →「testapp」という名前で作成

をしておいてください。

firebase画像

CloudFunctions を作成

ディレクトリを作成し、そのディレクトリ上でコマンドを打っていきます。

Firebase にログイン

firebase login

ログインするための情報を聞かれるので、入力して進みます。

Firebase プロジェクトの初期設定

firebase init

をします。

1. 使いたいサービスの選択

?Which Firebase CLI features do you want to set up for this folder? Press Space

to select features, then Enter to confirm your choices. (Press <space> to selec

t, <a> to toggle all, <i> to invert selection)

❯◯ Database: Deploy Firebase Realtime Database Rules

◯ Firestore: Deploy rules and create indexes for Firestore

◯ Functions: Configure and deploy Cloud Functions

◯ Hosting: Configure and deploy Firebase Hosting sites

◯ Storage: Deploy Cloud Storage security rules

◯ Emulators: Set up local emulators for Firebase features

と、聞かれるので、

上から3番目の 「Functions」

にカーソルを持って行って、スペースをおします。

選択されたら、エンターで次へ進みます。

2. プロジェクトについて回答

?Please select an option:(Use arrow keys)

❯ Use an existing project

Create a new project

Add Firebase to an existing Google Cloud Platform project

Don't set up a default project

今回はすでに新しいプロジェクトを作成済みなので、

上から 1 番目、Use an existing project

を選択しました。

3. プロジェクト一覧から選ぶ

次の画面ではプロジェクトの一覧が表示されますが、さきほど作った「testapp」を選択します。

4. 言語を選択する

?What language would you like to use to write Cloud Functions?(Use arrow keys)

❯ JavaScript

TypeScript

JavaScript を選びます。

5. ESLint の使用

?Do you want to use ESLint to catch probable bugs and enforce style?(y/N)

ESLint っていうのは、「構文エラーを指摘してくれる」ものです。

y を押します。

6. npm install を実行するか聞かれる

Do you want to install dependencies with npm now?(Y/n)

色々インストールしてくれるので、Y を選んでください。

プロジェクトがさきほど作成したディレクトリ以下に構成されています!

早速 VScode で開いてみます。

VScode画像

コードを書く

触るファイル

functions/index.jsが今回編集するファイルです。

index.js を編集する

const functions = require("firebase-functions")

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
//  response.send("Hello from Firebase!");
// });

このような記述があると思いますが、

以下の部分をコメントアウトを外します。

exports.helloWorld = functions.https.onRequest((request, response) => {
  response.send("Hello from Firebase!")
})

ターミナルで

firebase serve --only functions

を叩きます。

✔ functions[helloWorld]: http function initialized (http://localhost:5000/testapp-80832/us-central1/helloWorld).
i functions: Beginning execution of "helloWorld"
i functions: Finished "helloWorld" in ~1s

こんなのが出れば良いです。

表示された URL は、 ローカルでの実行 URL なのでリンクをクリックして開きます。

Hello from Firebase!

と書いてあれば無事実行されました。

自分でコードを書く方法

response.send("Hello from Firebase!")

とある部分が今回出力された内容です。

ですので、少し書き換えてみます。

response.send("うおおおおおお")
console.log("uoooooooooooo")

これでもう一度先ほどの url で更新押してみると、表示が変わりました!

console.log の内容はターミナル上で出力されています。

i functions: Beginning execution of "helloWorld"
> uoooooooooooo
i functions: Finished "helloWorld" in ~1s

コードを書く場所や、実行する方法が分かれば、あとは自分がやりたい処理を書くだけです。

request とは?

exports.helloWorld=functions.https.onRequest((request, response) => {
  console.log(request)
}

この行の request には、URL を叩いた時の例えばパラメータなどの情報が入っています。

response とは?

response には返すものを指定するような感じです。

response.json({ message: "Hello, World!" })
response.status(404).send("Not Found")
response.sendFile("/path/to/file")
response.redirect("/another-route")
response.set("Content-Type", "text/plain")
response.end("Finished")

sendFile に html ファイルを指定すればページを作成することも可能です。

まとめ

以上です。

誰かの参考になれば幸いです。