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
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
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
Oxcを導入して開発体験が向上した話
yug1224
4
310
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
2
580
ふつうのFeature Flag実践入門
irof
7
3.7k
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
160
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
180
OSもどきOS
arkw
0
540
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
CSC307 Lecture 17
javiergs
PRO
0
320
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
190
さぁV100、メモリをお食べ・・・
nilpe
0
140
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Producing Creativity
orderedlist
PRO
348
40k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
Fireside Chat
paigeccino
42
3.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Building Applications with DynamoDB
mza
96
7.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
230
GraphQLとの向き合い方2022年版
quramy
50
15k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Statistics for Hackers
jakevdp
799
230k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
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