CLAUDE.md・Issue・Skill の役割をカード形式で比較した図

Claude Code の Skill・Issue・CLAUDE.md の使い分けを整理した

Claude Code を使い始めてしばらく経ち、Issue ベースで作業を指示するフローは固まってきた。そこで気になっていた Skill という仕組みを調べた。「繰り返し依頼に便利」とは聞いていたが、実際に何をするもので、Issue や CLAUDE.md と何が違うのかを整理しておきたかった。 Skill とは何か Skill は .claude/skills/<skill-name>/SKILL.md の形で置く Markdown ベースの追加手順だ。ファイルには YAML front matter の description と、実行時の指示を書く。 呼び出され方は2通りある。 Claude Code が description を見て関連すると判断したとき、自動で読み込む ユーザーが /skill-name の形で明示的に呼び出す Skill ディレクトリにはテンプレートや参考資料、スクリプトも同梱できる。プロジェクト単位・個人環境単位のどちらにも置ける。 公式ドキュメントでは、同じ指示やチェックリストを何度もチャットに貼っている場合や、CLAUDE.md の一部が事実ではなく手順書になってきた場合に Skill 化するとされている。本文は使われるときだけ読み込まれるため、長い参照資料を常時コンテキストに入れずに済む点がメリットだ。 Commands との関係 以前は .claude/commands/deploy.md という単一ファイル方式のカスタムコマンドがあった。現在は Skills に統合されており、どちらも /deploy のようなスラッシュコマンドとして動く。 方式 パス 特徴 Commands(旧) .claude/commands/deploy.md 単一ファイル、シンプル Skills(現在推奨) .claude/skills/deploy/SKILL.md ディレクトリ構造、自動呼び出し対応 既存の .claude/commands/ は引き続き動作するが、新しく作るなら .claude/skills/ が推奨だ。 Skill の書き方 SKILL.md の構造 SKILL.md は2つのパートで構成される。 --- name: gen-test description: テストを生成する disable-model-invocation: true --- 以下のファイルのテストを生成する: $ARGUMENTS 1. ソースファイルを読む 2. テスト対象の関数を特定する 3. プロジェクトの規約に沿ったテストを書く --- で囲まれた上部が frontmatter で、Claude に「この Skill をいつ・どう使うか」を伝える設定欄だ。YAML 形式で書く。--- 以降が実際の指示内容になる。 ...

公開: 2026年5月20日 · Toshihiko Arai
macOSの画面右上にClaude Codeの作業完了通知が表示されているイメージ

Claude Codeの作業完了・許可待ちをOS通知で受け取る設定方法

Claude Code に作業を任せて別のことをしていると、いつの間にか完了していたり、許可プロンプトで止まっていたりすることがある。 「通知が来れば気づけるのに」と思って設定を試してみた。結果としては動くのだが、期待していたほどスムーズではなかった。以下は試行錯誤の記録として参考にしてほしい。 組み込み設定とその限界 Claude Code には preferredNotifChannel という組み込みの通知設定がある。 { "preferredNotifChannel": "auto", "inputNeededNotifEnabled": true } ただしこれは iTerm2 の通知機能を経由するため、セッション名や生のエスケープシーケンスがそのまま通知に表示されることがある。複数プロジェクトを同時に動かしていると通知が混在して読みにくくなる。 hooks で osascript を使う 組み込み設定に限界を感じたので、~/.claude/settings.json の hooks を使って macOS ネイティブの通知を直接出す方法も試してみた。 { "hooks": { "Stop": [{ "hooks": [{ "type": "command", "command": "osascript -e \"display notification \\\"作業が完了しました\\\" with title \\\"Claude Code [$(basename $PWD)]\\\" sound name \\\"Glass\\\"\"" }] }], "Notification": [{ "hooks": [{ "type": "command", "command": "osascript -e \"display notification \\\"入力が必要です\\\" with title \\\"Claude Code [$(basename $PWD)]\\\" sound name \\\"Ping\\\"\"" }] }] } } Stop は Claude が作業を終えたとき、Notification は許可プロンプトや質問で入力待ちになったときに発火する。 ...

公開: 2026年5月19日 · Toshihiko Arai
CLI AIとMakefileからiOSビルド、実機デプロイ、テスト、スクリーンショット生成へつながる図

AI時代にmakeコマンドが便利すぎる。CLI AIとiOS開発をつなぐ操作盤として使う

