ちなみに

火曜日の空は僕を押しつぶした。

日記

水曜日、思ったように時間が取れなかった。 関係ないことに気を取られて本タスクに手がつかない。 部屋が散らかっているのでまずは掃除したい状態なのだと思う。

夜は21時くらいに寝落ちしてしまった。

日記

火曜日、睡眠に失敗していて少しぼっとしていた。 仕事はすこし落ち着きモード。 しかしあんまりやりたいこととかは出来なかった。

100回目くらいにプロダクティビティみたいなところを意識し始めて試そうとしてるけどなかなかうまくいかない。 一気にやりすぎているのだと思う。

日記

月曜日、やっていた仕事が終わってスッキリした。 その後起こった問題もしゅしゅっと解決出来たしいい日だった。

セールで買ったKindle Oasisが届いたのでアクティベートした。 二段階認証をしているとアクティベート出来ないので一回オフにする必要があって微妙だった。 Oasisは物理ボタンもいいし、反応も速いので今のところ最高です。 4台目のKindleだけれど毎回これで読書が捗ると思うけど毎回動作のもっさり感に苛ついてiOS版に戻ってきてしまう。 今回こそは…。これが三点リーダー症候群です。

週末日記

金曜日、やっている仕事が終わらない。最近こういうのばっかりで凹む。 晩ごはん食べたあとに活動しようと思ったけど眠すぎて寝落ちしてしまった。

土曜日、寝落ちして早くから寝ていたはずなのにしんどすぎて起きられない。 寝たり起きたりを繰り返して夕方ごろ動き出してコーヒーを飲みに行った。 少しまったりしたあと豆を買って帰った。 その後もしんどくて動けなくてすぐに寝てしまった。

日曜日、昼くらいから活動するも本調子じゃない。 夜にかけてだんだん調子が出てきたがと時既に遅しで思ったより進まなかった。

ログインシェルじゃないシェルをメインに使っているときにVSCodeに環境変数を伝える

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に戻れば全部解決する)

日記

木曜日、ハマってしまってあんまり進まなかった。 新しいことを古いバージョンでやるのは厳しいね。 新しくしていきたい。

前日が夜遅かったので眠くなって日付変わる前に寝てしまった。

Organizationのリポジトリをまとめてcloneする

生きているとGitHubのOrganizationのリポジトリをまとめてcloneしたくなることってありますよね。僕はあります。

1つずつちまちまcloneするのは大変だし、数が多いと物理的に難しい場合もあります。 しかし、近年では ghqgh のような便利なツールが揃っているの簡単に実現できます。

gh api を使うとGitHubREST API を簡単に叩けるので以下のようにしてリポジトリの一覧を取得します。 1度の取得で100リポジトリが上限なので数が多い場合はページングする必要があります。

gh api /orgs/{org}/repos

シェルスクリプトは得意ではないので、Rubyで雑なスクリプトを書いて対応してみました。jq も使っているのでこちらも用意しておきましょう。

gist.github.com

これでリポジトリの一覧が取得できたので、これを 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)