Classi 株式会社(2019/09〜2022/02)職歴詳細
内製問題レコメンドエンジンとオンラインテスト機能との機能連携 (2020/10-2022/02)
概要
- 機械学習エンジニアが開発した問題レコメンドエンジンを、オンラインで生徒がテストに取り組むことができる機能と連携できるように改修した
- もともと同様のレコメンドができる外部システムと連携していたが、チューニングのやりやすさや費用面、機能の拡充のために内製レコメンドエンジンを新たに組み込むことになった
- フロントエンドは外部システムと連携した画面及び機能を流用し、サーバーサイドのみ改修している
- もともと同様のレコメンドができる外部システムと連携していたが、チューニングのやりやすさや費用面、機能の拡充のために内製レコメンドエンジンを新たに組み込むことになった
- この改修により、生徒がテスト後にその成績やテスト分野をもとに、問題がレコメンドされる。これにより主体的・効率的に学習し、自身の苦手分野を克服できるようになることを目的としている
- スクラム開発にて実施。機械学習エンジニアとの連携を密に行い、開発を進めた
開発体制
- PO 1 名
- Rails エンジニア 7 名
- 機械学習エンジニア 2 名
- データサイエンティスト 1 名
- QA2 名
採用技術
- Ruby on Rails
- FuelPHP
- RSpec
- Sidekiq
- Terraform
- AWS
- ECS
- CloudFormation
- Aurora MySQL
- CircleCI
課題
- 連携先のオンラインテスト機能は、歴史的経緯からリポジトリとサーバーがそれぞれ 3 つ、サーバーサイドの開発言語が PHP と Ruby に分かれていた
- このまま機能改修を行うと今後の追加開発や保守が困難になると判断し、連携に関わる部分を 3 リポジトリのうちもっともメンテナンスされているリポジトリとサーバーへ、言語は当時の社内の推奨である Ruby にまとめることを決定した
取り組んだ内容
以下の開発タスクについてペア/モブプロで進めた。特に ECS Task Scheduler や Sidekiq の構築については別プロジェクトで経験があったため設計や方針決めを主体となっていった。
- PHP での cron 定期バッチを Ruby on Rails & ECS Task Scheduler に移行
- バッチ処理を Ruby で再実装
- Terraform で ECS Task Scheduler に必要な関連リソースを構築
- 動作検証
- PHP 独自 worker から Ruby Sidekiq への移行
- 非同期処理を Ruby で再実装
- Sidekiq 環境の構築
- 動作検証
- 連携に使用する API のリポジトリ・サーバー統合
- 対象のコードのリポジトリ移行
- 対象 API を統合先のサーバーで動作検証
- DB テーブル設計
- レコメンドエンジンの API をオンラインテスト機能のサーバーサイドから呼び出すよう実装
- QA チームと連携し、QA 実施
オンラインテスト印刷機能改修 (2020/10-2020/12)
概要
- 脆弱性や使用箇所の少なさからもともと印刷に使用していた PHP のライブラリを取りやめ、フロントエンドでブラウザの印刷機能を使い、実装した
- 参画エンジニアの技術スタックや工数からフロントエンドでの実装に切り替えた
開発体制
- PO 1 名
- エンジニア 2 名
採用技術
- JavaScript
- React
- FuelPHP
- Ruby on Rails
- AWS
- ECS
- Aurora MySQL
- CircleCI
課題
- ブラウザ(Chrome、IE、Edge、Safari)ごとの Web ページ印刷の差異が大きかった
- CSS や HTML の調整により、ブラウザごとの差異を吸収することで対応した
取り組んだ内容
要件整理や設計、大枠の実装までは Slack などの通話を使いペアプロで進め、その後個々での実装・検証作業はチャットでの状況共有をしながら進めていった。
- 旧印刷機能の要件を整理
- 改修の設計
- フロントエンドでの印刷機能実装
- サーバーサイドでのテストごとの印刷回数記録 API 実装
- 動作検証
- QA チームと連携し、QA 実施
- リリース、保守
サーバー移行 (2020/06-2020/10)
概要
- もともとはitamaeというツールと AWS CodeDeploy を使い、EC2 のプロビジョニングとデプロイを行っていた。しかし、構成の変更やスケーリング、さらにリリースの度に時間がかかるかつ不安定という課題があった
- オンライン授業によるサービスの高負荷への対応のため変更を素早く行いたいが、その点が大きなボトルネックとなっていたため課題を解決するために Fargate を利用した ECS への移行に踏み切った
- 2 機能の EC2 から ECS への移行に携わった
- この移行により、デプロイにかかる時間が短縮され、スケーリングも容易になった
開発体制
- プロジェクトリーダー 1 名
- エンジニア 10 名
- 機能ごとに都度 2 名ずつのチームを組み移行を進めた
採用技術
- Ruby on Rails
- Sidekiq
- Docker
- ecspresso
- Terraform
- Fluent Bit
- AWS
- ECS
- EC2
- CircleCI
課題
- 1 機能の移行の中で機能連携している外部会社サービスがあることに気づいた
- もともと担当していなかった機能であり、主でメンテナンスを行っているチームも無いため、事前に把握できていなかった
- そのため、移行による影響範囲の把握と外部会社とのリリース調整を行う必要があった
- 移行の中で、アプリケーションの他に、EC2 で動作していた夜間バッチ処理があることに気づいた
- これを ECS で動作させるために、ECS Task Scheduler を利用した
取り組んだ内容
最初の 1 機能の移行は経験者とペアを組み概要と流れを教わり、プルリクエストベースで移行作業を確認してもらった。 次の 1 機能は新卒メンバーと組んだため、ペアプロで作業の流れを伝えながら、不明な箇所については答えながら多く手を動かしてもらうことを意識した。 2 機能目は外部会社のサービスと連携していたため、外部会社と移行後の動作検証やリリースタイミングを打ち合わせで調整しながら、移行を進めた。
- Angular/Ruby on Rails で開発された 2 機能の本番環境サーバーを EC2 から ECS へ移行
- CD ツールを CodeDeploy から CircleCI に移行
- Terraform、ecspresso で移行先の ECS 及び関連リソースを構築
- EC2 cron で動作していた定期バッチ処理を ECS Task Scheduler に移行
- Fluent Bit を使ったログ設定
- 機能連携している外部会社サービス担当チームとのリリース連携・調整
- 動作検証
- Route53 加重ルーティングでの段階的なリリース
- QA チームと連携し、QA 実施
EOL 対応 (2020/04-2020/09)
概要
- 5 年ほど運用されてきたサービスだったが、新規機能開発が優先的に行われ、EOL からのバージョンアップやサーバーの運用課題などに対応できず残り続けたままであった
- コロナ禍によるオンライン授業の負荷により運用面の課題が浮き彫りになったことから、運用面の改善に取り組むプロジェクトが複数立ち上がった
- その中でフレームワークの EOL 対応に携わった
- この改修により、フレームワークのバージョンアップによるセキュリティ対策や、新しい機能の追加が可能になった
開発体制
1. フロントエンドの EOL 対応
- エンジニア 3 名
2. サーバーサイドの EOL 対応
- エンジニア 2 名
採用技術
- jQuery
- AngularJS
- Angular
- Ruby on Rails
- RSpec
- React
- CircleCI
- AWS
- EC2
- ECS
取り組んだ内容
1. フロントエンドの EOL 対応
- A 機能について以下アップデート作業を実施
- jQuery v1 → v3
- AngularJS v1.2 → v1.8
- B 機能について以下アップデート作業を実施
- Angular v8 → v10
2. サーバーサイドの EOL 対応
- C 機能について以下アップデート作業を実施
- Ruby on Rails v4.2 → v5.1
工夫
1. フロントエンドの EOL 対応
- 社内のフロントエンドエキスパートに随時詰まったところは確認しながら作業を進めた
- モブプロでアップデート作業を進め、知見を共有しながら進められるようにした
2. サーバーサイドの EOL 対応
- メンテナンスされていなかった機能だったためアップデートの中でバグも多く見つかったが、アップデートによるものか既存のバグか master ブランチのアプリケーションと比較し、切り分けながら進めた
- ジュニアエンジニアと組んでいたため、慣れている Rails に関わる部分はなるべく任せ、フロントや CI に関わるアップデートでの差異やバグの切り分けを主に担当していた
保護者向け連絡機能開発 (2019/09-2020/04)
概要
- オプションサービスとして追加する保護者向け機能の開発に携わった
- 保護者が先生へ子どもの欠席・遅刻・早退を連絡できる機能
- β 版開発から正式リリースまでの開発及びリリース後 1 ヶ月間運用に携わった
- 先生は PC から、保護者はスマートフォンアプリの WebView から同じ Web サービスを利用
- スクラム開発にて実施
開発体制
- プロダクトマネージャー 1 名
- ディレクター 1 名
- エンジニア 3 名
- デザイナー 2 名
採用技術
- Ruby on Rails
- RSpec
- Angular
- NgRx
- Karma
- Jasmine
- AWS
- CodePipeline
- ECS
- Aurora MySQL
- CircleCI
取り組んだ内容
以下について取り組んだ。Rails 及び Angular は経験が浅かったが、リーダーのエンジニアからペアプロで随時学んだり、公式ガイドを空き時間に読みながら開発を進めていった。
- フロントエンド・バックエンドの開発
- ペア/モブプロ
- TDD での開発
- スプリントレビューでのデモ実施
- モノレポを共有している他チームや QA チームとの連携