AIエージェントを使うようになってから、古くからある make コマンドの便利さを改めて感じている。 make は C 言語のビルドで使う古い道具、という印象が強かった。自分も昔から知っていたが、仕組みをきちんと理解して使っていたわけではない。 ところが、Claude Code や Codex のような CLI 型 AI エージェントを相棒に開発すると、make はかなり相性がいい。 理由は単純で、プロジェクトでよく使う操作を make test、make build-release、make device-debug のような短いコマンドにまとめられるからだ。人間と AI エージェントが同じコマンドを見て、同じように実行できる。 特に iOS アプリ開発では効果が大きい。make device-debug でビルド、実機インストール、起動までできるようにしておくと、Xcode を開かずにターミナルだけで開発を進められる場面が増える。Xcode は他の IDE と操作感がかなり違い、毎回開くのが負担に感じることもある。Xcode への依存を半分でも減らせると思うと、iOS アプリ開発の心理的なハードルも下がる。左半分のターミナルで Claude Code などの CLI AI と対話し、右半分や別タブで make を叩く。あるいは AI エージェント自身に make test を実行してもらう。 GitHub Issue とターミナルがあれば、基本的な開発作業がかなり済んでしまう。 makeは何をする道具なのか make は、Makefile に書かれたルールを読んで、必要なコマンドを実行する道具である。 GNU Make のマニュアル では、make は大きなプログラムのどの部分を再コンパイルする必要があるかを自動判定し、そのためのコマンドを実行するユーティリティとして説明されている。 もともとの発想は、ファイル同士の依存関係を見て、変更があった部分だけを更新することだ。 たとえば C の世界なら、main.c から main.o を作り、複数の .o をリンクして実行ファイルを作る。ヘッダーファイルが変わったら、それに依存するソースを再コンパイルする。こういう関係を毎回人間が覚えて実行するのは面倒だし、間違いやすい。 ...

公開: 2026年5月17日 · Toshihiko Arai
RSSフィードとAIの整理ノードがニュースカードをつなぐデスク上のノートPC

AI時代だからこそRSSが便利になる|RSSは死んでいなかった

