LINE Harnessが動かないときの切り分け|導入・ログイン・Webhook・複数アカウント
LINE Harnessのインストール停止、管理画面ログイン、Webhook、友だち未反映、複数アカウント、Cloudflare無料枠を症状別に切り分けます。 完成済みの部分を消さず、診断票から続きの一操作だけを決めます。 Pages、Worker、スタッフ用APIキー、CORSを混ぜずに確認します。 LINE Webhook→署名→アカウント特定→friends→messages_logの順で一件を追います。
この記事はHarness Academyの教材データを基に、各Harnessの公式リポジトリにある実装箇所と照合して構成しています。秘密情報や本番データを記事・AIチャットへ貼らず、外部送信は必ず検証対象を限定してください。
この記事の目次
最初に確認すること
- 自分で途中までインストールした・止まった: サポートへ必要情報を安全に渡し、D1や本番データを消さずに続きから再開できる
- 管理画面URL・APIキー・ログインエラーを直す: ログイン失敗がURL・認証・CORS・古いAdminのどこにあるか判定できる
- 友だち・メッセージがHarnessに出てこない: 設定を増やさず、受信が途切れた最初の地点を特定できる
- どの画面で設定するか迷ったとき: リッチメニュー、フォーム、返信、LIFF、画像を作る場所を判断できる
- 複数アカウントで違うLINEへ飛ぶ: アカウントBのリンクがアカウントAへ飛ぶ原因を、勘ではなく設定の鎖で特定できる
- 0円の範囲・配信通数・Cron・R2を確認する: 無料だと思って配信停止や請求事故を起こさず、現在の利用量を確認できる
- AIへ渡すだけで原因を切り分ける: 自力で直せない問題も、秘密情報を漏らさず再現可能な報告へ変えられる
自分で途中までインストールした・止まった
完成済みの部分を消さず、診断票から続きの一操作だけを決めます。
この工程のゴール: サポートへ必要情報を安全に渡し、D1や本番データを消さずに続きから再開できる
途中まで自分で進めた状態でもサポート対象です。最初からやり直す必要はありません。まず、Cloudflareに何が作成済みかと、最初に失敗した工程をread-onlyで確認します。サポート側も、いきなり削除や再インストールを案内せず『次の一操作』だけを返します。
@latestは『公開されている最新のセットアップCLIを使う』という指定です。LINE Harnessのセットアップは.line-harness-setup.jsonへ完了済み工程を記録するため、通常は同じnpx create-line-harness@latestを再実行すると続きから再開します。エラーのたびにCloudflareのWorker、D1、Pagesを手で消してはいけません。
WorkerとD1は更新済みなのにAdmin UIだけ失敗した場合、現行CLIにはnpx create-line-harness@latest update --repair-adminがあります。Adminだけを再デプロイし、D1 migrationやWorker本体をやり直しません。
WindowsではPowerShellにMac用コマンドを貼らず、WSL2のUbuntu内で作業します。IG HarnessでNEXT_PUBLIC_API_URL is not setなどの古い初期ビルドエラーが出た場合も、まず最新版CLIと現行deploy-admin.tsを確認し、環境変数を思いつきで追加しません。
サポートへ送るのは、製品、OS、管理画面/Workerのhostname、実行コマンド、最初のエラー、完了したと思う工程だけです。APIキー、token、secret、.line-harness-config.jsonや.ig-harness-deployed.jsonの全文は送りません。スクリーンショットにも秘密値が写っていないか確認します。
手順
1. サポート用診断票を作る
製品・OS・URLのhostname・実行コマンド・最初のエラー・完了済み工程を一枚にまとめます。
2. 壊さず現状確認
Node、Git、Wranglerログイン先、setup state、D1/R2/Worker/Pagesを値を伏せて確認します。
3. 再開方法を選ぶ
通常再開、Adminだけ修復、公式update、古いsourceの引き継ぎ、fork/custom更新、認証違いのどれか一つに分類します。
4. 一工程だけ再実行
同じ失敗を再現し、最初に失敗した工程だけを直します。
5. URLとバージョンを照合
Worker、Pages、D1、管理画面の表示バージョンが同じ環境を指すか確認します。
完了条件
- 秘密値なしのサポート診断票ができる
- 既存D1・R2・Worker・Pagesを削除していない
- 一つの再開経路と次の一操作が決まる
- 管理画面とWorkerの組合せ・versionを確認
注意: 『最初から』を選ぶ前に、既存D1へ顧客データがないことを必ず確認します。Cloudflare Dashboardで手当たり次第に削除しません。
Academy教材: 困ったときの症状別FAQ / Lesson 15-1
管理画面URL・APIキー・ログインエラーを直す
Pages、Worker、スタッフ用APIキー、CORSを混ぜずに確認します。
この工程のゴール: ログイン失敗がURL・認証・CORS・古いAdminのどこにあるか判定できる
管理画面URLはCloudflare Pages、APIはWorkerです。見た目が開いても、Adminが別のWorker URLを向いていればログインや一覧取得は失敗します。ブラウザに表示されたAPIキー入力欄は、学習サイトのメール・パスワードログインとは別物です。
APIキーは所有者の共通キーを全員へ渡さず、Harnessのスタッフ管理で一人ずつ発行します。Cloudflare Secretは登録後に値を読み返せないため、Dashboardで空欄に見えても消えたとは限りません。値をチャットへ貼らず、登録有無と認証結果で確認します。
CORSエラーはWorkerのADMIN_ORIGINと実際に開いた管理画面originが違うと発生します。pages.dev、独自ドメイン、Preview URLを混ぜず、使う本番originを一つ決めます。
手順
1. 3点を固定
管理画面URL、Worker URL、Cloudflare account IDを一行ずつ記録します。
2. Adminの接続先を確認
デプロイ済みAdminがどのWorker URLを参照しているか確認します。
3. 認証とCORSを分離
401/403ならキー・権限、ブラウザCORSならADMIN_ORIGIN、404/5xxならAPI/deployを調べます。
4. 個人キーで再確認
自分専用staffを作り、シークレット入力後に一覧取得だけを試します。
完了条件
- PagesとWorkerのURLを別々に特定
- 401/403とCORSを分けて判定
- 個人別staff keyを使用
- credentialを出力していない
注意: APIキーをLINEグループ、Chatwork、GitHub Issue、AIチャットへ貼りません。漏えいが疑われる場合は原因調査より先に失効・再発行します。
Academy教材: 困ったときの症状別FAQ / Lesson 15-2
友だち・メッセージがHarnessに出てこない
LINE Webhook→署名→アカウント特定→friends→messages_logの順で一件を追います。
この工程のゴール: 設定を増やさず、受信が途切れた最初の地点を特定できる
HarnessはLINEからWebhookを受信して友だちと会話を記録します。現行実装はfollowだけでなく、署名済みのメッセージやpostbackでも未登録の友だちを補完します。ただし、Harness接続前から存在し、その後一度も反応していない友だち全員を完全なUID付きで自動復元できるわけではありません。
LINE Developersの『Webhookの利用』と、LINE Official Account Managerの応答メッセージ/あいさつメッセージは別設定です。Harnessで返信やシナリオを管理するなら、二重返信を避けるため公式側の自動応答を止め、Webhookを有効にします。
公式LINEの管理画面から直接送った返信は、Harnessが送信したものではないためHarnessの送信ログと一致しないことがあります。運用履歴を一か所に残したい場合はHarnessの個別チャット、または接続済みAIから返信します。
手順
1. 検証人物を一人決める
自分のLINEから固有の短いテスト文を一回だけ送ります。
2. Webhook到達を見る
対象Workerのログで時刻、event type、HTTP status、署名判定を確認します。
3. DBの2地点を確認
friendsの対象accountとmessages_logのincoming一件を個人情報を伏せて照合します。
4. 画面と返信を確認
友だち管理、個別チャット、未対応に表示され、自分へ一回だけ返信できるか確認します。
完了条件
- WebhookからDBまで時系列で確認
- 検証人物一人だけを使用
- 既存友だちの取得限界を理解
- 公式LINEとHarnessの送信履歴を混同しない
注意: ログを共有するときは表示名、本文、完全UID、署名、tokenを伏せます。Webhook署名検証を無効化して直したことにしません。
Academy教材: 困ったときの症状別FAQ / Lesson 15-3
どの画面で設定するか迷ったとき
LINE Developers、公式アカウント、Harness、Cloudflare、Codexの担当を固定します。
この工程のゴール: リッチメニュー、フォーム、返信、LIFF、画像を作る場所を判断できる
日常業務はHarnessかCodexで行います。LINE DevelopersはChannel、Webhook、LINE Login、LIFFの初期接続、LINE Official Account Managerは料金プラン・権限・応答設定、CloudflareはWorker/D1/R2/Domain/Secret/Logを担当します。
リッチメニューの実体はLINE Platformにありますが、作成・画像アップロード・デフォルト設定はHarnessから操作できます。テンプレート、シナリオ、フォーム、予約、タグ、個別チャットはHarnessです。画像はHarness経由でR2へ保存し、Flex JSONを毎回手作業で貼らない運用にできます。
スマホでも管理画面の閲覧や軽い確認はできますが、初期導入、複数アカウント設定、エラー復旧、差分レビューはPCでCodex/Claude Codeへ任せるのが基本です。
手順
1. やりたいことを一文にする
例:リッチメニューの相談ボタンから予約フォームを開きたい、と成果で書きます。
2. 担当を分解
入口、画面、データ、配信、外部設定を5つの担当先へ割り当てます。
3. Harness内で下書き
対象アカウントを固定し、テンプレートやシナリオを停止状態で作ります。
4. 自分で一動線を確認
リッチメニュータップからフォーム、タグ、返信、予約まで一人で通します。
完了条件
- 5つの担当先を混同しない
- 既存設定を先に確認
- 停止状態で下書き
- 自分一人で一動線を検証
注意: 『公式LINEで作るかHarnessで作るか』を機能名だけで決めず、履歴・計測・自動化をHarnessへ残したいかで判断します。
Academy教材: 困ったときの症状別FAQ / Lesson 15-4
複数アカウントで違うLINEへ飛ぶ
リファラルリンク、所有アカウント、Pool、LIFF ID、Endpoint URLを順番に確認します。
この工程のゴール: アカウントBのリンクがアカウントAへ飛ぶ原因を、勘ではなく設定の鎖で特定できる
複数アカウントでは、LINE公式アカウント、Messaging API Channel、LINE Login Channel、LIFF ID、LIFF Endpoint URLが一組です。一つでもアカウントAの値が残ると、B用のリンクでもAの同意画面や友だち追加へ進みます。
現行L Harnessのトラックリンクは、リンク所有アカウント→紐づくシナリオのアカウント→環境の既定LIFFの順に解決します。Poolを使う/r/では、指定Poolと有効な所属アカウントを確認します。更新前の環境にはアカウント別LIFF修正が入っていない場合があるため、まずversionとrelease notesを確認します。
main Poolは安全な既定値ですが、用途別Poolの指定漏れを見えにくくすることがあります。新しいリンクを一つだけ作り、PCのQRとスマホの両方で検証します。
手順
1. 対応表を作る
アカウント名、Channel ID末尾、Login Channel、LIFF ID末尾、Endpoint、Poolを一行にします。
2. リンク所有者を確認
対象リンクのline_account_id、scenario、entry route、Pool指定を照合します。
3. LIFFを確認
対象LIFFのEndpoint URLが現在のWorker URLで、該当LINE公式アカウントへリンク済みか確認します。
4. 新規リンクで再試験
キャッシュや古い配布URLを避け、自分のスマホでBへ到達するか確認します。
完了条件
- Channel・Login・LIFF・Endpointを一組で照合
- リンク所有accountとPoolを確認
- main fallbackを認識
- 新規リンクで期待アカウントへ到達
注意: 本番で配布済みのリンクを先に削除・無効化しません。古いQRやSNS投稿への影響を確認してから切り替えます。
Academy教材: 困ったときの症状別FAQ / Lesson 15-5
0円の範囲・配信通数・Cron・R2を確認する
Harness本体、LINEの送信枠、Cloudflareの実行枠、R2契約を別々に管理します。
この工程のゴール: 無料だと思って配信停止や請求事故を起こさず、現在の利用量を確認できる
Harnessがオープンソースでも、LINE公式アカウントとCloudflareの利用条件は別です。2026年8月2日時点の日本向けLINE公式例では、無料プランは月200通、ライトは5,000通、スタンダードは30,000通です。通数は吹き出し数ではなく、基本的に送信リクエスト数×送信対象人数で数えます。Harnessを使ってもこの上限は回避できません。
Cloudflare Workers Freeは1日100,000 request、Cron Triggerは1 accountあたり5個です。Harnessの定期処理を増やすたびにCronを増設せず、一つのCronから期限到来ジョブを処理する設計を優先します。
R2には無料利用枠がありますが、利用開始にはR2 subscriptionのcheckoutが必要です。画像アップロードが失敗したときはコードだけでなく、subscription、bucket、binding、公開方法を確認します。料金・上限は変わるため、教材の数字より各公式ページと自分のDashboardを優先します。
手順
1. 4つを別会計にする
Harness、LINE、Cloudflare Workers/D1、R2/外部APIを分けて記録します。
2. 現在量を取得
LINE通数、Workers request、D1 rows、R2 storage、Cron数をread-onlyで確認します。
3. 上限時の挙動を決める
送信停止、429/1027、画像保存失敗時の通知先と手動復旧を決めます。
4. 月次点検を固定
毎月1日に利用量、plan、payment、異常増加を確認します。
完了条件
- LINEとCloudflareの枠を分離
- 現在量と上限を公式情報で比較
- R2 subscriptionとbindingを確認
- 上限時の通知・停止方法を決定
注意: 料金と上限は変更されます。このガイドの数字は2026年8月2日時点の目安で、実行時は公式ページと契約画面を再確認します。
Academy教材: 困ったときの症状別FAQ / Lesson 15-6
AIへ渡すだけで原因を切り分ける
スクリーンショット一枚ではなく、再現条件と最初のエラーをAIへ安全に渡します。
この工程のゴール: 自力で直せない問題も、秘密情報を漏らさず再現可能な報告へ変えられる
『動きません』だけでは、AIもサポート側も原因を絞れません。一方で、APIキーや長いログ全文を貼る必要もありません。製品、OS、version、実行コマンド、期待、実際、最初のエラー、再現手順、影響範囲があれば十分です。
まずCodex/Claude Codeにローカルのリポジトリ、Cloudflareのread-only情報、対象時刻のログを読ませます。同じ問題の調査中は同じチャットを使い、別顧客・別Harness・別目的に変わるときは新しいチャットとフォルダへ分けます。
現行コードでは、トラックリンクに明示したシナリオは再訪時も最初の即時stepを再送できます。一方、タグ追加は初回だけです。またrich menuのpostbackは自動返信とログ記録には使えますが、現行webhook.tsではpostback分岐からIF–THENのfireEvent()を呼んでいません。要望と不具合を混ぜず、追加開発として切り出します。
手順
1. 事実を8項目へ整理
製品、環境、version、操作、期待、実際、最初のエラー、再現回数を書きます。
2. AIがread-only診断
コード、設定名、ログ、DB件数を読み、最初に途切れた層を出します。
3. 仕様か不具合か判定
現在の実装、公式仕様、期待を比較し、設定・既知制約・bug・追加要望に分けます。
4. 再現可能な質問へ変換
直らない場合だけ、秘密情報を除いた最小再現と根拠ファイルをIssue/サポートへ渡します。
完了条件
- 最初に失敗した地点を特定
- 仕様・bug・追加要望を分類
- 秘密情報なしの最小再現
- 次の一操作が一つに絞られる
注意: 公開Issueやオープンチャットへログ全文を貼る前に、APIキー、token、署名、メール、電話、完全UID、顧客メッセージを除去します。
Academy教材: 困ったときの症状別FAQ / Lesson 15-7
公式ソース
- LINE Harness / packages/create-line-harness/src/commands/setup.ts — 再開stateと完了step
- LINE Harness / packages/create-line-harness/src/commands/update.ts — Admin修復とupdate
- LINE Harness / packages/create-line-harness/src/index.ts — —repair-adminのCLI入口
- IG Harness / packages/create-ig-harness/src/steps/deploy-admin.ts — IG AdminのAPI URL注入
- LINE Harness / docs/wiki/Getting-Started.md — CORSと初回接続のトラブルシュート
- LINE Harness / docs/wiki/25-Staff-Management.md — 個人別スタッフ認証
- LINE Harness / apps/worker/src/index.ts — ADMIN_ORIGINとAPIルーティング
- LINE Harness / apps/worker/src/routes/webhook.ts — 友だち補完とメッセージ記録
- LINE Harness / docs/wiki/16-Chat-and-AutoReply.md — チャットとmessages_log
- LINE Harness / docs/wiki/Friends.md — 友だち登録とUUID連携
- LINE Developers: Webhookイベントを受信できない — Webhook利用設定の公式FAQ
- LINE Harness / docs/wiki/09-Rich-Menus.md — リッチメニューの実体とHarness操作
- LINE Harness / docs/wiki/11-Forms-and-LIFF.md — フォームとLIFF
- LINE Harness / apps/worker/src/routes/images.ts — 画像アップロード
- LINE Harness / packages/mcp-server/src/tools/index.ts — Codexから使える操作
- LINE Harness / docs/wiki/Release-Notes.md — アカウント別LIFF解決の修正
- LINE Harness / docs/wiki/10-Tracked-Links.md — トラックリンクと/r導線
- LINE Harness / apps/worker/src/routes/line-accounts.ts — 複数アカウント設定
- LINE Developers: Messaging APIの料金 — 通数・料金・上限時の挙動
- LINE Developers: 通数カウント方法 — request数×対象人数
- Cloudflare Workers Limits — request・Cron等の現行上限
- Cloudflare R2 Get started — R2 subscriptionと無料利用枠
- LINE Harness / apps/worker/src/routes/liff.ts — トラックリンク再訪時のevery-click処理
- LINE Harness / docs/OSS-SANDBOX-MERGE-GATE.md — 不具合修正の再現・検証条件
- IG Harness / apps/worker/src/tests/not-found.test.ts — IG Harnessの自動テスト例
関連ガイド
Academy会員はコピペ実行用プロンプトと演習を開くと、同じ手順をAIへ渡して実機で進められます。