1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# Scratch EditorからESP32 Education Editorへ ― GitHub Pages公開までの開発記③

1
Last updated at Posted at 2026-09-26

はじめに

第1回では、学校のChromebookからESP32を使いたいと考えた背景をまとめました。

第2回では、TurboWarpで7種類のESP32拡張を作り、Web Serial、ESP-NOW、環境指数などを実装した経緯を紹介しました。

第3回では、そのTurboWarp版を基に、Scratch Editorを使った独立したWebアプリ

ESP32 Education Editor

へ発展させ、GitHub Pagesで公開するまでをまとめます。


1. Scratch Editorをベースにする

TurboWarp版でESP32との通信方式は確立できました。

次の課題は、

学校で継続的に使える独立した教育用Editorにすること

でした。

そこで、Scratch Foundationが公開しているオープンソースのScratch Editorをベースにすることにしました。

基本構成は次の通りです。

Scratch Editor
   +
ESP32用拡張
   +
Web Serial
   +
ESP32共通ファームウェア

名称は ESP32 Education Editor としました。

ブランド名は Davinichi です。


2. TurboWarpで作った7拡張を移植

TurboWarp版で作った構成を、ほぼそのままScratch Editorへ移しました。

現在のESP32 Education Editorには、次の7種類の拡張があります。

  1. ESP32 接続
  2. ESP32 GPIO
  3. ESP32 DHT
  4. ESP32 OLED
  5. ESP32 ESP-NOW
  6. ESP32 環境指数
  7. データ処理

Scratchの拡張機能一覧に、それぞれ別カードとして表示されます。

一つの巨大なESP32カテゴリにまとめるのではなく、機能ごとに分けたことで、授業で必要な機能だけ選びやすくなりました。


3. Serial接続は共通化

7つの拡張がそれぞれSerialポートを開く構成にはしていません。

内部では共通のWeb Serial Transportを使用しています。

ESP32 接続 ─┐
GPIO        │
DHT         │
OLED        ├─ 共通Web Serial Transport ─ USB ─ ESP32
ESP-NOW     │
環境指数    │
データ処理 ─┘

これにより、接続処理を一元化できます。

児童・生徒から見ると複数の拡張に分かれていますが、内部では同じESP32との接続を共有しています。


4. ESP32側の共通ファームウェア

ESP32側には、あらかじめ共通ファームウェアを書き込みます。

ブラウザ側からコマンドを送ることで、ESP32が処理を実行します。

この方式の利点は、授業中に毎回コンパイルや書き込みをしなくてよいことです。

ブロックを組む
  ↓
実行する
  ↓
Web Serialでコマンド送信
  ↓
ESP32が処理

Chromebookを中心に考えると、この構成は非常に扱いやすいと感じています。


5. 実機テスト

ESP32-WROOM-32を使って、7種類すべての機能を実機で確認しました。

機能 結果
ESP32 接続 OK
GPIO OK
DHT OK
OLED OK
ESP-NOW OK
環境指数 OK
データ処理 OK

ESP-NOWとデータ処理についても実機で確認しました。

これで、TurboWarp版からScratch Editorへ移植した主要機能が一通り動作することを確認できました。


6. GitHubで管理する

ソースコードはGitHubで管理しています。

リポジトリは、

です。

開発では、

main
  ↓
作業ブランチ
  ↓
Pull Request
  ↓
GitHub Actions
  ↓
mainへMerge

という流れを使っています。

個人開発でも、Pull Requestを使うことで変更内容を確認しやすくなります。


7. GitHub Pagesで公開

学校で使うことを考えると、

URLを開くだけで利用できる

ことが重要です。

そこでGitHub Pagesを利用しました。

公開URLは、

です。

GitHub ActionsでScratch Editorをビルドし、その成果物をGitHub PagesへDeployしています。

構成は、

GitHub
  ↓
GitHub Actions
  ↓
Scratch EditorをBuild
  ↓
GitHub PagesへDeploy

です。


8. 公開版からESP32実機へ接続

公開後、GitHub Pages版からもESP32へ接続して確認しました。

GitHub Pages
   ↓
HTTPS
   ↓
Chrome
   ↓
Web Serial
   ↓
USB
   ↓
ESP32

この経路で実際にESP32へ接続できました。

これで、

Windows用ソフトをインストールせず、ブラウザからESP32を使う

という当初の目標に大きく近づきました。


9. ESP32同士の通信は学校ネットワークを使わない

ESP32 Education Editorで特に重視しているのが、学校のネットワークを使わずに通信の学習ができることです。

