Google Drive File Stream(PC版Google Drive)を試してみる
本日、5月12日より、かねてより長く提供されてきた古いPC向けのGoogle Driveアプリがシャットダウンされます。これから数週間かけて実施されますが、知らない間にGoogle Driveとの同期ができなくなっていて無残な事になったり、また、新しいサービスであるGoogle Drive File StreamやBackup Syncへ移行するにあたって、いきなり移行という面倒な事にならないよう、今すぐにでも、準備しておくべきでしょう。
とりわけ、今回はPC版Google Driveを使ってみたいと思います。新機能は業務で活用する上でどこまで役に立つか?その辺を中心に検証してみました。
※2021年2月、Google Drive File StreamはPC版Googleドライブとして生まれ変わり、個人アカウントでもDrive File Streamと同じ機能を利用可能になりました。
目次
インストールファイル
- PC版Googleドライブインストーラ - Windows/macOS用
Windows用とMac用にそれぞれ新アプリが用意されています。旧Google Driveアプリはアンインストールする前に、中身をよく確認しておきましょう。
概要
PC版Google Driveの特徴
PC版Google Driveとは、G Suiteユーザが利用できる機能で、通常の個人アカウントの場合には、「Backup and Sync」というものを今後は利用することになります。但し両者は同じサービスではありません。今回取り上げているPC版Google DriveはG Suiteユーザだけが利用できるシステムです。
PC版Google Driveですが、その名の通りファイルをストリーミングしながら利用できるこれまでのGoogleドライブアプリとは少し方向性の異なる仕組みです。主な特徴は
- ファイルをストリーミングしながら利用するので、ローカルドライブの消費量が少ない
- 同期作業が自動なので不要である。
- 見た目はこれまでのGoogleドライブアプリと似ている
- G Suite Business以上は共有ドライブ機能が利用できる
- ストリーミングだけれど、オフラインでも使用する機能がついている。
- Windowsの場合、Gドライブにマウントされ、エクスプローラで普通に閲覧編集が出来る。
- VBAにて、同じディレクトリ内にある別のファイルの参照も大丈夫!
- Gitのソースリポジトリに追加してもきちんと動作する
但し、注意点もあります。
Windowsの場合マウントされる時にドライブレターが用いられてローカルドライブのように使えるのですが、通常はGドライブが割当られます。しかし、マウントされる前にGドライブが利用されている場合、次のドライブレターが割当られてしまうので、ショートカットなどを作ってると、動かなくなる事もあります。
図:インストール直後のPC版Google Drive
使用する為の準備
使用するためには、管理コンソールより使えるように設定をしてあげる必要があります。
- アプリ⇒Google Workspace⇒ドライブとドキュメントを開きます。
- 機能とアプリケーションを開きます。
- 組織でのドライブファイルストリームの使用を許可するにチェックを入れる
- 古いドライブアプリはアンインストールしておく
- 古いドライブアプリで使用していたフォルダは削除しておく。
- Windowsの場合の古いフォルダ:C:¥Users¥%USER%¥Google Drive
- Macの場合の古いフォルダ:/Users/$USER/Google Drive
これで利用が出来るようになります。また、Google Drive側の設定でアップロードしたファイルを変換するにチェックを入れておくと、ExcelなどのファイルがGoogleスプレッドシートへ自動変換されてしまうので、チェックは外しておきましょう。
図:管理コンソールでの設定
図:ドライブ側の自動変換の設定
実際に使用してみる
Google PC版Google Driveを起動して、まずはログイン。いつものG Suiteアカウントでログインします。
実際にアップロードして編集してみる
実際にPC版Google DriveのGドライブへファイルをコピーして編集をしてみました。その時の挙動は以下の通り。
- ファイルのサイズによりアップロードされる時は時間が掛かる。
- 開く時はスパッと開かれる。
- 上書き保存もきっちり行われる。
- Excelファイルを編集するとその分だけきちんと版違いとして直ぐに保存され反映される。
図:保存するたび版が積み上がっていく
VBAで他のファイルを参照してみる
2つのExcelファイルがあり、一方はVBAを記述してあるxlsmファイル(test.xlsm)、もう一方はデータの入ってるxlsxファイル(data.xlsx)。このファイルに於いて、VBAが入ってる側へデータの入ってるxlsxから転記するコードを実行してみました。データファイルは同じディレクトリ内のdata.xlsxを参照させています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Option Explicit Sub dataGetter() '変数の宣言 Dim counter As Long Dim flag As Boolean Dim xlsxfile Dim tempvalue As Variant Dim curfilepath As String 'data用ブックを開く curfilepath = ThisWorkbook.Path & "\data.xlsx" Set xlsxfile = Workbooks.Open(curfilepath) counter = 1 flag = False 'データをループで取得して書き込み Do While flag = False tempvalue = xlsxfile.Worksheets("data").Range("B" & counter + 1) If tempvalue = "" Then flag = True Else ThisWorkbook.Worksheets("Sheet1").Range("A" & counter).Value = tempvalue End If counter = counter + 1 Loop '終了処理 xlsxfile.Close Set xlsxfile = Nothing MsgBox ("完了") End Sub |
実際にやってみました。きちんとコードは実行され、同じディレクトリ内のxlsxファイルのデータから値を取得することが出来ました。
Excelで他のシートへの参照
本来、Excelのファイルにて他のファイルのシートを参照するような数式を書いてデータを流用する手法は避けるべきです。しかし、現実の現場ではそういった数式でデータの二次利用をしているケースは多数見受けられます。他のクラウドのストレージサービスの場合、こういったブック間リンクを用いたものは、当然利用出来ません。
そこで、PC版Google Driveを使った場合はどうかやってみました。Gドライブ上に2つのファイルを作成し、データの入ってるdata.xlsxとそのデータを参照するlinksheet.xlsxの2つを使って、数式を入れ値を参照させました。その後、data.xlsxの一部のデータを書き換えて保存。再度、linksheet.xlsxで参照を更新してみました。
きちんと別のファイルも参照を更新すると値を取得することができました。既存のファイルサーバから移行する場合、スムーズにGoogle Driveの場合は移行が可能ですね。Boxなどで同じような環境を実現する場合、Box Syncを利用すると実現が可能なようです。
図:更新すると値はきっちり参照できました。
Accessでリンクテーブル
Accessのファイルでも試してみました。GUI部分のaccdbファイルと、データを格納するaccdbファイルの2つで構成されてるファイルで、起動時に同じディレクトリ内のデータを格納するaccdbファイルへリンクテーブルを自動的に貼るようにコードを記述してあります。
実験してみた所、問題なく動作しました。ファイルサイズが大きいため、若干起動が遅い部分はありましたが、リンクテーブルはきちんと動作していました。小規模なデータであれば回線が細くても十分利用出来ると思います。ちなみに、起動時に自動でリンクするコードは以下のようなコードを利用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
'DB内の全てのテーブルリンクを削除する Function deletealllink() As Boolean Dim mdb As DAO.Database Dim tdf As DAO.TableDef Set mdb = CurrentDb For Each tdf In mdb.TableDefs If (tdf.Attributes And dbAttachedODBC) Or _ (tdf.Attributes And dbAttachedTable) Then DoCmd.DeleteObject acTable, tdf.Name End If DoEvents Next mdb.Close: Set mdb = Nothing Set tbf = Nothing End Function '外部のデータベースにリンクテーブルを貼る Public Function makelink() On Error GoTo Err_makelink 'リンクテーブルを設定する Dim DB As DAO.Database Dim tb As DAO.TableDef Dim basemdbpath As Variant Set DB = CurrentDb() 'データ保存ファイルへリンクテーブルを貼る basemdbpath = CurrentProject.Path & "\database.accdb" Set tb = DB.CreateTableDef("testmaster") tb.Connect = ";DATABASE=" & basemdbpath tb.SourceTableName = "・テストマスタ" DB.TableDefs.Append tb DB.Close: Set DB = Nothing Set tb = Nothing Exit_makelink: Exit Function Err_makelink: MsgBox Err.Description Resume Exit_makelink End Function |
AccessでExcelオートメーション
AccessからExcelのファイルに対してデータの書き込みは直接ではなく、Excelオートメーションを利用して書き込みます。テンプレートとして用意してあるExcelファイルをコピーし、そのファイルに対してAccessのクエリデータを書き込みさせてみました。
結果、無事にクエリデータを4つのシートに渡って書き込みが無事に出来ました。十分なスピードで動作します。ちなみに、Excelオートメーションで書き出しコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
'件数リストを生成する(Excelオートメーション使用) Sub drugcntlist(kijunday As String, kijunday2 As String, kijunhosp As String) Dim AppObj As Object 'Excel.Applicationオブジェクトの宣言 Dim WBObj As Object 'Excel.Workbookオブジェクトの宣言 Dim WsObj As Object 'Excel.WorkSheetオブジェクトの宣言 Dim filePath As String Dim strFolderName As String Dim strFileName As Variant Dim dummyfile As String Dim dbs As Database Dim rsc As DAO.Recordset Dim strSQL As String Set dbs = CurrentDb 'エクスポート用のクエリを開く Dim con As New ADODB.Connection Dim rec As New ADODB.Recordset '現在開いているデータベースと接続する Set con = CurrentProject.Connection 'デスクトップフォルダを取得 Dim dPath As String, WSH As Variant Set WSH = CreateObject("WScript.Shell") dPath = WSH.SpecialFolders("Desktop") & "\" '仮のファイル名を生成する dummyfile = dPath & kijunhosp & "_件数リスト_" & kijunday & "-" & kijunday2 '名前をつけて保存ダイアログを表示 strFileName = GetFileName(False, "MicrosoftExcel ブック (*.xlsx)|*.xlsx", "", dummyfile & ".xlsx") '選択結果を評価 If strFileName = 0 Then 'キャンセルボタンが押されたときの処理を記述 MsgBox "キャンセルされました。" Exit Sub End If 'テンプレファイルを指定する filePath = CurrentProject.Path & "\テンプレ.xlsx" 'ファイルを複製する(ダイアログ使用) FileCopy filePath, strFileName '▼ここからメインルーチン '一時テーブルのデータを削除 strSQL = "DELETE * FROM tempDrugCnt" dbs.Execute strSQL '一時テーブルにデータをクエリで追加 '警告ダイアログをON(戻す) DoCmd.SetWarnings False '追加クエリを実行する DoCmd.OpenQuery "1000円以上クエリ" 'ファイルを開く Set AppObj = CreateObject("Excel.Application") '実行時バインディング Set WBObj = AppObj.WorkBooks.Open(strFileName) 'ワークブックを開く Set WsObj = WBObj.Worksheets("1000円以上") AppObj.Visible = True 'Excelアプリケーションを表示する AppObj.Calculation = xlManual '再計算を停止する 'ワークシートへの処理 'Excelにエクスポートしたいテーブルのデータを取得 rec.Open "tempDrugCnt", con WsObj.Range("a2").CopyFromRecordset rec rec.Close '警告ダイアログをON(戻す) DoCmd.SetWarnings True '再計算に戻す AppObj.Calculation = xlAutomatic 'Excelを保存して閉じる WBObj.Save 'ワークブックを保存する WBObj.Close 'ワークブックを閉じる AppObj.Quit '終了処理 Set AppObj = Nothing Set WBObj = Nothing Set WsObj = Nothing Set WsObj2 = Nothing Set dbs = Nothing Set rsc = Nothing 'メッセージ表示 MsgBox "指定期間内の件数一覧の生成を完了しました。" End Sub |
オフラインで利用する
オフラインでも利用できるようにする為には、PC版Google Driveのドライブ内のディレクトリで
- 右クリックする
- ドライブファイルストリームを開く
- オフラインで使用可能にするをチェックする
これでローカルPCがオフラインでも利用可能になります。
図:ローカルPCの使用量は増えますが
LinuxでもPC版Google Driveを使いたい
マルチプラットフォームなGoogleですが、Linux向けにはPC版Google Driveは提供されていません。しかし、有志の方が作成されたFUSE filesystem over Google Driveを利用する事でLinuxでもPC版Google Driveのような環境が構築可能です。
今回はUbuntu Linux 16.04 64bit環境でテストしてみました。
まずはターミナルより以下のコマンドでアプリケーションをインストールします。
1 2 3 |
sudo add-apt-repository ppa:alessandro-strada/ppa sudo apt-get update sudo apt-get install google-drive-ocamlfuse |
続いて、自分のHomeディレクトリ内にマウントポイントとなる空のディレクトリを作ります。
1 |
mkdir gdrive |
次に、引数なしでgoogle-drive-ocamlfuseを実行し、Googleアカウント認証をします。この時利用できるアカウントはG Suiteのアカウントなので、フリーのアカウントは利用できません。
1 |
google-drive-ocamlfuse |
ブラウザが立ち上がり、G Suiteのアカウントでログインするとgdfuseとして許可を求められるので、許可をクリックします。さらに、許可要請として画面が出てくるので、許可をすると「The application was successfully granted access. Please wait for the client to retrieve the authorization tokens.」というメッセージと共に完了します。
図:ログイン認証画面の様子
最後に、ターミナルから以下のコマンドでマウントを実行します。
1 |
google-drive-ocamlfuse gdrive |
成功すると、gdriveディレクトリにGoogle Driveの中身がマウントされてアップロードや編集等が可能になります。自動でマウントするのであれば、起動時にシェルスクリプト等で上記のコマンドを実行するようにセットすれば良いのではないかと思います。
図:無事にGoogle Driveの中身が表示されました
gnome-session-propertiesを利用する場合には以下のような手順で自動マウントが可能です。
- 左下の●の粒(もしくは、左上のUbuntuロゴ)をクリックする
- アプリケーション一覧が出てくるので、検索画面でsessionと入れる。「自動起動するアプリケーションの設定」が出てくるので、クリックする
- 追加ボタンをクリック
- 適当な名前、実行するコマンドの入力します。
- 保存を押して完了
これで、毎回ログイン後に、コマンドが実行されます。
図:アプリやシェルスクリプトをX起動後に実行します。