Skip to content

Instantly share code, notes, and snippets.

@akichim21
Last active August 23, 2022 01:04
Show Gist options
  • Save akichim21/c0da73faae86569ae31bf7ff66deeb83 to your computer and use it in GitHub Desktop.
Save akichim21/c0da73faae86569ae31bf7ff66deeb83 to your computer and use it in GitHub Desktop.

職務経歴書

基本情報

key value
Name akichim
Qiita akichim21

スキル

言語

自然言語 備考
日本語 ネイティブ
English 英語で書かれた文書をGoogle翻訳や辞書を使いつつ、だいたいの意味をつかむことができる
プログラミング言語 備考
Ruby 7年以上の経験
JavaScript(es6) 6年以上の経験
Typescript 4年以上の経験
Python 2年の経験
Perl 3年以上の経験あるが、現在は使用してない
C++ cocos2dxで個人アプリ作成のみ
HTML,CSS 簡単な改修なら

データベース、ミドルウェア

プログラミング言語 備考
MySQL 10年以上の経験
Redis 7年以上の経験
Elasticsearch 7年以上の経験
MongoDB 6年以上の経験
Redshift 1年以上の経験
Memcache 3年以上の経験あるが、現在は使用してない
Hadoop 2年以上の経験あるが、現在は使用してない

フレームワーク・ライブラリ

フレームワーク・ライブラリ 備考
Rails 7年以上の経験
React,Redux 5年以上の経験
Webpack 4年以上の経験

インフラ

インフラ 備考
Vagrant,Chef 3年以上の経験
Terraform 3年以上の経験
AWS 6年以上の経験
Fluentd 1年ほどの経験
Docker 1年ほどの経験

採用

  • Wantedlyの運用

  • インターン、中途、業務委託の採用プロセスの設計

プロダクトマネージメント、エンジニアマネージメント

  • 現職でフルタイム(1人)、業務委託と副業(4人)、インターン(4人)の幅広いスキルのエンジニアのマネージメント

    • 前職でも10名程度のフルタイムエンジニアのテックリード
  • プロダクトの要件定義、仕様策定

    • 前職ではソーシャルゲームでKPIを伸ばす企画と仕様を策定していた

職務経歴

2020/04 - 2021/12: 株式会社オンリーストーリー

外注で開発していたビジネスマッチングサービスの内製化をエンジニアリーダーとして実施した。 コード改善やKPI改善を行いながら、新規開発、アプリのリリースなどを行なった。

2015/10 - (現在): 株式会社NinNin

職務: CTO

ホテル予約システム開発、運用

ホテルの予約サービスの新規立ち上げをPM/CTOとして実施している。 予約しやすいサービスを目指して、要件定義からレビュー、実装まで幅広く担当した。

TabiTabi開発、運用 (2016/07 ~)

創業者として企画立案から技術選定、実装を担当。 現在は10名程度のエンジニアマネージメント、プロダクトマネージメントをしています。

  • OSSとSaaSをうまく組み合わせて開発することができます

    • 複雑なチャット画面ではReact + Reduxを使った大規模クライアント開発ができる設計にしました。
    • エラーログ監視ではSentry, ログ監視ではfluentd + elasticsearch + kibana、New RelicやCloud Watchでパフォーマンス監視やアラートができる体制にしました。
    • docker + terraformを使って、インフラのコード化や開発と本番の冪等性の担保、自動化などを構築しました。
    • 大規模データのクローリングではAWSのLambdaを使ってスケーリングさせました。
  • ドメインを整理して、堅牢なデータベースやアプリケーション設計をすることができます

    • データベースの制約をうまく使ったり、Fat ModelやFat Controllerにならないようにモデルへのロジック集約、Formオブジェクトやサービスクラス、Valueオブジェクトやプレゼンターなどの導入などを行いました。
    • 予約の機能では決済、ユーザー情報、手配などのドメインをアクションごとや関心ごとごとに切り分け、変更するときもUpdateをできるだけしない設計にしました。
  • ビジネスの進捗を遅らせることなく、リファクタやテストなどを実施しました

    • ビジネスと機能の進捗を握った上で、イケてない所は早めにリファクタ、重要なところはテストをしっかり書くなど実施しました。
    • また、静的解析やデータベース制約など初期に入れておくとコスパがいいものは積極的に導入しています。
    • ビジネスと技術的負債をうまくバランスを取ることができます。

