6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GitHub】なんとなく作っていませんかgitignore!.gitignoreの話

6
Last updated at Posted at 2025-12-06

この記事のポイント

  • 変更管理から除外する.gitignoreの概要について説明しているYo
  • .gitignoreの作り方についてまとめているYo
  • .gitignoreを使ってみた時の疑問点をまとめているYo

はじめに

この記事ではGitの変更管理を設定する.gitignoreにフォーカスを当てて説明します。
※GitHubで使う際のTipsについても説明します。

誤りなどがありましたらご指摘いただけますと幸いです。

復習:.gitignoreってなんだっけ

.gitignoreの説明なんて言われなくてもわかっているYoっていう人が多いと思いますが
ここでは改めてどんなものかを振り返っていきましょう。

簡単に説明すると変更管理から除外するためのファイルのことです。実はGitHubのドキュメントに説明がされていたりします。GitHub公式ドキュメントでは以下のように説明されています。

GitHub にチェックインしたくないファイルを無視するように Git を構成することができます。

引用:ファイルを無視する - GitHub ドキュメント

なお、.gitignoreはGitというシステム(ソフトウェア)の設定項目に過ぎないのでGitのドキュメンテーションにも記載があります。Git公式ドキュメントでは以下のように説明されています。

gitignore - 意図的に追跡しないファイルを指定する

引用:Git - gitignore Documentation

いずれにしてもバージョン管理からはずす機能として定義されています。

復習:.gitignoreの書き方

ご存知の方も多いと思いますが、書き方も簡単に振り返っていきましょう。
基本的なルールとしては以下のとおりです。

  • 無視するファイル名のパターンを書くことでパターンマッチングを行い、無視する
  • パターンを否定する場合は!を書く
  • 空白行は認識されず、!などの意味を持つ文字を利用する場合はエスケープを利用する

※それ以外の細かいルールについてはGitの公式ドキュメントを読んでください。

.gitignoreの作り方

書き方がわかったところで.gitignoreの作り方を見ていきましょう。結論先に説明するとざっくりですが、3つあります。まずは1つ目の作り方としてプロジェクトに合わせて手書きする方法、GitHubの機能を使う方法、.gitignore.ioを使う方法です。

※AIエージェントを使って生成する方法もありますが、人によってやり方が分かれるところなので割愛

.gitignoreを試す環境を構築

まずは.gitignoreを試すためにGitを使って、環境を構築してみましょう。
以下のコマンドをターミナルを起動してコピペして実行します。

mkdir git_test && cd git_test
git init
echo "Hello,.gitignore" > README.md
git add .
git commit -m "add README.md"

.gitignoreを作成します。

touch .gitignore

次に.gitignoreを試すファイルを生成します。今回は10個の連番ファイルを作成します。

touch sample{1..10}.txt

変更管理のステータスを見てみましょう。

git status

実行結果としては合計で11個のファイルが出力されると思います。具体的には以下のとおりです。

On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        sample1.txt
        sample10.txt
        sample2.txt
        sample3.txt
        sample4.txt
        sample5.txt
        sample6.txt
        sample7.txt
        sample8.txt
        sample9.txt

nothing added to commit but untracked files present (use "git add" to track)

実際に変更を無視してみる

まずはsample.txtをすべて無視するパターンを試してみます。以下のテキストを.gitignoreに追記します。

sample*.txt

うまくいくと変更管理に含まれるファイルは.gitignoreだけになると思います。

では次に以下のパターンを試します。

# sample*.txt
sample1*.txt

上記のパターンではsample2からsample9までが変更管理の対象になります。
sample10.txtが変更管理から除外されます。

次のパターンを試してみましょう。

# sample*.txt
sample1*.txt
!sample10.txt

これでsample1.txtを除くファイルが変更管理の対象になりました。

.gitginoreを.gitignoreするとどうなる?

基本をおさらいしたところで.gitignoreを変更管理から除外するとどうなるのでしょうか。
また、多重で.gitignoreを実行した場合はどうなるのでしょうか。実際に試してみましょう。

.gitginoreを.gitignoreしてみる

結論から説明すると.gitignoreで.gitignoreを除外することは可能です。
以下のパターンを試してみましょう。

.gitignore
sample1*.txt

ということは「他に.gitignoreがあるとそれも無視できる!ということ?!」となったかもしれません。試してみましょう。

.gitignoreが複数存在する(多重.gitignore)

次は.gitignoreが複数ある場合を試してみましょう。同じディレクトリに同じファイル名が存在することは現代のファイルシステムでは許容されていないので別のディレクトリに.gitignoreを作成します。

mkdir ignore && cd ignore
touch .gitignore

これで親フォルダに.gitignore(以下、親.gitignore)、ignoreディレクトリに.gitignore(以下、子.gitignore)ができたと思います。

