🫥

TinyGo が macOS Sequoia で FAT ボリュームを認識しない問題を補助するツールを作った

に公開

はじめに

TinyGo を macOS Sequoia (15.0+) で使っていると、tinygo flash
「ボードの FAT ボリュームを見つけられない」という問題に遭遇することがあります。

以前、この原因についてまとめた記事を書きました。
https://zenn.dev/senoue/articles/92d043a07e4423

そこで今回、この問題を補助するための小さな CLI ツール
tinygo-flash-helper を作りました。

https://github.com/senoue/tinygo-flash-helper


なぜ問題が起きるのか(Sequoia の仕様変更)

macOS Sequoia では /Volumes の扱いと diskutil の出力仕様が変わり、TinyGo の findFATMounts が正しく動かなくなります。

主な原因は次の通りです。

  1. /Volumes にシンボリックリンクが増え、diskutil info が失敗する
  2. diskutil のキー名が変わる(例:「File System Personality」→「Type (Bundle)」)
  3. 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 や改善案も歓迎しています。

https://github.com/senoue/tinygo-flash-helper

Discussion