0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

研究者のための Agent Skills 開発手法 — AI エージェントにドメイン専門知識を教える

0
Last updated at Posted at 2026-03-23

はじめに — なぜ研究者が Agent Skills を開発すべきか

AI エージェントは汎用的に賢いですが、あなたの研究分野の専門知識 は持っていません。

scRNA-seq のクラスタリングパイプライン、メタボロミクスの前処理手順、PPI ネットワーク解析のベストプラクティス ——こうした「研究室で当たり前に使われている手順」をAIエージェントに教える仕組みが Agent Skills です。

従来の AI 活用 Agent Skills 活用
やること 毎回プロンプトで手順を説明する SKILL.md に手順を書いておくだけ
特徴 属人化・再現不可 共有・再利用可能

本記事では、Agent Skills 仕様と、科学研究向けスキルコレクション SATORI(190 個のスキルを収録)を参照しながら、プログラミング初心者の研究者でも自分のドメイン専用の Agent Skills を開発できるよう、ステップバイステップで解説します。

想定読者: 実験系研究者(プログラミング初心者 OK)
所要時間: 約 15 分
前提知識: テキストエディタでファイルを編集できること

Agent Skills とは?

オープンスタンダード

Agent Skills は、Anthropic が開発し、オープンスタンダードとして公開した AI エージェント拡張フォーマット です1

Skills are folders of instructions, scripts, and resources that agents can discover and use to perform better at specific tasks.
(スキルとは、エージェントが特定のタスクをより正確・効率的に実行するために発見・利用できる、指示・スクリプト・リソースのフォルダです)

GitHub Copilot をはじめ、複数の AI 開発ツールで採用されており、一度書けばどこでも使える ポータビリティが特徴です。

スキルの 3 つの価値

価値 説明 研究者にとってのメリット
ドメイン専門知識 専門的な知識を再利用可能な指示としてパッケージ化 解析手法を研究室全体で共有
再現可能なワークフロー 複数ステップのタスクを一貫した手順に 実験解析の再現性を確保
相互運用性 同じスキルを異なる AI エージェントで利用可能 ツールに縛られない

SKILL.md の構造を理解する

Agent Skills の中核は SKILL.md という 1 つのファイルです。これだけあれば、スキルとして機能します。

最小構成

my-skill/
└── SKILL.md          # ← これだけで OK!

SKILL.md の書き方

SKILL.md は YAML フロントマター + Markdown 本文 の 2 パートで構成されます。

---
name: my-skill
description: |
  スキルの説明をここに書きます。
  どんなタスクで使うべきかを記述します。
---

# スキルの指示内容

ここに AI エージェントへの具体的な指示を Markdown で書きます。

YAML フロントマター(メタデータ)

フィールド 必須 説明
name スキル名(小文字英数字とハイフンのみ、最大 64 文字)
description スキルの説明(最大 1024 文字)
license ライセンス
compatibility 動作環境の要件
metadata 追加メタデータ(キー:値)

name のルール: 小文字・数字・ハイフンのみ。ハイフンで始めたり終わったりしない。ディレクトリ名と一致させる。
例: ✅ my-analysis-pipelineMyAnalysis-my-skill

Markdown 本文(指示内容)

YAML フロントマターの後に、AI エージェントへの指示を Markdown で自由に記述します。推奨する構成は以下の通りです。

# スキル名

## When to Use
- このスキルが適用されるタスクの条件

## Procedure
- ステップバイステップの指示

## Code Examples
- 入力と期待される出力の例

## Caveats
- よくある落とし穴や例外処理

実践:最初の Agent Skills を作ってみよう

ここから実際に、Western Blot の定量解析を行うスキルを作ってみましょう。実験系研究者なら馴染みのあるタスクです。

ステップ 1:ディレクトリを作成

mkdir western-blot-quantification

ステップ 2:SKILL.md を作成

お使いのテキストエディタで western-blot-quantification/SKILL.md を作成します。

western-blot-quantification/SKILL.md
---
name: western-blot-quantification
description: |
  Western Blot バンドの定量解析スキル。画像からバンド強度を測定し、
  ハウスキーピング遺伝子(β-actin, GAPDH 等)で正規化した相対発現量を
  算出する。統計検定(t検定/ANOVA)とグラフ作成まで一貫して実行。
---

# Western Blot 定量解析

## When to Use

- Western Blot の画像(TIFF/PNG)からバンド強度を定量したいとき
- ハウスキーピング遺伝子で正規化した相対発現量を求めたいとき
- 複数サンプル間の統計的比較(t検定, ANOVA)を行いたいとき

## Procedure

### 1. 画像の読み込みと前処理

- TIFF または PNG 形式の画像を読み込む
- グレースケール変換を行う
- 必要に応じてバックグラウンド補正(Rolling Ball 法)を適用する

### 2. バンド強度の測定

- 各バンドの ROI(Region of Interest)を設定する
- ROI 内のピクセル強度の積分値を算出する
- バックグラウンド領域の値を差し引く

### 3. 正規化

- ハウスキーピング遺伝子のバンド強度で割る
- コントロール群を 1.0 として相対値を算出する

### 4. 統計解析とグラフ作成

