毎日15分を自動化!PythonとGitHub Actionsで作る『自分専用・更新通知エージェント』

毎日15分を自動化!PythonとGitHub Actionsで作る『自分専用・更新通知エージェント』

2026/07/26

なぜ、私たちは「情報収集」というルーチンに時間を奪われるのか

毎日、決まったサイトの更新を確認していませんか?

「あの技術ブログ、新しい記事が出ていないか確認しなきゃ」「このツールのドキュメント、バージョンアップされていないかな」

これ、私もかつては毎朝30分かけてやっていました。しかし、40代になって体力と集中力が限られてくると、この「単純な確認作業」がいかに生産性を下げているかに気づかされました。エンジニアとしてコードを書くべき時間に、ただブラウザの更新ボタンを叩くだけの作業。これが毎日積み重なれば、年間で何十時間という損失になります。

今回は、そんな「見逃せないが、確認は面倒」という情報を、PythonとGitHub Actionsを使って完全に自動化する仕組みをご紹介します。これさえ設定すれば、朝起きた時にあなたのスマホには「必要な情報」だけが届いている状態を作れます。

自動化システムの全体像を理解する

今回構築するのは、サーバーを用意せずに無料で運用できる「クラウド型クローラー」です。構成は非常にシンプル。GitHub上のリポジトリに置いたPythonスクリプトが、GitHub Actionsのスケジュール機能(Cron)によって自動実行される仕組みです。

graph TD
    A["GitHub Actions (定期実行)"] --> B["Pythonスクリプト実行"]
    B --> C["対象サイトへアクセス"]
    C --> D{"データに変更があるか?"}
    D -- "YES" --> E["通知を送信 (Discord/Slack/Email等)"]
    D -- "NO" --> F["何もしない"]

ポイントは「環境構築コストゼロ」であること。Pythonが動くPCが手元になくても、GitHubさえあれば24時間365日、あなたの代わりに巡回してくれます。

実践:更新監視スクリプトの実装

まずは、Webサイトの更新を検知するPythonコードの基本形です。特定の要素を取得し、前回の結果とハッシュ値を比較することで更新を判断します。

import requests
from bs4 import BeautifulSoup
import hashlib

def check_site_update(url, target_selector):
    # サイトにアクセスしてコンテンツを取得
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    content = str(soup.select(target_selector))
    
    # コンテンツのハッシュ値を計算
    current_hash = hashlib.md5(content.encode()).hexdigest()
    
    # 比較用ハッシュをファイルに保存
    try:
        with open("last_hash.txt", "r") as f:
            last_hash = f.read()
    except FileNotFoundError:
        last_hash = ""
        
    if current_hash != last_hash:
        with open("last_hash.txt", "w") as f:
            f.write(current_hash)
        return True
    return False

経験から学ぶ「通知の最適化」

実は、最初の実装で失敗したことがあります。それは「更新があるたびに毎回通知を送る」という設定にしたこと。対象サイトが細かく修正を入れるタイプだったため、スマホが通知の嵐になり、結局「通知を見ない」という本末転倒な事態に陥りました。

この経験から、「重要な変化だけを検知する」ことの重要性を学びました。ハッシュ値を比較するだけでなく、特定のキーワードが含まれる場合のみ通知するなど、フィルタリングを一段挟むのが運用のコツです。

GitHub Actionsによる定期実行設定

このスクリプトをGitHubにプッシュし、以下のYAMLファイルを .github/workflows/monitor.yml として保存するだけで、毎日自動で実行されます。

name: "Site Monitor"
on:
  schedule:
    - cron: "0 8 * * *" # 毎日朝8時に実行
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: "Set up Python"
        uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - name: "Install dependencies"
        run: pip install requests beautifulsoup4
      - name: "Run script"
        run: python monitor.py
        env:
          WEBHOOK_URL: ${{ secrets.WEBHOOK_URL }}
      - name: "Commit result"
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add last_hash.txt
          git commit -m "Update hash" || echo "No changes"
          git push

この設定の最大の肝は、git commitgit push を自動化している点です。これにより、前回のハッシュ値をリポジトリ自体に永続化できるため、別途データベースサーバーなどを立てる必要がありません。

導入時の注意点とエンジニアとしての視点

この自動化を導入するにあたって、2点だけ注意してください。

  1. スクレイピングのマナー: 相手のサーバーに過度な負荷をかけないこと。requests を送る際は time.sleep を挟むなど、常識的な間隔を開けるようにしてください。
  2. セキュリティ: 通知用のWebhook URLなどは、GitHubのSecrets機能を使って環境変数として管理してください。決してコード内に直接記述(ハードコーディング)してはいけません。

エンジニアとしてこのツールを運用し始めてから、私の朝の時間は「情報の取捨選択」から「情報の咀嚼(そしゃく)」へと変わりました。自動化は単なる怠慢ではなく、「自分の頭で考える時間を守るための防衛策」です。

まとめ:まずは「1サイト」から始めよう

今回ご紹介した仕組みは、最初は少し手間だと感じるかもしれません。しかし、一度動いてしまえば、あなたの代わりに毎日働いてくれる頼もしい相棒になります。

  • ステップ1: 毎日確認しているWebサイトを1つ選ぶ。
  • ステップ2: 上記のPythonコードで、そのサイトの特定のHTML要素を抽出するスクリプトを書く。
  • ステップ3: GitHub Actionsで1日1回動かしてみる。

まずはこの小さな成功体験を積み重ねてみてください。自動化の快感を知ると、日常のあらゆる面倒なルーチンが「自動化のチャンス」に見えてくるはずです。

もしコードの書き方や、特定の通知サービス(LINE Notifyなど)との連携で詰まったら、公式ドキュメントや関連コミュニティを参考にしてください。皆さんの生活が、少しでも効率的で創造的なものになることを願っています。