komagataさんの レガシーPHP改善日記 シーズン2 エピソード1 - komagata に触発されて、書いてみました。

最近のPHP、とても開発しやすくなりましたよね。「理想の環境」を拝見しましたが、誰が見ても魅力的な環境だと思います!

私の場合はJava→Pythonですが、こんな感じでした。

改善前(2013年7月)改善後(2015年2月現在)
言語Java6Python2.7
フレームワークSAStrutsDjango1.6
データベースMySQLMySQL
データベースバックアップmysqldumpでダンプを取ってrsyncbakthatでAmazon S3に転送
本番環境さくらのVPS(CentOS)さくらのVPS(Ubuntu) + Amazon S3(静的ファイルのみ)
ステージング環境さくらのVPS(CentOS)さくらのVPS(Ubuntu) + AmazonS3(静的ファイルのみ)
開発マシンWindows7Mac OSX
ソースコード管理Gitolite(ステージング環境にリポジトリを作っている)Bitbucket
タスク管理なしBitbucket Issue, Trello
デプロイSSHでステージング環境・本番環境に繋いでgit pullするFabric
コーディング規約なしpep8(autopep8で自動整形した上で、pyflakes-vimで確認している)
コードレビューなしBitbucketのPull requestを使ってレビュー(Webデザイナーの更新を取り込むときのみ)
自動テストなしBitbucketにpushされるたびに、Djangoのテスト機能をJenkinsで自動実行させている
サーバー監視なしNewRelic
エラー監視なしSentry
サーバー構築手順書もシェルスクリプトもなしchef-solo
チャットSkypeSkype + Slack(他サービスからの自動通知にのみに使っている)

前述の「SAStrus」がベースにしているフレームワーク「Struts1」がEOLになったということで、一から作りなおすことになりました。

私のキャリア上ではJavaが一番経験がある言語だったのですが、個人的にPythonが好きということでPythonにさせてもらいました。

元々外部の業者にまるっとお任せしていたらしく、ドキュメントがほとんどなく、仕様を把握するのに苦労しました。また、元のデータベーステーブル設計が非常に 独特なアレ だったので、そのまま使うのは早々に諦めました。

ただ、別のシステムで旧テーブルを参照しているため、完全に捨てることもできませんでした。別システムも同時にリニューアルということになるとリリースが遅れてしまうので、旧テーブルを残しつつ、新たに作ったテーブルとMySQLトリガーで同期を取るようにしました。

これは飽くまで暫定的な措置のつもりで、いずれは別システムの参照先も新テーブルに変更する予定だったのですが、なかなかそこまで手が回っていません。

また、今のところ開発の体制はWebデザイナー1名 + Webエンジニア1名(私)のみですが、もっと人が増えてPull requestを使ったコードレビューで活発にディスカッションができたらいいな、と考えています。