トラブルシューティング

うまく動かない時は、直そうとする前に、まず問題がどこにあるかを順番に確認しましょう。

何かがうまく動かない時、一番の近道は「直そうとする」前に「問題が実際どこにあるのか」を絞り込むことです:ボード自体なのか、パソコン側のソフトウェアなのか、それとも両者をつなぐ接続なのか。以下は前のステップを踏まえて次に進む構成になっているので、原因の見当がついている場合でも、順番通りに確認していくのがおすすめです。

どこから始めればいい?

症状確認する場所
ライトが完全に消えていて、何も反応しないステップ1
色がおかしい、ちらつく、または違うLEDが点灯しているステップ3.5
ライトは点いているが、違う色のまま固まっているステップ4
andon-light コマンド自体がエラーで失敗するステップ2
以前は動いていたが、抜き差ししたら壊れたステップ1

ステップ1:ボードはファームウェアで動いていますか?

ターミナルで次を実行します。

lsusb | grep -i "2e8a"
表示内容意味対処法
2e8a:0003 Raspberry Pi RP2 Bootボードが「ブートローダー」モードになっています:これは新しいファームウェアを書き込むための特別なモードで、通常の使用時のものではありません。このモードではLEDは反応しません。Arduino IDEを開いてアップロードをクリックしてください:このモードは自動的に検出され、書き込みが完了します。
Waveshare や RP2040 Zero を含む行良好です:ファームウェアが正常に動作しています。ステップ2に進んでください。
何も表示されないボードが接続されていないか、ケーブルがデータ通信に対応していません。別のUSB-Cケーブルを試し、しっかり挿さっているか確認してください。

ブートローダーのファイル転送用ドライブを直接確認することもできます。

find /media /run/media /mnt -maxdepth 3 -iname "*RPI*" 2>/dev/null

パスが表示された場合は、ボードがブートローダーモードになっています:対処法は上記と同じです。

ステップ2:パソコン側のソフトウェアはボードを認識していますか?

andon-light doctor
表示内容意味
Found device on /dev/ttyACM0(または似た表示)ソフトウェアがボードを認識でき、使用する権限もあります。ステップ3に進んでください。
No device foundボードがファームウェアで動いていません。ステップ1に戻ってください。
[Errno 13] Permission denied権限まわりの問題で、Linux特有のものです:下記の権限エラーを参照してください。

ステップ3:他の何かが接続を占有していませんか?

andon-light set idle
表示内容意味
何も表示されずに実行が終わるパソコンとボードの間の接続は正常です。それでもLEDが変化しない場合は、ステップ3.5に進むか、書き込み直し(ステップ1)を試してください。
andon-light: serial error: ... Device or resource busy他の何かが接続を占有しています:たいていはバックグラウンドで開いたままになっているArduino IDEのシリアルモニタです。閉じてから再試行してください。

うまくいったか確信が持てない場合は、終了コードを直接確認してください。

andon-light set idle; echo "exit code: $?"

終了コードが 0 であれば成功です。

ステップ3.5:ちらつき、色がおかしい、部分点灯がおかしい

アドレサブルLEDは、データ信号の精密なタイミングと十分な電力の両方を必要とします。接続が不安定なだけでも、動作は「一応している」のに見た目に不具合が出ることがあります。

まずはバグではないケースを除外しましょう。 仕様上、一度に点灯するのは3個のLED(と常時点灯の1個)だけです。テープの大部分が消えたまま緑色が点灯していても、それは正常な動作です。詳しくはLEDの並び方を参照してください。以下で扱う問題はそれとは違うものです:点灯しているはずのグループの中のLEDがおかしい、またはどの正常な状態にも当てはまらないパターンになっている、というケースです。

完成済み基板では、チップとLEDが同じ基板上にあるためケーブルを調べる必要がなく、「信号の問題」といえばほぼハンダ付けの不具合です。ブレッドボードでの組み立てでは、たいてい配線が原因です。以下、両方について説明します。

