LoginSignup
13
13

More than 5 years have passed since last update.

.gitignoreをコマンド一つで自動生成する

Last updated at Posted at 2019-01-19

はじめに

手作業で無視するべきファイルを調査して書いたり、前のプロジェクトからコピーしたりするのが面倒くさい .gitignore ファイル。

この記事ではそんな .gitignore ファイルをWebサイト gitignore.io から生成する方法と、さらにはコマンドを1度実行するだけで生成する方法を紹介します。

Environment Version
Windows10 Pro x64 1803
git 2.19.1.windows.1

gitignore.io

キーワードを入力して Create ボタンを押せば、.gitignore の雛形を表示してくれるWebサイト。
この表示されたテキストを各プロジェクト(リポジトリ)の .gitignore にコピー&ペーストすればできあがり。

gitignore.io

使い方は上記の通りなんですが、APIも公開してくれているため下記のようにコマンドラインからも利用できます。

"ブラウザでWebページを開いて~"という動作が不要になるのでさらに快適。

.gitignore 生成コマンドを作成する

gitignore.io のAPIにアクセスするためのコマンドを作成します。

といっても READMEに書かれてある通り に実行すればOKです。

各環境下でのコマンド作成方法が記述されていますが、git のエイリアス機能を使う方法がおすすめです。

git-bash
$ git config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi'

https://github.com/joeblau/gitignore.io#git

上記のコマンド実行後、 git ignore コマンドとして gitignore.io から取得した .gitignore の内容を標準出力することができます。

git ignore コマンドにおける引数(各種プログラム言語やIDEのキーワード)の区切りはスペースではなく カンマ( , になります。
むしろスペースが混ざると上手く動作しませんのでご注意ください。

実行例:git-bash
# 標準出力に表示
$ git ignore unity,visualstudiocode

# .gitignoreに出力(追記)
$ git ignore unity,visualstudiocode >> .gitignore

毎回同じキーワードを入力するのがしんどい

例えば visualstudiocodewindows といった自分の環境で、いつも決まりきったキーワードを入力している場合。

このような個々人の開発環境に依存する無視ファイルの設定は、グローバルな .gitignore$XDG_CONFIG_HOME/git/ignore)に記述してしまうのがおすすめです。

  1. $XDG_CONFIG_HOME/git/ignore ファイルのパス指定

    git-bash
    git config --global core.excludesfile $HOME/.config/git/ignore
    
  2. $XDG_CONFIG_HOME/git/ignore ファイルの作成

    git-bash
    $ mkdir -p $HOME/.config/git
    
    # VS Code と Windows用の設定
    $ git ignore visualstudiocode,windows > $HOME/.config/git/ignore
    

一度 $XDG_CONFIG_HOME/git/ignore を設定すればローカル上のすべてのリポジトリに適用される。

.gitignore 設定の優先度はリポジトリのものが優先されるため、特定のリポジトリ下では追跡するようにもできる。

リポジトリ下の.gitignoreファイル
# 行頭に ! をつけると無視されなくなる
!*.lnk

以上でずっと簡単に .gitignore ファイルを生成できるようになったと思います。

が、より使いやすくするべく git ignore コマンドのアレンジに挑戦しました。

黒魔術完全に理解した

シェルスクリプト完全ニ理解シタ。

現在は git ignore コマンドを次のように上書きし、エラー発生時にはエラーメッセージのみ表示するようにしてます。

git-bash
git config --global alias.ignore '!gicheck() { if grep -sq "ERROR: " <<< "$*" ; then grep "ERROR: " <<< "$*" ; else echo -e "$*" ; fi;}; gi() { curl -LsS https://www.gitignore.io/api/$@ | sed -r -e "s@.*(ERROR: )(\w+)@\1\x1b[31;40;1m\2\x1b[m@gi"| gicheck "$(cat -)" ;}; gi'
実行例:git-bash
# .gitignoreテンプレートを表示
$ git ignore unity

# エラー発生時
$ git ignore javascript

ERROR: javascript is undefined. Use list command to see defined gitignore types !!#

以下これにたどり着くまでの流れ。

  1. エラーメッセージを強調したい

    エラーメッセージ #!! ERROR: <keyword> is undefined. ~ に対して、エラー原因であるキーワードを赤文字で強調させる。

    git-bash
    git config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ | sed -r -e "s@.*(ERROR: )(\w+)@\1\x1b[31;40;1m\2\x1b[m@gi" ;}; gi'
    
    • sed コマンドを使ってエラー原因のキーワードを抽出、色変更
    • \x1b[31;40;1m 以降は赤色になり \x1b[m 以降はデフォルト色に戻る
      • ANSIエスケープシーケンスを \e で指定すると sed コマンドでは期待通りの動作をしてくれなかった
  2. エラー発生をもっとわかりやすくしたい(現行)

    エラーが発生した場合、そのときの出力を .gitignore に使うことはないと考えられる。
    よってエラー時の出力はエラーメッセージのみにし、ひと目でエラーだと判断できるようにする。

    グローバル変数を作りたくないので関数を増やし、引数を表す変数($@$*)を使うことで対処してます。

    git-bash
    git config --global alias.ignore '!gicheck() { if grep -sq "ERROR: " <<< "$*" ; then grep "ERROR: " <<< "$*" ; else echo -e "$*" ; fi;}; gi() { curl -LsS https://www.gitignore.io/api/$@ | sed -r -e "s@.*(ERROR: )(\w+)@\1\x1b[31;40;1m\2\x1b[m@gi"| gicheck "$(cat -)" ;}; gi'
    
    実行例:git-bash
    $ git ignore javascript
    
    ERROR: javascript is undefined. Use list command to see defined gitignore types !!#
    
    • gicheck() 関数を追加、エラーメッセージ有る無しで処理分岐
    • 変数・標準入力が改行コードを含むため、変数展開("" で囲む)しないと期待する動作をしてくれない

おわりに

黒魔術コワイ。気づいたら夜が明けてました……。
git も使いこなそうとすると知らない機能がいっぱい出てきてコワイですね。

うっかり消費した時間が無駄でないよう、この記事が誰かの役に立つことを祈ってます!

参考

黒魔術

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13