[{"data":1,"prerenderedAt":698},["ShallowReactive",2],{"content-/claude-code-skill-usage-count-from-transcript":3,"all-pages-for-dir":676,"related-/claude-code-skill-usage-count-from-transcript":677,"og-image-/claude-code-skill-usage-count-from-transcript":697},{"id":4,"title":5,"body":6,"category":660,"concepts":661,"description":662,"extension":663,"meta":664,"navigation":665,"ogImage":661,"path":666,"project_name":661,"published":667,"publishedAt":668,"seo":669,"stem":670,"tags":671,"todo":661,"unpublished":667,"updatedAt":661,"__hash__":675},"pages/2026-07/2026-07-22/claude-code-skill-usage-count-from-transcript.md","Claude Codeのスキル使用回数はセッションログから数えられるのか調べた",{"type":7,"value":8,"toc":646},"minimark",[9,13,22,26,73,79,83,88,105,239,249,284,288,303,311,321,358,362,372,378,388,391,394,485,491,494,497,526,550,554,591,594,627,630,642],[10,11,5],"h1",{"id":12},"claude-codeのスキル使用回数はセッションログから数えられるのか調べた",[14,15,16,17,21],"p",{},"「スキルの使用回数って ",[18,19,20],"code",{},"~/.claude/projects/\u003Cproject>/\u003Csession-id>.jsonl"," のトランスクリプトから取得できるんじゃないか」と思いつき、実際に調べてみた。対象は2026-06-05〜2026-07-22の48日間、全54プロジェクト・1,273セッションのログ。結論から言うと取得できるが、記録経路が1つではなく3つあり、どれか1つだけを数えると実態を大きく取りこぼす。",[23,24,25],"h2",{"id":25},"結論",[27,28,29,41,63],"ul",{},[30,31,32,33,36,37,40],"li",{},"Claudeが自分の判断でSkillツールを呼び出したイベントは、メインの",[18,34,35],{},".jsonl","内に",[18,38,39],{},"tool_use","として記録される。この経路だけで776件検出できた",[30,42,43,44,47,48,55,56,58,59,62],{},"ユーザーが",[18,45,46],{},"/skill-name","とスラッシュコマンド形式で明示的に呼び出した場合は、",[49,50,51,52,54],"strong",{},"Skillツールの",[18,53,39],{},"とは別の記録形式","になる。同じ",[18,57,35],{},"内だが、",[18,60,61],{},"\u003Ccommand-name>","タグを含むユーザーメッセージとして残る",[30,64,65,66,68,69,72],{},"Agent tool(サブエージェント)経由で起動されたエージェントが内部でSkillを呼んだ場合は、メインの",[18,67,35],{},"には一切現れず、",[18,70,71],{},"\u003Csession-id>/subagents/agent-*.jsonl","という別ファイル群にのみ記録される。手元のmdx-playgroundプロジェクトだけで検証したところ、この経路だけでメイン会話とほぼ同数(602件 vs 637件)あった",[14,74,75,76,78],{},"つまりメインの",[18,77,35],{},"だけを見ていると、実際のスキル使用量の半分近くを見落とす可能性がある。",[23,80,82],{"id":81},"_3つの記録経路","3つの記録経路",[84,85,87],"h3",{"id":86},"経路a-skillツール呼び出し","経路A: Skillツール呼び出し",[14,89,90,91,93,94,97,98,101,102,104],{},"Claudeが自然文の指示やSKILL.mdのトリガー条件に反応して、自分の判断でSkillツールを呼んだケース。メインの",[18,92,35],{},"内、",[18,95,96],{},"type:\"assistant\"","のメッセージの",[18,99,100],{},"message.content[]","に",[18,103,39],{},"として記録される。",[106,107,112],"pre",{"className":108,"code":109,"language":110,"meta":111,"style":111},"language-json shiki shiki-themes vitesse-light vitesse-light","{\"type\":\"tool_use\",\"name\":\"Skill\",\"input\":{\"skill\":\"earnings-beat-scan\",\"args\":\"from_date=2026-06-09 to_date=2026-06-10\"},\"caller\":{\"type\":\"direct\"}}\n","json","",[18,113,114],{"__ignoreMap":111},[115,116,119,123,127,131,133,136,139,142,144,147,149,152,154,156,158,161,163,165,167,170,172,175,177,180,182,184,186,189,191,193,195,198,200,202,204,207,209,212,214,217,219,221,223,225,227,229,231,234,236],"span",{"class":117,"line":118},"line",1,[115,120,122],{"class":121},"shFtX","{",[115,124,126],{"class":125},"sqvqQ","\"",[115,128,130],{"class":129},"sz8Xr","type",[115,132,126],{"class":125},[115,134,135],{"class":121},":",[115,137,126],{"class":138},"sMJiu",[115,140,39],{"class":141},"sdGka",[115,143,126],{"class":138},[115,145,146],{"class":121},",",[115,148,126],{"class":125},[115,150,151],{"class":129},"name",[115,153,126],{"class":125},[115,155,135],{"class":121},[115,157,126],{"class":138},[115,159,160],{"class":141},"Skill",[115,162,126],{"class":138},[115,164,146],{"class":121},[115,166,126],{"class":125},[115,168,169],{"class":129},"input",[115,171,126],{"class":125},[115,173,174],{"class":121},":{",[115,176,126],{"class":125},[115,178,179],{"class":129},"skill",[115,181,126],{"class":125},[115,183,135],{"class":121},[115,185,126],{"class":138},[115,187,188],{"class":141},"earnings-beat-scan",[115,190,126],{"class":138},[115,192,146],{"class":121},[115,194,126],{"class":125},[115,196,197],{"class":129},"args",[115,199,126],{"class":125},[115,201,135],{"class":121},[115,203,126],{"class":138},[115,205,206],{"class":141},"from_date=2026-06-09 to_date=2026-06-10",[115,208,126],{"class":138},[115,210,211],{"class":121},"},",[115,213,126],{"class":125},[115,215,216],{"class":129},"caller",[115,218,126],{"class":125},[115,220,174],{"class":121},[115,222,126],{"class":125},[115,224,130],{"class":129},[115,226,126],{"class":125},[115,228,135],{"class":121},[115,230,126],{"class":138},[115,232,233],{"class":141},"direct",[115,235,126],{"class":138},[115,237,238],{"class":121},"}}\n",[14,240,241,244,245,248],{},[18,242,243],{},"input.skill","にスキル名、",[18,246,247],{},"input.args","に引数が入る。抽出は次のjqで十分。",[106,250,254],{"className":251,"code":252,"language":253,"meta":111,"style":111},"language-bash shiki shiki-themes vitesse-light vitesse-light","jq -r 'select(.type==\"assistant\") | .message.content[]? |\n  select(.type==\"tool_use\" and .name==\"Skill\") | .input.skill' session.jsonl\n","bash",[18,255,256,272],{"__ignoreMap":111},[115,257,258,262,266,269],{"class":117,"line":118},[115,259,261],{"class":260},"senZ8","jq",[115,263,265],{"class":264},"snbK4"," -r",[115,267,268],{"class":138}," '",[115,270,271],{"class":141},"select(.type==\"assistant\") | .message.content[]? |\n",[115,273,275,278,281],{"class":117,"line":274},2,[115,276,277],{"class":141},"  select(.type==\"tool_use\" and .name==\"Skill\") | .input.skill",[115,279,280],{"class":138},"'",[115,282,283],{"class":141}," session.jsonl\n",[84,285,287],{"id":286},"経路b-スラッシュコマンド","経路B: スラッシュコマンド",[14,289,43,290,293,294,58,296,97,299,302],{},[18,291,292],{},"/add-ticker","のように明示的にスラッシュコマンドを打った場合の記録。同じ",[18,295,35],{},[18,297,298],{},"type:\"user\"",[18,300,301],{},"content","(文字列)に、コマンド名がタグとして展開されて埋め込まれる。",[106,304,309],{"className":305,"code":307,"language":308},[306],"language-text","\u003Ccommand-message>add-ticker\u003C/command-message>\n\u003Ccommand-name>/add-ticker\u003C/command-name>\n\u003Ccommand-args>AMAT\u003C/command-args>\n","text",[18,310,307],{"__ignoreMap":111},[14,312,313,314,316,317,320],{},"これは経路Aの",[18,315,160],{},"ツール呼び出しとは",[49,318,319],{},"完全に別のイベント","なので、経路Aのjqだけを回しても一切ヒットしない。存在に気づかず、スラッシュコマンドで呼んでいるスキルの使用実績が丸ごと抜け落ちる。",[106,322,324],{"className":251,"code":323,"language":253,"meta":111,"style":111},"jq -r 'select(.type==\"user\") |\n  (if (.message.content|type)==\"string\" then .message.content\n   else (.message.content // [] | map(select(.type==\"text\").text) | join(\"\\n\")) end) |\n  scan(\"\u003Ccommand-name>/([^\u003C]+)\u003C/command-name>\")' session.jsonl\n",[18,325,326,337,342,348],{"__ignoreMap":111},[115,327,328,330,332,334],{"class":117,"line":118},[115,329,261],{"class":260},[115,331,265],{"class":264},[115,333,268],{"class":138},[115,335,336],{"class":141},"select(.type==\"user\") |\n",[115,338,339],{"class":117,"line":274},[115,340,341],{"class":141},"  (if (.message.content|type)==\"string\" then .message.content\n",[115,343,345],{"class":117,"line":344},3,[115,346,347],{"class":141},"   else (.message.content // [] | map(select(.type==\"text\").text) | join(\"\\n\")) end) |\n",[115,349,351,354,356],{"class":117,"line":350},4,[115,352,353],{"class":141},"  scan(\"\u003Ccommand-name>/([^\u003C]+)\u003C/command-name>\")",[115,355,280],{"class":138},[115,357,283],{"class":141},[84,359,361],{"id":360},"経路c-サブエージェント内のskill呼び出し","経路C: サブエージェント内のSkill呼び出し",[14,363,364,365,367,368,371],{},"Agent toolやWorkflowで起動したサブエージェントが、その内部でさらにSkillツールを呼ぶケース。この呼び出しはメインの",[18,366,35],{},"には一切残らず、セッションIDと同名のディレクトリの",[18,369,370],{},"subagents/","配下に、エージェントごとに別ファイルとして記録される。",[106,373,376],{"className":374,"code":375,"language":308},[306],"~/.claude/projects/\u003Cproject>/\u003Csession-id>/subagents/agent-a23e4....jsonl\n",[18,377,375],{"__ignoreMap":111},[14,379,380,381,383,384,387],{},"中身の構造は経路Aと同じ(",[18,382,39],{},"で",[18,385,386],{},"name==\"Skill\"",")なので、抽出クエリ自体は使い回せる。問題は「そもそもこのファイル群を集計対象に含めないと存在にすら気づけない」ことにある。",[23,389,390],{"id":390},"実測してみた",[14,392,393],{},"全54プロジェクト・1,273セッションのメイン会話ログ(経路A)を走査した結果。",[395,396,397,410],"table",{},[398,399,400],"thead",{},[401,402,403,407],"tr",{},[404,405,406],"th",{},"スキル",[404,408,409],{},"件数",[411,412,413,422,430,438,446,453,461,469,477],"tbody",{},[401,414,415,419],{},[416,417,418],"td",{},"doc-communication",[416,420,421],{},"120",[401,423,424,427],{},[416,425,426],{},"content-management",[416,428,429],{},"117",[401,431,432,435],{},[416,433,434],{},"svg-diagram",[416,436,437],{},"92",[401,439,440,443],{},[416,441,442],{},"learn",[416,444,445],{},"49",[401,447,448,450],{},[416,449,188],{},[416,451,452],{},"42",[401,454,455,458],{},[416,456,457],{},"honda-sakubun",[416,459,460],{},"37",[401,462,463,466],{},[416,464,465],{},"commit",[416,467,468],{},"30",[401,470,471,474],{},[416,472,473],{},"qa-verification",[416,475,476],{},"27",[401,478,479,482],{},[416,480,481],{},"その他46スキル",[416,483,484],{},"262",[14,486,487,488,490],{},"合計776件、うち82%(637件)がmdx-playgroundでの利用だった。月別では6月340件、7月436件(22日時点)と増加している。",[18,489,442],{},"スキルが6月0件から7月49件に急増していたのは、学習ゲート導入(2026-07-06〜)の時期とちょうど一致しており、この計測方法が実際の運用変化を正しく捉えていることの裏付けになった。",[84,492,493],{"id":493},"サブエージェント分はメイン会話とほぼ同規模だった",[14,495,496],{},"全プロジェクトのサブエージェントまで含めると容量が大きく(mdx-playground単体で687MB・1,658ファイル)、走査に時間がかかる。そこでmdx-playground 1プロジェクトに絞って経路Cも集計してみた。",[395,498,499,508],{},[398,500,501],{},[401,502,503,506],{},[404,504,505],{},"記録経路",[404,507,409],{},[411,509,510,518],{},[401,511,512,515],{},[416,513,514],{},"メイン会話(経路A)",[416,516,517],{},"637",[401,519,520,523],{},[416,521,522],{},"サブエージェント内(経路C)",[416,524,525],{},"602",[14,527,528,529,531,532,535,536,539,540,543,544,546,547,549],{},"ほぼ同数だった。サブエージェント側のスキル別内訳は",[18,530,426],{},"(209件)と",[18,533,534],{},"vivid-writing","(199件)が突出していて、これは",[18,537,538],{},"/make-diary","が日記記事を並列サブエージェントで生成する際、各エージェントがfrontmatter整形とvivid-writing(描写変換)を毎回呼んでいることに起因していそうだ。メイン会話側では",[18,541,542],{},"make-diary","自体はスラッシュコマンド(経路B)として45回起動されているだけなので、経路Aだけを見ていると",[18,545,542],{},"実行のたびに起きているはずの",[18,548,426],{},"呼び出しがほとんど見えない。",[84,551,553],{"id":552},"スラッシュコマンドは大半がビルトインcli操作だった","スラッシュコマンドは大半がビルトインCLI操作だった",[14,555,556,557,560,561,564,565,568,569,572,573,576,577,579,580,583,584,587,588,590],{},"経路Bで検出した621件のうち、",[18,558,559],{},"/clear","(422件)・",[18,562,563],{},"/model","(50件)・",[18,566,567],{},"/effort","(23件)・",[18,570,571],{},"/login","(16件)・",[18,574,575],{},"/mcp","(4件)など、Claude Code組み込みのCLI操作が518件(83%)を占めた。プロジェクト固有のスキル・カスタムコマンド起動は残り103件で、内訳は",[18,578,538],{},"(45件)、",[18,581,582],{},"/import-batch","(14件)、",[18,585,586],{},"/learn","(6件)、",[18,589,292],{},"(6件)などだった。",[23,592,593],{"id":593},"制限事項",[27,595,596,599,613,624],{},[30,597,598],{},"サブエージェント分の全プロジェクト走査はしていない。今回はmdx-playground 1プロジェクトのサンプルで「メイン会話だけでは取りこぼす」ことを確認したに留まる",[30,600,601,604,605,608,609,612],{},[18,602,603],{},"caller.type","フィールド(経路Aの776件中770件が",[18,606,607],{},"\"direct\"","、6件が",[18,610,611],{},"\"unknown\"",")の意味は今回の調査では特定できていない",[30,614,615,616,619,620,623],{},"組み込みコマンドかスキルかの判別は名称からの目視分類で、",[18,617,618],{},"/goal","や",[18,621,622],{},"/context","のように一覧に見当たらず未分類のまま残したものもある",[30,625,626],{},"ログの保持期間や手動削除の影響を受けるため、今回の集計期間(2026-06-05〜2026-07-22)より前の実績は把握できない",[23,628,629],{"id":629},"まとめ",[14,631,632,633,635,636,638,639,641],{},"「トランスクリプトからスキル使用回数を数えられるか」という問い自体には、素朴にYesと答えられる。ただしその数字が「全部」だと思ってしまうと足元をすくわれる。Skillツールの",[18,634,39],{},"だけを拾う集計は、少なくとも自分の環境では実態の半分近くを見落としていた。正確な利用実態を知りたいなら、メインの",[18,637,35],{},"・スラッシュコマンドのタグ・サブエージェントの",[18,640,370],{},"配下という3箇所を突き合わせる必要がある。",[643,644,645],"style",{},"html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sqvqQ, html code.shiki .sqvqQ{--shiki-default:#99841877;--shiki-dark:#99841877}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}",{"title":111,"searchDepth":274,"depth":274,"links":647},[648,649,654,658,659],{"id":25,"depth":274,"text":25},{"id":81,"depth":274,"text":82,"children":650},[651,652,653],{"id":86,"depth":344,"text":87},{"id":286,"depth":344,"text":287},{"id":360,"depth":344,"text":361},{"id":390,"depth":274,"text":390,"children":655},[656,657],{"id":493,"depth":344,"text":493},{"id":552,"depth":344,"text":553},{"id":593,"depth":274,"text":593},{"id":629,"depth":274,"text":629},"dev",null,"~/.claude/projects配下の.jsonlトランスクリプトからスキルの使用回数を集計できるという話を検証した。実際にはSkillツール呼び出し・スラッシュコマンド・サブエージェント内呼び出しという3つの記録経路があり、どれか1つだけを数えると実態を大きく取りこぼすことが分かった。","md",{},true,"/claude-code-skill-usage-count-from-transcript",false,"2026-07-22T00:00:00.000Z",{"title":5,"description":662},"2026-07/2026-07-22/claude-code-skill-usage-count-from-transcript",[672,406,261,673,674],"Claude Code","トランスクリプト","調査","dxfy5an18lwv9fn6bmAShV9E9kc7bEytju4leGjQz2E",[],[678,682,686,689,693],{"title":679,"path":680,"publishedAt":681},"Claude Codeに文章の緩急を教える、cognitive-rhythm-writingスキルの新設とmake-diaryへの適用","/cognitive-rhythm-writing-skill","2026-07-17T00:00:00.000Z",{"title":683,"path":684,"publishedAt":685},"2026年7月5日の開発日記 - 講座を1本出し、AI協働の足回りを棚卸しした日曜","/2026-07-05-diary","2026-07-05T00:00:00.000Z",{"title":687,"path":688,"publishedAt":685},"Claude Codeスキルを講座化する第3弾——「Excel風HTMLモック」レッスンを計画から本番公開まで一日で作った","/skill-to-lesson-excel-html-mock",{"title":690,"path":691,"publishedAt":692},"x_search_tool を Claude Code スキルに固めて、自分のXハンドルを派遣調査させる仕組みを作った","/x-search-skill","2026-05-20T00:00:00.000Z",{"title":694,"path":695,"publishedAt":696},"2026年4月28日の開発日記 - feature-slidesスキル新設、書籍OCR1181ページ、Amazon書棚UIまで1日で組み上げた","/2026-04-28-diary","2026-04-28T00:00:00.000Z","https://log.eurekapu.com/og/blog/claude-code-skill-usage-count-from-transcript.png?v=2026-07-22T00%3A00%3A00.000Z&title=Claude%20Code%E3%81%AE%E3%82%B9%E3%82%AD%E3%83%AB%E4%BD%BF%E7%94%A8%E5%9B%9E%E6%95%B0%E3%81%AF%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%AD%E3%82%B0%E3%81%8B%E3%82%89%E6%95%B0%E3%81%88%E3%82%89%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%8B%E8%AA%BF%E3%81%B9%E3%81%9F&author=Kei%20Komatsu&sig=ba1db7686325a449",1784705283702]