スキル一覧に戻る
sumik5

researching-libraries

by sumik5

1🍴 0📅 2026年1月24日
GitHubで見るManusで実行

SKILL.md


name: researching-libraries description: Researches existing libraries before implementation. Required before writing any new functionality. Prevents reinventing the wheel by finding and evaluating existing packages.

ライブラリ調査(車輪の再発明禁止)

🎯 使用タイミング

  • 新機能実装前(必須)
  • ユーティリティ関数を書こうとした時
  • 複雑なロジック実装前
  • 外部サービス連携時

🚨 絶対ルール

❌ 調査せずに実装を始める → 禁止
✅ 必ず既存ライブラリを調査してから実装

自作が許可されるケース:

  • 適切なライブラリが存在しない
  • ライブラリが要件を満たさない
  • セキュリティ・ライセンス上の問題がある
  • 依存関係が過剰になる

📚 ドキュメント構成

1. 言語別検索方法

各言語のパッケージ検索コマンドとMCP活用法:

  • JavaScript/TypeScript (npm)
  • Python (PyPI)
  • Go (pkg.go.dev)
  • Rust (crates.io)
  • Ruby (RubyGems)

2. 評価基準

ライブラリ採用の判断基準:

  • 信頼性指標(Stars、ダウンロード数)
  • メンテナンス状況
  • セキュリティチェック
  • ライセンス確認

🔄 調査フロー

Step 1: 機能の明確化

「〇〇を実装したい」
  ↓
キーワードを抽出
  ↓
検索クエリを作成

Step 2: ライブラリ検索

MCP優先(推奨):

# Context7でライブラリドキュメント取得
context7: resolve-library-id("zod")
context7: get-library-docs("/colinhacks/zod")

# DeepWikiでGitHubリポジトリ調査
deepwiki: ask_question("vercel/next.js", "認証ライブラリの推奨は?")

コマンド実行(補助):

# npm
npm search <keyword> --long

# Go
go list -m all | grep <keyword>

Step 3: 候補の評価

基準最低ライン
⭐ GitHub Stars500+
📅 最終更新6ヶ月以内
📦 週間DL数10,000+
🔒 脆弱性0件

Step 4: 決定とドキュメント

## ライブラリ選定理由

### 採用: `zod`
- 目的: スキーマバリデーション
- Stars: 30k+
- 理由: TypeScript-first、軽量、活発なメンテナンス

### 見送り: `yup`
- 理由: TypeScriptサポートが限定的

🎯 よくある実装とライブラリ対応

JavaScript/TypeScript

やりたいこと使うべきライブラリ
バリデーションzod, valibot, yup
日付操作date-fns, dayjs
HTTP通信ky, axios, got
状態管理zustand, jotai
フォームreact-hook-form
テーブル@tanstack/table
アニメーションframer-motion
ユーティリティlodash-es, radash

Python

やりたいこと使うべきライブラリ
バリデーションpydantic
HTTP通信httpx, aiohttp
CLI作成typer, click
設定管理python-dotenv, dynaconf
日付操作pendulum, arrow
データ処理polars, pandas

Go

やりたいこと使うべきライブラリ
HTTP Routerchi, echo, gin
バリデーションgo-playground/validator
設定読込viper, envconfig
ログslog (標準), zerolog
テストtestify, ginkgo

💡 アンチパターン

❌ よくある間違い

// ❌ Bad: 自作のdebounce関数
function debounce(fn, ms) {
  let timeout;
  return (...args) => {
    clearTimeout(timeout);
    timeout = setTimeout(() => fn(...args), ms);
  };
}

// ✅ Good: lodash-esを使用
import { debounce } from 'lodash-es';
# ❌ Bad: 自作の日付パース
def parse_date(date_str):
    # 複雑なパース処理...

# ✅ Good: pendulumを使用
import pendulum
dt = pendulum.parse(date_str)

❌ 過度な依存も避ける

// ❌ Bad: 1関数のためにlodash全体をインポート
import _ from 'lodash';
_.isEmpty(obj);

// ✅ Good: 必要な関数のみインポート
import isEmpty from 'lodash-es/isEmpty';

// ✅ Better: 標準機能で十分な場合
Object.keys(obj).length === 0;

🔗 関連スキル

📖 次のステップ

  1. 検索方法を知りたい: 言語別検索方法
  2. 評価基準を確認: 評価基準
  3. すぐに探したい: 上の「よくある実装とライブラリ対応」表を参照

スコア

総合スコア

40/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です