Slide 1

Slide 1 text

© RAKUS Co., Ltd. レガシーとモダンなシステムが 混在する開発環境を改善しよう #phpkansai #c 株式会社ラクス 大阪第一開発部 配配メール開発課 井上 良太 2024/ 2/11 1

Slide 2

Slide 2 text

自己紹介 株式会社 ラクス 大阪第一開発部 配配メール開発課 入社2年目、社会人24年目、初登壇です。 お仕事:リードエンジニアとしてシステム設計から開発等 趣味:F1プラモデル制作、F1観戦 2 井上 良太(いのうえ りょうた)

Slide 3

Slide 3 text

© RAKUS Co., Ltd. 3 開発環境ってどうしていますか? なにか課題はないですか? #phpkansai #c

Slide 4

Slide 4 text

こんな課題がありました ● 開発サーバー内でのソースのコンフリクト/デグレ ● テストデータのコンフリクト ● 動作確認の為のメンバ間の待ち時間 ● 元々の開発フローと違うテスト作業 4 共用開発サーバーがいろいろ存在 ● 手順の複雑化、作業ミスの発生 ● オフショアチームへの展開が難しい サブシステム毎に開発作業の進め方が異なる

Slide 5

Slide 5 text

© RAKUS Co., Ltd. 5 もう少し詳しく #phpkansai #c

Slide 6

Slide 6 text

6 プロダクトの紹介 ● 「配配メール」というメールマーケティングサービス ● 2007年リリースのサービス ● メール配信機能を中心に成長 ● 現在メールマーケティング機能を強化中

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

システム構成の歴史 8 メール作成(古い) ● データ集約(新しい) ● データ中継(新しい) ● ファイルダウンロード(新しい) ● 添付ファイルDB(新しい) レガシーとモダンがいっぱい! サブシステム毎に開発環境が存在!!

Slide 9

Slide 9 text

開発メンバーの環境 ● コーディング作業 ○ Windowsマシン + PhpStorm ● テスト/動作確認 ○ メール作成システムを実行できるLinux VM環境(開発メンバに1台ずつ割り当てられます) 9 ※ベトナムのオフショア開発チームも、同じ方式で開発を行っています。

Slide 10

Slide 10 text

ソース管理 GitLabの一つのリポジトリに 各システム毎にフォルダ単位分けて管理 10 haihaiDev メール作成 データ集約 データ中継 添付ファイルダウンロード ファイル 添付ファイルDB

Slide 11

Slide 11 text

レガシーなメール作成システムの開発の流れ 11 個人Linux VM Windows apache PHP Postgre SQL clone デプロイ(SFTP) 動作確認 1. Windowsマシンにリポジトリをclone 2. PhpStormでコーディング 3. PhpStormの設定により自動で VMサーバーにデプロイ 4. 動作確認/テストを実施 5. PhpStorm上からPHPUnitの実行 6. ・・・・以後、受入れフェーズなど

Slide 12

Slide 12 text

モダンな別のサブシステムの開発では、 1. Windowsマシンにリポジトリをclone 2. PhpStormでコーディング ここまでは同じですが・・・ 3. WindowsにPHPをインストールして、 PHPUnitを実行 4. 共用の開発サーバーに手動でデプロイ 5. テストを共用の開発サーバーで実施 12 共用開発サーバー Windows apache PHP Postgre SQL clone 動作確認 手動デプロイ 開発の手順が異なる

Slide 13

Slide 13 text

課題の再確認 ● 開発サーバー内でのソースのコンフリクト/デグレ ● テストデータのコンフリクト ● 動作確認の為のメンバ間の待ち時間 ● 元々の開発フローと違うテスト作業 13 共用開発サーバーを使用している ● 手順の複雑化、作業ミスの発生 ● オフショアチームへの展開が難しい サービス毎に開発作業の進め方が異なる この問題を解決する方法を検討します

Slide 14

Slide 14 text

