変更履歴

本とそのツールの主な変更です。新しいエントリが上にあります。日付はISO 8601(YYYY-MM-DD)です。

[Unreleased]

Changed

  • オランダ語(nl-nl): トピック9.0、9.3、9.4に残っていた英語の見出しとslugを翻訳しました(bijlagen、controlelijsten、sjablonen)。
  • ウェールズ語(cy-001、cy-gb): 用語をTermCymruに合わせました。risg(リスク、peryglの代わり、性の一致を含む)、cyfnewidiad(トレードオフ)、 dangosydd rhagfynegiとdangosydd ôl-fynegi(先行指標と遅行指標、hwyrfrydigの代わり)、cynhwysedd(キャパシティ)、dosraniad(分布)、 cydberthynas(相関)、トピック1.3のアウトプットにallbwn、cyfradd gadael staff(離職率)。一致させるため4つのトピックslugを改名しました。
  • サイト: @lilydesignsystem/svelte-picker-barを0.2.0に更新しました。ヘッダーバーに検索ピッカーが加わり、既存の/?<query>サイト検索に送信します。
  • scripts/generate-sitemap.mjsを追加しました。pnpm buildの最後に実行され、プリレンダリング済みページからsitemap.xmlを書き出します (正規のロケールURLのみ、2文字エイリアスの重複なし)。これでrobots.txtのSitemap:行が解決します。
  • AGENTS.mdは短い索引になりました。詳細はAGENTS/layout.md、style.md、locales.md、workflow.mdに移りました。
  • ドキュメントの整理: 27ロケール、ロケールごとのセクションディレクトリ名、新しいツールに合わせて、AGENTS.md、index.md、生成されるREADMEのロケール文、 spec/index.md、spec/locales.md、サイトのAGENTS.mdとREADME.mdを更新しました。CLAUDE.md(AGENTS.mdへのポインタ)を追加し、 両エージェントスキルの古いdocs/パスを直し、skills/を.claude/skills/の正規コピーにしました(テストが検査します)。
  • サイトのstatic/にllms.txtとllms.json(提供する全ロケールとトピックのAIエージェント向け索引)を追加しました。tools/gen_llms.py(just llms)が生成し、テストが検査します。
  • サイトのホームページ: 「9つの部」のタイル一覧を、全部とトピックの「目次」ネスト一覧に置き換え、「グッドハートの法則、どこでも」のセクションを削除しました。
  • 全ロケールで、本の本文の「chapter」を「topic」に変更しました(例: 「トピック2.1」、「この部のトピック」)。各言語固有の「topic」の語(tema、sujet、Thema、тема、主題など)を使い、 仕様、ツールの生成テキスト、サイトのUI文字列にも適用しました。ファイル名、URL、セクションキーは変わりません。
  • locales/の下のすべてのセクションディレクトリ名を翻訳しました。chapters/はtopics/になり(他のロケールではその訳語、例: temas/、sujets/、themen/)、 es-001のexamples/はejemplos/になりました。名前はspec/section-names.jsonにあり、ツール、テスト、サイトのコンテンツ同期はそこから読みます。サイトのURLは変わりません。

Changed

  • ウェールズ語ロケール(cy-001、cy-gb、同一に保つ)を、ウェールズ政府のTermCymru用語リストに照らして改訂しました。ウェルビーイングにllesiant、生産性にcynhyrchiant、 脆弱性にgwendid/gwendidau、ガバナンスにllywodraethiant、相関にcydberthynas、バックログにôl-groniad(以前は英語のまま)、費用便益にcost a budd、 各トピックのAI初出時にdeallusrwydd artiffisial (AI)。

