ESP32でPicoRubyを使用した組み込み開発では、普段のCRuby開発とは違った課題が存在します。
その解決のためにRakefileで独自のビルドスクリプトを組んでいまして、その工夫を紹介します。
PicoRuby開発の特色
それはアプリケーションコードとランタイムの密結合です。
PicoRuby(R2P2-ESP32)では、開発者が書くアプリケーションコードとPicoRubyランタイム自体が不可分の関係にあります。
R2P2-ESP32/storage/home/ # アプリケーションコード配置場所 ├── app.rb (自動起動) ├── demo.rb └── led.rb
このように直接R2P2-ESP32配下のディレクトリにファイルを置いたり、submoduleでネスト先にあるbuild_configを編集したりします。
この構造により、以下の問題が発生します:
- アップデート時の競合:PicoRubyランタイムを更新すると、自分が書いたコードと混ざる
- バージョン管理の複雑化:アプリケーションコードとランタイムのバージョン管理が混在
- 環境の不安定性:ネストしたsubmoduleであり依存関係解決の手数がかかる
解決策
自分が書くコードと、自動でとってくるPicoRuby(R2P2-ESP32)の場所をルート直下でわけて、ビルドスクリプトで混ぜる処理を入れました
プロジェクトルート/
├── src_components/ # Git管理対象(開発者のコード)
│ └── R2P2-ESP32/
│ └── storage/home/ # アプリケーションコード
└── components/ # ビルド時生成(Git管理対象外)
└── R2P2-ESP32/ # PicoRubyランタイム
装置開発者にとってのメリット
1. 安全な開発環境
- アプリケーションコードとランタイムの完全分離
- 誤った上書きからの保護
2. 効率的なワークフロー
いつもと同じ頻出タスク + クリーンビルドなどの処理も備えている
rake build # ビルド:rake buildのみ実行 rake buildall # 全体ビルド:setup_esp32とrake buildの実行 rake check_env # 環境チェック:ESP-IDF環境とコマンドの確認 rake cleanbuild # クリーンビルド:fullclean、setup_esp32、rake実行 rake flash # フラッシュ:ESP32にプログラム書き込み rake init # 初期セットアップ:componentsディレクトリ作成、R2P2-ESP32クローン、ソースコピー、ビルド実行 rake monitor # モニタ:ESP32シリアル出力監視 rake update # 更新:git変更クリーン、最新版プル、ソースコピー、リビルド実行
3. 継続的な統合
PicoRubyの最新版への追従が容易 よくわからくなってもupdate打つと解決。
まとめ
ESP32 PicoRuby開発では、ランタイムとアプリケーションコードの密結合という特色があります。このようにビルドスクリプトを解することで、密結合のよさとともに、自分のコードとランタイムを分離して扱うアップデート容易性を持つことができました。
このアプローチにより、最新のPicoRubyをすぐ試すことができて大変捗っています。