Communityコーディング&開発github.com

usuyukiso/genealogy-biography

人物の伝記を作成します。通常はアーカイブ記録(出生、結婚、死亡、国勢調査、告解リスト、代父母としての洗礼、移動、身分変更など)から、年表テーブル(.ods, .xlsx, .csv;chronology-tableスキルで読み取り)として与えられますが、メモ、リンク、文書からも作成可能です。入力に厳密に基づき、記録を逐語引用しながら(転写およびYandex Archiveスキャンテキストから)物語形式の伝記を生成し、MkDocsサイト「family_tree_github/docs」内の人物ページ(ID P1000…)として出力します。各情報源は型指定ID(A – アーカイブ記録、B – 書籍、F – 写真、W – Webページ…)で個別ページ化され、共有の人物インデックスにもエントリが作成されます。ユーザーが人物の伝記の作成、生成、更新を依頼した際に使用します。

genealogy-biography とは?

このスキルは、家系図や系譜研究において、与えられた一次資料(アーカイブ記録、国勢調査、告解リストなど)から厳密に事実を抽出し、読みやすい物語形式の伝記を自動生成するための強力なツールです。主にMkDocsベースのサイト「family_tree_github」上で動作し、人物ページ、各情報源の個別ページ、そして人物・情報源のインデックスを自動的に作成・更新します。ユーザーが提供する年表スプレッドシート(.ods/.xlsx/.csv)をchronology-tableスキルで解析するか、メモやリンクなどの自由形式の情報から作業を開始します。生成される伝記は、すべての事実主張を一次資料に根拠づけ、記録テキストを逐語引用します。また、Yandex ArchiveからOCRテキストを取得し、記録の詳細(日付、年齢、代父母など)を補完する機能も備えています。複数の人物や情報源をまたいだ一貫性を保つため、重複のチェックや既存ページの再利用を徹底し、家系研究に特化した高精度な出力を実現します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/usuyukiso/genealogy-skills/tree/main/genealogy-biography

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

伝記(Biography)

入力は一人の人物の生涯に関する情報です。多くの場合、年表スプレッドシート(メトリックブック、告解リスト、国勢調査、裁判所/行政ファイルから抽出された、一行に一イベントが記録されたもの)ですが、メモ、リンク、文書であることもあります。出力は、読みやすい伝記と情報源ページです。正確さが文体よりも重要です。系譜学者はすべての主張を文書で検証します。

出力の保存先。 すべての成果物はサイトプロジェクト family_tree_github/(MkDocs Material;README.mdを参照)に書き込まれます。

内容保存先
人物ページfamily_tree_github/docs/people/P1000-<slug>.md
アーカイブ記録docs/sources/archives/A1000-<slug>.md
書籍 / 出版物docs/sources/books/B1000-<slug>.md
写真docs/sources/photos/F1000-<slug>.md(画像は docs/assets/images/people/ に)
Webページdocs/sources/websites/W1000-<slug>.md
場所(集落)docs/places/PLC1000-<slug>.md
場所のインデックスdocs/places/index.md
人物のインデックスdocs/people/index.md
情報源のインデックスdocs/sources/index.md
メニューfamily_tree_github/mkdocs.yml の nav:

古いルートファイル(sources.md(番号3000~3011)、people.md、 *_biography.md)はレガシーです。これらには書き込まないでください。サイト上のどこにも古い番号に言及しないでください。 — legacy_id も、「Прежний №」列や行も禁止です。

ID。 接頭辞にファイル名の先頭から取った1000から始まる4桁の数字を組み合わせます。IDは一度割り当てられると変更されることはなく、ページが削除された後でも再利用されません。次の空きIDを取得し、重複をチェックするには:

python3 .claude/skills/genealogy-biography/scripts/next_id.py next A A P   # A1010, A1011, P1005
python3 .claude/skills/genealogy-biography/scripts/next_id.py find "23И, оп. 2, д. 24"   # すでに存在するか?
python3 .claude/skills/genealogy-biography/scripts/next_id.py list

リンク。 IDのみを記述します。サイトのフック(hooks/id_links.py)がリンクに変換します: [A1006] → ソースページへの「A1006」というラベルのリンク。[P1000] → 人物名でラベル付けされたリンク。[жена](P1000) → 自分のテキストでのリンク。内部ページへのファイルパスやURLは決して記述しないでください。未知のIDはビルドを壊します。

