Repository navigation
v2.2.2
yomiyasu v2.2.2 を公開しました。
同じ段落を何十回も繰り返す文書で、推敲のあとに動く差分の検査(diff)が遅くなっていたのを直したバージョンです。
lint、diff、check、フックの出力は、JSON の tool_version と --version が示す版のほかは、v2.2.1 と1文字も変わりません。
v2.1.3 からお使いの方に向けて、v2.2.0、v2.2.1、v2.2.2 で変わったことを「v2.1.3 からの変化」の節にまとめました。
背景と課題
v2.2.1 を作る途中で、同じ形の段落を何十回も並べた文書を検査すると、diff の時間が段落の数の2乗に近い速さで伸びることが分かりました。
1,257字の技術メモを空行で120回つないだ文書(約15万字)では、diff だけで15秒ほどかかります。
check の run も同じ照らし合わせを使うので、同じだけ待つことになります。
原因は、推敲の前と後を照らし合わせる処理にありました。
この処理は、一致を1つ見つけると、その右に残る範囲でまた一致を探します。
同じ段落が続く文書では、次の一致はすぐ次の段落にあるのに、探すたびに残りのすべての段落を調べていました。
v2.2.2 で変わったこと
v2.0.1 から、照らし合わせの処理は、範囲ごとに一致の長さの上限を求めて探しています。
上限と同じ長さを探す段で見つかる一致は、長さがちょうど上限のものだけです。
そこでこの段では、原文の前から見て最初に一致が見つかったところで探すのをやめるようにしました。
あわせて、種で探すどの段でも、一致を伸ばす長さを上限までで止めます。
答えを選ぶ決まり(いちばん長く一致する部分を選び、長さが同じなら前にある部分を選ぶ)は変わらないので、出力も変わりません。
数字で見る v2.2.2
Python 3.14.5 で動かした時間です(ほかの処理も動いている同じ Mac で、v2.2.1 と v2.2.2 を交互に3回ずつ動かした中央値です)。
| 文書 | v2.2.1 | v2.2.2 |
|---|---|---|
| 1,257字の技術メモを30回つないだ文書の diff | 0.90秒 | 0.47秒 |
| 同じメモを60回つないだ文書の diff | 5.30秒 | 0.87秒 |
| 同じメモを120回つないだ文書(約15万字)の diff | 15.49秒 | 1.68秒 |
| 120回つないだ文書の check run | 15.85秒 | 1.95秒 |
| 段落ごとに少し変えた写しを120回つないだ文書の diff | 14.25秒 | 2.27秒 |
| 繰り返しのない37万字の文書の diff | 1.66秒 | 1.66秒 |
繰り返しのない文書の時間は、ほとんど変わりません。
確かめたこと
- v2.2.1 と v2.2.2 の lint、diff、check を同じ4,939件の入力(同じ段落を繰り返す文書を含む)で動かし、版の文字列をそろえて比べました。Python 3.14.5 と 3.9.6 のどちらでも、出力と終了コードは4,939件すべて同じでした。
- 実際のモデルの推敲など1,415組で、diff の出力と lint の JSON を、版の文字列をそろえて v2.2.1 と比べ、違いは0組でした。
- 新しい止め方の答えを、Python の標準の照らし合わせ(difflib)の答えと、無作為の入力121,635組で突き合わせ、食い違いはありませんでした。
- 試験一式は、macOS の Python 3.14.5 と 3.9.6 で2,291件ずつ通ります。
v2.1.3 からの変化
v2.1.3 のあと、v2.2.0、v2.2.1、v2.2.2 の3つの版を出しました。v2.1.3 と v2.2.2 を並べると、次のとおりです。
| v2.1.3 | v2.2.2 | |
|---|---|---|
| 推敲しても残りやすい言い方(機械やシステムが人の動作をする言い方などの直訳語、見出しの比喩、「〜と言えるでしょう」など) | lint の候補に出ない(英語を辞書的な漢語にした語を見る translated_term はあるが、これらの型は見ない) |
lint が10種類の印(info。終了コードと点数には入らない)をつける。印は直す合図ではなく、読み直す候補。推敲では、印のついた文で誰が何をするかを原文と前後の文から確かめて書き直し、書き直しに要る名前や動作、その動作をする人が、原文、依頼、資料、会話のどれにもなければ、本文を残して書き手に尋ねる。直訳語の印のついた語でも、定着した言い方や文字どおりの意味で使う語は、理由を書いて残す(v2.2.0、v2.2.1) |
| 最終稿に残した直訳語の印と flag.txt の語の印 | 知らせない | check の run と verify が「残した印の語」として語と行を知らせる(v2.2.1) |
| 文書の種類 | 12種類 | 13種類(台詞・脚本 script を足した。v2.2.0) |
| プロジェクトの語の一覧 | なし | .yomiyasu-words/ の allow.txt(直さない語)と flag.txt(見直す語)(v2.2.0) |
| 1,257字の技術メモを120回つないだ文書(約15万字)の diff | 15.60秒 | 1.70秒(v2.2.2) |
| 同じ文書の check run | 16.18秒 | 1.98秒(v2.2.2) |
| 繰り返しのない37万字の文書の diff | 1.65秒 | 1.65秒 |
| SKILL.md の長さ(推敲のたびにモデルが読む) | 41,445字 | 42,982字(v2.2.0 で 42,853字、v2.2.1 で 42,982字。既存の規則と見出しは削っていない) |
時間は、上の「数字で見る v2.2.2」の表とは別の回に、v2.1.3 と v2.2.2 を Python 3.14.5 で交互に3回ずつ動かした中央値です(同じ Mac で測りました)。測った回が違うので、v2.2.2 の時間は上の表と0.01〜0.03秒ずれます。
推敲の結果は、v2.2.0 と v2.2.1 で、それぞれ1つ前の版と比べて測りました。v2.2.2 は推敲の手順も道具の出力も v2.2.1 と同じなので、推敲は測り直していません。v2.1.3 と v2.2.2 をじかに比べた推敲の測りもありません。
- v2.1.3 → v2.2.0: 自作の類例31本と tests/corpus の163本で推敲の前後を比べ、どちらの版かを伏せて読み比べました。Claude Code(Claude Opus 5.5)で推敲すると、直すべき型を直せた件数は125件のうち44件から91件に、残すべき書き方を誤って直した件数は8件から7件になりました。全文を読んで意味が変わったと判定した件数は1件から2件で、増えた1件は、新しい印のない文で「〜のみ」の「のみ」が落ちたものです。Codex(gpt-6-astra)で類例31本を推敲すると、直せた件数は同じ125件のうち39件から88件に、誤って直した件数は16件から7件に、全文を読んで意味が変わった件数は2件から4件になりました。増えた分は、新しい印のない文の揺れと、直訳語の印のついた文を英語の言い方の意味で書き直した境目の1件です。
- v2.2.0 → v2.2.1: 直訳語の自作の類例4本と tests/corpus の1本を Claude Code で推敲し、どちらの版かを伏せて2人が読み比べました。直したか書き手に尋ねた件数は、同じ40件について、1人目の判定で34件から35件、2人目の判定で39件から40件になりました。全文を読んで意味が変わった件数は、1人目で3件から0件、2人目で2件から0件です。残すべき書き方を誤って直した件数は、2人とも0件のままです。
- v2.2.1 → v2.2.2: 推敲の結果は変わりません。変わったのは diff と check run の時間だけです。
v2.1.3 から更新すると、推敲の結果と、lint、diff、check の出力が変わります。
lint の終了コード、既存の JSON のキーと値の意味、*_FORMAT_VERSION、既存のコマンドの引数と既定値は変えていません(--words、--no-words と、--doc-type の値 script を足しました)。
lint の新しい印は info なので、lint の --strict と --fail-on の判定は変わりません。
ただし allow.txt に書いた語は、前からある warn の規則(比喩動詞、直訳の語、決まり文句)の候補からも外れるので、一覧を置いたリポジトリでは、lint の --strict と --fail-on の結果が変わることがあります。
diff は、台詞の最後の「。」だけを外したか足した組を問いと平叙の変化に数えなくなったので、この組だけの文書では、diff と check の --fail-on=meaning-risk の終了コードが1から0になります。
check の run は、最終稿に直訳語か flag.txt の語の印が残ると「残した印の語」の行と節を出し、--json に kept_marks が付きます(状態、終了コード、--fail-on は変わりません)。
v2.1.3 で残した検査の記録を v2.2.2 の verify で照らすと、検査のスクリプトが変わったので tool_changed になります。
もう一度 run を実行してください。各版の細部は、v2.2.0 と v2.2.1 のリリースノートと CHANGELOG.md にあります。
v2.2.1 から使っていただいている方へ
推敲の手順と、lint、diff、check、フックの出力は変わりません。変わるのは、JSON の tool_version と --version が示す版だけです。
既存の JSON のキー、*_FORMAT_VERSION、記録の形、コマンドの引数と既定値は変えていません。
v2.2.1 で残した検査の記録を v2.2.2 の verify で照らすと、検査のスクリプトが変わったので tool_changed になります。もう一度 run を実行してください。
変更の細部は CHANGELOG.md にあります。