プロジェクトに最適な .gitignore をコマンドラインから簡単に生成するためのツール「gibo」
はじめに
プロジェクトに最適な.gitignore をどうやって作ろうかなと思っていたところ、 gibo という便利ツールを発見したのでメモ。
gibo は、プロジェクトに最適な .gitignore ファイルを作成してくれるツールです。
様々な言語、フレームワーク、ツールに対応していて、大抵のメジャーなものについては、簡単に .gitignore を生成できます。
ソースコードを読んでみましたが、簡潔で見やすく、シェルスクリプトの勉強に良いと感じました。
検証環境
$ uname -moi
x86_64 MacBookPro11,4 Darwin
$ bash -version
GNU bash, バージョン 5.0.3(1)-release (x86_64-apple-darwin18.2.0)インストール
プラットフォームことに最適なインストール方法が異なりますが、実際 1 ファイルのシェルスクリプトなのでダウンロードしてきて $PATH 環境変数の通っているディレクトリに配置すれば動作します。
macOS
Homebrew で一発でインストールできます。
$ brew install gibo \
&& gibo updateUnix 系 OS
$ curl -L https://raw.github.com/simonwhitaker/gibo/master/gibo \
-so ~/bin/gibo && chmod +x ~/bin/gibo && gibo update動作確認
インストールができたか確認してみましょう。
$ gibo --version
gibo 2.1.2 by Simon Whitaker <sw@netcetera.org>
Fetches gitignore boilerplates from https://github.com/github/gitignore
Usage:
gibo [command]
Example:
gibo dump Swift Xcode >> .gitignore
Commands:
dump BOILERPLATE... Write boilerplate(s) to STDOUT
help Display this help text
list List available boilerplates
search STR Search for boilerplates with STR in the name
update Update list of available boilerplates
version Display current script version使い方
それではツールにふれていきましょう。
.gitignore の生成
ここでは PHP のプロジェクトを例に取り上げていきます。
最近の PHP プロジェクトでは Composer を使用することが多いですね。
Composer は依存ライブラリをプロジェクト直下の vendor/ ディレクトリに配置します。
このディレクトリは多くの場合、Git の管理対象から除外しておきたいです。
そこで毎回同じような内容を .gitignore に書くことになりますが、 そこで gibo を使います。
gibo の引数に dump composer を指定し実行すれば、最適な .gitignore ファイルを作成できます。
$ gibo dump composer
### https://raw.github.com/github/gitignore/e32de69dc7a71f84b1da648a5d893dd8bcc87d8a/Composer.gitignore
composer.phar
/vendor/
# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
# composer.lockLaravel を使ったプロジェクトも多くなってきましたね。
同様に Laravel に最適化された .gitignore を生成できます。
( 最近の Laravel は npm も使うのでそのあたりの考慮も入ってますね。 .vagrant も付与されています。 )
$ gibo dump laravel
### https://raw.github.com/github/gitignore/e32de69dc7a71f84b1da648a5d893dd8bcc87d8a/Laravel.gitignore
/vendor/
node_modules/
npm-debug.log
yarn-error.log
# Laravel 4 specific
bootstrap/compiled.php
app/storage/
# Laravel 5 & Lumen specific
public/storage
public/hot
storage/*.key
.env
Homestead.yaml
Homestead.json
/.vagrant複数の .gitignore テンプレートをまとめて出力させることもできます。
$ gibo dump Python TextMate結果は標準出力に出力されるので、 .gitignore にリダイレクトして保存しておきましょう。
# 上書きする場合
$ gibo laravel > .gitignore
# 既存のファイルに追記する場合
$ gibo laravel >> .gitignore提供されている「ボイラープレート」を一覧表示する
先程見た git dump コマンドですが、引数で指定したテンプレート名を ボイラープレート とよんでいます。
( 僕の時代には「テンプレート」とか「スケルトン」とか呼んでいましたが、最近ではテンプレートのようなものを「ボイラープレート」と呼ぶようですね。 )
gibo で利用できるボイラープレートを知りたい場合は、 gibo list コマンドを使います。
$ gibo list
=== Languages ===
Actionscript CommonLisp Erlang Idris Lua Phalcon Scala TurboGears2
Ada Composer ExpressionEngine IGORPro Magento PlayFramework Scheme Typo3
Agda Concrete5 ExtJs Java Maven Plone SCons Umbraco
Android Coq Fancy JBoss Mercury Prestashop Scrivener Unity
AppceleratorTitanium CraftCMS Finale Jekyll MetaProgrammingSystem Processing Sdcc UnrealEngine
AppEngine CUDA ForceDotCom Joomla Nanoc PureScript SeamGen VisualStudio
ArchLinuxPackages D Fortran Julia Nim Python SketchUp VVVV
Autotools Dart FuelPHP KiCad Node Qooxdoo Smalltalk Waf
C++ Delphi Gcov Kohana Objective-C Qt Stella WordPress
C DM GitBook Kotlin OCaml R SugarCRM Xojo
CakePHP Drupal Go LabVIEW Opa Rails Swift Yeoman
CFWheels Eagle Godot Laravel OpenCart RhodesRhomobile Symfony Yii
ChefCookbook Elisp Gradle Leiningen OracleForms ROS SymphonyCMS ZendFramework
Clojure Elixir Grails LemonStand Packer Ruby Terraform Zephir
CMake Elm GWT Lilypond Perl Rust TeX
CodeIgniter EPiServer Haskell Lithium Perl6 Sass Textpattern
=== Global ===
Anjuta CVS Espresso Lazarus Momentics PuTTY Tags Windows
Ansible DartEditor FlexBuilder LibreOffice MonoDevelop Redcar TextMate Xcode
Archives Diff GPG Linux NetBeans Redis TortoiseGit XilinxISE
Backup Dreamweaver Images LyX Ninja SBT Vagrant
Bazaar Dropbox JDeveloper macOS NotepadPP SlickEdit Vim
BricxCC Eclipse JEnv MATLAB Octave Stata VirtualEnv
Calabash EiffelStudio JetBrains Mercurial Otto SublimeText Virtuoso
Cloud9 Emacs Kate MicrosoftOffice Patch SVN VisualStudioCode
CodeKit Ensime KDevelop4 ModelSim PSoCCreator SynopsysVCS WebMethods提供されている「ボイラープレート」を検索する
流石に git list では見にくいので部分一致、大文字小文字を無視して検索したい場合。
方法は2つあります。
grepコマンドにパイプでつなぐgibo searchコマンドを使う
上記2つで若干動作が異なります。 ( バグではないかと思っている )
[2023-02-09 追記] プルリクエストを上げたところ、受け入れてもらえました!すでに挙動の違いは修正されています 。
こちらでは 2 つの「ボイラープレート名」が見つかります。パイプでつないだ場合には grep しやすいように一行ごとにボイラープレート名が出力されています。賢い!
# (1)
$ gibo list | grep -i php
CakePHP
FuelPHPところが、こちらでは 3 つの「ボイラープレート名」が見つかります。
# (2)
$ gibo search php
CakePHP
FuelPHP
ThinkPHPThinkPHP という「ボイラープレート名」が使えるか試してみました。
$ gibo dump ThinkPHP
Unknown argument: ThinkPHPgibo dump で指定可能なボイラープレートは git list で見つかったもののみとなっているようです。
なぜ挙動が異なるか?ソースコードを見てみます。
「ボイラープレート」ごとの .gitignore ファイルはどこから取得している?
Github から取得していた
gitbo のソースコードを見てみました。
先のインストール方法で実行していた gibo update コマンドですが、こちらを実行するとホームディレクトリ配下に、 .gitignore-boilerplates というディレクトリが作成されるようになっています。
ボイラープレート別の .gitignore ファイルはここに格納されます。
これらのファイルは gibo update したタイミングで GitHub – .gitignore templates から git clone し、以降はこのファイルを参照します。
.gitignore-boilerplates ディレクトリの配置場所を変更したい場合は?
GIBO_BOILERPLATES という環境変数に任意のディレクトリパスを指定することで、デフォルトのボイラープレート格納ディレクトリを変更することができます。
export GIBO_BOILERPLATES="/usr/local/src/gitignore"Github 上のボイラープレートファイルを更新するには
gibo では、テンプレートのアップデートは自動では行われないので、必要な場合は手動で行いましょう。
$ gibo updategibo list | grep xxx と gibo search xxx はなぜ挙動が違う?
上記2つのコマンドの挙動がなぜ異なるのか?
やはりこれも gitbo のソースコードを見てみました。
git list はボイラープレートテンプレートディレクトリ直下の .gitignore という拡張子のファイルを検索し出力しています。
一方 git search はボイラープレートテンプレートディレクトリ直下だけでなく、 再帰的 に .gitignore という拡張子のファイルを検索し出力しています。
このような動きの違いで gibo search のほうが見つかる .gitignore ファイルが多いようです。
(本当は gibo dump がこれに対応していないとおかしい気がしました。時間を見つけて作成者に聞いてみます。)
ディスカッション
コメント一覧
まだ、コメントがありません