BookmarkLINE今やPHPも、FW(フレームワーク)を使ったアプリケーション構築が当たり前になっています。FWを使うほどではない超ミニマムな感じのやつです。構築する際に、かゆいところに手が届くようなスケルトンを作成します。今回の開発環境は以下の通りです。1.8.0今回DBは使わないので、以下の環境があればOKです。PHPが動作してブラウザから結果が確認できるcomposerコマンドが叩ける(composerをインストールしておいてください。)また、作業ディレクトリ(プロジェクトルート)には何も無い空の状態から始めます。ディレクトリのみ、作成しておいてください。composerコマンドは全てプロジェクトルートから叩く前提での記述になっています。無印ちゃんは「名前空間」を掌握したいまずは、ベースとなる部分を作成します。コントローラを設置したいので、appディレクトリを作ってそれに名前空間を当てます。composer.json作成プロジェクトルートに移動し、以下のcomposerコマンドでcomposer.jsonを生成します。init色々と聞かれますが、興味がなければ全てEnter連打で問題ありません。psr-4プロパティに名前空間Appを定義します。}}追加したら、以下のcomposerコマンドを叩いて名前空間を適用(オートローダを更新)させます。名前空間を設定したので、動作確認の為にコントローラを作成します。(ここからは適宜足りないディレクトリ・ファイルは作成してください。インスタンス化して動作させる流れにします。IndexController();$controller->index();ブラウザから確認してみます。ここまでは動作しました。ここをベースに、色々とかゆいところに手を伸ばしていきます。無印ちゃんは「環境変数」をenvファイルで管理したいこういう簡単なプログラムだと、ついつい定数をクラスにべた書きする傾向にあります。「だって単発のプログラムだし、まあいいよね。」いいのですが気持ち悪いので、環境変数はenvファイルで管理できるようにします。dotenvを導入します。dotenvhttps://github.com/vlucas/phpdotenv以下のコマンドを叩いてインストールします。vlucas/phpdotenvインストールが完了したら、以下のファイルをプロジェクトルートに作成します。.env環境変数を設定する.env.example.envと同じ項目を持ち、値を空(もしくは適当な初期値)にしたもの.envは機密情報の塊なので、ソース管理(Githubなど)にはアップしてはいけません。その代わりに.env.exampleをソース管理に含めます。ついでなので、.gitignoreを作成し設定しておきます。.gitignorevendor.env.envは、とりあえず以下を記述しておきます。.envSAMPLE_ENV=ABCDEFGここまで完了したら、dotenvを有効化します。読み込みを行っていましたが、ここににつらつら書いていくとその他の機能を導入していった時にファットになるので、bootstrapファイルを作って切り出しておきます。IndexController();$controller->index();セッティングが完了したので、ENVから値を取得してみます。コントローラのindex()メソッドを以下に変更します。var_dump(getenv('SAMPLE_ENV'));exit;}ブラウザから確認してみます。ENVから環境変数を取得できるようになりました。無印ちゃんは「Configureクラス」を使いたいenvを導入したら次にやりたい事は、Configureクラスです。アプリケーションの設置値を集約していて、そこから値を取得できるやつです。これは手製でいきましょう。名前空間を設定します。psr-4プロパティに名前空間Configureを定義します。}}追加したら、以下のcomposerコマンドを叩いて名前空間を適用(オートローダを更新)させます。dump-autoloadconfigディレクトリを作成しConfigureクラスを定義します。}}シングルトンでの定義です。今回はreadだけ定義しました。(writeまで定義するとボリューム的にlightじゃなくなるので)次に、設定値を記述するapp.phpを作成します。]];ここで、配列でも文字列でも好きに定義して設定値としてConfigureクラスで保持します。(でも、機密な環境変数は必ずENVで設定してください。)最後に、bootstrap.phpでインスタンスを生成します。コントローラのindex()メソッドを以下に変更します。}}ブラウザから確認してみます。Configureクラスから設定値が取得できるようになりました。無印ちゃんは「DIコンテナ」を入れたい極ミニマムのアプリケーションとはいえ、処理分けたりパッケージ導入したりしてなんだかんだクラスは数個程度にはなるものです。DI、、したいですよね。私達の港にもコンテナ入れましょう。DIする適当なインターフェースとサービスクラスを定義しておきます。}}これらをコントローラからDIできるように仕組みを構築していきます。DIコンテナの実現には、PHP-DIを導入します。PHP-DIhttp://php-di.org/PHP-DIをインストールします。composerでインストールします。作成し、Factoryを定義します。}),];最後にindex.phpを、コンテナ経由でインスタンスを受け取るように変更します。$container->get('IndexController');$controller->index();準備が整ったので、コントローラでサービスクラスをDIでセットしてみます。}}ブラウザから確認します。依存性の注入が正常に行われている事が確認できました。サービスを切り替えてみます。}),];ブラウザから確認します。問題なく動作しています。これでDIコンテナが導入できました。無印ちゃんは「ユニットテスト」を走らせたいユニットテストも最低限入れておきたいところです。テストコードの無いアプリケーションはただのアプリケーションだ。ユニットテストツールにはPHPUnitを採用します。PHPUnitをインストールします。composerからインストールします。phpunit/phpunitインストールが完了したら、バージョン確認のコマンドを叩きつつインストールできているか確認します。contributors.と、ここで。いちいちコマンドが長いので入力が面倒です。composerコマンドで実行できるようにします。PHPUnitが実行されるようになります。次に、デフォルト(テスト箇所の指定無し)では一括でテストを回したいので、phpunit.xmlを作成して設定を行います。</testsuites></phpunit>これでファイルやグループなどの指定を行わない場合はtestsディレクトリ配下のテストが全て実行されます。最低限の設定はしたので、動作確認でいくつかテストを作成します。ディレクトリを作成して以下、テストを定義します。}}もう一つのサービスクラスのテストも作成しましたが、SampleAServiceTestとソースコードがほとんど変わらないので割愛します。テストを実行してみます。assertions)テストが実行された事を確認できました。PHPUnitの導入もこれで完了です。まとめ以上で作業は終了です。テンションの上げすぎには注意が必要です。用法用量を守って楽しくお使いください。BookmarkLINEポリモーフィズムに簡単入門してみれば世界平和の音がする。PHPオブジェクト指向プログラミングLaravelのサービスコンテナで依存性注入(DI)を行うLaravelとPHPUnit-データアクセスをモック化してHTTPテスト&ユニットテストを効率化する-Laravel&CircleCIで継続的インテグレーション。ユニットテスト、静的コード解析、E2Eテストなど。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。