2つ以上.gitignoreがあるときどうなるのサ?

変更管理のファイルが2つある状況なのでどっちが何を管理するのかそして、優先順位はあるのかなど疑問があると浮かんできたと思います。実際に試してみましょう。

親.gitignore(.gitignore)

ignore/.gitignore

子.gitignore(ignore/.gitignore)

!.gitignore

上記の場合、打ち消しが発生します。つまり、親子ともに変更管理がなされます。
つまりは親が除外しているけど、子は変更管理してくれと言えば、変更管理がされるということです。

ということは子.gitignoreが変更管理を無視するようにすれば、親.gitignoreの設定は無視されるのか?ということでこれもやってみましょう。

親.gitignore(.gitignore)

ignore/.gitignore
sample*.txt

子.gitignore(ignore/.gitignore)

!.gitignore
!sample*.txt

結果は親子の.gitignoreが残るような形となるはずです。
これはどういうことかというと、.gitignoreは配置したフォルダを対象に変更管理を制御します。なお、子は親ディレクトリにあるファイルを制御できません。

ということは?

たとえば、プッシュしてはいけない代表格の.envをプッシュして事故を起こす例もあるのでは?
実際にやってみましょう。.envをignoreフォルダに作成します。

そして、以下のように.gitignoreを書き換えてみます。

親.gitignore

ignore/.gitignore
sample*.txt
.env

子.gitignore

!.gitignore
!sample*.txt
!.env

これで結果を見てみると、ignoreフォルダ紛れ込んだ.envが追跡されていることがわかると思います。

これは.gitignoreを使い始めた時の誤解として「常に親ルートが反映されるんでしょ」と思ってやっていたら実際には変更管理に入ってしまうということです。

余談:.envといったものをpushしないようにする対策

余談ではありますが、プッシュしてはいけない情報をプッシュしない方法としてはいくつか方法あります。具体的には以下のとおりです。

  • .config/git/ignoreを設定する
  • git Configを設定する(core.excludesfileを利用)
  • GitHubの機能を利用する(後述)

GitHubの機能を使ってスマートに解決

ここまでGitのシステムを使ったgitignoreの話をしました。「プッシュしたくないものはignoreしておけば、問題ないんでしょ?」と簡単に思ったかもしれません。

ただなかなかそうもいきません。そもそも「リポジトリを作成するたびに.gitignoreを手書きしないといけないのか?何を含めて何を除くのか決めるのって面倒じゃね」ってそんなことが頭に浮かぶと思います。

また、.envといったいわゆるプッシュできないファイルについてはどう対策したら良いかなど課題もあると思います。順番に見ていきましょう。

GitHubを使った.gitignoreの作成方法

今回は3つ紹介します。

  • リポジトリ作成時にセットする
  • テンプレートリポジトリを活用する
  • github/gitignore を参考に作成する

リポジトリ作成時にセットする

GitHubでリポジトリを作成できる状態であれば、検討できる方法です。
※あるいは新規にプロジェクトを立ち上げる場合など

新規のリポジトリ作成時にAdd .gitignoreがあります。ここでテンプレートのように指定して作成できます。

github-gitignore-1.png

作成したら個々のプロジェクト用にカスタムしていくと良いでしょう。

テンプレートリポジトリを活用する

GitHubリポジトリにはテンプレート機能があります。

たとえば、社内標準のリポジトリを作成しておいて何か新しいものを開発するときに利用してもらうなどがあります。

このテンプレートリポジトリに.gitignoreを含めることができるのでリポジトリの作成を標準化できます。

github/gitignore を参考に作成する

GitHub公式リポジトリにっは.gitignoreの書き方がいくつか掲載されています。

内容をもとに自分で作成することも可能です。

余談:.gitignore.ioの利用

もう一つ、gitignore.ioを使った.gitignoreの作り方についてみていきましょう。

上記のURLにアクセスして利用言語などで検索するとその言語に沿った.gitignoreがWeb画面上に表示されます。

もちろん、汎用的な内容なので不要なものは自分で削除する必要があります。

.gitignoreもいいけど、プッシュ保護も使おう

これまで.gitignoreを使った変更管理について説明しましたが、それでも人間なのでつい.envなどをプッシュしてしまいそうになることもあると思います。

そういう場合はプッシュ保護を利用しましょう。

まとめ

今回は.gitignoreの使い方についてざっとチェックしました。
実はいろんな作り方があるということに気づくと思います。

ちなみに筆者はテンプレートリポジトリを活用しています。新しくリポジトリを作成する場合はGitHubの機能を積極的に利用しています。

実はなんですが、.gitignore.ioの存在はGitHub公式YouTubeで知りました。

参考:初めてのGitHubリポジトリを作成する方法:初心者向けガイド | チュートリアル

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?