# 一般 API

- Human documentation: [https://docs.univer.ai/ja-JP/guides/boards/features/core/general-api](https://docs.univer.ai/ja-JP/guides/boards/features/core/general-api)

- Agent Markdown: [https://docs.univer.ai/ja-JP/guides/boards/features/core/general-api.md](https://docs.univer.ai/ja-JP/guides/boards/features/core/general-api.md)

- Requested language: `ja-JP`

- Content language: `ja-JP`

- Documentation version: `1.2.0`

- Source: [boards/features/core/general-api.ja-JP.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/boards/features/core/general-api.ja-JP.mdx)

---

Univer で利用できる Facade API は、現在のユニットタイプと登録済みプラグインによって異なります。このページでは、Univer Boards アプリケーションで使用する共通 API を説明します。

## インポート

```typescript
import { FUniver } from '@univerjs/core/facade'
import '@univerjs-pro/boards/facade'

const univerAPI = FUniver.newAPI(univer)
```

## コマンド

Univer のほとんどの操作はコマンドシステムに登録されます。統一された実行経路により、元に戻す、やり直し、共同編集などの機能を実現できます。

> [!NOTE]
> 設計の詳細は [Univer コマンドシステム](/blog/univer#command-system)を参照してください。

### コマンドの監視

コマンドの実行前には `Event.BeforeCommandExecute`、実行後には `Event.CommandExecuted` を使用します。

```typescript
const beforeDisposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, ({ id, params }) => {
  console.log('コマンド実行前:', id, params)
})

const afterDisposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id, params }) => {
  console.log('コマンド実行後:', id, params)
})
```

コマンドを中止するには、`BeforeCommandExecute` リスナーで `event.cancel` を `true` に設定します。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.BeforeCommandExecute, (event) => {
  if (event.id === 'board.command.set-name') {
    event.cancel = true
  }
})
```

リスナーは `IDisposable` を返します。不要になったら破棄してください。

```typescript
beforeDisposable.dispose()
afterDisposable.dispose()
disposable.dispose()
```

### コマンドの実行

コマンド ID とパラメーターが分かっている場合は、`FUniver.executeCommand` で実行できます。次の Boards コマンドはアクティブなBoardの名前を変更します。

```typescript
const board = univerAPI.getActiveBoard()

if (board) {
  await univerAPI.executeCommand('board.command.set-name', {
    unitId: board.getId(),
    name: 'プロジェクトノート',
  })
}
```

## イベント API

`univerAPI.Event` に公開されるイベントは、Univer コアとアプリケーションに登録されたプラグインによって決まります。コアは共通のコマンドとユニットのイベントを提供し、登録済みのプラグインがイベントを追加することがあります。使用前に、そのイベントを提供するプラグインが登録済みか確認してください。

現在のリリースで利用できるイベント名とパラメーター型は、[Facade Events リファレンス](https://docs.univer.ai/ja-JP/reference/facade/events.md)を参照してください。

`addEvent` で購読し、返されたオブジェクトを破棄して購読を解除します。

```typescript
const disposable = univerAPI.addEvent(univerAPI.Event.CommandExecuted, ({ id }) => {
  if (id === 'board.command.set-name') {
    console.log('Board名が変更されました')
  }
})

// 不要になったリスナーを削除します
disposable.dispose()
```

## 元に戻すとやり直し

```typescript
await univerAPI.undo()
await univerAPI.redo()
```

## UI

メニュー、ツールバー、その他の Boards UI を拡張する方法は、[Boards UI コンポーネント](https://docs.univer.ai/ja-JP/guides/boards/ui/components.md)を参照してください。

## WebSocket

WebSocket API を使うには、`@univerjs/network` をインストールし、`UniverNetworkPlugin` を登録して Facade 拡張をインポートします。

```typescript
import { UniverNetworkPlugin } from '@univerjs/network'
import '@univerjs/network/facade'

univer.registerPlugin(UniverNetworkPlugin)
```

ソケットイベントの購読、メッセージ送信、接続終了ができます。

```typescript
const socket = univerAPI.createSocket('wss://example.com/boards')

socket.open$.subscribe(() => socket.send('hello'))
socket.message$.subscribe((message) => console.log('WebSocket メッセージ:', message.data))
socket.error$.subscribe((error) => console.error('WebSocket エラー:', error))
socket.close()
```

## 列挙型 API

共通の列挙型は `univerAPI.Enum` から利用できます。

```typescript
console.log(univerAPI.Enum.UniverInstanceType.UNIVER_BOARD)
console.log(univerAPI.Enum.BoardElementType.Shape)
```

## ユーティリティメソッド API

共通ユーティリティは `univerAPI.Util` から利用できます。

```typescript
console.log(univerAPI.Util.tools.isString('Univer Boards')) // true
```
