Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
phpkansai2024
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
rakuinoue
February 11, 2024
Programming
1.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
phpkansai2024
rakuinoue
February 11, 2024
Other Decks in Programming
See All in Programming
Performance Engineering for Everyone
elenatanasoiu
0
200
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
1B+ /day規模のログを管理する技術
broadleaf
0
110
New "Type" system on PicoRuby
pocke
1
1k
JavaDoc 再入門
nagise
1
380
Vite+ Unified Toolchain for the Web
naokihaba
0
330
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
260
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
190
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
140
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.5k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
320
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
360
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
How to build a perfect <img>
jonoalderson
1
5.7k
Paper Plane (Part 1)
katiecoart
PRO
0
9.2k
Become a Pro
speakerdeck
PRO
31
6k
Building Adaptive Systems
keathley
44
3.1k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
Automating Front-end Workflow
addyosmani
1370
210k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
Transcript
© RAKUS Co., Ltd. レガシーとモダンなシステムが 混在する開発環境を改善しよう #phpkansai #c 株式会社ラクス 大阪第一開発部
配配メール開発課 井上 良太 2024/ 2/11 1
自己紹介 株式会社 ラクス 大阪第一開発部 配配メール開発課 入社2年目、社会人24年目、初登壇です。 お仕事:リードエンジニアとしてシステム設計から開発等 趣味:F1プラモデル制作、F1観戦 2 井上
良太(いのうえ りょうた)
© RAKUS Co., Ltd. 3 開発環境ってどうしていますか? なにか課題はないですか? #phpkansai #c
こんな課題がありました • 開発サーバー内でのソースのコンフリクト/デグレ • テストデータのコンフリクト • 動作確認の為のメンバ間の待ち時間 • 元々の開発フローと違うテスト作業 4
共用開発サーバーがいろいろ存在 • 手順の複雑化、作業ミスの発生 • オフショアチームへの展開が難しい サブシステム毎に開発作業の進め方が異なる
© RAKUS Co., Ltd. 5 もう少し詳しく #phpkansai #c
6 プロダクトの紹介 • 「配配メール」というメールマーケティングサービス • 2007年リリースのサービス • メール配信機能を中心に成長 • 現在メールマーケティング機能を強化中
システム構成の歴史 配配メールのサービスの主幹は メール作成 というシステム(サーバー)ですが、 他にも • データ集約 • データ中継 •
ファイルダウンロード • 添付ファイルDB サブシステム(サーバー)が増加中!!! 7 ※実際にはもっと沢山のサブシステムが存在しますが、割愛します。
システム構成の歴史 8 メール作成(古い) • データ集約(新しい) • データ中継(新しい) • ファイルダウンロード(新しい) •
添付ファイルDB(新しい) レガシーとモダンがいっぱい! サブシステム毎に開発環境が存在!!
開発メンバーの環境 • コーディング作業 ◦ Windowsマシン + PhpStorm • テスト/動作確認 ◦
メール作成システムを実行できるLinux VM環境(開発メンバに1台ずつ割り当てられます) 9 ※ベトナムのオフショア開発チームも、同じ方式で開発を行っています。
ソース管理 GitLabの一つのリポジトリに 各システム毎にフォルダ単位分けて管理 10 haihaiDev メール作成 データ集約 データ中継 添付ファイルダウンロード ファイル
添付ファイルDB
レガシーなメール作成システムの開発の流れ 11 個人Linux VM Windows apache PHP Postgre SQL clone
デプロイ(SFTP) 動作確認 1. Windowsマシンにリポジトリをclone 2. PhpStormでコーディング 3. PhpStormの設定により自動で VMサーバーにデプロイ 4. 動作確認/テストを実施 5. PhpStorm上からPHPUnitの実行 6. ・・・・以後、受入れフェーズなど
モダンな別のサブシステムの開発では、 1. Windowsマシンにリポジトリをclone 2. PhpStormでコーディング ここまでは同じですが・・・ 3. WindowsにPHPをインストールして、 PHPUnitを実行 4.
共用の開発サーバーに手動でデプロイ 5. テストを共用の開発サーバーで実施 12 共用開発サーバー Windows apache PHP Postgre SQL clone 動作確認 手動デプロイ 開発の手順が異なる
課題の再確認 • 開発サーバー内でのソースのコンフリクト/デグレ • テストデータのコンフリクト • 動作確認の為のメンバ間の待ち時間 • 元々の開発フローと違うテスト作業 13
共用開発サーバーを使用している • 手順の複雑化、作業ミスの発生 • オフショアチームへの展開が難しい サービス毎に開発作業の進め方が異なる この問題を解決する方法を検討します
目指す状態は? • 開発メンバ毎の開発環境がある • 開発ワークフローはメール作成サービスと同様にしたい • オフショアチームでも利用できるようにしたい 14
考えた対策案 1. サブシステムのコンテナ環境を開発メンバーのVM環境上に展開する • モダンな仕組みはコンテナ化しやすいはず! • 新たなインフラ環境不要! 2. VM環境のディレクトリをコンテナにマウントする •
PhpStorm → VM → コンテナ の流れでデプロイ/実行が可能になるはず 3. コンテナ実行スクリプト群はアプリソースと同じリポジトリに管理 • メンバーへも展開しやすい! 15 今まで通りの開発フローでも進められる!?
© RAKUS Co., Ltd. 16 やってみた #phpkansai #c
できあがった構成 17 個人Linux VM メール作成サーバー群 Windows サブシステム A サブシステム B
apache PHP Postgre SQL Nginx コンテナ PHP-FPM コンテナ PostgreSQL コンテナ apache コンテナ (PHP インストール) clone デプロイ(SFTP) マウント
18 • 開発メンバー毎の各サブシステム環境が構築できた • メール作成システムと各サブシステムが問題なくシステム連携できた • Windows端末のブラウザからの動作確認が問題なく行えた • コンテナ構築スクリプトもリポジトリに含めたため、変更管理やメンバーへの 展開が容易になった
新しい構成で実現できたこと 開発環境として十分に使用できる環境となった
© RAKUS Co., Ltd. 19 余 談 #phpkansai #c
20 WSL使わなかったの?
21 • WSL(Windows Subsystem for Linux) を使ったコンテナ環境も有効な手段 だけど • メール作成システムの連携を考えると構成が複雑になる
• VM環境内展開と比較すると環境構築手順が複雑 • チーム展開が早くできると判断 WSL使わなかったの? VM環境へのコンテナ導入を選択
© RAKUS Co., Ltd. 22 閑話休題 #phpkansai #c
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
24 • php.ini などの設定ファイルもリポジトリ管理 コンテナ起動時に読み込むように設定 • この設定ファイルはCIによるユニットテスト実行時にも利用 • 同様にPostgreSQLやNginx、Apache等の設定ファイルもリポジトリ管理 環境設定関連のファイルもリポジトリ管理しておくと、
アプリケーションのバージョン毎の環境変更などにも対応できるので おすすめ。 開発用 PHP Dockerコンテナ
25 make relay make inquiry-form make stop コンテナ環境実行の為のスクリプトをmakeコマンドで用意 • 開発メンバ全員がdockerに精通しているわけではない
• 必要なコンテナ群を構築・起動・停止できるように上記のコマンドを準備 • makeコマンドの内部では、 docker compose や、実行前に必要なディレクトリの調整や準備作 業を実行 • 開発メンバーはその点をあまり意識することなく環境準備が可能 開発メンバーに使用してもらう為に工夫された点
ユニットテストが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が実行できるようになる
© RAKUS Co., Ltd. 27 まとめ #phpkansai #c
まとめ • 開発環境の問題解決には、コンテナ化は有力な手段の一つ • 問題解決には、現状を分析して、何ができるか考える • メンバー展開する為の工夫も必要 28 • 他のサブシステムについてもコンテナ化を準備中
• そもそものレガシーなシステムの改善についても長期スパンで検討中 今後にむけて
© RAKUS Co., Ltd. 29 ご清聴ありがとうございました #phpkansai #c