開発ガイド
独立した 2 つのツールチェーン
デスクトップアプリは Go 1.27.2+ と go.mod に固定された MyGo 0.4.8 ツールを使用します。ドキュメントは Node.js 22+、pnpm 12.11.2、VitePress 2.0 alpha を使用します。アプリのビルドに Node は不要です。
go mod download
make dev
make run
make build検査
make fmt
make check
make race
go tool mygo vet
make snapshots
go run ./tools/versionスナップショットは internal/app のテストを実行し、実際の MyGo ビューをライト・ダークモードで Git 対象外の snapshots/ に描画します。UI テストは全 5 言語を最小ウィンドウサイズでも描画します。テストは OSS に接続しません。
任意のネイティブキャプチャは実ウィンドウを起動し、スクリーンショットを書き出して終了します。
OSS_BROWSER_CAPTURE=/tmp/oss-browser.png go run . --config /tmp/oss-browser-settings.jsonドキュメント
pnpm install --frozen-lockfile
cd docs
pnpm dev
pnpm typecheck
pnpm build
pnpm previewVitePress は本番ビルド時に内部リンクを検証します。ドキュメントパッケージはルートの pnpm ワークスペースに属し、依存関係を変えたらルートの pnpm-lock.yaml もコミットします。出力先は docs/.vitepress/dist です。キャッシュ、依存関係、ビルド成果物は Git の対象外です。
記事間リンクは現在の言語ディレクトリからの相対パス(例:./design)にします。ルートの全記事には 4 言語それぞれの完全な翻訳が必要です。pnpm check:translations は欠落ページと英語本文のそのままのコピーを検査し、型検査とビルドの前にも実行されます。[locale]/[page].paths.ts は開発中に未翻訳記事を注意書き付き英語ページとして表示できますが、この代替ページは公開前の完全性検査を通過できません。翻訳を追加すると代替ページが自動で置き換わります。共通画像は /design/workspace.png のようなルートパスを使います。
ドキュメントの GitHub Actions ワークフローは削除されました。プッシュやプルリクエストではサイトのビルド、型検査、Pages 成果物のアップロードは実行されず、このワークフローからの手動 Pages デプロイも利用できません。ドキュメントを変更したら、ローカルの docs/ ディレクトリで pnpm typecheck と pnpm build を実行してください。リリースを参照してください。
アイコン素材
承認済みのクラウドとストレージのアイコン原本は resources/icon-oss-v3.png です。 ルートで make icon を実行すると、1024px のアプリアイコン、512px のドキュメントロゴ、64px の favicon、180px の Apple touch アイコンを出力します。すべて透明度を保持します。MyGo は resources/icon.png を梱包し、5 つの README も同じアイコンを使います。ドキュメントのナビゲーションと各言語のホームは /icon.png を使います。
ソース構成
| 場所 | 責務 |
|---|---|
| main.go, cli.go | CLI の解析とネイティブアプリへの起動オプション引き渡し |
| internal/app | MyGo ライフサイクル、グループ化したウィンドウ状態、操作、ビュー、UI フィクスチャ |
| internal/buildinfo | CLI とネイティブアプリに渡すデスクトップ版バージョン |
| internal/transfers | 一括スケジューリング、ジャーナル、復旧、清掃、転送計画 |
| internal/ossclient | OSS SDK 境界、オブジェクト操作、中断再開可能な転送 |
| tools/version | デスクトップとパッケージのバージョン同期・整合性確認 |
| internal/config | 設定の検証と安全な永続化 |
| internal/i18n | 5 つの埋め込みメッセージカタログと言語解決 |
| internal/desktop | ネイティブサービスの境界 |
| internal/tasks | キャンセルと古いコールバックの防止 |
| internal/files | 将来の機能向けに保持するローカルテキスト/チェックサム処理 |
| internal/storage | アトミックなファイル書き込み |
| resources, tools/genicon | アプリ素材とアイコン生成 |
| docs | 独立した VitePress パッケージ |
空のレイヤーを先に作らず、機能の実装時に業務サービスを追加してください。貢献前にリポジトリの AGENTS.md を読んでください。
性能検査
go test ./internal/transfers -run '^$' -bench 'BenchmarkQueue(AddBatch|Drain)' -benchmem
go test ./internal/app -run '^$' -bench BenchmarkObjectRowsCached -benchmemキューのベンチマークは 1,000/10,000/100,000 ジョブの追加と 1,000/10,000 ジョブの完了を扱います。スケジューラーの処理量が完了履歴に依存しないようにしてください。ブラウザーの行スライスは公開後に変更せず、更新・統合時に一覧を置き換えて並び替えキャッシュを無効化します。