クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

【GoogleDrive】チームドライブの運用で涙を流した「漢」の嘆き

こなさんみんばんは!!
Windowsが大嫌い!Linux大好き!!ヘルプデスク担当のてるりんです。

GoogleDrive皆さん使っていますか?
メチャクチャ便利ですよね!

弊社のとあるプロジェクトで作ったチームドライブの運用者の方から運用で困っているとお悩み相談を頂き、 解決策がないかなーと模索し涙を流したお話。

相談内容

①検索結果からファイルのパスが拾いづらい!何とかならない?
GoogleDriveの検索は指定した条件で検索すると
サクッと検索結果が出てくるので超便利!と思っていたのですが、
検索結果で表示されたファイルがどこのパスにあるかパッとわかりづらいんですよね。

②大量にフォルダがあると、どのフォルダにいつファイルがアップロードされたかがわからないから何とかならない?
フォルダが少数なら原始的にポチポチフォルダを漁ることできるけど、大量にフォルダがあると判別不能
GASでゴニョゴニョしてスプレッドシートに情報出力とかで解決できるのだが、数が大量にあると話は別。

フォルダが大量にある背景として、ファイルアップロード者が多数おり、フォルダ作成の手間を省く為、
予め空のフォルダを大量に作成している。

頂いたオーダー

  • 万単位であるフォルダの中から、ファイルがアップロードされているフォルダの情報抽出。
  • 抽出したフォルダにファイルがいつアップロードされたかの日付情報が欲しい。
  • 但し、空のフォルダも超大量にあるのでそれは除外して欲しい。

問題解決するにあたって念頭に置いていた事

  1. 長ったらしいコードはガリガリ書かない → 自分の手を離れた時に後任が悲鳴を上げる。メンテもだるい。
  2. 既成品のツールとちょっとしたコマンドだけで何とかしたい → 誰が見てもすぐわかる様な状態にしたい。
  3. 全自動化したい → やっぱ楽したいねん(´・ω・`)

対応策その1

やっぱりGoogleと言えばGASでしょ!

  1. GASで全フォルダのリスト取得
  2. リストを基に全フォルダのファイル格納状況を確認
  3. ファイルがヒットしたら最新のファイルの日付けを取得
  4. スプレッドシートに出力

ザックリ上記の流れでGAS書いてみましたが・・・
APIへのリクエスト上限、メモリ上限の壁にぶつかり処理件数を分割したりして
ゴニョゴニョしましたが状況変わらずで結果は惨敗orz
てるりん涙を流す(´;ω;`)

対応策その2

LinuxでGDrive使ってみた!

LinuxでのGoogleDriveクライアントのひとつ。

$ gdrive list

上記はWindowsでいうDIRコマンド、Linuxでいうlsコマンド。
欲しい情報はこれで拾える!そして速度がめっちゃ速い!!
コマンド軽くパイプで繋げてやりたい事を叶えてくれる気がする!

君に決めた!!

と思ったらチームドライブ非対応ヽ( ・∀・)ノ┌┛)`Д゚)・;';
お蔵入り。
てるりん涙を流す(´;ω;`)

参考:https://github.com/prasmussen/gdrive
細かいセットアップ方法、使い方は( ՞ਊ ՞)☝を見てね。

対応策その3

Linuxでrclone使ってみた!

LinuxでのGoogleDriveクライアントのひとつ。
GoogleDriveだけじゃなくAWSのS3、DropBox、OneDriveだったり
多数のクラウドストレージに対応しているのが売り。
そしてチームドライブにも対応している!

$ rclone lsl [DriveName]:[FloderName]

対応策その2同様、上記はWindowsでいうDIRコマンド、Linuxでいうlsコマンド。

欲しい情報はこれで拾える!そして速度がめっちゃ遅い!!\(^o^)/
8時間待ってAPIへのリクエスト上限になりお蔵入り。
てるりん涙を流す(´;ω;`)

参考:https://rclone.org/
細かいセットアップ方法、使い方は( ՞ਊ ՞)☝を見てね。

対応策その4

Linuxgoogle-drive-ocamlfuse使ってみた!

LinuxでのGoogleDriveクライアントのひとつ。
このツールはLinux上にGoogleDriveのマウントができて超便利なんですよね。
マウントしてからはCUIでいつも通りのコマンドでGoogleDriveを触れるのがとても好感持てました。
もちろんチームドライブにも対応( ・`ω・´)

$ find /mnt/google_drive -name *.jpg -o -name *.heic -type f -exec ls -l {}\; > hoge.txt
 ※-execよりxargs ls -l ←のが速い・・・。

遅い!遅すぎる!!というか固まる(;゚Д゚)
なのでお蔵入り。
てるりん涙を流す(´;ω;`)

対応策その5

初心に返ってWindowsでDriveFileStream使ってみた!
GoogleDrive使ってる方でしたらWindowsMac問わず、 もう説明不要のアプリですよね!!
Windowsから直接GoogleDriveを触れるので対応策その4同様、
Linuxのfindっぽく検索できないかと思い(Macでええやんという突っ込み禁止)

Get-ChildItem -Recurse G:\チームドライブ\ぷろじぇくと | ?{ $_.Length -ne $null } | Select-Object Fullname,LastWriteTime | Export-CSV C:\temp\directory_check.csv -Encoding Unicode

PowerShellで↑試してみたところ10万件前後のフォルダ一通り舐めるのに15分程度で速い!!
後は出力したCSVをエクセルのVBAで成形&取り込みし、欲しい情報の一覧ができました!!
結果はオーライですが、エクセルで取り込んだり一手間あるし、全自動化が厳しいのでお蔵入り。
てるりん涙を流す(´;ω;`)

最終的な着地

以上の対応策を色々試した結果、

根本的にフォルダ構成の見直し、アップロードの運用方法を見直して空のフォルダ全部消して、アップロード時にフォルダ作成する様にお願いすれば解決するんじゃない?

というシンプルな結論に至りました。

これらを踏まえて思ったこと

  • 試した手法全部不要になりましたが、GDrive、rclone、google-drive-ocamlfuseこれらのツールはLinux運用する上でケースによっては色々使えそう。 是非Linux使いの方には触って頂きたいです。(ネット上だとUbuntu/Debian系での情報が多いですが、CentOS6/7系でも普通に使えました!)
  • 今の運用方法が正しいか常に疑うべし。 サーバ、PC運用する上で常に考えなければいけない事ですが、現状の運用方法、今ある形にとらわれすぎると良くない。 時には今ある運用の形を全部捨てるのも必要。
  • フォルダ構成、整理ってやっぱり大事。
  • DriveFileStreamはやっぱり便利! まだ使ってない方、使うと幸せになれますよ!
  • 対応策その5のワンライナーWindows系のファイルサーバ運用には使えるので是非お試しあれ!

中身の無いブログでしたが以上です!
あでゅー(´・ω・`)


\\『明日のはたらくを創る』仲間を募集中!! // 919.jp