Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
# Moddable SDK 9.5への移行
[English](moddable-9.5.md)
## 対応する環境
ホスト、Web Editorのコンパイラー、WebシミュレーターをModdable SDK 9.5.0に揃えます。
CIとローカルビルドでは同じタグを使用し、`@moddable/typings`も9.5.0に固定します。
ESP32用のツールチェーンはESP-IDF 6.1です。
`MODDABLE`と`IDF_PATH`をそれぞれのSDKに設定し、ESP-IDFの`export.sh`を読み込んでからビルドしてください。
Web用ツールの生成にはEmscripten 5.0.1を使用します。
Web Editorからのインストールは9.5.xのホストを対象とします。
8.3.xまたは9.0.xを使用している場合は、設定をバックアップし、対応する基板用のホストを更新してからMODをインストールしてください。
以前のホストへの書き込みは、ファームウェアのバージョン検査で拒否します。
SDKが生成するXSアーカイブのバージョンは17.8.2です。
標準ホストが受け入れる範囲は17.7から17.8で、パッチ番号は互換性の判定に使いません。
Web EditorとCLIはこの範囲を共有します。
独自のXSコンパイル設定で互換範囲を変更したホストは、このプロファイルの対象外です。
## MODの変更点
| 以前のAPI | 移行先 |
| --- | --- |
| `device.network.http`、`https`をクライアントに渡す | `device.network.http.client`、`https.client` |
| `sntp` | `device.network.ntp.client` |
| `mdns` | `device.network.dnssd` |
| `Net.get('IP')` | `ecma-wifi`のインスタンスから`address`を読む |
| AXP2101の`readByte`、`writeByte` | `readUint8`、`writeUint8` |
NTPの`getTime`コールバックが返す時刻はミリ秒です。
`Time.set`へ渡す際は秒に変換し、成功、失敗、切断、サービス終了のいずれでもNTPクライアントを閉じます。
タイムアウト後や再接続前の要求から届いた応答は無視します。
DNS-SDではホスト名の取得後にサービスを広告し、TXTレコードは`updateTXT`で更新します。
追従側はサービスの発見と更新の両方を処理します。
`mimic_main`と`mimic_follow`が移行例です。
ホストの直接依存から従来の`socket`、`sntp`、`mdns`を外しました。
SDKのDNS-SD実装は内部で従来の`net`を使用するため、間接依存は残っています。
`WebSocket`ラッパーも残していますが、内部の通信はECMA-419のプロバイダーを使用します。
従来のBLEモジュールは今回の移行対象に含めていません。
## HTTPサーバーの継続接続
HTTPサーバーはECMA-419のサーバーを直接使用します。
本文、書き込み位置、応答の状態を要求ごとに作り直し、同じ接続で次の要求が来ても前の本文を再送しないようにします。
SDK 9.5が分離して渡す`path`と`query`から要求URLを復元します。
MCPも同じサービスを使用し、認証とJSON-RPCの処理を維持します。
要求本文の上限は標準で16 KiBです。
`HttpServerService({ maxRequestBodyBytes })`で変更できます。
事前に本文長が不明な要求も累積サイズで検査し、上限を超えた接続はルーティング前に切断します。
実ソケットを使う回帰テストでは、同一接続の複数POST、クエリ、空応答、404、500からの復帰、MCP認証、連続RPCを検証します。
## ビルドと生成物
`firmware/`から既存のnpmスクリプトを使用してください。
出力は各作業ツリーの`firmware/dist/`に保存されます。
```sh
npm ci
npm run build
npm run build:editor-tools
npm run build:wasm
npm run test:unit
npm run check:architecture
npm run test:moddable
```
ブラウザー用コンパイラー、シミュレーター、同梱XSAを同じSDKで生成します。
同梱ミニアプリの正本は`firmware/mods/examples/`にあり、ギャラリーのコピーに含まれる相対パスのmanifestを直接ビルドしません。
初代M5Stackでは`esp_driver_dac`を明示的なIDF依存に追加します。
バージョン表示用の設定生成ではSDKの基本設定を再適用せず、manifestで有効にしたBLEを上書きしないようにします。
## 顔の描画
既存の顔パーツは形状をキャッシュして共有しています。
この移行では`Outline.clone`への置き換えを行わず、割り当てと共有形状の扱いを維持しました。
描画の変更を行う場合は、キャッシュと実行時メモリへの影響を別途測定してください。
## 検証記録
検証には未改変のSDK 9.5.0(`b6e06ba70506a7381ffb28e09e3175bf4e99f305`)とESP-IDF 6.1(`fff9895c82d744c7237be8847347bdd1b07c6643`)を使用しました。
以前のSDKに存在するローカル修正は取り込んでいません。
Nodeの410テスト、アーキテクチャ検査、46件のModdableテスト、Webの型チェックと本番ビルドが成功しています。
M5StackChan CoreS3の実機では、ホストの起動、タッチパネルの初期化、保存済み設定によるWi-Fi接続、既存MODのWebSocket接続まで確認しました。
全6ターゲット(M5Stack、Core2、CoreS3、M5StackChan CoreS3、Stack-chan RT、Takao Core2 SG90)のリリースビルドが成功しています。
CoreS3とM5StackChan CoreS3ではデバッグ版と計測版も成功しています。
配布対象4基板のバンドルを組み立て、埋め込みバージョンとパーティション容量を検査しました。
Webの208件のNodeテストと51件のReactテスト、画面テスト、多言語表示テストも成功しています。
ブラウザー用コンパイラーは2回の生成でSHA-256が一致しました。
HTTPの回帰テストでは大きな応答の分割送信と100回の接続と切断も検証しています(Linux実行)。
M5StackChan CoreS3の追加実機検証では、HTTPとMCP、100回の接続と切断、73,728バイトのHTTP応答、過大な本文の拒否、12 KBの追加ヘッダーを含むWebSocket Upgrade、未読データを残した切断が成功しました。
NTPによる時刻取得、保存済みWi-Fiへの自動再接続、再接続後のHTTPS応答も確認しています。
ChatAudioIOは30分動作し、173回の音声往復を処理しましたが、通信の遅延については追加調査が必要です。
Web Radio専用アプリも30分再生し、再生エラー、再接続、クラッシュはありませんでした。
条件と制限は[実機検証記録](../investigations/moddable-9.5-hardware-2026-09-06.md)を参照してください。
未改変のSDK 9.0.0+ESP-IDF 6.0と比較したM5StackChan CoreS3のリリースイメージは、6,425,072バイトから6,379,120バイトに減少しました(45,952バイト、約0.7%)。
比較の基準は同じリポジトリコミットで、この移行によるコード変更と両ツールチェーンの更新を含みます。
実行時のヒープや音声処理の性能は、この数値からは判断できません。
実際の音質、画面、サーボの動き、USB音声の手動確認は別途必要です。
ビルド成功だけでは、これらの実機動作を確認したことにはなりません。
## 参照
- [Issue #690](https://github.com/stack-chan/stack-chan/issues/690)
- [Moddable SDK 9.5.0](https://github.com/Moddable-OpenSource/moddable/releases/tag/9.5.0)
- [XSのバージョン定義](https://github.com/Moddable-OpenSource/moddable/blob/9.5.0/xs/sources/xsCommon.h)
- [XSアーカイブのマッピング](https://github.com/Moddable-OpenSource/moddable/blob/9.5.0/xs/sources/xsAPI.c)
e14740673This file is pinned to the selected release. Download the original to open it in your design tool.