症状考えられる原因対処法
点灯しているはずのグループの中で、一部のLEDが消えている・おかしいデータラインの接続が不安定:途中の接続が弱いと、そこから先のLEDが同期を失うことがあります完成済み基板: チップのピンにハンダ付けの不具合がないか確認してください。ブレッドボード: 信号線を短くする、コネクタの圧着を確認する、または部品表の任意項目にあるレベルシフターを追加してみてください。
色が薄い、色がおかしい、またはライトが点灯すると基板がリセットしているように見えるLEDへの電力が足りていません完成済み基板: USB-Cケーブルがデータ通信と電源供給の両方に対応しているか、電源系統のハンダ付けに問題がないか確認してください。ブレッドボード: V が 3V3 ではなく 5V ピンに接続されているか確認してください:組み立てガイドを参照してください。
何も点灯しない(1番目のLEDすら点かない)それでも andon-light set idle は正常終了するファームウェアが想定しているデータピンと、実際の配線が一致していません完成済み基板: kDataPin が基板の設計通りのトレースと一致しているか確認してください:通常は初期設定の GPIO1 です。ブレッドボード: 配線したピンが kDataPin と一致しているか確認してください。1番目のLEDは点くのに2番目以降が反応しない場合は、これではなくステップ3の内容です。
点灯する色が想定と違うLEDに出る(例:「作業中」で本来と違うグループが点灯する)LEDテープが逆側の端から配線されています完成済み基板: これは製造上の問題である可能性が高いです:正常に動作している別の個体と比較してください。ブレッドボード: テープのどちら側の端がデータ入力用と印字されているか確認し、その端に S を配線しているか確認してください。

それでも解決しない場合は、Arduino IDEにAdafruit NeoPixelライブラリが実際にインストールされているか確認してください(ツール → ライブラリを管理 → 「Adafruit NeoPixel」で検索)。ライブラリが入っていない場合、通常は上記のような症状ではなくコンパイルエラーとして表示されますが、念のため確認する価値はあります。

ステップ4:Claude Codeのフック設定は正しいですか?

cat ~/.claude/settings.json

以下を順に確認してください。

  • 有効なJSONになっていますか? 次を実行します。

    python3 -c "import json, os; json.load(open(os.path.expanduser('~/.claude/settings.json'))); print('VALID JSON')"

    エラーが表示される場合は、ファイルのどこかに小さな構文ミス(カンマや括弧の閉じ忘れなど)があります。修正されるまで、Claude Codeはフック設定全体を無視する可能性が高いです。

  • すべてのフックコマンドが || true で終わっていますか? これがないと、ボードが抜けているなどのちょっとした不具合が、Claude Code内で目立つエラー表示として現れてしまいます。本来、静かに背後で動くはずのステータスライトとしてはよろしくありません。ひとつ注意点があります。Claude Code自身のフックログは、実際には裏側の andon-light の呼び出しが失敗していても「正常に完了しました」と表示することがあります:この挙動が疑わしい場合は、|| true を外した状態でコマンドを直接実行し、本当の終了コードを確認してください。

  • フックコマンドに "async": true が付いていないことを確認してください。非同期で実行すると、コマンドの完了順序が入れ替わることがあり、ライトが古い色のまま固まってしまう可能性があります。

  • このファイルを編集した後、Claude Codeを再起動しましたか? フックの設定は、セッション開始時にしか読み込まれません:すでに起動しているセッションは、設定変更に気づきません。「何も変わらない」という場合の原因として、これが最も多いです。

ステップ5:手動で試してみる

問題が「ライト・CLI側」にあるのか「Claude Codeのフック側」にあるのかを切り分けるのに役立つ方法です。フックが実行するのと同じコマンドを、自分の手で実行してみます。

andon-light set working    # LED 2-4が緑色に点灯(1番以外は消灯)
andon-light set waiting    # LED 5-7が黄色に点灯(1番以外は消灯)
andon-light set idle       # LED 8-10が赤色に点灯(1番以外は消灯)
andon-light set compacting # LED 2-10で順次点灯パターン

この4つが手動では正しく動くのに、実際のClaude Codeセッション中はライトが反応しない場合、原因はフック設定(ステップ4)にあるか、Claude Codeが設定変更をまだ読み込んでいない(再起動してみてください)可能性が高く、ハードウェアやCLI自体の問題ではありません。

Linux特有の注意点

ポートを開く際の権限エラー

ls -la /dev/ttyACM0

