⚙️ 自動化
ワークフロー最適化
既存のワークフローを分析し、最適化された自動化スクリプトを作成します
★★★ 上級 40 min 2025年1月13日
ユースケース
繰り返しのワークフローは時間を浪費し、エラーを引き起こします。Cowork は、ドキュメント化されたプロセスを分析し、業務を効率化する自動化スクリプトを作成できます。
プロンプト例
~/Workflows/daily_report.md にワークフローをドキュメント化しています。これは日次レポート生成プロセスを説明しています。現在、以下の手順が含まれています:
1. 3 つの Google Sheets からデータをエクスポート
2. サーバーからログをダウンロード
3. CSV を処理して KPI を抽出
4. チャートを生成
5. Word ドキュメントにまとめる
6. 関係者にメール送信
以下をお願いします:
1. このワークフローの自動化の機会を分析
2. 可能なすべてを自動化する単一のスクリプトを作成
3. まだ手動介入が必要なステップを特定
4. 時間削減の見積もり
5. ~/Scripts/daily_report/ に自動化を作成
Cowork の動作
- プロセス分析: ワークフロードキュメントを読み取り、解析します
- 自動化評価: 自動化可能なステップを特定します
- スクリプト生成: 包括的な自動化を作成します
- 統合セットアップ: 必要なサービスに接続します
- ドキュメント: 使用方法と制限事項を提供します
出力サンプル
# ワークフロー分析: 日次レポート生成
## 現在のプロセス(手動)
| ステップ | 説明 | 時間 | 自動化可能 |
|----------|------|------|------------|
| 1 | Google Sheets エクスポート | 10 分 | はい |
| 2 | サーバーログダウンロード | 5 分 | はい |
| 3 | CSV 処理 | 20 分 | はい |
| 4 | チャート生成 | 15 分 | はい |
| 5 | ドキュメント作成 | 20 分 | はい |
| 6 | 関係者へメール | 5 分 | はい |
**合計手動時間**: 75 分/日
**予想自動化時間**: 5 分(スクリプト実行時間)
**時間削減**: 70 分/日(約 93%)
## 自動化の制限
- Google Sheets は API 認証情報が必要
- メールは送信前に手動確認が必要な場合あり
- チャートは視覚的な確認が必要な場合あり
#!/usr/bin/env python3
# daily_report.py - 自動日次レポート生成
import os
import sys
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
from pathlib import Path
import subprocess
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.text import MIMEText
from email import encoders
# 設定
CONFIG = {
'output_dir': Path.home() / 'Reports',
'sheets_ids': [
'1ABC...', '1DEF...', '1GHI...'
],
'server': 'logs.example.com',
'recipients': ['team@example.com', 'manager@example.com'],
}
def export_sheets():
"""Google Sheets からデータをエクスポート"""
print("Google Sheets をエクスポート中...")
dfs = []
for sheet_id in CONFIG['sheets_ids']:
url = f"https://docs.google.com/spreadsheets/d/{sheet_id}/export?format=csv"
df = pd.read_csv(url)
dfs.append(df)
return dfs
def download_logs():
"""サーバーからログをダウンロード"""
print("サーバーログをダウンロード中...")
today = datetime.now().strftime('%Y-%m-%d')
log_path = CONFIG['output_dir'] / f'logs_{today}.txt'
subprocess.run([
'scp', f"{CONFIG['server']}:/var/log/app/app.log", str(log_path)
], check=True)
return log_path
def process_data(dfs, log_path):
"""データを処理して KPI を抽出"""
print("データを処理中...")
# データフレームを結合
combined = pd.concat(dfs, ignore_index=True)
# KPI を計算
kpis = {
'total_users': combined['user_id'].nunique(),
'total_revenue': combined['revenue'].sum(),
'avg_order_value': combined['revenue'].mean(),
'conversion_rate': combined['converted'].mean() * 100,
}
# ログを処理
with open(log_path) as f:
logs = f.read()
kpis['error_count'] = logs.count('ERROR')
kpis['warning_count'] = logs.count('WARNING')
return combined, kpis
def generate_charts(df, kpis):
"""可視化チャートを生成"""
print("チャートを生成中...")
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
# 収益トレンド
df.groupby('date')['revenue'].sum().plot(ax=axes[0,0], title='日次収益')
# ユーザー分布
df['segment'].value_counts().plot.pie(ax=axes[0,1], title='ユーザーセグメント')
# KPI サマリー
kpi_df = pd.DataFrame([kpis])
kpi_df[['total_revenue', 'avg_order_value']].plot.bar(ax=axes[1,0])
axes[1,0].set_title('収益指標')
# コンバージョンファネル
axes[1,1].bar(['訪問', 'サインアップ', '購入'],
[10000, 2500, 500])
axes[1,1].set_title('コンバージョンファネル')
plt.tight_layout()
chart_path = CONFIG['output_dir'] / f'charts_{datetime.now():%Y%m%d}.png'
plt.savefig(chart_path, dpi=150)
plt.close()
return chart_path
def compile_report(kpis, chart_path):
"""最終レポートを作成"""
print("レポートを作成中...")
report = f"""# 日次レポート
生成日時: {datetime.now():%Y-%m-%d %H:%M}
## 主要業績評価指標
| 指標 | 値 |
|------|-----|
| 総ユーザー数 | {kpis['total_users']:,} |
| 総収益 | ${kpis['total_revenue']:,.2f} |
| 平均注文額 | ${kpis['avg_order_value']:,.2f} |
| コンバージョン率 | {kpis['conversion_rate']:.1f}% |
## システム健全性
- エラー: {kpis['error_count']}
- 警告: {kpis['warning_count']}
## チャート
添付の可視化を参照してください。
"""
report_path = CONFIG['output_dir'] / f'report_{datetime.now():%Y%m%d}.md'
report_path.write_text(report)
return report_path
def send_email(report_path, chart_path):
"""メールでレポートを送信"""
print("レポートを送信中...")
# メール送信ロジックをここに
print(f"レポートを {len(CONFIG['recipients'])} 人の受信者に送信しました")
def main():
print("日次レポート生成を開始")
print("=" * 50)
try:
dfs = export_sheets()
log_path = download_logs()
df, kpis = process_data(dfs, log_path)
chart_path = generate_charts(df, kpis)
report_path = compile_report(kpis, chart_path)
# 送信前にレビューを求める
print(f"\nレポート準備完了: {report_path}")
if input("メールを送信しますか? (y/n): ").lower() == 'y':
send_email(report_path, chart_path)
print("\n日次レポート完了!")
except Exception as e:
print(f"エラー: {e}")
sys.exit(1)
if __name__ == '__main__':
main()
ヒント
- 現在のプロセスのドキュメント化から始める
- まずボトルネックと手動ステップを特定する
- 本番環境で使用する前にサンプルデータで自動化をテストする
- 重要な判断には人間の確認を残す
- トラブルシューティング用にログを追加する