Edited at

git sadaコマンドを打つとどうなるか

More than 1 year has passed since last update.


はじめに

さだまさしさんの作る曲の魅力とは何でしょうか?

もちろんメロディもすばらしいのですが、やはり歌詞のすばらしさを挙げる人が多いのではないでしょうか。

この時期に聴く「遥かなるクリスマス」とか本当にいいですよね。

というわけで、さださんの魅力のひとつである歌詞をファン以外の人にも伝えるためのgit sadaコマンドを作ってみました。


こうなります

gitのコミットメッセージがすべて「北の国から」の歌詞に変わります。

スクリーンショット 2015-12-02 20.41.44.png

実際にgit-lfsのforkで試しにやってみました。

あたかも「北の国から」の歌詞の魅力が海外の方にも伝わったように見えますね。


やり方

.git/configにこんな感じでエイリアスを設定します。

たったこれだけでgit sadaコマンドが使えるようになります。


.git/config

[alias]

sada = filter-branch -f --msg-filter 'ruby -e \"puts \\\"アーア アアアア アーアー,アアー アアアア アー,ンンー ンンンン ンーンン,ンンン ンンン ンン,ラララララ ラー ララララー,ララララー ラララー ララ,ラララララ ラー ウウウ フフフ,ンンンンン ンンンン,ンンンン ン,アー アアアア アーアー,アアー アアアア アーアア\\\".split(\\\",\\\").sample\"'

実行した後にforce pushすれば全てのコミットメッセージが「北の国から」の歌詞に変わります。

※大変危険なコマンドなので、ちゃんとしたリポジトリでは絶対にやらないでください


git filter-branch

ここでgit sadaで使用している、git filter-branchコマンドについてちょっとだけ説明したいと思います。

このコマンドは過去のコミットに対してまとめて特定の処理を実行できるとても便利なやつです。

たとえばアップしたくなかったログファイルをいっぺんに削除したり、

git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch debug.log" --prune-empty -- --all

特定のメッセージを置き換えたりすることができます。

git filter-branch -f --msg-filter 'sed "s/release\sv1.1.0/develop/g"' --tag-name-filter cat -- --all

filterは他にも種類があるようなので、いろんなシチュエーションで使えそうですね。

今回は--msg-filterを利用して、コミットメッセージを「北の国から」の歌詞にランダムで書き換えました。

もともとこの歌詞は即興で考えたものなので、ランダムでも本来の歌詞っぽい感じに仕上がります。


さだは、北海道の広大な台地をイメージしたメロディーラインを「♪ああーあああああーあ(語尾下げて)」と発したところ、倉本が「それいいね。で、その続きは?」と言い、「♪ああーあああああー(語尾上げて)」と発した。さらに倉本の「続けて」に対して、さだは「♪んんーんんんんんーん、んんん、んんんんんー」と呼応。これを聞いた倉本が「いいね。これでいこう」とそのまま決定。メロディーラインを即興で考え発しただけのつもりが、イントロのギターからAメロ・Bメロと、その時の即興メロディー案がそのまま採用され、わずか10分ほどで基本が出来上がったという。

「北の国から〜遥かなる大地より〜」『フリー百科事典 ウィキペディア日本語版』より



おわりに

構文解析とかまったく関係ない内容なので申し訳ない気持ちでいっぱいですが、git filter-branchを知ってもらう機会を作っていただき、@moaikidsさん本当にありがとうございました。

まだまだ枠は空いているみたいなので、みなさんも是非このAdvent Calendarに参加してみてはいかがでしょうか。