OSSのドットファイル探訪(ServerSide編)

普段使っているオープンソースソフトウェアのプロジェクトルートにあるドットファイル(.gitignore等)を覗いてみたら色々と発見があったので、面白かったものを以下に書いてみます。

## [GitLab](https://about.gitlab.com/) (Community Edition)

Ruby on Rails製のGitホスティングサービス

https://gitlab.com/gitlab-org/gitlab-ce

まず[`.gitlab/`](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/.gitlab)だけでなく、最大の競合であるはずの [`.github/`](https://gitlab.com/gitlab-org/gitlab-ce/tree/master/.github) ディレクトリもあります。なぜでしょうか？

[d1506ebe · Commits · GitLab\.org / GitLab Community Edition · GitLab](https://gitlab.com/gitlab-org/gitlab-ce/commit/d1506ebeeca6e9bf9d524b0b4174bd81ae5c57a4) より引用

>This adds templates for Issues/Pull Requests in a `.github` directory. These only effect issues/PRs opened in the GitHub mirror of the GitLab project. As we're shutting these down, I thought it'd be good to direct users/contributors to open issues/contribute code in the "correct" project.

「GitHubのミラーリポジトリではなく、GitLabにある正規のリポジトリを見てね」という文言をテンプレートに出すために追加されているようです。独特な使い方ですね。

[`.gitlab-ci.yml`](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.gitlab-ci.yml)にCIの設定があります。GitLab自体のプロジェクトのため、当然GitLabの機能がフル活用されています。

[`.codeclimate.yml`](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.codeclimate.yml) で ESLintとRubocopを動かしているようでしたが、ESLintは依存性の関係で`enabled: false`になっていました。
[`.flayignore`](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.flayignore) は、静的コード解析 [seattlerb/flay](https://github.com/seattlerb/flay)の設定ファイルのようです。
ソースコード管理ツールのソースコードだけあってか、品質担保系はちゃんとしていますね。

他には `.babelrc` , `.csscomb.json`, `.haml-lint.yml` などフロントエンドの設定ファイルが続きます。`.foreman`, `.ruby-version`といったRuby系のファイルもあります。

[`.pkgr.yml`](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/.pkgr.yml)というのは https://packager.io の設定ファイルでしょうか？よく分かりませんでした。

## [Sentry](https://sentry.io/welcome/) (ON-PREMISE Version)

Python製イベントログ収集ツール

https://github.com/getsentry/sentry

[Visual Studio Code](https://www.microsoft.com/ja-jp/dev/products/code-vs.aspx)の設定ファイルである[`.vscode/`](https://github.com/getsentry/sentry/tree/master/.vscode) というディレクトリがリポジトリに入っています。これは物議を醸しそうな一品ですが、[プルリク](https://github.com/getsentry/sentry/pull/5454) を読む限り大した議論もなく入ったようです。素晴らしいですね。

[`.tx/`](https://github.com/getsentry/sentry/tree/master/.tx)は、翻訳プラットフォーム[Transifex](https://www.transifex.com/)の設定ファイルのようです。実際に https://www.transifex.com/getsentry/sentry/ で翻訳状況を確認できます。

`.prettierrc`は、JavaScript等のフォーマッタ[Prettier](https://github.com/prettier/prettier)の設定ファイルです。
あと`.travis.yml`があるのでTravisCIが回っているようですね。

`.eslintrc`, `.babelrc`, `.storybook`などがフロントエンド系。`.isort.cfg` はPython系の設定ファイルです。

## [Redash](https://redash.io/) (Open Source Self hosted Version)

Python製BIツール

https://github.com/getredash/redash

[`.editorconfig.yml`](https://github.com/getredash/redash/blob/master/.editorconfig) というファイルが入っています。[EditorConfig](http://editorconfig.org/)は、異なるエディタ間で共通の設定を使う事ができるツールのようです。

参考: [どんなエディタでもEditorConfigを使ってコードの統一性を高める \- Qiita](https://qiita.com/naru0504/items/82f09881abaf3f4dc171)

[`.vscode/`を突っ込んだ某プロジェクト](#sentry-on-premise-version)とは異なり、平和的なプロジェクトですね。

なお [`.gitignore`には `.vscode`が含まれていました](https://github.com/getredash/redash/blob/master/.gitignore#L15)。

## [Microsoft ACS Engine](https://github.com/Azure/acs-engine)

Azure Container Service (ACS)のOSS版。Go製。
[Azure Container Service \(AKS\)](https://azure.microsoft.com/ja-jp/services/container-service/)ではなく、Azure Container Service (ACS)。

https://github.com/Azure/acs-engine

Microsoft製のリポジトリですが、こちらも[`.vscode`は`.gitignore`に入っています](https://github.com/Azure/acs-engine/blob/master/.gitignore#L5)。

## [Metabase](https://metabase.com/)

Clojure製のBIツール

https://github.com/metabase/metabase

Clojureのビルドツールである[Leiningen](https://leiningen.org/)の設定ファイルが含まれています。
フロントエンド系は`.babelrc`, `.eslintrc`に加えて、Facebook製の静的型付けJavaScriptである[Flow](https://flow.org/)の設定ファイル[`.flowconfig`](https://github.com/metabase/metabase/blob/master/.flowconfig)があります。選定言語から開発者の好みが見えそうですね。

またエディタ設定ファイルとして[`.editorconfig`](https://github.com/metabase/metabase/blob/master/.editorconfig)があるので平和的リポジトリかと思いきや、[`.dir-locals.el`](https://github.com/metabase/metabase/blob/master/.dir-locals.el) というEmacs設定ファイルも入っています。これは[どうやらα版の時代にMaster Pushされた](https://github.com/metabase/metabase/commit/3c720cac5cf58aa21af56c8f21df9919c4352b71)ようです。

## まとめ

- ドットファイルはプロジェクトコードへの依存が浅いので、どんなプロジェクトでも参考にできる点が多い
- [EditorConfig](http://editorconfig.org/)や[Transifex](https://www.transifex.com/)など、ファイル名を調べるだけでも知らないツールやサービスが見つかったりする
- `.vscode/`は、リポジトリに入れるか`.gitignore`に入れるかで割れる