> ## Documentation Index
> Fetch the complete documentation index at: https://docs.base44.com/llms.txt
> Use this file to discover all available pages before exploring further.

# バックエンド関数の概要

> Deno ベースのサーバーレス関数でカスタムバックエンドロジックを記述します

<div className="dev-docs-banner">
  <div className="dev-docs-banner-content">
    <div className="dev-docs-banner-title">
      開発者向けドキュメントを表示しています
    </div>

    <div className="dev-docs-banner-text">
      このドキュメントは、Base44 開発者プラットフォームで作業する開発者向けです。アプリエディタ内のバックエンド関数については、{" "}

      <a href="/Integrations/Using-integrations#activating-backend-functions">
        Using Integrations
      </a>

      を参照してください。
    </div>
  </div>
</div>

バックエンド関数を使用すると、安全で隔離された環境でカスタムバックエンドコードを実行できます。ブラウザで実行すべきでないビジネスロジックの実装、保護された認証情報でのサードパーティ API への接続、webhook の処理、カスタムエンドポイントでのアプリの拡張に関数を使用してください。

バックエンド関数はモダンな TypeScript ランタイムである [Deno](https://docs.deno.com/runtime/) 上で実行されます。フロントエンドから [SDK を使用](/developers/references/sdk/docs/interfaces/functions)して関数を呼び出すと、認証が自動的に処理されます。各関数には、webhook と外部インテグレーション用の独自の HTTP エンドポイントも提供されます。

関数は[自動化](/developers/backend/resources/backend-functions/automations)を使用して自動的に実行することもできます。特定の時刻に実行されるように関数をスケジュールしたり、レコードの作成、更新、削除などのデータベースイベントに応じてトリガーしたりできます。

<Note>各プロジェクトは最大 50 個のバックエンド関数をサポートします。</Note>

## 関数の作成

プロジェクトの functions ディレクトリに TypeScript ファイルとしてバックエンド関数を作成します。デフォルトでは functions ディレクトリは `base44/functions/` ですが、[プロジェクト構成](/developers/backend/overview/project-structure#config-jsonc)でパスをカスタマイズできます。

各関数は、`entry.ts` または `entry.js` ファイルを持つ独自のサブディレクトリ内にあります:

<Tree>
  <Tree.Folder name="functions" defaultOpen>
    <Tree.Folder name="<function-name>" defaultOpen>
      <Tree.File name="entry.ts" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

CLI は、関数ルートに対する相対ディレクトリパスを関数名として使用します。例えば、`functions/sendWelcomeEmail/entry.ts` は `sendWelcomeEmail` という名前の関数を作成します。整理のためにサブディレクトリに関数をネストすることもできます。`functions/email/send/entry.ts` は `email/send` という名前の関数を作成します。

### 構成ファイルの追加

カスタム関数名や[自動化](/developers/backend/resources/backend-functions/automations)などの高度なニーズには、`function.jsonc` ファイルを追加します:

<Tree>
  <Tree.Folder name="functions" defaultOpen>
    <Tree.Folder name="<function-name>" defaultOpen>
      <Tree.File name="entry.ts" />

      <Tree.File name="function.jsonc" />
    </Tree.Folder>
  </Tree.Folder>
</Tree>

構成ファイルは、関数の名前とエントリーポイントを定義します:

```jsonc theme={null}
{
  "name": "sendWelcomeEmail",
  "entry": "entry.ts",
}
```

| プロパティ         | 説明                                                                                                                           |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `name`        | オプション。関数の一意の識別子。SDK または HTTP 経由で呼び出すときに使用されます。デフォルトは functions ルートに対する相対ディレクトリパス。                                            |
| `entry`       | 関数コードを含むファイル。                                                                                                                |
| `automations` | オプション。スケジュールまたはデータベースイベントに応じて関数を実行する自動化構成の配列。詳細は[自動化](/developers/backend/resources/backend-functions/automations)を参照してください。 |

### entry.ts

コードファイルには関数のロジックが含まれます。関数は `Deno.serve()` ラッパーを使用し、`Response` オブジェクトを返す必要があります:

```typescript theme={null}
import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  try {
    const base44 = createClientFromRequest(req);
    const user = await base44.auth.me();

    if (!user) {
      return Response.json({ error: "Unauthorized" }, { status: 401 });
    }

    const { name } = await req.json();

    return Response.json({
      message: `Hello, ${name || user.full_name}!`,
    });
  } catch (error) {
    return Response.json({ error: error.message }, { status: 500 });
  }
});
```

## ローカルでテスト

[`base44 dev`](/developers/references/cli/commands/dev) を使用して関数をローカルで実行し、デプロイせずに変更をテストします。詳細は[ローカル開発](/developers/backend/overview/local-dev/local-development-overview)を参照してください。

## 関数のデプロイ

すべてのプロジェクトリソースを一度にプッシュするには、[`functions deploy`](/developers/references/cli/commands/functions-deploy) または [`deploy`](/developers/references/cli/commands/deploy) で関数をデプロイします。`functions deploy <names...>` で名前で特定の関数をデプロイしたり、`--force` を使用してローカルに見つからないリモート関数を削除したりできます。

デプロイされた関数をローカルプロジェクトにダウンロードするには、[`functions pull`](/developers/references/cli/commands/functions-pull) を使用してください。現在デプロイされているものを確認するには、[`functions list`](/developers/references/cli/commands/functions-list) を使用してください。

## 関数の呼び出し

SDK を使用してフロントエンドからバックエンド関数を呼び出すか、webhook と外部インテグレーション用に HTTP 経由で呼び出します。

### SDK 経由

フロントエンドから関数を呼び出すには [`base44.functions.invoke()`](/developers/references/sdk/docs/interfaces/functions) を使用してください。SDK は認証を自動的に処理し、現在のユーザーの認証情報を関数に渡します。

```javascript theme={null}
import { base44 } from "@/api/base44Client";

const response = await base44.functions.invoke("sendWelcomeEmail", {
  name: "Alice",
});
```

### HTTP 経由

デプロイされた各関数には、以下に HTTP エンドポイントが提供されます:

```
https://<your-app-domain>/functions/<function-name>
```

これは以下に便利です:

* **Webhook:** Stripe や GitHub などの外部サービスからのコールバックを受信。
* **外部インテグレーション:** 他のシステムがアプリと対話できるようにします。
* **テスト:** cURL や Postman などのツールで関数を直接呼び出し。

**使用例**

```bash theme={null}
curl -X POST https://your-app.base44.app/functions/sendWelcomeEmail \
  -H "Content-Type: application/json" \
  -d '{"name": "Alice"}'
```

<Note>
  直接 HTTP (cURL や webhook など) で関数を呼び出す場合、認証済みのユーザーコンテキストはありません。これらの場合、すべての操作に `asServiceRole` を使用してください。
</Note>

## 関数内で SDK を使用する

バックエンド関数内では、Base44 SDK を介してアプリのデータ、認証、インテグレーションにアクセスできます。受信リクエストからクライアントを作成するには [`createClientFromRequest()`](/developers/references/sdk/docs/functions/createClientFromRequest) を使用してください。

認証コンテキストは関数の呼び出し方法によって異なります:

* **フロントエンドから SDK 経由で呼び出されたとき:** ユーザーの認証が自動的に渡されます。`base44.auth.me()` で現在のユーザーにアクセスし、その権限で操作を実行できます。管理者レベルの操作には [`asServiceRole`](/developers/references/sdk/docs/functions/createClientFromRequest#asservicerole) を使用してください。

* **直接 HTTP (cURL、webhook、外部サービス) 経由で呼び出されたとき:** 認証済みユーザーはないため、すべての操作に `asServiceRole` を使用してください。

## サードパーティ API に接続

バックエンド関数は、[サードパーティ API に接続](/developers/references/sdk/getting-started/third-party-apis)するいくつかの方法の 1 つです。リクエストを完全に制御する必要がある場合、または API キーを環境変数として安全に保存したい場合に最適です。CLI から環境変数を設定するには [`secrets set`](/developers/references/cli/commands/secrets-set) を使用してください。

## ログの表示

[ローカル開発](/developers/backend/overview/local-dev/local-development-overview)中、関数の出力は `logs` コマンドを必要とせずに直接ターミナルに出力されます。

デプロイされた関数については、[`logs`](/developers/references/cli/commands/logs) コマンドでログを表示してください。ログにはコンソール出力、エラー、タイミング情報が含まれます。関数名または時間範囲でフィルタリングできます。AI コーディングエージェントを使用している場合、[base44-troubleshooter](/developers/backend/overview/skills#base44-troubleshooter) skill がこれらのログを自動的に取得して分析できます。

## TypeScript 型

関数構成から TypeScript 型を生成して、SDK コード内の関数名に対する型安全性とオートコンプリートを取得します。[ダイナミック型](/developers/references/sdk/getting-started/dynamic-types)について詳しく学んでください。

## 関連項目

* [Automations](/developers/backend/resources/backend-functions/automations): 関数をスケジュールするか、データベースイベントでトリガー
* [`functions` module](/developers/references/sdk/docs/interfaces/functions): 関数を呼び出すための SDK リファレンス
* [`createClientFromRequest`](/developers/references/sdk/docs/functions/createClientFromRequest): バックエンド関数でクライアントを作成
* [`functions deploy`](/developers/references/cli/commands/functions-deploy): ローカル関数を Base44 にデプロイ
* [`functions pull`](/developers/references/cli/commands/functions-pull): デプロイされた関数をローカルプロジェクトにダウンロード
* [`functions list`](/developers/references/cli/commands/functions-list): すべてのデプロイされた関数をリスト
* [`functions delete`](/developers/references/cli/commands/functions-delete): デプロイされた関数を削除
* [`logs`](/developers/references/cli/commands/logs): 関数ログを表示
* [`exec`](/developers/references/cli/commands/exec): スタンドアロンスクリプトから分離して関数をテスト

<Note>このページは AI を使用して翻訳されました。最も正確で最新の情報については、[英語版](/) を参照してください。 </Note>
