本番環境とかいってますが、だいたいテスト環境です。多めに見てください。
LEVEL1 大文字小文字
windowsで開発してる人からしたらあるあるじゃないでしょうか?
開発環境(windows)では大文字小文字の区別が無く、Linuxでは区別されます。
私が一番ダメージを負ったのはクライアント様がサイト制作で使用する画像を送ってきた際に、
拡張子が大文字のファイルが数ファイルだけ混ぎれ込んでために、ふぁーーーしたことですね。
おわかりいただけただろうか・・・
[コード].[拡張子]という取り決めで画像を送っていただいたため中々気づきませんでした。
本番環境にあげる直前に気が付いて事なきを得ましたが、非常に危なかったです。
なお、
if (file_exists($imagePath . $fileName '.jpg')) {
} elseif (file_exists($imagePath . $fileName '.JPG')) {
}
当時2年目の私がふぁああああしながら書いた負債は今もバリバリの現役です。
LEVEL2 SSL
WEB系の開発をやってる方ならちょいちょい出会うのではないでしょうか。
<iframe name="iframe" src="http://example.com/aaaaa/bbbb/" width="100%" scrolling="no" align="top" frameborder="0"></iframe>
事件発生です。
httpsのサイトからhttpのiframeは読み込めません。
「ソースコードの管理は任せるけど、一部は自社からいじりたい!」とご要望いただく場合にしばしばiframeを使うのですが、クライアント様のソースがアップされてるドメインがSSL対応していないと、とんでもないことになります。
フレームの中身真っ白です。
ちゃんと開発環境も横着しないでSSLに対応させてればよかったのですが、今回はテスト環境にあげて初めて発覚しました。
先方がSSLの対応をするのには時間がかかるとのことで、双方話し合った結果「とりあえずフレーム内のコンテンツをハードコードする」という力技で制作を進めることになりました。(こわい)
今はまだjavascriptやiframeなどのコンテンツがブロックされるだけで、画像などはセキュアな通信が保証されないだけちゃんと映りますが、Chromeは2020年から順次画像もブロックしていくようですので、注意が必要です。
#LEVEL3 拡張モジュール
普段使わない関数は慎重にね。
結論から言うとphp標準搭載の関数ではない、拡張モジュールをインストールして初めて使える関数使ってバグりました。
これは私ではなく、後輩エンジニアちゃんが持ってきたソースコードをレビューしていた時のことです。
// 金額を1億で割った余り
$surplus = bcmod($price, '100000000');
(なんだこいつ初めて見た。。。%でよくね・・・?)
と思いつつ、間違ってもないし、新しい書き方を取り入れることは悪い事じゃないなーと思ってレビューにOK出しました。
・・・冒頭でも書きましたが、初めて見る関数は慎重に吟味しましょう。
#LEVEL4(おまけ)
phpじゃないです。DB周りのお話。
詳細は省きますが、過去に突き当たった壁をいくつか紹介します。
・大量のデッドロック
⇒作成した処理以外のサービスからの書き込みを考慮していなかった。
・レプリケーションの遅延
⇒テスト環境でマスタとスレーブまでちゃんと用意していなかった。
・想定より処理が5倍以上遅い
⇒大規模データを扱う際は、WEBサーバとDBサーバ間の距離が離れているだけで、トータルの処理時間にかなりの差が出た。
また、外部のサーバからマウントしてデータを扱うという環境でテストしていなかった。
などなど・・・
#まとめ(というか教訓)
・本番環境と開発環境はなるべく近づけましょう。
・やったことないことをやる際はこれでもかってくらい慎重に進めましょう。