---
lang: ja
path: migration-guide/api-diffs
labels: 旧SkyWayからの移行/API の違い
metaTitle: API の違い ｜ 旧SkyWayからの移行 ｜ SkyWay（スカイウェイ）
---

# API の違い
## 認証・認可の違い

新 SkyWay では認証・認可の方法が変わります。

旧 SkyWay では認証のみ提供していましたが、新 SkyWay では新たに認可も行うことができるようになりました。

### 旧 SkyWay

ドメインによる認証または Peer による認証を行います。

ドメインによる認証方法については[ダッシュボードの操作方法](https://sdpf.ntt.com/services/docs/skyway/tutorials/rsts/webrtc.html#id1)をご参照ください。

Peer の認証方法については[認証サンプル](https://github.com/skyway/old-skyway-peer-authentication-samples/blob/master/README.jp.md)をご参照ください。

### 新 SkyWay

トークンベースの認証・認可機能を提供しています。

詳しい認証・認可の方法は[ユーザーガイド](/ja/docs/user-guide/authentication/)をご参照ください。

## 旧 SkyWay の API について

旧 SkyWay で一部提供しなくなった API について新 SkyWay での代替手段を記載します。

### Peer.listAllPeers()

- API リファレンス: [Peer.listAllPeers()](https://webrtc.ecl.ntt.com/api-reference/javascript.html#listallpeers-callback)

旧 SkyWay の Peer は新 SkyWay の Member にあたります。Room に参加している Member 一覧は、[Room.members プロパティ](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/Room.html#members)で取得できます。


### Peer.fetchPeerExists()

- API リファレンス: [Peer.fetchPeerExists()](https://webrtc.ecl.ntt.com/api-reference/javascript.html#fetchpeerexists-peerid)

[Room.members プロパティ](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/Room.html#members)から Room に参加している Member 一覧を取得し、[Member.id](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/RoomMember.html#id) でフィルタリングすることで特定の Member が Room に存在するかを確認できます。


### MeshRoom.send() / SFURoom.send()

- API リファレンス
  - [MeshRoom.send()](https://webrtc.ecl.ntt.com/api-reference/javascript.html#send-data-2)
  - [SFURoom.send()](https://webrtc.ecl.ntt.com/api-reference/javascript.html#send-data-3)

新 SkyWay では代替手段として DataChannel を使う方法と Room.metadata を使う方法があります。

#### DataChannel を使ってデータを送信する

Room(P2P publish) と P2PRoom のみサポートしています。WebRTC の DataChannel を使ってデータの送受信を行うことができます。

[SkyWayStreamFactory.createDataStream](https://javascript-sdk.api-reference.skyway.ntt.com/room/classes/StreamFactory.html#createDataStream) を使って LocalDataStream を作成し、[LocalDataStream.write](https://javascript-sdk.api-reference.skyway.ntt.com/room/classes/LocalDataStream.html#write) メソッドでデータの送信を行います。データの受信は [RemoteDataStream.onData](https://javascript-sdk.api-reference.skyway.ntt.com/room/classes/RemoteDataStream.html#onData) でハンドリングできます。

送受信できるデータは `string`、JSON-serializable オブジェクト、`ArrayBuffer` として扱えるオブジェクトで、[DataStreamMessageType](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/DataStreamMessageType.html) として定義されています。

```js
import {
  ...,
  SkyWayRoom,
  SkyWayStreamFactory,
} from '@skyway-sdk/room';

...

const dataStream = await SkyWayStreamFactory.createDataStream();
const dataButton = document.getElementById('data-button');
dataButton.onclick = () => {
  dataStream.write('Hello, World!');  // string
  dataStream.write({ message: 'Hello, World!' }); // JSON-serializable object
  dataStream.write(new Uint8Array([0, 1, 2, 3, 4]));  // kind of ArrayBuffer
};

const room = await SkyWayRoom.FindOrCreate(context, {
  name: 'p2p-room',
});
const me = await room.join();
await me.publish(dataStream, { type: "p2p" });

let n = 1;
room.onStreamPublished.add(async (e) => {
  const { stream } = await me.subscribe(e.publication.id);
  if (stream.contentType === 'data') {
    // stream is RemoteDataStream
    stream.onData.add((data) => {
      console.log(`data${n}:`, data);
      // data1: Hello, World!
      // data2: { message: 'Hello, World!' }
      // data3: ArrayBuffer(5)
    });
  }
});
```

#### Room.metadata での文字列の共有

Room は文字列を格納する [Room.metadata プロパティ](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/Room.html#metadata)を持っています。同じ Room を使用しているアプリケーション間で値で共有されるため、Room 内のすべてのユーザーに文字列を送信するときに使うことができます。

[Room.updateMetadata() メソッド](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/Room.html#updateMetadata) で metadata の更新を行うと [RoomMetadataUpdatedEvent](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/RoomMetadataUpdatedEvent.html) が発火します。このイベントは、[Room.onMetadataUpdated](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/Room.html#onMetadataUpdated) でハンドリングできます。

```js
let msg;
await room.updateMetadata('hi everyone!');
await room.onMetadataUpdated.add((e) => {
  msg = e.metadata;
});
```

使用可能な文字列は [割り当てと制限の「Channel、Member の metadata として使用可能な文字種」](/ja/docs/user-guide/commons/quotas-and-limits/#76) を参照してください。

### MeshRoom.getLog() / SFURoom.getLog()

- API リファレンス
  - [MeshRoom.getLog()](https://webrtc.ecl.ntt.com/api-reference/javascript.html#getlog)
  - [SFURoom.getLog()](https://webrtc.ecl.ntt.com/api-reference/javascript.html#getlog-2)

getLog() で取得できるログの仕様は以下の通りです。

ログの形式

|プロパティ|説明|
|:---:|:---:|
|timestamp|イベント発生時刻|
|messageType|メッセージの種類|
|message|メッセージ|

メッセージの種類

|メッセージの種類|説明|
|:---:|:---:|
|ROOM_USER_JOIN|いずれかのユーザーが room に join した際に記録されるログ|
|ROOM_USER_LEAVE|いずれかのユーザーが room から leave した際に記録されるログ|
|ROOM_DATA|いずれかのユーザーが room に send でデータを送信した際に記録されるログ|

ROOM_USER_JOIN メッセージのフォーマット

|プロパティ|説明|
|:---:|:---:|
|roomName|room 名|
|roomType|room の種類（Mesh \| SFU）|
|src|room に join した Peer の PeerID|

ROOM_USER_LEAVE メッセージのフォーマット

|プロパティ|説明|
|:---:|:---:|
|roomName|room 名|
|src|room から leave した Peer の PeerID|

ROOM_DATA メッセージのフォーマット

|プロパティ|説明|
|:---:|:---:|
|src|room に send した Peer の PeerID|
|data|room に send で送信したデータ|


新 SkyWay では MeshRoom.getLog() / SFURoom.getLog() のようにログを取得する機能を提供していませんが、イベント発火時にログの内容に相当する情報を取得することは可能です。

#### ROOM_USER_JOIN メッセージの代替手段

ある Member が Room へ join したとき [MemberJoinedEvent](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/MemberJoinedEvent.html) が発火します。[Room.onMemberJoined](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/Room.html#onMemberJoined) に MemberJoinedEvent を引数に取るイベントハンドラーを add することで、MemberJoinedEvent から ROOM_USER_JOIN メッセージ相当の情報を取得できます。

|プロパティ|代替手段|
|:---:|:---:|
|roomName|MemberJoinedEvent.member.roomName で取得可能|
|roomType|MemberJoinedEvent.member.roomType で取得可能|
|src|MemberJoinedEvent.member.id で Room に join した Member の id を取得可能|

```js
room.onMemberJoined.add((memberJoinedEvent) => {
  console.log(memberJoinedEvent.member.roomName);
  console.log(memberJoinedEvent.member.roomType);
  console.log(memberJoinedEvent.member.id);
});
```

#### ROOM_USER_LEAVE メッセージの代替手段

ある Member が Room から leave したとき [MemberLeftEvent](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/MemberLeftEvent.html) が発火します。[Room.onMemberLeft](https://javascript-sdk.api-reference.skyway.ntt.com/room/interfaces/Room.html#onMemberLeft) に MemberLeftEvent を引数に取るイベントハンドラーを add することで、MemberLeftEvent から ROOM_USER_LEAVE メッセージ相当の情報を取得できます。

|プロパティ|代替手段|
|:---:|:---:|
|roomName|MemberLeftEvent.member.roomName で取得可能|
|src|MemberLeftEvent.member.id で Room から leave した Member の id を取得可能|

```js
room.onMemberLeft.add((memberLeftEvent) => {
  console.log(memberLeftEvent.member.roomName);
  console.log(memberLeftEvent.member.id);
});
```

#### ROOM_DATA メッセージの代替手段

[MeshRoom.send() / SFURoom.send()](#41) での記載の通り、新 SkyWay ではデータの送受信方法として DataChannel を使う方法と Room.metadata を使う方法があります。

src に相当する情報は、DataChannel を使う方法の場合 Member の id を含めたデータを送信することで [DataStreamMessageType](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/DataStreamMessageType.html) から取得できます。
同様に、Room.metadata を使う方法の場合 Room.metadata に Member の id を含めて update することで、[RoomMetadataUpdatedEvent](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/RoomMetadataUpdatedEvent.html) から取得できます。

|プロパティ|代替手段|
|:---:|:---:|
|src|Room.updateMetadata() または LocalDataStream.write() で Member の id を送信することで [RoomMetadataUpdatedEvent](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/RoomMetadataUpdatedEvent.html) または [DataStreamMessageType](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/DataStreamMessageType.html) で取得可能|
|data| [RoomMetadataUpdatedEvent](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/RoomMetadataUpdatedEvent.html) または [DataStreamMessageType](https://javascript-sdk.api-reference.skyway.ntt.com/room/types/DataStreamMessageType.html) で取得可能|


## 管理 API
### 旧 SkyWay

Enterprise Edition ユーザーの方はご利用情報を API リクエストでご確認いただけます。

詳細は[こちら](https://webrtc.ecl.ntt.com/documents/sdpf-api.html)をご参照ください。

### 新 SkyWay

新 SkyWay では API リクエストではご利用情報は取得できません。

ご利用状況は [SkyWay コンソール](https://console.skyway.ntt.com/)にログインいただくことで、「ご利用状況」画面よりご確認いただけます。

## 対応コーデック

旧 SkyWay と新 SkyWay で対応コーデックを変更しています。

![対応コーデックの主な違い](/media/posts/docs/api-diffs-codec.svg)
- 凡例
  - ○: 指定可能
    - *1: リリース時のみ動作検証
    - *2: DTX オプションあり
    - *3: サイマルキャスト対応
  - ×: 指定不可
- *1の有無(指定可能コーデックとサポートコーデック)の違いについては、新 SkyWay の[共通仕様 - 対応コーデック - 分類](/ja/docs/user-guide/commons/codecs/#7)をご参照ください
- *2の DTX オプションは、非発話区間における帯域を削減するオプションです
- Opus/RED は、メディアパケットを冗長化しパケロス耐性を向上したコーデックです
  - 通信量は多くなりますが、パケロスの多い環境での通話品質向上に効果的です

新/旧 SkyWay の対応コーデックについて詳しくは、以下をご参照ください。
- 旧 SkyWay の対応コーデック:
  - JavaScript SDK: [Peer クラスの call メソッドの call options object](https://webrtc.ecl.ntt.com/api-reference/javascript.html#call-options-object)
  - iOS SDK: [SKWCallOption クラス](https://webrtc.ecl.ntt.com/ios-reference/a00085)
  - Android SDK: [io.skyway.Peer.CallOption クラス](https://webrtc.ecl.ntt.com/android-reference/classio_1_1skyway_1_1_peer_1_1_call_option.html)
- [新 SkyWay の対応コーデック](/ja/docs/user-guide/commons/codecs/)