フリーランスや経営者の皆さん、毎日の情報収集にどれくらいの時間をかけていますか?「競合の動向をチェックしたい」「業界の最新ニュースを見逃したくない」と思いながらも、膨大なニュースサイトを巡回するだけで午前中が終わってしまった…なんて経験はありませんか?手作業での情報収集は時間がかかるだけでなく、重要なニュースを見落としてしまうリスクも伴います。もし、自分に関係のあるニュースだけが自動で手元に届くとしたら、どれだけ効率的でしょうか。この記事では、プログラミング初心者の方でも大丈夫なように、Google Apps Script (GAS)という無料ツールを使って、指定したキーワードを含む最新ニュースを自動でSlackに通知する仕組みの作り方を、ステップ・バイ・ステップで丁寧に解説します。この記事を読み終える頃には、あなた専用の「ニュース収集アシスタント」が完成し、情報収集の時間を大幅に削減できるようになっているはずです!
今回作成する自動化の全体像
まずは、今回作る自動化の仕組みがどのような流れで動くのか、全体像を把握しておきましょう。以下の図のように、非常にシンプルなプロセスで動作します。
graph TD
A[定刻になると自動で起動
(GASトリガー)] --> B[ニュースサイトのRSSフィードを取得];
B --> C{記事に指定したキーワードが含まれるか?};
C -- はい --> D[記事のタイトルとURLを整形];
D --> E[Slackの指定チャンネルに通知];
C -- いいえ --> F[なにもせず処理を終了];
E --> F;
この仕組みを一度設定してしまえば、あとはGASが毎日決まった時間に自動でニュースをチェックし、該当するものだけをSlackに届けてくれます。
ステップ0:事前準備
早速構築を始めたいところですが、その前にいくつか準備が必要です。以下の4つが揃っているか確認してください。すべて無料で用意できるものばかりです。
- Googleアカウント: GoogleドライブやGmailなどを使っているものでOKです。Google Apps Scriptを利用するために必須です。
- Slackアカウント: 通知を受け取るためのワークスペースとアカウントが必要です。
- Slack Incoming Webhook URL: GASからSlackへ通知を送信するための「専用のURL」です。後ほどステップ1で取得方法を詳しく解説します。
- ニュースソースのRSSフィードURL: 監視したいニュースサイトが提供しているRSSフィードのURLです。例えば、Yahoo!ニュースの主要トピックスであれば「
https://news.yahoo.co.jp/rss/topics/top-picks.xml」などがあります。お好みのサイトのものを探してみてください。
ステップ・バイ・ステップ構築ガイド
準備が整ったら、いよいよ構築作業に入ります。ここからは画面の指示に従って進めれば、誰でも完成させることができますので、リラックスして進めていきましょう。
Step1:Slackで通知の受け口(Webhook URL)を用意する
まず、GASからの通知を受け取るための「合言葉」となるWebhook URLをSlackで発行します。
- 通知を受け取りたいSlackワークスペースにログインします。
- 左上のワークスペース名をクリックし、「設定と管理」から「アプリを管理する」を選択します。
- ブラウザでアプリ管理ページが開くので、右上の検索窓に「Incoming Webhooks」と入力して検索し、クリックします。
- 「Slackに追加」ボタンを押し、次の画面で「チャンネルへの投稿」という項目で通知を送りたいチャンネルを選択します。(例:「#general」「#ニュース速報」など)
- 「Incoming Webhookインテグレーションの追加」ボタンを押します。
- 「Webhook URL」という項目に表示されているURL(
https://hooks.slack.com/services/...のような形式)をコピーします。このURLは外部に漏れないよう、大切に保管してください。これがGASからSlackへの通知の「鍵」になります。
Step2:Google Apps Script (GAS) プロジェクトを立ち上げる
次に、自動化プログラムを設置する場所を用意します。
- Googleドライブ(https://drive.google.com/)を開きます。
- 左上の「+ 新規」ボタンをクリックし、「その他」>「Google Apps Script」を選択します。
- 新しいプロジェクトがエディタ画面で開きます。左上の「無題のプロジェクト」をクリックし、「ニュース自動通知ボット」など、分かりやすい名前に変更しておきましょう。
- エディタに最初から書かれている `function myFunction() { … }` というコードは不要なので、すべて削除して空の状態にしてください。
Step3:ニュースを取得しSlackに通知するコードを書く
いよいよ、メインのコードを書いていきます。以下のコードをすべてコピーし、先ほど空にしたGASのエディタ画面に貼り付けてください。
// ▼▼▼ ここから設定項目 ▼▼▼
// Step1で取得したSlackのWebhook URLを貼り付けます
const WEBHOOK_URL = 'ここにSlackのWebhook URLを貼り付け';
// 監視したいニュースサイトのRSSフィードのURLを貼り付けます
const RSS_URL = 'https://news.yahoo.co.jp/rss/topics/top-picks.xml';
// 探したいキーワードを配列形式で指定します(複数指定可能)
const KEYWORDS = ['業務改善', 'DX', 'フリーランス'];
// ▲▲▲ 設定項目はここまで ▲▲▲
/**
* メインの処理を実行する関数
*/
function main() {
try {
const articles = fetchAndFilterNews();
if (articles.length > 0) {
postToSlack(articles);
console.log(`${articles.length}件のニュースを通知しました。`);
} else {
console.log('キーワードに一致する新しいニュースはありませんでした。');
}
} catch (e) {
console.error('エラーが発生しました: ' + e.message);
}
}
/**
* RSSフィードを取得し、キーワードでフィルタリングする関数
*/
function fetchAndFilterNews() {
// 1日以内に投稿された記事のみを対象にする
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const response = UrlFetchApp.fetch(RSS_URL).getContentText();
const xml = XmlService.parse(response);
const items = xml.getRootElement().getChild('channel').getChildren('item');
const matchedArticles = [];
for (const item of items) {
const pubDate = new Date(item.getChildText('pubDate'));
// 過去24時間以内の記事かチェック
if (pubDate < yesterday) continue;
const title = item.getChildText('title');
const link = item.getChildText('link');
// キーワードが含まれているかチェック
const hasKeyword = KEYWORDS.some(keyword => title.includes(keyword));
if (hasKeyword) {
matchedArticles.push({ title: title, link: link });
}
}
return matchedArticles;
}
/**
* Slackに通知を送信する関数
*/
function postToSlack(articles) {
let text = '🔔 関心のあるキーワードを含むニュースが見つかりました!\n\n';
for (const article of articles) {
text += `・<${article.link}|${article.title}>\n`;
}
const payload = {
'text': text,
};
const options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload),
};
UrlFetchApp.fetch(WEBHOOK_URL, options);
}
貼り付けたら、コード上部の「設定項目」部分をご自身の情報に書き換えてください。
1. `WEBHOOK_URL`の `’ここに…’` の部分を、Step1で取得したご自身のWebhook URLに置き換えます。
2. `RSS_URL`を、監視したいRSSフィードのURLに書き換えます。
3. `KEYWORDS`に、通知してほしいキーワードを `’単語’` の形で指定します。複数指定も可能です。
Step4:テスト実行して動作を確認する
コードの設定が完了したら、一度だけ手動で動かして、正しくSlackに通知が飛ぶか確認してみましょう。
- GASエディタの上部にある関数選択のプルダウンが「main」になっていることを確認します。
- その横にある「実行」ボタンをクリックします。
- 初回実行時には「承認が必要です」というポップアップが表示されます。「権限を確認」をクリックしてください。
- 自分のGoogleアカウントを選択する画面が表示されるので、アカウントを選択します。
- 「このアプリは Google で確認されていません」という警告画面が表示されることがあります。これは自作のプログラムなので当然の表示です。左下にある「詳細」をクリックし、表示された「(プロジェクト名)に移動(安全ではないページ)」というリンクをクリックします。
- 最後に「許可」ボタンをクリックします。
- 実行が完了すると、エディタ下部に実行ログが表示されます。同時に、Slackの指定したチャンネルにニュースが通知されていればテスト成功です!もしキーワードに合致するニュースがなければ、Slackには通知されず、「キーワードに一致する新しいニュースはありませんでした。」というログが表示されます。
Step5:自動で実行されるようにトリガーを設定する
最後に、このプログラムが毎日自動で実行されるように「トリガー」を設定します。これが自動化の心臓部です。
- GASエディタの左側にあるメニューから、目覚まし時計のアイコン「トリガー」をクリックします。
- 右下に表示される「+ トリガーを追加」ボタンをクリックします。
- トリガーの設定画面が表示されるので、以下のように設定します。
・実行する関数を選択: `main`
・実行するデプロイを選択: `Head`
・イベントのソースを選択: `時間主導型`
・時間ベースのトリガーのタイプを選択: `日付ベースのタイマー`
・時刻を選択: `午前8時~9時` (お好きな時間帯を選んでください) - 設定が完了したら「保存」ボタンをクリックします。
これで、毎日設定した時間になると自動的にスクリプトが実行され、条件に合うニュースがあればSlackに通知が届くようになります。お疲れ様でした!
まとめ:自動化で生まれた時間を、もっと創造的な仕事に
今回は、Google Apps ScriptとSlackを使って、自分だけのニュース収集ボットを作成する方法をご紹介しました。一度設定してしまえば、あとは完全に放置でOK。これまで情報収集に費やしていた時間を、事業計画を練ったり、新しいスキルを学んだりといった、より創造的で付加価値の高い仕事に使えるようになります。このように、身の回りのちょっとした手作業を自動化するだけで、ビジネスの生産性は劇的に向上します。今回の自動化に慣れたら、次は「Googleフォームの問い合わせに自動返信する仕組み」や「スプレッドシートのデータを自動でカレンダーに登録する仕組み」など、さらに複雑な自動化に挑戦してみるのも面白いでしょう。あなたのビジネスが、テクノロジーの力でさらに加速することを願っています!
免責事項:本記事で紹介している手順やコードは、執筆時点での情報に基づいています。各サービスの仕様変更により、同様の手順で動作しない可能性があります。また、本チュートリアルの実行によって生じたいかなる損害についても、当方は一切の責任を負いかねます。ご自身の責任において、バックアップを取るなどの対策の上、実行してください。