- 2 群比較: Student's t-test(Welch 補正)
- 3 群以上: 一元配置 ANOVA + Tukey HSD 事後検定
- 棒グラフ + 個別データ点 + エラーバー(SEM)で可視化する

## Output Files

| ファイル | 内容 |
|:--|:--|
| `results/band_intensities.csv` | 各バンドの生の強度値 |
| `results/normalized_expression.csv` | 正規化後の相対発現量 |
| `results/statistical_tests.csv` | 統計検定の結果(p値) |
| `figures/expression_barplot.png` | 発現量の棒グラフ |

## Code Examples

```python
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def normalize_expression(target_intensity, housekeeping_intensity,
                         control_indices):
    """
    ハウスキーピング遺伝子で正規化し、コントロール群を 1.0 とする。

    Parameters
    ----------
    target_intensity : array-like
        ターゲットタンパク質のバンド強度
    housekeeping_intensity : array-like
        ハウスキーピング遺伝子のバンド強度
    control_indices : list of int
        コントロール群のサンプルインデックス

    Returns
    -------
    np.ndarray
        正規化された相対発現量
    """
    ratio = np.array(target_intensity) / np.array(housekeeping_intensity)
    control_mean = np.mean(ratio[control_indices])
    return ratio / control_mean
```

## Caveats

- 過飽和(saturation)したバンドは定量に使用しないこと
- ハウスキーピング遺伝子が処理条件で変動しないことを確認すること
- 生物学的反復は最低 3 回(n ≥ 3)を推奨

ポイント: SKILL.md は「AI への指示書」です。あなたが後輩に解析手順を教えるように書けば OK です。

ステップ 3:より充実したスキルにする(オプション)

スキルが複雑になったら、scripts/references/ ディレクトリを追加できます。

western-blot-quantification/
├── SKILL.md                      # メインの指示ファイル
├── scripts/
│   └── quantify_bands.py         # 実行可能な解析スクリプト
├── references/
│   └── normalization-methods.md  # 正規化手法の詳細解説
└── assets/
    └── example-blot.png          # サンプル画像

Progressive Disclosure(段階的開示)

Agent Skills は効率的にコンテキストを使うため、3 段階で情報を読み込みます。

段階 読み込み内容 トークン量 タイミング
1️⃣ メタデータ namedescription のみ 〜100 常時ロード
2️⃣ メイン指示 SKILL.md 本文 5000 以下 スキル選択時
3️⃣ 追加リソース scripts/, references/, assets/ 必要分のみ 必要な時だけ

これにより、SKILL.md 本文は 5000 トークン以下(目安:500 行以内) に収め、詳細は参照ファイルに分離することが推奨されています。

5000 トークン制限: SKILL.md 本文が 5000 トークンを超えると、AI エージェントのコンテキストを圧迫し、指示の理解精度が低下します。長くなる場合は references/scripts/ にファイルを分離してください。

実例:SATORI の科学スキルを見てみよう

SATORI は、科学データ解析のための Agent Skills コレクションで、190 個のスキル を収録しています。実際のスキルがどのように書かれているか見てみましょう。

バイオインフォマティクス解析スキルの例

以下は SATORI に収録されている scientific-bioinformatics スキルの一部です。

scientific-bioinformatics/SKILL.md
---
name: scientific-bioinformatics
description: |
  バイオインフォマティクス解析パイプラインのスキル。scRNA-seq(Scanpy)、
  ゲノム配列解析(BioPython)、PPI ネットワーク解析(NetworkX)、
  メタボロミクスの前処理を行う際に使用。
---

# Scientific Bioinformatics Pipelines

## When to Use

- scRNA-seq データの QC・前処理・クラスタリング・DEG 解析
- ゲノム/タンパク質配列のアラインメント・系統解析
- タンパク質相互作用ネットワークの構築・中心性解析
- メタボロミクスの前処理(補完・変換・スケーリング)・PLS-DA

このスキルには Scanpy を使った scRNA-seq パイプラインのコード例が含まれています。

import scanpy as sc

def scrnaseq_pipeline(adata, min_genes=200, max_genes=5000,
                       max_pct_mito=20, n_hvg=2000, resolution=0.5):
    """Scanpy の標準 scRNA-seq 解析パイプライン。"""
    # QC フィルタリング
    sc.pp.filter_cells(adata, min_genes=min_genes)
    sc.pp.filter_genes(adata, min_cells=3)
    adata.var["mt"] = adata.var_names.str.startswith("MT-")
    sc.pp.calculate_qc_metrics(adata, qc_vars=["mt"],
                                percent_top=None, inplace=True)
    adata = adata[adata.obs["pct_counts_mt"] < max_pct_mito].copy()

    # 正規化 → HVG → PCA → Neighbors → UMAP → Leiden
    sc.pp.normalize_total(adata, target_sum=1e4)
    sc.pp.log1p(adata)
    sc.pp.highly_variable_genes(adata, n_top_genes=n_hvg)
    adata.raw = adata
    adata = adata[:, adata.var["highly_variable"]].copy()
    sc.pp.scale(adata, max_value=10)
    sc.tl.pca(adata, n_comps=50)
    sc.pp.neighbors(adata, n_pcs=30)
    sc.tl.umap(adata)
    sc.tl.leiden(adata, resolution=resolution)
    return adata

