Auttomation

n8n_Auntomation

Auttomation

【n8n自動化】GmailからGoogleスプレッドシートへ自動転記する方法|週5-10時間削減

1. Google Cloud APIのリンク

Google Cloud API

!Image Description

  1. Google Cloud APIにアクセスして 「ログイン」or 「無料で利用開始」をクリック
  2. 遷移先で自身のメールアドレスを入力

2. Javascript

  • **YouTube 「【n8n自動化】GmailからGoogleスプレッドシートへ自動転記する方法|週5-10時間削減」で使用したJavascriptです。
// Gmail データから売上情報を抽出してGoogle Sheets用に変換
const items = [];

try {
  for (const item of $input.all()) {
    const data = item.json;
    
    // Fromからメールアドレスを抽出
    let fromEmail = 'unknown@domain.com';
    if (data.From) {
      const emailMatch = data.From.match(/<([^>]+)>|([^\s<>]+@[^\s<>]+)/);
      fromEmail = emailMatch ? (emailMatch[1] || emailMatch[2]) : data.From;
    }
    
    // Subjectを取得
    const subject = data.Subject || 'No Subject';
    
    // Snippetから情報を抽出
    let snippet = data.snippet || '';
    console.log('=== ORIGINAL SNIPPET ===');
    console.log(snippet);
    
    // 日付を抽出し、年月日に分割
    let year = '', month = '', day = '';
    const dateMatch = snippet.match(/\[日時\](\d{4})-(\d{2})-(\d{2})/);
    if (dateMatch) {
      year = dateMatch[1];
      month = dateMatch[2];
      day = dateMatch[3];
    } else {
      const today = new Date();
      year = today.getFullYear().toString();
      month = String(today.getMonth() + 1).padStart(2, '0');
      day = String(today.getDate()).padStart(2, '0');
    }
    
    console.log('Date extracted:', { year, month, day });
    
    // 商品情報を抽出
    let productSection = '';
    
    if (snippet.includes('[商品]')) {
      productSection = snippet.split('[商品]')[1];
    } else if (snippet.includes('商品')) {
      const parts = snippet.split('商品');
      if (parts.length > 1) {
        productSection = parts[1];
      }
    }
    
    console.log('=== PRODUCT SECTION ===');
    console.log(productSection);
    
    if (productSection) {
      // より精密な正規表現(重複を避ける)
      // 「商品名 + 価格 + ¥価格 + x + 数量 + = + ¥小計」の完全パターンのみマッチ
      const productPattern = /([^•\n=¥]+?)\s+価格\s+¥(\d+(?:,\d{3})*)\s+x\s*(\d+)\s*=\s*¥(\d+(?:,\d{3})*)/g;
      
      let match;
      const foundProducts = new Set(); // 重複チェック用
      
      while ((match = productPattern.exec(productSection)) !== null) {
        const productName = match[1].trim();
        const unitPrice = parseInt(match[2].replace(/,/g, ''));
        const quantity = parseInt(match[3]);
        const subtotal = parseInt(match[4].replace(/,/g, ''));
        
        // 重複チェック(商品名 + 数量の組み合わせ)
        const productKey = `${productName}_${quantity}`;
        
        if (!foundProducts.has(productKey)) {
          foundProducts.add(productKey);
          
          console.log('UNIQUE PRODUCT FOUND:', {
            name: productName,
            unitPrice: unitPrice,
            quantity: quantity,
            subtotal: subtotal
          });
          
          items.push({
            json: {
              From: fromEmail,
              Subject: subject,
              DateYear: year,
              DateMonth: month,
              DateDay: day,
              Product: productName,
              Quantity: quantity,
              SubTotal: subtotal
            }
          });
        } else {
          console.log('DUPLICATE PRODUCT SKIPPED:', productName);
        }
      }
      
      // マッチしなかった場合のフォールバック(bullet分割)
      if (items.length === 0) {
        console.log('No matches found, trying bullet split method');
        
        const bulletChars = ['•', '●', '・'];
        let productParts = [];
        
        for (const bullet of bulletChars) {
          const parts = productSection.split(bullet).filter(part => part.trim().length > 0);
          if (parts.length > 1) {
            productParts = parts;
            console.log(`Split by "${bullet}":`, productParts.length, 'parts');
            break;
          }
        }
        
        for (let i = 0; i < productParts.length; i++) {
          const part = productParts[i].trim();
          console.log(`Processing part ${i + 1}:`, part);
          
          // 各パートから商品情報を抽出(重複回避)
          const partMatch = part.match(/(.+?)\s+価格\s+¥(\d+(?:,\d{3})*)\s+x\s*(\d+)\s*=\s*¥(\d+(?:,\d{3})*)/);
          
          if (partMatch) {
            const productName = partMatch[1].trim();
            const unitPrice = parseInt(partMatch[2].replace(/,/g, ''));
            const quantity = parseInt(partMatch[3]);
            const subtotal = parseInt(partMatch[4].replace(/,/g, ''));
            
            const productKey = `${productName}_${quantity}`;
            
            if (!foundProducts.has(productKey)) {
              foundProducts.add(productKey);
              
              items.push({
                json: {
                  From: fromEmail,
                  Subject: subject,
                  DateYear: year,
                  DateMonth: month,
                  DateDay: day,
                  Product: productName,
                  Quantity: quantity,
                  SubTotal: subtotal
                }
              });
            }
          }
        }
      }
    }
    
    // 商品が見つからない場合のフォールバック
    if (items.length === 0) {
      console.log('NO PRODUCTS FOUND - adding fallback');
      items.push({
        json: {
          From: fromEmail,
          Subject: subject,
          DateYear: year,
          DateMonth: month,
          DateDay: day,
          Product: 'データ解析エラー',
          Quantity: 0,
          SubTotal: 0
        }
      });
    }
  }
} catch (error) {
  console.error('=== ERROR ===', error);
  return [{
    json: {
      From: 'error@system.com',
      Subject: 'Processing Error',
      DateYear: new Date().getFullYear().toString(),
      DateMonth: String(new Date().getMonth() + 1).padStart(2, '0'),
      DateDay: String(new Date().getDate()).padStart(2, '0'),
      Product: `Error: ${error.message}`,
      Quantity: 0,
      SubTotal: 0
    }
  }];
}

