LINEで現役エンジニアに直接質問してみよう!登録無料

.gitignoreとは?履歴管理したくないソースコードの設定方法

gitignoreとは?

gitで開発を行っていると、履歴管理したくないファイルが出てきます。例えば、ソースコードをビルドして作成した実行ファイルやプロジェクト独自の設定ファイルなどです。

その他にも、、

  • .DS_Store
  • node_modules
  • vendor/bundle
  • 環境変数ファイル
  • プロジェクト開発環境で自動作成されたデータ
  • エディタ独自の設定
  • キャッシュファイル

などがあります。

このような情報を一緒にgitで管理してしまうと、他の人が別の環境で開発する時、開発しにくくなったりします。gitの内にAPIキーの機密情報が含まれていた場合、情報漏洩や不正アクセスの危険性もあります。

そこで、gitで履歴管理するファイルを制限しておくと、そのような危険性を低くすることが出来、便利ですよね?その設定を行うのが.gitignoreです。

gitignoreの基本的な書き方

.gitignoreの基本的な書き方を解説します。

.gitignoreには、ファイル名、ディレクトリ名、ワイルドカードを組み合わせて、除外パターンを記述します。#を使ってコメントを書くこともできるので、わかりやすく整理することも出来ます。

ファイル名で対象ファイル履歴管理から外す

下記のようにファイル名を記述すると、履歴管理の対象外になります。

example.html

コメントを書く

#を書くとその後の文字列はコメントになります。除外パターンを整理してコメントを付ける事ができます。

# コメント

ディレクトリ名でまるごと履歴管理から外す

除外パターンの最後に/を付けると、ディレクトリごと管理対象から除外することが出来ます。

directory/

directory/は除外するけれど、その中でもdirectory/README.mdは管理対象にしたい」という場合、!を使います。

directory/
!directory/README.md

Gitでディレクトリの追跡は出来ません。

Gitが管理できるのはファイルだけであり、ファイルがディレクトリで管理されていた場合に限り、clonepushした時にディレクトリを間接的に管理できます。

そもそも、ディレクトリ自体にはデータが存在しないので、追跡管理とかの概念がそもそもありません。

中身が空のディレクトリはgitで管理できないので、運用上の都合で.keep .gitkeepなどのからファイルを作って、間接的にディレクトリを追跡対象にする場合があります。

特定の拡張子ファイルを履歴管理から外す

特定の拡張子ファイルのみを履歴管理から外すには、*(ワイルドカード)を使います。

*.php
*.js

さらに、!を使うと、特定ファイルだけを管理対象にすることができます。

*.php
*.js
!index.js

これで、index.jsのみは管理対象にすることができます。

先頭に/を付けてルートディレクトリを表す

先頭に/をつけると、.gitignoreのある場所からのディレクトリパスに一致するかで除外パターンを書けます。

/index.js
/directory/

これで、ルートディレクトリのindex.jsdirectory/にはマッチしますが、サブディレクトリ内にあるファイルやディレクトリにはマッチしません。

gitignoreでワイルドカードを使った書き方詳細

.outという拡張子ファイルをまとめて履歴管理から外したい場合、*.outノように書くと書くと管理するファイルを制限できます。

この時に*のことを「ワイルドカード」といいます。

ワイルドカードには*だけではなく、? [ 0-9 ] **など4つの種類があるので、みていきましょう!

*

/以外の0文字以上の文字列にマッチします。

?

/以外の1文字にマッチします。

[ 0-9 ]

数字の「0〜9」のいずれかの数字一文字にマッチします。

**

0個以上のファイル名またはディレクトリ名にマッチします。

gitignoreのオススメの書き方

僕がいつも使っているgitignoreのオススメの書き方を3つご紹介します。

  1. 特定の拡張子を無視するには、先頭に/を付けず、*(ワイルドカードを使う)
  2. 特定のファイルやディレクトリを無視する時には先頭に/をつける
  3. ディレクトリ単位で無視するときは最後に/をつける

gitignoreはプロジェクトを進めて成長するのに合わせて、書き足していったりなどのメンテナンスが欠かせません。
そのため、管理しやすくわかりやすい整理をしておくことが求められます。

管理しやすくするには、対象となるファイルがディレクトリが限定的であるほど良いです。

例えば、tmpというパターンについて考えてみましょう。これだけ見ると、ファイル・ディレクトリ両方の可能性があります。サブディレクトリ内でtmpという名前も対象になっているので、適用範囲が広すぎて今後メンテンナスを入れようとした時に、やりにくくなる可能性大です。

ですので、/tmptmp/などにすることで、ルートディレクトリにあるファイルやディレクトリを制限しているのか、ディレクトリ単位で制限しているのか、などわかりやすくなりますよね!

このように、/を活用してgitignoreをわかりやすく書きましょう!

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。