- ある日、日次テスト監査が
test_booktempfile.pyとtest_ordertempfile.pyの 非同期取込テストを失敗として起票しはじめた(#10222 / #10223)。 - 直接の引き金は、まったく正しい本番バグ修正(#10178)だった。「Celery タスクが DB コミット前に
.delay()されて未コミット行を掴めない」という実バグを、transaction.on_commit経由の enqueue に直して解消したもの。 - ところが該当テストは高速化のため
TransactionTestCase→TestCase(RestFastTestCase)へ移行済みで、TestCaseではon_commitコールバックが発火しない。その結果、create 時の取込タスクが実行されず、「取込が完了していない」状態で反映が 400 になって落ちた。 - 修正はテスト側。非同期取込を起こす API 呼び出しを
self.captureOnCommitCallbacks(execute=True)で囲むだけ。 - 本質的な教訓: 「本番コードに
on_commitを足す」変更は、TestCaseベースのテストが踏んでいる限り変更箇所では何も壊れず、離れた場所で後から静かに壊れる。共有ディスパッチ層を触るときは、それを踏むテストの実行モデル(commit するか否か)まで含めて確認する。
IoT システムや SaaS の提案書を書いていると、お客様から「このシステム、ちゃんと動くんですか?」と聞かれます。この質問にどう答えるか で、契約交渉の主導権が決まります。
「99.9% 動きます」と言い切れば SLA (契約) になり、下回ったら違約金。「目標値です」と言えば SLO (内部目標) で、超過しても返金義務はない。この 1 文字違いで法的拘束力が変わります。
本記事では、SRE (Site Reliability Engineering) 業界で標準となっている SLI / SLO / SLA の 3 用語を、提案書を書く立場から整理します。
django-mptt の README を開くと、いきなり以下の文言が目に飛び込んでくる。
This project is currently unmaintained
You can find alternatives to django-mptt on Django Packages. Maybe you do not need MPTT, especially when using newer databases. See django-tree-queries for an implementation using recursive Common Table Expressions (CTE).
「単に飽きて投げ出した」のか、それとも「技術的に役目を終えた」のか。本稿では django-mptt のリポジトリ、CHANGELOG、ソースコードを実際に読んで、その背景と後継への移行可否を整理する。
業務管理システム(PHP/Laravel 6.20)を Python/Django 4.2 に移行するプロジェクトを、Claude Code の自律実行でほぼ全自動で完遂しました。
- 移行元: Laravel 6.20 / PHP 8.0 / MySQL 5.7 / Blade テンプレート
- 移行先: Django 4.2 LTS / Python 3.11+ / MySQL 8.0 / Django Templates
- 所要時間: 約 5.5 時間(準備フェーズ除く)
- 成果物: 17 モデル / 50+ テンプレート / 199 テスト / 15,000 行の Python コード