hackernews-intel について
Hacker Newsのキーワードを監視し、新たな一致をSlackで通知するスキルです。ローカルのSQLiteキャッシュで通知の重複を避け、手動またはスケジュール実行できます。
主な機能
- 01キーワードで新しいHacker News投稿を検索
- 02SQLiteキャッシュで一致を重複排除
- 03Slackにアラートを送信
- 04ポイントによる絞り込みとコメント監視に対応
- 05ドライランと定期実行に対応
活用シーン
- 01Hacker Newsで特定トピックの議論を追跡
- 02一致する新規投稿の定期通知
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill hackernews-intelインストール後、Claude Code で/hackernews-intelを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.env.examplepackage.jsonREADME.mdevals/evals.jsonscripts/monitor-hn.js詳細
Hacker News インテル
キーワードを対象に Hacker News を監視します。実行するたびに HN Algolia API を通じて新しい投稿を取得し、ローカルの SQLite キャッシュと照合して重複を除外し、まだ通知していない該当投稿を Slack に通知します。手動で実行するか、cron または GitHub Actions でスケジュールできます。
ステップ 1:セットアップを確認する
1a. 必須の環境変数を確認する
次の環境変数が設定されていることを確認します。
HN_KEYWORDS(必須):監視するキーワードのカンマ区切りリストSLACK_WEBHOOK(必須):通知用の Slack Incoming Webhook URL
いずれかが設定されていない場合は、処理を中止してユーザーに次の内容を伝えます。
HN_KEYWORDS:監視するトピックをカンマ区切りで指定します。例:claude code,LLM agents,deno runtimeSLACK_WEBHOOK:https://api.slack.com/apps で Incoming Webhook を作成します。ワークスペースを選択し、Incoming Webhooks を有効にして、URL をコピーします。
1b. スクリプトの依存関係を確認する
ls /Users/ksd/Desktop/Varnan_skills/hackernews-intel/node_modules/better-sqlite3 2>/dev/null
不足している場合:
cd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && npm install
ステップ 2:モニターを実行する
cd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && node scripts/monitor-hn.js
フラグ:
--dry-run:Slack 通知を送らずに、該当する投稿を標準出力に表示します。通知を実際に送る前に内容を確認するために使用します。--days=N:初回実行時に、過去 N 日分を検索します(既定値:1)。SQLite キャッシュが空の場合にのみ適用されます。--reset:キャッシュを消去して新たに開始します。キーワードリストを大幅に変更した場合に使用します。
スクリプトの処理内容:
- 環境変数から
HN_KEYWORDSを読み込み、カンマで分割して空白を取り除きます HN_DB_PATHで指定されたパスに SQLite データベースを開く(または作成する)。(既定値:./hn-intel.db)- 各キーワードについて、
numericFilters=created_at_i>lastSeenを指定してhttps://hn.algolia.com/api/v1/search_by_dateを呼び出します - 各検索結果について、
objectIDがすでにseen_postsにあるか確認し、あればスキップします HN_MIN_POINTSが設定されている場合、そのしきい値未満の投稿をスキップします- 新たに該当した投稿について、Slack 通知を送信し、
objectIDをキャッシュに追加します - 実行の概要で
poll_logを更新します - 概要を標準出力に表示します
ステップ 3:結果を確認する
スクリプトの実行後、標準出力を確認します。次の内容が報告されます。
Run complete.
Keywords checked: N
Posts found: N
Posts alerted: N
Posts skipped (already seen): N
Errors: N
Posts found: 0 と表示され、結果があるはずなのに見つからない場合は、次を確認してください。
- キーワードが具体的すぎませんか?「AI」のような非常に広い語句でも、HN Algolia が多数の結果を返し、検索対象期間が短い場合は、結果が 0 件になることがあります
- 初回実行時の
--daysの期間が短すぎませんか?--days=7を試してください - DB キャッシュの条件が厳しすぎませんか?
--resetでキャッシュを消去してから再実行してください
Posts found: N に対して Posts alerted: 0 と表示された場合、重複除外は機能しています。これらの投稿は以前の実行ですでに確認されています。
ステップ 4:モニターをスケジュールする
オプション A:cron(macOS/Linux)
4 時間ごとに実行するには、crontab に追加します。
crontab -e
次の行を追加します(インストール環境に合わせてパスを調整してください)。
0 */4 * * * cd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && node scripts/monitor-hn.js >> /tmp/hn-intel.log 2>&1
オプション B:GitHub Actions(チームにおすすめ)
任意のリポジトリに .github/workflows/hn-intel.yml を作成します。
name: HN Intel Monitor
on:
schedule:
- cron: '0 */4 * * *'
workflow_dispatch:
jobs:
monitor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm install
working-directory: hackernews-intel
- name: Run monitor
run: node scripts/monitor-hn.js
working-directory: hackernews-intel
env:
HN_KEYWORDS: ${{ secrets.HN_KEYWORDS }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
HN_MIN_POINTS: ${{ secrets.HN_MIN_POINTS }}
HN_KEYWORDS、SLACK_WEBHOOK、必要に応じて HN_MIN_POINTS をリポジトリのシークレットとして追加します。
注:GitHub Actions では実行間でファイルが保持されないため、SQLite キャッシュは実行ごとにリセットされます。そのため、毎回の実行で、既定の過去 1 日間の対象期間内にあるすべての投稿が再び見つかります。GitHub Actions で重複除外を永続化するには、DB を永続的な場所(S3、アーティファクトキャッシュ、または専用ブランチ)に保存してください。
ステップ 5:キーワードとしきい値を調整する
キーワードを追加または変更する場合:
.env または環境変数の HN_KEYWORDS を更新します。再起動は不要です。スクリプトは実行のたびに最新の値を読み込みます。
ポイントの最小しきい値を設定する場合:
HN_MIN_POINTS=10 を設定すると、10 ポイント以上の投稿のみが通知されます。広範なキーワードによるノイズを減らせます。
コメントも対象に含める場合(ストーリーだけでなく):
HN_INCLUDE_COMMENTS=true を設定すると、キーワードに言及しているコメントも監視対象になります。既定では無効です。コメントを含めると通知数が大幅に増加します。
キャッシュをリセットする場合:
node scripts/monitor-hn.js --reset を実行すると、seen_posts と poll_log が消去されます。次回の実行では、検索対象期間内の新しいデータを取得します。
新しいキーワードをテストする場合:
node scripts/monitor-hn.js --dry-run --days=7 を実行すると、誰にも通知せずに、過去 7 日間の該当投稿を確認できます。