English follows the Japanese section.
このアプリはプロジェクトデータを一切外部に送信しません。これは「約束」ではなく、 以下の手段で第三者が自分で検証できるように設計しています。
- テレメトリ・アナリティクス・広告・トラッキングなし
- Cookie・アカウント・ログインなし
- データの保存先はユーザーが自分でダウンロードするファイル(ZIP / HTML)のみ
| 通信 | 内容 |
|---|---|
| 同一オリジンへのアセット取得 | アプリ本体(初回ロード時のみ。単一HTML版はこれすらなし) |
| 同一オリジンへのサンプル取得 | ウェルカム画面のサンプルプロジェクト(ZIP)。file:// で開いた場合は発生しない |
外部ドメインへの通信はゼロです。祝日データもビルド時にバンドルされており、 実行時に取得しません。
-
Content-Security-Policy を見る — 配信される HTML の先頭に CSP メタタグが 静的に埋め込まれており、外部ドメインが一切含まれていません (
connect-src 'self'、form-action 'none'など)。つまり外部へのデータ送信は 作者の善意ではなくブラウザ自身が遮断します。ポリシーの定義はvite.config.tsにあります。 -
DevTools の Network タブを開いたまま操作する — ロード完了後、何を操作しても 外部への通信は発生しません。
-
オフラインで使う — 機内モードでも全機能が動きます。単一HTML版は
file://(ダブルクリック)で開けます。 -
配信物とソースの一致を確認する — デプロイは GitHub Actions (
deploy.yml)で行われ、ビルドログは公開されます。 リリース成果物には build provenance(来歴証明)が付与され、次のコマンドで 「このリポジトリのこのコミットから GitHub 上でビルドされた」ことを検証できます:gh attestation verify gantt-local-vX.Y.Z.html --repo kloir-z/ganttapp-local
SHA256SUMS.txtでハッシュ照合もできます。 -
それでも信用できない場合はソースから自分でビルドする:
git clone https://github.com/kloir-z/ganttapp-local.git cd ganttapp-local npm ci npm run build:singlefile # dist-single/index.html が配布物と同等のもの
- 依存パッケージは
package-lock.jsonで固定し、Dependabot で更新・脆弱性を監視 - CI(GitHub Actions)で lint / test / build を毎 push 検証
- CSP に
connect-src 'self'があるため、仮に依存パッケージが汚染されても 実行時に外部へデータを送ることはブラウザが遮断します
セキュリティ上の問題を見つけた場合は、GitHub の Security Advisories から非公開で報告してください。軽微なものは Issue でも構いません。
This app never sends your project data anywhere. This is not a promise to take on faith — it is designed to be independently verifiable:
- No telemetry, analytics, ads, or tracking
- No cookies, no accounts, no login
- Data is persisted only as files you download yourself (ZIP / HTML)
| Request | Purpose |
|---|---|
| Same-origin asset fetch | The app itself (first load only; the single-file build has none at all) |
| Same-origin sample fetch | Sample projects (ZIP) on the welcome screen; never happens when opened via file:// |
There are zero requests to external domains. Holiday data is bundled at build time, not fetched at runtime.
-
Read the Content-Security-Policy — a static CSP meta tag at the top of the served HTML contains no external domains (
connect-src 'self',form-action 'none', …), so exfiltration is blocked by the browser itself, not by the author's good intentions. The policy is defined invite.config.ts. -
Keep the DevTools Network tab open — after load, no external request is made no matter what you do.
-
Use it offline — everything works in airplane mode; the single-file build opens via
file://(double-click). -
Verify that the deployed code matches the source — deployment runs on GitHub Actions (
deploy.yml) with public build logs. Release artifacts carry build provenance attestations:gh attestation verify gantt-local-vX.Y.Z.html --repo kloir-z/ganttapp-local
SHA256SUMS.txtis included for hash verification. -
Still don't trust it? Build from source:
git clone https://github.com/kloir-z/ganttapp-local.git cd ganttapp-local npm ci npm run build:singlefile # dist-single/index.html is equivalent to the distributed file
- Dependencies are pinned via
package-lock.jsonand monitored by Dependabot - CI (GitHub Actions) runs lint / test / build on every push
- Because the CSP includes
connect-src 'self', even a compromised dependency cannot exfiltrate data at runtime — the browser blocks it
Please report security issues privately via GitHub Security Advisories. Minor issues are fine as regular Issues.