見積管理システムの引き継ぎと改善
社内ツールのため画面は出せない。書けるのは、業務の中身に踏み込まずに語れる部分だけになる。
依頼
社内で長年動いてきたシステムを引き継ぐ、という話から始まった。作成したのは外部の会社で、引き渡されてから一度も直されていなかった。引き継ぎについて相談できる相手がいなかった。
コードと動いている環境を自分で読んで、どうなっているのかを確かめるところから始めた。
開発環境を作るところから
引き継いだ時点で、動作を確かめる手段が本番サーバーを直接編集することしかなかった。ここを作り直すことは、自分から提案した。
- ローカルで動く開発環境を構築した
- ハードコーディングされていた絶対パスを環境に依存しない実装へ置き換え、同じコードがローカルでも本番でも動くようにした
- 本番を止めずに移行できるよう、別のデータベースを用意して並行環境を作成した
全員が同じアカウントを使っていた
1人1アカウントに分けたい、という話は会社から出た。利用者全員が1つのアカウントを共有していた運用を変更した。
見積の作成者欄には、サーバーが保持する認証ユーザー名を PHP から取得して自動で入れる。認証をサーバー側に任せているので、退職者のアカウントを削除するだけで利用を止められる。
特定の案件だけPDFが壊れる
一部の案件で、PDFが .php ファイルとして保存されてしまう不具合があった。
原因は文字コードだった。工事名に含まれる漢字が Shift_JIS へ変換される際に 0x5C を生成し、HTTPヘッダーのファイル名指定を壊していた。UTF-8 のまま RFC 5987 形式で送出する実装に変えて解消した。
セキュリティ修正が出ないPHPで動いていた
このシステムは PHP 5.5 で動いていた。緊急のセキュリティ修正が公開されたが、5.5 に修正版は出なかった。バージョン自体も古くなっていたため、PHP を上げて対応することにした。
ただし、いまのコードのままでは動かない箇所が複数あった。ローカルに PHP 8 を入れ、動かしながら洗い出して直した。新旧2つのPHPで同じ見積を印刷して出力をバイト単位で突き合わせ、保存や検索など基本機能も同様に動くことを確かめてから、PHP 8.4 へ切り替えた。
引き継げる状態にする
担当者が替わっても保守を続けられるように、環境構成・作業手順・変更履歴をドキュメント化した。
現在も機能追加と保守を続けている。