Catch up on everthing we announced at this year's Firebase Summit. Learn more



次のように、Cloud Functions の関数から Error Reporting にエラーを送信できます。


// These WILL be reported to Stackdriver Error Reporting
console.error(new Error('I failed you'));
console.error('I failed you', new Error('I failed you too'));
throw new Error('I failed you'); // Will cause a cold start if not caught

// These will NOT be reported to Stackdriver Error Reporting Error('I failed you')); // Logging an Error object at the info level
console.error('I failed you'); // Logging something other than an Error object
throw 1; // Throwing something other than an Error object
callback('I failed you');
res.status(500).send('I failed you');

より詳細なエラー報告が必要な場合は、Error Reporting クライアント ライブラリを使用します。

報告されたエラーは、GCP Console の Error Reporting で表示できます。また、GCP Console で関数のリストから関数を選択して、その特定の関数から報告されたエラーを表示することもできます。

関数によって生成され、キャッチされていない例外は、Error Reporting に表示されます。キャッチされなかった例外(非同期でスローされた例外など)は、将来の関数呼び出しでコールド スタートの原因となる可能性があります。これにより、関数の実行時間が長くなります。


関数から Stackdriver Error Reporting にエラーを報告するには、Stackdriver Logging API を使用します。


functions ディレクトリから Node.js 用の Google Stackdriver Logging クライアント ライブラリをインストールします。

npm install --save @google-cloud/logging

Logging API にアクセスするために、Google Cloud クライアント ライブラリをインポートします。

const Logging = require('@google-cloud/logging');

// Instantiates a client
const logging = Logging();

Stackdriver に送信する

ログエントリの形式を適切に設定するには、MonitoredResource オブジェクトと ErrorEvent オブジェクトが必要になります。

この例では、reportError 関数が Stackdriver Error Reporting にエラーを報告するのに必要な最低限のデータがわかります。

function reportError(err, context = {}) {
  // This is the name of the StackDriver log stream that will receive the log
  // entry. This name can be any valid log stream name, but must contain "err"
  // in order for the error to be picked up by StackDriver Error Reporting.
  const logName = 'errors';
  const log = logging.log(logName);

  const metadata = {
    resource: {
      type: 'cloud_function',
      labels: { function_name: process.env.FUNCTION_NAME },

  const errorEvent = {
    message: err.stack,
    serviceContext: {
      service: process.env.FUNCTION_NAME,
      resourceType: 'cloud_function',
    context: context,

  // Write the error log entry
  return new Promise((resolve, reject) => {
    log.write(log.entry(metadata, errorEvent), (error) => {
      if (error) {
        return reject(error);
      return resolve();

reportError 関数を使用すると、エラーを手動で報告できます。

exports.createStripePayment = functions.firestore
  .onCreate(async (snap, context) => {
    const { amount, currency, payment_method } =;
    try {
      // Look up the Stripe customer id.
      const customer = (await snap.ref.parent.parent.get()).data().customer_id;
      // Create a charge using the pushId as the idempotency key
      // to protect against double charges.
      const idempotencyKey = context.params.pushId;
      const payment = await stripe.paymentIntents.create(
          off_session: false,
          confirm: true,
          confirmation_method: 'manual',
        { idempotencyKey }
      // If the result is successful, write it back to the database.
      await snap.ref.set(payment);
    } catch (error) {
      // We want to capture errors and render them in a user-friendly way, while
      // still logging an exception with StackDriver
      await snap.ref.set({ error: userFacingMessage(error) }, { merge: true });
      await reportError(error, { user: context.params.userId });

ErrorContext パラメータを使用して、ユーザーの詳細を渡すことができます。これらの詳細は Stackdriver の UI に表示され、影響を受けるユーザー数の計算に使用されます。

ErrorContextHTTP リクエストに関する情報を渡すこともできます。

export.httpError = functions.https.onRequest((request, response) => {
  const error = new Error('Test error');
  const httpRequest = {
    method: request.method,
    url: request.originalUrl,
    userAgent: request.get('user-agent'),
    referrer: '',
    remoteIp: request.ip
  reportError(error, {httpRequest}).then(() => {