ChromebookとESP32の制御はUSBのWeb Serialで行い、ESP32同士の無線通信にはESP-NOWを使います。

Chromebook
   │
   │ USB / Web Serial
   ↓
 ESP32 A
   ↕
 ESP-NOW
   ↕
 ESP32 B

このESP32 AとESP32 Bの通信経路には、学校Wi-Fiや校内LANを使用しません。

そのため、

  • 学校Wi-FiへのESP32登録
  • SSIDやパスワードの設定
  • IoT機器を校内LANへ接続するための設定変更

を行わなくても、実機による通信学習ができます。

授業では、

  • MACアドレス
  • ブロードキャスト
  • ユニキャスト
  • 送信と受信
  • RSSI
  • 通信距離
  • データ欠損

といった内容を扱えます。

つまり、学校の本番ネットワークとは切り離した状態で、無線通信やセンサネットワークの学習環境を作れるわけです。

これはESP32 Education Editorを学校で使ううえで、非常に大きな意味があると考えています。

なお、GitHub Pages版を最初にブラウザへ読み込む際にはインターネット接続が必要です。しかし、ESP32同士のESP-NOW通信そのものは学校Wi-Fiや校内LANを経由しません。


10. ブランド表示を整理する

Scratch Editorをそのまま公開するのではなく、ESP32教育用Editorとして表示も整理しました。

v0.3系では、

  • ヘッダーロゴ
  • ブラウザタイトル
  • favicon
  • Aboutページ
  • ファイルメニューの日本語表記

を ESP32 Education Editor 用に変更しました。

一方で、Scratch Editorをベースにしていることは明示しています。

上流プロジェクトのライセンスや商標に関する情報を保持し、Aboutや関連ドキュメントから確認できる構成にしています。


11. 意外に難しかったロゴ変更

ブランド変更で最も印象に残ったのが、左上ロゴの変更でした。

最初は menu-bar.jsx を変更して、

  • 独自ロゴ
  • Aboutリンク

を直接追加しました。

しかし実行すると、

うわっ! 何か問題が発生しました。
Scratchがクラッシュしたようです。

という状態になりました。

webpackのビルド自体は成功していました。

つまり、

Build成功
↓
ブラウザ実行時にReact側でクラッシュ

という状態です。


12. 原因切り分け

そこで、変更した部分を一つずつ戻しました。

menu-bar.jsx をv0.2の正常動作版に戻したところ、Editorは正常に起動しました。

これで、原因はブランド変更時に追加した menu-bar.jsx の処理にあると判断できました。

そこで方針を変更しました。

React側のmenu-bar.jsxは変更しない。

代わりに、既存のロゴSVGファイルそのものをESP32 Education Editor用に差し替える方式にしました。


13. 上流コードへの変更を最小限にする

この変更によって、Editorは安定して起動するようになりました。

今回の経験から、改めて重要だと感じたのが、

動いている上流コードへの変更は最小限にする

という考え方です。

特に大きなオープンソースプロジェクトをベースにする場合、内部ロジックを大きく変えるより、

  • 既存の仕組みを利用する
  • 画像や設定で対応する
  • 独自機能はできるだけ分離する

方が保守しやすくなります。


14. faviconとブラウザタイトル

Scratch Editor 15.1.1では、ブラウザタイトルやfaviconの設定場所が単純なHTMLではありませんでした。

実際には、

packages/scratch-gui/src/playground/index.ejs

を変更する必要がありました。

最初のスクリプトでは .html だけを探していたため、

Updated browser title/favicon in 0 HTML file(s).

となりました。

そこで .ejs にも対応し、最終的には

ESP32 Education Editor

というブラウザタイトルと独自faviconを表示できるようになりました。


15. Aboutページ

最初は左上ロゴをクリックするとGitHubリポジトリが直接開く構成でした。

しかし、学校で使うEditorとしては、

いきなりGitHubへ移動するより、まず製品概要やライセンスを確認できる方が分かりやすい

と考えました。

そこでv0.3.3では、専用Aboutページを用意しました。

Aboutページには、

  • ESP32 Education Editorの概要
  • Davinichi
  • Copyright表記
  • Scratch Editorをベースにしていること
  • ライセンス・商標に関する案内
  • GitHubへのリンク

をまとめています。


16. ファイルメニューを日本語化

学校で児童・生徒が利用することを考え、ファイルメニューも日本語化しました。

例えば、

File
→ ファイル

Load from your computer
→ コンピューターから読み込む

Save to your computer
→ コンピューターに保存する

