# Post Progress

> 作業進捗をXに面白く投稿する。コミット後に使用 Use when this capability is needed.

- Skill: `tomevault-io/post-progress` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/post-progress`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/post-progress/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/post-progress

---


## X 進捗投稿スキル

$ARGUMENTS を解釈:
- `-n <数>`: 直近N件のコミットをまとめる（デフォルト: 1）
- `--day <数>`: 直近N日間のコミットをまとめる（例: `--day 7`で1週間分）
- `-m "<メッセージ>"`: 自動生成メッセージの前に追加するユーザーメッセージ
- `--dry-run`: 投稿せずプレビューのみ
- `--style <スタイル>`: fun（デフォルト）/formal/emoji

**Note**:
- `-n`と`--day`を両方指定した場合は`--day`が優先されます
- `-m`を指定すると、指定したメッセージが自動生成メッセージの前に追加されます（置き換えではなく追加）

### 実行手順

1. **コミット情報の取得**
   `git log` で直近コミット情報を取得:
   - `-n` が指定された場合: `git log -n <数>`（件数ベース）
   - `--day` が指定された場合: `git log --since="<数> days ago"`（期間ベース）
   - 両方指定された場合: `--day` を優先
   - どちらも指定されない場合: `-n 1`（最新1件）

   **コミット選択が必要な場合（`--select`）**:
   1. `git log -20 --oneline` で直近20件を番号付きで表示:
      ```
      直近20件のコミット:
       1. 5738147 feat(workflow): improve display format
       2. 8982e4e refactor(workflow): restore Claude-based post
       3. 64c972b fix(workflow): add --list option
       ...
      ```
   2. 一覧の後に「投稿したいコミットの番号をカンマ区切りで入力してください（例: 1,3,7）」とテキストで表示し、**ユーザーのチャット入力を待つ**（AskUserQuestion は使わない）
   3. **選択直後に確認メッセージを表示**: 「✅ 選択されたコミット: #1, #3, #7 (3件)」
   4. 選択されたハッシュで `git show` を実行してコミットメッセージを取得

2. **文脈の把握**（投稿文生成の前に必ず実行）
   選択されたコミットだけでは「何を目指しての作業か」が不明な場合がある。
   以下の手順で文脈を確認し、読者に全体像を伝えられるようにする:

   1. 選択コミットの前後5件を `git log` で確認し、関連する一連の作業を特定
   2. 同じスコープ（例: `workflow`, `control`, `cli`）や同じ機能に関するコミットが連続していれば、それが「一連の作業」
   3. 一連の作業の**最初のコミット**から目的を読み取る（最初のコミットに動機が書かれていることが多い）
   4. 必要に応じて関連コミットも `git show` で詳細を確認

   **判断基準**: 選択されたコミットの subject だけを読んで「なぜこの作業が必要だったか」が明確にわからなければ、文脈確認が必要。

   **例**: `fix(workflow): use plain text input for commit selection` だけでは何の話かわからない → 前後を見ると post-progress スキルのコミット選択UI改善の一連の作業とわかる → 冒頭で「進捗投稿スキルのコミット選択UIを改善した」と全体目的を述べる

3. **投稿文の生成**（Claude が実行）
   コミットメッセージと文脈情報を元に、以下のスタイルで投稿文を生成:

   **共通ルール:**
   - 800-900文字程度を目安に詳細な技術情報を含める
   - ハッシュタグを2-3個追加
     - プロジェクト固有タグ: stampfly_ecosystem ディレクトリの場合は #StampFly を含める
     - 技術タグ + 分野タグ（例: #制御工学 #ドローン開発）
   - 構造化された情報提供を重視
   - **5W1H を意識**: なぜ（Why）、何が問題で（Problem）、何を（What）、どのように（How）、何が改善されたか（Impact）

   **スタイル別:**
   - `fun`（デフォルト）: ストーリー性と技術詳細を組み合わせた拡張スタイル

     **投稿構成（800-900文字）:**
     1. **冒頭**（1-3行）:
        - `-m` オプション指定時: ユーザーメッセージ + 空行 + 自動生成メッセージ
        - `-m` オプションなし: 課題や動機を明示（「〜するため」「〜が問題だった」）
        - コミット数を明記
     2. **実装内容**（3-5項目）: 主要な成果を箇条書き
        - 技術用語を読みやすく説明
        - 「Add XXX」→「XXXを実装し、〜が可能に」のように成果を表現
     3. **詳細セクション**（カテゴリ別に整理、2-3セクション）:
        - 「◆カテゴリ名: 説明」形式
        - 因果関係を説明（「〜により〜が実現」「〜することで〜を実現」）
        - 具体的なシーンや使用例を含める
        - 設計判断の理由を説明
     4. **締め**（1-2行）: 成果のインパクト（何が改善されたか）
     5. **ハッシュタグ**: 2-3個（技術 + 分野）

     **重要なポイント:**
     - 機械的な箇条書きではなく、ストーリーとして語る
     - 読者が「なるほど」と思える因果関係を説明
     - 専門用語はそのまま使わず、何を意味するか説明する
     - 英語のコミットメッセージは日本語で意訳する

   - `formal`: 絵文字なし、ビジネスライクな報告形式
   - `emoji`: 絵文字多め、視覚的にインパクトのある表現

4. **プレビュー表示**
   生成した投稿文を以下のフォーマットで表示:

   **表示フォーマット:**
   ```
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   ✅ 選択されたコミット: #5, #13 (2件)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

   📝 投稿プレビュー (XXX文字):

   [投稿文の全文をそのまま表示]

   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   ```

   **重要なポイント:**
   - コミット選択直後に選択確認メッセージを表示（番号とハッシュ）
   - 明確な区切り線（━）で視覚的に分離し、コミットリストと投稿文を区別
   - 投稿文は改行を含めてそのまま表示（コードブロック不要、生の投稿文として見せる）
   - 文字数を明記（800-900文字が目安）
   - 最後にもう一度区切り線を表示して投稿文の終わりを明示

   `--dry-run` の場合はここで終了

5. **成果画像の探索**（投稿前に実行）
   コミットに関連する画像を探索し、添付候補を提示する:

   1. `git diff --name-only <最古コミット>^..<最新コミット>` で変更ファイル一覧を取得
   2. 以下の優先順で画像候補を探索:
      - **直接変更された画像ファイル**: `*.png`, `*.jpg`, `*.jpeg`, `*.gif`, `*.webp`
      - **TikZ 変更** → 同じディレクトリまたは `images/` サブディレクトリの PNG を探索
      - **Beamer/LaTeX 変更** → 対応する `build/` や `images/` ディレクトリの PNG/PDF を探索
      - **コード変更** → 関連するスクリーンショットや図（`docs/images/`, `images/` 等）
   3. 候補が見つかった場合、一覧を表示:
      ```
      📎 画像候補:
        1. docs/workshop/images/lesson4_block_diagram.png (45KB)
        2. docs/workshop/images/lesson7_pid_response.png (62KB)
        3. docs/workshop/build/slides_lesson4.png (128KB)
      添付する画像の番号を選択してください（例: 1,2、スキップは Enter）
      ```
   4. ユーザーのチャット入力を待つ（最大4枚まで選択可能）
   5. 候補がない場合はスキップして次のステップへ

   **注意**: 画像は PNG/JPG/GIF/WebP 形式、5MB 以下のみ対応

6. **X への投稿**
   承認されたら以下を実行:

   画像なしの場合:
   ```bash
   python3 .claude/skills/post-progress/scripts/post_to_x.py "<投稿文>"
   ```

   画像ありの場合:
   ```bash
   python3 .claude/skills/post-progress/scripts/post_to_x.py "<投稿文>" --media "path1.png,path2.png"
   ```

   dry-run の場合（画像プレビュー付き）:
   ```bash
   python3 .claude/skills/post-progress/scripts/post_to_x.py "<投稿文>" --media "path1.png" --dry-run
   ```

### 投稿文の例

**入力（コミットメッセージ）**:
```
Add user authentication with JWT tokens
Implement token refresh mechanism
Add password reset flow
```

**出力（fun スタイル・拡張版）**:
```
ECサイトのセキュリティ強化のため、この1週間で認証基盤を全面刷新した。

