Karibash / resume

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

履歴書

プロフィール

key value
Name Yuki Karibayashi
Twitter @karibash
GitHub @karibash
Zenn @karibash

強み

  • 趣味がプログラミング
  • UXへの強い拘り
  • 新規の言語に対する抵抗が無い
  • フロントエンド、バックエンド、アプリ開発等の様々な実務経験

目標

Web開発におけるスペシャリストになる。

理由

ジェネラリストではなくWeb開発におけるスペシャリストと明確にした理由は、ジェネラリストは広い範囲の分野に浅い知識を持つイメージがあるためです。
Web開発におけるスペシャリストとして、Web開発分野において深い知識を身につけ高品質なプロダクトを提供することを目指しています。
具体的には、UX/DX/保守性に優れたプロダクトを開発できるようになりたいと思っています。

ゴール

私のエンジニアとしてのゴールは、OSSのコミッターとして生計を立てることです。
人生に限りがある中で携われるプロダクトは限られていますが、OSSであれば世界中のプロダクトに間接的に関わることができ、自分の技術力で世界に貢献できると考えています。

どんな会社で働きたいか

業務内容は、自社で開発しているサービスに携わりたいと考えています。
事業分野については特に拘りはなく、楽しそうかどうかで判断する事が多いです。
また、プログラミングを単なる仕事道具としてではなく、趣味としても業務外で楽しんでいる人たちが多く在籍している職場で働きたいと思っています。

伸ばしたいスキル

実務において、フロントエンド、バックエンド、インフラの全ての領域に携わることが多いため、今後も特定の領域にとらわれず、フルスタックの技術力を向上させたいと考えています。
開発者として手を動かし、実際に業務に貢献したいと考えている為、しばらくはマネージメント職に就くつもりはありません。

使ってみたい技術

Go、Rustを実務で扱い、その運用経験を積んでみたいと思っています。
いつかこれらの言語を活用して個人開発も行ってみたいと考えています。
また、現在実務ではFargateを使用しているため、Kubernetes(K8S)の運用にも興味があります。

職務要約

A株式会社 (2021~2023)

自社サービスのリアーキテクチャや技術選定をCTOから任されていました。
新機能開発の合間に、ReactとPythonで構築されていたアプリケーションを、Next.jsとNestJSのTypeScriptスタックにリプレイスするプロジェクトを担当していました。

創業期にWeb開発の経験があまり無い業務委託の方が担当していた事もあり、基本的な事が出来おらず様々な技術的負債が山積みになっている問題がありました。
また、Pythonに詳しいエンジニアが不足していたことも課題の一つにあった為、TypeScriptスタックへとリプレイスする方針へと踏み切りました。

現在では、リプレイス済みのページが約6割に達し、以前は1~2分以上かかっていたページも1秒以内に表示できるようになりました。

株式会社I (2018~2020)

客先常駐で様々な現場に参画し、組み込み系からフロントエンド、バックエンド、iOS/Androidと様々な案件に携わってきました。
さらに、社内で受託開発の経験もあり、ほぼ一人で商品検索などの要件がある企業サイトを開発した経験もあります。
また、業務の傍ら、個人開発でもOSSライブラリや、スマホアプリをリリースしていました。
スマホアプリは最終的に3000ユーザー程まで伸びましたが、スマホアプリ開発への興味が薄れてきた為現在はクローズしています。

職務経歴

A株式会社 (2021~2023)

ナレッジマネジメントSaaS開発

担当

新機能開発及び、リアーキテクチャを担当してきました。

チーム情報

正社員エンジニア: 4名
業務委託エンジニア: 6~8名
業務委託デザイナー: 2名

取り組んできた事
OSS貢献

プロダクトに採用しているOSS(NestJS, Lexical)に対してPRを提出し、取り込まれた経験があります。
また、プライベートでも趣味でOSS開発を行っており、自身でメンテナンスしているライブラリがStorybookやNxの公式ブログに掲載されたこともあります。

メイン言語を変更

開発初期の頃のエンジニアの方がPythonが人気らしいから使ってみようという事で、バックエンドにPythonが採用されていました。
しかし、当の本人及び、その他のエンジニアにPythonの知見があるエンジニアが居ない状態だったため、手探り状態での実装になっておりました。
この課題を解決する為に、Pythonを捨てる判断を行い、JavaScriptが分かれば比較的簡単に扱えるTypeScriptを採用し、フロントエンド/バックエンドで共通の言語で実装出来るようにしました。
また、APIにはGraphQLを採用しコード生成でフロントエンド/バックエンドで共通の型を利用出来るようにしています。

フロントエンドの設計ルール

開発初期の頃からコンポーネントの設計ルールが存在せず、1つの画面に付きコンポーネントが1つのみ存在するような状況でした。
この課題を解決する為に、AtomicDesignをベースにした設計ルールを取り入れコンポーネントの整理を行いました。
また、Storybook/Chromaticの導入も行い、PRレビューの際に手元でビルドしなくても簡単にレビューが行えるようにしました。
これにより、新機能開発の際にもStorybookから流用できそうなコンポーネントを探す事により開発効率も向上させる事に成功しました。

バックエンドの設計ルール

