こんにちは、あとむです。
個人として初めて依頼いただいたシステム開発案件を本日とうとう完遂させました!
もともとはLP制作の募集をクラウドワークスで応募したところから始まり、気がついたらLaravelで1システム丸ごと僕一人で作り切ることになっていた何とも不思議な始まりを切ったこのプロジェクトですが、何とか最後まで作り切れてよかったです。
せっかくなので反省と振り返りをしていきたいなと思います。
プロジェクトの概要
- 採用システムはLaravel・Jquery
- デプロイ先はレンタルサーバー(X Server)
- 大きく分けて管理画面とユーザー画面の2つが存在し、両方とも認証が必要
- ユーザー画面側でログインできるユーザーは一般会員と特別会員の2種類が存在
- プロジェクトを作成し、プロジェクトごとに活動記録・協賛・オンラインショップ等の機能を持っている
- ユーザーはプロジェクトに参加してプロジェクトの支援や活動を行うことができる
- メイン機能ではないがStripeでの単発決済の実装あり
僕はWeb制作会社さんからお仕事をいただいて本システムを実装したのですが、その先は特にWeb制作会社さんがいるわけではなかったため僕自身はいわゆる2次受けにあたるような形でこのプロジェクトを進めていきました。
お客さんがITに精通していないこともあり、システム的な要件はそこまで高くなかったように思います。デプロイ先もレンタルサーバーですしね。
初めて個人としてシステム開発を仕事を受けた感想としては「こんなに色々アバウトな感じで進むんだ」ということです。
僕は普段は新人SIerとして超大規模プロジェクトの一員として働いており、そこでは最初にかっちり仕様を決めてそこからスケジュールを引いてそのスケジュールに従って進めていくということを基本中の基本として考えられているように思えます。
でも今回のシステム開発は全然違いました。そもそも仕様がかなりあいまいで、かつ後から何度も仕様レベルの修正があり、正直いつまでたっても完成が見えませんでした。。。
今になって最初にいただいた仕様書を見てもまあ〜〜〜違います。悲しいことに。
あまりにも仕様変更などが多いので途中から支払いを時給に変更してもらいました。もともとは最初に仕様を見た上で見積もりを出してそこから作業という形だったんですけどね、、、ほぼ毎日新仕様が出現する時期があったので、その時にいちいち見積もりするの時間の無駄だなと思い変えてもらいました。
結果的に自分の心の平穏を保てるようになったのでよかったです。
初めて実装するものだらけで徹夜の日々
今回仕事を通して強く思ったのは「練習と実践は全然違う」ということでした。
一応大学までテニスを頑張っていたので仕事と練習の違いは十二分に認識していたはずなんですけどね、、すごかったです。
Laravelの参考書は一通り学んだし、一応Laravelで個人のアプリを作ったりもしていたのですが、今回のプロジェクトで初めて実装することが山ほどありました。
例えば
- ユーザーのマルチ認証
- ドラッグ&ドロップで複数枚画像アップロード
- Stripeでの単発決済
- メールを使った二段階認証
などになります。
特にマルチ認証というか認証周りがとても苦戦しました。
何とか想定通り動くようになりましたが、正直Qiitaを見てコピペしまくってトライアンドエラーを繰り返して何とか動いたという形なので、まだそこまで深く理解できていないですね、、ここは時間のある時に再度勉強したいと思います。
画像アップロードについても大変で、こちらについては共通化するのが大変でした。
画像アップロード自体は様々なところで必要になる機能なのですが、画面によって少しデザインや機能が異なっていたりと、どのレベルで処理を切り分ければいいのか悩んで時間を使ってしまったなという感じです。
あとはDB定義です。
特に悩んだのは種類が違うだけで中身がほとんど同じカテゴリーのようなものをどう扱うか悩みました。
テーブルごと分けるか、テーブルのレコードにカテゴリーのようなカラムを持たせるか、もしくはそれらを組み合わせたような形にするのか、、、
「プログラムは共通化してなんぼ」みたいなことをどこかで聞いた気がしたのでなるべくそれぞれを共通化させて最初は実装したのですが、結局if文で分岐させまくりのコードになってしまいすごい読にくいコードとなってしまったことを反省しています。
一応一部の処理については最初から作り直しましたが、その時にかなり時間がとられたことと、デグレが多発したので、とても辛かったです。。
今後は仕様変更があっても耐えられるようにもう少しそれぞれを疎結合の関係にしておかないとなと思います。
まあでも何とか動いてテストもクリアしたのでよかったです。
切り替えて次!!
色々と反省と後悔が残りますが切り替えて次に活かしていきたいと思います。
というのもこの仕事を依頼くださったWeb制作会社さんが他のプロジェクトも是非お願いしたいとのことで、既に何個か他のプロジェクトにアサインされており、正直悩んでいる暇はありません。。
頑張ります!