こんにちはあとむです。
とうとうプログラミングを始めてから1000日が超えました。
1日10時間勉強していれば10000時間の法則に到達できていたと思うのですが、残念ながらそこまでの頭のおかしさは持ち合わせていなかったので、おそらくまだ5000〜7000時間くらいかなと思います。
時間だけ見るともう少しで一流なのですが、まだまだプログラミングはわからないことだらけです。困った。
そんな感じでここ数ヶ月ずっと開発していたレッスン予約システムについてのふりかえりです。
プロジェクト概要
- Laravelで実装
- ユーザーさんが簡単にレッスンを予約できることが目的
- 管理画面からはレッスン・プラン・割引・講師等の管理ができる
- 会員登録時と月次の決済が必要、決済システムはGMOペイメント
- HTMLは別の方に作成いただきLaravelのbladeに変換。その他はインフラ含め全て担当。
- インフラはXserver
今回は久しぶりに一から全て自分で作り切るシステムでした。
また作成するシステムはこれまで自分がチャレンジしてできるようになった技術の総まとめみたいな内容で開発スケジュールも珍しく無理のないものだったので、これまでの成果を存分に発揮して「めちゃめちゃ安定したシステムを作ってやろう」と鼻息を荒くして臨みました。
プログラミング技術というよりかは仕様を形に落とし込むのが難しかった
今回は冒頭にも書いた通りプログラミングのスキル自体は特に目新しいものはなく、強いて言えば入店時にQRコードを読み込ませてチェックインするあの画面くらいしかこれまで実装したことがなかったものはありませんでした。
こんな感じのやつ
ですが
- 登録時に支払う金額やその次の決済タイミング、またプランを変更したり退会できるタイミングがプランや登録日によってかわる
- 同時に予約できるレッスンの数や予約可能な時間などがプランなどにより変わる
- 来月別プランに変更予定の場合は、来月のレッスンは変更予定先のプランで予約可能かどうかの判定等を行う
など細かい部分で複雑な仕様が多く、そこをどう実現するかという部分で頭を悩ませました。
わりと人間には理解できないレベルの難しさな気がしたので、その分テストをしっかりと実施しました。
会社員自体は超巨大プロジェクトのテストチーム(50人くらい)を統括するチームに新入社員として配属されて1年半くらいはそこで頑張っていたのですが、その経験がとても生きました。
お陰様で決済周りについてはバグ0でとてもよかったです。
。。。まあテストケースが漏れていた同時予約数で不具合だしたりしたのですが。ショボ不具合ばかりでクリティカルなものはほとんどなかったのでよかったです。
LaravelのCSVアップロードのバリデーション
今回は予約や会員をCSVアップロードで新規作成する機能が必要でした。
CSVアップロード自体はこれまでも何度か作成しているのでそこまで困らず「面倒だなあ、、」くらいの感じなのですが、せっかくなので綺麗に作りたいと思い、色々試していたりしたのですが、バリデーションでとても頭を悩ませました。
アップロードしたCSVの文字コードやそもそもアップロードファイルがCSVかどうかみたいなのはすごく簡単に書けるのですが、CSVの列ごとのバリデーションなどは自前で実装する必要があり、辛い思いをしました。
CSVの列ごとのバリデーションもフォームのバリデーションみたいに綺麗に書けるといいのになと思いつつ、仕方なくforeachで回して一つずつ確認するみたいなダサくて見にくい処理になってしまったことは反省です。
わりとこの先も同じような実装を繰り返しそうなので、時間があればパッケージにして簡単にバリデーションできるようにしたいなと思いつつ。。。そんな時間が取れる日が来るのかどうかという感じです。
もし何かそういういいパッケージがあれば誰か教えてくれないかな、、
以上です!
そんな感じで予約システムを開発した話でした。
記事にはしていませんでしたが、でかプロジェクトにヘルプで入って予約部分だけ実装したこともあり、予約部分や予約をカレンダー形式で表示するみたいなとこはあまり苦戦しなかったのが幸いで、最後までそこまで納期に追われることなくリリースできたことはとても嬉しかったです。
こんな感じで今後も開発していけたらいいな。マジで。
そんな感じでした。ありがとうございました!