.gitignoreをマスターしよう:Gitでファイルを除外するための初心者向け完全ガイド
.gitignoreファイルは、ローカルプロジェクトにおいてGitが無視すべきファイルのリストを記録するためのファイルです。通常はプロジェクトのルートディレクトリに配置され、単一のファイル、複数のファイル、フォルダ単位での除外が可能です。
バージョン管理のリポジトリに含めたくないファイルがあることはよくあります。例えば、設定ファイルやローカル変数など、他の共同作業者に見られたくないプライベートな情報を含むファイルです。
そこで活躍するのが.gitignoreファイルです。このファイルを使えば、Gitに特定のファイルを無視するよう指示できます。
このガイドでは、.gitignoreとは何か、その仕組み、そして自分で.gitignoreファイルを作成する方法について詳しく解説します。それでは始めましょう!
.gitignoreファイルとは?
.gitignoreファイルは、Gitが無視するファイルを一覧化したものです。通常はプロジェクトのルートディレクトリに配置します。なお、すでにGitで追跡(tracked)されているファイルは、プロジェクトから削除しない限り無視されない点に注意してください。
また、git add *のようにワイルドカード演算子を使ってファイルを追加すると、設定ファイルやコンパイル済みのコードを含むすべてのファイルがコミットの対象になります。この演算子はすべてのファイルをステージングするためです。
開発者は、出力フォルダ、隠しシステムファイル、コンパイル済みコードなどを無視したいことがよくあります。例えば、リポジトリに.envファイルがある場合、それを隠したいと思うでしょう。.envファイルには通常APIキーが含まれており、それをリポジトリにコミットしたくないからです。
ファイルを無視するための専用コマンドは存在しません。無視したいファイルをすべて.gitignoreファイルにリストアップする必要があります。
.gitignoreファイルの書き方
.gitignoreファイルの作成は簡単です。コマンドシェルを開き、プロジェクトのルートディレクトリに「.gitignore」という名前のテキストファイルを作成します。touchコマンドを使えば次のように作成できます。
touch .gitignore
これで.gitignoreファイルが作成されました。特別な設定は不要です。次のステップは、無視したいファイルのリストを追加することです。これらのファイルは「untracked files(未追跡ファイル)」と呼ばれ、ローカルリポジトリにおいてGitに無視されるファイルを指します。
例として、次のような.gitignoreファイルを考えてみましょう。
node_modules/
.env
このファイルは2つのリソース、すなわちnode_modulesディレクトリ内のすべてのファイルと.envファイルを無視します。フォルダとファイルという、異なる種類のリソースをそれぞれ除外している点がポイントです。
これはJavaScriptプロジェクトでよく使われる設定です。node_modulesにはプロジェクトで使用するすべての依存パッケージのローカルコピーが含まれています。自分でインストールできるものをわざわざリポジトリにコミットするのは非効率的です。また、.envファイルにはAPIキーが含まれており、多くの人がアクセスできるリポジトリでAPIキーを共有するのは避けるべきです。
複数のファイルやディレクトリをまとめて無視したい場合は、*ワイルドカードを使用します。
リポジトリ内のすべての.pycファイルを無視する例を見てみましょう。
*.pyc
この設定により、*.pycというパターンに一致するすべてのファイルが無視されます。アスタリスク(*)がワイルドカード演算子です。
なお、GitHubはさまざまな言語やフレームワークに対応したgitignoreファイルのテンプレート集を公開しています。プロジェクトの種類に合わせて活用すると便利なので、ぜひGitHubのgitignoreファイル集をチェックしてみてください。
複数の.gitignoreファイルを使う
同じリポジトリ内で複数の.gitignoreファイルを使用することも可能です。これは、.gitignoreが配置されたディレクトリを基準として相対的に機能するためです。
前の例では、.gitignoreをプロジェクトのルートディレクトリに配置しました。例えば、diff/フォルダ内の.pycで終わるすべてのファイルだけを無視したい場合は、コマンドラインでdiffフォルダ内に.gitignoreファイルを作成します。
touch diff/.gitignore
そして、その.gitignoreファイルに次のルールを追加します。
*.pyc
こうすることで、リポジトリにコードをコミットする際、Gitはdiff/フォルダ内の.pycで終わるファイルをすべて無視します。
この設定は、プロジェクト内の特定のフォルダにのみルールを適用したい場合に最適です。ただし、1つのプロジェクトに複数の.gitignoreファイルが散在すると、管理が煩雑になり混乱を招く可能性もあります。代わりの方法として、無視するファイルをより具体的に指定する方法があります。パスを明確に指定すれば、すべてのルールを1つの.gitignoreファイルにまとめられます。次の例を見てみましょう。
*.txt
diff/*.pyc
この.gitignoreはGitプロジェクトのルートディレクトリに配置されています。プロジェクト全体の.txtで終わるすべてのファイルを無視するとともに、diff/フォルダ内の.pycで終わるすべてのファイルも無視するようGitに指示しています。
グローバルなGit無視ルールの作成方法
プロジェクトを作成するたびに.gitignoreファイルを一から定義するのは時間がかかります。しかも、ほとんどのプロジェクトで同じような.gitignoreルールを使うことが多いものです。
そこで便利なのが、グローバルなgit ignoreルールの設定です。これを設定すると、システム上のすべてのリポジトリに自動的にgitignoreルールが適用されます。このファイルは通常、OSのホームディレクトリ(/home/your_username や /Users/your_username など)に配置します。
グローバルな.gitignoreファイルを作成してみましょう。
touch ~/.gitignore
このコマンドはホームディレクトリに空の.gitignoreファイルを作成します。このファイルを開き、システム上のすべてのGitリポジトリに適用したいルールを追加してください。
gitignoreファイルを設定したら、core.excludesFileプロパティを使ってそのルールを有効化します。
git config --global core.excludesFile ~/.gitignore
このコマンドにより、~/.gitignoreファイルのルールがコンピュータ上のすべてのGitリポジトリに適用されます。
グローバルなgit ignoreルールを定義する際は注意が必要です。グローバルな.gitignoreのルールは、すべてのプロジェクトにデフォルトで適用されるためです。
グローバルな.gitignoreファイルは、.envのように、ほとんどの場合リポジトリにコミットしたくない共通ファイルを指定するために使うのがベストプラクティスです。
コミット済みファイルを無視する方法
プロジェクトでどのファイルを無視すべきかを最初から予測できるとは限りません。以前リポジトリにコミットしたファイルを、後から無視したくなることもあるでしょう。
ここでは、すでにリポジトリにコミット済みのconfig.jsonファイルを無視する例を見てみましょう。まず、.gitignoreファイルに無視ルールを追加します。
echo config.json >> .gitignore
このコマンドはconfig.jsonを.gitignoreファイルの末尾に追記します。次に、リポジトリからファイルを削除する必要があります。その場合はgit rm --cachedコマンドを使います。このコマンドはリポジトリからのみファイルを削除し、ローカルマシン上のファイルはそのまま残るのが特徴です。
git rm --cached config.json
次回コミットを作成すると、config.jsonファイルは無視されるようになります。
無視されたファイルをあえてコミットする方法
.gitignoreファイルで無視設定されているファイルでも、意図的にコミットすることは可能です。
これは、本来なら無視されるはずのデフォルト設定ファイルをリポジトリにコミットしたい場合などに便利です。ファイルをステージングエリアに追加する際に-fフラグを使えば、無視ルールを上書きしてコミットできます。
git add -f config.json
git commit -m "feat: デフォルト設定ファイルを作成"
このコードはconfig.jsonをステージングエリアに追加し、その内容に基づいてコミットを作成します。git addの詳細についてはgit addチュートリアルを、git commitコマンドについてはgit commitチュートリアルを参考にしてください。
まとめ
.gitignoreファイルを使うと、Gitリポジトリ内の特定のファイルを無視できます。
ローカルプロジェクトのすべてのファイルをコミットに含めたくない場面は多々あります。例えば、コンパイル済みコード、システムログ、設定ファイルなどがその代表例です。ファイルを無視するには、.gitignoreに無視したいファイルやパターンを指定します。
また、1つのプロジェクトに複数の.gitignoreファイルを配置することもできますし、git addコマンドに-fフラグを付けることで.gitignoreのルールを上書きすることも可能です。
これであなたも.gitignoreファイルをプロのように使いこなせるはずです!
-
単一始点最短経路を求めるベルマン・フォード法とは?負の重みにも対応するアルゴリズムを解説
単一始点最短経路問題とベルマン・フォード法 単一始点最短経路問題(single source shortest path problem)を解くための代表的なアルゴリズムがベルマン・フォード法(Bellman-Ford algorithm)です。このアルゴリズムは、重みが正でも負でも構わない任意のグラフにおいて、始点となる頂点(source vertex)から他のすべての頂点への最小距離を求めることができます。 同じく有名な最短経路アルゴリズムであるダイクストラ法との最大の違いは、負の重みを持つ辺の扱いです。ダイクストラ法では負の重みを含むグラフを正しく処理できませんが、ベルマン・フォード法
-
z-indexが機能しない4つの理由とその解決方法
z-indexとは何でしょうか? z-indexは、HTML要素をレイヤー状に重ねて配置するためのCSSプロパティです。一見とてもシンプルに見えますが、実は落とし穴だらけのプロパティです。 直感に反する奇妙なルールがいくつも存在するため、たとえz-indexに999999という巨大な値を設定しても、思った通りに動いてくれないことがあります。 この記事では、z-indexが期待通りに機能しない最も一般的な4つの理由を詳しく解説します。CSSを使って要素を前面に表示したり、背面へ隠したりする方法を一緒に学んでいきましょう。 1. 同じスタッキングコンテキスト内では、マークアップの出現順に表示