📙

【Git】時代に逆行しているのは百も承知だが、我流プロジェクト.gitignoreの管理方法を晒す

に公開

はじめに

対象

  • gitignore.io以外の.gitignoreの管理方法に興味がある方。

前提知識

よくあるやり方はgitignore.ioなどの自動生成サービスなどに必要事項を入力し、マージ済みの.gitignoreを得る方法です。

https://www.toptal.com/developers/gitignore

我流

改めて大前提ですが『我流』です。一般的な方法に則った方が楽だと思います。

また「これがベストプラクティスだ」などと言うつもりもないですし、プロジェクトで採用する場合には自己責任で行ってください。また既存の管理方法が確立されているなら、郷に入っては郷に従えでいきましょう。

.gitignoreファイルを作成する

文字コードUTF-8、改行コードLFである点に注意しつつファイルを作成します。

対象のリポジトリで利用する技術を洗い出す

.gitignoreを使いそうな技術を洗い出します。

例えば、

  • OS
    • Windows
  • IDE
    • Jetbrains
  • フレームワーク・ライブラリ
    • Ruby
    • Ruby on Rails

という具合です。OS, IDEは運用ルールによっては不要なので端折ります。

https://zenn.dev/noranuko13/articles/c085fac2ccf3385658c8

IDEの場合は.idea/, .vscode/をまとめて対象外にするかもここで考えます。

github/gitignoreでテンプレートを探す

https://github.com/github/gitignore

今回の例だと以下の通り。

  • Windows.gitignore
  • JetBrains.gitignore
  • Ruby.gitignore
  • Rails.gitignore

プロジェクト生成時に作られるものもありますが、そのまま使わずに精査したい派です。ただそれはそれで一旦控えておく作業が増えるなど、色々面倒なので順番は多少前後することがあります。

https://zenn.dev/noranuko13/articles/41df24877d3f3d

.gitignoreに転記する

### Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
# ...略...
# Windows shortcuts
*.lnk


### JetBrains.gitignore

大きい範囲をカバーしていそうなものから順に書いていきます。.idea/を全て除外する場合はカスタマイズ部分になるので、最も下に持ってくる運用にしています。

見出しですが#2個##まではテンプレートに結構あるので、#3個###以上や独自の見出しにすると見やすいと思います。私は試行錯誤の末、これに加えて空行2行を挟むスタイルに落ち着きました。

IDEで警告が出る場合はコメントアウトしています。丸ごと削除してしまうと次回以降の差分確認が大変になるのでやめた方がいいです。

:notes: [JetBrains] '.cache' pattern is defined more than once

プロジェクトの.gitignore見出しを追加する

カスタマイズ部分はハッキリ区別しておきたいので別定義にしておきます。混ぜるな危険です。

### Project.gitignore

プロジェクト生成時に作られるものは一旦、この見出しの下にそのままコピペ。別コミットで一つずつ精査してから削除を行います。カテゴリが異なるものは#2個##の見出しで区切ると見やすくなります。

定期的に更新する

https://docs.github.com/ja/enterprise-cloud@latest/repositories/working-with-files/using-files/viewing-and-understanding-files

生ファイルの内容をコピーし、.gitignoreの対象箇所に貼り付けます。

最初はコミットハッシュや日時を控えて、見出しやコミットメッセージに追記していたのですが、面倒なだけなのでやらなくていいと思います。

更新差分を確認する

この管理方法にしている最大の理由は、定期的に更新するときに対象の.gitignoreの履歴を見て、台頭してきた技術や修正が入ったポイントが一緒に把握できるからです。

https://github.com/github/gitignore/commits/main/Node.gitignore

例えば最近ではVitePressやVuePressがNode.gitignoreに追加されています。プルリクエスト経由でマージされたものについては、その理由も結構大事なんじゃないかと思ってます。

つまりただのプロジェクト設定の更新に留まらず、技術トレンドの観測点として使える訳です。

おわりに

最後に何個かサンプルを置いていきます。

https://github.com/noranuko13/librarian/blob/f575a4738c71fbab781b23f2667d92e0d7f1b8ae/.gitignore

https://github.com/noranuko13/mpmm/blob/804296d106119c33b246c16096432354b9aaa00a/.gitignore

Discussion