**Git のマジックファイル**

2026/02/22 23:21

**Git のマジックファイル**

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Git の挙動は、すべてのクローンにわたってリポジトリ固有の「マジック」ドットファイルによって制御されます。

  1. .gitignore
    – トラッキングから除外するパターンを指定します。ディレクトリごとに評価され、追加のローカル除外は
    .git/info/exclude
    に、グローバル除外は
    ~/.config/git/ignore
    にあります。
  2. .gitattributes
    – フィルタ、行末正規化、バイナリ処理、カスタム diff/merge ドライバを制御し、GitHub Linguist の分類(例:ベンダーファイルのマーク)を上書きできます。
  3. .lfsconfig
    – LFS エンドポイントと転送設定を保存します。
    .gitattributes
    のパターン(例:
    *.psd filter=lfs
    )と組み合わせて大きなファイルを管理します。
  4. .gitmodules
    – サブモジュールのパス、URL、およびブランチを記録します。サブモジュールは別個の Git リポジトリを埋め込みますが、バージョン範囲は追跡せず、明示的に更新する必要があります。
  5. .mailmap
    git log
    shortlog
    blame
    用に著者名/メールアドレスを正規化します。GitHub の貢献グラフでは使用されません。
  6. .git-blame-ignore-revs
    git blame
    がスキップすべきコミット SHA を列挙し、大量フォーマッティングやリント後の精度を向上させます。
  7. .gitmessage
    git config commit.template
    を介してコミットメッセージテンプレートを提供します。クローンごとに設定が必要で、代替として
    prepare-commit-msg
    フックがあります。
  8. Forge‑specific folders
    .github/
    ,
    .gitlab/
    ,
    .gitea/
    ,
    .forgejo/
    )には CI/CD パイプライン、Issue テンプレート、CODEOWNERS、およびコア設定の上に位置するプラットフォーム固有のオーバーライドが含まれます。
  9. Other convention files 例:
    .gitkeep
    (空ディレクトリを保持)、
    .gitconfig
    スニペット、
    .gitsigners
    .gitreview
    は共有設定、署名キー、および Gerrit 統合をサポートします。
  10. Non‑Git tooling は類似のドットファイル(
    .editorconfig
    ,
    .ruby-version
    ,
    .node-version
    ,
    .python-version
    ,
    .tool-versions
    ,
    .dockerignore
    )に依存し、エディタ設定、言語バージョン、および Docker ビルドコンテキストを標準化します。

ツールビルダーはこれらのファイル(特に除外パターン、属性、mailmap、サブモジュールデータ)を解析し、Git の意味論をアプリケーションで正確に再現する必要があります。適切な処理により、一貫したビルド、信頼できる blame 情報、およびチームやプラットフォーム間のスムーズな協力が保証されます。

本文

以下は、Git の機能拡張に関する投稿の日本語訳です。
意味を正確に伝えつつ、自然な日本語で丁寧に表現しました。


.gitignore

Git が追跡しないファイルパターンを定義します。
行ごとに1つのパターンを書き、ワイルドカードやディレクトリマーカーもサポートしています。

node_modules/
*.log
.env
dist/

Git は次の順序で複数の ignore ファイルを確認します:

  • 各ディレクトリ内の
    .gitignore
  • ローカル限定の無視設定は
    .git/info/exclude
  • グローバル ignore ファイル(
    ~/.config/git/ignore
    core.excludesFile
    が指す場所)

OS 固有ファイル(

.DS_Store
Thumbs.db
等)はグローバル無視に入れておくと、プロジェクトごとの
.gitignore
を汚染せずに済みます。

パターンマッチはワイルドカード (

*.log
)・ディレクトリマーカー (
dist/
)・否定 (
!important.log
)・文字範囲をサポートし、
**
は入れ子のディレクトリを対象にします。

GitHub・GitLab・Gitea では

.gitignore
を閲覧時にも尊重されますが、既に追跡済みだったファイルは除外されません(
git rm --cached
で追跡解除が必要)。
ウェブエディタでも無視パターンと一致するファイルをコミットできます。
パッケージマネージャは独自の ignore パターン(
node_modules/
vendor/
target/
等)を持っているため、必ず
.gitignore
に追加してください。

完全な構文は gitignore ドキュメントで確認できます。GitHub は各言語・フレームワーク用のテンプレート集も提供しています。


.gitattributes

