Quartet / Quintet

dev.to に API で記事を出す — 実測でしか分からなかったこと

ここに書いてあるのは全部、実際のアカウントで記事を出しながら観測したものです。 読んだ話ではありません。日付を入れてあるので、古くなっているかは各自で判断してください。

2026-09-04 〜 2026-09-06 の実測。記事19本、更新の呼び出しは約40回。

レート制限は 429 ではなく 500 で返る

いちばん時間を取られるのがこれです。500 は「サーバが壊れている」に読めるので、 再試行のループに入ってしまいます。

2026-09-04。 間隔を空けずに PUT /articles/:id を9回:

9回中3回 -> HTTP 500

本文に「レート制限」とは書かれていません。同じ内容を間隔を空けて投げ直すと、全部通ります。

間隔 回数 失敗
なし 9 3
10秒 6 0
10秒 11 0
20秒 7 0

書き込みの間を10秒空ければ、私が回した全部のバッチで通りました。 書き込みで 500 が返ったら、送った内容を疑う前に間隔を空けてください。

カバー画像は、送るときと返るときで名前が違う

送るのは main_image、返るのは cover_image です。

送信   { "article": { "main_image": "https://example.github.io/covers/a.png" } }
応答   { "cover_image": "https://media2.dev.to/dynamic/image/width=1000,.../https%3A%2F%2F..." }

応答の URL は dev.to 側の CDN で、送った URL を書き換えたものです。 つまり dev.to が取り込んだあとは、こちらの置き場が落ちても記事の表示は壊れません。

応答の main_image を見に行くと null なので、書き込みが効いていないように見えます。

published は毎回リクエストの値になる

「そのままにする」という選択肢がありません。送った値が、そのまま記事の状態になります。

PUT /articles/:id  published: false で送る  ->  公開済みの記事が取り下げられる

URL は残り、ページは 404 になり、貼られていたリンクが死にます。 published をコマンドラインのフラグで決めているツールなら、 フラグを付け忘れた更新が、直したかった記事を取り下げます。

安全な形は、推測せずに拒否することです。

if (existing?.published && !publish) {
  throw new Error("この記事は公開済みです。--publish 無しの更新は下書きに戻します。");
}

推測するほうが危険です。「意図した取り下げ」と「フラグの付け忘れ」は、 ツールの中からは区別できません。

記事詳細の応答に series は入らない

series は article オブジェクトに載せれば設定できます。が、 GET /articles/:id は返してきません。

7本に series を設定して API を見ました。何も入っていません。 記事ページには最初から表示されていました。

# 設定できたかどうかは、これでは分からない
curl -H "api-key: $KEY" https://dev.to/api/articles/4570263 | jq .series

# こちらで分かる
curl -s https://dev.to/<user>/<slug> | grep -o "<シリーズ名>"

表示を確かめたいなら、表示を見ること。

同じ日に何本も出すと、ほとんどが埋まる

API の挙動ではありませんが、API があるとやってしまう失敗です。

2026-09-04。 英語記事9本を1日のうちに公開。24時間後の PV:

記事 PV
1本目 27
2本目 23
3本目 13
4本目 10
残り5本 0

フィードは時系列なので、まとめて出した記事は互いを埋めます。 以後は1日1本にしました。

0 のまま残った記事は、放っておいても回復しませんでした。

同一性はタイトルではなく id で持つ

GET /articles/me/published で自分の記事が取れます。 ここでタイトルで既存を探すと、タイトルの描画バグを直した日に、 ツールが自分の記事を見失って重複を作ります。

ファイル名と、API が採番した id の対応を持っておきます。

{ "ids": { "composite-github-action": 4576296 } }

そして記録があるのに見つからないときは止めます。 黙って新規作成に落ちるのがいちばん困ります。 同じ内容の記事が2本、同じ検索語で競合することになるからです。

注記

この運用そのものを配っています

4 人格版 Quartet は MIT で無料公開しています。UI 設計人格・レビュー基準・ Issue 単位の並列実行スクリプト・実践ガイド 10 章を足した Quintet は有料版です。

無料版を見る 製品ページ