[{"data":1,"prerenderedAt":352},["ShallowReactive",2],{"h3247710173":3,"h4023263346":226,"h3445408285":347},{"id":4,"title":5,"body":6,"description":28,"extension":216,"meta":217,"navigation":221,"path":222,"seo":223,"stem":224,"__hash__":225},"docs\u002Fja\u002Ftips\u002F2026\u002F09\u002F10\u002Fmessaging-api-rate-limits.md","バケツと水で理解するMessaging APIのレート制限とトークンバケット方式",{"type":7,"value":8,"toc":202},"minimark",[9],[10,11,12,20,25,29,41,44,53,56,61,64,67,83,92,95,101,107,110,114,117,120,140,146,149,157,161,164,167,175,181,196],"Tips",{},[13,14,17],"h1",{"id":15,"class":16},"","!mb-4",[18,19],"page-title",{},[21,22],"display-date",{"date":23,"class":24},"2026\u002F09\u002F10","!mb-20",[26,27,28],"p",{},"こんにちは！テクニカルライターの古木です。",[26,30,31,32,36,37,40],{},"Messaging APIの各エンドポイントには、リクエストを送信する頻度の上限である「レート制限」があります。レート制限を超えたリクエストには、",[33,34,35],"code",{},"429 Too Many Requests","のステータスコードと",[33,38,39],{},"The API rate limit has been exceeded. Try again later.","のエラーメッセージが返されます。",[26,42,43],{},"レート制限が「60リクエスト\u002F時」であると聞くと、毎時0分にリクエスト数がリセットされるような仕組みを想像するかもしれませんが、Messaging APIのレート制限は、そのような仕組みではありません。",[26,45,46,47,52],{},"今回の記事では、",[48,49,51],"a",{"href":50},"\u002Freference\u002Fmessaging-api\u002F#rate-limits-mechanism","Messaging APIのレート制限の仕組み","について掘り下げ、Messaging APIで採用しているトークンバケット方式について説明します。",[54,55],"toc",{},[57,58,60],"h2",{"id":59},"consume-water-to-send-requests","トークンバケット方式の概念説明",[26,62,63],{},"トークンバケット方式では、リクエストの送信に使えるトークンが、上限のあるバケットに蓄えられます。リクエストを送信するとトークンが消費され、消費された分のトークンは時間の経過に応じて徐々にバケットに補充されます。",[26,65,66],{},"トークンを水に置き換えると、次のように考えることができます。",[68,69,70,74,77,80],"ul",{},[71,72,73],"li",{},"バケツには、水（利用可能なトークン）が貯まっています。",[71,75,76],{},"コップ1杯分の水（1リクエスト分のトークン）をすくうと、バケツの水が減ります。",[71,78,79],{},"蛇口からは、水が一定のペースで補充されます（時間の経過に応じたトークンの補充）。",[71,81,82],{},"バケツの容量を超えて水を蓄えることはできません。",[26,84,85],{},[86,87],"img",{"alt":15,"className":88,"src":91},[89,90],"bg-border","w-fix-800","\u002Fmedia\u002Ftips\u002F2026\u002Fmessaging-api-rate-limit-token-refill-ja.webp",[26,93,94],{},"コップで水をすくうペースが、水を補充するペースよりも遅い間は、蛇口からの補充によってバケツ内の水が保たれます。一方、コップで水をすくうペースが、蛇口から水を補充するペースを上回る状態が続くと、やがてバケツの中の水が足りなくなります。水が足りない状態では、コップで水をすくうことはできません。",[26,96,97,98,100],{},"この水が足りない状態は、リクエストに必要なトークンが不足している状態を表します。この状態でリクエストを送信すると、",[33,99,35],{},"が返されます。",[26,102,103],{},[86,104],{"alt":15,"className":105,"src":106},[89,90],"\u002Fmedia\u002Ftips\u002F2026\u002Fmessaging-api-rate-limit-token-shortage-ja.webp",[26,108,109],{},"なお、これらの図はトークンバケット方式の考え方を示す模式図です。実際のトークン数や補充間隔を示すものではありません。",[57,111,113],{"id":112},"water-returns-gradually","トークンは時間の経過とともに徐々に補充される",[26,115,116],{},"バケツと水の例えで示したとおり、トークンバケット方式では、消費された分のトークンが時間の経過に応じて徐々にバケットに補充されます。レート制限が「60リクエスト\u002F時」のエンドポイントであれば、1リクエスト分のトークンが補充されるまでに1分かかる計算です。",[26,118,119],{},"また、バケットに必要なトークンが残っていれば、補充ペースを一時的に上回るペースでリクエストを送信できます。たとえば、レート制限が「60リクエスト\u002F時」で、バケットに60リクエスト分のトークンが蓄えられている場合、次のようになります。",[121,122,123,126,129],"ol",{},[71,124,125],{},"1秒間に60リクエストを送信する。",[71,127,128],{},"すべてのトークンが消費され、一時的にバケットが空になる。",[71,130,131,132],{},"1分が経過すると1リクエスト分のトークンが補充され、1リクエストを送信できるようになる。\n",[68,133,134],{},[71,135,136,137,139],{},"トークンが補充される前にリクエストを送信すると、",[33,138,35],{},"が返される。",[26,141,142,143,145],{},"つまり、レート制限が原因の",[33,144,35],{},"を受け取った直後は、バケットに蓄えられているトークンが不足している状態です。そのため、リクエスト頻度を下げ、トークンが補充されるまで時間を置いてから、再度リクエストを送信してください。",[26,147,148],{},"大量のリクエストを送信する必要がある場合は、短時間に集中させず、キューなどを使って送信のペースを調整すると、トークンを使い切りにくくなります。",[150,151,154],"admonition",{"title":152,"type":153},"レート制限が適用される範囲にも注意","note",[26,155,156],{},"Messaging APIのレート制限は、チャネル単位かつAPI機能（エンドポイント）ごとに適用されます。たとえば、複数のサーバーやツールから同じチャネルの同じエンドポイントを呼び出す場合、それぞれのリクエストは同じレート制限の対象となるため、注意してください。",[57,158,160],{"id":159},"wrap-up","おわりに",[26,162,163],{},"今回は、Messaging APIのレート制限の仕組みであるトークンバケット方式について説明しました。",[26,165,166],{},"トークンバケット方式では、バケットに必要なトークンが残っていれば、一時的にリクエストの送信ペースがトークンの補充ペースを上回っても、リクエストを送信できます。ただし、リクエストを短時間に集中させないことと、レート制限超過を示すエラーメッセージが返されたら次のリクエストまで時間を置くことを意識してください。",[26,168,169,170,174],{},"レート制限の値や適用範囲について詳しくは、『Messaging APIリファレンス』の「",[48,171,173],{"href":172},"\u002Freference\u002Fmessaging-api\u002F#rate-limits","レート制限","」を参照してください。",[26,176,177],{},[178,179,180],"strong",{},"この記事の著者",[26,182,183,184,188,189,195],{},"ふるき（テクニカルライター）：",[48,185,187],{"href":186},"\u002F","LINE Developersサイト","のドキュメントを担当。テクニカルライティングに関するコミュニティ「",[48,190,194],{"href":191,"rel":192},"https:\u002F\u002Ftw-meetup.connpass.com\u002F",[193],"nofollow","Technical Writing Meetup","」を主催。",[197,198],"tags",{"tags":199,"lang":200,"section":201},"messaging-api","en","tips",{"title":15,"searchDepth":203,"depth":204,"links":205},4,5,[206,210,213],{"id":207,"depth":208,"text":209},"トークンバケット方式の概念説明-consume-water-to-send-requests",2,"トークンバケット方式の概念説明 {#consume-water-to-send-requests}",{"id":211,"depth":208,"text":212},"トークンは時間の経過とともに徐々に補充される-water-returns-gradually","トークンは時間の経過とともに徐々に補充される {#water-returns-gradually}",{"id":214,"depth":208,"text":215},"おわりに-wrap-up","おわりに {#wrap-up}","md",{"date":218,"tags":199,"locale":219,"sidebar":220},"2026-09-10 00:00 UTC","ja",false,true,"\u002Fja\u002Ftips\u002F2026\u002F09\u002F10\u002Fmessaging-api-rate-limits",{"title":5,"description":28},"ja\u002Ftips\u002F2026\u002F09\u002F10\u002Fmessaging-api-rate-limits","R98tEkg8kEL2uV5pLR962fU4S55iAcMw6X1bQdhTF1M",{"id":4,"title":5,"body":227,"description":28,"extension":216,"meta":345,"navigation":221,"path":222,"seo":346,"stem":224,"__hash__":225},{"type":7,"value":228,"toc":340},[229],[10,230,231,235,237,239,245,247,251,253,255,257,259,269,274,276,280,285,287,289,291,293,307,311,313,317,319,321,323,327,331,338],{},[13,232,233],{"id":15,"class":16},[18,234],{},[21,236],{"date":23,"class":24},[26,238,28],{},[26,240,31,241,36,243,40],{},[33,242,35],{},[33,244,39],{},[26,246,43],{},[26,248,46,249,52],{},[48,250,51],{"href":50},[54,252],{},[57,254,60],{"id":59},[26,256,63],{},[26,258,66],{},[68,260,261,263,265,267],{},[71,262,73],{},[71,264,76],{},[71,266,79],{},[71,268,82],{},[26,270,271],{},[86,272],{"alt":15,"className":273,"src":91},[89,90],[26,275,94],{},[26,277,97,278,100],{},[33,279,35],{},[26,281,282],{},[86,283],{"alt":15,"className":284,"src":106},[89,90],[26,286,109],{},[57,288,113],{"id":112},[26,290,116],{},[26,292,119],{},[121,294,295,297,299],{},[71,296,125],{},[71,298,128],{},[71,300,131,301],{},[68,302,303],{},[71,304,136,305,139],{},[33,306,35],{},[26,308,142,309,145],{},[33,310,35],{},[26,312,148],{},[150,314,315],{"title":152,"type":153},[26,316,156],{},[57,318,160],{"id":159},[26,320,163],{},[26,322,166],{},[26,324,169,325,174],{},[48,326,173],{"href":172},[26,328,329],{},[178,330,180],{},[26,332,183,333,188,335,195],{},[48,334,187],{"href":186},[48,336,194],{"href":191,"rel":337},[193],[197,339],{"tags":199,"lang":200,"section":201},{"title":15,"searchDepth":203,"depth":204,"links":341},[342,343,344],{"id":207,"depth":208,"text":209},{"id":211,"depth":208,"text":212},{"id":214,"depth":208,"text":215},{"date":218,"tags":199,"locale":219,"sidebar":220},{"title":5,"description":28},{"toc":348,"fullToc":348},[349,350,351],{"id":59,"depth":208,"text":60},{"id":112,"depth":208,"text":113},{"id":159,"depth":208,"text":160},1789620324041]