TinyGo が macOS Sequoia で FAT ボリュームを認識しない問題を補助するツールを作った
はじめに
TinyGo を macOS Sequoia (15.0+) で使っていると、tinygo flash が
「ボードの FAT ボリュームを見つけられない」という問題に遭遇することがあります。
以前、この原因についてまとめた記事を書きました。
そこで今回、この問題を補助するための小さな CLI ツール
tinygo-flash-helper を作りました。
なぜ問題が起きるのか(Sequoia の仕様変更)
macOS Sequoia では /Volumes の扱いと diskutil の出力仕様が変わり、TinyGo の findFATMounts が正しく動かなくなります。
主な原因は次の通りです。
-
/Volumesにシンボリックリンクが増え、diskutil infoが失敗する -
diskutilのキー名が変わる(例:「File System Personality」→「Type (Bundle)」) - FAT が "FAT" ではなく "MSDOS" として報告される場合がある
結果として、RP2040 や SAMD 系 UF2 ボードのマウントが TinyGo flash では見えなくなります。
tinygo-flash-helper がやること
このツールは TinyGo 本体を改造するのではなく、
「現状の TinyGo を Sequoia で動かすための補助」 を行うものです。
具体的には次の機能だけがあります。
1. FAT ボリュームの一覧表示
tinygo-flash-helper list
内部では以下を行います。
- Lstat でシンボリックリンクを除外
-
diskutilの複数のキーを参照して FS タイプを判定(FAT / MSDOS) - 取得できるボリューム名を全部リスト化
ボードが「RPI-RP2」ではなく「NO NAME」になってしまう確認にも使えます。
2. TinyGo のターゲット JSON に volume 名を追加
Sequoia で RP2040 系ボードの volume 名が "NO NAME" になる場合、
TinyGo がそれを認識できなくなります。
そこで次のコマンドでターゲットファイルを補正できます。
tinygo-flash-helper add-volume -volume "NO NAME"
tinygo-flash-helper add-volume -target xiao-rp2040 -volume “NO NAME”
これにより、TinyGo の flash が Sequoia でも動作しやすくなります。
(TinyGo のターゲット JSON に "volumes": ["RPI-RP2", "NO NAME"] のように追記します)
インストール
go install github.com/senoue/tinygo-flash-helper@latest
または clone してビルド:
git clone https://github.com/senoue/tinygo-flash-helper.git
cd tinygo-flash-helper
go build
対応環境
- macOS Sonoma / Sequoia
- TinyGo 0.39.0+
- Go 1.23+
- FAT/UF2 ベースのボード(RP2040, SAMD21/51, nRF52 など)
Go で簡単にこういうツールが作れるのが良いところ
今回の tinygo-flash-helper はとても小さな CLI ですが、Go は標準ライブラリだけで
- ファイル属性チェック(os.Lstat)
- 外部コマンド実行(exec.Command)
- JSON の読み書き
- クロスプラットフォームのビルド
がすべて簡単に書けるので、こうした 「現場の問題をすぐ補助するツール」 をすぐ作れるのが嬉しいポイントです。
TinyGo まわりの改善ツールを自作するのも、Go の楽しみ方のひとつだと思います。
さいごに
tinygo-flash-helper はあくまで「Sequoia で TinyGo を使うための補助ツール」ですが、
FAT ボリューム周りの問題に困っている人には役に立つはずです。
PR や改善案も歓迎しています。
Discussion