Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@koriym

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

ディレクトリ構成

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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?