Google Drive用コマンド skicka でWindows/Macのファイルをバックアップ

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは植木和樹@上越オフィスです。本日はGoogle Drive用コマンドライン インタフェース skicka のご紹介です。

先日6年ぶりにWindowsノートPCを手にいれました。

Surface Goがやってきたので6年ぶりにWindows環境を自分好みにセットアップしてみた

せっかくなので先週はMacbook Proを自宅に残し、Surface Goだけ持って東京へ出張してみることにしました。ただ予想外のトラブルでsshやawscli操作が必要になるかも?ということで、ホームディレクトリ下の~/.ssh~/.awsはWindowsにもコピーしておきたいところです。

いわゆる dotfiles はgithubを使って環境を復元できるようにしているのですが、~/.ssh~/.awsには秘密鍵やクレデンシャル情報が含まれておりgithubにはあげられません。

どうにか簡単に2台の間でファイルを受け渡しできないか、ということで今回Google Driveを利用してみることにしました。またGUIだとドットで始まるフォルダは不可視で扱うことが難しいため、cliから操作することにしました。

skicka について

skicka はGoogle Drive用コマンドラインユーティリティです。

ちなみに skicka はスウェーデン語だそうで、「送る」(英語で send)を意味する単語だそうです。

インストール

事前に go が必要になりますので、homebrew で入れておいてください。インストールしたらパスを通しておきます。

$ go get github.com/google/skicka

(bash/zsh)
$ export PATH=~/go/bin;$PATH

(fish)
$ set -x PATH ~/go/bin $PATH

インストールしたら、設定ファイルを初期化します。

$ skicka init
2019/02/12 13:41:21 created configuration file /home/kazuki/.skicka.config.

最初に適当なサブコマンドを実行するとGoogleの認証が行われます。ブラウザが起動するのでGoogle認証し、表示される認証コードをコマンドラインに入力してください。 なおMacの場合は自動でブラウザが起動しますが、Windows Subsystems for Linuxの場合はブラウザが起動しません。その時は -no-browser-auth オプションをつけるとURLを出力してくれるので、ブラウザのアドレスバーに貼り付けて認証に進んでください。

$ skicka -no-browser-auth df
Go to the following link in your browser: (ここにURLが表示される)
Enter verification code: (認証後に表示される認証コードをここに貼り付けたらエンターキーを押す)

使いかた

認証が終わったら改めてサブコマンドを実行してみましょう。

df は現在のGoogle Driveの使用状況を表示してくれます。

$ skicka df

Capacity    10.00 TiB
Trash        1.09 GiB     0.01%
Drive        5.01 GiB     0.05%
Photos          0 B       0.00%
Gmail       16.82 GiB     0.16%
Free space   9.98 TiB    99.78%

クラスメソッドのG SuiteはビジネスプランなのでGoogle Driveは無制限ですが、10テラバイトで認識されてるみたいですね。

lsコマンドでディレクトリやファイル一覧を表示します。mkdir でディレクトリを作成できます。

$ skicka ls

$ skicka mkdir _dotfiles

ファイルのアップロードは upload、ダウンロードは download です。

ここで2点注意です

1) upload/download コマンドは同期処理となります。すでに同じ内容のファイルがある場合はスキップされます。

2) ディレクトリも含めたファイルコピーの挙動がUnixのcp/mvと異なります。

# (↓このコマンドだと ~/.aws 以下のファイルが _dotfiles にコピーされてしまう)
$ skicka upload ~/.aws _dotfiles

# (ディレクトリごとコピーしたい場合は宛先にディレクトリ名をつけるのを忘れずに)
$ skicka upload ~/.aws _dotfiles/.aws
$ skicka upload ~/.ssh _dotfiles/.ssh

# (同様にディレクトリごとダウンロードしたい場合も宛先にディレクトリ名をつける)
$ skicka download _dotfiles/.aws ~/.aws
$ skicka download _dotfiles/.ssh ~/.ssh

skickaではUnixでお馴染みのコマンドが使えます。

$ skicka
usage: skicka [skicka options] <command> [command options]

Supported commands are:
  cat       Print the contents of the given file
  download  Download a file or folder hierarchy from Drive to the local disk
  df        Display free space on Drive
  du        Report disk usage for a folder hierarchy on Drive
  fsck      Check consistency of files in Drive and local metadata cache
  genkey    Generate a new encryption key
  init      Create an initial skicka configuration file
  ls        List the contents of a folder on Google Drive
  mkdir     Create a new folder or folder hierarchy on Drive
  rm        Remove a file or folder on Google Drive
  upload    Upload a local file or directory hierarchy to Drive

'skicka help' prints more detailed documentation.

オマケ

どうしても skicka というコマンド名が覚えられないため ggl というエイリアスにしています。(40代男性 妙高市在住)

(bash/zsh)
$ alias ggl=skicka

(fish)
$ alias ggl skicka


$ ggl df
$ ggl ls
$ ggl mkdir

まとめ

今回は skicka のご紹介でした。Unixのファイル操作で使うコマンドがそのまま使えるため、使い慣れるのは簡単なのではないでしょうか。

普段はGoogle Driveをドライブ ファイル ストリームでマウントし作成したファイルを保存しておけば、不意な事故でもファイルの消失は防ぐことができます。 しかし今回のようにどうしてもローカルディスクに作成する(重要な)ファイルもあるかと思います。定期的なバックアップのように繰り返し作業する際にはGUIよりCLIの方が適してる場合もあります。導入も簡単ですので、ぜひ使ってみてください。

(cliで操作できれば、シェルスクリプト化して dotfiles と一緒に管理しやすいですし)

万が一の時に困らないよう、普段から自分に合った方法でバックアップを心がけましょう。