Added

  • 日本語(ja-001)、韓国語(ko-001)、オランダ語(nl-001)を27番目から29番目の完全翻訳ロケールとして追加しました。63トピックすべてとその他の全セクションがあり、対応する.locale-peer-idサイドカーを持ち、内容はja-jp、ko-kr、nl-nlと同一です。サイトに接続し、/ja-001/、/ko-001/、/nl-001/(エイリアス/ja/、/ko/、/nl/)で提供されます。
  • 前付、例、貢献、プロジェクトの各セクション(14ファイルに加え、変更履歴、ホームページ、目次)をこのロケールに翻訳しました。ディレクトリ名も翻訳されています。
  • ドイツ語(de-001)を26番目の完全翻訳ロケールとして追加しました。63トピックすべてに対応する.locale-peer-idサイドカーがあり、内容はde-deと同一です。 サイトに接続し、/de-001/(エイリアス/de/)で提供されます。
  • ポルトガル語(pt-001)を25番目の完全翻訳ロケールとして追加しました。63トピックすべてに対応する.locale-peer-idサイドカーがあり、内容はpt-ptと同一です。 サイトに接続し、/pt-001/(エイリアス/pt/)で提供されます。
  • 63トピックすべてをウルドゥー語(ur-001、右から左)にゼロから手作業で完訳しました。24番目の完全翻訳ロケールで、対応する.locale-peer-idサイドカーがあります。 各トピックは英語の原典から直接翻訳され、索引(トピック9.7)はすべての内部リンクをウルドゥー語のファイル名に張り直し、セクションディレクトリはموضوعاتです。 サイトに接続し、/ur-001/(エイリアス/ur/)で提供されます。
  • 63トピックすべてをインドネシア語(id-001)にゼロから手作業で完訳しました。対応する.locale-peer-idサイドカーがあります。土台となる既存のインドネシア語ロケールはなかったため、 各トピックは英語の原典から直接翻訳され、索引(トピック9.7)はすべての内部リンクをインドネシア語のファイル名に張り直します。サイトに接続し、/id-001/(エイリアス/id/)で提供されます。
  • ロシア語(ru-001)と中国語(zh-001)を21番目と22番目の完全翻訳ロケールとして追加しました。それぞれ63トピックすべてに対応する.locale-peer-idサイドカーがあり、 内容はru-ruとzh-cnと同一です。サイトに接続し、/ru-001/と/zh-001/(エイリアス/ru/と/zh/)で提供されます。
  • フランス語(fr-001)を20番目の完全翻訳ロケールとして追加しました。63トピックすべてに対応する.locale-peer-idサイドカーがあり、内容はfr-frと同一です。 サイトに接続し、/fr-001/(エイリアス/fr/)で提供されます。
  • ベンガル語(bn-001)を19番目の完全翻訳ロケールとして追加しました。63トピックすべてに対応する.locale-peer-idサイドカーがあり、内容はbn-bdと同一です。 サイトに接続し、/bn-001/(エイリアス/bn/)で提供されます。
  • アラビア語(ar-001)を18番目の完全翻訳ロケールとして追加しました。63トピックすべてに対応する.locale-peer-idサイドカーがあり、内容はar-egと同一です。 サイトに接続し、/ar-001/(エイリアス/ar/)で提供されます。
  • ウェールズ語、グレートブリテン(cy-gb)を17番目の完全翻訳ロケールとして追加しました。63トピックすべてに対応する.locale-peer-idサイドカーがあり、 内容はcy-001と同一です(hi-idとhi-001の関係と同じ)。サイトのSERVED_LOCALE_CODESに接続し、/cy-gb/で提供されます。
  • 63トピックすべてをオランダ語、オランダ(nl-nl)にゼロから手作業で完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。 土台となる既存のオランダ語ロケールはなかったため、各トピックは英語の原典から直接翻訳されました。索引(トピック9.7)は、ar-eg、bn-bd、ko-kr、 es-es、pt-pt、ja-jp、ru-ru、fr-fr、sv-seで採った方法に従い、すべての内部トピックリンクをオランダ語のファイル名に張り直します。まだサイトには接続していません。
  • 63トピックすべてをスウェーデン語、スウェーデン(sv-se)にゼロから手作業で完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。 各トピックは英語の原典から直接翻訳されました。索引(トピック9.7)は、ar-eg、bn-bd、ko-kr、es-es、pt-pt、ja-jp、ru-ru、fr-frで採った方法に従い、 すべての内部トピックリンクをスウェーデン語のファイル名に張り直します。まだサイトには接続していません。
  • 63トピックすべてをフランス語、フランス(fr-fr)にゼロから手作業で完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。 各トピックは英語の原典から直接翻訳されました。索引(トピック9.7)は、ar-eg、bn-bd、ko-kr、es-es、pt-pt、ja-jp、ru-ruで採った方法に従い、 すべての内部トピックリンクをフランス語のファイル名に張り直します。まだサイトには接続していません。
  • 63トピックすべてをロシア語、ロシア(ru-ru)にゼロから手作業で完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。 各トピックは英語の原典から直接翻訳されました。索引(トピック9.7)は、ar-eg、bn-bd、ko-kr、es-es、pt-pt、ja-jpで採った方法に従い、 すべての内部トピックリンクをロシア語のファイル名に張り直します。まだサイトには接続していません。
  • 63トピックすべてを日本語、日本(ja-jp)にゼロから手作業で完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。 各トピックは英語の原典から直接翻訳されました。索引(トピック9.7)は、ar-eg、bn-bd、ko-kr、es-es、pt-ptで採った方法に従い、 すべての内部トピックリンクを日本語のファイル名に張り直します。まだサイトには接続していません。
  • 63トピックすべてをポルトガル語、ポルトガル(pt-pt)にゼロから手作業で完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。 各トピックは英語の原典から直接翻訳されました。索引(トピック9.7)は、ar-eg、bn-bd、ko-kr、es-esで採った方法に従い、 すべての内部トピックリンクをポルトガル語のファイル名に張り直します。まだサイトには接続していません。
  • スペイン語、スペイン(es-es)を完全翻訳ロケールとして追加しました(63トピックすべて)。既存のスペイン語(es-001)訳のコピーから始め (点検の結果、すでに文法的に中立で、語彙も大半がスペイン寄りでした)、残る少数派の用法に絞った用語の見直しを行いました。特に、本のインシデント指標の領域で 「incidente」を「incidencia」に変え、全体で性の一致を直しました。まだサイトには接続していません。
  • 63トピックすべてを韓国語、韓国(ko-kr)に完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。 索引(トピック9.7)は、ar-egとbn-bdで採った方法に従い、すべての内部トピックリンクを韓国語のファイル名に張り直します。まだサイトには接続していません。
  • ヒンディー語、インド(hi-id)を完全翻訳ロケールとして追加しました(63トピックすべて)。既存のヒンディー語(hi-001)訳を国を示すロケールコードの下にそのままコピーしたものです。 標準ヒンディー語にはインド固有の別形がなく、別に手で訳す必要がないためです。まだサイトには接続していません。
  • 63トピックすべてをベンガル語、バングラデシュ(bn-bd)に完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。まだサイトには接続していません。
  • 63トピックすべてをアラビア語、エジプト(ar-eg)に完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。まだサイトには接続していません。
  • 63トピックすべてをドイツ語、ドイツ(de-de)に完訳しました。対応する.locale-peer-idサイドカーがあり、just testが通ります。まだサイトには接続していません。
  • 63トピックすべての完訳を3つのロケールで完了しました。ウェールズ語(cy-001)、中国語(zh-cn)、ヒンディー語(hi-001)で、それぞれ対応する.locale-peer-idサイドカーがあり、just testが通ります。
  • 計画中の翻訳ロケールをさらに2つ、ウェールズ語 - グレートブリテン(cy-gb)と中国語(zh-001)を、spec/locales-for-global-sharing-with-svelte/locales.tsvと spec/locales.mdに追加しました(計画中のロケールは11から13に)。また、zh-cnのそれまで未決定だった自称表記を中文に確定しました。サイトのLOCALE_LABELSにも対応するエントリが加わりました (cy-gb: 「Cymraeg (Prydain Fawr)」、zh-001: 「中文」、zh-cn: 「中文 (中国)」)。現時点ではインフラのみで、これらのロケールにはlocales/<code>/ディレクトリも翻訳済みの内容もありません。
  • 本をlocales/の下で4つのロケールで公開しました。en-gb-oxendict(英国英語、オックスフォード綴り、手書きの原典)、en-001(国際英語)、en-gb(主流の英国英語)、en-us(米国英語)です。 en-001、en-gb、en-usは、新しいtools/localize.pyによってen-gb-oxendictから機械的に派生します。spec/locales.mdを参照してください。docs/はなくなりました。 spec/、AGENTS.md、tests/validate.py、tools/gen_nav.py、tools/stats.pyにあったその参照はすべてlocales/<locale>/を指します。
  • Claude Codeスキルを2つ追加しました。software-engineering-metrics-skill(本の指針を自分のチームに適用する読者向け)と software-engineering-metrics-maintainer-skill(トピックを追加・編集するコントリビューター向け)で、skills/の下にあり、.claude/skills/にミラーされます。
  • 公開ウェブサイトのソースを、以前は別リポジトリだったものとして、このリポジトリのsoftware-engineering-metrics.github.io/に移しました。隣のチェックアウトではなく、リポジトリのルートから直接locales/を読みます。 ルートの.github/workflows/deploy.ymlは、mainへのプッシュのたびにサイトがビルドできることを確認し、software-engineering-metrics.github.ioリポジトリにrepository_dispatchを送ります (GitHub Pagesは、その素のドメインを、まさにその名前のリポジトリからしか提供しないため、薄いデプロイ用の殻として残しています)。そのリポジトリがこのモノレポをチェックアウトし、サイトをビルドしてデプロイします。
  • 翻訳された(綴りの派生ではない)ロケール向けのインフラを、新しいspec/locales-for-global-sharing-with-svelte/サブ仕様に従って追加しました。 tools/gen_locale_peer_ids.pyは、各コンテンツファイルに、ロケール間で同一の.locale-peer-idサイドカーを付けます。将来の翻訳ロケール(独自の母語文字のslugを持つ)は、 slugで照合する代わりに、これを使って「このページの、ロケールXでのもの」を解決できます。tests/validate.pyは、すべてのサイドカーが存在し一致することを検査します。 spec/locales.mdは10の計画中の翻訳ロケール(アラビア語、ベンガル語、ウェールズ語、スペイン語、フランス語、ヒンディー語、インドネシア語、ポルトガル語、ロシア語、ウルドゥー語、中国語 - 中国)を記録します。 サイトでは、scripts/locales.mjsにLOCALE_LABELS/localeLabel()(計画中の各ロケールの表示名、ルーティング前に準備済み)とsortedLocaleEntries()(将来のロケール一覧が使うべき並び順)が加わり、 src/lib/i18n.jsは、これまで各.svelteコンポーネントが英語でハードコードしていたUIクロムの文字列(ナビ、サイドバー、ページャー、ピッカー、フッター、スキップリンク)を取り出し、 ui(locale)経由で流し、独自の翻訳を持たないロケールでは英語にフォールバックします。
  • サイトの手作りでロケール専用だったヘッダーコントロールを、Lily Design Systemの@lilydesignsystem/svelte-picker-barに置き換えました。 本物のテーマピッカー(新しいstatic/assets/themes/{light,dark}.css経由のライト/ダーク)、本物のロケールピッカー(既定のlang/dirだけの動作ではなく、このサイトのURLベースのルーティングに接続)、 テキストサイズピッカー(Lilyの7段階スケール)、共有ピッカー(メール、Mastodon、リンクのコピー)です。@lilydesignsystem/svelte-{theme,locale,text-size,share}-pickerを^0.1.2に、 @lilydesignsystem/svelte-headlessを^0.2.0にpnpm-workspace.yamlのoverrides経由で固定し、svelte-picker-bar 0.1.0自身の依存範囲にあった実際の公開済みバグを回避しました (各ピッカーのCHANGELOG.mdの「0.1.2」と、このサイトのAGENTS.mdを参照)。
  • ホームページの統計行(部/トピック/「Free Always」)とその「How to read it」セクションを削除し、「Browse the nine parts」のカードグリッドを素の箇条書きに置き換えました。

