次々とやってくるさまざまな環境で色々がんばる人のためのノウハウを集めてみよう。
必ずしも綺麗な環境で開発できる人ばかりじゃない。スパゲッティを手渡されラーメンを作れといわれる。
所詮下請けなので、そもそもこうした方がいいよとか軌道修正すらできない環境で足掻くために何ができるのか。
朝はCakePHP、昼はsymfony、右向きゃ独自FW、左向きゃ素php。
こんなこと、よくありますよね!
いろんなFWを使ってるとFW固有の機能とかもう何がなんだかわけがわからなくなります。
FWの機能を使ってデバッグなんてやってられません。一番信頼できるデバッグ方法とはなんでしょう。
・・・そうprintデバッグです!!!printデバッグこそ神!PHPならprint_rを使おう。
ただし出力バッファを捕獲したりするFWもあったりするのでprintだけだとどこの処理通ってるかわけわからんときがあります。
そんなときはこれ!
exit!
exitだけは何者にも犯せない最強の関数(言語構造)なので確実に処理がとまってくれます。なのでわけわからんことになったら真っ先にexitしましょう。
世の中には開発者のPCに環境(ローカル環境)を作るのが困難な場合があります。例えば設置できたはいいが、ローカルでこの関数が動かないor動いたらまずいだとか
こんなこと、よくありますよね!
そんなとき僕達がよくやる対策としてはソースコードを直接書き換えることですね!呼ばれたくない関数は中身をコメントアウトしたり、定数はローカル用の値に書き換えたりするわけです。
しかしこのやり方は少し問題があるのです。
例えばSVN等を使っている場合、常にこれらのファイルが変更状態のままになってしまいます。間違えてコミットしちゃった!なんてこともあります。
そして更にそのファイルに何か変更があった場合とても面倒です。関数のコメントアウトを外し、定数は本番環境用に戻してからコミットする、なんてことになります。まぁ確実にいつか人的ミスが入るでしょう。
そこで僕が推奨するのはファイルを直接書き換えずに書き換えろ。ということです。
つまりrunkitを利用するのです。
通常PHPは関数や定数などを動的に上書きすることはできませんが、runkitを使えばそれができてしまうのです。このようなローカル環境を無理やり構築したい場合にはとても使える機能です。
もちろん本番環境においてrunkitを使うのはご法度だと思います。伝家の宝刀、馬鹿と鋏は使いよう、です。
こんな経験はありませんか?
「ここを改修して欲しい」
「わかりました、じゃあSVNをUPDATEしてから改修しますね。」
「いや、今はステージング環境にあるファイルが最新なのでそこからダウンロードしてから作業してほしい」
「あ、そうなんですか、じゃあステージングから持ってきて対応します」
「改修完了しました。コミットしてステージングにアップします」
「あれ、なんか本番の動作がおかしい!デグレードしてます!デグレードしてます!」
「コミットもされてねぇ!」
「競合!競合!」
「うわああああああ、今何が最新なの?ねぇねぇ?もう僕わかんない。」
こんなこと、よくありますよね!
この後の担当者の作業はこうです。
ローカル環境のファイルとSVNでdiff。ステージング環境とdiff。本番環境とdiff。
改修対象のファイルが複数ある場合のdiff作業の大変さと言ったらもう筆舌に尽くし難いものとなります。
僕は思いました。ローカル環境のファイルと、SVNとステージング環境と、本番環境のdiffをワンコマンドでさっとできたらどれだけ楽か・・・。
もちろん探せばそういったツールを見つけることは可能だとはおもいますが、探すのが面倒だったので自作しました。
そのツールをここに晒す事もできなくはないですが、この余白はそれを書くには狭すぎるので今回はそういうアプローチがあるということだけを書いて終了します。
とりあえず僕が自作したのはローカル(windows)とhttp(SVN)とftpとsshに対応した相互diffツールです。全ての環境の組み合わせでdiffをして差分を表示したり、特定の環境だけをdiffしたりできるので開発効率アップです。
タイトルで言ってしまった感がありますが、下請けで改修作業をしていると既知バグを発見してしまうことがあります。
これは非常に難しい問題です。もう完全にクライアント次第としかいいようがないんですが、クライアントに報告すべきかしないべきかは慎重に考える必要があります。
バグを報告するとちょちょっと直してよ、とかいうクライアントもいますし、何よりクリティカルなバグの場合、見積もりしてくれと言われたとしてもとてもじゃないけど責任を請け負いたくない場合もあります。
なので見なかったことにする。
む、ちょっと眩暈が。最近寝てなかったし。とか言いながら缶コーヒーでも飲んで一服しましょう。
するとどうでしょう、さっきまでバグを見過ごさないのはプログラマの矜持だとかなんとか言ってたのにあら不思議、とりあえず今改修対象のところだけ直そう。となります。
20個くらい書くつもりで見切り発車してみたものの、もうない。泥臭い作業にノウハウなんてないのだ。
所詮泥は泥。ドロドロ。細かいコードの書き方まで言い出せばいくらでもあるけど「些末なコードレビュー」の話したところで泥で足掻いてる人にとってはなんら救済にならないし別に必要ないよね。
さてここからは他にも泥臭い作業をしている人たちでノウハウを構築しようではないか。6番目以降を書く同志達を僕は待ち望んでいるッ!