Community研究&データ分析github.com

detro/quirks

スキルは持っていても、私はクセ者だ!

quirks とは?

このスキルは、AIエージェントがプロジェクトのツールバージョンと依存関係を `asdf` で管理できるようにします。`.tool-versions` ファイルの作成・更新、プラグインのインストール・更新を自動化し、サードパーティプラグインをインストールする際のセキュリティガードレールを強制します。Node.js、Python、Ruby、Go などの複数ランタイムを管理するプロジェクトに最適です。公式コミュニティインデックスにないプラグインは、ユーザーの明示的な許可なしにインストールされないため、不審なコードの実行を防ぎます。

対応~Claude Code~Codex CLI~Cursor
npx skills add detro/quirks

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ASDF Manager

このスキルにより、エージェントは asdf を使用してプロジェクトのツールバージョンと依存関係を管理できます。.tool-versions ファイルの作成・更新、プラグインのインストールと更新を処理し、サードパーティのプラグインをインストールする際に重要なセキュリティガードレールを適用します。

使用するタイミング

  • プロジェクトがランタイム環境(例:Node.js、Python、Ruby、Go、Elixir、Rust)の管理に asdf を使用している場合。
  • リポジトリに .tool-versions ファイルが存在するか、ユーザーがマルチランタイムのバージョン管理を設定したい場合。
  • ユーザーが「すべてのツールをアップデート」または特定のツールを「最新」バージョンに設定するよう要求した場合。
  • ユーザーが asdf で管理可能な新しい開発ツール、言語ランタイム、またはユーティリティを追加したい場合。

使用しないタイミング

  • プロジェクトが他のパッケージ/ランタイムマネージャー(mise、fnm、nvm、pyenv、rbenv、gvm、asdf-vm など)を使用するように明示的に設定されている場合。
  • システムレベルのパッケージマネージャー(brew、apt、pacman、dnf など)で管理すべきパッケージをインストールする場合で、プロジェクトごとのバージョン固定が不要な場合。

入力

入力必須説明
ツール名はいランタイムまたはツールの名前(例:nodejs、python、golang)
バージョンいいえ設定またはインストールする特定のバージョン(例:18.16.0、latest、system)
アクションはい実行する操作:update-all、install-tool、set-version、add-plugin
グローバルいいえtrue に設定すると、ローカルプロジェクトディレクトリではなく、グローバル($HOME/.tool-versions)に設定を適用します。

ワークフロー

ステップ 1: ASDF 環境の検出と検証

asdf コマンドを実行する前に、エージェントの現在のシェル環境で asdf がインストールされ、アクセス可能であることを確認します。

  1. which asdf または asdf --version を実行します。
  2. asdf が見つからない場合、一般的なインストールパス($HOME/.asdf/bin/asdf や /opt/homebrew/bin/asdf など)を確認します。インストールされているが source されていない場合は、source する方法をユーザーに案内します。
  3. システムに asdf が完全に存在しない場合、スキルは早期に終了し、ユーザーに次のように伝えます。 「https://asdf-vm.com/guide/getting-started.html からインストールしてください。」
    • 理由: asdf コア実行ファイルがインストールされていないとスキルは続行できません。役立つインストール URL とともに早期に失敗することで、スムーズなユーザーセットアップ体験を保証します。

ステップ 2: 「すべてのツールを更新」要求への対応

ユーザーがすべてのツールを最新バージョンに更新するよう要求した場合:

  1. .tool-versions ファイルを見つけます(通常はプロジェクトルート、または親ディレクトリを確認します)。
  2. .tool-versions ファイルで定義されているツールのリストを読み取ります。
  3. 見つかった各ツールに対して、以下のコマンドを実行して最新バージョンを自動的に解決し書き込みます:
    asdf set <tool-name> latest
    
    • 理由: asdf set <tool-name> latest を使用する方が .tool-versions を手動で編集するよりも正確で堅牢です。これは asdf が実際の解決済みの最新利用可能バージョンを取得し、必要に応じてダウンロード/コンパイルし、正確な静的バージョン文字列を .tool-versions ファイルに書き戻すためです。

