> ## 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.

> ## Agent Instructions
> Internal links on these pages omit the .md extension. Append .md to a docs page URL, or send an Accept: text/markdown header, to get that page as markdown.

# アクターを作成する

> 最初のアクターを作成し、接続のライフサイクルを処理します

<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 開発者プラットフォームで作業する開発者向けです。
    </div>
  </div>
</div>

[アクター](/ja/developers/backend/resources/actors/overview#actors) を作成すると、複数の [クライアント](/ja/developers/backend/resources/actors/overview#client) が共有するライブ [セッション](/ja/developers/backend/resources/actors/overview#sessions) のバックエンドロジックを実行できます。たとえば、チャットルームやマルチプレイヤーゲームです。アクターは、クライアントの接続、メッセージ、切断をバックエンドで処理します。

## アクターファイル

アクターは、プロジェクトの actors ディレクトリに TypeScript ファイルとして作成します。各アクターは `base44/actors/` 配下の専用サブディレクトリに配置され、`entry.ts` ファイルを持ちます。

<Tree>
  <Tree.Folder name="base44" defaultOpen>
    <Tree.Folder name="actors" defaultOpen>
      <Tree.Folder name="chatRoom" defaultOpen>
        <Tree.File name="entry.ts" />
      </Tree.Folder>
    </Tree.Folder>
  </Tree.Folder>
</Tree>

フォルダー名は SDK でのアクター名になり、クライアントがアクターを呼び出す方法を決めます。例: `base44.actors.chatRoom`。`entry.ts` ファイルから、アクタークラスをデフォルトエクスポートとしてエクスポートします。

アクターディレクトリには、追加の `.ts`、`.js`、`.json`、`.jsonc` ファイルを含め、`entry.ts` からインポートできます。

## entry.ts

このコードファイルにはアクタークラスが含まれます。`base44:runtime/actors` から `Actor` をインポートし、`Actor` を継承したクラスをデフォルトエクスポートとしてエクスポートします。`Incoming` と `Outgoing` のジェネリクスを渡して、アクターが受信、送信するメッセージに型を付けます。

次のクラスメソッドを実装します。`handleStart()` メソッドは省略可能です。

* `handleStart()`: 保存されたセッションデータをストレージからクラスフィールドに読み込みます。Base44 はセッションがアクティブになるたびにこのハンドラーを呼び出します。そのため、Base44 が接続を処理する前に、復元した状態の準備が整います。ストレージの完全な例については、[セッションデータを永続化する](/ja/developers/backend/resources/actors/sample-flows#persist-session-data) を参照してください。

* `handleConnect()`: 接続してきたクライアントに現在のセッション状態を送信します。接続の拒否やクライアントの識別については、[クライアント接続を管理する](/ja/developers/backend/resources/actors/sample-flows#manage-client-connections) を参照してください。

* `handleMessage()`: セッション状態を更新して永続化し、変更をブロードキャストします。

* `handleClose()`: その接続に紐づく状態を削除します。クリアする接続状態がない場合は、空の本体を記述します。

* `handleTick()`: tick の間隔ごとにコードを実行します。アクターが tick を使わない場合は、空の本体を記述します。tick の設定については、[tick を実行する](/ja/developers/backend/resources/actors/sample-flows#run-ticks) を参照してください。1 回限りの wake をスケジュールするには、[wake をスケジュールする](/ja/developers/backend/resources/actors/sample-flows#schedule-wakes) を参照してください。

次の例は、簡略化した `ChatRoom` アクターです。

```typescript theme={null}
import { Actor } from "base44:runtime/actors";

type Incoming = { type: "message"; text: string };
type Outgoing =
  | { type: "history"; messages: string[] }
  | { type: "message"; text: string };

export default class ChatRoom extends Actor<Incoming, Outgoing> {
  messages: string[] = [];

  async handleStart() {
    this.messages = (await this.storage.get<string[]>("messages")) ?? [];
  }

  async handleConnect(conn) {
    conn.send({ type: "history", messages: this.messages });
  }

  async handleMessage(_conn, msg) {
    this.messages.push(msg.text);
    await this.storage.put("messages", this.messages);
    this.broadcast({ type: "message", text: msg.text });
  }

  async handleClose(_conn) {}

  async handleTick() {}
}
```

## 関連項目

* [アクター概要](/ja/developers/backend/resources/actors/overview): 概念と用語
* [アクターのファイルとコード](/ja/developers/backend/resources/actors/reference): バックエンドクラス API の完全なリファレンス
* [アクター: サンプルフロー](/ja/developers/backend/resources/actors/sample-flows): タイマー、接続、ストレージ、エンティティのその他のパターン
* [`actors deploy`](/ja/developers/references/cli/commands/actors-deploy): アクターを Base44 にデプロイします

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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.