実装内容：
・JWT認証（RS256署名/アクセス15分・リフレッシュ7日）
・トークン自動更新機構（HTTPOnly Cookie + CSRF対策）
・パスワードリセットフロー（有効期限付きワンタイムトークン）
・多要素認証対応（TOTP/SMS）

◆認証アーキテクチャ: ステートレスなJWT設計により、Redisなどのセッションストアが不要に。アクセストークンは短命（15分）で漏洩リスクを最小化し、リフレッシュトークン（7日）でUXを維持。水平スケールが容易になった。

◆セキュリティ強化: CSRF対策としてSameSite Cookie属性を使用。パスワードリセットは有効期限付きワンタイムトークンで、再利用攻撃を防止。多要素認証でアカウント乗っ取りリスクを大幅に低減。

◆テスト: 認証フロー全体でE2Eテスト実装（Playwright使用）。トークン更新、失効、並行アクセスのエッジケースを網羅。

ステートレスな認証基盤が整い、安全に水平スケールできる体制が完成

#Web開発 #認証 #JWT
```

**StampFly プロジェクトの場合（ハッシュタグに #StampFly を含める・拡張版）**:
```
ドローンの開発サイクルを加速するため、この1週間でツールチェーンを大幅に強化した（54件のコミット）。

実装内容：
・システム同定/ESKFシミュレーションCLI（Bode線図/グリッドサーチ/100+パターン評価）
・ROS2統合（WebSocket→UDP移行/Phase 2完了/外部PC制御）
・Serial CLI刷新（ESP-IDF標準コンソール採用/コマンド追加容易化）
・WiFi設定の実行時変更（チャンネル/デバイスID動的設定）