console.log('=== FINAL RESULT ===');
console.log('Items count:', items.length);
console.log('Items:', JSON.stringify(items, null, 2));

return items;

3. テストメール

  • YouTube 「【n8n自動化】GmailからGoogleスプレッドシートへ自動転記する方法|週5-10時間削減」で使用したテストメール

!Image Description

Node.jsとn8nインストールガイド

Auttomation

目次

  1. はじめに
  2. Node.jsとは何か
  3. n8nとは何か
  4. インストール前の準備
  5. WindowsでのNode.jsインストール
  6. MacでのNode.jsインストール
  7. n8nのインストールと起動
  8. n8nの初期設定
  9. 基本的な使い方
  10. よくある問題と解決方法

はじめに

本ガイドでは、業務自動化ツールとして注目されているn8nを使用するために必要なNode.jsの導入から、n8n本体の設定まで、初心者の方でも安心して進められるよう詳細に説明いたします。技術的な専門知識がない方でも理解できるよう、各手順を丁寧に解説しており、WindowsとMacの両方に対応しております。

対象読者: 業務効率化を目指す方、プログラミング初心者、IT担当者
所要時間: 約60分
前提条件: 基本的なコンピューター操作ができること

Node.jsとは何か

Node.jsは、ウェブブラウザ以外の環境でJavaScriptというプログラミング言語を実行するためのソフトウェアです。通常、JavaScriptはウェブページ上でのみ動作しますが、Node.jsを使用することで、パソコン上で様々なアプリケーションを動かすことができるようになります。

Node.jsを導入することで得られる主な利点は以下の通りです。n8nのような自動化ツールを動作させるための基盤として機能し、豊富なライブラリやツールを活用できるようになります。また、開発者コミュニティが活発で、継続的なアップデートとサポートが提供されています。

