4月くらいからスタートした検診予約システムの開発が完了して、とうとう先日リリースすることができました!
前回同様いい機会なのでここで振り返りをしたいなと思います。
よろしくお願いします!
プロジェクトの概要
- Laravel・JQuery・MySQLで実装
- デプロイ先はさくらのVPS
- インフラ構築からアプリの実装まで担当
- アプリのデザインはデザイナーさんが作ってくれたものを参考に実装
- GMOペイメントでの単発決済あり
- 全体管理画面・店舗管理画面・ユーザー画面の3つそれぞれで認証が必要
今回作ったシステムは前回のものと比べてかなりできることが限られているシステムでした。
ユーザー属性が3つありますが、それぞれについては
- ユーザー画面・・・検診の予約ができる
- 店舗管理画面・・・検診を行う店舗のスタッフさんが使用する画面。予約情報を元に検診結果を保存する
- 全体管理画面・・・店舗ごとの設定やシステム全体を通しての設定が可能
といった具合になります。
ページ数でいうと全体でも20~30ページくらいと、見積もりの段階ではそこまで時間がかかる印象を受けませんでした。
が、実際に仕様をつめていくと一つ一つの機能が重ためなものが多く、思いの外進捗が上がらずとても苦労しました。。
見積もりをページ数で考えると痛い目にあいますね。反省です。
また、今回はアプリだけでなくインフラの方も僕の方で設定しました。
といってもVPSなのでそこまで大変ではないのだと思いますが、自分にとって初めての作業が多くて毎日夜遅くまでQiitaを読み漁っておりました。
そんな感じで今回も前回同様この案件を通してかなり成長できたのではと思います。
せっかくなので備忘録として何個か詰まったエラーを記載したいと思います。
入力項目が多すぎる問題
管理画面の検診の結果を保存する処理の時になぜか一部の入力項目が更新されないという不具合に発生しました。
そこでinputタグのname値を確認したりサーバー側で受け取る処理に誤りがないか確認したり、データベース・モデルの定義があっているか確認したり、そもそも見ているデータベースがあっているのか確認したり、、、と色々やったのですが解決には至らず。
仕方がないので PHP 入力フォーム 送信されない 途中から
みたいなキーワードで検索しまくる内に、どうやらPHPの設定で一度にPOSTで送信できるパラメーター数
なるものがあることを知りました。
見事にこの記事の通りphp.ini
のmax_input_vars
のせいでしたね。。。
いやwarningって。エラーにしてよPHPsann...
対象の値を変更して動かしたところ見事に動作したのですが、インフラの問題だとは夢にも思わなかったので、いい経験だったと思います。
GMOペイメントでの決済
前回のシステムでも決済機能は実装したのですがあくまでサブのものだったので、Stripeで簡単に実装しました。
が、今回は検診予約システムということで、決済機能はメイン中のメインの機能です。責任が重そうな感じがするので全くやりたくない機能ではありましたが、他に人もいないので頑張って実装しました。
まず別サービスとAPI連携すること自体も初めてだったので、初歩の初歩ですがCURLを使ったAPI連携に手こずりました。
そしてAPI連携ができるようになった後に悩ませたのがエラー処理です。開発に十分な時間がとれなかったこともあり、エラー処理を最後に後回しにしていたのですが、それが最後の最後で自分を苦しめることになりました。。。
API連携の時にQiitaで見つけたコードをコピペしていたのも良くなかったと思います。どこでどうtry-catchしてどこのタイミングで何を更新するのがいいんだろうということを納期のギリギリのタイミングで右往左往してしまい辛かったです。
最終的にAPI連携部分は全て自分で書き直したので納得いく形にはなったし、テストも無事完了したのでよかったのですが、今後は後回しにするのではなくちゃんと状況を説明して納期をずらしてもらうなりしなきゃなと思いました。
テストについては、幸運なことに日中は会社のテストチームで働いていることもあり、特に問題なくすんなり終わりました。
唯一何かあげるとすれば、クーポンで金額が変わる処理の部分がかなり気を使ってテストしたのですが、不具合がなく今でも何か間違っていたんじゃないかと怯えています。
インフラが難しいというか怖い問題
VPSにデプロイしたと上の方で記載しましたが、実はVPSを使うのは初めてで最初は全く勝手がわからない状態でした。
自前で作ったアプリをデプロイする時はいつも自分で借りているXserverなので、お恥ずかしい話PHP・SSL化などを自分で行ったことはなく、全てが初めての状態でした。
(XserverだとGUIからDB作成・SSL化などができるので、、)
特によくわからなかったのがSSLです。
最初は無料SSL(Let's Encrypt)をさくらのドキュメントを読みながら入れたでそこまで苦労しなかったのですが、最終的にはもっとちゃんとした有料のSSL証明証を入れることになり、一晩使いました。
インフラはハマるとえぐいですね。。。
最初からやり直しといったこともできない状況だったので、苦労しました。
ただおかげでSSLとは何たるかや、サーバーのどこに何があるかは以前と比べるとかなり詳しくなれた気がします。
あとCLIに大分慣れました。でもお恥ずかしい話まだちょっとだけ抵抗感があります。。
そんな感じで引き続き
といった感じでめでたくリリースできた次第です。
前回は幅広く浅くみたいなシステムで今回は狭く深くといった感じで、かなりいい感じで自分の技術力をあげることに成功した気がします。
この調子でどんどん開発していきたいと思います。ありがとうございました!