シェルスクリプトでAPI自動化ガイド
LLM APIをシェルスクリプトで自動化する実践手順。
概要
curl + jq + シェルスクリプトで:
- 定期的なAPI呼び出し
- バッチ処理
- パイプライン構築
手順
01. 基本スクリプト作成
touch llm-query.sh
chmod +x llm-query.sh
02. スクリプト記述
#!/bin/bash
llm-query.sh - LLMに質問するスクリプト
PROMPT="$1"
if [ -z "$PROMPT" ]; then
echo "Usage: ./llm-query.sh 'your question'"
exit 1
fi
curl -s https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"claude-3-5-sonnet-20241022\",
\"max_tokens\": 1024,
\"messages\": [{\"role\": \"user\", \"content\": \"$PROMPT\"}]
}" | jq -r '.content[0].text'
03. 実行
./llm-query.sh "Pythonでファイル読み込みの例"
04. 完了
参考リンク
ここから先は、実用的な自動化パターンを解説します。
Q&A - 基本パターン
ファイルから入力
#!/bin/bash
file-to-llm.sh
INPUT_FILE="$1"
CONTENT=$(cat "$INPUT_FILE")
curl -s https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"claude-3-5-sonnet-20241022\",
\"max_tokens\": 4096,
\"messages\": [{\"role\": \"user\", \"content\": $(echo "$CONTENT" | jq -Rs .)}]
}" | jq -r '.content[0].text'
結果をファイルに保存
./llm-query.sh "質問" > output.txt
複数ファイルを処理
#!/bin/bash
batch-process.sh
for file in *.txt; do
echo "Processing: $file"
./llm-query.sh "$(cat $file)" > "result_$file"
done
Q&A - 実用スクリプト
コードレビュー自動化
#!/bin/bash
code-review.sh
FILE="$1"
CODE=$(cat "$FILE")
PROMPT="以下のコードをレビューしてください。問題点と改善案を提示:
$CODE"
./llm-query.sh "$PROMPT"
git diffを要約
#!/bin/bash
summarize-diff.sh
DIFF=$(git diff HEAD~1)
PROMPT="以下のgit diffを日本語で要約してください:
$DIFF"
./llm-query.sh "$PROMPT"
ログ分析
#!/bin/bash
analyze-log.sh
LOG=$(tail -100 /var/log/app.log)
PROMPT="以下のログからエラーを抽出し、原因を推測してください:
$LOG"
./llm-query.sh "$PROMPT"
Q&A - 定期実行
cronで定期実行
crontab -e
追記:
0 9 * /home/user/scripts/daily-report.sh >> /home/user/logs/report.log 2>&1
systemd timerで定期実行
/etc/systemd/system/llm-task.timer:
[Unit]
Description=Run LLM task daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
Q&A - エラーハンドリング
APIエラーチェック
#!/bin/bash
RESPONSE=$(curl -s https://api.anthropic.com/v1/messages ...)
ERROR=$(echo "$RESPONSE" | jq -r '.error.message // empty')
if [ -n "$ERROR" ]; then
echo "API Error: $ERROR" >&2
exit 1
fi
echo "$RESPONSE" | jq -r '.content[0].text'
リトライ機能
#!/bin/bash
MAX_RETRIES=3
RETRY_DELAY=5
for i in $(seq 1 $MAX_RETRIES); do
RESPONSE=$(curl -s ...)
if echo "$RESPONSE" | jq -e '.content[0].text' > /dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.content[0].text'
exit 0
fi
echo "Retry $i/$MAX_RETRIES..." >&2
sleep $RETRY_DELAY
done
echo "Failed after $MAX_RETRIES attempts" >&2
exit 1
Q&A - 高度な自動化
パイプライン処理
# データ収集 → LLM処理 → 出力
curl -s https://api.example.com/data | \
jq '.items[]' | \
while read item; do
./llm-query.sh "分析: $item" >> results.txt
done
並列処理
#!/bin/bash
parallel-process.sh
cat questions.txt | xargs -P 4 -I {} ./llm-query.sh "{}"
環境変数の安全な管理
#!/bin/bash
.envファイルから読み込み
if [ -f .env ]; then
export $(cat .env | xargs)
fi
キーの存在確認
if [ -z "$ANTHROPIC_API_KEY" ]; then
echo "Error: ANTHROPIC_API_KEY not set" >&2
exit 1
fi
タグ: #シェルスクリプト #自動化 #API #LLM #bash