Try the app

gitignoreSoC
Enjoyed this article?
Support Yuzuko Underson
Translation pending
Gitの全無視→例外のホワイトリスト方式をオススメしたい
Try the app

gitignoreSoC
Enjoyed this article?
Support Yuzuko Underson
どんなディレクトリ構成になっているのかを丸出しにしてしまう、かつミスしたときがめんどくさいからです。
.gitignore は、Gitで追跡したくないファイルを指定するのがデフォルトです。
# 例
node_modules/
.env 上記のようなやり方が普通だと思います。ですが、この方式だと必然的にgitに追跡したくないファイルを外部に公開するという形になっています。
これは嫌でした。開発中のアイデア帳やら載せたくないドキュメントなど、あまり外部に公開したくないファイルはまあまああります。それらが
◯◯アプリアイデア.md
◯◯アプリADR.mdのような形で、「漏らしたくないのに漏れている」という矛盾があまり好きではありませんでした。
ですが、gitignoreにも便利な仕様がありまして、
*
!.gitignoreこういう書き方が出来ます。
*は「全無視(gitで追跡しない)」!は「例外」という感じになっています。これにより、逆にgitで追跡したいものだけ追跡するという、デフォルトの無視したいやつだけ記入するブラックリスト方式の逆であるホワイトリスト方式による管理が可能になります。
もちろんいいことばかりではありません。
追跡したいものだけ毎度書き加える、それはつまり、増えれば増えるほど.gitignoreが肥大化します。
ワイルドカードでごまかせる部分もありますが、それだけでは解決しません。
# 例: .jsとつくファイルを全部追跡する
!src/
!src/*.jsこのような書き方は出来ますが、そもそもブラックリスト方式であれば
node_modules/とだけ書けばいいものが、逆にnode_modules/以外のファイルを例外化しないといけないという、gitignore肥大化問題は避けられません。
AIのおかげでいちいち手書きする必要は減ったかもしれませんが、長いのは長いので目視の確認も大変です。
私はこのgitignoreSoCを作成しました。
SoCとは日本語で関心の分離のことです(詳しくは各自調べてみてください)。要は関心事(目的やら役割やら)に合わせて分割するやり方で、例えばPythonでのプロジェクトであればapp.pyに全部詰め込むのではなくて、UI(ui.py)、アルゴリズム(engine.py)、その他諸々、の様な形でファイルを分割する、といった例がわかりやすいかと思います。
その概念をgitignoreに持ち込んでみました。
そもそも、Gitは基本的に.gitignoreというファイル名のものしか認識しません。hogehoge.gitignoreの様に、.の前に何かがついてるとgitignoreとして認識してくれないので、.gitignoreというファイルに全部書かなくてはなりません。
また、フォルダの中にも.gitignoreは置くことが出来ますが、基本的に下のやつが優先されます。階層ごとに.gitignoreを配置すると、どれが追跡されていてどれが追跡されていないのかを把握しなければなりません。これは混乱の元になってしまいます。
さらに、Gitは誤って追跡してしまったものの追跡解除が中々めんどくさいという仕様があります。説明を放棄したくなるくらいにはめんどくさい仕様があるんです。(((察してください調べてくださいorz)))
前半2つは、それこそ関心の分離の出番だと考えました。.gitignoreというファイル以外は無視されるなら、いっそ、src.gitignoreやdocs.gitignoreの様なファイルを用意して、後で中見をがっちゃんこしてしまえば良いのではないかと。
そしてついでに、追跡が許可されてないのに追跡されてしまっているものを勝手に追跡解除してしまえばあのめんどくささが解消されるのではないかと。
そんな、gitignoreホワイトリスト方式運用かつ追跡解除ダルいピーポーのため(私)に作ったのがgitignoreSoCです。
使い方も簡単です。
git init ; mushi initgit init && mushi initこれだけで呼び出したディレクトリに.gitignores/と言うフォルダと、すでに記入されている.gitignoreファイルが作成されます。
*
!.gitignoreあとは、.gitignores/直下に好きに{フォルダ名や使い道}.gitignoreを作成して、追跡したいものを書いてください。
# 例
!src/
!src/a.js
!src/b.js
!package.json
!package-lock.json
!LICENSE
!README.md最後に、
mushiとターミナルに打ち込み実行すれば、.gitignores/以下のファイルの中見を結合した.gitignoreも作成してくれます。
また、.gitignores/で例外とされていないのに追跡されてしまっているものの追跡解除も行います。
Gitのコマンドを使いこなせるなら必要ありませんし、Gitが最初から*.gitignoreに対応してるならこんなもの必要ありません。
ですが、一昨日の晩ご飯もあやふやな人類にはちょっとかなり難しいことですし、Git本体をこねくり回すのも現実的ではありません。
ただ、.gitignoreのホワイトリスト方式自体はオススメしたいです。AIエージェントに余計なファイルをpushされてブチギレながら対処することを無くすため(n敗)にも、是非活用してみてください。
詳しい仕様やその他諸々、アプリ説明のためにだいぶ省いています。正しい内容は各自でお調べいただくことをおすすめします。