RSSはもう死んだものだと思っていた。 でも、そうではなかった。 海外の主要ニュースサイトから見出しを集めて、CLIでニューストピックを表示するアプリケーションを作ろうとしたことがきっかけだった。AIによる成果物を動かしてみて、裏側ではスクレイピングをしているのだろうと思っていた。ところが、実際にはRSSフィードから更新情報を取っていた。 つまり、RSSは死んでいなかった。 死んでいたように見えたのは、RSSそのものではなく、普通の人がRSSを意識して使う入口だったのだと思う。 Google Readerが終わっただけだった RSSが終わったように感じられた象徴的な出来事は、Google Readerの終了だった。 Googleは2013年3月13日の公式ブログ記事「A second spring of cleaning 」で、Google Readerを2013年7月1日に終了すると案内している。公式ブログでは、熱心なユーザーはいたものの、利用が減少していたことが理由として説明されていた。 Google Readerを使っていたわけではないが、そんな私でも記憶しているほど当時は驚きのニュースだった。 RSSを読むための代表的なツールの一つが終了となったことで、一般ユーザーの視界からRSSは急速に消えていったように見える。その後はSNSのタイムライン、ニュースアプリ、レコメンド、今ならAIによる要約やおすすめが、情報を受け取る入口になった。 だから、Google Readerが終わったことと、RSSという仕組みが終わったことは別の話である。 きっかけは海外ニュースをCLIで眺めるツールだった 今回作ろうとしたのは、海外ニュースの見出しをCLIでざっと確認するための小さなツールだった。 リポジトリはこちら。 aragig/shell-toolbox の news-topics 実行すると、複数の海外ニュースサイトから見出しを集めて、ターミナルに一覧表示してくれる。 以下は news コマンドを実行した出力イメージだ。 海外ニュースの見出しをnewsコマンドで表示しているターミナル画面 % news News Topics 12 items | balanced by source cap (2/source) 01. 原油価格が2022年以来の最高値に急騰 [BBC] 2026-04-30 06:55 UTC EN Oil jumps to highest price since 2022 URL [https://www.bbc.com/...](https://www.bbc.com/) 02. ジェット燃料価格の高騰が山火事の消火費用を押し上げている [NPR] 2026-04-30 07:00 UTC EN How rising jet fuel prices are driving up the cost of fighting wildfires URL [https://www.npr.org/...](https://www.npr.org/) BBC / Reuters / NPR / DW / France 24 / Al Jazeera など、複数のニュースサイトから取得する。ソースごとの上限とラウンドロビンでひとつのサイトに偏らないように表示している。 ...

公開: 2026年5月1日 · Toshihiko Arai

リモートサーバーへ root ログインしてシェルを実行するまでを半自動化する

サーバーの再起動やミドルウェアの再起動を、 手作業で何度も繰り返す 必要が出てくる場面があります。 1台だけならまだしも、ミラーサーバーや複数台構成になってくると、同じ操作を台数分だけ繰り返すのは現実的ではありません。 作業時間がかかる 操作ミスが起きやすい 精神的にも地味に消耗する この記事が向いているのは、次のようなケースです。 自分が管理している Linux サーバーで、同じ再起動作業を何度も繰り返している root パスワードをスクリプトに埋め込まずに、手元の負担だけ減らしたい nginx の再起動手順を、毎回同じ形で安全寄りに実行したい 逆に、第三者が管理する共有サーバーや、本番で慎重な承認フローが必要な環境では、そのまま流用せず運用ルールに合わせてください。 そこで今回は、 「リモートサーバーに接続し、root 権限で nginx を安全に再起動するまで」 という一連の流れを、できる限り自動化できないかを考えてみました。 先に結論 この方法のポイントは、危険なところだけ人が握り、定型処理だけを機械に任せる ことです。 SSH ログインは手動 su - root のパスワード入力も手動 nginx の停止確認、待機、再起動だけ自動 完全自動化より地味ですが、安全性と省力化のバランスが取りやすい のが利点です。 やりたいことの流れ 今回自動化したい処理は、次のようなステップです。 homepage ユーザーで SSH 接続 (※ パスワード入力が必要) root ユーザーに切り替え (※ パスワード入力が必要) nginx を停止 nginx プロセスが完全に終了するまで待機 nginx を起動 完全な自動化を目指すなら、sshpass や expect を使ってパスワード入力まで含める方法もあります。 しかしそれらは追加ツールの導入が必要で、 パスワードをスクリプトに持たせるリスク も無視できません。 そこで今回は、 SSH と su のパスワード入力だけは手動 それ以外の処理はすべて自動 という、現実的で安全寄りな落としどころを選びました。 多少不格好ではありますが、それでも作業負荷は大幅に減らせます。 実際に作ったシェルスクリプト 以下が今回完成したスクリプトです。 SSH 接続後、su - root のパスワードを手動入力するだけで、nginx の安全な再起動まで一気に実行できます。 ...

公開: 2026年1月9日 · 更新: 2026年4月22日 · Toshihiko Arai

curlとjqで作る便利シェル集|祝日カレンダー・天気・地震・LLM API

はじめに ターミナルでよく使う処理は、ブラウザを開くより curl や jq でそのまま呼び出す方が手早く済みます。 この記事では、外部のデータや API を使って、手元のシェルを少し便利にする実例をまとめました。zshrc にそのまま入れやすいものを中心にしています。 この記事で扱う内容は次のとおりです。 祝日付きの3か月カレンダーを表示する 気象庁データから天気を表示する 地震情報を一覧で見る LLM API をシェルから呼び出す 後半では、API ではないものの一緒に置いておくと便利だったエイリアスも載せています。 祝日付きカレンダーを表示する まずは、cal コマンドを少し便利にする例です。 cal コマンドはlinuxやmacOSのターミナルでカレンダーを表示できるシェルです。ターミナルで高速表示できるカレンダーは地味に便利で重宝しています。 項目 コマンド 今月のカレンダーを表示 cal 指定した月のカレンダーを表示 cal 3 2024 年間カレンダーを一覧で表示 cal 2024 先月、当月、翌月のカレンダーを表示 cal -3 とくに先月・当月・翌月をまとめて表示する cal -3 が便利なのですが、標準では祝日が出ません。そこで、内閣府が公開している祝日 CSV を合わせて表示するようにしました。 cal -3; curl -s https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv | iconv -f SHIFT-JIS -t UTF-8 | grep -E "`date -v-1m '+%Y/%-m/'`|`date '+%Y/%-m/'`|`date -v+1m '+%Y/%-m/'`" calコマンドの実行イメージ: calコマンドの実行イメージ % cal3 4月 2026 5月 2026 6月 2026 日 月 火 水 木 金 土 日 月 火 水 木 金 土 日 月 火 水 木 金 土 1 2 3 4 1 2 1 2 3 4 5 6 5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13 12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20 19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27 26 27 28 29 30 24 25 26 27 28 29 30 28 29 30 31 2026/4/29,昭和の日 2026/5/3,憲法記念日 2026/5/4,みどりの日 2026/5/5,こどもの日 2026/5/6,休日 内閣府が公開している祝日 CSV を curl で取得し、iconv で SHIFT-JIS から UTF-8 に変換しています。そのうえで cal -3 の表示に合わせて、先月・当月・翌月の行だけを grep で拾っています。 ...

公開: 2025年9月10日 · 更新: 2026年4月20日 · Toshihiko Arai

FFmpegでGIFアニメ作成|シェル・コマンド

はじめに この記事では、iPhoneで録画した動画ファイルを、FFmpegでGIFアニメーションに変換する方法を解説する。 パレット機能で見た目を整え、gifsicleでファイルサイズを小さくするところまで扱う。 最後に、GitHubで公開しているスクリプトをcurl経由でその場実行する方法も紹介する。 なお、macOSにbrewを使ってFFmpegがインストールされているものとする。 FFmpegでGIFアニメの基本の作り方 iPhoneで録画した動画ファイルをinput.movとして用意した。動画のファイルサイズは5.3 MB。 FFmpegを使って、動画ファイルをGIFアニメに変換するコマンドがこちら。横幅を320pxに収めるため、アスペクト比を保ちながら変換した。フレームレートは15fps。 ffmpeg -i input.mov -vf scale=320:-1 -r 15 output.gif ご覧の通り、画像がざらざらしていて、決してキレイとは言えない。GIFアニメのファイルサイズは約288 KB。 次では、もうひと手間かけて画像をキレイにする方法を紹介する。 FFmpegでGIFアニメをキレイに作る方法 FFmpegでGIFアニメをキレイに作るには、パレット機能を使う。次のコマンドで動画ファイルから色彩情報を抽出したpalette.pngを作成する。 ffmpeg -i input.mov -vf fps=15,scale=320:-1:flags=lanczos,palettegen palette.png 生成されたpalette.png画像がこちら。 このpalette.pngを元に動画を変換する。 ffmpeg -i input.mov -i palette.png -filter_complex "fps=15,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif だいぶキレイなGIFアニメを作ることができた。しかし、ファイルサイズは約786 KBで、最初のGIF画像の3倍弱の容量になってしまった。そこでこのファイルサイズを小さくする方法を次の項で紹介する。 GIFアニメのファイルサイズを小さくする方法 ここでは、GIFアニメのファイルサイズを小さくするために、gifsicleを使ってコマンドラインで圧縮する方法を紹介する。 gifsicleは、GIFをコマンドラインで編集できるツールだ。brewを使ってインストールする。 brew install gifsicle Gifsicleの詳細はこちら。 https://github.com/kohler/gifsicle 使い方は、次のとおり。 gifsicle -O3 --colors=128 --lossy=30 output.gif -o output_compressed.gif lossyの値を増やしていくとファイルサイズが小さくなる。 この結果、ファイルサイズを約786 KBから約369 KB(約53%削減)へと圧縮できた。 見た目もそれほど変わらない。 アニメGIF作成のシェルスクリプト ここまでのコマンドを毎回入力するのは面倒なので、シェルスクリプト化してみた。 使い方は、$ ./gif_anime.sh 動画ファイルで引数に動画のパスを渡す。すると、動画ファイルのディレクトリ上にanime.gifの名前でGIFアニメが保存される。 #!/bin/bash input=$1 output=$(dirname ${input})/anime.gif tmp=$(dirname ${input})/tmp.gif echo $output ffmpeg -i $input -vf fps=15,scale=320:-1:flags=lanczos,palettegen palette.png ffmpeg -i $input -i palette.png -filter_complex "fps=15,scale=320:-1:flags=lanczos[x];[x][1:v]paletteuse" $tmp gifsicle -O3 --colors=128 --lossy=30 $tmp -o $output rm -rf palette.png rm -rf $tmp 同じ考え方のスクリプトは、GitHubのshell-toolbox でも公開している。 手元にスクリプトを保存せず、その場で実行したい場合は、次のようにcurlで取得した内容をbashへ渡す。 ...

公開: 2019年3月6日 · 更新: 2026年4月29日 · Toshihiko Arai