学べるポイント: SATORI のスキルは「研究で確立した解析パターンをそのまま SKILL.md に書き下ろした」ものです。あなたも自分の解析パイプラインを同じように書けます。

SATORI のスキル分類(26 カテゴリ・190 スキル)

SATORI のスキルは以下のような分類で整理されています。

カテゴリ スキル数 内容例
基盤・ワークフロー 17 パイプライン構築、前処理、論文執筆
統計・探索的解析 11 EDA、仮説検定、可視化
機械学習・モデリング 11 回帰、分類、AutoML
生命科学・オミクス 28 scRNA-seq、プロテオミクス、パスウェイ解析
創薬・ファーマコロジー 9 標的プロファイリング、ADMET、ドッキング
構造生物学 7 AlphaFold、タンパク質設計、PPI
精密医療 6 バリアント解釈、臨床意思決定
腫瘍学・疾患研究 10 がんゲノミクス、精密腫瘍学
Deep Research 4 文献検索、エビデンス評価
その他(計算材料、疫学、NLP 等) 77 量子計算、ベイズ統計、テキストマイニング

これらすべてが ToolUniverse 経由で 1,200 以上の外部科学データベースツール と連携可能です。

あなたのドメイン用スキルを設計するコツ

1. 日常の解析手順を書き出す

まず、あなたが普段行っている解析手順を箇条書きにしてみましょう。

例:フローサイトメトリー解析の場合
1. FCS ファイルを読み込む
2. 前方散乱/側方散乱でデブリを除去する
3. シングレットゲーティングを行う
4. 蛍光補正(コンペンセーション)を適用する
5. 各マーカーでゲーティングし、ポジティブ率を算出する
6. 統計比較とグラフ作成を行う

2. SKILL.md に変換する

箇条書きをそのまま SKILL.md の構造に落とし込みます。

flow-cytometry-analysis/SKILL.md
---
name: flow-cytometry-analysis
description: |
  フローサイトメトリー(FCM)データの解析スキル。FCS ファイルの読み込み、
  ゲーティング戦略の設計、蛍光補正、ポジティブ率算出、統計比較を実行。
---

# フローサイトメトリー解析

## When to Use
- FCS ファイルからフローサイトメトリーデータを解析したいとき
- 手動ゲーティングの結果を定量化したいとき
- 複数サンプル間でポジティブ率を統計比較したいとき

## Procedure

### 1. データの読み込み
- FCS 3.0/3.1 形式のファイルを読み込む
- FlowCal または fcsparser ライブラリを使用する

### 2. 前処理
- FSC-A vs SSC-A で細胞集団をゲーティング(デブリ除去)
- FSC-H vs FSC-A でシングレットゲーティング
- 必要に応じて生死判定マーカーで dead cell を除外する

### 3. 蛍光補正
- 単染色コントロールから補正行列を算出する
- 全サンプルに補正を適用する

### 4. ゲーティングと定量
- FMO コントロールを基準にポジティブ/ネガティブの閾値を設定する
- 各マーカーのポジティブ率(%)を算出する

### 5. 統計解析
- 2 群: Mann-Whitney U 検定(ノンパラメトリック)
- 3 群以上: Kruskal-Wallis 検定 + Dunn の事後検定

## Output Files
| ファイル | 内容 |
|:--|:--|
| `results/gating_summary.csv` | 各ゲートの細胞数と割合 |
| `results/positive_rates.csv` | マーカー別ポジティブ率 |
| `figures/gating_plots.png` | ゲーティング図 |
| `figures/comparison_boxplot.png` | 群間比較のボックスプロット |

3. 良いスキルを書くためのチェックリスト

チェック項目 説明
name が命名規則に従っている 小文字英数字 + ハイフン、64 文字以内
description が具体的 「何をするか」と「いつ使うか」を含む
手順が明確 後輩に教えるレベルの具体性がある
入出力が定義されている 入力ファイルと出力ファイルが明記されている
コード例がある 主要な処理の Python コード例を含む
注意事項がある よくある失敗パターンを記載
5000 トークン以下 超える場合は references/ に分離(目安:500 行以内)

CoreClaw で Agent Skills を動かす

作成した Agent Skills は、CoreClaw 上で動作させることができます。CoreClaw は AI for Science のための AI Agent OS で、Docker コンテナ内で安全に AI エージェントを実行するプラットフォームです。

CoreClaw の仕組み

スキルの登録方法

方法 1: ディレクトリに配置する

# skills/ ディレクトリにスキルフォルダをコピーするだけ
cp -r western-blot-quantification/ skills/

方法 2: ZIP アップロード(Web UI から)

  1. スキルフォルダを ZIP に圧縮する
  2. CoreClaw の Web 画面で左ペイン下部の 「⚙ Settings」 を開く
  3. Skills タブの 「📦 Upload ZIP」 からアップロード

方法 3: チャットグループに割り当て

Web UI のサイドバーで新しいチャットグループを作成し、スキルセレクターからチェックを入れるだけで使えます。

セキュリティ:スキルスキャナー

サードパーティのスキルを使う場合、CoreClaw の スキルスキャナー でセキュリティスキャンを実行できます。

ステータス 意味
🟢 Safe 安全(検出なし)
🟡 Caution 中リスクのパターンを検出
🔴 Warning 高リスクのパターンを検出

