---
lang: ja
path: user-guide/stt/archive
labels: ユーザーガイド/文字起こし β版/アーカイブ機能
metaTitle: アーカイブ機能 | 文字起こし β版 ｜ ユーザーガイド ｜ SkyWay（スカイウェイ）
---

# アーカイブ機能

本記事では、文字起こし結果をクラウドストレージへアーカイブする方法を説明します。

## 概要

文字起こしセッション開始時にクラウドストレージの情報を指定すると、文字起こしセッション終了時にセッション内の文字起こし結果が JSONL ファイルとしてアップロードされます。

サンプルコードをもとに、文字起こし機能が付いた会議アプリの実装方法について説明します。基本的な利用方法は[クイックスタート](/ja/docs/user-guide/stt/quickstart)と同様です。

- [サーバー側コード](https://github.com/skyway/skyway-stt-client-js/tree/main/examples/server)

## 事前準備

利用するクラウドストレージを準備してください。準備方法は、[録音・録画クイックスタートのクラウドストレージの準備](/ja/docs/user-guide/recording/recording-quickstart/#9)を参照してください。

## ストレージ設定例

### Google Cloud Storage

```js
const gcsConfig = {
  service: "GOOGLE_CLOUD_STORAGE",
  credential: JSON.stringify({
    // サービスアカウントの鍵のJSONファイルの内容をコピーペーストする
    type: "",
    project_id: "",
    private_key_id: "",
    private_key: "",
    client_email: "",
    client_id: "",
    auth_uri: "",
    token_uri: "",
    auth_provider_x509_cert_url: "",
    client_x509_cert_url: "",
  }),
  bucket: "",
};
```

### Amazon S3

```js
const s3Config = {
  service: "AMAZON_S3",
  bucket: "",
  accessKeyId: "",
  secretAccessKey: "",
  region: "",
};
```

### Wasabi

```js
const wasabiConfig = {
  service: "WASABI",
  bucket: "",
  accessKeyId: "",
  secretAccessKey: "",
  endpoint: "",
};
```

## ストレージの指定

`POST /rooms/:roomName/start` で STT セッションを開始する際に、`archive.storageConfig` を指定します。

```js
app.post("/rooms/:roomName/start", async (req, res) => {
  const { roomName } = req.params;
  const { authorization } = req.headers;
  const roomId = roomNameIdMap[roomName];

  const tokenStr = (authorization ?? "").replace(/^Bearer\s*/, "");
  if (roomId !== tokenHashRoomIdMap[sha256(tokenStr)]) {
    res.status(403).send({ message: "Forbidden" });
    return;
  }

  const { sttMode } = req.body;
  const response = await fetch(`${sttApiBaseUrl}/rooms/${roomId}/sessions`, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${createSkyWayAdminAuthToken()}`,
    },
    body: JSON.stringify({
      mode: sttMode.toUpperCase(),
      archive: {
        // Amazon S3を使う場合は s3Config
        // Wasabiを使う場合は wasabiConfig
        storageConfig: gcsConfig,
      },
    }),
  });

  const json = await response.json();
  if (!response.ok) {
    res.status(500).send({ message: json.error.message });
    return;
  }

  res.status(200).send({ id: json.id });
});
```

それ以外の設定、起動方法は[クイックスタート](/ja/docs/user-guide/stt/quickstart)と同様です。

セッション終了後、そのセッションで作成された全ての文字起こし結果がアップロードされます。セッション終了からアップロード完了まで、約5分程度かかります。

## アップロードされるファイルの形式

transcription モード、translationモードにおいてそれぞれ、以下の形式のJSONが改行区切りになっているJSONLファイルとして保存されます。

### transcription モード

```json
{
  "timestamp": string, // ISO8601 形式,
  "memberId": "member-id",
  "memberName": "member-name",
  "text": "文字起こし結果"
}
```

### translation モード

```json
{
  "timestamp": string, // ISO8601 形式,
  "memberId": "member-id",
  "memberName": "member-name",
  "texts": [
    {
      "language": "ja",
      "text": "文字起こし結果"
    },
    {
      "language": "en",
      "text": "translated text"
    }
  ]
}
```
