arXivの最新論文をSlackに自動通知する!Google Apps Scriptで作るシンプルBot

IT・プログラミング

研究者や技術者に人気の「arXiv」。新着論文をいち早くチェックしたい!と思っても、毎日Webを開いて検索するのは手間ですよね。

そこで今回は、Google Apps Script(GAS)を使ってarXivの特定分野の論文情報(タイトル・Abstract)をSlackに自動投稿するスクリプトを、複数のパートに分けて解説します。

準備 – 必要なものをそろえる

SlackのIncoming Webhookを設定

Slackにメッセージを投稿するには「Webhook URL」が必要です。

  1. SlackでBotを作りたいチャンネルに移動
  2. Incoming Webhooks にアクセス
  3. 新しいWebhookを作成 → 投稿先チャンネルを選択
  4. 発行されたURLをコピー(例:https://hooks.slack.com/services/TXXXX/BXXXX/XXXXXXXX

詳細な取得方法はこちらで解説しています。

Googleスプレッドシートを用意

以下のような構成で、設定項目を管理する「Settings」シートを作ります。

A列(キー) B列(値)
SLACK_WEBHOOK_URL https://hooks.slack.com/services/
CATEGORY cs.CL
MAX_RESULTS 5

Google Apps Scriptを書く

スプレッドシート上で「拡張機能 → Apps Script」を開き、以下のコードを貼り付けます。

設定読み込み用関数

function getSettings() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Settings');
  const values = sheet.getDataRange().getValues();
  const settings = {};
  values.forEach(([key, value]) => {
    if (key) settings[key] = value;
  });
  return settings;
}

メイン処理:arXiv APIから取得 → Slackに投稿

function postArxivToSlack() {
  const settings = getSettings();
  const SLACK_WEBHOOK_URL = settings['SLACK_WEBHOOK_URL'];
  const CATEGORY = settings['CATEGORY'] || 'cs.CL';
  const MAX_RESULTS = parseInt(settings['MAX_RESULTS'], 10) || 5;

  const url = `http://export.arxiv.org/api/query?search_query=cat:${CATEGORY}&sortBy=submittedDate&sortOrder=descending&max_results=${MAX_RESULTS}`;
  const response = UrlFetchApp.fetch(url);
  const xml = response.getContentText();
  const doc = XmlService.parse(xml);
  const entries = doc.getRootElement().getChildren('entry', doc.getRootElement().getNamespace());

  entries.forEach(entry => {
    const title = entry.getChildText('title', doc.getRootElement().getNamespace()).trim();
    const summary = entry.getChildText('summary', doc.getRootElement().getNamespace()).trim();
    const link = entry.getChildText('id', doc.getRootElement().getNamespace()).trim();

    const payload = {
      text: `*${title}*\n${summary}\n<${link}|Read more>`
    };

    const options = {
      method: 'post',
      contentType: 'application/json',
      payload: JSON.stringify(payload)
    };

    UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
  });
}

postArxivToSlackを実行すると
最初は実行の承認が表示されますが、許可してください。

このような感じで投稿が確認できます。

トリガーで定期実行する

Slackに定期的に通知するには、GASのトリガー機能を使います。

  1. メニューから「トリガー(時計マーク)」を開く
  2. 関数:postArxivToSlack を選択
  3. イベント:時間主導型 → 毎日、毎時間など好きな間隔で設定

運用とカスタマイズのヒント

  • キーワードで絞り込みたい場合
    search_query=all:LLM+AND+cat:cs.CL のように工夫することで、特定トピックの論文だけに絞れます。

  • Slackの投稿内容をカスタマイズ
    Slackのメッセージをリッチにしたいなら、Block Kit形式のJSONを使うのもおすすめ。

  • 重複投稿を防止したい
    投稿済み論文のIDをスプレッドシートに記録し、次回の投稿時にチェックするロジックを追加できます。

まとめ

このスクリプトを使えば、あなたのSlackにarXivの最新論文が自動で届くBotが完成します。論文チェックの習慣化やチームでの共有に役立つので、ぜひ活用してみてください!

タイトルとURLをコピーしました