研究者や技術者に人気の「arXiv」。新着論文をいち早くチェックしたい!と思っても、毎日Webを開いて検索するのは手間ですよね。
そこで今回は、Google Apps Script(GAS)を使ってarXivの特定分野の論文情報(タイトル・Abstract)をSlackに自動投稿するスクリプトを、複数のパートに分けて解説します。
準備 – 必要なものをそろえる
SlackのIncoming Webhookを設定
Slackにメッセージを投稿するには「Webhook URL」が必要です。
- SlackでBotを作りたいチャンネルに移動
- Incoming Webhooks にアクセス
- 新しいWebhookを作成 → 投稿先チャンネルを選択
- 発行された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のトリガー機能を使います。
- メニューから「トリガー(時計マーク)」を開く
- 関数:
postArxivToSlack
を選択 - イベント:時間主導型 → 毎日、毎時間など好きな間隔で設定
運用とカスタマイズのヒント
-
キーワードで絞り込みたい場合
search_query=all:LLM+AND+cat:cs.CL
のように工夫することで、特定トピックの論文だけに絞れます。 -
Slackの投稿内容をカスタマイズ
Slackのメッセージをリッチにしたいなら、Block Kit形式のJSONを使うのもおすすめ。 -
重複投稿を防止したい
投稿済み論文のIDをスプレッドシートに記録し、次回の投稿時にチェックするロジックを追加できます。
まとめ
このスクリプトを使えば、あなたのSlackにarXivの最新論文が自動で届くBotが完成します。論文チェックの習慣化やチームでの共有に役立つので、ぜひ活用してみてください!