
2025/12/23 7:03
**Tc – テオドール・キャルヴィンによる言語非依存テストフレームワーク**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要
「tc v1.0.0 – island hopper」フレームワークは、軽量で言語非依存のテストツールです。
input.json を標準入力から読み取り、expected.json を標準出力に書き込むことで、任意のプログラミング言語のテストを実行します。
テストはディレクトリ構成で整理されます。各スイートには
run 実行ファイルと、JSON ファイルを保持するサブフォルダが入った data/ フォルダがあります。このフレームワークは Bash 4.0+ と jq のみを必要とし、期待出力の動的値に対してパターンマッチング(<uuid>、<timestamp>、<number>、<string> など)を使用します。
カスタムパターン(例:メールアドレス、ipv4、電話番号)は
TC_CUSTOM_PATTERNS 環境変数で定義できます。主なコマンドは次のとおりです。
– テスト実行tc <path>
– 新しいテストスイートの scaffoldtc new <test-path>
,tc list
,tc tagstc explain
(自動CPU検出または明示的なワーカ数)で並列実行--parallel
TTY と非TTY ターミナルでは出力が異なります。TTY ではヘリコプター スピナー付きのクリーンな単一行ステータスと fail‑fast 動作が表示され、非TTY では詳細ログが発生します。これは
TC_FANCY_OUTPUT 変数で制御されます。
プロジェクトには実験的な AI 主導ツール tc-kit も含まれており、仕様からテストを生成し spec‑kit と統合できるため、将来的な自動化の可能性が示唆されています。
Ruby, Go, Python, JavaScript, Rust のマルチ言語デモは、同一のテストスイートがすべての言語で通過することを示し、本当に言語非依存であることを証明しています。
Unix の
tc(トラフィックコントロール)と衝突しないように、ユーザーは $PATH に ./tc/bin を追加してください。リポジトリは https://github.com/ahoward/tc でホストされており、MIT ライセンスの下で公開されています。
このバージョンはすべての重要ポイントを網羅し、不必要な推測を排除し、主旨を明確かつ読みやすい形で提示しています。
本文
tc – テオドール・カルヴィンのテストフレームワーク 🚁
Unixハッカー向けの言語非依存テスト
テオドール「tc」カルヴィン
- ヘリコプターパイロット、フレームワーク名の由来、伝説的存在
|=o=o=o=o=o=o=o=o=o=o=o=| tc v1.0.0 – アイランドホッパー | どんな言語でも、どこでもテスト ___/ \___ (o) 🚁 安全に飛び、しっかりテスト (( tc ))======\ \_______/ (o) ^ ^ ^-----------^
TL;DR
何をするの?
言語非依存型テストフレームワーク。1度書いたテストを Bash、Python、Rust、Go など任意の言語で実行できます。
どうやって動くか?
テストはディレクトリ単位です。各プログラムは
stdin から input.json を読み取り、stdout に expected.json を出力するだけです。
はじめに
# クローン&インストール git clone https://github.com/ahoward/tc.git cd tc # PATHに追加(Unix の traffic‑control コマンドと衝突しないように) export PATH="$PWD/tc/bin:$PATH" # バージョン確認 tc --version # hello‑world サンプルを試す tc examples/hello-world # 最初のテスト作成 tc new tests/my-feature
PATH 設定(Unix の tc
と衝突しないように)
tc# 現在のセッションで追加 export PATH="$PWD/tc/bin:$PATH" # 永続化したい場合はシェル設定へ追記 (任意) echo 'export PATH="$PWD/tc/bin:$PATH"' >> ~/.bashrc # または ~/.zshrc # 確認 which tc # ./tc/bin/tc が表示される(/usr/sbin/tc ではない) tc --version # tc v1.0.0 – island hopper と表示
tc
は何?
tc- シンプルなテストフレームワークで、以下が可能です。
- 同じテストスイートで任意の言語をテスト
- テストをディレクトリ構造と JSON 入出力で整理
だけで動く(依存はゼロ)jq- 実装を書き換えずにコードを別言語へ移植
哲学
シンプル • ポータブル • 言語非依存 • Unix • スペック駆動
🤖 AI時代では、スペックとテストが永続的で実装は消費されるもの。
テスト=スペック、コード=ビルドアーティファクト
🔬 実験: マルチ言語 DAO デモ –
projects/ と examples/multi-lang-dao/ に Ruby, Go, Python, JavaScript, Rust で同一インターフェースを実装し、全て同じテストスイートに合格。
ビジョン: 消費型アプリケーション – 言語は自由に切り替え、テストは永続。詳細は
docs/THEORY.md を参照。
コマンド
| コマンド | 説明 |
|---|---|
| すべてのテストを実行(KISS!) |
| 単一テストスイートを実行 |
| ディレクトリツリー内の全テストを実行 |
| タグにマッチするスイートのみ実行 |
| すべてを並列実行(CPU自動検知) |
| N 個のワーカーで並列実行 |
| 新しいテストスイート生成 |
| README付きテストディレクトリ初期化 |
| メタデータ付き全テストスイート一覧 |
| 利用可能なタグを表示 |
| テストスイートの内容説明 |
| バージョン表示 |
| ヘルプ表示 |
出力モード
- TTY モード(端末): 単一行ステータスにヘリコプタースピナー、失敗時は即停止
- 非 TTY モード(CI/CD): 従来の詳細ログ出力
上書き:TC_FANCY_OUTPUT=true/false
ドキュメント
- 完全なドキュメント | →
ガイド | → システムアダプタ理論 (WIP)tc new
サンプル構造
my-feature/ ├── run # 実行ファイル: input.json を読み取り、JSONを stdout に出力 └── data/ └── scenario-1/ ├── input.json # テスト入力 └── expected.json # 期待結果
tc my-feature で実行 → ✓ 合格 / ✗ 不合格
パターンマッチング
expected.json 内で動的値に対して簡易パターンをサポートします。
{ "id": "<uuid>", "status": "pending", "created_at": "<timestamp>", "count": "<number>", "message": "<string>" }
パターン
| パターン | 意味 |
|---|---|
| UUID v4 の形式を検証 |
| ISO 8601 タイムスタンプ () |
| 任意の JSON 数値 |
| 任意の文字列 |
| または |
| null 値 |
| 何でも一致 |
ネストしたオブジェクトや配列要素、正確な値と混在しても動作。設定不要で自動検知。
カスタムパターン
環境変数
TC_CUSTOM_PATTERNS で定義可能:
export TC_CUSTOM_PATTERNS="email:^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ipv4:^([0-9]{1,3}\.){3}[0-9]{1,3}$ phone:^\+?[0-9]{10,15}$"
expected.json で使用:
{ "email": "<email>", "server": "<ipv4>", "contact": "<phone>" }
形式:
パターン名:正規表現(1 行に 1 パターン、標準正規表現)
機能一覧
テスト実行
- 単一スイート実行
- JSON の順序非依存比較
- パターンマッチング (
,<uuid>
など)<timestamp> - タイムアウト管理
- 結果永続化 (
ファイル)tc-result - 階層的テスト探索 (
)--all - タグベースフィルタリング (
)--tags - 並列実行 (
, CPU コア自動検知)--parallel - TTY での単一行アニメーションステータス(ヘリコプター 🚁、スピナー、カラー)
- 失敗時は即停止(TTY モードではログパス表示)
- 最終統計サマリー(色付きカウント: 合格/不合格/エラー、累積時間)
- 非 TTY 用の詳細出力
- 機械可読ログ (
形式JSONL
)tc/tmp/report.jsonl
テスト生成
- スキャフォールド生成 (
)tc new - ディレクトリ初期化 (
)tc init - メタデータフラグ (
,--tags
,--priority
)--description - テンプレートシステム (
,--from
)--list-examples - TDD ワークフロー(テストが失敗するまで実装を進めない)
発見 & メタデータ
- 全テストリスト表示 (
)tc list - タグ一覧 (
)tc tags - スイート説明 (
)tc explain - AI フレンドリーなメタデータ形式
品質保証
自身をテストする(ドッグフーディング)tc
ロードマップ
- パターンベース選択
- 分散テスト実行
AI 主導開発
→ tc-kit: AI で自動テスト生成 (実験的)
spec‑kit と連携し、仕様からテストを自動生成。AI アシスト開発ワークフローに最適。
クイックスタート:
# スペックからテスト生成 /tc.specify # 実装してテスト合格へ edit tc/tests/my-feature/user-story-01/run # 検証・洗練 /tc.validate /tc.refine
詳細は
AI.md を参照。
インストール
必須: Bash 4.0+、
jq
# jq のインストール brew install jq # macOS sudo apt-get install jq # Ubuntu/Debian # tc をクローン git clone https://github.com/ahoward/tc.git cd tc # PATH に追加 export PATH="$PWD/tc/bin:$PATH" # バージョン確認 tc --version
PATH 設定は TL;DR セクションを参照。
ライセンス
MIT ライセンス –
LICENSE をご覧ください。
☕ とヘリコプターで作成
「チョッパーが燃料満タンで準備完了。コードをテストしよう。」 — tc 🚁 安全に飛び、しっかりテスト