Process Dashboard(GPLv3、Java/Swing)を Next.js へ移植するプロジェクト。 本書はプロジェクト固有の規約をまとめる。推測せず、ここに書かれた方針に従うこと。
要求の源泉は移植元の実装である。挙動を変える場合、必ず理由を記録する。
移植元にない制約を追加しない。既存データの移行時(第1.5期)に 読み込めないデータが生じる恐れがある。
移植元には GPLv3 以外のファイルが混在する。取り込む前にヘッダを確認する。
| ファイル | ライセンス | 対応 |
|---|---|---|
util/StringUtils.java |
LGPL 2.1 | 移植せず標準機能で代替 |
util/FastDateFormat.java |
Apache 2.0 | date-fns で代替 |
util/FileProperties.java |
第三者著作物 | 確認が要る |
util/ThreadMonitor.java |
Sun Microsystems | 確認が要る |
ファイル生成時に BOM を付けない。PowerShell を使う場合、
> は UTF-16LE、Set-Content -Encoding UTF8 は BOM 付きになるため使わない。
[System.IO.File]::WriteAllLines("path", $lines)| 項目 | 値 |
|---|---|
| Node.js | 24(.nvmrc) |
| パッケージマネージャ | pnpm 10.15.0(ワークスペース) |
| TypeScript | strict + noUncheckedIndexedAccess + exactOptionalPropertyTypes |
| テスト | Vitest |
| シェル | Windows PowerShell 5.1 |
pnpm add -D -w <パッケージ> # ルート
pnpm --filter @processloop/core add <パッケージ>pnpm typecheck # 型検査
pnpm test # Vitest
pnpm validate:mermaid # Mermaid の構文作業の完了前に typecheck と test を通す。
packages/core/ UI 非依存のドメイン層
src/preprocessor/ A-1 プリプロセッサ(実装済み)
frontend/ Next.js(未初期化)
i18n/messages/ en.json / ja.json
docs/
adr/ 決定記録
phase1/
arc-architecture.md アーキテクチャ仕様書
req/ 要求仕様(USDM)
units/ 移植仕様書
psp-data/ この開発自体の PSP 計測
reference/legacy-java/ 移植元の参照資料(Git 追跡外)
scripts/ 検証スクリプト
React や Next.js の import が packages/core に現れたら設計違反である。
実装の前に設計文書を読む。推測で書かない。
要求仕様(docs/phase1/req/)
→ アーキテクチャ仕様書(docs/phase1/arc-architecture.md)
→ 移植仕様書(docs/phase1/units/prt-*.md)
→ 実装
移植仕様書には、移植元の解析・型設計・関数構成・テストケースが書かれている。 着手前に必ず読む。
移植仕様書の第5節(実績記録)に実績行数を記入する。
この開発自体を PSP で計測する方針(ADR-0001)による。
実績は docs/psp-data/size-log.csv にも追加する。
変更する場合は理由を示すこと。経緯は ADR にある。
| 判断 | 根拠 |
|---|---|
| 実装順序はデータ収集先行 | ADR-0001。PROBE が履歴データを要するため |
| 手動での PSP 記録はしない | ADR-0002。devlog から遡及抽出する |
| 作図は Mermaid に統一 | ADR-0003。発注者が存在せず Git 差分の価値が高い |
| 計算結果を保存しない | 実測値のみ保存し、派生指標は都度計算する |
| Prisma の型を外へ出さない | ドメイン型に変換する。M3 での差し替えに備える |
| 計算式エンジンは M3 | M1・M2 は TypeScript で直接集計する |
/*
* Processloop - a Next.js port of Process Dashboard
* Copyright (C) 2026 Kazuyuki Kuribayashi
*
* Derived from Process Dashboard, Copyright (C) 2001-2003 Tuma Solutions, LLC.
* Ported from src/net/sourceforge/processdash/util/CppFilter.java at upstream
* commit bf5a4d63aff08410f79840001c816b37392e5001 (2.7.6, 2026-05-28).
*
* GNU General Public License version 3 or later. See LICENSE.
*/移植元のファイル名と上流SHA を必ず書く。 代替した部分があれば理由も添える。
日本語で書く。移植元の制約を引き継いだ箇所は、その旨を明記する。
// 引数パターンは移植元と同じく [^(,)] とする。
// つまり引数に括弧やカンマを含められない(上流の制約を引き継ぐ)。any を使わない。unknown から絞り込む。
配列アクセスは noUncheckedIndexedAccess により undefined を含むため、
?? '' や ?. で明示的に扱う。
移植元を実行して得た出力を正解データとする。
packages/core/src/<unit>/__fixtures__/ に置く。
| 種別 | 対象 |
|---|---|
| 単体 | 1つのユニット内の関数 |
| 結合 | 層をまたいだ呼び出し |
| 総合 | 利用者の操作(Playwright) |
Conventional Commits。件名と本文を分ける。
docs(req): add the i18n and licence requirements
The i18n one exists because the upstream ships 1347 translated Japanese
keys and dropping them would be a regression.
| 部分 | 上限 |
|---|---|
| 件名 | 50字程度。命令形 |
| 本文 | 2〜3文。50語を超えない |
| 1文 | 20語程度 |
英語で書く。 差分やコミットした文書に書いてあることを繰り返さない。 答えるべきは「なぜ今これを書いたのか」であって「何を書いたのか」ではない。
feat / fix / docs / refactor / test / chore
README.md 以外の md を追加・変更したら、同じコミットで README も更新する。
ルート README には3箇所ある。
- 現在の状態
- リポジトリ構成
- ドキュメント一覧
docs/phase1/req/overview.md の用語集に従う。表記を揺らさない。
| 用語 | 意味 |
|---|---|
| 正味時間 | 中断を除いた実際の作業時間 |
| 混入フェーズ / 除去フェーズ | 欠陥が作り込まれた工程 / 発見された工程 |
| 評価フェーズ / 失敗フェーズ | レビュー等 / コンパイルやテスト |
| ユニット | 移植の作業単位(A群7・B群10・C群1) |
| M1〜M6 | 実装のマイルストーン |
| 状況 | 対応 |
|---|---|
| 移植元の仕様が不明 | 推測せず、確認事項として記録して先に進む |
| 設計文書に書かれていない | 質問する。勝手に決めない |
| 移植元と違う実装にしたい | 理由を移植仕様書に記録してから行う |
| ライセンスが判断できない | 取り込まず、代替を探す |
推測で埋めるより、不明と記録する方が価値がある。 後から確認できるが、誤った推測は気づかれずに残る。