プロジェクトに最適な .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 update
Unix 系 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.lock
Laravel を使ったプロジェクトも多くなってきましたね。
同様に 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
ThinkPHP
ThinkPHP
という「ボイラープレート名」が使えるか試してみました。
$ gibo dump ThinkPHP
Unknown argument: ThinkPHP
gibo 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 update
gibo list | grep xxx
と gibo search xxx
はなぜ挙動が違う?
上記2つのコマンドの挙動がなぜ異なるのか?
やはりこれも gitbo のソースコードを見てみました。
git list
はボイラープレートテンプレートディレクトリ直下の .gitignore
という拡張子のファイルを検索し出力しています。
一方 git search
はボイラープレートテンプレートディレクトリ直下だけでなく、 再帰的 に .gitignore
という拡張子のファイルを検索し出力しています。
このような動きの違いで gibo search
のほうが見つかる .gitignore
ファイルが多いようです。
(本当は gibo dump
がこれに対応していないとおかしい気がしました。時間を見つけて作成者に聞いてみます。)
ディスカッション
コメント一覧
まだ、コメントがありません