APIを使って公式LINEのリッチメニューを作成して画像UPしようとしたのに画像が見つからないときありますよね!!!今回はそのときのチェック項目をコードと合わせて紹介します〜!これで貴方もリッチメニューマスター
アクシデントの流れ
- リッチメニューを作成してIDを取得。(RM_MAIN_NEWのような変数に入れる)
- 次に画像をアップロードする
- なのに画像が見つからないという表記が出る。。
この場合、LINEのAPIが悪いのではなく、ローカル環境(手元PC側)のファイル指定で詰んでいる可能性があります
※今回はMacのターミナルの話です。Windowsは同じか分かりません。
私が実行していたコマンド↓↓
cd ~/Desktop
curl -sS -X POST "https://api-data.line.me/v2/bot/richmenu/$RM_MAIN_NEW/content" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: image/jpeg" \
--data-binary "202602xxxxx.jpg"
デスクトップに入れている画像をリッチメニュー上に反映させたくてこのコードを入力しました。
まず可能性として以下が考えられます。
- cd ~/Desktopにしたつもりが別ディレクトリにいる
- ファイル名が絶妙に違う(全角、拡張子、スペル)
- ファイルが存在しない(Desktopに置いていない)
- curlに「ファイルとして渡せていない」
この判定は以下のコードで行えます↓
pwd
ls -la
ls -la 202602xxxx.jpg
まず治すべきポイント
--data-binary は “@” が超重要。
画像をバイナリとして送るときは、基本この形にします。
--data-binary @202602xxxx.jpg
つまりこうなります👇
cd ~/Desktop
curl -sS -X POST "https://api-data.line.me/v2/bot/richmenu/$RM_MAIN_NEW/content" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: image/jpeg" \
--data-binary @202602xxxx.jpg
※"2026xxxxx.jpg"のままだと、「ファイルの中身」ではなく、文字列として送ってしまう形になりがちで結果として失敗してしまいます。
私のケースでも、ここを直すのが最短ルートでした。
次に疑うポイント
ファイルパスをフルで書く(最強のやつ)
私もそうですが、基礎知識もなくやっている方にありがちな「いる場所がわからない」「Desktopってどれ?」となったら、フルパスというものにすれば事故りません。
curl -sS -X POST "https://api-data.line.me/v2/bot/richmenu/$RM_MAIN_NEW/content" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: image/jpeg" \
--data-binary @/Users/<あなたのユーザー名>/Desktop/202602xxxx.jpg
一番楽なのは、ターミナルに画像ファイルをドラッグ&ドロップしてパスを出すやつ、やったことないのでやってみた方コメントでどうだったか教えてください!

それでもダメなら
以下の点を順番に潰して行きましょう!(チェックリスト)
1) 変数が空ではない?
$RM_MAIN_NEWがからだとURLが壊れてしまいます。
echo $RM_MAIN_NEW
echo $TOKEN
空なら、まず「リッチメニュー作成のレスポンスからIDを取れているか」を見直します。
2) Content-Typeと画像の実態が合っている?
- JPEGを送るなら image/jpeg
- PNGならimage/png
拡張子がjpgでも中身が違うこともあるので、Macならこれで確認しましょう。
file 202602xxxx.jpg
3) 画像サイズ・比率が仕様からズレていない?
私は今回、size: { width: 2500, height: 1686 } を使ってたので、その比率に合った画像じゃないと弾かれることがあります。
(ここは「not found」じゃなく別エラーになりやすいけど、念のため)
まとめ
今回の現象は、やることがシンプル
- ls でファイルが本当にあるか確認
- --data-binary @ファイル名 に修正
- 変数 $RM_MAIN_NEW が空じゃないか確認
これでほぼ抜けられます!