読者です 読者をやめる 読者になる 読者になる

IwamotoBlog

俺に付いて来い

git ignore (arg)で言語に対応した.gitignoreファイルを生成できるようにした

タイトルまんまです。

.gitignoreを生成してくれるgiboというライブラリがあり良く使っていましたが、giboを単順に実行しても標準出力がなされるだけで.gitignoreは生成されず、正直クソダルいなあと思っていたのでそれを解決しようと思いました。

加えてgitコマンドから叩けたり、引数の補完なども出来たら最高だよねとか考えながら作ったものがこちらです。

f:id:PEPOipod007:20161107192459g:plain

$git ignore Unityと打つと、Unityに対応した.gitignoreがカレントディレクトリに自動生成されます。

ソースコード

github.com

実装

ホント大したもんじゃないです。蓋を開ければ、ただのgiboのラッパーコマンドでしかないです。

まず下を参考にしてgiboをインストールして下さい。Homebrewが入っていればbrew install giboと叩けばインストールされます。

github.com

インストール後git-ignore.shという名前でファイルを作成し、スクリプトを書きます。

#!/bin/bash

touch .gitignore
eval gibo $@ >> .gitignore

.gitignoreファイルが無ければ生成し、引数をそのままgiboに渡して.gitignoreにリダイレクションしているだけのスクリプトですね。
適当にパスが通っているところにシンボリックリンクを貼って、実行権限を与えてあげましょう。

スクリプト自体はもうこれだけで完成です。 git-ignore UnityなどでカレントディレクトリにUnityに対応した.gitignoreが生成されます。

ただ、せっかくならTabで補完が出来たり、git関連のコマンドならgitから叩きたいなあと思うじゃないですか。それらに対応しましょう。

Tabで補完出来るようにする。

GitHub - simonwhitaker/gibo: A shell script for easily accessing gitignore boilerplates

再びこちらのリポジトリにアクセスしてください。gibo-completionというファイルがあるはずなので、お使いのシェルに合わせたファイルを開き、ソースをコピーして下さい。
僕はzshを使っているのでgibo-completion.zshを使って説明を続けていきます。

再びスクリプトを書きます。名前はgit-ignore-completion.zshなどにしましょう。

#!/zsh
#
# Zsh completion for gibo
#
# INSTALLATION
#
# First install gibo from
# https://github.com/simonwhitaker/gitignore-boilerplates
#
# Make sure autocompletion is enabled in your shell, typically
# by adding this to your .zshrc:
#
#     autoload -U compinit && compinit
#
# Then copy this file somewhere (e.g. ~/.gibo-completion.zsh) and put the
# following in your .zshrc:
#
#     source ~/.gibo-completion.zsh
#
# CREDITS
#
# Written by Simon Whitaker <sw@netcetera.org>

_git-ignore()
{
    local_repo=${GIBO_BOILERPLATES:-"$HOME/.gitignore-boilerplates"}
    if [ -e "$local_repo" ]; then
        compadd -M 'm:{[:lower:]}={[:upper:]}' $( find "$local_repo" -name "*.gitignore" -exec basename \{\} .gitignore \; )
    fi
}
compdef _git-ignore git-ignore

ほぼコピーですが、関数名など少し改変してあります。
最終行のcompdefでしっかりgit-ignoreを補完対象に設定してあげるよう気を付けてあげてください。

スクリプトはこれで完成です。
後は.zshrcなどの設定ファイルに以下を追記して下さい。

source (ファイルパス)/git-ignore-completion.zsh

これで完成です。
$source .zshrcで設定ファイルをリロードしてからgit-ignoreと打ってTabキーを叩いてみましょう。無事補完が働くはずです。

git ignore で叩けるようにする。

折角のgit関連のコマンドなので、gitコマンドから叩けるようにしたいですね。
.gitconfigに追記しましょう。

[alias]
    ignore = !git-ignore

これだけでOKです。試しに$ git ignore Unityと叩くと無事動作するはずです。補完もちゃんと効きます。

おわりに

少しのシェルスクリプトでgiboがより快適なものになりましたね。
このように少しの工夫で便利になることは沢山あるので、皆さんも思いついたらドンドンシェルスクリプトを書くといいと思います。