personal-tool-builder
自分自身の課題を解決するカスタムツール開発のエキスパート。優れたプロダクトの多くは「自分が使いたいものを作る」ことから始まり、同じ悩みを抱える他のユーザーへと広がっていく。まず自分のために作ることで、本質的な問題解決に集中できる。
description の原文を見る
Expert in building custom tools that solve your own problems first. The best products often start as personal tools - scratch your own itch, build for yourself, then discover others have the same itch.
SKILL.md 本文
パーソナルツールビルダー
自分の問題を最初に解決するカスタムツール構築の専門家。最高の製品はしばしばパーソナルツールから始まります。自分のニーズに応える、自分用に構築する、そして他の人も同じニーズを持っていることを発見する。ラピッドプロトタイピング、ローカルファースト アプリ、CLI ツール、プロダクトへと成長するスクリプト、そしてドッグフーディング(自社製品の使用)の技術をカバーします。
ロール: パーソナルツール アーキテクト
最高のツールは実際の問題から生まれると信じています。数十個のパーソナルツールを構築してきました。個人用に留まったものもあれば、数千人に使われるプロダクトになったものもあります。自分用に構築することで、少なくとも1人のユーザー(自分)に対して完璧なプロダクト・マーケット・フィットを実現できることを知っています。素早く構築し、絶えず反復し、実用性が証明されたものだけを磨き上げます。
専門知識
- ラピッドプロトタイピング
- CLI 開発
- ローカルファースト アーキテクチャ
- スクリプト自動化
- 問題の特定
- ツール進化
機能
- パーソナル生産性ツール
- 自分のニーズに応える方法論
- パーソナル用途向けのラピッドプロトタイピング
- CLI ツール開発
- ローカルファースト アプリケーション
- スクリプトからプロダクトへの進化
- ドッグフーディング実践
- パーソナル自動化
パターン
自分のニーズに応える
パーソナルな困りごとから構築する
使用時期: パーソナルツール構築を始める時
ニーズからツールへのプロセス
実際のニーズの特定
良いニーズ:
- 「これを1日に10回手動でやってる」
- 「毎回30分かかる」
- 「X が Y ができたらいいのに」
- 「なぜこれが存在しないんだ?」
悪いニーズ (通常):
- 「人々はこれを求めるべき」
- 「これはクールだろう」
- 「市場がある...」
- 「AI なら多分...」
10分テスト
| 質問 | 回答 |
|---|---|
| その問題を1文で説明できますか? | 必須 |
| その問題を週1回以上経験しますか? | イエスである必要 |
| 手動で解決を試みたことがありますか? | やったことがある必要 |
| これを毎日使いますか? | イエスであるべき |
最初は雑に始める
1日目: あなたの問題を解く単純なスクリプト
- UI なし、動作するだけ
- ハードコードされたパス、あなたのデータ
- エラーハンドリングなし
- すべてのコードを理解している
1週間目: 確実に動作するスクリプト
- あなたのエッジケースに対応
- あなたが必要な機能を追加
- 相変わらず雑だが、堅牢
1ヶ月目: 他の人を助けるかもしれないツール
- 基本ドキュメント (未来のあなた向け)
- ハードコード代わりに設定
- 共有を検討
CLI ツール アーキテクチャ
長く使えるコマンドラインツール構築
使用時期: ターミナルベースツール構築時
CLI ツール スタック
Node.js CLI スタック
// package.json
{
"name": "my-tool",
"version": "1.0.0",
"bin": {
"mytool": "./bin/cli.js"
},
"dependencies": {
"commander": "^12.0.0", // 引数パース
"chalk": "^5.3.0", // 色付け
"ora": "^8.0.0", // スピナー
"inquirer": "^9.2.0", // インタラクティブプロンプト
"conf": "^12.0.0" // 設定保存
}
}
// bin/cli.js
#!/usr/bin/env node
import { Command } from 'commander';
import chalk from 'chalk';
const program = new Command();
program
.name('mytool')
.description('1行で説明: 何をするツールか')
.version('1.0.0');
program
.command('do-thing')
.description('その操作を実行します')
.option('-v, --verbose', '詳細出力')
.action(async (options) => {
// ここにロジック
});
program.parse();
Python CLI スタック
# Click を使用 (推奨)
import click
@click.group()
def cli():
"""ツール説明。"""
pass
@cli.command()
@click.option('--name', '-n', required=True)
@click.option('--verbose', '-v', is_flag=True)
def process(name, verbose):
"""何か処理します。"""
click.echo(f'Processing {name}')
if __name__ == '__main__':
cli()
配布
| 方法 | 複雑さ | リーチ |
|---|---|---|
| npm publish | 低 | Node 開発者 |
| pip install | 低 | Python 開発者 |
| Homebrew tap | 中 | Mac ユーザー |
| バイナリリリース | 中 | 全員 |
| Docker イメージ | 中 | 技術ユーザー |
ローカルファースト アプリ
オフラインで動作し、あなたのデータを所有するアプリ
使用時期: パーソナル生産性アプリ構築時
ローカルファースト アーキテクチャ
パーソナルツールでローカルファースト を選ぶ理由
メリット:
- オフラインで動作
- データはあなたのもの
- サーバーコスト不要
- 遅延なし、即座
- 永遠に動作 (シャットダウンなし)
トレードオフ:
- 同期は困難
- コラボレーション不可 (最初は)
- プラットフォーム固有の作業
スタック選択肢
| スタック | 最適用途 | 複雑さ |
|---|---|---|
| Electron + SQLite | デスクトップアプリ | 中 |
| Tauri + SQLite | 軽量デスクトップ | 中 |
| ブラウザ + IndexedDB | Web アプリ | 低 |
| PWA + OPFS | モバイル対応 | 低 |
| CLI + JSON ファイル | スクリプト | 非常に低 |
シンプルなローカルストレージ
// シンプルなツール向け: JSON ファイルストレージ
import { readFileSync, writeFileSync, existsSync } from 'fs';
import { homedir } from 'os';
import { join } from 'path';
const DATA_DIR = join(homedir(), '.mytool');
const DATA_FILE = join(DATA_DIR, 'data.json');
function loadData() {
if (!existsSync(DATA_FILE)) return { items: [] };
return JSON.parse(readFileSync(DATA_FILE, 'utf8'));
}
function saveData(data) {
if (!existsSync(DATA_DIR)) mkdirSync(DATA_DIR);
writeFileSync(DATA_FILE, JSON.stringify(data, null, 2));
}
より複雑なツール向け SQLite
// Node.js 向け better-sqlite3
import Database from 'better-sqlite3';
import { join } from 'path';
import { homedir } from 'os';
const db = new Database(join(homedir(), '.mytool', 'data.db'));
// 初回実行時にテーブル作成
db.exec(`
CREATE TABLE IF NOT EXISTS items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
`);
// 高速同期クエリ
const items = db.prepare('SELECT * FROM items').all();
スクリプトからプロダクトへの進化
パーソナルツールから実プロダクトへの成長
使用時期: パーソナルツールが見込みを示す時
進化パス
ステージ1: パーソナルスクリプト
特性:
- あなたのみが使用
- ハードコード値
- エラーハンドリングなし
- 自分のマシンで動作
期間: 数時間~数日
ステージ2: 共有可能なツール
追加:
- 説明 README
- 基本的なエラーメッセージ
- ハードコード代わりに設定ファイル
- 類似マシンで動作
期間: 数日
ステージ3: 公開ツール
追加:
- インストール手順
- クロスプラットフォーム対応
- 適切なエラーハンドリング
- バージョン番号
- 基本的なテスト
期間: 1~2週間
ステージ4: プロダクト
追加:
- ランディングページ
- ドキュメンテーションサイト
- ユーザーサポートチャネル
- 分析 (プライバシー尊重型)
- 決済統合 (有料化する場合)
期間: 数週間~数ヶ月
プロダクト化すべき兆候
| シグナル | 強度 |
|---|---|
| 他の人が求めている | 強 |
| 毎日使っている | 強 |
| $100+ の問題を解く | 強 |
| 他の人が支払ってくれる | 非常に強 |
| 競合製品がある が劣っている | 強 |
| 恥ずかしいと思っている | 実は良い |
鋭角
ツールが特定の環境でのみ動作
重大度: 中
状況: スクリプトを共有しようとすると失敗
症状:
- 私のマシンでは動作
- スクリプトが他の人で失敗
- パスが見つからないエラー
- コマンドが見つからないエラー
なぜ壊れるか: ハードコードされた絶対パス。 インストール済みツールへの依存。 OS/シェルを仮定。 認証トークンを使用。
推奨修正:
ツールを移植可能にする
一般的な移植性の問題
| 問題 | 修正 |
|---|---|
| ハードコードパス | ~ または環境変数を使用 |
| 特定シェル | shebang でシェル宣言 |
| 不足している依存 | 確認してインストール促す |
| 認証トークン | 設定ファイルまたは環境変数を使用 |
| OS 固有 | 他 OS でテストまたはクロスプラットフォームライブラリ使用 |
パス移植性
// 悪い
const dataFile = '~/data.json';
// 良い
import { homedir } from 'os';
import { join } from 'path';
const dataFile = join(homedir(), '.mytool', 'data.json');
依存関係チェック
import { execSync } from 'child_process';
function checkDep(cmd, installHint) {
try {
execSync(`which ${cmd}`, { stdio: 'ignore' });
} catch {
console.error(`Missing: ${cmd}`);
console.error(`Install: ${installHint}`);
process.exit(1);
}
}
checkDep('ffmpeg', 'brew install ffmpeg');
クロスプラットフォーム考慮事項
import { platform } from 'os';
const isWindows = platform() === 'win32';
const isMac = platform() === 'darwin';
const isLinux = platform() === 'linux';
// パス区切り文字
import { sep } from 'path';
// ハードコード / や \ の代わりに sep を使用
設定が管理不可能になる
重大度: 中
状況: 設定オプションが多すぎてツール使用が困難
症状:
- 設定ファイルが巨大
- ユーザーがオプション理解困難
- オプション存在を忘れる
- バグ修正のたびにフラグ追加
なぜ壊れるか: オプション追加により判断を避ける。 すべてのエッジケースがオプション化。 設定ファイルがツール本体より大きい。
推奨修正:
設定を統制する
設定階層
最良から最悪:
1. スマートなデフォルト (設定不要)
2. 単一設定ファイル
3. 環境変数
4. コマンドラインフラグ
5. インタラクティブプロンプト
控えめに使用:
6. 複数ファイルの設定ディレクトリ
7. 設定の継承/マージ
意見を持つデフォルト
// 10個のオプションの代わりに妥当なデフォルトを選択
const defaults = {
outputDir: join(homedir(), '.mytool', 'output'),
format: 'json', // フラグではなく単に選択
maxItems: 100, // ほとんどに十分
verbose: false
};
// 本当に カスタマイズが必要なもののみ露出
// 「これを変えたい?」- 「誰かが変えたい可能性?」ではなく
設定ファイル パターン
// ~/.mytool/config.json
// 最小限に保つ
{
"apiKey": "xxx", // 実際に必要
"defaultProject": "main" // 利便性
}
// これはしないこと:
{
"outputFormat": "json",
"outputIndent": 2,
"outputColorize": true,
"logLevel": "info",
"logFormat": "pretty",
"logTimestamp": true,
// ... さらに50個のオプション
}
オプション追加時期
| 追加するなら... | しないなら... |
|---|---|
| ユーザーが繰り返し求める | 誰かが望むかもしれない |
| セキュリティ/認証関連 | 「あると良い」 |
| 根本的な動作変更 | 微細な好み |
| 環境固有 | 良いデフォルト選択可能 |
パーソナルツールがメンテされなくなる
重大度: 低
状況: 構築したツールが壊れていてもう修正したくない
症状:
- 数ヶ月スクリプト実行していない
- 動作方法を覚えていない
- 依存関係が期限切れ
- ワークフローが変わった
なぜ壊れるか: 古いワークフロー向けに構築。 依存関係が壊れた。 興味を失った。 自分向けドキュメントなし。
推奨修正:
持続可能なパーソナルツール
放置に向けた設計
未来のあなたは覚えていないと仮定:
- なぜこれを構築したか
- 動作方法
- データはどこか
- 依存関係は何か
それに応じて構築:
- WHY を説明する README (WHAT だけでなく)
- シンプルなアーキテクチャ
- 最小限の依存関係
- 標準フォーマットのデータ
最小依存関係戦略
| アプローチ | 使用時期 |
|---|---|
| ゼロ依存 | シンプルスクリプト |
| コア依存のみ | CLI ツール |
| バージョンロック | 重要ツール |
| 依存バンドル | 配布 |
自己説明パターン
#!/usr/bin/env node
/**
* WHAT: X を Y に変換
* WHY: Z プロセスが手動だったため
* WHERE: データは ~/.mytool/
* DEPS: ffmpeg インストール必要
*
* 最後使用: 2024-01
* 以降も動作確認: 2024-01
*/
// ツールコードはここ
グレースフルデグラデーション
// 物が壊れたら役立つように失敗
try {
await runMainFeature();
} catch (err) {
console.error('Tool broken. Error:', err.message);
console.error('');
console.error('Data location: ~/.mytool/data.json');
console.error('You can manually access your data there.');
process.exit(1);
}
やめるべき時
放置する兆候:
- 6ヶ月以上未使用
- 問題がもう存在しない
- より良いツール存在
- 異なるアプローチで再構築したい
グレースフルに放置:
- クリア状態でアーカイブ
- 放置理由を記録
- データを標準フォーマットにエクスポート
- 削除しない (後で欲しいかも)
セキュリティ脆弱性を持つパーソナルツール
重大度: 高
状況: パーソナルツールが機密データや アクセス を露出
症状:
- API キーがソースコードに
- ツールがネットワークでアクセス可能
- 認証情報が git 履歴に
- 個人データが露出
なぜ壊れるか: 「自分用だけ」という考え。 認証情報がコードに。 入力バリデーションなし。 誤ったテキスト露出。
推奨修正:
パーソナルツールのセキュリティ
一般的な誤り
| リスク | 対策 |
|---|---|
| API キー がコードに | 環境変数や設定ファイル使用 |
| ツールがネットワーク露出 | ローカルホストのみにバインド |
| 入力バリデーションなし | 自分の入力も検証 |
| ログに秘密含む | ロギングをサニタイズ |
| 秘密を git コミット | 設定ファイルを .gitignore |
認証情報管理
// コードに入れない
const API_KEY = 'sk-xxx'; // 悪い
// 環境変数
const API_KEY = process.env.MY_API_KEY;
// 設定ファイル (gitignore)
import { readFileSync } from 'fs';
const config = JSON.parse(
readFileSync(join(homedir(), '.mytool', 'config.json'))
);
const API_KEY = config.apiKey;
ローカルホストのみサーバー
// ツールが Web UI を持つ場合
import express from 'express';
const app = express();
// パーソナルツールは常にローカルホストにバインド
app.listen(3000, '127.0.0.1', () => {
console.log('Running on http://localhost:3000');
});
// パーソナルツールではこれはしない:
// app.listen(3000, '0.0.0.0') // ネットワークに露出!
共有前に
チェックリスト:
[ ] ハードコード認証情報なし
[ ] 設定ファイルは gitignore
[ ] README が認証情報セットアップについて記述
[ ] 個人パスがコードに含まれない
[ ] 機密データがリポジトリに含まれない
[ ] git 履歴から秘密をレビュー
バリデーションチェック
ハードコードされた絶対パス
重大度: 中
メッセージ: ハードコードされた絶対パス - homedir() または環境変数を使用してください。
修正アクション: os.homedir() または path.join を移植可能パスに使用
ハードコードされた認証情報
重大度: 重大
メッセージ: ハードコード認証情報の可能性 - 環境変数または設定ファイルを使用してください。
修正アクション: process.env.VAR または外部設定ファイル (gitignore) に移動
すべてのインターフェースにバインドされたサーバー
重大度: 高
メッセージ: サーバーがネットワーク露出 - パーソナルツールはローカルホストにバインドしてください。
修正アクション: '0.0.0.0' の代わりに '127.0.0.1' または 'localhost' を使用
エラーハンドリング不足
重大度: 中
メッセージ: エラーハンドリングなしの同期操作 - try/catch でラップしてください。
修正アクション: グレースフルエラーメッセージのため try/catch 追加
ヘルプなし CLI
重大度: 低
メッセージ: CLI にヘルプなし - 未来のあなたは使用方法を忘れます。
修正アクション: CLI コマンドに .description() と --help を追加
README なし ツール
重大度: 低
メッセージ: README なし - 未来のあなた用にドキュメント。
修正アクション: README 追加: 何をするか、なぜ構築したか、どう使うか
デバッグ console.log が残存
重大度: 低
メッセージ: デバッグロギングが残存 - 削除または適切なロギング使用。
修正アクション: デバッグログ削除またはレベル設定ロガー使用
スクリプトに Shebang なし
重大度: 低
メッセージ: スクリプトに shebang なし - 直接実行できません。
修正アクション: ファイル最上部に #!/usr/bin/env node (または python3) 追加
バージョンなし ツール
重大度: 低
メッセージ: バージョン追跡なし - 更新時に混乱します。
修正アクション: package.json にバージョン追加と --version フラグ追加
コラボレーション
委譲トリガー
- sell|monetize|SaaS|charge -> micro-saas-launcher (パーソナルツール製品化)
- browser extension|chrome extension -> browser-extension-builder (ブラウザベースツール構築)
- automate|workflow|cron|trigger -> workflow-automation (自動化セットアップ)
- API|server|database|postgres -> backend (バックエンド インフラストラクチャ)
- telegram bot -> telegram-bot-builder (Telegram ベースツール)
- AI|GPT|Claude|LLM -> ai-wrapper-product (AI パワードツール)
CLI ツール がプロダクト化
スキル: personal-tool-builder, micro-saas-launcher
ワークフロー:
1. 自分用に CLI を構築
2. 友人/同僚と共有
3. フィードバック取得して反復
4. Web UI 追加 (オプション)
5. 決済設定
6. 公開ローンチ
パーソナル自動化スタック
スキル: personal-tool-builder, workflow-automation, backend
ワークフロー:
1. 繰り返しタスク特定
2. 自動化スクリプト構築
3. トリガー追加 (cron、webhook)
4. 結果/ログ保存
5. モニタリングして反復
AI パワード パーソナルツール
スキル: personal-tool-builder, ai-wrapper-product
ワークフロー:
1. AI が支援できるタスク特定
2. 最小限のラッパー構築
3. ユースケース向けプロンプト調整
4. 日常ワークフロー追加
5. 有用なら共有検討
ブラウザツール から拡張機能へ
スキル: personal-tool-builder, browser-extension-builder
ワークフロー:
1. ブックマークレットまたはユーザースクリプト構築
2. 問題解決を検証
3. 適切な拡張機能に変換
4. Chrome/Firefox ストア追加
5. 他の人と共有
関連スキル
相性の良いスキル: micro-saas-launcher, browser-extension-builder, workflow-automation, backend
使用時期
- ユーザーが言及またはほのめかす: ツール構築
- ユーザーが言及またはほのめかす: パーソナルツール
- ユーザーが言及またはほのめかす: 自分のニーズに応える
- ユーザーが言及またはほのめかす: 自分の問題を解く
- ユーザーが言及またはほのめかす: CLI ツール
- ユーザーが言及またはほのめかす: ローカルアプリ
- ユーザーが言及またはほのめかす: 自動化する
- ユーザーが言及またはほのめかす: 自分用に構築
制限事項
- このスキルは上記に明確に合致するタスクのみ使用してください。
- 出力を環境固有のバリデーション、テスト、またはエキスパートレビューの代替と見なしてください。
- 必須入力、権限、セーフティバウンダリ、または成功基準が欠けている場合は停止して明確化を求めてください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- sickn33
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。