自分でアプリを開発し、サービスとして確立させたい
実際に自分で物を作るのが好きだから。
語学学習アプリなど作成してみたい。
また、モダンなフロントエンドの技術(Reactなど)をもっと磨きたいと考えている。
Webサイト解析アプリケーションの受託開発を行いました。
イメージとしては、Google Analyticsのようなプロダクトです。解析したいサイト内にScriptタグを挿入し、サイト内のユーザー行動を分析したり広告を挿入したりすることができます。
10名(自社9名)
プロジェクトマネージャー
テックリード
インフラ: 1
バックエンド:7
フロントエンド(デザイン・コーディング):1
※バックエンドエンジニアも一部フロントエンドやインフラを手伝っていました。
テックリード・インフラ・バックエンド
フルスタックエンジニアとして企画・要件定義以外のインフラ・バックエンド・(一部)フロントエンドを担当しています。
特にインフラは自身が社内唯一のAWS SAP(ソリューションアーキテクトプロフェッショナル)保持者として、設計、構築に深く関わっています。
前提
フルスクラッチからの開発案件のため、インフラに使用するクラウドサービスも一から選定する必要がありました。社内のベテランさん達は、オンプレミスのインフラに関する経験は豊富であったものの、クラウドに関する経験はあまりなかったため、AWS SAP保持者の自分が若手でありながらインフラ設計とサービスの選定を任されることになりました。
課題
実際にインフラをAWS上に構築するにあたって以下の課題点がありました。
取り組み
アプリケーション(ECS+Fargate)
耐障害性とスケーラビリティを担保し、保守運用を楽にするためEC2ではなくECS+Fargateを選定しました。
データ集積(API gateway + Lambda + DynamoDB)
Webサイト内のユーザーの行動情報(クリックした座標やコンバージョンなど)を保存するDBは、データ量が非常に多くなる可能性があること、厳密なトランザクション処理は求められないことを鑑みてNoSQLをデータベースに選定しました。DocumentDBかDynamoDBで迷いましたが、スケーリング性能と保守運営の容易さからDynamoDBを選びました。
また、DynamoDBへの保存処理を行うAPIは高いスケーラビリティを実現するためにサーバーレスであるLambdaを導入しました。
CluodFormationによるインフラのコード化
コンソール上での人的ミスを減らし、異なるAWSアカウント上でも同一の環境をすぐに立ち上げられるようにCloudFormationを使用しインフラをコード化しました。
エラー発生時の自動通知
Cloudwatch Logsで「Error」の文字列が検知された場合、自動でSlackにメッセージを送るLambda関数を作成しました。
Github ActionsによるCI/CDパイプライン構築
テスト、リンターを走らせる時間と、ステージング環境へのデプロイを行う手間と時間を削減するため、Github ActionsでCI/CDパイプラインを構築しました。
Github Actionsを選んだ理由は他のCI/CDサービスと比較し、コストが低かったためです。
また、Github Actionsのワークフローファイルの作成も一人で担当し、プッシュ時に自動でRspec, Rubocop, ESlint, Brakemanを走らせ、マージ時にステージング環境、本番環境にデプロイするようにいたしました。
工夫した点
前提
権限管理やバッチ処理等、幅広くバックエンドに関わっていましたが、主にアプリケーションのヒートマップ機能とチャットボット機能を担当いたしました。
課題
取り組み
JavaScriptでのヒートマップ描画
以下の方法でヒートマップを実現しました。
チャットボット機能のDB設計
複数のツリー構造を表現する方法(経路列挙、閉包テーブル、入れ子集合、隣接リスト)の中から検討し、保守性の高さから平方テーブルを選択しました。
実装コストを下げるためgemのclosure_treeを使用しました。
工夫した点
このプロジェクト詳細は公開されていません
このプロジェクト詳細は公開されていません
このプロジェクト詳細は公開されていません
自分自身で考え、行動できる環境。
自分がやっている仕事に意味があり、役に立っていると実感できる状況。