はじめに Link to heading
本記事では、ワークフロー自動化ツール「n8n」を使用して、Google Driveにフォルダを自動作成し、ローカルファイルを自動でアップロードする方法を実践的に解説します。
対象読者 Link to heading
- ワークフロー自動化に興味のあるエンジニア
- Google Driveを業務で活用している企業・チーム
- n8nを使ってファイル管理を効率化したい方
記事の目的 Link to heading
- n8nとGoogle Drive APIの連携方法を理解する
- フォルダ作成とファイルアップロードのワークフローを構築する
- 実際に動作検証を行い、実用レベルで使えるようにする
なぜn8nとGoogle Driveなのか Link to heading
課題:手動でのファイルアップロードの煩わしさ Link to heading
日々の業務で、こんな経験はありませんか?
- 📁 毎日決まったフォルダに、決まった形式のファイルをアップロード
- 📸 定期的にスクリーンショットや画像をバックアップ
- 📊 レポートやログファイルをGoogle Driveで共有
これらの作業は単純ですが、繰り返すたびに時間を取られ、ミスも発生しがちです。
解決策:n8nによる自動化 Link to heading
n8nは、オープンソースのワークフロー自動化ツールで、Zapierのようにさまざまなサービスを連携できます。
n8nを使うメリット:
- ✅ 無料でセルフホスト可能 - 実行回数無制限
- ✅ ビジュアルエディタ - プログラミング不要
- ✅ 豊富な連携 - 1000以上のサービスと統合
- ✅ 柔軟なカスタマイズ - JavaScriptで拡張可能
本記事で実現すること Link to heading
今回構築するワークフローで実現できること:
1. n8nがトリガー(手動 or スケジュール実行)を受け取る
2. Google Drive上に指定した名前のフォルダを自動作成
3. ローカルに保存されているファイルを読み込む
4. 作成したフォルダにファイルをアップロード
5. 完了通知(オプション)
Google Drive API の設定 Link to heading
n8nからGoogle Driveにアクセスするには、Google Cloud Platform (GCP) での設定が必要です。
Google Cloud プロジェクトの作成 Link to heading
ステップ 1: GCPコンソールへアクセス Link to heading
- Google Cloud Console にアクセス
- Googleアカウントでログイン
ステップ 2: 新規プロジェクトの作成 Link to heading
- 画面上部の「プロジェクトを選択」をクリック
- 「新しいプロジェクト」をクリック
- プロジェクト名を入力(例:
n8n-googledrive-automation) - 「作成」をクリック
Google Drive API の有効化 Link to heading
ステップ 1: APIライブラリへ移動 Link to heading
- 左側のナビゲーションメニューから「APIとサービス」→「ライブラリ」を選択
ステップ 2: Google Drive APIを検索 Link to heading
- 検索バーに「Google Drive API」と入力
- 検索結果から「Google Drive API」をクリック
- 「有効にする」をクリック
OAuth 2.0 認証情報の作成 Link to heading
n8nからGoogle Driveにアクセスするには、OAuth 2.0の認証情報が必要です。
ステップ 1: 認証情報画面へ移動 Link to heading
- 「APIとサービス」→「認証情報」を選択
- 「認証情報を作成」→「OAuth クライアント ID」を選択
ステップ 2: 同意画面の設定 Link to heading
初めて作成する場合、OAuth同意画面の設定が必要です:
- ユーザータイプ: 「外部」を選択(テスト用)
- アプリ情報:
- アプリ名:
n8n Google Drive Integration - ユーザーサポートメール: 自分のメールアドレス
- デベロッパーの連絡先: 自分のメールアドレス
- アプリ名:
- 「保存して次へ」をクリック
- スコープ: 一旦スキップ(後で設定可能)
- テストユーザー: 自分のメールアドレスを追加
- 「保存して次へ」をクリック
ステップ 3: OAuth クライアント ID の作成 Link to heading
「アプリケーションの種類」: ウェブアプリケーションを選択
名前:
n8n OAuth Client承認済みのリダイレクト URI:
http://localhost:5678/rest/oauth2-credential/callback※ n8nがリモートサーバーにある場合は、
localhostを該当のドメインに変更「作成」をクリック
ステップ 4: 認証情報の保存 Link to heading
作成されたクライアントIDとクライアントシークレットが表示されます。
⚠️ 重要: この情報は後でn8nの設定で使用するので、安全な場所にメモしてください。
n8nの準備 Link to heading
n8nのインストール Link to heading
Docker環境を使用する場合:
1# docker-compose.ymlを使用してn8nを起動
2docker-compose up -d n8n
3
4# 起動確認
5docker-compose ps
n8nの起動とアクセス Link to heading
- ブラウザで
http://localhost:5678にアクセス - 初回の場合、管理者アカウントを作成
Google Drive認証情報の設定 Link to heading
ステップ 1: Credentialsページへ移動 Link to heading
- n8nのメニューから「Credentials」をクリック
- 「New」→「Google Drive OAuth2 API」を選択
ステップ 2: 認証情報の入力 Link to heading
以下の情報を入力します:
| 項目 | 値 |
|---|---|
| Credential Name | Google Drive - My Account |
| Client ID | GCPで取得したクライアントID |
| Client Secret | GCPで取得したクライアントシークレット |
ステップ 3: 認証の実行 Link to heading
- 「Connect my account」ボタンをクリック
- Googleのログイン画面が開く
- Google Driveへのアクセスを許可
- 認証が成功すると、n8nに戻る
- 「Save」をクリックして保存
ワークフローの作成 Link to heading
実際にワークフローを作成していきます。
ワークフローの全体像 Link to heading
今回作成するワークフローは以下の4つのノードで構成されます:
[1. Manual Trigger]
↓
[2. Google Drive - Create Folder]
↓
[3. Read Binary File]
↓
[4. Google Drive - Upload File]
ノード1: Manual Trigger(手動トリガー) Link to heading
作成手順 Link to heading
- 新しいワークフローを作成(「Add workflow」をクリック)
- ワークフロー名を
Google Drive Auto Uploadに変更 - 最初のノードとして「Manual Trigger」が配置されている(そのまま使用)
説明:
手動でワークフローを実行するためのトリガーです。後で「Schedule Trigger」に変更すれば、定期実行も可能です。
ノード2: Google Drive - Create Folder(フォルダ作成) Link to heading
作成手順 Link to heading
- 「+」ボタンをクリックして新しいノードを追加
- 「Google Drive」を検索して選択
- 以下の設定を行う:
| 項目 | 値 |
|---|---|
| Credential | 先ほど作成した Google Drive - My Account を選択 |
| Operation | Create a Folder を選択 |
| Folder Name | ={{ $now.format('yyyy-MM-dd') }}_upload (日付付きフォルダ名) |
| Parent Folder | (空欄 = ルートディレクトリ) |
ポイント:
={{ $now.format('yyyy-MM-dd') }}_uploadは、実行日の日付を含むフォルダ名を自動生成します- 例:
2025-11-02_upload
- 例:
- 特定のフォルダ配下に作成したい場合は、「Parent Folder」にフォルダIDを指定
ノード3: Read Binary File(ファイル読み込み) Link to heading
作成手順 Link to heading
- 「+」ボタンをクリックして新しいノードを追加
- 「Read Binary File」を検索して選択
- 以下の設定を行う:
| 項目 | 値 |
|---|---|
| File Path | /tmp/upload/sample.txt (アップロードしたいファイルのパス) |
| Property Name | data (デフォルト) |
注意:
- n8nがDockerコンテナで動作している場合、ホストのファイルシステムをマウントする必要があります
- docker-compose.ymlに以下のようなボリュームマウントを追加:
1volumes: 2 - ./upload:/tmp/upload
ノード4: Google Drive - Upload File(ファイルアップロード) Link to heading
作成手順 Link to heading
- 「+」ボタンをクリックして新しいノードを追加
- 「Google Drive」を検索して選択
- 以下の設定を行う:
| 項目 | 値 |
|---|---|
| Credential | Google Drive - My Account を選択 |
| Operation | Upload を選択 |
| Binary Data | true (チェックを入れる) |
| File Name | =uploaded_{{ $now.format('yyyyMMdd_HHmmss') }}.txt |
Parent Folder(親フォルダ)の設定:
| 項目 | 値 |
|---|---|
| Parent Drive | From list → My Drive |
| Parent Folder | 重要:ドロップダウンを「By ID」または「Expression」に変更 |
| Folder ID | {{ $node["Google Drive - Create Folder"].json.id }} |
⚠️ 重要なポイント:
File Name の先頭に
=が必須- ❌ 間違い:
uploaded_{{ $now.format(...) }}.txt - ✅ 正しい:
=uploaded_{{ $now.format(...) }}.txt =がないと変数が展開されず、そのまま表示されます
- ❌ 間違い:
Parent Folder は「By ID」モードに変更
- デフォルトの「From list」モードでは前のノードの結果を参照できません
- 必ず左側のドロップダウンを 「By ID」 または 「Expression」 に変更してください
- これを忘れると、ファイルがフォルダ内ではなくルートにアップロードされます
ノード名の完全一致
$node["Google Drive - Create Folder"]のノード名は完全に一致している必要があります- 大文字小文字、スペース、ハイフンなど、すべて正確に入力してください
設定後の確認:
- Folder IDに長い文字列(例:
1oXaNfVRGfkRg678QmRkRgotq0lB-l4cC)が表示されていれば成功です
ワークフローの保存と実行 Link to heading
保存 Link to heading
- 右上の「Save」ボタンをクリック
- ワークフロー名を確認して保存
テスト実行 Link to heading
- 左上の「Execute Workflow」ボタンをクリック
- 各ノードが順番に実行される
- 緑のチェックマークが表示されれば成功
実行結果の確認 Link to heading
- Google Driveにアクセス
- 日付入りフォルダが作成されているか確認
- フォルダ内にファイルがアップロードされているか確認
動作検証 Link to heading
検証環境の準備 Link to heading
テスト用ファイルの作成 Link to heading
1# アップロード用ディレクトリの作成
2mkdir -p upload
3
4# テスト用ファイルの作成
5echo "This is a test file for n8n Google Drive upload" > upload/sample.txt
docker-compose.ymlの更新 Link to heading
n8nコンテナがローカルファイルにアクセスできるように、ボリュームマウントを追加します:
1services:
2 n8n:
3 volumes:
4 - n8n_data:/home/node/.n8n
5 - ./upload:/tmp/upload # この行を追加
変更後、n8nを再起動:
1docker-compose restart n8n
実際の動作検証手順 Link to heading
ステップ1: ワークフローの実行 Link to heading
- n8nのワークフローエディタを開く
- 「Execute Workflow」をクリック
- 実行が完了するまで待機(通常5〜10秒)
ステップ2: 各ノードの結果確認 Link to heading
各ノードをクリックして、出力を確認します:
ノード2(Create Folder)の出力例:
1{
2 "kind": "drive#file",
3 "id": "1a2b3c4d5e6f7g8h9i0j",
4 "name": "2025-11-02_upload",
5 "mimeType": "application/vnd.google-apps.folder"
6}
ノード4(Upload File)の出力例:
1{
2 "kind": "drive#file",
3 "id": "9j8i7h6g5f4e3d2c1b0a",
4 "name": "uploaded_20251102_143025.txt",
5 "mimeType": "text/plain"
6}
ステップ3: Google Driveでの確認 Link to heading
- Google Drive にアクセス
- マイドライブに
2025-11-02_uploadフォルダがあることを確認 - フォルダ内にアップロードされたファイルがあることを確認
検証チェックリスト Link to heading
- フォルダが正しい名前(日付入り)で作成されている
- フォルダがGoogle Driveの正しい場所に作成されている
- ファイルが作成されたフォルダ内にアップロードされている
- アップロードされたファイルの内容が元のファイルと一致している
- ファイル名がタイムスタンプ付きで正しく命名されている
実際の成功例 Link to heading
実際にこのワークフローを動作検証した結果を紹介します。
実行環境 Link to heading
- n8n: 最新版(Dockerコンテナ)
- Google Drive API: v3
- 実行日時: 2025年11月2日 20:01
実行結果 Link to heading
1. フォルダの作成
名前: 2025-11-02_upload
場所: マイドライブ(ルート)
作成時刻: 19:50
フォルダID: 1oXaNfVRGfkRg678QmRkRgotq0lB-l4cC
2. ファイルのアップロード
ファイル名: uploaded_20251102_200116.txt
場所: 2025-11-02_upload フォルダ内
ファイルサイズ: 584 バイト
アップロード時刻: 20:01
成功のポイント Link to heading
✅ File Nameに = を付けた
- 変数
{{ $now.format('yyyyMMdd_HHmmss') }}が正しく展開 - タイムスタンプ
200116が自動生成された
✅ Parent Folderを「By ID」モードに設定
- フォルダIDが正しく参照された
- ファイルがフォルダ内に配置された
✅ ボリュームマウントが正しく設定されている
./upload:/tmp/uploadの設定により、ローカルファイルにアクセス可能
つまづきやすいポイント Link to heading
この検証中に遭遇した問題:
最初の試行: 変数が展開されず、ファイル名がそのまま表示 → 解決: File Nameの先頭に
=を追加2回目の試行: ファイルがマイドライブのルートに配置 → 解決: Parent Folderを「From list」から「By ID」に変更
3回目の試行: ✅ 成功!
実用的な応用例 Link to heading
基本的なワークフローができたので、実用的な応用例を紹介します。
定期的なバックアップ自動化 Link to heading
ユースケース: 毎日深夜に、特定のディレクトリ内のファイルを自動的にGoogle Driveにバックアップ
変更点 Link to heading
Triggerをスケジュール実行に変更
- Manual Triggerを削除
- 「Schedule Trigger」ノードを追加
- 実行時刻を設定(例: 毎日午前2時)
複数ファイルの処理
- 「Read Binary Files」ノードで、ディレクトリ内の全ファイルを読み込む
- ファイルパスに
*ワイルドカードを使用:/tmp/upload/*
ファイルごとにアップロード
- 「Split In Batches」ノードを追加して、ファイルを1つずつ処理
Slackへの通知 Link to heading
ユースケース: アップロード完了後、Slackに通知を送信
追加ノード Link to heading
- Slackノード
- Operation:
Post Message - Channel:
#general(または指定のチャンネル) - Message:
✅ ファイルアップロード完了 📁 フォルダ: {{ $node["Google Drive - Create Folder"].json["name"] }} 📄 ファイル: {{ $node["Google Drive - Upload File"].json["name"] }}
- Operation:
トラブルシューティング Link to heading
よくあるエラーと解決方法 Link to heading
エラー1: 変数が展開されない Link to heading
症状:
ファイル名が「uploaded_{{ $now.format('yyyyMMdd_HHmmss') }}.txt」のまま
フォルダ名が「{{ $now.format('yyyy-MM-dd') }}_upload」のまま
原因:
- n8nの式には先頭に
=が必要なのに、付けていない
解決方法:
- 該当するノードをクリック
- 「Name」または「File Name」フィールドを確認
- 先頭に
=を追加
間違い:
uploaded_{{ $now.format('yyyyMMdd_HHmmss') }}.txt
正しい:
=uploaded_{{ $now.format('yyyyMMdd_HHmmss') }}.txt
- 「Save」をクリックして保存
- ワークフローを再実行
成功時の結果:
ファイル名: uploaded_20251102_200116.txt (タイムスタンプが正しく展開される)
エラー2: ファイルがフォルダ内ではなくルートにアップロードされる Link to heading
症状:
- フォルダは正しく作成される
- ファイルもアップロードされる
- しかし、ファイルがマイドライブのルートに配置される
- フォルダ内が空のまま
原因:
- Parent Folderの設定が「From list」モードのまま
- または、Parent Folderの設定が正しくない
解決方法:
- 「Google Drive - Upload File」ノードをクリック
- Parent Folderセクションを確認
- 左側のドロップダウンが 「From list」 になっている場合:
- 「By ID」 または 「Expression」 に変更
- 入力欄に以下を入力:
{{ $node["Google Drive - Create Folder"].json.id }} - フォルダIDが表示されることを確認(例:
1oXaNfVRGfkRg678QmRkRgotq0lB-l4cC) - 「Save」→ ワークフローを再実行
成功時の結果:
📁 2025-11-02_upload/
└── 📄 uploaded_20251102_200116.txt ← フォルダ内に配置される
重要なポイント:
- 「From list」モードでは、ドロップダウンからフォルダを選択する必要がありますが、動的に作成されたフォルダは選択できません
- 「By ID」または「Expression」モードを使用して、前のノードから取得したIDを指定する必要があります
エラー3: 認証エラー(401 Unauthorized) Link to heading
症状:
ERROR: Unauthorized - Please check your OAuth credentials
原因:
- OAuth認証が正しく設定されていない
- アクセストークンが期限切れ
解決方法:
- n8nのCredentialsページへ移動
- Google Drive認証情報を開く
- 「Reconnect」をクリックして再認証
エラー4: ファイルが見つからない(File Not Found) Link to heading
症状:
ERROR: ENOENT: no such file or directory, open '/tmp/upload/sample.txt'
原因:
- 指定したファイルパスが存在しない
- Dockerコンテナ内からファイルにアクセスできない
解決方法:
- docker-compose.ymlでボリュームマウントを確認
- マウントパスが正しいか確認
- ファイルのパーミッションを確認
1# コンテナ内でファイルが見えるか確認
2docker-compose exec n8n ls -la /tmp/upload
まとめ Link to heading
達成したこと Link to heading
本記事では、以下を実現しました:
✅ Google Drive APIの設定 - OAuth 2.0認証の構成
✅ n8nとの連携 - 認証情報の登録
✅ 基本ワークフローの作成 - フォルダ作成とファイルアップロード
✅ 動作検証 - 実際にファイルがアップロードされることを確認
✅ 応用例の紹介 - 定期実行、Webhook、条件分岐、通知
このワークフローの利点 Link to heading
- 🚀 作業時間の大幅削減 - 手動アップロードから解放
- 🔄 自動化による安定性 - ヒューマンエラーを削減
- 📅 スケジュール実行 - 決まった時間に自動実行
- 🔧 柔軟なカスタマイズ - 業務に合わせて拡張可能
次のステップ Link to heading
さらに発展させるためのアイデア:
他サービスとの連携
- Dropbox、OneDrive、AWS S3などへの同時アップロード
- メール添付ファイルの自動保存
画像処理の追加
- アップロード前に画像のリサイズ
- PDFへの変換
通知の強化
- Slack、Microsoft Teams、Discordへの通知
- エラー時のアラート
監視とログ
- アップロード履歴をデータベースに記録
- ダッシュボードでの可視化
参考リンク Link to heading
🎉 これでn8nを使ったGoogle Driveへの自動ファイルアップロードが実現できました!
ぜひ、あなたの業務に合わせてカスタマイズして活用してください。
関連記事: