火星探査機、初期化





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





目次
火星探査機、はじめに

火星探査機、初期化

火星探査機、着陸

火星探査機、着陸座標



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



リポジトリを作成



新しい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-only



read-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" } }
      
      





デフォルトでは、 Composer



Packagistのパッケージのみを検索します。 新しい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の操作の例を示します。



前: ローバー、はじめに

次のパート: ローバー、着陸



All Articles