1. 入力を読む

入力が年表スプレッドシート(.ods、.xlsx、.csv)の場合、まず chronology-table スキルをロードし、それに従ってください。スキルはテーブルをダンプし、列をマッピングし、行ごとに調整された事実リスト(情報源付き)を提供します。すべての伝記がテーブルから始まるわけではありません。ユーザーが他の素材(メモ、リンク、文書)を与えた場合は、それらを基に作業し、テーブルの手順はスキップします。

その人物のページがすでに存在するかどうかを確認します(next_id.py find "<苗字>"、および docs/people/index.md の上部のテーブル)。!!! warning "Страница-заготовка" とマークされたページはプレースホルダーです。その伝記をそのページに書き込み、IDとファイル名はそのまま維持します。

1a. Yandex Archiveのスキャンを読む

yandex.ru/archive/catalog/... リンクを持つすべての記録について、スキャンの認識テキストを取得します:

python3 .claude/skills/genealogy-biography/scripts/yandex_archive.py page "<url>"

これにより、文書タイトルとカタログパス(アーカイブ / фонд / опись / дело)、そしてページの認識された行が出力されます。これらを使用して:

  • 人物に関する記録を見つけ、そのテキストを引用します(下記「記録を引用する」を参照)。
  • テーブルに欠けている詳細を補います:記録番号、洗礼日 vs 出生日、子供の名前と両親、代父母、結婚時の保証人、司祭、死亡原因、年齢。
  • カタログパスから欠落しているアーカイブ参照(fond/opis/delo)を補完します。

テキストは機械認識された手書き文字です。テーブルの列は別々の行として出力されるため、日付と年齢を列の順序で対応させ、数字と珍しい名前は慎重に扱います。テーブルにリンクがない記録(例:死亡記録)を探すには、yandex_archive.py search "<名前の形式, 場所>" を試してください。そのスニペットは構造化マークアップから取得されるため、ページ行よりも読みやすい場合があります(例:年齢)。試したすべての検索を記録し、否定的な結果も報告できるようにします。

すべてのアーカイブレビューを記録します。 дело またはスキャンセットをレビューする前に、family_tree_github/internal/checks/reviewed_documents.md(サイト上ではなく内部)をチェックします。すでに検索済みの可能性があります。レビュー後(この人物のために読んだメトリックブック、Yandex Archive検索、欠落記録のために閲覧した дело など)、エントリを追加または拡張します。否定的な結果も含めて:何を(アーカイブ、fond、opis、delo またはスキャンパス)、日付、方法(全葉 / サンプル / 検索のみ)、何を検索したか(名前、場所)、結果(見つかった → [A…] またはフレーム。見つからなかった場合 → 「искали …, не нашли」)、未読のものは何か。大規模なスキャンコレクションは archive-scan-search スキルで検索されます。全体のメトリックブックは metric-book-index スキルでインデックス化されます。

2. 事実を抽出し調整する

執筆前に、各イベントについて、それを裏付ける情報源(入力がテーブルの場合は chronology-table スキルから)を持つ事実リストを作成し、年齢、名前の異形、身分変更、家族関係、ギャップを調整します。身分の変遷は平易に説明します。references/terms.md を参照してください。

3. 伝記を書く

入力テーブルは情報源ではありません。決して言及しないでください。 年表テーブル(およびユーザーが与えるその他の作業メモ)はユーザーのプライベートな研究ファイルです。サイトの読者はその存在を知らず、系譜学やアーカイブ検索についても何も知りません。したがって、すべての出力テキストにおいて:

  • 「в таблице」、「по таблице」、「из таблицы」、「в исходных данных」、「столбец」、「строка N」などとは決して書かないでください。実際の情報源のみを引用します:アーカイブ記録、スキャン、出版物、ウェブサイト。
  • 何もわからない場合は、一般的な表現で述べます:「в имеющихся источниках об этом не сказано」、「дословный текст записи недоступен」、「архивный шифр неизвестен」、「скан найти не удалось」。
  • コメント列からの転写は、単に「расшифровка」(記録のテキスト)と呼ばれ、「расшифровка из таблицы」ではありません。
  • テーブル自体の誤りや欠落(間違った県、出生日が洗礼日の代わりに与えられている、場所のない行、名前の綴り間違い)は伝記では議論しません。テキストでは正しい値を使用し、テーブルの問題をチャットでユーザーに報告します(ステップ6)。実際の情報源に現れる場合にのみ、異なる綴りを注記で言及します。
  • すべてを一般読者向けに説明します:記録タイプとは何か、略語や身分が何を意味するか。

