最短でシリアルポートを開き、行単位で受信し、送信・切断するところまで進む手順です。state$ / errors$ / receive$ / lines$ と各メソッドの一覧は、先に SerialSession の概要を参照してください。
標準的な改行区切り(\n / \r\n)には lines$ を使います。receive$ はデコーダが返す生のチャンク列のままです。ライフサイクル UI には state$ の state.status narrowing を優先してください。isConnected$ は v3.x で非推奨です — state$ から derive してください。
npm または pnpm でパッケージを導入します。
npm install @gurezo/web-serial-rxjs
# または
pnpm add @gurezo/web-serial-rxjs
RxJS ^7.8.0 をピア依存関係として必要とします。
npm install rxjs
# または
pnpm add rxjs
モノレポ全体のブラウザサポートやサンプルアプリの索引は リポジトリ README.ja.md を参照してください。
| 定数 | 値 | 意味 |
|---|---|---|
SerialSessionStatus.Idle |
'idle' |
ポート未接続。Web Serial 利用可能な場合の初期値。 |
SerialSessionStatus.Connecting |
'connecting' |
connect$ 実行中。 |
SerialSessionStatus.Connected |
'connected' |
ポートが開き、read pump が動作中(portInfo 付き)。 |
SerialSessionStatus.Disconnecting |
'disconnecting' |
disconnect$ 実行中。 |
SerialSessionStatus.Unsupported |
'unsupported' |
セッション生成時点で Web Serial が利用できない。 |
SerialSessionStatus.Error |
'error' |
致命的な失敗(error 付き)。 |
SerialSessionStatus.Disposed |
'disposed' |
dispose$ により永久破棄。すべての Observable が complete。 |
詳細は 概念と設計メモ と v3 移行ガイド を参照してください。
import { createSerialSession } from '@gurezo/web-serial-rxjs';
const session = createSerialSession({ baudRate: 115200 });
if (!session.isBrowserSupported()) {
console.error('このブラウザは Web Serial API をサポートしていません');
}
session.lines$.subscribe((line) => console.log('行:', line));
// 本番では errors$ を購読して SerialError を扱うことを推奨します
session.errors$.subscribe((err) => console.error('シリアルエラー:', err));
session.connect$().subscribe({
next: () => {
session.send$('ls\r\n').subscribe({
error: (e) => console.error('送信エラー:', e),
});
},
error: (e) => console.error('接続エラー:', e),
});
state$)state$ の分岐は state.status を SerialSessionStatus の定数と比較します。connected 時は TypeScript narrowing により state.portInfo に型安全にアクセスできます。
import { SerialSessionStatus } from '@gurezo/web-serial-rxjs';
session.state$.subscribe((state) => {
if (state.status === SerialSessionStatus.Unsupported) {
console.warn('このブラウザでは Web Serial を利用できません');
}
if (state.status === SerialSessionStatus.Connected) {
console.log(state.portInfo);
}
});
errors$)errors$ は接続・読み取り・書き込み・クローズで発生するすべての SerialError を流す canonical error event channel です。connect$().subscribe({ error }) で受け取るエラーは errors$ に流れるものと同一インスタンスです。
state$ が { status: 'error', error } に遷移するWRITE_FAILED、LINE_BUFFER_OVERFLOW)import { SerialErrorCode } from '@gurezo/web-serial-rxjs';
session.errors$.subscribe((error) => {
if (error.is(SerialErrorCode.READ_FAILED)) {
console.error('読み取り失敗:', error.context.cause);
}
if (error.is(SerialErrorCode.WRITE_FAILED)) {
console.warn('送信失敗(セッションは継続):', error.context.cause);
}
});
エラーコード一覧と context の形は 概念と設計メモ を参照してください。
ポートを閉じつつセッションを再利用可能なままにしたいときは disconnect$ を呼びます。
session.disconnect$().subscribe({
error: (e) => console.error('切断エラー:', e),
});
baud rate 変更で session を作り替えるなど、セッション自体を完全に手放すときは dispose$ を呼びます。アクティブな接続を閉じ、すべての Observable を complete します。
session.dispose$().subscribe({
error: (e) => console.error('破棄エラー:', e),
});
破棄後は古いインスタンスを再利用せず、新しい createSerialSession() を作成してください。