【611日目】検診予約システムプロジェクトを完遂しました

こんにちは。あとむです。

個人としていただいたシステム開発案件のうち一つが先日完了しました!
前回同様いい機会なのでここで振り返りをしたいなと思います。

プロジェクトの概要

  • Laravel・JQuery・MySQLで実装
  • デプロイ先はさくらのVPS
  • インフラの構築(PHP・関連モジュールのインストールSSL化等)からアプリの実装まで担当
  • アプリのデザインはデザイナーさんが作ってくれたものを参考に実装
  • GMOペイメントでの単発決済あり
  • クーポンによる割引あり
  • 全体管理画面・店舗管理画面・ユーザー画面の3つそれぞれで認証が必要
  • ユーザー画面からは検診の予約ができる
  • 店舗管理画面は主に検診を行う店舗のスタッフさんが使用する画面。予約情報を元に検診結果を保存する
  • 全体管理画面は店舗ごとの設定やシステム全体を通しての設定が可能

今回は前回よりもできることがかなり限られているシステムでした。

例えば検診の予約を行うユーザー画面ではページ数が全体で10程度しかなく、見積もりの段階ではそこまで時間がかかる印象を受けませんでした。

が、実際に仕様をつめていくと一つ一つの機能が重ためなものが多く、思いの外進捗が上がらずとても苦労しました。。

見積もりをページ数で考えると痛い目にあいますね。反省です。

また、今回はアプリだけでなくインフラの方も僕の方で設定しました。

といってもVPSなのでそこまで大変ではないのだと思いますが、自分にとって初めての作業が多くて毎日夜遅くまでQiitaを読み漁っておりました。

そんな感じで今回も前回同様この案件を通してかなり成長できたのではと思います。
せっかくなので備忘録として何個か詰まったエラーを記載したいと思います。

入力項目が多すぎる問題

管理画面の検診の結果を保存する処理の時になぜか一部の入力項目が更新されないという不具合に発生しました。

そこでinputタグのname値を確認したりサーバー側で受け取る処理に誤りがないか確認したり、データベース・モデルの定義があっているか確認したり、そもそも見ているデータベースがあっているのか確認したり、、、と色々やったのですが解決には至らず。

仕方がないので PHP 入力フォーム 送信されない 途中からみたいなキーワードで検索しまくる内に、どうやらPHPの設定で一度にPOSTで送信できるパラメーター数なるものがあることを知りました。

見事にこの記事の通りphp.inimax_input_vars のせいでしたね。。。
いやwarningって。普通に考えてエラーでよくない??

対象の値を変更して動かしたところ見事に動作したのですが、インフラの問題だとは夢にも思わなかったので、いい経験だったと思います。

ちなみにこれは本番環境にデプロイする時にmax_input_vars を更新するのを忘れてしまい、全く同じ原因で不具合を出してしまいました。反省。

GMOペイメントでの決済

前回のシステムでも決済機能は実装したのですがあくまでサブのものだったので、Stripeで簡単に実装しました。

が、今回は検診予約システムということで、決済機能はメイン中のメインの機能です。責任が重そうな感じがするので全くやりたくない機能ではありましたが、他に人もいないので頑張って実装しました。

まずAPI連携自体も初めてだったのでCURLを使ったAPI連携に手こずりました。

前々から思っていたんですがPHPの公式のドキュメントわかりづらすぎない?いつも通り先人たちが残してくれたQiitaの記事を見て何とか乗り切りました。本当にありがとう。

そしてAPI連携ができるようになった後に悩ませたのがエラー処理です。
よくないことですが、あまり時間がなかったのでエラー処理を最後に後回しにしていたのですが、それが最後の最後で自分を苦しめることになりました。

API連携の時にQiitaで見つけたコードをコピペしていたのも良くなかったと思います。どこでどうtry-catchしてどこのタイミングで何を更新するのがいいんだろうということを納期のギリギリのタイミングで右往左往してしまい辛かったです。

最終的にAPI連携部分は全て自分で書き直したので納得いく形にはなったし、テストも無事完了したのでよかったのですが、今後は後回しにするのではなくちゃんと状況を説明して納期をずらしてもらうなりしなきゃなと思いました。

テストについては幸運なことに勤務先で自分がテストチームにいることもあり、何となくテストケースの洗い出しなどについては理解があったのでそこまで時間がかからずに作成することができ、すんなりお客様にも納得いただけました。

まあ実施の方はすごい大変だったんですけどね。。。まあ不具合出すよりマシかな。と。
クーポンで金額が変わる処理の部分がかなり気を使ってテストしたのですが、不具合がなく逆に怖かったです。

インフラが難しいというか怖い問題

VPSにデプロイしたと上の方で記載しましたが、実はVPSを使うのは初めてで最初は全く勝手がわからない状態でした。

自前で作ったアプリをデプロイする時はいつも自分で借りているXserverなので、お恥ずかしい話PHP・SSL化などを自分で行ったことはなく、全てが初めての状態でした。
(XserverだとGUIからDB作成・SSL化などができるので、、)

特によくわからなかったのがSSLです。
最初は無料SSL(Let's Encrypt)をさくらのドキュメントを読みながら入れたでそこまで苦労しなかったのですが、最終的にはもっとちゃんとした有料のSSL証明証を入れることになり、一晩使いました。

インフラはハマるとえぐいですね。。。
最初からやり直しといったこともできない状況だったので、苦労しました。

ただおかげでSSLとは何たるかや、サーバーのどこに何があるかは以前と比べるとかなり詳しくなれた気がします。

あとCLIに大分慣れました。でもお恥ずかしい話まだちょっとだけ抵抗感があります。。

 そんな感じで引き続き

といった感じでめでたくリリースできた次第です。

前回は幅広く浅くみたいなシステムで今回は狭く深くといった感じで、かなりいい感じで自分の技術力をあげることに成功した気がします。

この調子でどんどん開発していきたいと思います。ありがとうございました!