dev-tracker
WIP(現在進行中)
Work In Progress
このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。
現在の状況
ステータス: 本番公開済み・自動更新パイプライン稼働中
- 公開URL: https://dev-tracker.ikapps.com/
- 対象リポ:
dev-trackedtopic 付き(現在 8 リポ。dev-tracker 自身は除外方針) - 更新頻度: 毎時 cron(UTC 0分)+ push トリガー + 手動(
gh workflow run) - インフラ:
- GitHub Actions でビルド → Lightsail (
deploy@13.230.63.19) へ rsync - Nginx + Let's Encrypt(自動更新)
- GitHub Actions でビルド → Lightsail (
直近の変更点
- ライトテーマ採用(GitHub風配色)
- 日時表示を JST 固定
- カード更新日時に時刻まで表示(
2026/4/25 13:25形式)
次に着手したくなったら候補
- 詳細ページが縦長になりがち → タブ UI で WIP/ROADMAP/DECISIONS/DEVLOG/Commits/README を切替
- API 化:将来
/data/projects.json配信を別エンドポイント化したい場合、build-data.ts のロジックを切り出す - Node.js 20 deprecation: actions/checkout@v5, actions/setup-node@v5 への更新(猶予 2026/9)
- 他リポの
.devnotes/整備(現状 whosaid のみ「現在の状況」が充実、他は雛形のまま)
詰まっていること
- なし(すべて稼働中)
過去のWIPアーカイブ
(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)
2026-04-25 21:15 時点のスナップショット(プロジェクト初期化直後)
(ここは毎回上書きされる。「今どこまで進んだか」「次に何をするか」「詰まっていること」を簡潔に)
雛形のまま、本格作業前。
ROADMAP(計画)
ロードマップ
今週
- 初期実装と本番公開(2026-04-25 完了)
今月
- 詳細ページのタブUI化(WIP/ROADMAP/DECISIONS/DEVLOG/Commits/README が縦に長く並ぶのを切替式に)
- 他リポの
.devnotes/WIP.mdの「現在の状況」を埋める(現状 whosaid のみ充実、他は雛形)
今四半期
- API 化(
projects.json配信を別エンドポイント化、認証付きで他デバイスからも参照可能に) - Node.js 20 deprecation 対応(actions/checkout@v5, setup-node@v5 等への更新、期限 2026/9)
いつか
- アクセス制御を追加するか検討(Basic認証 / Cloudflare Access 等)
- open issue / open PR の表示
- プロジェクト横断の「今週やったこと」サマリーページ
- WIP.md 更新を Slack/通知に流す仕組み
- スマホからの閲覧用にレスポンシブ調整
DECISIONS(意思決定)
意思決定記録
このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。
2026-04-25: GitHub の認証は Classic PAT (repo scope) を使う
背景: 当初 Fine-grained PAT で「All repositories」「Contents:Read + Metadata:Read」を作成したが、保存するたびに「Public repositories」に自動降格される現象が発生。GitHub Actions ログで PAT は 1 リポ(公開リポのみ)しか見えなかった。
決定: Classic PAT に repo scope を付けて発行し、DEV_TRACKER_GH_TOKEN として登録する。
理由: Fine-grained PAT は組織レベルのポリシーで制限される場合があり、個人アカウントでもポリシー側で「All repositories」がブロックされていた様子。Classic PAT は単純で確実。読み取り権限しか使わないので scope が広い不利益も小さい。
2026-04-25: 対象リポ特定は GitHub topic dev-tracked 方式
背景: どのリポを dev-tracker に表示するかの判定方法を決める必要があった。候補は (A) GitHub topic、(B) projects.yml で手動管理、(C) 全リポ走査して .devnotes/ 有無で判定。
決定: リポに dev-tracked topic を付ける方式。
理由: topic を付け外しするだけで対象/非対象を切り替えられ、メンテフリー。新規リポ追加時もトークンの再設定不要(Classic PAT が全リポを見るため)。
2026-04-25: ホストは既存 Lightsail 多目的サーバー、サイトは公開(認証なし)
背景: 配信形態は GitHub Pages 系の静的サイト案。アクセス制御をどうするか議論。
決定: 既存の multi-purpose-lightsail-server1(13.230.63.19)に同居。dev-tracker.ikapps.com で SSL 公開。Basic 認証等のアクセス制御は付けない。
理由: 既に Nginx リバースプロキシ運用中で追加コスト 0。GitHub Pages は private リポでは Pro プラン必須かつ非公開化に Enterprise が必要で割に合わない。Cloudflare Pages も無料だが既存サーバーが空いているのでわざわざ別系統に乗せる理由がない。アクセス制御は「一旦世界中から見えてもOK」とユーザー判断。
2026-04-25: フロントは Astro、データ層と完全分離
背景: 配信形態は静的サイトだが、将来 API 化を見据える要件あり。
決定: Astro でビルド時に src/data/projects.json を読み込んで静的生成する構成。データ取得 (scripts/build-data.ts) と表示 (Astro pages) を分離。
理由: Astro は Markdown レンダリング対応が良く静的書き出しがデフォルト。将来 API 化する時は projects.json を fetch する形に置き換えるだけで移行可能。Vite + React より MD 周りの実装が薄く済む。
2026-04-25: GitHub API → JSON のデータ取得は listForAuthenticatedUser + クライアント側 topic フィルタ
背景: 当初 octokit.search.repos で topic:dev-tracked を投げたが 0 件。GitHub の Search API は topic 変更のインデックス反映に遅延がある。
決定: octokit.repos.listForAuthenticatedUser でユーザーの全リポを paginate 取得し、JS 側で r.topics.includes('dev-tracked') でフィルタする。
理由: インデックス遅延の影響を受けない。個人利用の規模(数十リポ程度)ならレート制限的にも問題ない。
DEVLOG(作業ログ)
開発日誌
このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。
2026-04-25
21:15 - dev-tracker 初期実装と本番公開(フル構築)
やったこと
- 技術設計の合意:
- データソース: GitHub API のみ(ローカルFSは使わない)
- 配信形態: 静的サイト(将来API化を見据えた構造分離)
- 対象リポ特定: GitHub topic
dev-tracked方式 - フロント: Astro 5 (TypeScript strict)
- ホスト: 既存 Lightsail 多目的サーバー
- ドメイン:
dev-tracker.ikapps.com
- Astro プロジェクト初期化
- 手動で package.json / tsconfig / astro.config.mjs を作成(npm create を使わず制御)
- 依存: astro, @octokit/rest, marked, sanitize-html, tsx
scripts/build-data.ts実装octokit.repos.listForAuthenticatedUserで全リポ列挙 → topic フィルタ(search APIはインデックス遅延があるため避けた).devnotes/{WIP,DEVLOG,ROADMAP,DECISIONS}.mdと README を取得- 「## 現在の状況」セクションを抜き出して一覧カード用 wipSummary に
- Markdown は marked + sanitize-html で HTML 化、
set:htmlで表示 - 直近10コミット取得
- ページ実装
/一覧(pushedAt 降順、ProjectCard グリッド)/p/[slug]/詳細(WIP/ROADMAP/DECISIONS/DEVLOG/コミット/README)- ダークテーマ → ライトテーマに変更(GitHub風配色)
- 日時表示を JST に固定(
timeZone: 'Asia/Tokyo'、ランナーがUTCのため必須)
- GitHub Actions ワークフロー
- cron 毎時 + push + workflow_dispatch
- secrets経由で Lightsail に rsync デプロイ
- サーバー側構築(Lightsail)
deployユーザー作成(sudoersに入れない、SSH鍵のみ)~/.ssh/dev-tracker-deploy(ed25519) を生成・公開鍵をサーバーに配置/var/www/dev-tracker/をdeploy:www-dataで作成- Nginx vhost: 静的配信 + gzip +
/_astro/long-cache - certbot --nginx で Let's Encrypt SSL 取得 + HTTP→HTTPS 301
- DNS: Route 53 で
dev-tracker.ikapps.comA → 13.230.63.19(Console手動) - GitHub Secrets:
DEPLOY_HOST/USER/PATH/SSH_KEY+DEV_TRACKER_GH_TOKEN - 既存7リポに
dev-trackedtopic 付与(dev-tracker 自身は除外) - 本番初回デプロイ → https://dev-tracker.ikapps.com/ で 8 プロジェクト表示確認
詰まったこと / 気づき
- Fine-grained PAT 問題: 「All repositories」を選んでも保存後に「Public repositories」に降格される現象。組織レベルのポリシーで Fine-grained PAT が制限されているためと推定。Classic PAT (
reposcope) に切り替えで解決。 - GitHub Search API のインデックス遅延:
search.reposは topic 追加後すぐには反映されない。listForAuthenticatedUser+ クライアント側フィルタに変更。 - GitHub Actions のログマスク: 「deploy」が secret 値だったため、
codedeploysampleがcode***sampleと表示されデバッグ時に混乱。 - GitHub Actions ランナーは UTC:
toLocaleString('ja-JP')だけだと UTC 時刻に日本式フォーマットが当たるだけで JST にはならない。timeZone: 'Asia/Tokyo'必須。
次回やること
- Node.js 20 deprecation 対応(actions/checkout@v5 等への更新、2026/9 まで猶予)
- 詳細ページのタブ UI 化検討(縦長になりがち)
- 必要に応じて他リポにも
.devnotes/運用を浸透させる(現状 whosaid のみ充実)
最近のコミット
- 6c6a52f .devnotes を更新(dev-tracker 初期実装と本番公開のセッション分) 2026/4/25
- 1df583f ライトテーマに変更 2026/4/25
- 05d877b 日付表示を日本時間 (Asia/Tokyo) に固定 2026/4/25
- 3fd79b1 プロジェクトカードの更新日時に時刻も表示 2026/4/25
- b252920 デバッグログを削除(全リポ名を平文で出すのを防止) 2026/4/25
- 94b43b2 デバッグ: 取得したリポ一覧をログ出力 2026/4/25
- f24d809 Astro静的サイトの初期実装とGitHub Actionsデプロイ設定 2026/4/25
- 5be8cb2 Initial commit 2026/4/25
README
dev-tracker(開発進捗トラッカー)
概要
(記入予定)
セットアップ
(記入予定)
使い方
(記入予定)