Google DriveとOneDriveで大量ファイルの共有リンク一覧を作る方法
Google DriveとOneDriveで大量ファイルの共有リンク一覧を作る方法
Excel成果品を大量に共有する場合、本来はMicrosoft製品であるOneDriveの方がExcelとの相性に優れています。それでも今回は、OneDriveの共有URLに組織名やテナント名が残る場合があるため、外部共有用としてあえてGoogle Driveを選びました。この記事では、両者の特徴と、Google Drive・OneDriveでリンク一覧を一括作成する方法をまとめます。
※2026年7月時点の内容です。
1.Excelとの相性はOneDriveの方が良い
Excelファイルを扱うだけで考えると、基本的にはOneDriveの方が適しています。
- ブラウザ版Excelで直接開ける
- Excelの書式を比較的維持しやすい
- 複数人で同時編集できる
- 自動保存やバージョン履歴を利用できる
- Microsoft 365、Teams、SharePointとの連携が強い
- Windowsのエクスプローラーと同期しやすい
特に、数式、印刷範囲、改ページ、画像、図形、マクロなどを含む複雑なExcelでは、Googleスプレッドシートへ変換するより、OneDrive上でExcel形式のまま扱う方が安全です。
2.それでもGoogle Driveを選んだ理由
今回Google Driveを利用した最大の理由は、外部へ渡す共有URLの見え方です。
法人向けOneDriveやSharePointでは、共有方法やMicrosoft 365の設定によって、URLに組織名やテナント名を推測できる文字列が含まれる場合があります。
https://会社名-my.sharepoint.com/...
https://会社名.sharepoint.com/sites/...
URLから、Microsoft 365のテナント名、会社名、SharePointサイト名、ユーザー名に関連する文字列、社内フォルダ構成の一部などが推測される場合があります。
一方、Google Driveの共有URLは一般的に次のような形式です。
https://drive.google.com/file/d/ファイルID/view
この形式では、通常、URLだけから所有者の組織名、Googleアカウント名、保存フォルダ名、社内フォルダ構成は分かりません。
Excelとの相性はOneDriveの方が良いものの、外部共有URLに組織名を残したくなかったため、Google Driveを選択しました。
3.Google DriveでExcelを共有する際の注意点
Google DriveへExcelファイルをアップロードしても、Excel形式のまま保存・共有できます。ただし、Googleスプレッドシート形式へ変換して編集すると、書式や機能が変わる場合があります。
- マクロを含むExcel
- 複雑な印刷範囲や改ページがあるExcel
- 画像や図形を多数配置した帳票
- 結合セルを多用しているファイル
- Excel独自の数式や機能を使用しているファイル
- Excelは
.xlsxまたは.xlsmのまま保存する - Googleスプレッドシートへ変換しない
- 原則として閲覧・ダウンロード用に使う
- 印刷結果を保証したい場合はPDFも併せて用意する
4.Google Driveで125件のリンクを一括取得する
Google Driveでは、Google Apps ScriptとDrive APIを利用します。通常の DriveApp で1件ずつ取得すると時間がかかりますが、Drive APIの Drive.Files.list() を使えば、ファイル情報をまとめて取得できます。
今回、125件のExcel・PDFファイルを約4秒で一覧化できました。
フォルダIDを確認する
https://drive.google.com/drive/folders/XXXXXXXXXXXXXXXXXXXX
folders/ の後ろにある文字列がフォルダIDです。
Apps Scriptを開く
拡張機能
↓
Apps Script
Drive APIを追加する
Apps Script画面左側の「サービス」の右にある「+」を押します。
- サービス:Drive API
- バージョン:v3
- ID:Drive
追加後、左側の「サービス」の下に Drive と表示されれば準備完了です。
ReferenceError: Drive is not definedこのエラーは、Drive APIサービスを追加していない場合に表示されます。
Google Drive用コード
const FOLDER_ID = 'ここにGoogle DriveのフォルダIDを入力';
function ファイルリンク一覧を作成() {
const query =
"'" + FOLDER_ID + "' in parents" +
" and trashed = false";
const response = Drive.Files.list({
q: query,
pageSize: 1000,
fields: 'files(id,name,mimeType,webViewLink)',
includeItemsFromAllDrives: true,
supportsAllDrives: true
});
const files = response.files || [];
const results = [];
files.forEach(function(file) {
const isExcel =
file.mimeType ===
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||
file.mimeType ===
'application/vnd.ms-excel';
const isPdf =
file.mimeType === 'application/pdf';
if (!isExcel && !isPdf) {
return;
}
const match = file.name.match(/E\d{6}/i);
const placeNo = match ? match[0].toUpperCase() : '';
const fileType = isPdf ? 'PDF' : 'Excel';
const fileUrl =
file.webViewLink ||
'https://drive.google.com/file/d/' +
file.id +
'/view';
results.push([
placeNo,
file.name,
fileType,
fileUrl
]);
});
results.sort(function(a, b) {
if (a[0] && b[0]) {
return a[0].localeCompare(b[0], 'ja');
}
if (a[0]) return -1;
if (b[0]) return 1;
return a[1].localeCompare(b[1], 'ja');
});
const output =
SpreadsheetApp.create('ファイルリンク一覧');
const sheet = output.getSheets()[0];
sheet.setName('ファイルリンク一覧');
const values = [[
'箇所番号',
'ファイル名',
'ファイル種類',
'Google Drive URL'
]].concat(results);
sheet
.getRange(1, 1, values.length, 4)
.setValues(values);
sheet.getRange('A1:D1')
.setFontWeight('bold')
.setBackground('#1F4E78')
.setFontColor('#FFFFFF')
.setHorizontalAlignment('center');
sheet.setFrozenRows(1);
sheet.setColumnWidth(1, 120);
sheet.setColumnWidth(2, 400);
sheet.setColumnWidth(3, 100);
sheet.setColumnWidth(4, 500);
sheet.getDataRange()
.setVerticalAlignment('middle')
.setWrap(true);
if (results.length > 0) {
sheet
.getRange(1, 1, results.length + 1, 4)
.createFilter();
}
SpreadsheetApp.flush();
console.log(
results.length +
'件取得しました。作成先:' +
output.getUrl()
);
}
実行方法
- Apps Scriptへコードを貼り付ける
FOLDER_IDを対象フォルダのIDへ変更する- 関数選択欄で「ファイルリンク一覧を作成」を選ぶ
- 「実行」を押す
- 初回のみGoogleアカウントの権限を許可する
125件取得しました。
作成先:https://docs.google.com/spreadsheets/...
5.なぜDrive APIは速いのか
通常の DriveApp では、ファイルを1件ずつ取得し、ファイル名やURLを順番に確認します。
1件目を取得
↓
ファイル名を確認
↓
URLを取得
↓
2件目を取得
Drive APIの Drive.Files.list() では、指定フォルダのファイル情報をまとめて取得します。今回のコードは pageSize: 1000 としているため、125件なら1回の取得に収まります。さらに、ファイル本体ではなく、ファイルID、名前、形式、表示URLだけを取得するため高速です。
6.Google Driveの共有権限を確認する
対象フォルダを右クリック
↓
共有
↓
一般的なアクセス
外部へ公開する場合は、必要に応じて次の設定にします。
リンクを知っている全員
閲覧者
7.OneDriveでリンク一覧を作成する
OneDriveでは、PowerShellとMicrosoft Graphを利用して、ファイルごとの共有リンクを作成できます。
Microsoft Graph PowerShellをインストールする
Install-Module Microsoft.Graph -Scope CurrentUser
Connect-MgGraph -Scopes "Files.ReadWrite"
OneDrive用コード
# OneDrive内のフォルダパス
$FolderPath = "成果品/Excel"
# organization:組織内限定
# anonymous:リンクを知っている全員
$LinkScope = "organization"
# 出力CSV
$OutputCsv =
"$HOME\Downloads\OneDrive共有リンク一覧.csv"
Connect-MgGraph -Scopes "Files.ReadWrite"
function ConvertTo-GraphPath {
param(
[Parameter(Mandatory)]
[string]$Path
)
$segments =
$Path.Trim("/") -split "/"
return (
$segments |
ForEach-Object {
[Uri]::EscapeDataString($_)
}
) -join "/"
}
$encodedPath =
ConvertTo-GraphPath -Path $FolderPath
$uri =
"https://graph.microsoft.com/v1.0/" +
"me/drive/root:/${encodedPath}:/children" +
"?`$top=999" +
"&`$select=id,name,file,folder,webUrl"
$items = @()
do {
$response =
Invoke-MgGraphRequest `
-Method GET `
-Uri $uri
$items += $response.value
$uri = $response.'@odata.nextLink'
} while ($uri)
$results = foreach ($item in $items) {
if ($null -eq $item.file) {
continue
}
$match =
[regex]::Match(
$item.name,
'E\d{6}',
[System.Text.RegularExpressions.RegexOptions]::IgnoreCase
)
$placeNo =
if ($match.Success) {
$match.Value.ToUpper()
} else {
""
}
$body = @{
type = "view"
scope = $LinkScope
} | ConvertTo-Json
try {
$linkResponse =
Invoke-MgGraphRequest `
-Method POST `
-Uri (
"https://graph.microsoft.com/v1.0/" +
"me/drive/items/$($item.id)/createLink"
) `
-Body $body `
-ContentType "application/json"
[PSCustomObject]@{
箇所番号 = $placeNo
ファイル名 = $item.name
共有リンク = $linkResponse.link.webUrl
エラー = ""
}
} catch {
[PSCustomObject]@{
箇所番号 = $placeNo
ファイル名 = $item.name
共有リンク = ""
エラー = $_.Exception.Message
}
}
}
$results |
Sort-Object 箇所番号, ファイル名 |
Export-Csv `
-Path $OutputCsv `
-NoTypeInformation `
-Encoding utf8BOM
Write-Host "処理が完了しました。"
Write-Host "出力先:$OutputCsv"
Write-Host "取得件数:$($results.Count)"
OneDriveの共有範囲
組織内限定:
$LinkScope = "organization"
リンクを知っている全員:
$LinkScope = "anonymous"
閲覧専用:
type = "view"
編集可能:
type = "edit"
anonymous リンクは作成できません。8.Google DriveとOneDriveの比較
| 項目 | Google Drive | OneDrive |
|---|---|---|
| Excelとの相性 | 保存・共有は可能。編集や変換には注意 | 非常に良い |
| Excelの共同編集 | Google形式への変換に注意 | ブラウザ版Excelで可能 |
| 複雑なExcel書式 | 変換すると崩れる場合がある | 比較的維持しやすい |
| URLの見え方 | 組織名を推測されにくい | 組織名・テナント名が入る場合がある |
| 外部共有 | 比較的中立的なURL | テナント情報の表示に注意 |
| リンク一覧取得 | Drive APIで高速 | Microsoft Graphで作成可能 |
| 125件の処理 | 約4秒で一覧化 | ファイルごとのリンク作成で時間がかかる |
| 向いている用途 | 外部配布、閲覧、ダウンロード | 社内編集、共同作業、版管理 |
9.どちらを選ぶべきか
OneDriveが向いている場合
- Excelを共同編集する
- Microsoft 365を社内で利用している
- 組織内だけで共有する
- バージョン履歴を重視する
- Excelの書式や機能をできるだけ維持したい
- URLに組織名が含まれても問題ない
Google Driveが向いている場合
- 外部の顧客や協力会社へ配布する
- 閲覧・ダウンロードが中心
- URLから組織名を推測されにくくしたい
- ファイル名とURLを高速に一覧化したい
- ExcelとPDFを同じ方法で共有したい
10.今回の結論
今回の成果品はExcelだったため、編集や社内管理だけを考えればOneDriveの方が適しています。
しかし、外部共有URLにMicrosoft 365のテナント名や組織名が含まれる可能性があり、それを避けるためGoogle Driveを選びました。
Excelの作成・確認
↓
Excel形式のまま保存
↓
Google Driveへアップロード
↓
Drive APIで125件のURLを一括取得
↓
リンク一覧を外部へ共有
- Excelファイルを変換せずに保管できる
- URLから組織名を推測されにくい
- 大量のリンクを短時間で一覧化できる
- ExcelとPDFを同じ方法で管理できる
Google DriveのURLから組織名が分からなくても、ファイル名、Excelの作成者情報、コメント、非表示シート、本文、画像などから会社名や個人情報が分かる可能性があります。外部共有前に、ファイル内容と共有権限を必ず確認してください。
コメント
コメントを投稿