← 一覧に戻る

dev-tracker

GitHub ↗ TypeScript 最終push: 2026/4/25 21:16

WIP(現在進行中)

Work In Progress

このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。

現在の状況

ステータス: 本番公開済み・自動更新パイプライン稼働中

  • 公開URL: https://dev-tracker.ikapps.com/
  • 対象リポ: dev-tracked topic 付き(現在 8 リポ。dev-tracker 自身は除外方針)
  • 更新頻度: 毎時 cron(UTC 0分)+ push トリガー + 手動(gh workflow run
  • インフラ:
    • GitHub Actions でビルド → Lightsail (deploy@13.230.63.19) へ rsync
    • Nginx + Let's Encrypt(自動更新)

直近の変更点

  • ライトテーマ採用(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.repostopic: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.com A → 13.230.63.19(Console手動)
  • GitHub Secrets: DEPLOY_HOST/USER/PATH/SSH_KEY + DEV_TRACKER_GH_TOKEN
  • 既存7リポに dev-tracked topic 付与(dev-tracker 自身は除外)
  • 本番初回デプロイ → https://dev-tracker.ikapps.com/ で 8 プロジェクト表示確認

詰まったこと / 気づき

  • Fine-grained PAT 問題: 「All repositories」を選んでも保存後に「Public repositories」に降格される現象。組織レベルのポリシーで Fine-grained PAT が制限されているためと推定。Classic PAT (repo scope) に切り替えで解決。
  • GitHub Search API のインデックス遅延: search.repos は topic 追加後すぐには反映されない。listForAuthenticatedUser + クライアント側フィルタに変更。
  • GitHub Actions のログマスク: 「deploy」が secret 値だったため、codedeploysamplecode***sample と表示されデバッグ時に混乱。
  • GitHub Actions ランナーは UTC: toLocaleString('ja-JP') だけだと UTC 時刻に日本式フォーマットが当たるだけで JST にはならない。timeZone: 'Asia/Tokyo' 必須。

次回やること

  • Node.js 20 deprecation 対応(actions/checkout@v5 等への更新、2026/9 まで猶予)
  • 詳細ページのタブ UI 化検討(縦長になりがち)
  • 必要に応じて他リポにも .devnotes/ 運用を浸透させる(現状 whosaid のみ充実)

最近のコミット

README

dev-tracker(開発進捗トラッカー)

概要

(記入予定)

セットアップ

(記入予定)

使い方

(記入予定)