燃えかけている……というかなんというか
プロジェクトとしてはシンプルだったはずなんですよ。買収したプロダクトがLaravelで作られてるみたいなので、それを扱える人材を雇って引き継ぎとメンテナンスをしてもらい、今後の機能追加もしていきたいという話でした。運用体制は特に言及されていなかったけれど、コードは綺麗なので大丈夫だと思います、そう聞いていたんですが……蓋を開けてみたらいやあすごかったです。
あんまり細かくは書けませんけど、エンジニアの皆さん向けにざっくり書くとこんな感じです。吐きそう。
- git(及びその他のバージョン管理)を使っていない
- デプロイはsftp
- チケット管理はエクセル
- AWSサーバで運用しているがセキュリティグループは特に設定なし
- テストは一切書かれていない
- マイグレーションもシーダーも書かれていない
- 動作確認環境はなし
- ローカル開発環境もなし
- ソースは基本的にスパゲティ
- Laravelのバージョンは6.x
ソースは基本的にスパゲティ
綺麗だと聞いていたソースが割とスパゲティだったのはちょっとショックでした。どの辺が問題かというですとね……これは実際のプロジェクトとは関係のない設定ですけど、例えばユーザー管理システムがあるとしますよね。それに対して以下の機能が実装されていたとします。- ユーザー登録
- ユーザー情報更新
- ユーザーのプロフィール画像登録
- ユーザーのプロフィール画像更新
- ユーザーの所属するグループの設定
普通はね、それぞれ機能ごとにルーティングとメソッドを分けると思うんですよ。
ルーティングの例
- POST /user –> UserController@store
- PATCH /user/{id} –> UserController@update
- POST /user/{id}/image –> UserController@storeImage
- PATCH /user/{id}/image –> UserController@updateImage
- POST /user/{id}/group –> UserController@updateGroup
メソッドは適当ですけど、まあ普通はこんな感じにしますよね。ですがこのプロジェクトの場合は、全てが
POST /user
になっていて、ボタンが action を持っています。で、UserController@index メソッドの中でif節で場合分けして都度処理を書く……何のことかわからない人もいるかも知れませんけど、ざっくり言えば全ての処理が1箇所にギュッと書かれてるってことです。いやあマジですか。indexメソッド何百行あるんですか。メンテナンス性とか、、
「これがこういう仕様だということですが、根拠は何ですか?」
私の記憶です
元開発者のひとが6ヶ月間の契約でチームに参加してるんですけど、何を聞いても客観的な根拠を示してくれなくて困惑しています。お前の記憶なんか聞いてねえし、、この出来のプロダクトを作った人間の記憶なんか信用出来ねえし……
まあでも、文句ばっかり言ってても仕方がないので、参画して2週間で、とりあえず以下はやりました。
- GitHubの利用
- backlogの利用
- Docker環境を整備してローカルで動作確認可能に
- マイグレーションとシーダーの準備
- 重大なセキュリティリスクに対応
- 機能テストを書く(実施中)
さて、これから1ヶ月でどこまで行けるか。正直言うと契約は半年あるけど、来月ぐらいには元開発者の方は退場いただきたいと思ってるんですけど、さてどうなりますか。
燃えかけとか燃え尽きそうになっているとかそういうプロジェクトにアサインされるのがフリーランスなんですね。わかってたけど、いやもう今までの経験でほんと痛いほどわかっていたけど、今回の経験で強く確信しました。しょうがないね。そういう役回りで高い報酬を得るっていう仕事なんでしょうね。
やるかー