コンテンツにスキップ

配布物と開発用のフォルダ構成

扱うこと: 利用者が使うもの・ドキュメント配布物・開発用(配布しない)フォルダの一覧。扱わないこと: scripts/ の中の文脈・層による分け方(ソースの分け方)、データの置き場所(データの置き場所)。先に読むページ: 設計の概要。

tebunko が読み書きするファイルとフォルダの一覧(置き場ごと・配布形ごと)は、どの処理がどのファイルを読み書きするか にある。

スクリプトの場所は scripts/shared/core/paths.ps1 の $rootDir(= リポジトリ直下。このファイルから 3 つ上)を基準に決まる。setting.config は、ふつうは $rootDir の直下に置く(ツールのフォルダに書き込めないときは既定のワークスペースの直下)。インデックス・取り込み一覧・ログ(ワークスペース)は、既定で %USERPROFILE%\Documents\tebunko_ws に置き、利用者が画面で置き場所を変えられる(データの置き場所)。カレントディレクトリには依存しない。 ファイル操作は -LiteralPath または .NET の System.IO を使い、[ ] を含むファイル名・フォルダ名を扱える。

flowchart LR
    root(["リポジトリ直下"])
    root --> bat["tebunko.bat<br>installer/"]
    root --> cfg["setting.config<br>(自動生成)"]
    root --> scripts["scripts/<br>ソース本体"]
    root --> docs["docs/・README.md・LICENSE<br>ドキュメント・配布物"]
    root --> dev["tests/・tools/・.github/<br>開発用(配布しない)"]
    root --> work["work/<br>自動生成(ワークスペースの既定)"]

利用者が使うもの

パス 種別 説明
tebunko.bat 起動用バッチ 画面を開く(インデックス作成・検索)。利用者が起動するのはこれだけ。conhost.exe 経由で PowerShell(PATH からではなく %SystemRoot% からの絶対パス)を -ExecutionPolicy RemoteSigned -WindowStyle Hidden で 1 回起動し、その中で scripts の中のファイルから Mark-of-the-Web を外して(Unblock-File。安全性の要約 の Mark-of-the-Web の解除)から gui.ps1 を開く。既定のターミナルが Windows Terminal だと -WindowStyle Hidden が効かず、PowerShell の窓が残るため conhost.exe を通す。画面が開く前に失敗したときは、記録を残して Notepad で理由を示す(起動に失敗したときの知らせ)
setting.config 設定 画面が保存する設定(JSON。無ければ既定値で動き、画面で設定を保存したときに作成する。git 管理外。設定ファイル(setting.config))。ツールのフォルダに書き込めないときは既定のワークスペースの直下に置く(データの置き場所)。起動に失敗したときの記録 startup_error.txt も、ツールのフォルダの直下にだけ書く(git 管理外)
work/ 自動生成 インデックス・状態ファイル・ログ(どの処理がどのファイルを読み書きするか)。git 管理外。削除すると全件取り込み直しになる。置き場所は画面で変えられる(データの置き場所)

ドキュメント・配布物

