水曜日、思ったように時間が取れなかった。 関係ないことに気を取られて本タスクに手がつかない。 部屋が散らかっているのでまずは掃除したい状態なのだと思う。
夜は21時くらいに寝落ちしてしまった。
金曜日、やっている仕事が終わらない。最近こういうのばっかりで凹む。 晩ごはん食べたあとに活動しようと思ったけど眠すぎて寝落ちしてしまった。
土曜日、寝落ちして早くから寝ていたはずなのにしんどすぎて起きられない。 寝たり起きたりを繰り返して夕方ごろ動き出してコーヒーを飲みに行った。 少しまったりしたあと豆を買って帰った。 その後もしんどくて動けなくてすぐに寝てしまった。
日曜日、昼くらいから活動するも本調子じゃない。 夜にかけてだんだん調子が出てきたがと時既に遅しで思ったより進まなかった。
VSCodeは起動時にいい感じに環境変数を持ってきてくれるのだけれど、これはログインシェルに対して行われる。
よって、ログインシェルを変更せずにターミナルの設定や、terminal.integrated.shell.${OS}
を設定して運用していると PATH
などがうまく引き継がれない。
(もちろん code
コマンドを当該シェルから実行するとうまくいくが Alfred とかから開きたいですよね)
とにかく雑な方法でいいのであれば、ログインシェルの設定で使っているシェルの環境変数を引き継いで export
してやるとなんとかなる。
必要そうなものだけホワイトリストで設定しているけどここに書き忘れると引き継がれない。
$ cat .zshrc export `fish -c 'env | grep -e PATH -e GOPATH -e RBENV -e NODENV -e EDITOR'`
なんかきっともっといい方法があると思う。
(zshに戻れば全部解決する)
生きているとGitHubのOrganizationのリポジトリをまとめてcloneしたくなることってありますよね。僕はあります。
1つずつちまちまcloneするのは大変だし、数が多いと物理的に難しい場合もあります。 しかし、近年では ghqや gh のような便利なツールが揃っているの簡単に実現できます。
gh api を使うとGitHubの REST API を簡単に叩けるので以下のようにしてリポジトリの一覧を取得します。 1度の取得で100リポジトリが上限なので数が多い場合はページングする必要があります。
gh api /orgs/{org}/repos
シェルスクリプトは得意ではないので、Rubyで雑なスクリプトを書いて対応してみました。jq も使っているのでこちらも用意しておきましょう。
これでリポジトリの一覧が取得できたので、これを ghq
に渡してcloneしていきます。
--parallel
オプションをつけると並列して取得してくれるのでまとめて取得するときには付与すると良さそうです。
数が多いと時間がかかりすぎるのとディスク容量を大量に消費してしまうので --shallow
もつけています。
必要に応じて各リポジトリで fetch
すると良いです。
またすでに clone
しているリポジトリがあったときのことを考えて --update
も付与しています。
詳しい使い方は ghq-book の get の章 が分かりやすいです。 ghqに詳しくなりたい人は ghq-book を買いましょう。
最終的に以下のような感じで目的を達成できました。
$ ruby collect_repositories.rb <ORG_NAME> | ghq get --update --shallow --parallel
他にも特定のユーザーのリポジトリ一覧とかにも応用出来るかと思います。(API Reference)