ステップ 3: プラグインの検索と追加(コミュニティインデックスの確認)

ユーザーがツール/プラグインのインストールを要求した場合:

  1. まず、プラグインがすでにインストールされているか確認するために次を実行します:
    asdf plugin list
    
    すでにインストールされている場合は、ステップ 5 に進みます。
  2. プラグインがインストールされていない場合、公式の asdf コミュニティインデックスに存在するか確認します:
    asdf plugin list all
    
    出力をフィルタリングまたは検索して、目的のツール名を見つけます。
    • 理由: コミュニティインデックスを確認することで、キュレーションされレビューされたプラグインのみをインストールすることが保証されます。公式インデックス外のサードパーティプラグインは、カスタムフックスクリプトを実行し、ホストシステム上で信頼できないバイナリをコンパイル/インストールする権限を持ちます。

ステップ 4: カスタム/非コミュニティプラグインに対する厳格なセキュリティチェック

要求されたツールが公式コミュニティインデックス(asdf plugin list all の出力)に存在しない場合:

  1. エージェントにオンラインで検索するよう指示(検索エンジン、GitHub、ドキュメントなど)し、asdf プラグインの正しい正当なソースリポジトリ URL を見つけます。
  2. ユーザーの明示的な許可なしにカスタムプラグインのインストールを進めてはいけません。 これは重要なセキュリティ境界です。
  3. 構造化された許可リクエストをユーザーに作成し、以下を含めます:
    • プラグインが公式の asdf コミュニティリポジトリリストにないという明確な警告。
    • 見つかったプラグインの正確なリポジトリ URL(例:https://github.com/someone/asdf-mytool)。
    • サードパーティプラグインのセキュリティへの影響に関する警告(インストール/使用中に任意のシェルコードを実行する可能性があること)。
    • インストールを続行する許可を求める明示的なプロンプト。
  4. ユーザーが同意した場合にのみ、確認された URL を使用してカスタムプラグインの追加を進めます:
    asdf plugin add <tool-name> <plugin-url>
    

ステップ 5: ツールバージョンのインストールと設定

プラグインがインストール/追加されたら:

  1. ユーザーが特定のバージョンを要求した場合、それをインストールします:
    asdf install <tool-name> <version>
    
    それ以外の場合は、最新バージョンをインストールします:
    asdf install <tool-name> latest
    
  2. プロジェクト設定にバージョンを書き込みます:
    • ローカルプロジェクトのバージョン管理(デフォルト):
      asdf set <tool-name> <version-or-latest>
      
    • グローバルユーザーレベルのバージョン管理:
      asdf set -u <tool-name> <version-or-latest>
      
  3. インストール後に asdf reshim を実行して、すべてのシムが更新され、新しくインストールされた実行ファイルがすぐに使用可能であることを確認します。

検証

  • asdf current を実行して、新しく設定されたツールバージョンがディレクトリ内でアクティブであり、正しく解決されることを確認します。
  • .tool-versions ファイルが設定されたツールとバージョンと一致していることを確認します。
  • 公式インデックス外で追加されたカスタムプラグインは、ユーザーの明示的な確認後にのみインストールされたことを確認します。

よくある落とし穴

落とし穴解決策
エージェントシェルで asdf: command not foundasdf はインストールされているが、アクティブなシェルで source されていない可能性があります。asdf.sh(例:/opt/homebrew/opt/asdf/libexec/asdf.sh または $HOME/.asdf/asdf.sh)を見つけて source するか、/shims をエージェントコンテキストで動的に $PATH に追加します。
インストール後、ツールの実行ファイルが動作しないasdf reshim を実行してシムディレクトリラッパーを再生成し、シェルが新しいバイナリを見つけられるようにします。
コンパイルツール不足によりインストールが失敗するRuby、Python、Erlang などの言語は asdf を使用してソースからコンパイルする場合、ローカルのビルド依存関係(gcc、openssl、make、libyaml など)が必要です。ビルドログに基づいて、不足している依存関係をユーザーに伝えます。
非対話型シェルが対話型プロンプトでブロックされるasdf コマンドが非対話的に実行されるか、依存関係が事前に満たされていることを確認します。

参照

関連スキル