システムへの影響について: Node.jsをインストールしても、既存のソフトウェアに悪影響を与えることはありません。独立したプログラムとして動作し、他のアプリケーションと干渉することなく安全に使用できます。

n8nとは何か

n8nは、異なるウェブサービスやアプリケーションを連携させて業務を自動化するためのツールです。プログラミングの知識がなくても、視覚的な操作によってワークフローを作成し、日常的な作業を自動化することができます。

具体的な活用例として、メールの自動返信設定、スプレッドシートのデータ同期、SNSの定期投稿、顧客管理システムとの連携など、多岐にわたる業務プロセスの自動化が実現できます。

下記はn8nを用いて自動化を実装した参考動画となります。


【n8n自動化】GmailからGoogleスプレッドシートへ自動転記する方法|週5-10時間削減

!Image Description


n8nの動作には先述のNode.jsが必要となるため、まずNode.jsの導入から開始いたします。

インストール前の準備

導入を開始する前に、お使いのコンピューターが以下の要件を満たしていることを確認してください。

Windowsをお使いの場合の要件として、Windows10以降のバージョンが必要です。また、約2GBの空き容量を確保し、管理者権限でソフトウェアをインストールできることを確認してください。

Macをお使いの場合は、macOS10.15以降が必要で、同様に約2GBの空き容量が必要です。また、後述するHomebrewというツールを使用するため、事前の準備が必要となります。

WindowsでのNode.jsインストール

Windowsでは、Node.js公式サイトから提供される専用のインストーラーを使用します。この方法は最も安全で確実な導入方法です。

まず、ウェブブラウザでNode.js公式サイトにアクセスします。サイトのトップページに表示される「LTS」と記載されたダウンロードボタンをクリックしてください。

!Image Description

※LTSは「Long Term Support」の略で、長期間安定してサポートされるバージョンを意味します。

ダウンロードが完了したら、取得したファイルをダブルクリックして実行します。 Windowsのセキュリティ警告が表示された場合は、「実行」ボタンをクリックして続行してください。

インストーラーが起動したら、画面の指示に従って進めます。ライセンス条項が表示されたら内容を確認し、同意にチェックを入れて次へ進みます。インストール先のフォルダは、特別な理由がない限りデフォルトの設定のままで問題ありません。

カスタムセットアップの画面では、すべての項目にチェックが入っていることを確認してください。特に「Add to PATH」という項目は重要で、これによりコマンドプロンプトからNode.jsを使用できるようになります。

インストールが完了したら、正常に導入されたかを確認します。スタートメニューから「コマンドプロンプト」を検索して起動し、以下のコマンドを入力してEnterキーを押してください。

!Image Description

node --version

バージョン番号が表示されれば、インストールは成功です。続いて、以下のコマンドでnpmも正常に動作することを確認します。

npm --version

こちらもバージョン番号が表示されれば、準備は完了です。

MacでのNode.jsインストール

Macでは、Homebrewというパッケージ管理ツールを使用してNode.jsをインストールします。この方法により、将来的なアップデートや管理が簡単になります。

Homebrewがまだインストールされていない場合は、以下のリンクを参照して導入してください。詳細な手順が記載されており、初心者の方でも安心して進められます。

Homebrew導入ガイド: https://theglowrad.com/blog/2025/04/homebrew%E5%B0%8E%E5%85%A5%E3%82%AC%E3%82%A4%E3%83%89

Homebrewの準備が完了したら、ターミナルアプリケーションを起動します。Finderを開き、「アプリケーション」フォルダ内の「ユーティリティ」フォルダから「ターミナル」を見つけて起動してください。

ターミナルが開いたら、以下のコマンドを入力してEnterキーを押します。

brew install node

インストールが開始され、自動的に最新の安定版Node.jsがダウンロードされて設定されます。処理が完了するまで数分程度かかる場合があります。

インストールが完了したら、以下のコマンドで正常に動作することを確認します。