Python向けリンター「Ruff」v0.16.0、標準ルールを拡充
Ruff v0.16.0 のリリースにより、デフォルトで有効化されるルール数が大幅に増加し、開発者は設定なしでも深刻なエラーを検出できるようになった。
AI算出
通常リリースainew評価標準
Ruff のバージョンアップは具体的な技術的変更点(ルール数の増加)を含むため novelty は高く評価されるが、AI モデルそのものの進化ではなく開発ツールのアップデートであるため ai_relevance は中程度。また、日本固有の文脈や企業事例がないため japan_relevance は低め。
6つの評価軸を見る
- AI関連度
- 50
- 情報源の信頼性
- 75
- 新規性
- 75
- 調べる価値
- 75
- 重複の少なさ
- 100
- 日本での有用性
- 25
この記事の3ポイント
- 1
デフォルトルールの大幅拡大
- 2
深刻なエラーの自動検出
- 3
自動化による修正の実現
なぜ重要か・誰に関係するか
このアップデートは、Python 開発コミュニティ全体におけるコード品質の標準を底上げする重要な転換点です。設定の手間を省きつつ、より厳格なチェックをデフォルトで適用することで、潜在的なバグやセキュリティリスクを早期に排除できる環境が整いました。
AI深層分析を開く2026年7月26日 03:17
キーポイント
デフォルトルールの大幅拡大
Ruff v0.16.0 では、有効化されるルール数が前バージョンの 59 から 413 に増え、合計 968 ルルのうち約半数がデフォルトでオンになった。
深刻なエラーの自動検出
以前はオフだった構文エラーや実行時エラー(例:datetime.now() の tz 指定忘れ、盲点の例外処理)などが、設定なしで自動的に検出されるようになった。
自動化による修正の実現
開発者は `--fix --unsafe-fixes` オプションを用いることで、発見された数百件の問題のうち大部分を自動修復することが可能となった。
Ruff の新機能 B018
Ruff v0.16.0 で、使用されていない属性アクセスを検出するルール(B018)が追加されました。
Astral の OpenAI 移籍と AI エージェントの活用
Astral が OpenAI に移籍したことで、Ruff の出力形式がコーディングエージェントによる自動修正に最適化されています。
重要な引用
Ruff now enables 413 rules by default, up from 59 in previous versions.
Many of these rules catch severe issues, including syntax errors and immediate runtime errors but were not previously enabled by default.
this output provides everything a coding agent would need to fix the problems.
Unsurprisingly, given Astral's new home at OpenAI,
編集コメントを表示
編集コメント
Ruff のような高速なツールがデフォルト設定を強化することで、開発者の負担を減らしつつコードの健全性を維持する動きは、AI が生成したコードの品質保証にも応用可能な重要なトレンドです。
Astral は数日前の 7 月 23 日、Python ライニングツール「Ruff」の大幅にアップデートされた新バージョンをリリースしました。私は今日、自分の CI ジョブが新しいデフォルトの Ruff チェックと、依存関係で指定されていない"ruff"の開発用パッケージのために一斉に失敗したのをきっかけにこのニュースを知りました。
Brent Westbrook の発表記事によると、Ruff はデフォルトで有効にするルール数を 59 から 413 に引き上げました。
Ruff のデフォルトルールセットが最後に改定されたのはv0.1.0以来で、その間に Ruff のルール数は 708 から 968 に増加しました。これらの多くのルールは、以前はデフォルトで有効化されていなかった「構文エラー」や「即時のランタイムエラー」など、深刻な問題を検出するものです。新しいルールセットでは、Ruff の設定を一切行わなくても、こうした問題やその他多数の問題に自動的に気づくことができます。
あらゆる Python プロジェクトで試すためのワンライナーは以下の通りです:
uvx ruff@latest check .
私は最新の Ruff を私の主要な 3 つのプロジェクトである Datasette、sqlite-utils、そして LLM に適用しましたが、新しいデフォルトルールに違反する数百件の軽微な問題が見つかりました。
3 つのプロジェクトはいずれも非常に包括的なテストスイートを持っており、CI 環境では Python 3.10 から 3.14 までで実行されています。そのため、今回のようなアップグレードは比較的安全に行えます。
主要なアップグレードを実行したコマンドは以下の通りです。
uvx ruff@latest check . --fix --unsafe-fixes
sqlite-utils に対してこのコマンドを実行すると、以下のような結果が報告されました。
1618 件のエラーが見つかりました(1538 件を自動修正、80 件が残存)。
参考までに、残っている問題のうち 3 つを紹介します。Ruff はそれぞれの問題について分かりやすく説明してくれます。
DTZ005 datetime.datetime.now() が tz 引数なしで呼び出されています
--> tests/test_duplicate.py:17:10
|
15 | "datetime_col" TEXT)")"")
16 | # モックデータ 1 行を挿入:
17 | dt = datetime.datetime.now()
| ^^^^^^^^^^^^^^^^^^^^^^^
18 | data = {
19 | "text_col": "Cleo",
|
help: tz パラメータに datetime.timezone オブジェクトを渡してください
BLE001 曖昧な例外捕捉は避けてください:Exception
--> tests/test_plugins.py:16:12
|
14 | db.execute("select * from pragma_function_list()")
15 | return True
16 | except Exception:
| ^^^^^^^^^
17 | return False
18 | finally:
|
B018:使えない属性アクセスが見つかりました。変数に代入するか、削除してください。
--> tests/test_update.py:46:5
|
44 | def test_update_invalid_pk(fresh_db, pk, update_pk):
45 | table = fresh_db["table"]
46 | table.insert({"id1": 5, "id2": 3, "v": 1}, pk=pk).last_pk
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
47 | with pytest.raises(NotFoundError):
48 | table.update(update_pk, {"v": 2})
|
Astral が OpenAI の傘下に入ったことを考えると、この出力はコーディングエージェントが問題を修正するために必要な情報をすべて含んでいます。
私は Codex(GPT-5.6 Sol high)を使って LLM と sqlite-utils をアップグレードし、Claude Code(Opus 5 使用)で Datasette をアップグレードしました。
原文を表示
Astral shipped a significant new version of their Ruff Python linting tool a few days ago on July 23rd. I noticed today because my various CI jobs all started failing thanks to new default Ruff checks and my unpinned "ruff" dev dependency.
From Brent Westbrook's announcement post:
Ruff now enables 413 rules by default, up from 59 in previous versions.
Since Ruff's default rule set was last modified in v0.1.0, the number of rules in Ruff has grown from 708 to 968. Many of these rules catch severe issues, including syntax errors and immediate runtime errors but were not previously enabled by default. With the new rule set, Ruff will bring these issues and many others to your attention without any Ruff configuration.
Here's a one-liner for trying it on any Python project:
uvx ruff@latest check .
I ran the latest Ruff against my three biggest projects - Datasette, sqlite-utils, and LLM - and it found *hundreds* of minor issues that breached the new default rules.
All three projects have very comprehensive test suites, executed in CI against Python 3.10 through Python 3.14, so upgrades like this are pretty safe. The following command did the bulk of the upgrades:
uvx ruff@latest check . --fix --unsafe-fixes
Against sqlite-utils, that command reported:
Found 1618 errors (1538 fixed, 80 remaining).
As an illustrative example, here are three of the remaining issues. Ruff does a nice job of explaining each one:
DTZ005 `datetime.datetime.now()` called without a `tz` argument
--> tests/test_duplicate.py:17:10
|
15 | "datetime_col" TEXT)""")
16 | # Insert one row of mock data:
17 | dt = datetime.datetime.now()
| ^^^^^^^^^^^^^^^^^^^^^^^
18 | data = {
19 | "text_col": "Cleo",
|
help: Pass a `datetime.timezone` object to the `tz` parameter
BLE001 Do not catch blind exception: `Exception`
--> tests/test_plugins.py:16:12
|
14 | db.execute("select * from pragma_function_list()")
15 | return True
16 | except Exception:
| ^^^^^^^^^
17 | return False
18 | finally:
|
B018 Found useless attribute access. Either assign it to a variable or remove it.
--> tests/test_update.py:46:5
|
44 | def test_update_invalid_pk(fresh_db, pk, update_pk):
45 | table = fresh_db["table"]
46 | table.insert({"id1": 5, "id2": 3, "v": 1}, pk=pk).last_pk
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
47 | with pytest.raises(NotFoundError):
48 | table.update(update_pk, {"v": 2})
|
Unsurprisingly, given Astral's new home at OpenAI, this output provides everything a coding agent would need to fix the problems.
I had Codex (GPT-5.6 Sol high) upgrade LLM and sqlite-utils, and Claude Code (with Opus 5) upgrade Datasette.
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み