現職ではtoC向けのWebサービスを複数受託開発し、フロントエンドからクラウドインフラまで一気通貫で担当しています。
前職では自社製の営業支援サービスの新機能開発やRDBテーブルの再設計・APIレスポンスの高速化などを主として取り組んでいました。
フルスタックエンジニアと言えるかと思います。
一番自信のある領域で、Ruby on RailsとPHP Laravelの経験が主になります。
品質を担保するためにテストコードと一緒に実装を進めることができます。
RDBについてはものすごく強いということはないですが、アプリケーションコードのバリデーションだけでなく外部キー制約・ユニーク制約・NOT NULL制約などをしっかりと活用することでデータの不整合を未然に防ぐ、また、検索対象カラムにインデックスを貼って高速化したり、無駄なクエリ発行を回避する記述を意識することはできます。
よりRDBに精通することは自身の今後の課題だと思っています。
クラウドとコンテナ技術の経験があります。
クラウドの経験はAWSメインです。最近はCloudFront+S3でフロントエンドを、APIGW+Lambda+DynamoDBでサーバーレスバックエンドを構築することが多いです。
コンテナ技術はDockerfileやdocker-compose.ymlを0→1で書く、また、CIの設定ファイルを書くことができます。
Kubernetesはそこまでですが、ステージング環境でコンテナごとのリソースを増減する、 kubectl exec
でコンテナ上でコマンドを実行する程度のことは経験があります。
TS+React+Redux・Vue+Vuex・AngularJSの実務経験があります。
直近一年はReactを使ったtoC向けWebサービスを0→1フェーズから構築することをメイン業務としてきました。
その他私の強みとしては技術負債・レガシーをできるだけ解消しようとすることだと思います。
例えば前職ではLinterやフォーマッターが導入されていない (正確には導入していたが機能していない) 状態だったので私がメインプロジェクト外で導入を進行しました。一度にすべてのLintルールをONにして変更を加えることはあまりに差分が多くなり難しかったので、Pull Requestを細かく分けルールを1つずつONにしていきました。
段階導入を行ったことで他のメンバーに負担をかけすぎない形でコーディングルールの統一ができたと思います。
また、DBにMySQLを採用していますが私が参画した時点で外部キーをはじめとする制約がほとんど存在しない状態で、これについてはさすがに全体を改善することはできませんでしたが、自分が担当した機能領域についてはCTOの確認をとりつつ不正レコードを削除するデータパッチを当てて外部キー制約を追加しました。
前々職ではDocker採用実績はありませんでしたが私がDockerfile・docker-compose.ymlの整備、そこからのCI/CD環境の構築を行っていました。
これらは特に高度な技術力を必要としない取り組みでしたが、他の開発メンバーはなかなか着手していない様子だったので、こういった改善を実行に移すことは私の強みなのかなと思っています。
- PHP
- Ruby
- JavaScript
- TypeScript
- Java
- Laravel
- Ruby on Rails
- Vue.js
- React + Redux
- AngularJS
- AWS
- Docker
- Kubernetes
- VirtualBox + Vagrant
- TypeScript+React
- S3+Cloudfront
- Node.js+TypeScript+APIGW+Lambda+DynamoDB
- AWS CDK
- PdM1名
- フルスタックエンジニア2名 (私)
- フルスタックエンジニアとしてフロントエンドからクラウドインフラまで一気通貫で担当しています。
- フロントエンドもバックエンドもTypeScriptを採用した「フルスタックTSなスタック」で開発しています。
- インフラもAWS CDKを採用し、TypeScriptでInfrastructure as Codeを実現しています。
- Ruby (Rails)
- TypeScript (React + Redux)
- MySQL
- AWS
- EKS/RDS/Elasticache/S3など
- Docker
- GitHub
- チームリード兼フロントエンドエンジニア1名
- フルスタックエンジニア1名
- バックエンドエンジニア1名(私)
- デザイナー1名
- QAエンジニア1名
- Webバックエンド領域をメインで担当しました。
- Ruby on Railsのアプリケーションレイヤー開発。RSpecを用いたテストケース記述。
- MySQLテーブル設計・改修。
- SQL実行時間の計測・チューニングを行いました。
- パフォーマンス要件がシビアだったため。
- 集計結果を保存するテーブル非正規化設計を行いました。
- 改修前、レスポンスに20~30秒かかっていた機能を2秒程度に短縮しました。
- バックエンドメインでしたが、担当機能に紐づくReactフロントエンドの改修も一部担当しました。
- PHP(Laravel)
- JavaScript(Vue.js)
- AWS ECS Fargate
- AWS ALB
- AWS CodeDeploy
- AWS S3
- AWS Cloud Front
- Docker
- Bitbucket Pipelines
- リーダー兼バックエンドエンジニア1名
- フロントエンドエンジニア1名
- フルスタックエンジニア1名(私)
フルスタックエンジニア
- Vue+Vuex+VueRouterを用いたSPA実装
- Laravel APIサーバの設計・実装
- マッチングサービスのためLaravelのGuard機能を使ってマルチ認証を実装しました。
- クラウド・CI領域については特に私が主導しました。
- Dockerfileの作成、CIによるECRへのDockerイメージ自動プッシュ環境の整備、ECS Fargateの導入・整備を行いました。また、CodeDeployと連携を行いBlueGreenデプロイを実現しています。
自社サービスの SNS を 0→1 開発中。
- iOS, Androidアプリ
- PHP Laravel
- Postgres
- Heroku
- AWS S3, CloudFront, SNS
- Elasticsearch
- BitbucketPipelines CI
- iOSエンジニア1名
- バックエンドエンジニア2名(私)
バックエンドエンジニア
- RDB設計、 Laravelを用いたAPIサーバの設計・実装を行っています。
- インフラ領域は特に私が主導しています。チームの人数が少数であったことから、サーバ運用の手間を極力減らしたいと思い、Herokuをメインとして足りない機能をAWSのサービスで補うというインフラ選定を行いました。
- 開発環境・本番環境構築・AWS S3/CluoudFront/SNS のセットアップ・AWS IAMの権限設定等を行いました。
- 開発環境はDocker化を行い、AWSのサービスもLocalStackでモック化し、ローカルで開発を完結できるよう整備しました。
- 位置情報を含めた柔軟な検索が必要となったため、Elasticsearchをキャッチアップし導入しました。ローカル開発環境はLocalStack、本番はHerokuのBonsai Elasticsearchアドオンを使用しています。
- BitbucketPipelinesを用いてPhanによる静的解析・PHPUnitによるテスト→Herokuデプロイを行うCI環境を整備しました。CI用のDockerfile作成も担当しました。
発注元の自社サービス改修プロジェクト。
- Cordova モバイルアプリ
- Java Struts2
- MySQL
- フルスタックエンジニア。
- Cordova/Monaca を用いたモバイルアプリ開発、Java を用いた API サーバ開発を行っていました。
- 社内で私一人で担当していたため、要件定義からテストまで従事しており、要件や納期の調整も行いましたので技術以外の面も伸ばせたかなと思います。
- Cordova は要領を掴むまでかなり苦戦しましたが、バックエンド一辺倒だった自分のスキルの幅が広がった点は良かったと思っています。
強い静的型付け+関数型パラダイムを持った言語に興味があります。
単純に業務で触る機会がない言語への興味本位ということもありますが、上を満たすような言語は一人で書いていてもコンパイルエラーを通じて機械的にコードレビューを受けることができるので自己成長につながるとも考えています。
- Rust
- actix-web/chrono/tokio/serdeなど
- Elm