スキルスキャナーは簡易的なチェックツールです。最終的にはご自身でスキルの内容を確認し、自己責任で採用してください。

分野別のスキル設計ガイド

あなたの研究分野に合わせたスキルの設計例を示します。

化学系

name: nmr-spectrum-analysis
description: |
  NMR スペクトル(1H, 13C, COSY, HSQC)の解析スキル。
  ケミカルシフトの帰属、結合定数の算出、構造推定を支援。

物理系

name: xrd-crystal-structure
description: |
  X 線回折(XRD)データの解析スキル。ピーク同定、
  格子定数の算出、Rietveld 精密化の手順を提供。

生態学系

name: species-distribution-modeling
description: |
  種分布モデリング(SDM)のスキル。MaxEnt や Random Forest を用い、
  生息地適合度の予測と環境変数の重要度評価を実行。

医学系

name: clinical-trial-survival-analysis
description: |
  臨床試験データの生存時間解析スキル。Kaplan-Meier 法、
  Log-rank 検定、Cox 比例ハザードモデルの実行と結果解釈。

ヒント: まずは 自分が最も頻繁に行う解析 を 1 つ選び、スキルにしてみましょう。完璧を目指さず、使いながら改善するのがコツです。

サブスキルで複雑なワークフローを管理する

スキルが大きくなったら、サブスキル に分割して管理できます。

my-omics-pipeline/
├── SKILL.md                         # 親スキル(全体のオーケストレーション)
└── skills/
    ├── quality-control/
    │   └── SKILL.md                 # QC サブスキル
    ├── normalization/
    │   └── SKILL.md                 # 正規化サブスキル
    ├── differential-expression/
    │   └── SKILL.md                 # 差次的発現解析サブスキル
    └── pathway-enrichment/
        └── SKILL.md                 # パスウェイ解析サブスキル

SATORI の scientist スキルは、この構造で 195 個のサブスキル を管理しています。

scientist/
├── SKILL.md
└── skills/
    ├── scientific-hypothesis-pipeline/
    ├── scientific-protein-structure-analysis/
    ├── scientific-drug-target-profiling/
    ├── scientific-bioinformatics/
    └── ... (195 サブスキル)

ToolUniverse 連携:1,200 以上の科学ツールを活用

SATORI のスキルは、ToolUniverse の MCP(Model Context Protocol)サーバー経由で 1,200 以上の外部科学データベースツール と連携できます。

SATORI Skill(方法論・判断) 連携 ToolUniverse SMCP(データ取得・計算)
bioinformatics MCP UniProt, KEGG, GEO
drug-target-profiling MCP ChEMBL, DGIdb, PubChem
variant-interpretation MCP ClinVar, gnomAD, ClinGen
literature-search MCP PubMed, OpenAlex, Semantic Scholar
cancer-genomics MCP COSMIC, cBioPortal, DepMap

SKILL.md 内に「利用可能ツール」セクションを記載しておくと、AI エージェントが適切なツールを自動的に呼び出します。

## Available Tools

| カテゴリ | ツール | 用途 |
|:--|:--|:--|
| UniProt | `UniProt_search` | タンパク質検索 |
| KEGG | `kegg_get_pathway_info` | パスウェイ情報取得 |
| PubMed | `pubmed_search` | 文献検索 |

MCP の可能性 — データベースの先へ

ToolUniverse 経由の科学データベース連携は MCP 活用の一例にすぎません。MCP(Model Context Protocol)は、AI エージェントと外部システムをつなぐ 汎用プロトコル です。MCP サーバーを自作すれば、あなたの研究環境にある あらゆるツール を AI エージェントから利用可能にできます。

研究インフラとの連携例

連携先 MCP サーバーの役割 研究者のメリット
シミュレーションソフト GROMACS, LAMMPS, Gaussian 等にジョブを投入し、結果を取得 「このタンパク質の MD シミュレーションを 100ns 実行して」と指示するだけ
スーパーコンピュータ SLURM / PBS 等のジョブスケジューラにジョブを投入し、完了を監視 HPC のコマンド操作を覚えなくても大規模計算を実行可能
実験装置 分析機器の制御 API に接続し、測定データを自動取得 測定→解析→レポートの一気通貫ワークフロー
ラボノート / ELN Benchling, LabArchives 等に実験記録を自動登録 解析結果が自動的にラボノートに反映
クラウドストレージ AWS S3, Google Drive 等から大規模データを取得・保存 データの所在を意識せず解析に集中

MCP サーバー連携の仕組み

つまり、Agent Skills が「何をすべきか」を定義し、MCP サーバーが「どうやって外部と通信するか」を担う という役割分担です。スキルと MCP を組み合わせることで、自然言語の指示ひとつで研究ワークフロー全体を自動化できる可能性が広がります。

まとめ

Agent Skills は、あなたの研究ノウハウを AI エージェントに教える最もシンプルな方法 です。

研究者が行うこと AI が行うこと
SKILL.md を書く 手順を読み込む
「こう解析して」と指示 「了解、実行します」
手順を共有する どんなデータにも適用する

始め方のまとめ:

  1. 📝 書く: 日常の解析手順を SKILL.md に書き出す
  2. 📁 置く: スキルフォルダを skills/ に配置する
  3. 🚀 使う: CoreClaw で AI エージェントに解析を依頼する
  4. 🔄 改善する: 使いながら指示を修正・追加する

