😁

レジュメ

2021/08/21に公開

スキル

言語

  • Ruby
  • Python
  • JavaScript
  • TypeScript

フレームワーク / その他

  • Ruby on Rails
  • Django
  • Vue.js / Nuxt.js
  • Docker
  • AWS
  • Git
  • MySQL

職務経歴

期間 企業名
2016年1月-2016年12月 ForTheLocal株式会社(現在FTL株式会社)
2017年3月-2019年12月 Lobo株式会社 (起業)
2020年3月-2021年9月末 BRANU株式会社
2021年10月-2022年10月現在 コインチェック株式会社 |
2022年4月-2022年10月現在 株式会社ツナググループHC (副業)

概要

webエンジニアとしての歴は7年です。その中で主に、Ruby on Railsでの開発を主に行なってきました。
また、最近ではNuxt.jsを用いたフロントエンドの開発も行なっています。
今までは0 - 1フェーズ ・ 1 - 10フェーズの比較的小さいチームでの開発を行なってきました。その中の役割としては、開発だけでなく要件定義や詳細設計等も行なっています。

各プロジェクトの詳細

バーチャル株主総会プラットフォーム開発

【概要】

バーチャル株主総会を運営するためのプラットフォームです。
株主総会を運営する企業様と株主総会に参加する株主様に利用していただくサービスとなっております。

【担当】

  • UIデザイン
  • 機能設計
  • バックエンド設計・開発
  • フロントエンド開発

【携わった機能】

  • アンケート機能
  • 事前予約機能
  • スケジュール管理機能
  • その他あらゆる機能

【取り組みと実績】

いくつもの新機能開発

入社後すぐに、今まで開発を行っていた方から引き継ぎ、自分自身が感じたプロダクトの課題や顧客が抱えている課題や要望等を汲み取り、要件決めから開発まで全てを行っております。1年の間に改善タスクやその他あらゆるタスクを行いつつ、3つの新機能を開発しました。要件から設計、開発と一貫して任せていただいているので、素早い開発を行うことができました。

大量データ処理の課題解決

株主様が多い企業だと数十万人おり、その行使結果の集計を行う上で大量データを処理する必要があります。
いかにサーバーに負荷をかけずに処理をするか?という課題に取り組んできました。


施工管理アプリ

【概要】

施工管理webサービスの開発
建設業者の施工管理・現場管理をWeb・スマホアプリで完結できるようにするサービスです。

【担当】

  • バックエンド設計・開発
  • フロントエンド開発
  • エンジニア採用

【携わった機能】

  • 案件管理
  • 工程表
  • ファイル管理
  • 掲示板

【取り組みと実績】

環境構築の統一化

プロジェクト参画当時、開発環境が統一されていなかったため、複数のRailsサーバーの起動とNuxt.jsの環境を一つ一つ環境を構築する必要がありました。Dockerを用いることで、環境構築を楽にできるようになると考えました。当時、Dockerを触ったことはなかったが、一人でDocker環境を構築いたしました
工夫した点としては、シェルスクリプトを組んでほぼ自動で環境構築をできるようにした点です。Dockerによる開発環境の構築とシェルスクリプトで非エンジニアやRailsをいっさい触ったことのないフロントエンドエンジニでもローカル環境を立ち上げられるようになり、参画するエンジニアが楽に開発環境を構築できるようになりました。

工程表の新規開発

工程表機能では、APIの開発とフロントの開発両方に携わりました。
APIの開発ではDB設計やAPI設計も行いました。
APIの設計・開発で難しいと感じた点はAPIのレスポンスです。工程表の工程には大工程・小工程が親子関係で成り立っており、どのようなデータ構造でデータを返せば速くなるかやフロントエンド側で利用しやすいかを考えるのが難しかったです。当時採用したのは、最終的にフロントエンド側が使いやすい形ということで、2次元配列を採用しました。しかし、反省点としてJSONの構築コストがリクエスト・レスポンスの速度のボトルネックとなってしまいました。現在ではそれぞれ工程を1次元配列で返すようにし、フロント側で大工程・小工程それぞれのAPI叩くことで速度改善を図っております。

フロント開発で一番難しかったのはガントチャートです。左右にドラッグ&ドロップで移動できたり、ドラッグ&ドロップで伸び縮みさせる動作をプラグインは使用せずに1から一人で開発しました。プラグインを利用しなかった理由としては、メンテナス性が下がると判断いたしました。開発スピードは上がるものの、仕様変更で別動作にしたいと言った際に、対応できない場合を考慮すると1から自前で作った方がいいと判断しました。実際に、開発途中で何回か仕様が変更し、プラグインだったらできないことなどが多々あり、自分がとった判断は正解だと感じております。

掲示板の新規開発

掲示板機能でも、工程表機能同様にAPIの開発とフロントの開発両方に携わりました。
また、DB設計やAPI設計も行いました。

API開発で工夫したが失敗した経験があります。本来DB設計において、よしとはされていない配列やハッシュなどをserializeして格納しておく設計をしました。理由としては、関連付けて欲しい情報がidだけだったので、データ効率的にはuser_idsのように配列で管理しておくほうがはるかに効率が良いと考えました。最初のうちはそれで良かったのですが、後から仕様変更等で別の情報が欲しいなどの要望で結局別テーブルでリレーションを張ることにしました。この経験から学んだこととして、アンチパターンとされているものは素直に受け入れ、正規化をするべと学びました。

