エンタメ系企業の社内もろもろを担当しているakibinです。
最近、Sunny Day Service - イン・ザ・サン・アゲインにハマってます。まだまだ知らない名曲があるなーこんちくしょう。
やりたかったこと
Googleドライブの共有ドライブは、ちゃんと設計しないとファイル共有がカオス状態になりやすいですよね。
特に「リンクを知っている全員」で不特定多数にリンクを共有したい場合、専用の共有ドライブを作成して以下のチェックを入れる、それ以外の共有ドライブはチェックを外して共有をコントロールするのが理想ですが、これを考えないで運用するとカオスになります…
そんなカオスな状況を打開すべく、「リンクを知っている全員」になっちゃっているファイルを特定して諸々整理できないかと動き出しました。
管理コンソールから確認
管理者にて監査ログからフィルタリングして「リンクを知っている全員」になっちゃっているファイルを特定可能です。
[管理コンソール > レポート > 監査ログ > ドライブ]で設定画面を開き、[公開設定 > リンクを知っている全員]でフィルタリング実施
ただ、監査ログは6ヶ月しか保存されないので、それ以前に[リンクを知っている全員]されちゃったファイルは特定できず…そこでGASを使用して共有状況を一覧化することに、それが以下です。
GASで「リンクを知っている全員」になっちゃっているファイルを特定
google-drive-permission-searchやGoogle Drive Permissions Auditor(アドオン)を試してみましたが、google-drive-permission-searchはうまく動かないし、Google Drive Permissions Auditorは問い合わせしても回答ないし…と思いつつ調べていたら以下の記事を見つけました。
GASを使ってGoogle Drive内のフォルダ、ファイルの権限をチェックする
ありがたかった…ホントこれをちょっとカスタムしたら特定のフォルダ(ドライブ)の中のファイルを再帰的に一覧化して「リンクを知っている全員」になっちゃっているファイルを特定できました!
コードは2行更新、1行追加しただけでした…転記するのは申し訳ないレベルなので基本のコードは↑を参照してもらい、更新箇所は以下です。
【更新1】フォルダIDを検索したいフォルダ(ディレクトリ)のIDに更新
// フォルダIDを更新
function permissionCheker(prefix = null, id = '******') {
【更新2】ユーザ指定して共有しているファイルのみを該当にしている以下コードをコメントアウト
以下コードをコメントアウトすることで、すべてのファイルの共有状況が確認可能です。
// if (editors.length === 0) return;
【追加1】最後の方に共有権限を取得、出力するコードを追加
// スプレッドシートの5列目にファイルの共有権限を出力
sheet.getRange(rowIndex, 5).setValue(obj.getSharingAccess());
GASを実行してみると
再帰的にファイルパス、ファイル名とその共有状況が取得できました!
共有状況のステータスの見方は以下です。
ステータス | 意味 |
---|---|
PRIVATE | ユーザだけ or 他ユーザを指定して共有 |
DOMAIN_WITH_LINK | ドメイン(@hoge.co.jp)ユーザはリンクを知っていればアクセス可能 |
ANYONE_WITH_LINK | リンクを知っていれば誰でもアクセス可能 |
今回、共有状況を確認するためのメソッド(SharingAccess)を確認させてもらった、また他の情報を取得するためのメソッド確認は以下記事が一覧になっておりわかりやすかったです!
初心者でもわかるGoogle Apps Script活用のススメ