Agent Skills のオープンスタンダード仕様は GitHub で公開されており、コミュニティからの貢献を歓迎しています。科学研究向けのスキルコレクション SATORI も参考にしてください。

あなたの研究分野の最初の Agent Skill を、今日から作ってみませんか?

参考リンク

リソース URL
Agent Skills 仕様 https://github.com/agentskills/agentskills
Agent Skills 公式サイト https://agentskills.io
Agent Skills 仕様書(Specification) https://agentskills.io/specification
SATORI(科学用 Agent Skills) https://github.com/nahisaho/satori
CoreClaw(AI Agent OS) https://qiita.com/hisaho/items/7ff94c306db3785f4e68
ToolUniverse(科学ツール MCP) https://github.com/mims-harvard/ToolUniverse

付録:分野別 Agent Skills サンプル集

以下に、主要な研究分野を MECE(漏れなく・ダブりなく) で分類し、各分野のサンプル SKILL.md を掲載します。コピー&ペーストしてそのまま使用・改変できます。

大分類 サンプルスキル 対象の研究者
A. 生命科学・医学 scrna-seq-clustering 分子生物学、細胞生物学、医学
B. 化学・材料科学 nmr-structure-elucidation 有機化学、無機化学、材料工学
C. 物理学・工学 xrd-crystal-analysis 物性物理、結晶工学、半導体
D. 地球科学・環境科学 species-distribution-modeling 生態学、環境科学、地球科学
E. 情報科学・数理科学 ml-experiment-tracker 機械学習、統計、応用数学
F. 社会科学・人文科学 survey-text-analysis 心理学、社会学、言語学

A. 生命科学・医学:scRNA-seq クラスタリング解析

scrna-seq-clustering/SKILL.md
---
name: scrna-seq-clustering
description: |
  シングルセル RNA-seq データのクラスタリング解析スキル。Scanpy を用いた
  QC、正規化、HVG 選択、次元削減、クラスタリング、マーカー遺伝子同定を実行。
  10x Genomics データに対応。
---

# scRNA-seq クラスタリング解析

## When to Use

- 10x Genomics の scRNA-seq データを解析したいとき
- 細胞クラスタを同定し、マーカー遺伝子を特定したいとき
- UMAP による可視化とクラスタ間の差次的発現解析を行いたいとき

## Procedure

### 1. データ読み込みと QC

- `scanpy.read_10x_h5()` または `scanpy.read_10x_mtx()` でデータを読み込む
- ミトコンドリア遺伝子(`MT-` プレフィックス)の割合を算出する
- 以下の基準でフィルタリングする:
  - 最小遺伝子数: 200
  - 最大遺伝子数: 5000(ダブレット除去)
  - ミトコンドリア遺伝子割合: < 20%

### 2. 正規化と特徴量選択

- ライブラリサイズを 10,000 に正規化する
- Log1p 変換を適用する
- 上位 2000 個の高変動遺伝子(HVG)を選択する

### 3. 次元削減とクラスタリング

- PCA(50 成分)→ Neighbors(30 PC)→ UMAP
- Leiden アルゴリズムでクラスタリング(resolution = 0.5〜1.0)

### 4. マーカー遺伝子同定

- `scanpy.tl.rank_genes_groups()` で各クラスタのマーカーを同定する
- Wilcoxon 順位和検定を使用する
- 上位 20 遺伝子をヒートマップとドットプロットで可視化する

## Code Examples

```python
import scanpy as sc

# データ読み込みと QC
adata = sc.read_10x_h5("filtered_feature_bc_matrix.h5")
adata.var_names_make_unique()
adata.var["mt"] = adata.var_names.str.startswith("MT-")
sc.pp.calculate_qc_metrics(adata, qc_vars=["mt"], inplace=True)
adata = adata[adata.obs["pct_counts_mt"] < 20].copy()

# 正規化 → HVG → PCA → クラスタリング
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
sc.pp.highly_variable_genes(adata, n_top_genes=2000)
adata = adata[:, adata.var["highly_variable"]].copy()
sc.pp.scale(adata, max_value=10)
sc.tl.pca(adata, n_comps=50)
sc.pp.neighbors(adata, n_pcs=30)
sc.tl.leiden(adata, resolution=0.8)
sc.tl.umap(adata)

# マーカー遺伝子同定
sc.tl.rank_genes_groups(adata, groupby="leiden", method="wilcoxon")
sc.pl.rank_genes_groups_dotplot(adata, n_genes=5, save="markers.png")
```

## Output Files

| ファイル | 内容 |
|:--|:--|
| `figures/umap_clusters.png` | UMAP クラスタ可視化 |
| `figures/markers.png` | マーカー遺伝子ドットプロット |
| `results/markers_per_cluster.csv` | クラスタごとのマーカー遺伝子リスト |

## Caveats

- バッチ効果がある場合は `scanorama``harmony` で補正すること
- resolution パラメータはデータに応じて 0.3〜1.5 で調整すること
- ダブレット検出には事前に `scrublet` を適用することを推奨

B. 化学・材料科学:NMR 構造解析

