【個人開発】GoogleトレンドをGeminiが解説!n8nとAlexaを連携させた「次世代ニューススキル」の作り方

目次

「最新のトレンドを知りたいけれど、ただキーワードを羅列されても背景がわからない…」そんな悩みを解決するために、Googleトレンドの急上昇ワードを取得し、Googleの最新AI「Gemini」に背景を解説させて、Alexaに喋らせるスキルを開発しました。

朝の準備中に「アレクサ、日本のトレンドワードを開いて」と言うだけで、今世の中で何が起きているのかをAIが分かりやすく教えてくれます。

システム構成と自動化の仕組み

今回の仕組みは、ノーコードツールの n8n をハブにして、複数のサービスを連携させています。

  • データソース: Googleトレンド (RSS)
  • 自動化プラットフォーム: n8n
  • AIエンジン: Google Gemini 2.5 Flash
  • インターフェース: Amazon Alexa (Alexa-hostedスキル)

開発におけるこだわりのポイント

単に情報を流すだけでなく、実用性を高めるために以下の3点にこだわりました。

  1. 上位3件からランダムにピックアップ: 毎回同じニュースにならないよう、n8n上のCodeノードで「上位3つのトレンドから1つをランダムに選ぶ」ロジックを実装しました。
  2. AIによる「自然な口調」の生成: Geminiへのプロンプトを工夫し、「今、〇〇が流行っています。〜の影響のようですよ」という、Alexaが喋っても違和感のない親しみやすい口調で解説を生成するようにしました。
  3. 最新のNode.js環境への対応: Alexaスキルのランタイムに合わせて、Node.js 16.x以降でも安定して動作するように、Axiosなどのライブラリを最適化しています。
エンジニア

n8nを使うことで、RSSのパースからAIへのリクエスト、Alexaへのレスポンス返却までを視覚的に管理できるのが大きなメリットですね。Gemini 1.5 Flashはレスポンスが速いので、VUIとの相性も抜群です。

実装例・コード

ここでは、実際に使用しているn8nのロジックと、Alexaスキルの主要コードを紹介します。

### n8n:Codeノード(ランダム抽出用)
RSSから取得した上位3件のうち、1件をランダムに抽出するJavaScriptです。

// 上位3つのうち、ランダムに1つを選択するロジック
const topThree = items.slice(0, 3);
const randomIndex = Math.floor(Math.random() * topThree.length);

return [topThree[randomIndex]];

### Alexaスキル:index.js
n8nのWebhookを呼び出し、Geminiが生成した解説文をAlexaに喋らせるメイン処理です。

/**
 * Googleトレンド解説 Alexaスキル
 * n8n + Gemini 連携版
 */
const Alexa = require('ask-sdk-core');
const Axios = require('axios');

// トレンド取得関数
const getTrendNews = async () => {
    // あなたのn8n Webhook URLに差し替えてください
    const API_URL = 'https://n8n.example.com/webhook/your-endpoint-id';
    const title = '現在のトレンドニュースをお知らせします。';
    const breakTime = '<break time="1s"/>';

    try {
        const response = await Axios.get(API_URL, { timeout: 8000 });
        const data = response.data;

        // n8n(Gemini)からのレスポンスからテキストを抽出
        if (data && data.content && data.content.parts) {
            const newsTexts = data.content.parts.map(p => p.text);
            return [title, ...newsTexts].join(breakTime);
        }
        throw new Error('Invalid response format');
    } catch (error) {
        console.error('API Error:', error.message);
        return `${title}${breakTime}すみません、ニュースの取得に失敗しました。`;
    }
};

// ハンドラー定義
const LaunchRequestHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
    },
    async handle(handlerInput) {
        const speechText = await getTrendNews();
        return handlerInput.responseBuilder
            .speak(speechText)
            .withShouldEndSession(true)
            .getResponse();
    }
};

exports.handler = Alexa.SkillBuilders.custom()
    .addRequestHandlers(LaunchRequestHandler)
    .lambda();

### Alexaスキル:package.json
最新のAxiosを利用するための依存関係設定です。

{
  "name": "alexa-trend-news-gemini",
  "version": "1.3.0",
  "dependencies": {
    "ask-sdk-core": "^2.14.0",
    "ask-sdk-model": "^1.65.0",
    "axios": "^1.6.0"
  }
}

まとめ

  • n8nをハブにすることで、RSS取得からAI連携までをノーコード主体で構築可能
  • Gemini 1.5 Flashの活用により、最新トレンドの「背景」まで自然な言葉で解説
  • Alexa(VUI)との組み合わせで、忙しい朝の「ながら情報収集」が劇的に快適に
  • 日々の情報収集を効率化し、新しい音声体験を提供。
  • あなたもオリジナルのAlexaスキル開発に挑戦してみませんか?

このスキルの開発は、音声アシスタントが持つ無限の可能性の一端を示しています。ぜひ、あなたもAlexaスキルを試して、その便利さを体験してみてください。

Amazon Alexa にインストール

https://www.amazon.co.jp/dp/B09MRFPFFC

AWS Lambda を利用して Alexa でTwitterのトレンドをお知らせするスキルを作成した

コメントを残す

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。