Blog

パソコン版 Google ドライブのファイルやフォルダのパスをURLに変換する

はじめまして。 ニフティ株式会社 新卒3年目の南川です。 今回はパソコン版Googleドライブのファイルやフォルダのパス(「G:/.」の形式)をブラウザからアクセス可能なURL(「https://drive.google.com/.」の形式)に変換する方法について話したいと思います。

パソコン版Googleドライブ

パソコン版Googleドライブを利用することで、クラウドとパソコンの間でファイルを同期することができ、Googleドライブのファイルをブラウザだけでなくエクスプローラーからアクセスできるようになります。
https://support.google.com/googleone/answer/10838124 ローカル上に仮想的にマウントされたファイルやフォルダは、Windows上では以下のようなパスで表記することができます。
例:G:\共有ドライブ\Drv_ほげほげグループ\ミーティング資料\2022-MM-DD_ふがふが.pptx

背景

Slack上では、Googleドライブ上のファイルやフォルダを先ほどのようなパス(「G:.*」の形式)で共有されることがあります。 Slackで検索すると、1万件以上ヒットします。
しかし、このようなパスで共有された場合、以下の問題が発生します。

Macユーザーがアクセスできない

「G:\」から始まるパスはWindowsユーザーであれば、基本的にエクスプローラーのアドレスバーに貼り付けることでファイルやフォルダを開くことができますが、Macユーザーはそのままだと開くことができません。

ファイル名や配置場所が変わった時にアクセスできなくなる

ファイル名や配置場所(つまりパス)が変わると、そのファイルやフォルダにアクセスすることができなくなります。一方、GoogleドライブのURLの場合、ファイル名が変わったり、ファイルを移動したりしてもアクセスすることができます。 こうした背景から、Googleドライブのパスをメンションで送ると、それをブラウザからアクセスできるURLに変換するSlack BOTを作成しました。
SlackBOTはAWS上で稼働しており、LambdaとAPI Gatewayで構成されています。また、Chaliceというサーバーレスアプリケーションフレームワークを使ってリソースを構築しています。 本記事では、このSlack BOTを作るうえでメインとなる「パソコン版GoogleドライブのファイルやフォルダのパスをURLに変換する方法」について説明していきます。

今回作るもの

今回は「Windowsにおけるパソコン版Googleドライブのファイルやフォルダのパス」を入力とし、「ブラウザからアクセス可能なGoogleドライブのURL」を出力するプログラムをPythonで実装します。 実行例は以下の通りです。 「hogehoge…」「fugafuga…」の部分はそれぞれファイル、フォルダのFile ID(後述)になります。

File ID

各ファイルやフォルダには、File IDと呼ばれる一意のIDを持っており、このFile IDはファイル名が変更されても固定されています。
File ID
A unique opaque ID for each file. File IDs are stable throughout the life of the file, even if the file name changes. https://developers.google.com/drive/api/guides/about-files#file_characteristics
先ほどの実行例の通り、Google DriveのファイルやフォルダのURLにはFile IDが含まれています。

全体の流れ

パソコン版GoogleドライブのファイルやフォルダのパスからGoogleドライブのURLに変換する大まかな流れは以下の通りです。
具体例とともに流れを説明していきます。
GoogleドライブのAPIを叩くためのサービスリソースを構築

Googleドライブのファイルやドライブを取得するAPIを叩くために、ログインを行いサービスリソースを構築します。ログインに成功するとtoken.jsonを作成し、2回目以降はこのファイルを用いるためログインが不要になります。
split_path = (Googleドライブのパスを整形して、階層ごとに分割したものの配列)

例えば、 ”G:\共有ドライブ\Drv_ほげほげグループ\ミーティング資料\2022-MM-DD_ふがふが.pptx” というGoogleドライブのパスが入力されたとします。これに対して先頭の ”G:\共有ドライブ\” の部分を除去して、階層ごとに分割を行います。こうして得られた配列は [“Drv_ほげほげグループ”, “ミーティング資料”, “2022-MM-DD_ふがふが.pptx”] となり、これをsplit_pathに代入します。
parent = (split_path[0]と同名の共有ドライブ)

先ほど得られた配列split_pathの先頭の要素(例における “Drv_ほげほげグループ”)と同名の共有ドライブを検索し、これによって得られたものをparentに代入します。

for name in split_path[1:] ~ forループ終了

split_pathの1番目以降の配列(例における [“ミーティング資料”, “2022-MM-DD_ふがふが.pptx”])の各要素nameに対して、parent直下のnameと同じファイル(フォルダ)を検索し、その結果をparentに代入します。
例に沿って説明すると、まず、 “Drv_ほげほげグループ” 直下の “ミーティング資料” という名前のファイルを検索し、それをfileとし、それをparentに代入します。次に “ミーティング資料” 直下の “2022-MM-DD_ふがふが.pptx” という名前のファイルを検索し、それをfileとし、それをparentに代入します。

ちなみに、Googleドライブにおいてフォルダはファイルの一種です。
File types
Google Drive describes files by types. This list shows all available file types:
・・・
Folder
A container you can use to organize other types of files on Drive. https://developers.google.com/drive/api/guides/about-files#types

return fileをもとに作成したURL

最後に、forループ内で最終的に得られたfileのFile IDをもとに作成したGoogleドライブのURLを返します。

手順

(1) 必要なパッケージをインストールする

Googleクライアントライブラリをpip installします。

(2) ソースコードを書く

「main.py」というファイルを作成し、以下のソースコードをコピーします。 ソースコードの説明についてはコメントを参照ください。

(3) 認証情報を用意する

以下のページを参考にGCPプロジェクトを作成し、APIを有効化します。
参考:Create a Google Cloud project  |  Google Workspace for Developers  |  Google Developer 次に、以下のページを参考にOAuth クライアントIDを作成し、「credentials.json」という名前で保存します。
参考:Create access credentials  |  Google Workspace for Developers  |  Google Developers そして、「credentials.json」を手順(2)で作成したmain.pyと同じ場所に配置します。

(4) 動作確認をする

以下のコマンドを実行すると、GoogleドライブのURLが出力されます。 初回実行時は認証画面がブラウザ上で開かれるので、認証をする必要があります。 認証成功すると認証情報ファイルtoken.jsonが生成されます。 二回目以降は生成されたtoken.jsonをもとに認証を行います。

終わりに

今回は “G:\共有ドライブ\” から始まるパソコン版GoogleドライブのパスをURLに変換するプログラムをPythonで実装しました。 似たようなことをやりたい方がいたら、ぜひ参考にしていただけると幸いです。

参考

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です! ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております! こちらもお気軽にご応募ください!