nmr-structure-elucidation/SKILL.md
---
name: nmr-structure-elucidation
description: |
  NMR スペクトルデータ(1H, 13C, COSY, HSQC, HMBC)を用いた有機化合物の
  構造推定スキル。ケミカルシフトの帰属、結合定数の算出、2D NMR による
  結合相関の解析を支援。RDKit による構造描画にも対応。
---

# NMR 構造解析

## When to Use

- 合成した化合物の構造確認を行いたいとき
- 1D/2D NMR スペクトルからケミカルシフトを帰属したいとき
- COSY/HSQC/HMBC の相関データから部分構造を組み立てたいとき

## Procedure

### 1. スペクトルデータの読み込み

- JCAMP-DX (.jdx) または Bruker 形式のデータを読み込む
- nmrglue ライブラリを使用してスペクトルを処理する

### 2. ¹H NMR 解析

- ピーク検出を行い、ケミカルシフト (δ, ppm) を一覧化する
- 積分比から水素の数を推定する
- 分裂パターン(s, d, t, q, m)と結合定数 J (Hz) を算出する
- 以下のケミカルシフト範囲を参考に帰属する:
  - δ 0.8–1.5: アルキル CH₃, CH₂
  - δ 3.3–4.5: ヘテロ原子隣接 CH
  - δ 6.5–8.5: 芳香族 H
  - δ 9.0–10.0: アルデヒド H

### 3. ¹³C NMR 解析

- DEPT または HSQC を併用して CH₃/CH₂/CH/C を区別する
- カルボニル(δ 170–220)、芳香族(δ 110–160)等の領域で帰属する

### 4. 2D NMR による構造推定

- COSY: ³J(H-H) 結合相関から隣接プロトンを特定する
- HSQC: ¹J(C-H) 直接結合相関から C-H ペアを確定する
- HMBC: ²J/³J(C-H) 長距離相関から炭素骨格を推定する

### 5. 構造の確定と描画

- 部分構造を組み合わせて候補構造を提案する
- 分子量(MS データ)と一致するか確認する
- RDKit で構造式を描画する

## Code Examples

```python
import nmrglue as ng
import numpy as np

# Bruker データの読み込み
dic, data = ng.bruker.read("./experiment_dir")
udic = ng.bruker.guess_udic(dic, data)

# フーリエ変換とフェーズ補正
data = ng.proc_base.fft(data)
data = ng.proc_autophase.autops(data, "acme")

# ピーク検出
peaks = ng.peakpick.pick(data, pthres=1e6, algorithm="downward")
print(f"検出ピーク数: {len(peaks)}")
```

## Output Files

| ファイル | 内容 |
|:--|:--|
| `results/chemical_shifts.csv` | ケミカルシフト・帰属一覧 |
| `results/correlations.csv` | 2D NMR 相関データ |
| `figures/1h_spectrum.png` | ¹H NMR スペクトル図 |
| `figures/structure.png` | 推定構造式 |

## Caveats

- 溶媒ピーク(CDCl₃: δ 7.26, DMSO-d₆: δ 2.50)を差し引くこと
- 不純物のピークを事前に除外すること
- 対称性のある分子では等価なプロトンに注意すること

C. 物理学・工学:X 線回折(XRD)結晶構造解析

xrd-crystal-analysis/SKILL.md
---
name: xrd-crystal-analysis
description: |
  粉末 X 線回折(XRD)データの解析スキル。ピーク同定、格子定数の算出、
  相同定(ICDD/COD データベース照合)、Rietveld 精密化を実行。
  pymatgen および GSAS-II との連携に対応。
---

# XRD 結晶構造解析

## When to Use

- 粉末 XRD パターンから結晶相を同定したいとき
- 格子定数や結晶子サイズを算出したいとき
- Rietveld 精密化で結晶構造パラメータを精密化したいとき

## Procedure

### 1. データの読み込みと前処理

- XY (2θ, intensity) または RAW/XRDML 形式のデータを読み込む
- バックグラウンド補正を行う(多項式フィットまたは Sonneveld-Visser 法)
- Kα₂ ストリッピングが必要な場合は適用する

### 2. ピーク検出とインデキシング

- ピーク位置(2θ)と強度を検出する
- Bragg の法則 (nλ = 2d sinθ) で面間隔 d を算出する
- Scherrer 式で結晶子サイズ τ を推定する:
  - τ = Kλ / (β cosθ)
  - K ≈ 0.9, β = FWHM (rad)

### 3. 相同定

- 実測 d 値リストを ICDD PDF / COD データベースと照合する
- 一致するエントリを候補としてリストアップする

### 4. Rietveld 精密化(オプション)

- 初期構造モデル(CIF ファイル)を読み込む
- 格子定数、原子位置、温度因子をフィッティングする
- Rwp, Rp, GOF の収束を確認する

## Code Examples

```python
from pymatgen.analysis.diffraction.xrd import XRDCalculator
from pymatgen.core import Structure
import numpy as np

# CIF ファイルから構造を読み込み、XRD パターンをシミュレート
structure = Structure.from_file("structure.cif")
calculator = XRDCalculator(wavelength="CuKa")
pattern = calculator.get_pattern(structure)

# Scherrer 式による結晶子サイズの推定
def scherrer_size(fwhm_deg, two_theta_deg, wavelength=1.5406, K=0.9):
    """結晶子サイズ (nm) を Scherrer 式で算出する。"""
    beta = np.radians(fwhm_deg)
    theta = np.radians(two_theta_deg / 2)
    return (K * wavelength) / (beta * np.cos(theta)) / 10  # Å → nm
```