すべての事実主張を入力データに基づかせます。 日付、場所、親族、職業、原因、動機を決して創作しないでください。データが沈黙している場合は、沈黙するか、記録がそれを示していないと明確に述べてください。「おそらく(probably)」、「可能性が高い(likely)」などの表現は、データによって直接支持される合理的な推論(例:新しい場所での記録から推測される移動)についてのみ許容され、推論として明示されなければなりません。作業仮説(例:2つの記録が同一人物である)は、「Исследовательские заметки」の下に、「Предположение (не подтверждено документами)」で始めて配置します。

親族関係はリンクごとに証明します。 各親子関係および配偶者関係は、独自の情報源を持つ別個の主張です。祖父母やそれ以上の遠い祖先は、証明されたリンクの連鎖によってのみ証明されます。リンクについて書くときは:

  • それが何に基づくかを述べます。一つの記録で名付けられたリンクは、そのように書きます(「по записи о рождении 1919 г.」)。複数の情報源からの確定した事実としてではありません。複数の文書によって確認されたとみなされるのは、それらが独立している場合のみです。同じ記録のコピー、抄録、証明書、または再話は同じ情報源です。
  • 父称は父親の名前を示すだけです(「Яковлевич」=父親はЯковという名前)。どのЯковであるかは示しません。同じ姓、村、または世帯も親族関係の証拠にはなりません。
  • 同名異人(同じ名前と父称、同じ村)は、記録がそれらを区別するまで別々の人物として扱います。系統樹外の同名異人は、独自の比較ページを取得します。
  • 記録が矛盾する場合(例:母親の父称)、両方のバージョンを、誰がいつ情報を提供したかと併記します。イベント時に作成された記録、または本人からの記録は、通常、後から他人から得た記録よりも重みがあります。research_open_questions.md に記録します。
  • 家族の話や編纂者のメモは手がかりであり、文書ではありません。「по заметкам составителя」として帰属させ、決して記録として提示しないでください。

簡潔な 歴史的背景 は、読者が記録を理解するのに役立つ場合に歓迎します(サハリン流刑植民地とは何か、チェーホフの1890年国勢調査とは何か、代父母であることの意味、「ссыльнопоселенец」の地位が何を許したか)。短く、一般的に、明らかにその時代について述べるようにしてください。決してこの人物に関する事実として提示しないでください。

訪問した場所は常に説明します。 人物が特定の場所(寺院、神社、教会、修道院、博物館、城、農場、工場、公園、学校、記念碑など)を訪れた場合は、その簡単な説明(2〜5文)を追加します:それが何であるか、正確な場所、いつ誰によって設立されたか、何で知られているか、訪問者がそこで何を見るか。事実を調べて(公式サイト、Wikipedia、百科事典)、正確に保ちます。その人物自身のその場所との関わり(誰と、そこで何をしたか)はデータからのみ来ます。都市、町、地域自体には説明は必要ありません(1行の短いコンテキストはオプション)。データ内の場所名が綴りを間違っているように見えるか、見つからない場合は、テキストで最も可能性の高い実際の名前を使用し、注記セクションの下に元の綴りを記します。

記録を引用します。 記録のテキストが利用可能な場合(テーブルのコメント列の転写、またはスキャンからの認識テキスト)、それを逐語で引用します。形式:Согласно записи в метрической книге: «Корсаковской тюрьмы ссыльно-каторжная Евдокія Андреева Лапина…» [A1000]. これはすべてのイベントに適用されます:出生、死亡(原因と年齢をそのまま含む)、結婚、代父母、国勢調査、告解リスト。

  • 元の綴り(改革前の正書法や名前の異形を含む)を保持します。
  • 伝記では、明らかなOCRエラーを黙って修正します。情報源ページでは、それらを角括弧で示します:Корсаковскаго [в распознании: «Корожковскаго»]。
  • 解釈と説明は歓迎され、テキストに残ります。引用の 代わりに ではなく、横に 配置します。例:«…(старости)» — то есть умерла от старости。
  • テキストが存在しない場合(テーブルに転写がなく、スキャンがないか読めない場合)、テキストで明確に述べます:「Дословный текст записи недоступен, скан найти не удалось。」引用されたかのように記録を言い換えることは決してしないでください。
  • 引用の出典は 情報源ページ に記載され、伝記には記載されません(ステップ4の「テキストの出典ラベル」を参照)。これらのラベルと記号 [?]、[…]、[неразборчиво]、[в распознании: «…»] の一般的な説明は、docs/sources/index.md の「Откуда взяты цитаты」セクションに一度だけ配置します。人物ページで繰り返さないでください。

