質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Q&A

解決済

1回答

603閲覧

firebase functionsのhttps.onCallを使った関数がinitializeできない

ruuusaamarki

総合スコア468

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

0グッド

0クリップ

投稿2020/11/17 03:23

編集2020/11/22 05:07

前提・実現したいこと

以下の該当のソースコードをfirebase functionsにデプロイしたいのですが
エラーが出てしまいます。

こちらのページを参考にさせていただいております。
https://qiita.com/ryo2132/items/7cdd6c86dd418095f74a

関数の使い方として
ウェブサイト上のjsからhttps.onCallを叩いて
メールを送信するという使い方を考えています。

発生している問題・エラーメッセージ

$firebase deploy --only functions === Deploying to 'example'... i deploying functions i functions: ensuring required API cloudfunctions.googleapis.com is enabled... i functions: ensuring required API cloudbuild.googleapis.com is enabled... ✔ functions: required API cloudbuild.googleapis.com is enabled ✔ functions: required API cloudfunctions.googleapis.com is enabled i functions: preparing functions directory for uploading... i functions: packaged functions (28.7 KB) for uploading ✔ functions: functions folder uploaded successfully i functions: creating Node.js 10 function sendMail(us-central1)... ⚠ functions[sendMail(us-central1)]: Deployment error. Function failed on loading user code. Error message: Error: please examine your function logs to see the error cause: https://cloud.google.com/functions/docs/monitoring/logging#viewing_logs. Additional troubleshooting documentation can be found at https://cloud.google.com/functions/docs/troubleshooting#logging Functions deploy had errors with the following functions: sendMail To try redeploying those functions, run: firebase deploy --only "functions:sendMail" To continue deploying other features (such as database), run: firebase deploy --except functions Error: Functions did not deploy properly.

log

1 2Function cannot be initialized 3

該当のソースコード

javascript

1 2const functions = require("firebase-functions"); 3const nodemailer = require("nodemailer"); 4const gmailEmail = functions.config().gmail.email; 5const gmailPassword = functions.config().gmail.password; 6const adminEmail = functions.config().admin.email; 7 8// 送信に使用するメールサーバーの設定 9const mailTransport = nodemailer.createTransport({ 10 service: "gmail", 11 auth: { 12 user: gmailEmail, 13 pass: gmailPassword 14 } 15}); 16 17// 管理者用のメールテンプレート 18const adminContents = data => { 19 return `以下内容でホームページよりお問い合わせを受けました。 20 21お名前: 22${data.name} 23 24メールアドレス: 25${data.email} 26 27内容: 28${data.contents} 29`; 30}; 31 32exports.sendMail = functions.https.onCall(async (data, context) => { 33 // メール設定 34 let adminMail = { 35 from: gmailEmail, 36 to: adminEmail, 37 subject: "ホームページお問い合わせ", 38 text: adminContents(data) 39 }; 40 41 // 管理者へのメール送信 42 try { 43 await mailTransport.sendMail(adminMail); 44 } catch (e) { 45 console.error(`send failed. ${e}`); 46 throw new functions.https.HttpsError('internal', 'send failed'); 47 } 48}); 49

試したこと

前述のソースのエラー箇所を探すため
exports.sendMail = functions.https.onCall(async (data, context) => {
以下を削除したところDeploy complete!がでました。
おそらくonCallが関連しているのかと思い調査中です。
https://firebase.google.com/docs/functions/callable-reference?hl=ja

試したこと2

以下のソースは難なくデプロイできて動作まで確認できました。

const functions = require('firebase-functions'); exports.helloWorld = functions.https.onRequest((request, response) => { functions.logger.info("Hello logs!", {structuredData: true}); response.send("Hello from Firebase!"); });

試したこと3

firebase-toolsのバージョンが最新であることを確認しました。

shell

1 2$npm info firebase-tools version 38.16.2 4

質問

前述のコードに以下のようなfirebase情報を書く必要はありそうでしょうか。
(セキュリティ的な不安があり試せておりません。)

javascript

1 2firebase.initializeApp({ 3 apiKey: '### FIREBASE API KEY ###', 4 authDomain: '### FIREBASE AUTH DOMAIN ###', 5 projectId: '### CLOUD FUNCTIONS PROJECT ID ###' 6 databaseURL: 'https://### YOUR DATABASE NAME ###.firebaseio.com', 7}); 8 9// Initialize Cloud Functions through Firebase 10var functions = firebase.functions(); 11

気になっていること

nodemailerはローカルでインストールしただけですが他に何かやらなければならないこと
例えばコンパイル、firebase側での設定などが必要になるのでしょうか。

自分の認識ではfirebase deployコマンドでよしなにやってくれるという認識です。

不足情報や試すべきことなどご指摘、コメントいただけましたら嬉しく思います。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

firebase-toolsを再インストールしたらデプロイできました。

投稿2021/05/03 09:51

ruuusaamarki

総合スコア468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問