バックエンドにおいても設計ルールが存在せず、DBから受け取った値を連想配列のまま処理しているような状況でした。
この課題を解決する為に、DDDのエッセンスを取り入れた簡易的なレイヤードアーキテクチャにする事により、改修による意図しない不具合を減らす事に成功しました。
ある程度の基盤は構築出来ており、自分以外のメンバーでもコードを見様見真似で実装する事が出来るようになっています。
また、技術力があまり高くないメンバーでも設計への解像度を高める事が出来るように、Notionへ各ディレクトリ、各クラスの詳細説明、ワンポイントアドバイスとなる記事を作成しました。

パフォーマンス改善

アプリに影響するデータを初期表示時に全て取得する実装になっている影響で、顧客によっては画面を開いて表示されるまでに1分以上掛かるケースがありました。
投稿の検索処理もフロントエンド側で正規表現を使い都度フィルタリングするような実装になっていた為、ヘビーユースして頂いている顧客ほど動作が遅くなるような状況になっていました。
この課題を解決する為に、APIにGraphQLを採用しページ毎に必要なデータのみを取得できるようにAPIを作り直しました。
これにより、ほぼ全てのロジックをバックエンド側に持っていく事で大幅にパフォーマンスを改善する事が出来ました。

インフラ改善

全てのアプリケーションサーバーが単一のEC2サーバー上で起動するようになっており、なにか不具合が起きた際は都度手動で再起動する運用になっていました。
この課題を解決する為に、Fargateを採用し、ヘルスチェックでなにか不具合があった際は自動で再起動、負荷が高まった際には自動でスケールアウトするようにし、運用負荷を低減させる事が出来ました。

検索機能強化

蓄積された投稿を効率よく探せるようにする為、OpenSearchの導入を行いました。
同義語検索や、日英翻訳検索、項目毎の閾値調整等を行うことにより、関連度順で検索を行えるようにしました。
また、インフラ構成においてもSNS/SQSを介した冗長構成にする事により、ドキュメント更新に失敗した際にDLQを再処理するだけでデータ欠損を修正出来るようにし、障害発生によるサービスのダウンを防げるような仕組みにしました。

I株式会社 (2018~2020)

車両走行試験場の管理システム

担当

既存のレガシーシステムを流用した新規管理システム構築を担当していました。
iOSアプリ開発をメインにバックエンドAPIの開発、NFCリーダー/三色灯の連携等、実装難易度が高めのタスクも担当していました。

チーム情報

フロントエンドエンジニア: 1名
バックエンドエンジニア: 3名
iOSエンジニア: 1名

取り組んできた事
バックエンドの基盤構築

バックエンドのマイクロサービスにおけるテンプレートを構築し、他のメンバーがテンプレートを流用するだけで即座に実装に入れるようにしていました。
また、開発用の実機サーバーを用いた開発環境の構築も行っていました。

引き継いだ開発ツールの機能拡張

既存システムから引き継いだ開発用のツールを、現状の仕様に合わせる為の機能拡張を行いました。
このツールはC#で開発されていましたが、ソースコードが紛失されてしまっており、コンパイル後のアプリケーションしか残っていませんでした。
そのため、ILSpyなどの逆コンパイラを複数使用して、ソースコードの復元から機能拡張までを行いました。

開発用にGPSの動作をエミューレートするツールを作成

iOSの実機端末がなくても、開発時にGPSの動作確認ができるようにエミュレーターを作成しました。
Vue.jsを使用して画面を作成し、UI上から簡単に操作できるようにしました。
また、このエミュレーターを負荷試験にも流用する事で、工数削減に貢献する事が出来ました。

開発用に三色灯の動作をエミュレートするツールを作成

開発に必要な三色灯が特定の期間以外は借用できなかったため、返却後も開発を続けるようにする為にエミュレーターを作成しました。
Vue.jsを使用して画面を作成し、ブラウザ上で三色灯の制御や状態を簡単に確認できるようにしました。

商品検索機能を備えたコーポレートサイト

担当

デザイナーが作成したUIを元に、フロントエンドとバックエンドの実装を行いました。
一部のページについてはデザイナーが実装したものもありますが、基本的には一人で実装していました。

チーム情報

フロントエンドエンジニア: 1名
フルスタックエンジニア: 1名

取り組んできた事
商品検索ロジックの設計/実装

商品カテゴリや著者情報、ISBN等、様々なデータをもとに商品を検索するロジックをDB設計から単独で実装まで行いました。
MySQLのFULLTEXT INDEXを活用し、N-gramによる全文検索機能も実装していました。
また、商品のマスタは別のDBに存在する為、夜間バッチにて日時でマスタを更新するスクリプトの実装も行いました。

管理画面構築

商品管理の為の管理画面をUIのデザインから単独で実装しました。
LaravelAdminを活用する事で、スピーディーに開発を進める事が出来ました。

toB向けの複合機タッチパネルUI開発

担当

画面仕様書の作成、UI実装を担当していました。

チーム情報

組み込み系エンジニア: 6名

取り組んできた事
画面仕様チームの効率化

画面仕様書を作成する際、定型文となるスニペットや、頻出するドロップダウンリストの設定をすぐに行えるボタンをツールバーに配置するスクリプトをVBAで作成し、チームメンバー全員の作業効率を向上させました。

開発チームの効率化

複合機の開発にあたり、環境を切り替える度にVirtualBoxのインスタンス設定からエミュレーターを手動で起動する必要がありました。
この作業時間の削減を目的に、batスクリプトを作成し、開発チーム全体の生産性が向上させる事が出来ました。
以前は環境構築に10分程度かかっていた作業が、スクリプトを起動して機体名を選択するだけで済むようになり、エミュレータの機種切り替え作業もストレスなく行えるようになりました。

About