目指す状態は? ● 開発メンバ毎の開発環境がある ● 開発ワークフローはメール作成サービスと同様にしたい ● オフショアチームでも利用できるようにしたい 14

Slide 15

Slide 15 text

考えた対策案 1. サブシステムのコンテナ環境を開発メンバーのVM環境上に展開する ● モダンな仕組みはコンテナ化しやすいはず! ● 新たなインフラ環境不要! 2. VM環境のディレクトリをコンテナにマウントする ● PhpStorm → VM → コンテナ の流れでデプロイ/実行が可能になるはず 3. コンテナ実行スクリプト群はアプリソースと同じリポジトリに管理 ● メンバーへも展開しやすい! 15 今まで通りの開発フローでも進められる!?

Slide 16

Slide 16 text

© RAKUS Co., Ltd. 16 やってみた #phpkansai #c

Slide 17

Slide 17 text

できあがった構成 17 個人Linux VM メール作成サーバー群 Windows サブシステム A サブシステム B apache PHP Postgre SQL Nginx コンテナ PHP-FPM コンテナ PostgreSQL コンテナ apache コンテナ (PHP インストール) clone デプロイ(SFTP) マウント

Slide 18

Slide 18 text

18 ● 開発メンバー毎の各サブシステム環境が構築できた ● メール作成システムと各サブシステムが問題なくシステム連携できた ● Windows端末のブラウザからの動作確認が問題なく行えた ● コンテナ構築スクリプトもリポジトリに含めたため、変更管理やメンバーへの 展開が容易になった 新しい構成で実現できたこと 開発環境として十分に使用できる環境となった

Slide 19

Slide 19 text

© RAKUS Co., Ltd. 19 余 談 #phpkansai #c

Slide 20

Slide 20 text

20 WSL使わなかったの?

Slide 21

Slide 21 text

21 ● WSL(Windows Subsystem for Linux) を使ったコンテナ環境も有効な手段 だけど ● メール作成システムの連携を考えると構成が複雑になる ● VM環境内展開と比較すると環境構築手順が複雑 ● チーム展開が早くできると判断 WSL使わなかったの? VM環境へのコンテナ導入を選択

Slide 22

Slide 22 text

© RAKUS Co., Ltd. 22 閑話休題 #phpkansai #c

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

24 ● php.ini などの設定ファイルもリポジトリ管理 コンテナ起動時に読み込むように設定 ● この設定ファイルはCIによるユニットテスト実行時にも利用 ● 同様にPostgreSQLやNginx、Apache等の設定ファイルもリポジトリ管理 環境設定関連のファイルもリポジトリ管理しておくと、 アプリケーションのバージョン毎の環境変更などにも対応できるので おすすめ。 開発用 PHP Dockerコンテナ

Slide 25

Slide 25 text

25 make relay make inquiry-form make stop コンテナ環境実行の為のスクリプトをmakeコマンドで用意 ● 開発メンバ全員がdockerに精通しているわけではない ● 必要なコンテナ群を構築・起動・停止できるように上記のコマンドを準備 ● makeコマンドの内部では、 docker compose や、実行前に必要なディレクトリの調整や準備作 業を実行 ● 開発メンバーはその点をあまり意識することなく環境準備が可能 開発メンバーに使用してもらう為に工夫された点

Slide 26

Slide 26 text

ユニットテストが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が実行できるようになる

Slide 27

Slide 27 text

© RAKUS Co., Ltd. 27 まとめ #phpkansai #c

Slide 28

Slide 28 text

まとめ ● 開発環境の問題解決には、コンテナ化は有力な手段の一つ ● 問題解決には、現状を分析して、何ができるか考える ● メンバー展開する為の工夫も必要 28 ● 他のサブシステムについてもコンテナ化を準備中 ● そもそものレガシーなシステムの改善についても長期スパンで検討中 今後にむけて

Slide 29

Slide 29 text

© RAKUS Co., Ltd. 29 ご清聴ありがとうございました #phpkansai #c