はじめに
環境構築の記事でDVCを使用したデータ管理についてもまとめていますが、Google Cloud Projectを使用するため若干ややこしいことに加え、定期的にトークンが切れて認証し直さないといけないという大きいデメリットがありました。
今回は初回の設定のみで設定がすむ方法について解説します。
記事と同様の流れでの作業を想定しているので、その点ご留意ください。
Google Cloud Console
- Google Cloud Consoleへアクセス
- 画面上部のボックスからプロジェクトを作成
- 左上にGoogle Cloudと書いてある部分の右です
- 出てくるウィンドウの右上から作れます
- 画面左のメニューから「IAMと管理」を選択
- 左にメニューがない場合は左上の3本線から開けます
- サイドバーの真ん中上あたりから「サービスアカウント」を選択
- 画面上部の「サービスアカウントを作成」へ進む
- 任意の名前と説明を入力し、完了を押下
- 権限のところはスキップで構いません
- メールの列に書いてある、長いメールアドレスをコピーしておく
- 後ほどGoogle Driveのフォルダにこのアドレスを共有します
- 作成したサービスアカウントの一番右にある「操作」から「鍵を管理」を選択
- 長ったらしいメールアドレスの右側にある点々の部分です
- 「キーを追加」→「新しい鍵を作成」→「JSON」を選択、作成へ進む
- ファイルとして保存されるので、作業ディレクトリへ保存する
.secrets
フォルダを作り、その中へ保存してください- ファイル名は変えて問題ありません。
key.json
とかで大丈夫です
Google Drive
- Google Driveの任意の場所にプロジェクトでデータをしまうフォルダを作成する
- フォルダの共有の設定から、先ほどコピーしたメールアドレスを貼り付け共有する
- Googleドライブで作成したフォルダのIDをコピー
- IDは、ドライブでフォルダを開いたときのURLで、最後のスラッシュ(~/folders/)より右側の部分です
VSCode
- VSCodeのターミナルで次のコマンドを入力して実行 - 最後の部分(四角括弧ごと)をコピーしたIDに変更してください
dvc init && dvc remote add -d myremote gdrive://[Google DriveのフォルダID]
- サービスアカウントを有効にする
- 以下のコマンドを実行してください
dvc remote modify myremote gdrive_use_service_account true
- 次のコマンドを実行する
- フォルダ名やファイル名を自分で変えた場合、修正してから実行してください
dvc remote modify myremote --local \
gdrive_service_account_json_file_path .secrets/key.json
設定ファイルをgitignore(重要!)
いま.secrets
を作りましたが、この中身はいわば個人情報であり他人に漏らしていいものではないので、.gitignore
ファイルにしっかり記載し、Gitのトラッキングを解除しておく必要があります。
以下のように.gitignore
に追記してください。
.gitignore
/.secrets/
これで.secrets
フォルダの中身がGitに追跡されません。
データフォルダを作ったら適宜add
, push
以上で設定は終了です。
環境構築の記事でも説明しているように、あとはdata
などデータを入れるフォルダを作りデータを追加したら、dvc add data/
を実行し、最後はdvc push
でプッシュすることでデータファイルをGoogle Drive上で管理することができます。
共有する場合
共同研究などで他の人と作業を進める場合はこのデータフォルダも共有したいということになると思います。その場合は、記事における共有に加え、.secrets
は別に送る必要があります(Gitで追跡していないのでクローンしても.secrets
は現れないからです)。
別に共有したうえでワーキングディレクトリに.secrets
を置いてもらえばdvc pull
でデータを引っ張ってくることができるようになります。
その際、.dvc/config.local
ファイルを以下のように編集してもらってください。
[remote "myremote"]
gdrive_use_service_account = true
gdrive_service_account_json_file_path = ../.secrets/key.json
../
は1つ上の階層のフォルダの~という意味なので、これであっています。.dvc/config.local
もgitignoreされているので、クローン下だけでは共有されません。
感想
今のところ結構いい感じです。例えばこのウェブサイトを作るうえではあまり新しくデータを追加することがないので、追加するたびにトークンが切れて認証のし直しということが頻発していました。今回の方法では再認証がない(はず)なので、ストレスが軽減されたかなという印象です。
何かあればぜひコメントまでお願いします。