ファイルごとの取り扱いを指定します。フィルタ、diff ドライバ、マージドライバ、行末正規化、言語検出オーバーライドなどが設定できます。

# Clean/smudge フィルタ
*.psd filter=lfs diff=lfs merge=lfs

# 行末正規化
*.sh  text eol=lf
*.bat text eol=crlf

# バイナリ扱い
*.png binary

# カスタム diff ドライバ
*.json diff=json

# マージ戦略
package-lock.json merge=ours

# GitHub Linguist 用言語検出オーバーライド
vendor/* linguist-vendored
*.gen.go linguist-generated
docs/*  linguist-documentation

text
属性は行末を正規化し、
binary
は diff/merge を行わず1つのバージョンだけを採用します。
merge=ours
はマージ時に常に自分側の変更を保持します。

GitHub Linguist は

.gitattributes
を読み取り言語統計を上書きできます。
ベンダーコードは
linguist-vendored
、生成ファイルは
linguist-generated
、ドキュメントは
linguist-documentation
でマークします。

.gitignore
同様に Git は各ディレクトリの
.gitattributes
.git/info/attributes
(ローカル限定)を確認します。
すべての属性については gitattributes ドキュメント、GitHub Linguist のドキュメントで詳細が記載されています。


.lfsconfig

Git LFS の設定ファイルです。リポジトリと共にコミットされ、LFS エンドポイント URL や転送設定などを定義します。

[lfs]
    url = https://lfs.example.com/repo
[lfs "transfer"]
    maxretries = 3

Git LFS は LFS コマンド実行時に自動で

.lfsconfig
を読み込みます。
これをコミットすれば、リポジトリを利用する全員が同じ設定を使用できます。
設定ファイルなしでは各開発者が手動でローカル LFS 設定を行う必要があります。

LFS は

.gitattributes
で対象ファイル(例:
*.psd filter=lfs diff=lfs merge=lfs
)を指定します。
.lfsconfig
は LFS 固有の設定(サーバー位置など)を扱います。
既にコミット済みのファイルに LFS パターンを追加した場合は
git lfs migrate
を実行して履歴を書き換え、LFS に移動させる必要があります。

利用可能なオプションは Git LFS 設定ドキュメントで確認できます。


.gitmodules

サブモジュールの設定ファイルです。

git submodule add
で作成され、
git submodule update
で読み込まれます。

[submodule "vendor/lib"]
    path = vendor/lib
    url  = https://github.com/example/lib.git
    branch = main

各サブモジュールはパス・URL、追跡ブランチを持つエントリが追加されます。
ファイルはリポジトリのルートに配置します。

サブモジュールは他の Git リポジトリを依存として埋め込むために使われます。

git clone
だけではサブモジュール内容は取得できないので、
git submodule update --init --recursive
または
--recurse-submodules
を付与してクローンします。

バージョニングが不十分(コミット単位で追跡される)やネストされた

.git
ディレクトリを作成し、更新忘れが混乱を招く欠点があります。
しかし、自前のコードベンダリングやモノレポ構造で「一部だけチェックアウトしたい」場合には有効です。

Git サブモジュールドキュメントにワークフロー全体、

.gitmodules
のファイル形式が記載されています。


.mailmap

著者名とメールアドレスを正規化された識別子へマッピングします。

git log
git shortlog
git blame
で出力される際に使用されます。

Proper Name <[email protected]>   Commit Name <[email protected]>

Git はコミットの著者情報と一致するエントリを検索し、出力を書き換えます。

git shortlog -sn
,
git log
,
git blame
すべてが mailmap を参照します。
ただし GitHub の貢献者グラフは mailmap を利用しないため、Web 上では重複エントリが残ります。

mailmap が無いと、メールアドレス変更や名前のタイプミスを行ったコントリビュータが別人として扱われます。
正規化するとすべてのコミットが同一人物に集約されます。

ファイル形式は gitmailmap ドキュメントで説明されています。

.mailmap
をリポジトリルートに置くか、
mailmap.file
で別場所を指定できます。


.git-blame-ignore-revs

git blame
がスキップすべきコミット SHA を列挙します。
大量のフォーマッタ変更や lint 実行などノイズとなるコミットを除外し、実際にロジックを書いた作者を明らかにします。

# .git-blame-ignore-revs
# Ran prettier on entire codebase
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0

# Migrated to ESLint flat config
b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1

git config blame.ignoreRevsFile .git-blame-ignore-revs
で Git に設定します。
GitHub・GitLab (15.4+)・Gitea は自動的に読み取ります。
グローバル設定にすると、ファイルが無いリポジトリでは
git blame
が失敗するため、各リポジトリで個別に設定するか空ファイルを置く必要があります。

フォーマッタ実行で全コードベースの変更が記録されると

git blame
が意味不明になる問題を解決します。
ファイル形式は1行に1つのコミット SHA、コメントは
#
で付けられます。詳細は git blame ドキュメント参照。


.gitmessage

コミットメッセージ用テンプレートです。

git config commit.template .gitmessage
を設定すると、エディタに自動入力されます。

# .gitmessage
# <type>: <subject>
#
# <body>
#
# <footer>
#
# Types: feat, fix, docs, style, refactor, test, chore

他のファイルとは異なり、クローン後に手動で設定が必要です。
チームはセットアップスクリプトや husky などを使い、インストール時にローカル設定を自動化することがあります。
そのため多くのプロジェクトではコミットメッセージの検証用フック(commit‑msg hook)を優先します。

git commit ドキュメントでテンプレートファイルが紹介されており、

prepare-commit-msg
フックは動的にテンプレートを生成する別の方法です。


Forge‑Specific Folders

Git フォージ(ホスティングサービス)はリポジトリに独自のフォルダを追加します。

.github/
,
.gitlab/
,
.gitea/
,
.forgejo/
,
.bitbucket/
などです。
これらは Git の機能ではなく、コードと共に移動する設定用フォルダです。

各フォルダには CI/CD ワークフロー、Issue/PR テンプレート、

CODEOWNERS
(レビュアーを指定)等が配置されます。
Forgejo と Gitea にはフェールオーバーチェーンがあります:Forgejo は
.forgejo/ → .gitea/ → .github/.
を順に探し、Gitea は
.gitea/ → .github/.
を探します。
これにより GitHub 向け設定を複数プラットフォームで上書きできます。

SourceHut は

.build.yml
(ルート)または
.builds/*.yml
で CI を定義し、専用フォルダは使用していません。


Other Conventions

  • .gitkeep – 空ディレクトリを保持するための慣習。
    .gitkeep
    は任意の名前でも可。
  • .gitconfig – 推奨設定ファイルとしてプロジェクトに含めるケースがありますが、Git は自動読み込みしません。
    git config include.path ../.gitconfig
    等で手動で参照させます。
    モノレポや特定の Git 設定を統一したい場合に使われます。
  • .gitsigners – GPG/SSH キーを記載し、trusted signer を管理します。Linux カーネルなどで使用。
    git config gpg.ssh.allowedSignersFile
    にファイルパスを設定すると
    git log --show-signature
    が検証に利用します。
  • .gitreview – Gerrit コードレビュー統合用設定です。
    [gerrit]
    host=review.opendev.org
    port=29418
    project=openstack/nova.git
    defaultbranch=master
    
    git review
    はこのファイルを読み取り、Gerrit にプッシュします。
  • .gitlint – commit メッセージの lint 用設定。
    [general]
    ignore=body-is-missing
    
    [title-max-length]
    line-length=72
    
    Gitlint はこれを読み取りルールを適用します。
  • .jj/ – Jujutsu のワーキングコピー状態ディレクトリ。
    Jujutsu は Git と互換性があり、
    .git/
    と同時に
    .jj/
    を持ちます。
    .gitignore
    ,
    .gitattributes
    ,
    .mailmap
    等は同様に機能します。

Beyond Git

このパターンは Git のみならず、多くのツールで採用されています。
リポジトリ内に dotfile を置くだけで自動検出され、挙動が変わります。

  • .editorconfig – チーム全体でエディタ設定を統一します。
    root = true
    
    [*]
    indent_style = space
    indent_size  = 2
    end_of_line  = lf
    charset      = utf-8
    trim_trailing_whitespace = true
    
    [*.md]
    trim_trailing_whitespace = false
    
    VS Code、Vim、Emacs、Sublime 等はネイティブまたはプラグインで対応。詳細は editorconfig.org。
  • .ruby-version,
    .node-version
    ,
    .python-version
    – バージョンマネージャが使用言語バージョンを決定します。
    rbenv、nodenv、pyenv、nvm、asdf 等が
    cd
    時に自動切替え。
  • .tool-versions – asdf の複数言語版管理ファイル。
    ruby    3.3.0
    nodejs  20.11.0
    python  3.12.0
    
  • .dockerignore – Docker ビルドコンテキストの除外設定。
    .git
    node_modules
    *.log
    .env
    
    docker build
    時に送信されるファイルを減らし、イメージに機密情報が含まれないようにします。構文は
    .gitignore
    と同様です。

これらのファイルを扱う際の注意点

ツール開発時には以下を尊重するとよいでしょう:

  • リポジトリ走査時に
    .gitignore
    を読み込む
  • .gitattributes
    を参照し、バイナリ・ベンダー・生成ファイル等を判定する
  • 著者情報表示時に
    .mailmap
    を利用する
  • サブモジュール処理が必要なら
    .gitmodules
    を読み込む

Git 設定形式(

.gitmodules
等)は
[section "subsection"] key = value
で、Git 自体の
git config
コマンドで読めます。多くの言語には Git config パーサーが用意されています。

他に Git の「魔法ファイル」があれば、ぜひ Mastodon などで共有するか GitHub でプルリクエストを送ってください。

同じ日のほかのニュース

一覧に戻る →

2026/02/23 4:12

私は「Timeframe」、すなわち私たち家族用の電子ペーパー・ダッシュボードを構築しました。

## Japanese Translation: 著者は長期プロトタイプを **Timeframe** に変え、カレンダー・天気・スマートホームデータを電子ペーパー画面に表示する常時稼働型ファミリーダッシュボードを作り上げました。 初期テストでは、自然光下で読みづらい Magic Mirror LCD と 30 分ごとしか更新されないジャイルブレークされた Kindle e‑ink ディスプレイから始めました。2019 年に著者は Visionect の電子ペーパー パネル(6″、10″、13″、32″)へ切り替え、単一充電で 10 分ごとに更新可能となりました。これらは Raspberry Pi 上の Ruby on Rails と IMGKit を用いて PNG を生成することで制御されました。13″ パネルの価格が 1,000 ドル、さらにデバイスあたり月額 7 ドルの新料金がかかったため、システムは高価になってしまいました。 2021 年末にマシャル火災で著者の家を失い、再建にはより信頼性の高いソリューションが必要だったため、Boox の 25.3″ Mira Pro 電子ペーパー画面(HDMI 経由でリアルタイム更新)と Mac Mini プロトタイプを採用しました。現在のディスプレイには、時計、Sonos 曲情報(node‑sonos‑http‑api を介して取得)、Dark Sky の翌時間降水予報などのリアルタイムデータが表示されます。 バックエンドは Rails/Redis から Home Assistant (HA) に書き換えられました。HA は Google カレンダー、Apple Weather、Sonos などを直接取得し、データベース層を排除します。著者は Home Assistant のテンプレートセンサー(例:食洗機のリマインダー)を追加し、コード再配備なしでアラートをトリガーできるようにしました。これにより電子ペーパー画面上で自動化されたステータスアラートが実現しました。 現在のディスプレイには左上に「ハウスヘルス」インジケーターがあり、ドアの開閉状態・ロック解除状況・洗濯完了など、必要な情報のみを表示して画面を常に確認する手間を省きます。 残っている課題は、保守不要で配備可能な組み込みハードウェアの強化、すべてのデータソースを HA に完全統合すること、および 25″ Boox の約 2,000 ドルというコストと複雑性を削減することです。著者は Timeframe を継続的に開発しつつ、潜在顧客からの関心を得て、Home Assistant アプリとして市場へ投入することを目指しています。同時に日常業務のソフトウェア作業と並行して個人的な情熱プロジェクトとして進めています。

2026/02/23 7:42

**FreeBSD 15 の新しいブリッジ機能** FreeBSD 15 では、パフォーマンスの向上・設定の簡易化・安定性の強化を実現したスリム化されたブリッジ実装が導入されました。 --- ### 主な改善点 - **低レイテンシ** を実現するために最適化されたパケット処理経路。 - ブリッジインターフェース上で直接 VLAN タギングをサポート。 - 帯域幅やキュー制限のチューニング用 `sysctl` 設定が簡素化。 - ブリッジ接続セグメント間で IPv6 フォワーディングを組み込みでサポート。 --- ### インストールと設定手順 1. **ブリッジモジュールの読み込み** ```sh kldload bridge ``` 2. **ブリッジインターフェース作成**(例:`bridge0`) ```sh ifconfig bridge0 create ``` 3. **メンバーインターフェースの追加** (`em0`, `em1`, …) ```sh ifconfig bridge0 addm em0 addm em1 up ``` 4. **IP アドレスを割り当てる(管理用に任意)** ```sh ifconfig bridge0 inet 192.168.10.1/24 ``` --- ### よくある利用ケース - L2 仮想化(例:KVM ゲストが同一ネットワークセグメントを共有) - 複数のアップリンクで冗長構成 - 追加ルーティング不要で VLAN 分割をシンプルに実現 --- ### パフォーマンス向上のヒント - NIC がサポートしている場合は `bridge_hwfilter` を有効化し、ハードウェアアクセラレーテッドフィルタリングを利用。 - トラフィックプロファイルに合わせて `bridge_maxframe` と `bridge_mtu` の `sysctl` 値を調整。 - `netstat -e` や `sockstat -4` でブリッジ統計情報をモニタリング。 --- ### トラブルシューティング - ブリッジ上のインターフェースに IP アドレス競合がないか確認。 - カーネルログ(`dmesg`)で「bridge」に関するエラーを探す。 - `ifconfig bridge0` でメンバー接続と状態を確認。 --- これらの手順を踏むことで、FreeBSD 15 の新ブリッジ機能を活用し、高性能かつ信頼性の高いネットワーク環境を構築できます。

## Japanese Translation: FreeBSD 15は、従来のVLANごとのブリッジモデルを廃止し、`vlanfilter` フラグで複数のタグ付きまたはタグなし VLAN をホストできる単一の多機能ブリッジに置き換えました。新設計では個別のブリッジが不要になり設定が簡素化されます。sysctl `net.link.bridge.member_ifaddrs` は、ブリッジメンバー上のレイヤー3アドレスをソフト非推奨にし(FreeBSD 16.0‑RELEASEで削除予定)、VLAN フィルタリングが有効でない場合はタグ付きメンバーを追加すると ``` ifconfig: BRDGSIFVLANSET ix1: Invalid argument (extended error VLAN filtering not enabled) ``` というエラーになります。 最小構成例: ``` ifconfig_ix1="up -tso4 -tso6 …" cloned_interfaces="bridge0" ifconfig_bridge0="vlanfilter addm ix1 tagged 2,3,128" ``` VNET ジャイルは `jib` スクリプト(またはカスタム `/scripts/vnetif`)を使い、epair デバイスを作成して正しい VLAN タグでブリッジに接続できます。カーネルは現在 epair 用の安定した MAC 生成 (`net.link.epair.ether_gen_addr`) を提供しているため、jib スクリプトの MAC 安定化ロジックは不要です。例として `/scripts/vnetif` は epair を作成し、IPv6 link‑local を無効にし、ポート名を付け、一方の側をタグなし VLAN 2 としてブリッジへ追加します。 Bhyve VM では手動でタップインタフェース(例: `tap133`)が事前に作成され、ブリッジに追加されます (`ifconfig bridge0 addm tap133 untagged 2`)。VM 設定はこれらのタップを参照しますが、新しいブリッジ/VLAN モデルへのネイティブサポートはありません。FreeBSD 15 の変更後は `network0_mac` フィールドが無効になるため、タップインタフェース作成時に安定した MAC アドレスを設定する必要があります。 総じて、新しいブリッジ+VLAN デザインは従来の VLAN ごとのアプローチよりも設定が簡単になり、カスタムスクリプトへの依存が減少し、ギガビット速度でのパフォーマンスが向上します(10 Gbps でも潜在的にメリットがあります)。残る懸念点としては、ルーター・オン・ア・ストック構成との互換性があります。

2026/02/23 3:56

「Loopsは、フェデレーテッド(分散型)でオープンソースなTikTokです。」

## Japanese Translation: > Loopsは、現在オープンベータ段階にある企業支配を拒否するオープンソースの分散型短編動画プラットフォームです。分散化されたアーキテクチャにより、ユーザーは単一の企業エコシステムに縛られることなく、独立したサーバ間でコンテンツを共有できます。Fediverseモデルに従い、Loopsはクリエイターとコミュニティに作品とオーディエンスデータの所有権を与えることで力を付与します。このプラットフォームはクリエイターに優しく、広告は一切含まれていません。持続可能性はユーザーによるスポンサーシップから来ており、すべての寄付は開発・インフラストラクチャー・コミュニティイニシアチブへと向けられ、Loopsが独立した状態を保つようにしています。

**Git のマジックファイル** | そっか~ニュース