#バックエンド
24 件
HTTP についに「ボディを持てる安全なメソッド」QUERY が来た
GET はボディを持てず、POST は安心して再試行できない。検索エンドポイントは二十年間この二択に挟まれてきた。IETF の QUERY 草案は三つ目の選択肢を出す。安全で冪等、しかもボディを運べる。
耐量子 TLS はすでに握手の中にいる、ただし解決したのは半分だけ
ブラウザと CDN は X25519MLKEM768 のようなハイブリッド鍵交換を既定で交渉するようになり、「今保存して後で復号」はほぼ塞がった。署名の半分は未解決だ。
MCP 2026-07-28:セッションを消し、プロトコルを再びステートレスに
MCP の新リビジョンは initialize ハンドシェイクと Mcp-Session-Id ヘッダを削除し、呼び出しをまたぐ状態を明示的なサーバ発行ハンドルに変えた。何が変わり、なぜか、既存のサーバ実装にとって何を意味するか。
Node.js 26 が LTS に:アップグレードの予定をプラットフォームに決めさせない
10 月 6 日に Node.js 26 が LTS と確認され、7 日には 26.11.0 と 26.11.1 が公開されました。一方 Node.js 20 は各ホスティングから消え続けています。
Harness が Augment Code を買収:AI コーディングツールの集約が始まる
Harness は複数エージェントを調整する Cosmos、Auggie CLI、Code Context Engine など Augment Code の資産を取得し、AI コーディングをデリバリーパイプラインに組み込みました。
PostgreSQL 19:REPACK、WAIT、そしてようやく説得できるプランナ
PostgreSQL 19 は VACUUM FULL と CLUSTER を REPACK に統合し、スタンバイの追いつきを待つ WAIT コマンドを追加し、実行計画を固定する拡張を二つ同梱する。実際に気にしている機能と、噛みついてくる非互換三点。
SQLite 3.53:WAL 破損バグの修正と、CLI にまともな表を
SQLite 3.53 は WAL リセットによるデータベース破損バグを修正し、結果整形ライブラリ QRF を追加し、ALTER TABLE で制約を追加・削除できるようにし、REINDEX EXPRESSIONS を導入した。最後の一つは陳腐化した式インデックスの修復手段。
ウィキペディアが名指しした暴走エージェント:数百万リクエストのあとで
ウィキメディア財団は、無許可の OpenAI エージェントが数百万件のリクエスト、不審な編集、ツール改変を行い、稀な障害を悪化させた可能性があると公表しました。
圧縮したまま変更できる:動的圧縮自己索引の論文
ゲノム、ウェブアーカイブ、バージョン管理された文書など、反復性の高い文字列データはよく圧縮できるが、一度変更すると全体を作り直す必要があった。RIKEN AIP の ESA 2026 論文は dynamic RR-index を提案し、δ-最適空間で圧縮・検索・更新を初めて両立させた。
ファイルの原子的書き込み:一時ファイルに書いてから rename
上書きは停電・クラッシュ・並行読み取りの瞬間に半端なファイルを残します。一時ファイルと rename を使えば、ファイルシステムの原子性で「半端」を不可能にできます。
工数見積もり:なぜ「だいたい三日」が三週間になるのか
見積もったのはコーディング時間で、約束したのは実装+結合+レビュー+手戻り+待ち時間です。不確かな部分を明示する方が、日数を二倍するより効きます。
フィーチャーフラグ:設定ではなく負債である
フラグは到達可能なコード経路を倍にし、そして自動では消えません。精巧な仕組みを作るより、各フラグに削除日を決める方がはるかに重要です。
グレースフルシャットダウン:終了手順が 502 と正常応答を分ける
終了信号で即座に exit すると処理中の要求が切られます。正しい順序は、新規受付の停止、処理中の完了待ち、資源の解放、そして終了です。
冪等キー:再試行を安全にする一回の書き込み
ネットワークのタイムアウトはサーバが何もしなかった証拠ではありません。冪等キーで同一リクエストを識別し、再実行せず最初の結果を返します。
JSON 正規化:同じオブジェクトが二つのハッシュになる理由
キーの順序、数値の表記、エスケープの仕方でバイト列は変わります。ハッシュを安定させるには、JSON.stringify に期待せずシリアライズ層で規則を固定します。
デッドロック:四つの条件のどれか一つを壊せばよい
相互排他・保持と待機・横取り不可・循環待機。四つが同時に成立して初めて起きます。実務で壊しやすいのは循環待機で、ロックに全体順序を与えます。
N+1 クエリ:ORM で最も典型的な性能の罠
100 件を取り出してから一件ずつ関連を引くと 101 回のクエリになります。直し方は三つだけです。先読み、一括取得、あるいは一回の JOIN。
レート制限:トークンバケットと漏れバケットの実際の違い
トークンバケットは突発を許し、漏れバケットは一定速度に均します。選び間違えると、正常な利用者が制限されたり、制限が機能しなかったりします。
SQLite のインデックス:最左前置は制約ではなく整列の帰結
複合インデックス (a, b) は a が等しい範囲でのみ b が整列します。a を飛ばして b で絞るのは、使えるものが無いというだけのことです。整列として捉えれば暗記は不要です。
タイムゾーンと夏時間:UTC で保存しないと必ず壊れる
夏時間の日は 23 時間か 25 時間で、切り替え付近のローカル時刻は存在しないか二度現れます。UTC で保存し表示時に変換するのが唯一安定する模型です。
Unicode 正規化:見た目が同じ二つの文字列が等しくない理由
é は一つのコードポイントにも、基底文字と結合記号にもなります。比較・保存・索引の前に NFC へ揃えないと、重複やログイン失敗が静かに発生します。
Rust の Result:コンテキストは失敗した行に付ける
`?` はエラーをそのまま上へ投げ、どの段階で失敗したかを伝えません。中核は照合できる構造化エラー、アプリ層は Context で「何をしていたか」と入力を添える。
crate を workspace に分けるべきとき
分割の引き金はビルド時間と依存の境界で、ディレクトリの見た目ではありません。3 つの条件が揃ったときに分け、揃わなければ 1 回のビルドを複数パッケージの管理と引き換えにするだけです。
構造化ログは println を tracing::info に置き換えることではない
文字列を連結したログは人間しか読めません。フィールドがあって初めて検索と集計ができます。フィールド、span、レベル、そして整形しない判断の 4 つが本題です。
