0%
バイブコーディング#自動化#スクリプト#cron

AIで自動化|繰り返し作業をコードで解決する方法

AIを使って日常の繰り返し作業を自動化する方法。スクリプト作成、定期実行、通知連携を解説。

||11分で読める

AIで自動化

毎日やってる作業、自動化できませんか?

自動化できること

・データ収集(スクレイピング)
・レポート生成
・ファイル整理
・メール送信
・SNS投稿
・バックアップ

AIへの指示の仕方

作業を言語化

「毎日やっていること:
1. 競合サイトの価格をチェック
2. Excelにまとめる
3. 変動があればSlackに通知

これを自動化したい」

スクリプト生成

この作業を自動化するPythonスクリプトを書いて:
- 指定URLから価格を取得
- CSVに保存
- 前日と比較して変動があればSlack通知

実践例

Webスクレイピング

# scraper.py
import requests
from bs4 import BeautifulSoup
import csv
from datetime import datetime

def scrape_prices(urls):
    results = []
    for url in urls:
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        price = soup.select_one('.price').text
        results.append({
            'url': url,
            'price': price,
            'date': datetime.now().isoformat()
        })
    return results

def save_to_csv(data, filename='prices.csv'):
    with open(filename, 'a', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=['url', 'price', 'date'])
        writer.writerows(data)

定期実行(cron)

# 毎日9時に実行
0 9 * * * python /path/to/scraper.py

# 1時間ごとに実行
0 * * * * python /path/to/script.py

GitHub Actionsで定期実行

# .github/workflows/automation.yml
name: Daily Automation

on:
  schedule:
    - cron: '0 0 * * *'  # 毎日UTC 0時
  workflow_dispatch:  # 手動実行も可能

jobs:
  run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - run: pip install -r requirements.txt
      - run: python scripts/automation.py

通知連携

Slack通知

import requests

def notify_slack(message):
    webhook_url = os.environ['SLACK_WEBHOOK_URL']
    requests.post(webhook_url, json={'text': message})

# 使用例
if price_changed:
    notify_slack(f'価格が変動しました: {old_price} → {new_price}')

Discord通知

def notify_discord(message):
    webhook_url = os.environ['DISCORD_WEBHOOK_URL']
    requests.post(webhook_url, json={'content': message})

LINE通知

def notify_line(message):
    token = os.environ['LINE_NOTIFY_TOKEN']
    requests.post(
        'https://notify-api.line.me/api/notify',
        headers={'Authorization': f'Bearer {token}'},
        data={'message': message}
    )

ファイル自動整理

ダウンロードフォルダを自動整理するスクリプト:
- 画像 → Imagesフォルダ
- PDF → Documentsフォルダ
- 7日以上古いファイル → Archiveフォルダ

生成されるコード:

import os
import shutil
from datetime import datetime, timedelta

DOWNLOADS = '/Users/you/Downloads'
RULES = {
    '.jpg': 'Images', '.png': 'Images', '.gif': 'Images',
    '.pdf': 'Documents', '.doc': 'Documents', '.docx': 'Documents',
}

def organize_downloads():
    for filename in os.listdir(DOWNLOADS):
        filepath = os.path.join(DOWNLOADS, filename)
        if os.path.isfile(filepath):
            ext = os.path.splitext(filename)[1].lower()
            if ext in RULES:
                dest_folder = os.path.join(DOWNLOADS, RULES[ext])
                os.makedirs(dest_folder, exist_ok=True)
                shutil.move(filepath, os.path.join(dest_folder, filename))

レポート自動生成

Google Analyticsのデータを取得して
週次レポートを自動生成したい
from google.analytics.data import BetaAnalyticsDataClient

def generate_weekly_report():
    client = BetaAnalyticsDataClient()

    response = client.run_report(
        property=f'properties/{PROPERTY_ID}',
        date_ranges=[{'start_date': '7daysAgo', 'end_date': 'today'}],
        metrics=[
            {'name': 'activeUsers'},
            {'name': 'sessions'},
            {'name': 'bounceRate'},
        ],
    )

    # レポート生成
    report = f"""
    週次レポート
    ====================
    アクティブユーザー: {response.rows[0].metric_values[0].value}
    セッション: {response.rows[0].metric_values[1].value}
    直帰率: {response.rows[0].metric_values[2].value}%
    """

    return report

注意点

エラーハンドリング

try:
    result = scrape_data()
except Exception as e:
    notify_slack(f'エラーが発生: {e}')
    raise

ログ記録

import logging

logging.basicConfig(
    filename='automation.log',
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)

logging.info('自動化スクリプト開始')

レート制限

import time

for url in urls:
    scrape(url)
    time.sleep(1)  # 1秒待機

次のステップ

シェア:

参考文献・引用元

バイブコーディングの他の記事

他のカテゴリも見る