フィヨルドブートキャンプの自作アプリを終えて

フィヨルドブートキャンプ最後の課題である「自作アプリを作る」が無事完成し、最後のステップとしてアプリの内容とその振り返りをまとめました。

どんなサービスを作ったのか

今回はF-FORMというアプリを作成しました。

GitHub - hasehiro25/f_form

このアプリはドメインなどのサイト情報を入力することによって、問い合わせ内容をメールに転送するフォームを設置できるアプリです。

項目を増やす場合はアプリ側で設定が必要なく、HTMLでinputを増やせば項目を追加でき、CSSを追加すればフォームにデザインをあてることも可能です。 フォーム設置型のサービスは他にも存在しますが、機能がシンプルかつデザインをカスタマイズできるものはなかなかないので今回実装に取り組みました。 f:id:hasehiro25:20200716182205p:plain (デモサイトは こちら )

どんな経緯で作成したのか

フィヨルドブートキャンプは最終課題に自作アプリを作るというものがあるのですが、Getting Realに合わせたアイデアがなかなか思いつきませんでした。

そこで今回は駒形さん(メンターの方)の作りたいモノからアプリを作ることにしました。

"フォームを実装するのは地味にめんどくさく、メールの転送機能だけしてくれるシンプルなサービスが欲しい" というのが駒形さんの要望でした。また私自身も過去にフォームを埋め込む作業で痛い目を見ているので、フォームアプリをシンプルに設置できるのは魅力的だと思い、今回擬似的な請負ということで取り組みました。

アプリ概要

サイトのドメイン情報を入力することによってフォーム内容を転送するエンドポイントURLを作成します。そのURLへフォームの内容を送ることによってメールに情報が転送されます。自サイトにformのHTMLを貼り付ければ簡単にフォームを設置することが可能です。 f:id:hasehiro25:20200717173956p:plain CSSはこちらで用意したサンプルなので、自分のサイトに合わせてデザインを調整することもできます。

また以下の機能を使えば、自分の状況にあったフォームを作成できるように実装しました。

  • リダイレクト先を設定できる
  • reCAPTCHAを簡単に利用できる
  • JavaScriptで簡単なvalidationが可能

*注 フォーム内容は受け付けたことを残すためにデータベース上に保存されますが、ユーザーは内容を見ることができません。将来的にユーザーもアプリ上で確認できるようにできたら便利かもと考えたりしてます。

自作アプリ開発を振り返ってみて

改めて書き出してみると当たり前の内容しか書いてないと思いましたが、個人的に今後忘れたくない項目として書き残したいと思います。

「他者の欲しい」の把握は難しい

今回は請負を擬似的にやってみたのですが、プロダクトオーナーの要望を汲み取るプロダクトオーナーが必要な機能の提供と調整プロダクトオーナーのためかエンドユーザーのためかを考えされられました。

大まかな流れは共有していたし、細かい事項も聞いていたので完成イメージが大きくズレるとは思いませんでした。しかし、開発しているうちに「こんな機能があった方が便利」という提案をしましたが、「シンプルさ優先」ということで実装が見送られました。

初期段階でイメージが合致していても途中から本質を見失ったり、本当に実装したいものは何かが揺らいだので、頻繁に確認を取ったり、開発途中のデモをしっかり行ってお互いの認識のズレをなくすのは重要だと感じました。

作る前に小さく実装してみることは大事

実装するアプリの概要が決まり、なんとなく実装する方法は思いついていたのですが、本当に動作するか全く確証がありませんでした。特に今回はサーバー間でやりとりがあったため、実装できないのでは?という不安もありました。

そこでメインとなる機能を最低限実装したアプリとそれを試すためのサブアプリを作り、herokuにデプロイして実際に動きを確認してから開発に取り込みました。

複雑な機能を実装する場合、汚かったり壊れても問題ない小さなプロトタイプでいろいろ実験して内容を把握した方が開発しやすいように感じました。試作を作る分時間がかかるのですが、複雑な実装をする場合、理解が浅いとどこがうまくいってないのか把握しにくく、より時間がかかるように思いました。

自信を持てないうちは小さく動かしてみる、地味に重要だと思います。

この先大きなプロジェクトに複雑な機能を実装する機会があれば、最小の単位でまず組み立てて理解を深めたり、問題がないかしっかり検討しながら実装したいと思いました。

進捗の視覚化(issueポイントは重要)

スクラムを回す時にissueにポイントを振り分けることを学んだのですが、一人で開発するから特に必要ないと軽い気持ちでポイントを振りませんでした。

その結果以下の2点が曖昧になり、進捗管理が難しくなりました。

  1. 毎週どのくらいの開発ペースが出ていたかわからない
  2. プロジェクトがいつ終わるのか算出できない

なんとなくは把握していたものの、データが残っていないので本当に効率よく開発できていたのか今となっては確証が持てません。

特に2番目に関しては途中から振ってないことに後悔しました。

計画通りに実装できればの終了目安はありましたが、実装するうちに「これを考慮し忘れた」「この実装に思った以上に細かいタスクが多かった」など変更が結構ありました。その時、どれくらいタスクが増えたか、どのくらい期間が伸びるのかを全く把握できてないことに気づきました。その結果いつに終わるのかが明確に出せず、無駄な不安や悩みが増えたように思います。

最初からしっかり数値を出しておけば、少なくとも今どれくらい進んでいる(遅れている)かを数字で把握することができ、開発が順調に進んでいるのか判断できたのではと思います。

今後実装したい機能

  • JavaScriptをテストできるようにしたい

    • 手動で毎回テストが大変。フロントエンドでテストをして、どう1つのファイルにまとめるか考える
  • ブロックリストの作成

  • slackなどの外部サービスとの連携
  • メールサーバーの仕組みを学んで、実働できるサーバーを整備
    • sendgridだと送信に上限があるので、メールの仕組みから勉強して、ベストな運用環境を考えたい(確実に届かないとまずいため)

最後に

今回の開発を通して、自分ができること、できてないこと、何が重要なのかを少し掴めたような気がしました。特に認識のすり合わせ リソースの管理が自分の中で今後課題となりそうです。

またGetting Realの考えをもっと深く理解したいと思いました。先日のミーティングで、自社開発でも受託開発でも、具体的な問題に適した実装をするサイクルが繰り返されるとお聞きしました。 私自身問題を具体的なレベルに落とし込む ことが苦手なので、Getting Realをしっかり読み直して、問題発見とその解決方法、それがベストで本当に問題が解決できているのかを日常レベルで意識できるようにしたいと思います。

最後に、卒業まで全力でサポートしていただいた町田さん、駒形さんをはじめとするフィヨルドブートキャンプ関係者の方々に感謝申し上げます。フィヨルドブートキャンプのおかげでエンジニアとして自信を持てる第一歩を踏むことができそうです。

約10ヶ月間大変お世話になりました。

ありがとうございました!!