グループの欄を確認してください:dialout と表示されているはずです。

groups $USER ではなく id で確認してください。 この2つは結果が食い違うことがあり、実際に動いているプログラムの権限を反映しているのは id の方です。

id

ここが少し分かりにくいポイントです。引数なしの id は、いま使っているこのシェルに実際に組み込まれているグループ権限を表示します。これが、andon-light がポートを開く際にシステムが実際にチェックするものです。一方 groups $USER は、いま動いているプログラムの状態にかかわらず、アカウントの設定を都度新しく調べ直します。そのため、groups $USER では dialout が表示されるのに、新しく開いたターミナルも含めてすべての id ではまだ表示されない、ということが起こり得ます。グループ権限は、そのセッションが始まった時点の状態に固定されるためで、デスクトップ上で一度ログアウト・ログインし直しただけでは、すべてのプロセスに確実に反映されるとは限りません。

id に dialout が含まれていない場合:

対処法効果の範囲コマンド
すぐに使えるようにする今のターミナルのみnewgrp dialout
恒久的に直すすべてのプログラム、確実にsudo reboot
その場しのぎ抜き差しするたびに元に戻るsudo chmod 666 /dev/ttyACM0

ターミナルからArduino IDEが起動しない

Arduino IDEのAppImageは、FUSE関連のエラー(dlopen(): error loading libfuse.so.2 や Cannot mount AppImage)で起動に失敗することがあります。ダブルクリックしても起動しない場合は、ターミナルから実行してみてください:FUSEのマウント処理を完全に回避できます。

cd ~/Downloads
./arduino-ide_2.3.10_Linux_64bit.AppImage --appimage-extract-and-run

(お使いのバージョンに合わせてファイル名を変更してください。)展開して起動するまで数秒かかりますが、前回開いていたスケッチやタブも復元されるはずです。

正常に動いている時の状態

$ lsusb | grep 2e8a
Bus 005 Device 010: ID 2e8a:0003 Raspberry Pi RP2 Boot      # この行はブートローダーモードを示します(書き込み直後以外に出たら注意)

# ファームウェアが正常に動作している時は、lsusbに別途「RP2 Boot」の行は表示されません。
# 代わりにudevadmで確認します。
$ udevadm info -a -n /dev/ttyACM0 | grep -iE "manufacturer|product"
ATTRS{manufacturer}=="Waveshare"
ATTRS{product}=="RP2040 Zero"

$ andon-light doctor
Found device on /dev/ttyACM0

$ andon-light set working; echo "exit=$?"
exit=0

Windows特有の注意点

「Windows によって PC が保護されました」という警告

インストーラーもツール本体も、デジタル署名がされていません。そのため、どちらを実行してもWindowsが初回にこの警告を表示し、一部のセキュリティソフトが反応することもあります。

これは、このような小規模で未署名のツールがパッケージ化される際によく起こる副作用で、一部のマルウェアの挙動と似て見えてしまうことが原因です。何かが壊れているわけではありません。

そのまま続行するには: 「詳細情報」をクリックし、続けて「実行」をクリックします。

インストール後に andon-light が見つからない

新しいターミナルウィンドウを開いてください(インストール前から開いていたターミナルは、更新後のPATHを認識しません)。

アンインストール後もPATHに残ってしまう

この修正が入る前の古いバージョンをインストールしていた場合、アンインストーラーが古いエントリを削除しないことがあります。手動で確認するには:システムのプロパティ → 環境変数 → Path(ユーザー環境変数) → AndonLight の項目が残っていないか確認し、あれば削除してください。

パソコン側のソフトウェアがLEDハードウェアについて何も知らなくていい理由

コマンドラインツールは、それぞれの状態を1文字にマッピングしているだけです(作業中なら G、対応待ちなら Y、というように)。そして、その1文字を、見つかったポートに向けて送るだけです。LEDが何個接続されているか、どう配線されているか、そもそもアドレサブルLEDなのかどうかさえ、ツール側は関知していません:そうした処理はすべて、USB接続の向こう側にあるファームウェアの中で完結しています。デバイスの自動検出が、LEDハードウェアのバージョンが変わっても同じように機能するのもこのためです:検出しているのはマイコンボード自体であり、その先につながっているものではないからです。