LoginSignup
6
8

More than 5 years have passed since last update.

composerパッケージのファイル構成

Last updated at Posted at 2015-12-02

ディレクトリ構成

Packagistに登録されているパッケージはある程度標準的なファイル/ディレクトリ構成がありますが、作者や依存するフレームワークなどによって微妙に違います。

標準的でCI用の設定が整ったパッケージ構成とは?という点で検討した現在の構成を紹介します。(Auraフレームワークが採用している構成に近いものでBEAR.Sundayで採用しているものです)

スクリーンショット 2015-12-03 1.48.16.png

パッケージフォルダ名

.(ドット)区切りで{ベンダー名}.{パッケージ名}にしています。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.xml.dis
<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>
.scrutinizer.yml
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
.travis.yml
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

参考

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8