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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.6k
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
スマートグラスで並列バイブコーディング
hyshu
0
280
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
470
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.6k
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
240
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
120
壊れたパーサから始める関数型設計と構成的なパーサ
raiga0310
2
140
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
Vite+ Unified Toolchain for the Web
naokihaba
0
580
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
340
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Documentation Writing (for coders)
carmenintech
77
5.4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
My Coaching Mixtape
mlcsv
0
170
Bash Introduction
62gerente
615
220k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Odyssey Design
rkendrick25
PRO
2
720
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
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