シェルスクリプトで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
← ターミナルAPIシリーズ一覧へ