モンストのガチャ、大不調。当たりがなかなか出ません。ハーレーX欲しい…。
今回はいつにも増して地味なのですが、GitHubで新しくプロジェクトを始めるにあたってリポジトリ名やフォルダ構成で迷ったので、他のメジャーなプロジェクトがどうしているか調べてみました。
GitHubのWeb系プロジェクトのフォルダ構成
GitHubで新しくプロジェクトを作る時にいくつか迷うことがあります。例えば、
- リポジトリ名はすべて小文字にするか
- リポジトリ名に.jsのようにドットを含めるか、-jsのようにハイフンに置き換えるか
- ソースコードを置くフォルダは
js
かsrc
か - テストコードを置くフォルダは
test
かtests
か - 外部ライブラリを置くフォルダは
vendor
かlib
か - 完成したライブラリはどこに置くか
といったことです。特にフォルダ名を単数形と複数形のどちらにするかといった話は、ネイティブスピーカーでない人間にとってはなかなかニュアンスや慣習がわからなくてもやもやするところです。そこでGitHubのメジャーなプロジェクトを参考にしてみます。
参考にしたプロジェクト
参考にしたGitHubのプロジェクトは以下のとおりです。私が普段使ったり参考にすることが多いプロジェクトを選んでいます。
プロジェクト名 | リポジトリ名 | スター数 | 概要 |
---|---|---|---|
jQuery | jquery | 30,235 | DOM操作ユーティリティ |
AngularJS | angular.js | 22,167 | MVCフレームワーク |
BackboneJS | backbone | 17,483 | MVCフレームワーク |
three.js | three.js | 14,677 | 3Dグラフィックスエンジン |
Pixi.js | pixi.js | 3,914 | 2Dグラフィックスエンジン |
Phaser | phaser | 3,734 | ゲームエンジン |
Processing.js | processing-js | 1,330 | ビジュアルデザインライブラリ |
Processing.jsのスター数が思った以上に少ない事にびっくりですが、それはさておき、どのプロジェクトもリポジトリ名は全て小文字、名前の.(ドット)は置き換えずにそのまま使用しています。
では、それぞれのプロジェクトのフォルダ構成から、共通する主要部分を抜き出してみます。
jQuery
build/ # リリース用スクリプト置き場 dist/ # ライブラリ本体置き場(ビルド時に自動作成される) src/ test/ Gruntfile.js
build
にはライブラリ本体ではなく、ビルド用スクリプトを置くという点が他のプロジェクトと異なっています。
AngularJS
build/ # ライブラリ本体置き場(ビルド時に自動作成される) docs/ lib/ # 外部ライブラリ置き場 src/ test/ Gruntfile.js
BackboneJS
docs/ examples/ test/ # ライブラリ本体はルート直下に置かれる
three.js
build/ # ライブラリ本体置き場 docs/ examples/ src/ test/
Pixi.js
bin/ # ライブラリ本体置き場 docs/ examples/ src/ test/ Gruntfile.js
ネイティブ言語時代の名残か、ライブラリ本体の置き場がbin
フォルダになっています。
Phaser
build/ # ライブラリ本体置き場 dist/ # ビルド時の一時ファイル置き場として使用 docs/ examples/ src/ Gruntfile.js
dist
フォルダでビルドを行って、リリース時にbuild
フォルダへライブラリ本体をコピーしています。
Processing.js
lib/ # テスト用外部ツール置き場 src/ test/ Gruntfile.js # ライブラリ本体はルート直下に置かれる
わかったこと
もっとバラバラになるかと思っていたのですが、想像以上にどのプロジェクトも同じフォルダ構成になっていました。気づいたことを挙げてみます。
- ソースコード置き場は皆
src
フォルダを使っている(js
だと言語が限定されてしまうから?) docs
、examples
など複数種類のものが寄せ集めになるフォルダは複数形を使っている- ただしテストコードを置くフォルダは単数形の
test
を使う(一連のユニットテストをまとめて1つという扱い?) - 外部ライブラリやツールは
lib
フォルダに置かれることが多い - 出力されたライブラリは
build
フォルダに置かれることが多い - Gruntfileは皆
Gruntfile.coffee
ではなくGruntfile.js
を使っている
大分すっきりしました。これで心おきなく新しいプロジェクトが始められそうです。