ディレクトリ構成
Packagistに登録されているパッケージはある程度標準的なファイル/ディレクトリ構成がありますが、作者や依存するフレームワークなどによって微妙に違います。
標準的でCI用の設定が整ったパッケージ構成とは?という点で検討した現在の構成を紹介します。(Auraフレームワークが採用している構成に近いものでBEAR.Sundayで採用しているものです)
パッケージフォルダ名
.(ドット)区切りで{ベンダー名}.{パッケージ名}にしています。Auraと同じです。
bin
(あれば)PHP実行ファイルを格納します。
src
libs
, lib
などもありますがsrc
が一般的です。srcのクラスファイルは例外やアノテーションなどを除いてサブディレクトリを作らずにフラットに設置します。traitはセッターインジェクションのコードを除いて原則使いません。
tests
bootstrap.php
ファイルはtests
フォルダに入れています。phpunit.xml.dist
をプロジェクトのルートページにおいておくとphpunit
とパラメーターなしでテストが実行できます。
namespaceは対応するsrcと同じにします。そうするとuse
でインポートする必要がありません。MockやStubは全部Fakeというプリフィックスをつけてtests/Fake
フォルダに格納します。
docs
docs/demo
にデモコードを設置しています。他にドキュメントとなるようなものがあればこのフォルダに置きます。
LICENSE
MITが多いようです。ファイル名はLICENSE
で拡張子はありません。
CI / QA 設定ファイル
<phpunit bootstrap="tests/bootstrap.php">
<testsuites>
<testsuite>
<directory suffix="Test.php">tests</directory>
</testsuite>
</testsuites>
<logging>
<log type="coverage-html" target="build/coverage"/>
<log type="coverage-clover" target="build/logs/clover.xml"/>
<log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"/>
</logging>
<filter>
<whitelist>
<directory suffix=".php">src</directory>
</whitelist>
</filter>
</phpunit>
filter:
paths: ["src/*"]
tools:
external_code_coverage: true
php_code_coverage:
timeout: 1200
php_sim: true
php_mess_detector: true
php_pdepend: true
php_analyzer: true
php_cpd: true
php_mess_detector:
enabled: true
config:
ruleset: ./phpmd.xml
php_code_sniffer:
enabled: true
config:
ruleset: ./phpcs.xml
language: php
php:
- 5.5
- 5.6
- hhvm
- 7
install: travis_retry composer install --no-interaction --prefer-source
script:
- if [ "$TRAVIS_PHP_VERSION" == "hhvm" ]; then phpunit; fi
- if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then phpunit --coverage-text --coverage-clover=coverage.clover; fi
after_script:
- wget https://scrutinizer-ci.com/ocular.phar
- if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi
-
hhvm
はカバレッジの値が不安定でTRAVIS_PHP_VERSION
を見て外しています。 - scrutinizerのスコアは
10.0
、テストカバレッジ100%
を標準と考えています。
他に以下のファイルを置いています。
- .php_cs
- build.xml
- phpcs.xml
- phpmd.xml
参考
- [composer testでQAツールの実行] (http://qiita.com/koriym/items/036dc0ceda5606be473b)のphpmd.xml / phpcs.xml