パス 種別 説明
README.md ドキュメント 使い方の入口。配布 zip に同梱する(相対リンクと画像は、その版の GitHub の URL に書き換える)
LICENSE ドキュメント ライセンス(MIT)。配布 zip に同梱する
.github/SECURITY.md・.github/SECURITY.ja.md ドキュメント 安全性の説明の入口と、脆弱性の連絡先・対応方針(英語版が正、.ja.md が日本語版)。配布 zip には入れず、リリースの説明からリンクする
sbom.cdx.json 配布用 部品表(CycloneDX 1.6)の雛形。本体の説明・ライセンス・前提ソフトウェア・注記だけを持つ。ファイルごとの一覧とハッシュは、配布物を作るときに tools/new_sbom.ps1 が足す。第三者のコードを含まず、同梱する第三者の部品はアイコンの形(Lucide)の 1 件だけであること(この 1 件は tools/new_sbom.ps1 が足す)を示す(安全性の要約 の 供給網(サプライチェーン)とライセンス)。配布 zip と並べてリリースに載せる
installer/tebunko.iss 配布用 インストーラー(tebunko-setup-<バージョン>.exe)を作る Inno Setup 7 のスクリプト。管理者権限なしで %LOCALAPPDATA%\Programs\tebunko に入れ、スタートメニューとアンインストールに登録する(安全性の要約 の インストーラー版)。BOM 付き UTF-8・CRLF
installer/tebunko.cs 配布用 インストーラー版の起動口 tebunko.exe のソース(C# 5)。tebunko.bat と同じく gui.ps1 を -ExecutionPolicy RemoteSigned で起動する。窓を作らずに起動し、起動できなかったときは PowerShell のエラーをメッセージで出す。zip 版には入れない
docs/ ドキュメント 利用者向けの使い方・安全性の説明・設計書(MkDocs のサイトの元)。docs/images/ に図・画面の画像・ロゴ(logo.svg)を置く。配布 zip には入れない。リリースに載せる 1 本の .ps1 の設計は 単一 PowerShell のビルド
.github/CONTRIBUTING.md・.github/SUPPORT.md・.github/CODE_OF_CONDUCT.md(と、それぞれの .ja.md) ドキュメント 開発に参加する手順・使い方の質問の窓口・行動規範。英語版が正で、.ja.md が日本語版。GitHub は .github/ に置いた英語版の名前のファイルを認識する

開発用(配布しない)

パス 種別 説明
tests/ テスト Pester テスト(scripts/ と同じ構成。テスト)
tools/check_commit.ps1 開発用 公開してはいけない内容(利用者名を含むパス・メールアドレス・Office ファイルの作成者名など)・.ps1 と .xaml の文字コード・長すぎるファイル名を検査する。pre-commit フックと CI が使う(コミット前に動く検査)
tools/check_commit_message.ps1 開発用 コミットメッセージの 1 行目・PR と Issue のタイトルが Conventional Commits の形かを確かめる。commit-msg フックと CI(title.yml)が使う
tools/check_signoff.ps1 開発用 コミットに作者の Signed-off-by があるかを確かめる。commit-msg フックと CI(test.yml)が使う
tools/check_markdown_links.ps1 開発用 git で管理している .md の相対リンクの先(ファイル・見出し)があるかを確かめる。tests/meta/links.Tests.ps1 が使う(テストの実行)
tools/hooks/pre-commit・tools/hooks/commit-msg・tools/install_hooks.ps1 開発用 コミット時の検査。clone 後に install_hooks.ps1 を 1 回実行して有効にする(コミット前に動く検査)
tools/new_release_files.ps1 配布用 配布物のカタログ(tebunko.cat)とハッシュ一覧(SHA256SUMS.txt)を作る(既定の出力先は work/release/)。ハッシュ一覧は zip に入れたバイト列から計算し、見出しの時刻はコミットの時刻にする。受け取った側が改ざんの有無を確認できる(安全性の要約 の 配布物の完全性(カタログ・ハッシュ一覧・来歴の署名))
tools/new_sbom.ps1 配布用 配布物の部品表(CycloneDX 1.6)を作る。雛形の sbom.cdx.json に、版・serialNumber・timestamp・zip に入る全ファイルのパスと SHA-256 を足す
tools/new_release_package.ps1 配布用 配布する zip(tebunko-<バージョン>.zip。本体・README・LICENSE・VERSION.txt)と、zip と並べてリリースに載せるカタログ・ハッシュ一覧・SBOM を work/release/ に作る。同じコミット・同じ版の名前なら、zip の中身・ハッシュ一覧・部品表が同じになる(ファイルの時刻はコミットの時刻、一覧は git ls-files、改行は CRLF)。v で始まるタグを push すると .github/workflows/release.yml が実行し、GitHub Release に載せる(CI)
tools/check_release_package.ps1 開発用 公開する前に、配布 zip の中身を検査する。zip のファイルが git ls-files scripts と固定のファイルに過不足なく一致するか・読み込み口から dot-source でたどれる先が存在するか・.ps1 の構文と .xaml の XML・カタログ(Test-FileCatalog)・SHA256SUMS.txt と部品表のハッシュ・VERSION.txt のタグ名と SHA を確かめ、通らなかった項目をすべて列挙して止める。release.yml が、インストーラーを作った後・来歴に署名する前に実行する(安全性の要約 の 配布物の完全性(カタログ・ハッシュ一覧・来歴の署名))
tools/check_release_tag.ps1 開発用 リリースのタグの検査。タグが v<メジャー>.<マイナー>.<パッチ> の形で、指すコミットが origin/main の履歴にあるかを確かめる。release.yml の最初の guard ジョブが実行する
tools/new_installer.ps1 配布用 インストーラー(tebunko-setup-<バージョン>.exe)を work/release/ に作る。起動口 tebunko.exe を Windows 標準の csc.exe(.NET Framework)でビルドし、scripts/・LICENSE・VERSION.txt と並べて Inno Setup 7 の ISCC.exe に渡す。release.yml が実行する。手元で作るときは Inno Setup 7 を入れておく(-Iscc で場所を指定できる)
tools/install_inno_setup.ps1 配布用 Inno Setup 7 を、版を固定して公式のリリースから取り、SHA256 を確かめてから、持ち運び版(レジストリに書かない)でランナーの一時フォルダに入れる。release.yml の shell: powershell の run は ASCII だけで書く決まりのため、日本語のメッセージが要るこの手順だけを分けている
tools/new_version_text.ps1 配布用 配布物に入れる VERSION.txt の中身(タグ名とコミットの SHA の2行。BOM 付き UTF-8・CRLF)を作る。new_release_package.ps1・new_installer.ps1 が共通で呼ぶ。VERSION.txt は zip のエントリー・インストーラーのステージにだけ作り、リポジトリの作業ツリーには書かない(開発中に git のチェックアウトから起動すると「開発版」と出る)
tools/new_icon.ps1 開発用 画面のアイコンを元データの docs/images/logo.svg から作る。1 つ目は画面が読むベクターの絵(scripts/tebunko/xaml/app_icon.xaml。SVG の path をそのまま写す。変換と受け付ける SVG の形は tools/icon_xaml.ps1)。2 つ目は tebunko.ico(インストーラー・ショートカット用)で、Windows に入っている Microsoft Edge(ヘッドレス)で SVG を描き、.NET の System.Drawing で 16〜256 px の 8 サイズに縮小して、PNG 形式の .ico にまとめる。第三者のツールは使わない。図柄を変えたら実行し、SVG・app_icon.xaml・.ico を同じコミットに入れる
tools/make_social_preview.ps1 開発用 GitHub の social preview 用の画像(docs/images/social_preview.png)を作る。登録はリポジトリの設定から手で行う
tools/mkdocs/ 開発用 設計書の Web サイトを作る設定(mkdocs.yml)・フック(hooks.py)・使うパッケージ(requirements.txt)(CI)
tools/pr_checks_comment.ps1 開発用 動いたワークフロー自身の結果(成功・失敗など)と実行へのリンクを、そのワークフローの PR コメント(ワークフローごとに 1 件)に書く・書き換える。.github/actions/pr-comment(複合アクション)から、test・title・docs・codeql・gui・perf-check の各ワークフローの pr-comment ジョブが呼ぶ(CI)
.github/actions/pr-comment/ 開発用 上の tools/pr_checks_comment.ps1 を呼ぶ共有の複合アクション。呼び出し側のジョブ(pr-comment)だけに pull-requests: write を持たせる(CI)
.github/workflows/ 開発用 CI(test.yml・title.yml・docs.yml・codeql.yml・scorecard.yml)、画面のスモークテスト(gui.yml)、性能の計測(perf.yml・gram.yml)・速さの回帰テスト(perf-check.yml)と配布物の公開(release.yml)(CI)
.github/codecov.yml 開発用 Codecov の設定。ASCII の文字だけで書く(CI)
.github/dependabot.yml・.github/release.yml 開発用 依存(GitHub Actions・MkDocs のパッケージ)の更新 PR の設定と、リリースノートを PR のラベルで分ける設定
.github/ISSUE_TEMPLATE/・.github/pull_request_template.md・.github/title_comment.md 開発用 Issue・PR のテンプレートと、形の違う Issue のタイトルに付けるコメント
.gitattributes 開発用 .ps1・.xaml・.bat・.iss・.cs を CRLF、tools/hooks/* を LF に固定する
AGENTS.md・.claude/CLAUDE.md 開発用 コーディングエージェント向けの決まり。CLAUDE.md は AGENTS.md を読み込む