掲示板のフロントエンド開発では掲示板に対するコメント機能でslackのようなメンションができる機能を実装しました。工夫した点としては、inputタグ内ではCSSを当てることができないので、contenteditable属性を試みたが入力した値が反転するなどの問題が起きました。なので、inputエリアの下にoutput用の要素を用意しておいて、inputフォームを透過することでslackのようにテキスト入力し、@から始まるメンションユーザーに対正規表現でメンションユーザーであることを判定し、動的にHTMLタグを追加し、styleを当てるようにするようにしました。


クラウドソーシングサービス開発

【概要】

「SNSのように手軽に企業とフリーランスプログラマがマッチングできる」をコンセプトにクラウドソーシングサービスを開発

【目的と課題】

受託開発企業のエンジニアとして働き始め、半年がたち、毎日毎日オフィスへ行き誰とも話さず帰るということが多々あり、このような状況のエンジニアが全員フリーランスとして働くことができれば、場所を選ばず、報酬の高い案件をこなすことで現状よりも満足した生活ができるようになると考え、クラウドソーシングサービスに目をつけました。当時のクラウドソーシングサービスでは「手数料が高い」「単価は安いものばかり」などの声が多くそこの課題を解決したいと考えました。
もともと個人的にも、何かに縛られた働き方ではなく、自由に働くことの憧れがあり、自分自身でそのような環境を作り、より多くのエンジニアが自由かつ高単価の案件を受け仕事することができたらいいなと思い、開発することを決断いたしました。

【大まかな機能】

  • ユーザー登録・認証
  • ユーザープロフィール登録
  • ユーザー間チャット
  • 案件投稿・表示

【取り組みと実績】

一人で企画から実装までを行ったWebサービス開発経験です。
スタートアップとしてとにかく速さが重要だと判断し、ベータ版のファーストリリースを一人で3ヶ月の期間で開発することを目標としておりました。

結果として、企画・設計までを含めると5ヶ月弱の期間でベータ版をリリースすることができました。
この時、スピードを重要視しているからこそRSpecにて自動化テストをしっかりと書くことを意識しておりました。
RSpecを書く工数は確かに増えますが、自動化テストを書いておくことで、バグが少なく、かつseleniumなど利用することで結合テストの自動化を行っておりました。
しっかりとテストコードを書いていたおかげで、仕様変更する際にも時間をかけずに修正することができました。

本プロジェクトでの一番のポイント

Rails Action Cableによるリアルタイムチャットです。企業とエンジニア間でリアルタイムでチャットができる機能を提供したかったので、優先度高めで開発を行っておりました。リアルタイムチャットの開発をするにあたり、Action Cableを採用いたしました。リアルタイムチャットなどの開発で有名なのはNode.jsなどが有名ですが、Action Cableを採用した理由としては、当時Rails5が出たばかりで、Rails5からデフォルト機能としてAction Cableが組み込まれており、慣れていない別言語で開発するよりRailsで開発したほうが開発スピードは上がると判断いたしました。また、当時は今後Railsでリアルタイム系の処理ができるようになることでより一層Railsが使われると判断したため、Action Cableを理解し、実装できるようになることで、エンジニアとしての付加価値も高まると判断しました。

しかし、当時Webエンジニアとしてまともにアプリケーションを作りはじめて1年経つくらいだったので、Action Cableの概念を理解するのに苦労しました。Action Cableを採用することで開発スピードがあると想定したが、結果として遠回りではあるが、簡単なサンプルを作るなどし、一つ一つ学習しながらの実装となりました。時間はかかったものの企業とエンジニア間のリアルタイムチャット機能を作り終えることができました。

一番苦労したポイント

インフラ周りの構築でした。今まで業務の中でRailsにて機能の実装等は行っておりましたが、サーバー周りを触る機会が皆無だったので、独学で学習しながらサーバーの構築をしながらなんとかデプロイまですることができるようになりました。システム構成としては、EC2 / RDS(MySQL) / S3 / Route53 / Cloud frontを利用しておりました。
またデプロイに関してはAnsibleで構成管理しつつ、Capistranoでデプロイを行っておりました。当時、CIツールを使う余裕がなかったで、CIツールは利用しておりません。

振り返ってみるとシステム的には穴だらけだったが、この一人で0から開発する経験が今の自分があると思います。
一人で解決する、自走力が身についたのものこの経験のおかげであると考えております。
サービス自体は1年未満で終了となりましたが、多くのことを経験することができました。

自己PR

バックエンド・フロントエンド・インフラ・設計と比較的幅広く経験があり、実装することができます。
また、関わるプロジェクトは乗っ取る勢いで好きになる自信があります。プロジェクトに参画した際にはまずプロダクトを好きになることから始めます。

意欲

私は世の中にインタパクトを与えるプロダクトを開発できるエンジニアになりたいです。
インパクトを与えるプロダクトはユーザーの課題を解決できていることだと考えています。ユーザーの課題を解決するためには、ユーザーの真の課題を見つけ出すことができ、その課題の解決方法を考え、最適な技術を用いて迅速に開発を行える必要があります。
私もあらゆる技術や領域を学習、経験し多くのユーザーの課題を解決できるエンジニアになりたいです。

最後に

最後まで見ていただきありがとうございました。
ご縁がありましたらプロダクトを一緒に成長させることができたらと思っております。

Discussion