## Output Files

| ファイル | 内容 |
|:--|:--|
| `results/peak_list.csv` | 2θ, d 値, 強度, hkl 一覧 |
| `results/lattice_parameters.json` | 格子定数 (a, b, c, α, β, γ) |
| `figures/xrd_pattern.png` | 実測 vs 計算 XRD パターン |

## Caveats

- 試料が混合相の場合は定量分析(RIR 法)を適用すること
- 優先配向がある場合は March-Dollase 補正を考慮すること
- アモルファス成分はブロードなハローとして現れるため、結晶相とは別に扱うこと

D. 地球科学・環境科学:種分布モデリング(SDM)

species-distribution-modeling/SKILL.md
---
name: species-distribution-modeling
description: |
  種分布モデリング(SDM)スキル。GBIF の出現記録と WorldClim の気候データを
  用いて、MaxEnt や Random Forest で生息適地を予測。AUC 評価、
  環境変数の重要度分析、将来気候シナリオ下の分布予測を実行。
---

# 種分布モデリング(SDM)

## When to Use

- 生物種の潜在的な分布域を予測したいとき
- 分布を規定する環境要因を特定したいとき
- 気候変動シナリオ下での分布域変化をシミュレーションしたいとき

## Procedure

### 1. データ準備

- 出現記録を GBIF (Global Biodiversity Information Facility) から取得する
- 環境変数を WorldClim (bioclim) からダウンロードする(bio1〜bio19)
- 空間的な希薄化(spatial thinning)で記録の偏りを補正する

### 2. 擬似不在点の生成

- 研究対象領域内に背景点(pseudo-absence)をランダムに生成する
- 出現点から最低 10km 離れた地点を選択する
- 不在点数 = 出現点数 × 10(推奨)

### 3. モデル構築