Changed

  • scripts/generate-sitemap.mjsを追加しました。pnpm buildの最後に実行され、プリレンダリング済みページからsitemap.xmlを書き出します(正規のロケールURLのみ、2文字エイリアスの重複なし)。 これでrobots.txtのSitemap:行が解決します。
  • トピック2.8、リーン・バリューストリーム指標を追加しました(古典的なリーン・バリューストリームマッピングによるリードタイム、プロセスタイム、サイクルタイム、完全かつ正確な割合、タクトタイムと、 ロールドスループットイールドの計算)。待ち行列理論の後に置きました。プルリクエストとコードレビューの指標は2.8から2.9へ、DORA指標のトピックは2.9から2.10へ移りました。 影響を受けるすべての相互参照を本全体で更新しました。
  • 第2部の名称を「Delivery and Flow Metrics」から「Flow Metrics」に改め、Mik Kerstenのフロー・フレームワークを中心に再構成しました。新しいトピックを4つ追加しました。 2.1 フロー・フレームワーク、2.2 フロー項目(フィーチャー、欠陥、リスク、負債)、2.3 フローベロシティとフロー分布、2.4 フロータイムとフロー負荷です。 4つの個別のDORA指標トピック(デプロイ頻度、リードタイム、変更失敗率、復旧時間)は、単一のリファレンストピック2.9 DORA指標フレームワークに統合し、部の最後に移しました。 フロー効率と仕掛かり作業は2.5に振り直し、待ち行列理論のトピック(旧2.9)は2.7 待ち行列理論に改名しました。サイクルタイム(2.6)とプルリクエスト・コードレビュー指標(2.8)は番号を保ちます。 本全体、用語集、数式リファレンス、成熟度の自己評価、前付けのすべての相互参照を一致するよう更新しました。