インラインで引用します。 各主張の後に、情報源IDを角括弧で追加します: ...родились близнецы Иван и Мария [A1000]. 連続する場合:[B1000][A1005]。使用されるすべてのIDにはページが存在する必要があり、この人物のすべての情報源ページは少なくとも一度は引用されなければなりません。

人物にリンクします。 独自のページを持つ人物が言及された場合、リンクします: [Егор Почеревин](P1001) を本文テキストで、[P1001] をリストで(フルネームとしてレンダリングされます)。ページのない人物はプレーンテキストのままにします。言及された全員にページを作成しないでください。

言語。 ユーザーが要求した言語で書きます。指定がない場合は、テーブルの内容の言語を使用します(ロシア語のテーブル → ロシア語)。名前と引用された記録テキストは元の形式のままにします。別の言語で書く場合は、名前を音訳し、最初の言及時に括弧内に原語を記します。

構成(見出しは人物の生涯に合わせて調整し、データのないセクションはスキップします):

---
person_id: P1005
name: "Имя Отчество Фамилия"
name_variants:
  - "<как записан в документах>"
birth_date: "1885-07-15"        # ISO; "1851/1857" 範囲の場合; 不明な場合は ""
birth_date_status: confirmed    # confirmed | probable | unknown
death_date: ""
death_date_status: unknown
parents: [P1000]                # ページを持つ人物のIDのみ
spouses: []
children: []
sources: [A1000, A1005]
---

# <フルネーム> (<生年 または 範囲> – <没年>)

<1段落の要約:誰か、どこか、生涯の流れを3〜4文で。>

情報源コード(「Коды в квадратных скобках — ...」、情報源タイプ、OCRの注意事項)を説明する段落は追加しないでください。その一般的な説明は `docs/research-method.md` と `docs/sources/index.md` に一度だけ存在し、人物ページには記述しません。

## <人生の期間1、例:生い立ち(Origins)>
## <...>
## <最晩年と死(Last years and death)>

## 家族(Семья)
<配偶者と子供を日付付きで、短いリストとして。ページを持つ人にはリンクします。>

## 年表(Хронология)
| 日付 | 出来事 | 場所 | 情報源 |
<コンパクトなテーブル。入力の行ごとに1行。>

## 文書に関する注記(Замечания о документах)
<年齢、名前、日付の不一致。ギャップ。さらなる研究に値する未解決の疑問。利用可能なテキストがない記録。スキャンとの照合が必要なOCR読み取り。>

## 研究ノート(Исследовательские заметки)
<仮説と研究の手がかり。それぞれ「Предположение」とマーク。該当なしの場合はスキップ。>

## 情報源(Источники)
- [A1000] — <短い説明>
- ...

## 関連人物(Связанные персоны)
- <役割> — [P1000]

4. 情報源ページ(情報源が存在する場合、必須)

個別の文書ごとに1ページ、すべての伝記で共有されます。複数の行が同じ記録を引用する場合は、同じIDを引用します。ページを作成する前に、それを検索します(next_id.py find でアーカイブ参照、スキャンURL、元のコードを使用)。存在する場合は、そのIDを再利用し、その人物に関する新しい詳細や引用をそのページに追加し、その人物を related_people および「Связанные персоны」に追加します。

接頭辞の選択 — 素材の保存場所ではなく、役割に基づきます:

  • A — アーカイブ記録:メトリックブックエントリ、告解リスト、国勢調査カード、ファイル。ページはアーカイブ参照(アーカイブ、фонд、опись、 дело、 лист)とスキャンリンクを保持します。参照が不明でも、それが明らかにアーカイブ記録である場合は A を使用します。
  • D — 具体的なファイルまたは文書(ローカルスキャン/PDF、編纂者のメモ、証明書)。現在 D 情報源は公開されません:作成は…

(翻訳はここで途切れています)

関連スキル