社会の本質的な課題に向き合い、技術を通じて具体的な解決策を提供するサービスに携わりたいです!
もし一生困らないだけのお金を手にした事を想像した際、社会に貢献出来る事がしたいと思いました。
現代社会が直面する複雑な問題に対して、技術的なアプローチで立ち向かいたいです。
自分自身、壁にぶつかっても粘り強く考えて別の道を模索したりするのには自信があります。
そのため複雑な課題に対しても立ち向かって行けると考えています。
環境問題、格差是正、高齢化社会への対応など、これらの課題に対して、貢献できるようなサービス開発に携わりたいです。
そして自分自身も様々な事を吸収して、一歩一歩を確実にソフトウェアエンジニアとして成長していきたいです。
もし、少しでもご興味を持っていただけたら面談の機会をいただけると嬉しいです。
宜しくお願いいたします。
このプロジェクト詳細は公開されていません
1万社以上が利用するアルバイトや派遣領域の採用管理システムのWebエンジニアをしています。
要件確認・ドキュメント作成・テストケース作成・実装・結合テスト実施など一連の流れに沿いアジャイル開発をしています。
具体的には、APIレスポンスの設計・実装や非同期処理のパフォーマンス改善、管理画面の実装などバックエンド・フロントエンド問わずしています。
開発体制はスクラム開発でPM、QA、EM、デザイナー、フロントエンド・バックエンドエンジニア(外部企業エンジニア含む)合わせて25名で構成。
エンジニアは1~6名でドキュメント作成・テストケース作成・実装・結合テスト実施まで行い、各作業でPM, QA, EM, デザイナーと相談・レビューを行いながら、タスクを進めていきます。
その中でフロントエンド・バックエンドエンジニアを担当しています。
不具合修正、パフォーマンス改善、機能開発を行っています。
連携する採用媒体を持つ企業にAPIを用意してもらい、APIの登録・管理を行う。
「連携の流れ」
【課題・問題点】
採用媒体から応募者を取り込んで、管理する機能があります。
取り扱う採用媒体を新規に追加する際、クローラを書いて手作業で追加していました。
そのため追加するのに工数が多くかかるという課題がありました。
そして、すでに主要な採用媒体は取り扱われているため、地方で取り扱われていてユーザ数の多い採用媒体を少ない工数で追加し販路を拡大しようという策略もありました。
これらの課題解決・策略実施するためバックエンド2名、フロントエンド1名で新機能実装を行いました。
その中で自分はフロントエンドを担当しました。
【使用技術、実装方法】
React, TypeScript, React Routerで実装された管理画面に新たにパスを切り下記の画面を加えました。
これらの画面をデザイナーと協力して、Figmaを活用しながらを新規作成・実装部分を担当しました。
【工夫した所、及び成果】
公開範囲フォームのデータ構造等、詳細な実装は下記の記事で解説しています。
https://techlog.n2i.jp/entry/2023/07/03/110236
【振り返ってどう思うか・学んだ点】
データ操作の責任をフロントエンドに持たせてしまうと、処理が複雑になりパフォーマンスにも影響するのでなるべくバックエンドに持たせるべきだと思いました。そしてフロントエンドでは受け取ったデータを表示のみに責任を持たせるべきだと思いました。
チームで開発する上で曖昧な要件、受け渡すデータ形式について事前に話しておく事で実装後の手戻りも減らせると思いました。
取り扱える採用媒体一覧で特定分野の採用媒体の表示を各画面で制御する。
【課題・問題点】
特定分野の採用が伸びてきおり、該当する採用媒体を追加して販路を拡大するという話が出てきた。
しかし、その採用媒体の取り扱いしている事を利用者様に知られると、サービスのイメージに影響する可能性がありました。
そのため、特定の企業でのみしかその採用媒体は表示されないよう、管理画面から制御する機能実装を行いました。
これらの課題解決・策略実施するためバックエンド2名で特定の採用媒体から応募者を取り込む機能を開発、管理画面から追加した特定の採用媒体の表示を制御出来る機能開発を行いました。
自分は後者の特定の採用媒体を表示を制御出来る機能開発を担当しました。
【使用技術、実装方法】
Ruby on Railsで構築されたAPIモードのアプリケーションに下記の変更を行いました。
【工夫した所、及び成果】
【振り返ってどう思うか・学んだ点】
既存機能への機能追加はコアな機能であるほど影響範囲は膨大になると学びました。そしてその際は使用される各メソッドを追い把握した上で実装を進める事でのちに発生する不具合・考慮漏れを軽減出来ると思いました。
泥臭いがメソッドを書き出して追うことは大事だと思いました。
フロントエンドにデータを持たせることは負債に繋がると思いました。
毎時間実行される、通知処理のworkerパフォーマンス改善と応募者検索時のslow query改善
【課題・問題点】
各通知処理が重く、worker内で複数の通知処理が一度に並列で実行されるため 処理が集中して負荷が発生 していた。そして NewRelicで高負荷アラートが発生 していた。通知処理の部分を確認すると将来的に応募者のデータが増えた際にメモリを圧迫する箇所が見られた。検索処理で 重くなるクエリー も見られた。
これらの課題を解決するためにパフォーマンス改善を行いました。
個人で担当しました。
【使用技術、実装方法】
Ruby on Railsで構築されたAPIモードのアプリケーションに下記の変更を行いました。
worker.perform_in(rand(1..DELAY_MAX_SEC).seconds, t)
【工夫した所、及び成果】
【振り返ってどう思うか・学んだ点】
ユーザ数が多いサービスではパフォーマンスを気にかけた設計を行わないと、ボトルネックが発生する事が分かりました。これは個人開発では学べない事なのでとても楽しくもあり、大事だと思いました。
そしてそれを地道に解消する事がかなりのパフォーマンス改善につながる事を学びました。
このタスクを行う前はバックエンドの知識が乏しかったのですが、SQLを読んだりN+1とはどういう状態なのかループ処理は大量のデータを取り扱う際メモリをすぐに圧迫してしまうという事を学びました。
既存の仕様に変更なくagoraのバージョンを上げる
【課題・問題点】
Chromeバージョン更新時、agoraを用いた ビデオ通話機能が使えない事案が発生 していた。
agora v3の サポート期限切れ が近づいており、このままではChromeバージョン更新によりビデオ通話機能が使えなくなる事が予想されました。
ビデオ通話機能はオプション販売されている機能でもあり、売り上げに繋がるためサポートが切れる前に更新する必要がありました。
個人で担当しました。
【使用技術、実装方法】
React, TypeScript, agoraライブラリで実装されたビデオ通話機能に下記の変更を加えました。
【工夫した所、及び成果】
【振り返ってどう思うか・学んだ点】
あまり使用頻度の少ないコミュニティのライブラリ等を使うと負債に繋がると思いました。
公式のライブラリで機能を作る事が大事だと学びました。
ドキュメントを読み込まないと知らないうちにアンチパターンで実装、重複料金が発生し損失に繋がるので気を付けたいと思いました。
有名なライブラリにも自分達が開発するサービスと同じで不具合がある事を学びました。
採用管理システムを短期間で網羅的にテストを行い不具合を洗い出し、修正を行う。
テスト実施者 9名
強化テストで検出された不具合修正
【課題・問題点】
共同開発会社からサービスの品質低下について問われて、売り上げが下がる事が発生。
そのため、品質強化の一環として不具合を洗い出し修正する事が行われた。
【工夫した所、及び成果】
結果的に75件の不具合を検出し、その一部を修正し品質強化に貢献しました。
【振り返ってどう思うか・学んだ点】
手作業で行うテストは繰り返し行う事が大変なので、テストコードでカバーしてなるべく減らしていくのが大事だと思いました。