Added

  • 最初のリリース: 8つの部に45の実質トピック、前付けと7トピックの付録(第9部)を加え、DORAとSPACEフレームワーク、コードと品質の指標、製品とビジネスの指標、 信頼性とセキュリティの指標、生成AIがエンジニアリング指標に与える影響を扱います。
  • 姉妹プロジェクトsoftware-engineering-guideからミラーしたリポジトリのインフラ: 仕様駆動のspec/(index、structure、conventions、oxford spelling、roadmap)、 tests/validate.pyの検証スイート、tools/gen_nav.pyのナビゲーションジェネレーター、justfile、docs/contributing/の下のコントリビューター向けガイド付きAGENTS.md、 CONTRIBUTING.md、そしてこの変更履歴。
  • spec/structure.md、テストがファイルを検査する際の基準となる正式なトピックマニフェスト。
  • docs/examples/の2つの実例: 記入済みの指標憲章と、ダッシュボード仕様。

経緯

本は仕様から外側へ向かって組み立てられました。まず9部構成がspec/structure.mdに宣言され、次に各トピックがdocs/contributing/chapter-template.mdの共有テンプレートに沿って書かれ、 その間ずっとtests/validate.pyが構造とハウススタイルを強制しました。

このファイルの規約

  • 変更はAdded、Changed、Fixed、Removed、Deprecatedの下にまとめます。
  • エントリは短く具体的に。可能なら1エントリ1行。
  • ここでもエムダッシュは使わないでください。テストはこのファイルも検査します。