◆解析ツール（6件）: システム同定コマンド（sf sysid）で実機の伝達関数を推定し、Bode線図/極零点マップ/ゲイン余裕を可視化。ESKFのQ/R行列グリッドサーチで100パターン以上を自動評価し、最適なフィルタパラメータを探索可能に。pytest単体テストとJupyter可視化チュートリアルも整備。

◆ROS2統合（4件）: Phase 1でWebSocket経由のテレメトリブリッジを実装し、Phase 2でUDP経由の制御指令送信に対応。外部PCからPythonでリアルタイム制御できる環境が整った。400Hzテレメトリをros2 topic echoで確認可能。

◆CLI改善（5件）: 独自実装からESP-IDF標準コンソールに移行し、コマンド追加が容易に。USB CDC VFS対応でスタックサイズ問題も解決。CLI拡張ガイドも整備し、新機能の追加が高速化。

実機開発の生産性が大幅に向上し、データ駆動なパラメータ調整が可能になった

#StampFly #組込み #ROS2
```

**-m オプションを使った場合の例**:
```
年末年始の開発成果をまとめました。

ドローンの開発サイクルを加速するため、この1週間でツールチェーンを大幅に強化した（54件のコミット）。

実装内容：
・システム同定/ESKFシミュレーションCLI（Bode線図/グリッドサーチ/100+パターン評価）
・ROS2統合（WebSocket→UDP移行/Phase 2完了/外部PC制御）
...（以下同じ）

#StampFly #組込み #ROS2
```

### 使用例

```bash
# 基本的な使い方
/post-progress                # 最新1件のコミット
/post-progress -n 5          # 直近5件のコミット
/post-progress --day 7       # 直近7日間のコミット

# 🆕 インタラクティブ選択（推奨）
/post-progress --select
# → 直近20件を表示、番号で選択（例: 1,2,5 と入力）

# 🆕 特定のコミットを指定
/post-progress --commits f3a6083,139df24
# → 指定したハッシュのコミットのみ投稿

# 🆕 範囲指定
/post-progress --range 4c8c60c..f3a6083
# → 指定範囲内の全コミット

# プレビューのみ（投稿しない）
/post-progress --select --dry-run
/post-progress -n 3 --dry-run

# ユーザーメッセージ追加
/post-progress --select -m "今週の開発成果"
/post-progress -n 7 -m "年末年始の開発成果をまとめました。"

# スタイル変更
/post-progress -n 10 --style formal
/post-progress --select --style emoji

# 画像添付（自動探索）
/post-progress --select
# → コミット選択後、変更ファイルから画像候補を自動探索して提示
```

### 必要なパッケージ

```bash
pip install requests requests-oauthlib
```

### 環境変数の設定

X API の認証情報を環境変数に設定してください:

```bash
# ~/.zshrc に追加
export X_API_KEY="your-api-key"
export X_API_SECRET="your-api-secret"
export X_ACCESS_TOKEN="your-access-token"
export X_ACCESS_TOKEN_SECRET="your-access-token-secret"
```

### エラーハンドリング

- Git リポジトリでない場合: エラーメッセージを表示
- コミットがない場合: エラーメッセージを表示
- 環境変数が未設定の場合: 設定方法を案内
- API エラーの場合: エラー内容を表示

---
> Source: [M5Fly-kanazawa/stampfly_ecosystem](https://github.com/M5Fly-kanazawa/stampfly_ecosystem) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-18 -->

