kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

フォームについて考える

お問い合わせフォームを作る機会があり、作ってみたら予想以上に時間がかかったので、考えてみました。

サーバーサイドで作成

いつもPHPでWEBサイトを作成していたため、PHPで作成しました。

デザイン案のHTMLをphpに移植して動作するように作る過程は以下の内容になります。

  • HTMLをPHPに変換
  • 確認画面作成(戻る場合も考慮)
  • フォームの値チェック
  • 受付メールの送信
  • DBに保存(必要に応じて)

これだけを作るのに1~2週間かかってしまい、かなり反省した案件でした。(環境とライブラリの影響もありますが、PHPerとして反省です)

時間がかかった部分は以下の内容ですが、ほぼすべての作業といっても過言ではないです。

  • サーバーの環境確認
  • ミドルウェアのルーティング設定
  • HTMLからPHPに変換して表示確認
  • リンク確認
  • validate確認
  • メールのアカウント確認
  • DBへのアカウント確認
  • サーバーが本番運用中だったため、リリースが大変だった

クラウドに慣れてたため、検証作業用にサーバーをコピーして試していたことができずdockerで動いていた内容もサーバーでは動作せずとリリースにかなり焦ったこともあり、レンサバの大変さを再認識しました。

サービスのようなスケールを考えた構成は料金的に難しいのも理解できるので、料金的にレンサバになることが多いのも理解できます。

ただ大変な分、時間がかかり開発費がかかるというジレンマを抱えた感じになるのがつらい。

ということで、どうにか簡単にしたい。

今の世の中ならなにかあるだろうと模索しているところです。

サーバーレス aws

lambdaとapi gatewayとsesで十分期待した内容ができそうです。

認証周りの検討が必要がそうですが、api gatewayにjwt利用した認証があったような。と調べているところです。

lambdaとapi gatewayの部分が動作するところまでは問題なくできました。

設定するまでをどう簡略化するか悩みましたが、コマンドできるツールを作っている人もいるので、一括で作るまで作れそうな気がしてきます。

awsを使ってきた自分としては一回この構成で作って安定するか試したいところです。

参考

hiromode.hatenablog.com

supereasyforms.com

サーバーレス firebase

firebase functionsを利用する方法も良さそう。

サンプルを自分でも作成してみましたが、楽ですね。

アクセス数が少なければhostingもfirebaseに任せてしまってもいいかと思っています。

現在は無料版ではfunctionsが利用できないため、blameプランに変更する必要がありますが、無料枠の分でおさまりそうな内容が多いと思っています。

gmailのアカウントでメール送信でなく自前のアカウントで送信する場合はメールアカウントを追加しておけばいけるのかな。確かスプレッドシートでは追加しておけば利用できたはずだからいけるだろう。

参考

qiita.com

スプレッドシート

一番最初に考えたのは、スプレッドシートに書き込んでgoogle apps scriptで時間クーロンでメール送信すれば良さそう。でした。

実装してみてないですが、認証が必要ないなら一番簡単な気がしてます。

APIの制限はあるでしょうが、そこまで問い合わせフォームが悪用されない限りは大丈夫でしょう。

まだ詳しく探してないですが、簡易的なのはいくつかありそうです。簡単だな。。。

複雑なシステム以外はフロントエンドに注力したい

HTMLからサーバーサイド用のプログラムに変換するだけでも時間がかかり、共通化する時間もかかる。DBが入るだけでテストも大変になる。

本質は利用者へのサービス向上が目的だが開発工数がかかるだけ、企業にも利用者にも負担がかかるだろう。

できるだけ早く簡単にしておくだけで、機能の導入がスムーズになるはずである。

企業に導入する場合は、awsやfirebase, スプレッドシートなどの理解がありアカウントを作ってもらう必要がありそうだが機能面で分離できているため開発が圧倒的に楽になる気がしている。

クレジットカードでの決済が必要だと思うが、一般企業ならこのあたりが緩くなっていると開発者として選択肢が広がりありがたい。

いくつかサンプルを作って導入できるようにしておきたい。

サービスを組み合わせるだけでできることが本当に増えていると思う。置いていかれている感が否めないが、取り戻していきたい。