という形です。

小さな変更ですが、学校現場ではこうした部分が使いやすさに大きく影響します。


17. v0.3.3

現在の公開版は v0.3.3 です。

確認済みの内容は次の通りです。

ESP32 接続             OK
GPIO                   OK
DHT                    OK
OLED                   OK
ESP-NOW                OK
環境指数               OK
データ処理             OK
GitHub Pages公開       OK
公開版からESP32接続    OK
独自favicon            OK
専用Aboutページ        OK
日本語ファイルメニュー OK

18. GitHub上でPull Requestを使って反映

v0.3.3では、

branding-v0.3

という作業ブランチを作成しました。

その後、

git add .
git commit
git push

でGitHubへ送り、Pull Requestを作成しました。

ESP32 Education用のチェックが成功したことを確認した上で、main へMergeしました。

さらに、GitHub Pages用のActionsを実行して公開版へ反映しました。

この流れによって、

ローカル
  ↓
GitHub branch
  ↓
Pull Request
  ↓
main
  ↓
GitHub Pages

という開発手順ができました。


19. v0.4 ― 接続の安定性と表示機能を改善

v0.3.3の公開後、実際にESP32を接続して使いながら、次の改善点を検討しました。

今回のv0.4では、機能を大きく増やすのではなく、

  • USB接続をより安全に扱う
  • センサ値などを見やすく表示する

という2点に絞って改善しました。

USBケーブル切断時の安全な処理

Web SerialでESP32へ接続している途中にUSBケーブルが抜かれることは、学校での利用では十分に考えられます。

そこでv0.4では、USBケーブルが抜かれたことを検出し、安全に未接続状態へ移行する処理を追加しました。

動作は次のようになります。

ESP32に接続
   ↓
Web Serialで通信
   ↓
USBケーブルが抜かれる
   ↓
切断を検出
   ↓
接続状態を「未接続」にする
   ↓
reader / writer / port の状態を整理

20. 現在の構成

現在の構成をまとめると、次のようになります。

                    ┌─ GPIO
                    ├─ DHT
                    ├─ OLED
Scratch Editor ─────┼─ ESP-NOW
                    ├─ 環境指数
                    └─ データ処理
                         ↓
                Web Serial Transport
                         ↓
                        USB
                         ↓
                ESP32共通ファームウェア

公開側は、

GitHub
  ↓
GitHub Actions
  ↓
GitHub Pages
  ↓
Chrome / Chromebook
  ↓
ESP32

です。


21. KidsBlockとの役割分担

ESP32 Education Editorを作ったからといって、KidsBlock ESP32 Education Packが不要になるわけではありません。

むしろ、学校環境によって使い分けられるのが理想だと考えています。

Windows
→ KidsBlock ESP32 Education Pack

Chromebook
→ ESP32 Education Editor

機能や教材の考え方を共通化しながら、それぞれの端末環境に合った方法を選べるようにしたいと思っています。


22. 今後

今後取り組みたいことは、

  • Chromebookでの学校現場テスト
  • 教員向け教材
  • サンプルプロジェクト
  • ESP-NOW教材の充実
  • 対応センサの追加
  • UI改善
  • 英語版
  • KidsBlock版との機能共通化

などです。

また、学校で実際に使ってもらいながら、

児童・生徒が迷わず使えるか

という視点で改善していきたいと考えています。


おわりに

今回の開発は、

KidsBlock拡張
   ↓
TurboWarp拡張
   ↓
Web Serial
   ↓
ESP32共通ファームウェア
   ↓
Scratch Editorへ移植
   ↓
ESP32 Education Editor
   ↓
GitHub Pages公開
   ↓
公開版から実機接続

という形で少しずつ発展してきました。

最初から独自Editorを作る計画だったわけではありません。

学校で実際に使うことを考え、一つずつ問題を解決していった結果、現在のESP32 Education Editorになりました。

まだ開発途中ですが、

Chromebookのブラウザから、Scratch系のブロックでESP32を操作する

という基本環境は実現できました。

今後は、実際の教育現場で使いながら改善を続けていきたいと思います。


ファームウェア

ESP32 Education Editorを使用するには、ESP32へあらかじめ共通ファームウェアを書き込んでおきます。

GitHubリポジトリ内の次のファイルを使用します。

firmware/esp32-education-editor/esp32_education_editor_firmware_v0_2.ino

GitHub
https://github.com/davinichi/ESP32-Education-Editor

関連リンク

ESP32 Education Editor 公開版

GitHub


シリーズ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?