【633日目】サブスクサービスの決済機能周りを実装しました

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

最近はサブスクサービスのプロジェクトにヘルプとして入って決済周りの実装をしていたのですが、何とか完了してリリースすることができました。

なので振り返っていきたいと思います!

プロジェクトの概要

  • 採用システムはLaravel・MySQL
  • デプロイ先はXserver
  • サブスク登録・解除、クレジットカードの登録・変更、月次決算を担当
  • 決済はGMOペイメントを使用

いつも通りのLaravelですが、初めての月次決済で、かつ自分が作成していない(というか何のアプリかもよく分からない)上にリリース時期が迫っているというなかなか残念な状況でのスタートでした。

泣き言を言っても仕方ないのでゴリゴリコードを書きまくっていたのですが、その結果テストが十分にできずリリース1週間前に「GMOペイメントの登録状況に問題があり決済できない」という危機的な状況になってしまいました、、、

開発時はずっとテスト用のカード情報入れてたのでね。気づきませんでしたね。。

そんな感じでコードを書く以外のところで学んだことが多かったように思います。

例えば

・リリース1週間前にGMOペイメントの登録状況に誤りがあることに気づく
→外部サービスを使う時は最初に登録状況を確認する。また可能であれば早い段階でその外部サービスでやりたいことができるか確認する

・複数の決済手段を使う想定だったため、まず全ての決済手段のコードを書いてからテストを始めたが、最終的にクレジットカード払いだけになり、無駄な作業が発生してしまった
→大前提仕様変更が悪いとは思いつつも、リリースが迫っているのであればまずは最低限の機能としてクレジットカードのみしっかりと動く状態にしてから他の決済手段の実装を行う方がよかった

といったところです。

今回の開発ではタスクの進め方やコードの書き方について、何個か選択肢がある中で「どっちでもいいや」と思い選択したことが、ことごとく全て裏目にでたような気がします。

次からもう少し一つ一つの選択に対して根拠を持って選択しないとなーと思いました。

ただこのへんの細かい話はやはり独学だときついですね、、、なんかいい本とかあったら教えてほしいです

まあそもそも今は案件に精一杯で勉強する暇ないのでアレなんですが、

とりあえず数をこなすしかないと思うので頑張ります!

他の人が書いたコードは色々学ぶことが多い!

今回は途中からそのプロジェクトに入る形だったので、他の人が書いたコードを読む時間がかなりあったのですが、今まで知らなかった書き方などが多くとても参考になりました。

忘れないようにここにメモっていこうかなと思います。

Laravelの入力フォームについて

Laravelの入力フォーム(inputタグなど)について、今までvalueの値の持たせ方が綺麗に書くことができず、何だかもたついていて嫌だなと思っていました。

// バリデーションに引っかかった場合
@if(old("hoge"))
<input type="text" name="hoge" value="{{ old('hoge') }}">
// バリデーション前 ユーザー登録済みの場合
@else
<input type="text" name="hoge" value="{{ $user->hoge }}">
// バリデーション前 ユーザー新規登録の場合
<input type="text" name="hoge" value="">
@endif

が、何とこれ1行でかけました。

<input type="text" name="hoge" value="{{ isset($user->hoge) ? old('hoge', $user->hoge) : old('hoge') }}">

old()の第2引数に初期値を入れられるなんて知らなかったよ。。。

まあもともとの書き方でも上手に別ファイルに切り出して流用すればそこまで汚い感じでもなかったのですんが、1行でかけるのであればその方がスマートでいいよねってことで今後はこの書き方で作っていきたいと思います。

入力フォームなんて特にユーザーがいる系のアプリだとユーザー情報やら会員登録やらで無数に書くものなので、この書き方は知れてとてもよかったです。

MVC

今まで「MVCとは何たるか」はもちろん知っていたのですが、いまいちどのようなコードのことを指しているかよく分かっておりませんでした。

というのもこれも他の人の書いたコードの影響なのですが、Laravelでアプリを作る際、僕の場合共通化させたい処理はApp\Service\HogeService.phpという形でHogeService.phpに色々と処理を書くような作りをしてい
ました。

改めて調べてみたのですが、もともとはモデルが肥大化した時に一部処理を切り出す時にサービスなるものが使われたりするようですね。

僕の場合はモデルはモデル定義だけだったので、全くサービスクラスに切り出す必要はなかったのですが、今まで何も知らずに切り出しておりました。。恥ずかしい

行ってみれば今まで僕の書いたLaravelアプリはMVCではなくMVCSみたいな形になっていたんでしょうね。

次からモデルに処理を移動させてもっと分かりやすいコードを書いていければなと思います。

おわり

そんな感じで色々学ぶことが多かったサブスク決済開発でした。

新しいシステムの開発をすればするほど分からないことや勉強することがでてきますね。これ一生続くのかな。。。
もっとゲームとか飲みに行ったりとかしたいんだけどな

まあ頑張ります。ありがとうございました!