AI時代における業務自動化への関心が高まる中、開発者でなくてもワークフローを構築できるn8nが注目されています。特に、情報収集からデータ蓄積まで一連の流れを自動化できれば、日々のルーティンワークから解放され、より創造的な業務に集中できるでしょう。今回は、RSSフィードの情報を定期的に取得し、Googleスプレッドシートに自動記録するワークフローを実際に構築していきます。
n8nとは
n8nは、オープンソースのワークフロー自動化ツールです。ノードベースのビジュアルエディタを使って、APIの呼び出しやデータ変換、通知送信などを組み合わせたワークフローを作成できます。
主な特徴
- 視覚的な操作: ドラッグ&ドロップでノードを配置し、線で繋ぐだけ
- 豊富な連携: 400以上のサービスとの統合が可能
- 自由度の高いカスタマイズ: JavaScriptコードも記述可能
- セルフホスト可能: 自分のサーバーで運用できるため、データの機密性を保てる
環境構築
Docker Composeでのセットアップ
最も簡単にn8nを起動する方法はDocker Composeを使用することです。
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=changeme123
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_PROTOCOL=http
- WEBHOOK_URL=http://localhost:5678/
volumes:
- n8n_data:/home/node/.n8n
- /var/run/docker.sock:/var/run/docker.sock
volumes:
n8n_data:
以下のコマンドで起動します。
docker-compose up -d
起動後、http://localhost:5678にアクセスすると、n8nの管理画面にログインできます。
Google Sheets APIの設定
Googleスプレッドシートにデータを書き込むために、Google Cloud PlatformでAPIを有効化し、認証情報を取得します。
1. Google Cloud Platformでの設定
- Google Cloud Consoleにアクセス
- 新しいプロジェクトを作成または既存プロジェクトを選択
- APIとサービス > ライブラリから「Google Sheets API」を有効化
- 認証情報を作成 > サービスアカウントを選択
- サービスアカウントキー(JSON形式)をダウンロード
2. スプレッドシートの準備
- 新しいGoogleスプレッドシートを作成
- 以下のヘッダーを設定(A1セルから):
- A1:
タイトル - B1:
URL - C1:
公開日 - D1:
取得日時
- A1:
- サービスアカウントのメールアドレスに共有権限(編集者)を付与
ワークフローの構築
ステップ1: RSS Feedノードの設定
新しいワークフローを作成し、「RSS Feed Read」ノードを配置します。
設定項目:
-
URL: 取得したいRSSフィードのURL(例:
https://zenn.dev/feed) -
Limit: 一度に取得する記事数(例:
10)
ステップ2: データ変換ノードの追加
RSSから取得したデータをスプレッドシート用の形式に変換するため、「Code」ノードを追加します。
// RSS データを Sheets 形式に変換
const items = [];
for (const item of $input.all()) {
const rssData = item.json;
// 日付のフォーマット
const publishedDate = new Date(rssData.pubDate || rssData.published);
const currentDate = new Date();
items.push({
json: {
title: rssData.title || '',
url: rssData.link || rssData.guid || '',
publishedDate: publishedDate.toISOString().split('T')[0],
fetchedAt: currentDate.toLocaleString('ja-JP', {
timeZone: 'Asia/Tokyo'
})
}
});
}
return items;
ステップ3: 重複チェックの実装
既に記録済みの記事を除外するため、まず既存データを読み込みます。「Google Sheets」ノードを追加し、以下のように設定します。
操作設定:
-
Resource:
Sheet -
Operation:
Read - Document ID: スプレッドシートのIDを入力
-
Sheet Name:
シート1(または使用するシート名)
次に、重複を除外する「Code」ノードを追加します。
// 既存データと新しいデータから重複を除外
const existingItems = $node["Google Sheets"].json;
const newItems = $node["Code"].json;
// 既存URLのセットを作成
const existingUrls = new Set();
if (existingItems && existingItems.length > 0) {
existingItems.forEach(item => {
if (item.URL) {
existingUrls.add(item.URL);
}
});
}
// 新しいアイテムから重複を除外
const uniqueItems = [];
newItems.forEach(item => {
if (!existingUrls.has(item.url)) {
uniqueItems.push({
json: {
values: [
[item.title, item.url, item.publishedDate, item.fetchedAt]
]
}
});
}
});
return uniqueItems;
ステップ4: スプレッドシートへの書き込み
新しいデータをスプレッドシートに追加する「Google Sheets」ノードを配置します。
操作設定:
-
Resource:
Sheet -
Operation:
Append - Document ID: スプレッドシートのID
-
Sheet Name:
シート1 -
Data:
Define Below -
Values:
={{ $json.values }}
認証設定:
先ほどダウンロードしたサービスアカウントキー(JSON)の内容を貼り付けます。
ステップ5: スケジュール実行の設定
定期実行のために「Schedule Trigger」ノードを追加し、RSS Feed Readノードの前に配置します。
設定例:
-
Trigger Interval:
Hours -
Hours Between Triggers:
6
これにより6時間ごとに自動実行されます。
実際のハマりポイントと対策
1. 文字化け問題
RSSフィードによっては文字エンコーディングの問題が発生する場合があります。
// 文字エンコーディングの対策
const title = rssData.title ?
decodeURIComponent(escape(rssData.title)) : '';
2. 日付フォーマットの統一
RSSフィードの日付フォーマットは標準化されていないことがあります。
// より堅牢な日付パース
function parseDate(dateString) {
if (!dateString) return new Date();
const date = new Date(dateString);
if (isNaN(date.getTime())) {
// フォールバック処理
return new Date();
}
return date;
}
const publishedDate = parseDate(rssData.pubDate || rssData.published);
3. APIレート制限対策
Google Sheets APIにはレート制限があるため、大量データを処理する場合はバッチ処理を検討してください。
// バッチ処理での書き込み
const batchSize = 10;
const batches = [];
for (let i = 0; i < uniqueItems.length; i += batchSize) {
batches.push(uniqueItems.slice(i, i + batchSize));
}
return batches.map(batch => ({
json: {
values: batch.map(item => item.values[0])
}
}));
トラブルシューティング
よくあるエラーと解決方法
エラー: Google Sheets API has not been used in project
解決方法: Google Cloud ConsoleでGoogle Sheets APIが有効化されているか確認してください。
エラー: The caller does not have permission
解決方法: サービスアカウントに適切な権限が付与されているか、スプレッドシートの共有設定を確認してください。
エラー: RSS feed could not be fetched
解決方法: RSSフィードのURLが正しいか、フィード配信サイトがアクセス可能かを確認してください。
運用上の考慮事項
ログとモニタリング
本格運用では、エラーハンドリングとログ出力を追加することを推奨します。
try {
// メイン処理
const result = processRSSData(rssData);
console.log(`成功: ${result.length}件の新しい記事を処理しました`);
return result;
} catch (error) {
console.error(`エラー発生: ${error.message}`);
// エラー通知の実装(Slack、メールなど)
return [];
}
データバックアップ
重要なデータを扱う場合は、定期的なバックアップ機能も併せて実装しましょう。
このワークフローにより、関心のあるサイトの更新情報を自動的に収集し、構造化されたデータとして蓄積できます。収集したデータは後でフィルタリングや分析にも活用できるため、情報収集の効率が大幅に向上します。n8nの柔軟性を活かして、さらなる自動化や他サービスとの連携にも挑戦してみてください。