即効レスキュー・コピペ復旧!現場のAPIエラー・連携不具合を3分で直す実践ガイド
【kintone×Make】HTTP 400 Bad Requestが出たときの原因特定とフィールドコード修正手順
【kintone×Make】HTTP 400 Bad Requestが出たときの原因特定とフィールドコード修正手順
解決可否:解決可能(設定ミスによる100%人為的なエラーであり、kintone・Make双方に障害がなければ必ず復旧できる)
主な発生原因:
①フィールドコードの表記揺れ(大文字・小文字・全角半角・アンダースコア抜け)、
②データ型のミスマッチ(数値/日時/ドロップダウンの形式不一致)、
③必須項目へのnull・空文字送信
修正所要時間:原因特定込みで平均10〜20分(エラーログからフィールドコードを特定できれば5分程度)
1. はじめに:kintone×Makeで「400 Bad Request」が起きる仕組み
Make(旧Integromat)からkintoneへレコードを登録・更新するシナリオを組んでいると、実行ログに次のようなエラーが表示されて処理が止まることがあります。
[400] Bad Request
kintone REST API でエラーが発生しました。
kintoneのREST API(/k/v1/record.json や /k/v1/records.json)は、受け取ったJSONの中身をサーバー側で厳格にバリデーションします。フィールドコードが1文字でも間違っていたり、数値フィールドに文字列を送ったり、必須項目が空欄だったりすると、レコードは1件も登録されずに400エラーとして即座に拒否されます。
これはkintone側の仕様であり、Make側の通信自体が失敗しているわけではありません。Makeの実行履歴(Execution History)を開き、該当モジュールの「Output」または「Error」タブを確認すると、kintoneが返してきた詳細なエラーメッセージ(JSON形式)を確認できます。まずはここを見る癖をつけることが、原因特定の第一歩です。
kintoneが返す400エラーのレスポンスは、おおむね次のような構造をしています。
{
"code": "CB_VA01",
"id": "20240816-abcdef123456",
"message": "入力内容が正しくありません。",
"errors": {
"顧客名": {
"messages": ["必須です。"]
}
}
}
このerrorsオブジェクトのキーに、問題を起こしているフィールドコードがそのまま表示されます。ここを起点に、以下の3つの原因を順番に切り分けていきます。
2. 【原因1】フィールドコードの大文字・小文字・アンダースコア表記揺れ
最も多い原因が、Make側のマッピングで指定した文字列と、kintone側の実際のフィールドコードが一致していないケースです。kintoneのフィールドコードは大文字・小文字を区別するため、CustomerName と customername は別物として扱われます。
特に次のようなパターンで表記揺れが起きやすいので注意してください。
- フィールド名を日本語で作成した際に自動採番された
文字列__1行__0のようなアンダースコア付きコードを、途中でリネームし忘れている - Excel等からフィールドコード一覧をコピーする際に、全角スペースや改行が混入している
- 開発環境(テスト用アプリ)と本番アプリでフィールドコードが微妙に異なる(アプリをコピーした際に自動でサフィックスが付与されることがある)
正確なフィールドコードは、kintoneの管理画面から必ず確認してください。
- 対象アプリを開き、右上の歯車アイコンから[アプリの設定]を開く
- [フォーム]タブを選択する
- 対象フィールドをクリックし、右側に表示される設定パネルの[フィールドコード]欄を確認する
Make側では、HTTPモジュールでJSONを手書きしている場合、次のようにフィールドコードをキーとして正確に一致させる必要があります。
{
"app": 123,
"record": {
"顧客名": { "value": "山田太郎" },
"customer_email": { "value": "yamada@example.com" }
}
}
キー名にタイプミスがあると、kintoneはそのフィールドを「存在しないフィールド」として認識し、CB_VA01(不正なリクエスト)や GAIA_IL19(フィールドが見つからない)といったエラーコードを返します。エラーレスポンスの errors キー、または message に表示されるフィールド名と、実際のフィールドコードを1文字ずつ突き合わせて確認しましょう。
3. 【原因2】データ型(文字列・数値・日時・ドロップダウン)のミスマッチ
フィールドコードが正しくても、送信する値の「型」がkintoneの期待する形式と合っていないと400エラーになります。代表的な組み合わせミスは以下の通りです。
| kintoneのフィールド種別 | 期待される値の形式 | よくある間違い |
|---|---|---|
| 数値 | 半角数字の文字列(例:"1000") |
カンマ区切り("1,000")や全角数字 |
| 日時 | ISO8601形式(例:"2026-08-16T09:00:00Z") |
"2026/08/16" のようなスラッシュ区切り |
| ドロップダウン | アプリ側で定義済みの選択肢と完全一致する文字列 | 選択肢にない自由記述値、末尾の空白 |
| チェックボックス | 配列(例:["A","B"]) |
カンマ区切りの単一文字列 |
Makeでは前段のモジュール(Google スプレッドシートやWebhookなど)から取得した値が、そのままの形式でkintoneに渡されてしまうことがよくあります。特に日時フィールドは要注意で、Makeの日付操作関数を使って明示的にフォーマットを変換する必要があります。
formatDate(now; "YYYY-MM-DDTHH:mm:ssZ")
ドロップダウンやラジオボタンでは、kintone側の選択肢設定と1文字でも異なると即エラーになります。実際に返ってくるエラーはこのような形です。
{
"code": "CB_VA01",
"id": "20240816-xyz789",
"message": "入力内容が正しくありません。",
"errors": {
"ステータス": {
"messages": ["選択肢にない値が指定されています。"]
}
}
}
この場合は、kintoneの[アプリの設定]>[フォーム]でドロップダウンフィールドをクリックし、登録されている選択肢の文言(表記ゆれ・全角半角・末尾スペースの有無)を一つずつ確認してください。
4. 【原因3】kintone側で「必須項目」に指定されているフィールドの空欄(null)送信
3つ目の代表的な原因は、kintone側で「必須項目」に設定されているフィールドに対して、Makeから空文字・null・未マッピングの値が送信されているケースです。特にWebhookやフォームツール(Google フォームなど)と連携している場合、入力必須ではない項目がMake側で空のまま渡り、kintone側の必須設定に引っかかるパターンが頻発します。
エラーレスポンスの例は次の通りです。
{
"code": "CB_VA01",
"id": "20240816-req000111",
"message": "入力内容が正しくありません。",
"errors": {
"電話番号": {
"messages": ["必須です。"]
}
}
}
必須設定になっているかどうかは、以下の手順で確認できます。
- 対象アプリの[アプリの設定]を開く
- [フォーム]タブで対象フィールドをクリックする
- 設定パネル内の「必須項目にする」チェックボックスの状態を確認する
対処方法は2通りあります。運用上その項目が本当に必須であれば、Make側のマッピングステップで欠損時のデフォルト値を設定するか、フィルター(Filter)機能を使って値が空の場合はシナリオを分岐・停止させます。逆に、その項目を必須にする必要がないのであれば、kintone側の必須設定を外すことも検討してください。
5. 【復旧手順】Makeのモジュール設定とJSONマッピングの直し方
ここまでの原因切り分けを踏まえ、実際にMake側で修正する手順をまとめます。
手順1:エラー内容の再確認
Makeのシナリオ画面右上の[Execution history(実行履歴)]を開き、エラーが発生した実行を選択します。該当モジュールをクリックし「Error」または「Output」パネルに表示されるJSONから、errors オブジェクトのキー(=問題のフィールドコード)とメッセージ内容を控えます。
手順2:モジュール設定を開く
kintoneへの登録・更新を行っているモジュール(「Create a Record」「Update a Record」またはHTTPモジュール)をダブルクリックして設定画面を開きます。
手順3:フィールドコードとマッピング値を突き合わせる
HTTPモジュールを使っている場合は、Request contentのJSONを直接編集します。
{
"app": 123,
"record": {
"電話番号": {
"value": "{{formatNumber(4.PhoneNumber; 0; \"\"; \"\")}}"
},
"契約日": {
"value": "{{formatDate(4.ContractDate; \"YYYY-MM-DD\")}}"
},
"ステータス": {
"value": "対応中"
}
}
}
修正のポイントは次の3つです。第一に、フィールドコードをkintone管理画面の表記と完全一致させること。第二に、数値・日時は formatNumber や formatDate などMakeの変換関数を挟んで型を明示的に揃えること。第三に、必須フィールドには ifempty() 関数などでデフォルト値を設定し、nullが渡らないようにすることです。
ifempty({{4.PhoneNumber}}; "未登録")
手順4:単体テスト実行で確認
修正後は、シナリオ全体を回す前に対象モジュールのみ「Run this module only」で単体実行し、400エラーが解消されたことを確認します。成功すると、Outputパネルにkintoneから返却されたレコードID(id)と revision が表示されます。
{
"id": "4521",
"revision": "1"
}
これが表示されればkintone側への登録は正常に完了しています。最後にシナリオ全体を有効化(ON)に戻し、次回の自動実行で再発しないかを1サイクル分監視してください。
6. まとめ:エラーログから対象フィールドを一瞬で特定するコツ
kintone×Makeの400エラーは、原因の9割が「フィールドコードの表記揺れ」「データ型のミスマッチ」「必須項目への空欄送信」のいずれかに集約されます。復旧を早めるコツは、エラーメッセージを読み込む前に、まずレスポンスJSONの errors キーだけを確認することです。ここに問題のフィールドコードがそのまま表示されるため、kintoneの[アプリの設定]>[フォーム]で同名のフィールドを開けば、型・必須設定・選択肢のどこに問題があるかを数分で特定できます。
日常的な予防策としては、フィールドコードを変更した際は必ずMake側のマッピングも同時に更新すること、日時・数値フィールドには変換関数を必ず挟んでおくこと、そしてテスト用アプリと本番アプリでフィールドコードが完全に一致しているかを定期的に照合することが有効です。この3点を運用ルールに組み込んでおけば、同様のエラーの再発をほぼ防ぐことができます。
