火星探査機、初期化



この一連の記事では、以下の仕様に従ってローバーソフトウェアを構築します 。 これにより、次のアプローチを実践できます。



まず、プロジェクトを初期化する必要があります。

リポジトリを作成


新しいgitリポジトリを作成することから始めましょう:

mkdir rover cd rover git init 

Composerを使用するため、 composer.jsonを作成します。

 { "name": "mars-rover/mars-rover", "license": "MIT", "type": "project", "description": "Mars Rover", "require": { "php": "^7.0" } } 

リポジトリ内のサードパーティライブラリファイルを無視するには、 .gitignoreを追加します。

 # Third Party libraries /vendor/ 

リポジトリの作成が完了したら、 composer実行します。

 composer install --optimize-autoloader 

これは最初のコミットに十分です:

 git add composer.json .gitignore git commit -m '0: Created project' 

navigationパッケージの作成


タスク分解を見ると、タスクはwrite-onlyread-only write-only区別できることがわかります。

  1. ローバーを火星に着陸させる- write-only
  2. ローバーの運転- write-only
  3. ロケーションリクエスト- read-only

CQRSの原則を遵守したいので、 read-only別にwrite-onlyロジックを配置しwrite-only 。 着陸と運転はすべてナビゲーションに関連しているため、始めましょう。

 git checkout -b 1-navigation mkdir -p packages/navigation cd packages/navigation 

新しいパッケージのcomposer.jsonを作成します。

 { "name": "mars-rover/navigation", "license": "MIT", "type": "library", "description": "Mars Rover - Navigation", "autoload": { "psr-4": { "MarsRover\\Navigation\\": "src/MarsRover/Navigation" } }, "require": { "php": "^7.0" }, "require-dev": { "memio/spec-gen": "^0.6" } } 

テストプラットフォームとしてphpspecを使用してみましょう。ほとんどのテストでは、 SpecGen拡張機能を使用します。 これを行うには、プロジェクトphpspec.yml.distを作成します。

 extensions: Memio\SpecGen\MemioSpecGenExtension: ~ 

:phpspecの詳細については、記事を参照してください
最後に、 .gitignoreファイルを作成して、このパッケージのgitを構成する必要があります。

 # Configuration /phpspec.yml # Third Party libraries /vendor/ /composer.lock 

これでパッケージの構成が完了し、 Composerを実行できるようになりました。

 composer install --optimize-autoloader 

2回目のコミットでアクションを修正します。

 git add -A git commit -m '1: Created Navigation package' 

navigationパッケージをプロジェクトに追加する


プロジェクトのルートに戻りましょう。

 cd ../../ 

MonoRepoの利点の1つは、1つのコマンドですべてのパッケージでテストを実行できることです。 これを行うには、メインプロジェクトのcomposer.jsonファイルにnavigationへの依存関係を記述する必要があります。

 { "name": "mars-rover/mars-rover", "license": "MIT", "type": "project", "description": "Mars Rover", "repositories": [ { "type": "path", "url": "./packages/*" } ], "require": { "mars-rover/navigation": "*@dev", "php": "^7.0" } } 

デフォルトでは、 ComposerPackagistのパッケージのみを検索します。 新しいrepositoriesセクションを追加することにより、./packagesでもパッケージをローカルでチェックするように指示します。これにより、 requireセクションで見つかったパッケージを使用できます。

また、どのバージョンを使用するかをパッケージマネージャーに伝える必要がありますが、モノリポジトリではすべてのパッケージのバージョンが同じであるため、 * (any)を使用します。 ただし、バージョンタグだけでなく、最新の変更を使用できるようにするには、優先する安定性( @dev )を指定する必要があります。

テストにphpspecを使用してphpspecため、メインプロジェクトとそのプロジェクトにdev依存関係を配置します。

 composer require --dev phpspec/phpspec:^3.0 

phpspecは、プロジェクトのルートでテストを検索します。 phpspec.yml.distを作成して、 navigationパッケージの存在を報告する必要があります。

 suites: navigation: namespace: 'MarsRover\Navigation' src_path: packages/navigation/src spec_path: packages/navigation 

ローカル設定を無視するには、 .gitignoreも更新し.gitignore

 # Configuration /phpspec.yml # Third Party libraries /vendor/ 

ここにある! Composerを実行してからphpspec実行できます。

 composer update --optimize-autoloader ./vendor/bin/phpspec run 

これをすべてコミットしましょう:

 git add -A git commit -m '1: Added navigation package to main project' 

そしてmasterブランチで悪臭を放ちます:

 git checkout master git merge --no-ff 1-navigation 

おわりに


Composerを使用すると、同じリポジトリ内に多くのレイアウトを作成でき、 MonoRepoアプローチを使用して、1つのコマンドですべてのテストを実行できます。

次は何ですか


次の記事では、「火星へのローバーの着陸」タスクの内部部分を扱い、 イベントソーシングTDDの操作の例を示します。

前: ローバー、はじめに
次のパート: ローバー、着陸

Source: https://habr.com/ru/post/J314544/


All Articles