Upgrade to Pro — share decks privately, control downloads, hide ads and more …

phpkansai2024

rakuinoue
February 11, 2024

 phpkansai2024

rakuinoue

February 11, 2024
Tweet

Other Decks in Programming

Transcript

  1. こんな課題がありました • 開発サーバー内でのソースのコンフリクト/デグレ • テストデータのコンフリクト • 動作確認の為のメンバ間の待ち時間 • 元々の開発フローと違うテスト作業 4

    共用開発サーバーがいろいろ存在 • 手順の複雑化、作業ミスの発生 • オフショアチームへの展開が難しい サブシステム毎に開発作業の進め方が異なる
  2. システム構成の歴史 配配メールのサービスの主幹は メール作成 というシステム(サーバー)ですが、 他にも • データ集約 • データ中継 •

    ファイルダウンロード • 添付ファイルDB サブシステム(サーバー)が増加中!!! 7 ※実際にはもっと沢山のサブシステムが存在しますが、割愛します。
  3. システム構成の歴史 8 メール作成(古い) • データ集約(新しい) • データ中継(新しい) • ファイルダウンロード(新しい) •

    添付ファイルDB(新しい) レガシーとモダンがいっぱい! サブシステム毎に開発環境が存在!!
  4. 開発メンバーの環境 • コーディング作業 ◦ Windowsマシン + PhpStorm • テスト/動作確認 ◦

    メール作成システムを実行できるLinux VM環境(開発メンバに1台ずつ割り当てられます) 9 ※ベトナムのオフショア開発チームも、同じ方式で開発を行っています。
  5. レガシーなメール作成システムの開発の流れ 11 個人Linux VM Windows apache PHP Postgre SQL clone

    デプロイ(SFTP) 動作確認 1. Windowsマシンにリポジトリをclone 2. PhpStormでコーディング 3. PhpStormの設定により自動で VMサーバーにデプロイ 4. 動作確認/テストを実施 5. PhpStorm上からPHPUnitの実行 6. ・・・・以後、受入れフェーズなど
  6. モダンな別のサブシステムの開発では、 1. Windowsマシンにリポジトリをclone 2. PhpStormでコーディング ここまでは同じですが・・・ 3. WindowsにPHPをインストールして、 PHPUnitを実行 4.

    共用の開発サーバーに手動でデプロイ 5. テストを共用の開発サーバーで実施 12 共用開発サーバー Windows apache PHP Postgre SQL clone 動作確認 手動デプロイ 開発の手順が異なる
  7. 課題の再確認 • 開発サーバー内でのソースのコンフリクト/デグレ • テストデータのコンフリクト • 動作確認の為のメンバ間の待ち時間 • 元々の開発フローと違うテスト作業 13

    共用開発サーバーを使用している • 手順の複雑化、作業ミスの発生 • オフショアチームへの展開が難しい サービス毎に開発作業の進め方が異なる この問題を解決する方法を検討します
  8. 考えた対策案 1. サブシステムのコンテナ環境を開発メンバーのVM環境上に展開する • モダンな仕組みはコンテナ化しやすいはず! • 新たなインフラ環境不要! 2. VM環境のディレクトリをコンテナにマウントする •

    PhpStorm → VM → コンテナ の流れでデプロイ/実行が可能になるはず 3. コンテナ実行スクリプト群はアプリソースと同じリポジトリに管理 • メンバーへも展開しやすい! 15 今まで通りの開発フローでも進められる!?
  9. できあがった構成 17 個人Linux VM メール作成サーバー群 Windows サブシステム A サブシステム B

    apache PHP Postgre SQL Nginx コンテナ PHP-FPM コンテナ PostgreSQL コンテナ apache コンテナ (PHP インストール) clone デプロイ(SFTP) マウント
  10. 21 • WSL(Windows Subsystem for Linux) を使ったコンテナ環境も有効な手段 だけど • メール作成システムの連携を考えると構成が複雑になる

    • VM環境内展開と比較すると環境構築手順が複雑 • チーム展開が早くできると判断 WSL使わなかったの? VM環境へのコンテナ導入を選択
  11. 23 開発用 PHP Dockerコンテナ compose.yaml, Dockerfileを使ってコンテナ環境を構築 • php:8.2-fpm-bookworm • php:8.2-apache-bookworm

    • php:8.2-cli-bookworm のimageを利用、必要な拡張モジュールを追加インストール xdebugもインストールしているので、PhpStorm上でのデバッグ作業も可能です。 ↓ Dockerfileから抜粋 # Install PHP extensions RUN docker-php-ext-configure gd --with-jpeg --with-freetype --enable-gd-jis-conv && ¥ docker-php-ext-configure imap --with-kerberos --with-imap-ssl && ¥ docker-php-ext-install -j$(nproc) gd imap pcntl pdo_pgsql pgsql zip RUN pecl install xdebug
  12. 25 make relay make inquiry-form make stop コンテナ環境実行の為のスクリプトをmakeコマンドで用意 • 開発メンバ全員がdockerに精通しているわけではない

    • 必要なコンテナ群を構築・起動・停止できるように上記のコマンドを準備 • makeコマンドの内部では、 docker compose や、実行前に必要なディレクトリの調整や準備作 業を実行 • 開発メンバーはその点をあまり意識することなく環境準備が可能 開発メンバーに使用してもらう為に工夫された点
  13. ユニットテストがPhpStormから実行できるように 26 // docker composeを起動できるディレクトリに移動 chdir(DOCKER_ROOT_PATH); $escapedArgv = array_map('escapeshellarg', array_slice($argv,

    1)); // 必要なパラメータを付けてdocker compose経由でPHPUnitを実行 passthru('docker compose exec -e XDEBUG_CONFIG="client_host=' . $sshHost . '" inquiry-form-php-fpm vendor/bin/phpunit ' . implode(' ', $escapedArgv)); • PhpStormのPHPUnit実行は、Dockerコンテナ内での実行には未対応 • パラメータを橋渡しするスクリプトを別途作成しPhpStorm内でphpunit.pharのパスと指定 • 無事にUnitTestが実行できるようになる