- MaxEnt: 最大エントロピーモデル(java ベース or `elapid`- Random Forest: scikit-learn `RandomForestClassifier`
- 5-fold 空間交差検証で過学習を防ぐ

### 4. モデル評価

- AUC (Area Under the ROC Curve): ≥ 0.8 を基準とする
- TSS (True Skill Statistic): ≥ 0.6 を基準とする
- 応答曲線で各変数の影響を可視化する

### 5. 予測マップの作成

- 現在の気候条件で適地マップを生成する
- 将来シナリオ(SSP2-4.5, SSP5-8.5)で分布変化を予測する

## Code Examples

```python
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
import rasterio

# 出現/不在データの読み込み
occurrences = pd.read_csv("occurrence_data.csv")  # lat, lon, presence

# 環境変数の抽出
def extract_bioclim(points_df, raster_path):
    """座標から bioclim 変数値を抽出する。"""
    with rasterio.open(raster_path) as src:
        coords = [(row.lon, row.lat) for _, row in points_df.iterrows()]
        values = [v[0] for v in src.sample(coords)]
    return values

# Random Forest モデル
rf = RandomForestClassifier(n_estimators=500, random_state=42)
scores = cross_val_score(rf, X_env, y, cv=5, scoring="roc_auc")
print(f"AUC: {scores.mean():.3f} ± {scores.std():.3f}")
```

## Output Files

| ファイル | 内容 |
|:--|:--|
| `results/model_evaluation.csv` | AUC, TSS 等の評価指標 |
| `results/variable_importance.csv` | 環境変数の重要度ランキング |
| `figures/suitability_map.png` | 生息適地マップ |
| `figures/future_projection.png` | 将来分布予測マップ |

## Caveats

- サンプリングバイアス(道路・都市近傍に偏る)に注意すること
- 環境変数間の多重共線性(VIF > 10)がある場合は変数を削減すること
- モデルの外挿(学習範囲外の環境条件への予測)は信頼性が低い

E. 情報科学・数理科学:ML 実験管理

ml-experiment-tracker/SKILL.md
---
name: ml-experiment-tracker
description: |
  機械学習の実験管理・再現性確保スキル。ハイパーパラメータ探索、
  学習曲線の可視化、モデル比較、再現性のためのシード固定と環境記録を
  体系的に実行。MLflow / Weights & Biases との連携に対応。
---

# ML 実験管理

## When to Use

- 機械学習モデルの学習と評価を体系的に管理したいとき
- ハイパーパラメータ探索の結果を記録・比較したいとき
- 実験の再現性を確保したいとき

## Procedure

### 1. 実験環境の記録

- Python バージョン、ライブラリバージョンを記録する
- ランダムシードを固定する(numpy, torch, random)
- GPU 情報を記録する

### 2. データの準備と分割

- 学習:検証:テスト = 60:20:20 で分割する
- 層化分割(StratifiedKFold)を使用する
- データのハッシュ値を記録して同一性を保証する

### 3. ハイパーパラメータ探索

- Optuna で Bayesian Optimization を実行する
- 探索範囲と試行回数を事前に定義する
- 各試行の結果を自動的に記録する

### 4. モデル学習と評価

- 学習曲線(loss, metric vs epoch)をプロットする
- 検証セットでのベストモデルを保存する(Early Stopping)
- テストセットでの最終評価を行う

### 5. 結果の記録と比較

- メトリクス(Accuracy, F1, AUC 等)をテーブルで整理する
- 複数モデル間の比較表を生成する
- 統計的有意差検定(Wilcoxon)を実施する

## Code Examples

```python
import optuna
import numpy as np
import torch

def fix_seed(seed=42):
    """再現性のためにシードを固定する。"""
    np.random.seed(seed)
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    torch.backends.cudnn.deterministic = True

def objective(trial):
    """Optuna のハイパーパラメータ探索。"""
    lr = trial.suggest_float("lr", 1e-5, 1e-2, log=True)
    n_layers = trial.suggest_int("n_layers", 1, 5)
    dropout = trial.suggest_float("dropout", 0.1, 0.5)
    # モデル学習・検証
    model = build_model(n_layers=n_layers, dropout=dropout)
    val_score = train_and_evaluate(model, lr=lr)
    return val_score

study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=100)
print(f"Best AUC: {study.best_value:.4f}")
print(f"Best params: {study.best_params}")
```

## Output Files

| ファイル | 内容 |
|:--|:--|
| `results/experiment_log.json` | 全試行のパラメータとメトリクス |
| `results/best_model.pt` | ベストモデルの重み |
| `results/model_comparison.csv` | モデル間の性能比較表 |
| `figures/learning_curve.png` | 学習曲線 |
| `figures/optuna_history.png` | 探索履歴の可視化 |

## Caveats

- データリーク(学習データにテストデータの情報が漏れる)に注意すること
- GPU メモリ不足の場合はバッチサイズを削減すること
- 実験結果の報告には必ず標準偏差を含めること(n ≥ 3 の独立試行)

F. 社会科学・人文科学:調査テキスト分析

survey-text-analysis/SKILL.md
---
name: survey-text-analysis
description: |
  アンケートの自由記述テキスト分析スキル。形態素解析(MeCab/Sudachi)、
  共起ネットワーク、トピックモデル(LDA)、センチメント分析を実行。
  日本語テキストに対応。KH Coder 互換の出力形式を提供。
---

# 調査テキスト分析

## When to Use

- アンケートの自由記述回答を定量的に分析したいとき
- テキストデータからトピック(話題)を抽出したいとき
- 回答の感情傾向(ポジティブ/ネガティブ)を把握したいとき

## Procedure

### 1. テキストの前処理

- 全角・半角の統一、不要な記号の除去を行う
- MeCab + NEologd 辞書で形態素解析する
- 名詞・動詞・形容詞を抽出し、活用形を原形に戻す
- ストップワード(「こと」「もの」「ため」等)を除去する

### 2. 頻度分析

- 単語出現頻度(TF)を集計する
- TF-IDF を算出し、特徴的な語を抽出する
- ワードクラウドを生成する

### 3. 共起ネットワーク分析

- 同一回答内での単語共起関係を算出する(Jaccard 係数)
- 共起ネットワークを描画する(閾値: Jaccard ≥ 0.1)
- サブグラフ検出(Louvain 法)でトピッククラスタを抽出する

### 4. トピックモデル(LDA)

- gensim の LdaModel でトピックを推定する
- トピック数は coherence score (c_v) で最適化する(3〜20 の範囲)
- 各トピックの上位キーワードと代表的な回答を表示する

### 5. センチメント分析

- 東北大学の日本語評判分析辞書を使用する
- 各回答にポジティブ/ネガティブ/ニュートラルのラベルを付与する
- 属性(年代、性別等)ごとの感情傾向をクロス集計する

## Code Examples

```python
import MeCab
from collections import Counter
from wordcloud import WordCloud

def tokenize_japanese(text, pos_filter=("名詞", "動詞", "形容詞")):
    """MeCab で日本語テキストを形態素解析する。"""
    tagger = MeCab.Tagger("-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd")
    node = tagger.parseToNode(text)
    tokens = []
    while node:
        features = node.feature.split(",")
        if features[0] in pos_filter:
            base_form = features[6] if features[6] != "*" else node.surface
            tokens.append(base_form)
        node = node.next
    return tokens

# ワードクラウド生成
all_tokens = []
for response in survey_responses:
    all_tokens.extend(tokenize_japanese(response))

freq = Counter(all_tokens)
wc = WordCloud(font_path="/usr/share/fonts/truetype/ipafont/ipagp.ttf",
               width=800, height=400, background_color="white")
wc.generate_from_frequencies(freq)
wc.to_file("figures/wordcloud.png")
```

## Output Files

| ファイル | 内容 |
|:--|:--|
| `results/word_frequency.csv` | 単語出現頻度表 |
| `results/cooccurrence_matrix.csv` | 共起行列 |
| `results/topic_keywords.csv` | トピックごとの上位キーワード |
| `results/sentiment_summary.csv` | センチメント集計結果 |
| `figures/wordcloud.png` | ワードクラウド |
| `figures/cooccurrence_network.png` | 共起ネットワーク図 |

## Caveats

- 回答数が少ない場合(< 100 件)はトピックモデルの精度が低下する
- 個人を特定できる記述は事前に匿名化すること(倫理審査対応)
- 専門用語が多い場合は MeCab のユーザー辞書に登録すること
  1. Agent Skills 公式サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?