▼詳細について

TabiTabiの技術スタックと今後の開発について

2012/4 - 2015/10: 株式会社DeNA

職務: エンジニア、テックリード

ソーシャルゲーム運用

売上最大月数十億のソーシャルゲームにおいて、ビジネス面ではUXとKPIの両面から課題とその解決案にあたる企画の立案やレビューをしてました。 技術面では複雑なイベントで大規模トラフィックでもバグが発生しない実装、テックリードとしてレビューや環境整備を主導しました。

  • KPIから課題解決する企画ができます
    • 9個の的にボールを投げて、キャラに当たればゲットできるという的当てイベントにおいて、課金額とキャラ獲得にほとんど相関がないことをデータとして提示し、投げれば投げるほどキャラが埋まっていき、当たりやすくなる企画の立案と実装を担当しました。キャラが埋まっていってキラキラさせることで当たりやすくなってる感の演出も相まって、前月比で約140%売上を達成しました。

-リファクタリングできます

  • 同じく的当てで初期の開発設計がカオスだったが、9個の的それぞれをアイテムごとにクラスをわけ、ステータス管理や当たった時の処理などをポリモーフィックに実装しました。 また、投げる、抽選、補充などもそれぞれ整理してhook処理を出来るようにして、次の2年の追加仕様(的の種類の追加、当たった時のユーザーリソースの変更や補充する的を固定化など)に耐えうる設計となり、後継のエンジニアも開発しやすい状態にしました。

  • パフォーマンスやボトルネックの考慮や解消ができます

    • ブラウザゲームは何十万人のinsert, updateが走りやすく、大規模データになりやすいプロダクトなのでパフォーマンスを意識したコードがかけます。DBであればキャッシュ、インデックス、マスタースレーブやシャーディングを意識したアプリケーション開発が可能です。アプリケーション側では、無駄な処理を書かない、大規模データを取得しない、並列処理、計算量の考慮などが可能です。
    • リアルタイムマッチングでは、AとBがお互いにマッチングしにいくとタイミング次第でデッドロックが発生する可能性があるので、user_id順にソートしてからロックするなど工夫をしました。(自分をロックして相手をロックするというロジックだと同時にマッチングする処理が走るとデッドロックになる)
    • パフォーマンスの計測から原因を特定することも可能です。バッチでメモリが太るものがあった時に、大規模なクラス設計でどこに原因があるかがわからなかった場合でも、実験->箇所を絞っていくを繰り返して原因を特定して相互参照してガバレージコレクションされてないものを意図的にメモリ解放するコードを追加して解消しました。同様にnytprofやexplainを使ってアプリケーション、DBのボトルネックを解消することもできます。
  • ビジネスの根幹(コア)を理解して、V字回復を主導しました

    • ソーシャルゲームの根幹はキャラと遊びであり(パズドラでいうとパズルが遊びでドラゴンがキャラ)、ダウントレンドは遊びへの飽きとキャラのデッキ飽和で起きることを理解した上で、新要素であるスキルとそれを売るための新・定常イベントの方向性や企画、仕様提案をして、テックリードとしてレビューや実装をしました。提案内容としてはイベントスキームをレイドボスをGVGにする時はGVEとGVGで迷ってる時にGVGの良さをしっかり伝えたり、PvPをリアルタイムPvPにする時は企画が迷走してる時に他チームを参考にリアルタイムPVPを提案することで採択されました。仕様や実装のレビュー、一部実装も担当してリリースされた結果、KPIも大きく伸びて月間の売上が最大40%ほどV字達成し、3年ほど会社内で月間売上1位を取れなかった中1位のプロダクトとなりました。
  • テックリードとしてチーム開発をリードできます

    • コードレビューや障害対応、環境整備など実施しました。
    • コードレビューでは新人に難しい実装をさせる時は設計からレビューできるように促したり、新規開発では担当が見切れてなさそうな大規模データでのパフォーマンスや複雑な仕様のテストをしたりして、リスクの強弱で力の入れ方を変える工夫などをしました。
    • 障害対応では担当とともに原因と対策、補填をコード、DBデータ、ログあらゆるソースから発見、レビューをして原因が妥当でちゃんと治ってるか、2次被害はでないかなどを考慮して実施できます。
    • 開発環境整備ではJenkinsの整備、テストのライブラリ導入、ドキュメント整備などを行いました。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment