GitHub に草を生やすシェルスクリプト「gh-contributions」を作った
GitHub に自動的に草を生やすシェルスクリプト「gh-contributions」というものを作った。
Windows の GitBash で動作確認した。Mac 等でも使えるはず。ご利用はご自由にドウゾ。
仕組み
git commit --date
オプションを利用し、コミット日時に過去日を指定してコミット情報を作っている。これを指定の日数分だけループ処理しているだけ。
--date
オプションについては以前も紹介した。
シェルスクリプト内で単純に git commit
コマンドを叩いているだけなので、予め GitHub Contributions が有効になるよう、GitHub に登録した情報と同じ Git ユーザ情報を設定しておくこと。
シェルスクリプトの使い方
gh-contributions.sh
を任意のリポジトリの master ブランチ (GitHub Contributions が有効になるブランチ) に配置する。
gh-contributions.sh
を開き、変数 START
と END
を任意の日付に設定する。YYYY-MM-DD
形式が望ましい。この START
の日付から END
の日付まで、1日1コミットを生成する。
設定ができたら gh-contributions.sh
を実行する。
$ sh ./gh-contributions.sh
するとカレントディレクトリの gh-contributions.md
に日付を追記しつつ、1日につき1つの git commit
を生成する。
これでコミット履歴ができたので、あとは git push
すれば GitHub に反映できる。
シェルスクリプトを作るにあたって参考にしたもの
- gh-contributions - npm
- この npm パッケージを使いたかったのだがエラーが出たので自作するに至った。
- GitHub - koki-sato/daily_grass: GitHubに毎日草を生やす
daily_grass/planting_weed.sh
at develop · koki-sato/daily_grass · GitHub- 単純に
git commit
コマンドを叩くシェルスクリプトを書いてやればいいのか、と気付いた。
- 日付を取得する | UNIX & Linux コマンド・シェルスクリプト リファレンス
date
コマンド全般。-d
で日付指定したり1 day
で日付を加減算できたり、'+%d'
のようにフォーマット指定できたり。
- 変数を使用する | UNIX & Linux コマンド・シェルスクリプト リファレンス
- シェルスクリプトの変数の扱いについて。
- "date" 日付・時刻の表示 @LCD -Linux Command Dictionary-|Replog!株式会社レップワンスタッフによるブログです
date
コマンドのロケールをその行だけ変更する方法。LANG=en_US date
とする。-
コマンド実行時に同一行で変数の設定を行うことで、 そのコマンドに対してのみ有効な変数を設定することが出来ます。
;
(セミコロン)で区切らないのがポイント。
- shell 2つの日付から経過日数を取得する | Tips of Rubbish
- 指定の日数分だけループさせるために、2つの日付から経過日数を取得する方法を参照した。
- シェルで変数のインクリメントに expr を使うと100倍遅い件 - Qiita
- 日数の計算やループ時のインクリメントに
expr
ではなく$((...))
という構文を使った。
- 日数の計算やループ時のインクリメントに
- Bash標準出力・標準エラー出力の全て(1>&2とか)まとめ | Coffee Breakにプログラミング備忘録
git commit --date --no-edit
の組み合わせが標準出力するので> /dev/null 2>&1
で非表示にした。