Google Driveを差分管理する

Google Officalではないがskicka
がよさそう。

skickaに必要な Go compilerの準備について
intel Mac
公式のGo Installerが存在するが、せっかくなので、Homebrewを使った方法で環境構築していく。
$ brew install go
$ go version
go version go1.20.2 darwin/amd64
環境変数の設定
以下はgoの中だけで設定されている環境変数として何もしてない場合はなる。閉じた環境変数。GOをインストールしたからと言って、これらのgo環境変数がOSに設定されているわけではない。
goの環境変数の確認
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/username/Library/Caches/go-build"
GOENV="/Users/username/Library/Application Support/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/username/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/username/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/Cellar/go/1.20.2/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.20.2/libexec/pkg/tool/darwin_amd64"
GOVCS=""
GOVERSION="go1.20.2"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/8f/kcg_s8xj7sj1qkfhf3djn_yh0000gn/T/go-build924362667=/tmp/go-build -gno-record-gcc-switches -fno-common"
GOPATHについて
GOPATHは個人がGoのプロジェクトを配置したい場所に(例: $HOME/go など)
GOPATHに合わせたPATHの設定を行う (GOPATH/bin) HOME/goならば
[引用] https://tech.librastudio.co.jp/entry/index.php/2018/02/20/post-1792/
ワークスペースの場所を定義しています。インストールしたパッケージなどは全てここに保管されます。
調べてみるとどうやら昔(Go1.11以前)は$GOPATH/src配下でしか開発できなかったらしい。
その後Go modulesの導入により$GOPATH/srcにプロジェクトを置かなければならないという制約からは解放されたので、各プロジェクト毎にGOPATHを指定するみたいなことがいらなくなったという経緯のようです。
なので、こちらも現在はデフォルトから変える必要性はないです。
[引用] https://zenn.dev/creamstew/articles/20e7a00c2eb161edbb1e
外部から取得したパッケージの格納先を決める際、GOPATHの影響を受けます。
$ go get github.com/labstack/echo/...
$ tree -L 1 /Users/xxx/go
/Users/xxx/go
├── pkg
└── src
src配下に echoパッケージ と echoの依存パッケージ のソースコードが格納されています。
[引用] https://www.wakuwakubank.com/posts/775-go-install-env-command/
GOROOTについて
GoのSDKの場所を定義しています。複数のバージョンを使用するなどがない限りはまず設定を変更する必要はない。
[引用] https://zenn.dev/creamstew/articles/20e7a00c2eb161edbb1e
Goがインストールされた場所は、GOROOT で確認できます。
[引用] https://www.wakuwakubank.com/posts/775-go-install-env-command/
goの中の変数の検索
$ go env GOPATH
/Users/username/go
以下を打てば、OS全体の環境変数には設定されていないことがわかる。
$ env | grep GO
そのため、環境変数を通す必要がある。
[追記] 別に変えなくてもいいみたい。
これらの環境変数はOS上で設定することで上書きすることもできますが、OS上で設定しなければGo内で使える環境変数になります。
なのでデフォルト値からの変更が必要なければ、新しくzshなどで環境変数の設定をする必要がなくなります。
GOROOTもGOPATHもデフォルト値から変更する必要性がないため、それぞれ設定はいらないということです。
........
調べてみるとどうやら昔(Go1.11以前)は$GOPATH/src配下でしか開発できなかったらしい。
その後Go modulesの導入により$GOPATH/srcにプロジェクトを置かなければならないという制約からは解放されたので、各プロジェクト毎にGOPATHを指定するみたいなことがいらなくなったという経緯のようです。
なので、こちらも現在はデフォルトから変える必要性はないです。
[引用] https://zenn.dev/creamstew/articles/20e7a00c2eb161edbb1e
.bash_profileに以下を追加する。
#Go homebrew
export GOPATH=$(go env GOPATH)
export GOROOT=$(go env GOROOT)
export GOTOOLDIR=$(go env GOTOOLDIR)
export PATH=$PATH:$GOPATH/bin
$ source ~/.bash_profile
変更の確認
$ env | grep GO
$ env | grep PATH
goのhelloworld
# 実行環境のディレクトリを作成
$ mkdir -p ~/go/src/hello
# 作成したディレクトリへ移動
$ cd ~/go/src/hello
# テスト用のファイルを作成
$ touch hello.go
# テスト用のファイルを編集
$ vi hello.go
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
$ go build hello.go
$ ./hello
Reference

skickaの準備
Download and build skicka: go get github.com/google/skicka
$ go get github.com/google/skicka
go: go.mod file not found in current directory or any parent directory.
'go get' is no longer supported outside a module.
To build and install a command, use 'go install' with a version,
like 'go install example.com/cmd@latest'
For more information, see https://golang.org/doc/go-get-install-deprecation
or run 'go help get' or 'go help install'.
go getが非推奨になって、go install使えって言ってくる。
$ go install github.com/google/skicka
go: 'go install' requires a version when current directory is not in a module
Try 'go install github.com/google/skicka@latest' to install the latest version
versionを選択しろっていってくるから そのまま従う。
$ go install github.com/google/skicka@latest
binとpkgが出来上がる。
Run skicka init to create a skeleton ~/.skicka.config file. Various options can be set in this file to control skicka's operation; see comments in the file for more information.
$ skicka init
~/.skicka.config
が出来上がる。
googleアカウントの承認
skickaの『「Google でログイン」機能が一時的に無効』を一時的に解決する
Google API申請を行う。
下記のリンクよりやり方を真似する。
Google Cloud Console を開いてプロジェクトを作り、自分で API キーの設定を行いましょう!
Google への確認申請を行わないので、認証できるアカウントが100アカウントまでの制限に加え、ログイン時に警告画面の表示もありますが、個人使用なら問題ないでしょう。
[引用] https://qiita.com/satackey/items/34c7fc5bf77bd2f5c633
OAuth クライアントでのOtherがなかったため、
デスクトップクライアントを選んだ。
OAuth のテストユーザーで自分のgmailを追加すること
URLが表示されるのでそこにアクセスしてverification codeを入力(勝手に進めば承認される。)
$ skicka -no-browser-auth df
URL:**************
Updating metadata cache: [=====================================] 100.00% 26s
これが表示された場合、何か設定が間違っている。
~/.skicka.config
は行の先頭にセミコロン;がついていて、コメントを表しているみたいで、
このセミコロンをclientid, clientsecretから外してあげないといけないのが注意。
[google]
;Override the default application client id used by skicka.
clientid=*********
clientsecret=**************
;An API key may optionally be provided.
;apikey=
After skicka is authorized, it will download and locally cache information about the files you have stored in Google Drive. This may take a while if you have many files on Drive; a progress indicator will try to keep you posted about how this is going. Once this data is stored locally, future runs of skicka will get going much more quickly.
Skickaを使う
接続の確認
google driveの/(ルート)が表示される。
$ skicka ls
GoogleDriveの使用状況が確認できる
$skicka df
アップロード
(ファイルのアップロード)
$ skicka upload <ファイルパス> <Drive上のパス>
(ディレクトリのアップロード)
$ skicka upload <ディレクトリパス> <Drive上のパス+ディレクトリ名を指定>
ダウンロード
skicka download <Drive上のパス> <localのパス>
Reference