# プロジェクトについて
- 当サービスは、就活生がユーザー登録を行い、サイト内の掲載就活イベントにエントリーすることができるサービスである。そして、イベントエントリーを介してユーザーと企業(クライアント)をマッチングさせるサービスである。
- 主にRuby(Rails), Javascript(TypeScript, React)で実装を行う。
- チームメンバーは、以下の通り。
- 開発エンジニア:5 ~ 7人(時々により人数の変動があります)
- PM:1人
- 担当フェーズ
- タスク毎に要件定義から保守運用まで一気通貫して行う
# 比較的大きめのタスク
- ユーザー情報に係る学校マスタ(全国の短大, 大学, 大学院の学校名, 学部, 学科の情報)の更新
- gem nokgiriを使用したrakeタスクによりWEBスクレイピングを行う
- 抽出データをDBと突合することで差分を抽出しつつ更新を行う
- 入社後1ヶ月経った頃に初めて取り組んだ大きめのタスクということもあり反省点が多いと感じた。
- 当時はワンタイムな処理でしかタスクを完遂させることしかできなかったが、理想は学校情報に変更があるたびにそれが学校マスタに反映されることなので、今思うと以下のような設計ができればよかったと感じる。
- スクレイピング&HTML解析を容易に実行することができるpythonのBeautifulSoupというライブラリを使用してスクリプトを組む。
- Rails側で学校マスタ更新用のエンドポイントを作成。
- スクリプトでは変更差分の有無の確認、及び変更がある場合はその内容をRailsで用意したエンドポイントにPOSTする。
- また、スクリプトの処理として、解析内容は特定のフォーマットに沿った内容でS3に保存し、次回の変更差分の有無の確認はそれを読み込んで行う。初回実行時だけはCSVを事前に用意する。
- API GatewayでS3にアクセスするためのインタフェースを作成。
- スクリプトは、AWS Lambdaで定期実行する。
- ERBで構築されたイベントエントリーフォームをReactで書き直す
- 自分と他フロントエンドエンジニアの合計2人で行う
- 自分の担当は「エンドポイントで必要になるデータの解読」及び「フォームで必要になるオプションの値の形成」である
- イベントエントリーに係る処理はドメインロジックにあたり、複雑に分岐が発生していてコードの理解に苦戦した。
- EFOによる会員登録フォームのCVR改善
- デザイン及び登録プロセス変更によってCVR改善を目指す
- PMと相談しながらプロセスを数段階に分けてABテストを繰り返すことで変更を徐々に加えていった
- CVまでのフォーム離脱の確認は、トラッキングデータをFirebase Functionsで作成したエンドポイントにPOSTすることでFirestoreに溜まるようにし、それを別途設置したviewで可視化することで行った。
- POSTは全てBeacon APIを使用。そのため、非同期かつレンダリングをブロックしない。
- 仮にFunctionsが死んでいて500エラーが起きても、ユーザー側への影響はない。
- ユーザーのマイページ上でのイベント参加日程変更機能作成
- 特別難しい実装をしたという話ではないが、サイトのドメインロジックでありサイト全体の機能に大きく影響するポイントになるので、慎重になる大事なタスクだった。
- オンライン模擬試験ツールの作成
- バックエンド2人(自分含む)、フロントエンド1人、デザイナー1人、PM1人の小数チームで取り組んだ。
- このとき、自分は開発に加えてディレクション業務を兼任した。PMに対して要件定義を行い、設計からタスクの優先度決定及びその分配、コードレビュー、そしてそれらの進捗管理を行った。
- このタスクでは、バックエンドとフロントエンドの実装は完全分担で行った。しかし、実装上でトラブルなど起きることは無く非常に円滑に事を進めることができた。
- このようなケースでは、例えば、バックエンドとフロントエンドのデータ連携部分となるAPIの入出力の部分で議論が起き足踏みすることがあると伺ったことがある。
- 今回そのようなことが無く円滑に連携して業務を行えた理由は、以下だと考える。
- 初めの設計の段階で「どのようなデータが」「どのような形式で」「どのタイミングで必要になるか」をエンジニア3人でしっかり共通理解を構築し、ある程度具体的な形で設計できたこと。
- 実装していく中で流動的に初期設計内容と異なる内容で実装したいというケースは必ず現れるため、チームの定期的なMTG以外でもエンジニア3人で細かいコミュニケーションを積極的に行うようにしていた。
- コミュニケーションの内容は、主にエンドポイントのデータ形式の変更についてや、実装の着手順の調整。また、変更が発生する度に、ドキュメントにその内容と簡単な経緯を残した。
- ユーザー情報取得に係る新規フォームの作成
- クライアントへのユーザー送客最適化に伴い、営業を行う部署と協力し、要件定義から設計、実装まで一貫して行う。
- 当タスクは、比較的取引の多い複数のクライアントの要望を基に発生したものであり、ユーザーから取得したい情報が具体的にクライアントから提示されていた。そのため、要件定義での営業部署へのヒアリングの中で、クライアントとの実際のやり取りの内容を見せてもらって機能設計の参考にさせてもらったこともあった。
- Railsのバージョンアップ(5.2系→6.0系)
- プロジェクトメンバー全員(6,7人程)で分担して行う
- これに伴って使用gemのバージョンアップを先に行う
- Railsのバージョンアップが必要なgemについては、Railsのバージョンアップと同時に行う。