原 知愛 Tomochika Hara
- GitHub: thara
- Blog: Tomochika Hara's Blog
- X: @zetta1985
- Bluesky: @thara.jp
- LinkedIn: Tomochika Hara
概要
バックエンドエンジニアとして10年以上の経験があり、クラウドプラットフォーム上のスケーラブルなアーキテクチャの設計とアプリケーション開発に携わってきた。 特にモバイルゲーム開発においては、サーバーチームリードエンジニアとしてアーキテクチャ設計およびパフォーマンスチューニングを行い、DAU10万・総ダウンロード数1000万を超えるタイトルへの成長に貢献した。
フルリモートワークでのモバイルアプリ開発を経て、現在はメタバースプラットフォームのサーバーサイドエンジニア/ソフトウェアアーキテクトに従事。
スキル概要
- AWSやGCP上でのバックエンドサービスの開発
- 拡張性/保守性/高負荷を考慮したアーキテクチャ/アプリケーション設計
- 投資対効果を考慮したテストの設計と実装
- フルリモートワーク/非同期コミュニケーションを前提とした効率的な開発
- 開発チーム外を巻き込んだプロジェクト遂行
- テクニカルライティング/技術文書の作成
スキル詳細
- ★★★★★: 深い専門性を持ち、設計・実装からチームへの指導や最適化が可能
- ★★★★☆: 実務で主力として使用、 複雑な課題を自立して解決可能
- ★★★☆☆: 実務で継続的な使用経験あり、標準的なタスクを安定して遂行可能
- ★★☆☆☆: 実務での使用経験あり、基本的な課題を解決可能
- ★☆☆☆☆: 小規模タスクで使用可能
プログラミング言語
- ★★★★★: Go
- ★★★★☆: Python, Ruby, JavaScript/TypeScript
- ★★☆☆☆: Kotlin, Swift, C++, C#, Scala
- ★☆☆☆☆: Rust
フレームワーク・ライブラリ
- ★★★★☆: Goa, Django
- ★★★☆☆: Ruby on Rails
- ★★☆☆☆: React, Vue.js
- ★☆☆☆☆: RxSwift, UniRx
インフラ・ツール
- ★★★★☆: MySQL, Redis, Gradle, CircleCI, GitHub Actions
- ★★★☆☆: AWS, GCP, nginx, Docker, Terraform, Jenkins
- ★★☆☆☆: Photon Engine, Apache Airflow
プロトコル・フォーマット
- ★★★★★: RESTful, Protocol Buffers, gRPC
- ★★★☆☆: MQTT
- ★☆☆☆☆: glTF, VRM
経歴
クラスター株式会社 (2020-09 〜 現在)
- 役割: シニアソフトウェアエンジニア、ソフトウェアアーキテクト(サーバーサイド)
- 利用技術: Go, AWS, MySQL, Redis, Protocol Buffers, gRPC, MQTT, Docker, GitHub Actions, Circle CI, Gradle, Unity, C#, glTF, VRM
メタバースプラットフォーム cluster のバックエンドの設計・開発・保守に従事。
- 空間上のプレイヤーのレベルやスキルを保存できる「セーブ機能」を実装した。
- 3D空間の複数ユーザー間の同期処理を担うサーバー(room server)の内部アーキテクチャの設計を行なった。
- 既存VerneMQから上記room serverへの移行をメンテナンス期間なしで実施した。
- room serverからRDBに依存する箇所をマイクロサービスとして切り出した。
- Node.js/C#で書かれたUGCパイプラインをGoでリライトし、GitHub ActionsによるCI/CD環境を構築した。
- GoによるglTF/VRMのバリデーション、圧縮処理、3Dモデルに含まれるテクスチャのGPU native imageへの変換を実装した。
- アプリ上で空間上のワールドの状態を保存/公開する機能の概念設計および実装を行なった。
- 上記ワールドクラフトで使用可能なアイテムのUGCストア機能の設計および実装を行なった。
- ProtocolBuffersスキーマ運用の改善 を行なった
- モノリスアプリケーションをマイクロサービスに分割するプロジェクトを主導した。
- 開発チームの設計/テクニカルライティングスキルの向上を目的に委員会を立ち上げ、design docのテンプレート改善やガイドラインの策定を行なった。
- プラットフォーム運用向けWebアプリケーションのフレームワーク設計/実装を行なった。
弥生株式会社 (2020-07 〜 2020-08)
株式会社Misoca吸収合併による転籍
株式会社Misoca (2018-07 〜 2020-06) サーバーサイドエンジニア/プロダクトマネージャ(Android/iOS)
- 役割: サーバーサイドエンジニア, プロダクトマネージャ(Android/iOS)
- 利用技術: Ruby, Ruby on Rails, AWS, Kotlin, Swift, RxSwift
請求書作成サービスMisocaのモバイルアプリのバックエンドAPIの開発, Android/iOS向けのプロダクトマネージメントおよびライブラリ開発に従事。
- Android/iOSに向けたKotlin/Swift製の税率計算ライブラリを実装し、サーバーサイドの実装と同じテストデータを用いたCIを構築した。
- 2019/10の軽減税率制度開始に向け、複数プラットフォームに向けて古いアプリバージョンとの後方互換性を保ちつつ機能変更をするための、モバイルアプリ向けのフィーチャーフラグや段階的なデータマイグレーションを設計した。
- tech blogの執筆
WonderPlanet (2013-10 〜 2018-06) サーバーサイドエンジニア/リードエンジニア/エンジニアリングマネージャ
- 役割: サーバーサイドエンジニア, リードエンジニア, エンジニアリングマネージャ
- 利用技術: Python, Django, Falcon, PHP, FuelPHP, C++, Photon Server, AWS, GCP, nginx, MySQL, Redis, Airflow, Jenkins, Cocos2d-x, CircleCI, C#, Unity
モバイルゲーム向けサーバーサイドアプリケーションの設計・開発・保守、およびAWSやGCPなどのクラウドプラットフォームを使用した高負荷に対応したシステム設計・構築・運用に従事し、 リリース後3ヶ月で100万ダウンロードを達成したタイトルのバックエンドサービスの開発を主導した。 複数プロジェクトでサーバーチームのリーダーを務め、メンバーへの教育や技術的指導を行い、自発的に行動することでリーダーがSPOFにならないようなチーム体制を整えた。
- バックエンドサービスのアーキテクチャ設計と構築、API開発, その他ツール開発を主導した。
- 差分更新やロールバックをサポートした非エンジニア向けのマスターデータ管理ワークフロー設計を行った。
- リリース直後、想定外の負荷により長期メンテナンスに入ったが、Amazon RDS for MySQLのパフォーマンスチューニングやDB構成の変更などの改善を施し安定稼働させた。
- MySQLのインデクシングがボトルネックになるような高頻度の更新処理への負荷対策のために、Amazon DynamoDBを部分的に使用し、DBへの負荷を低減した。
- ガチャのアルゴリズムにWalker's Alias Methodを採用し、定数時間での復元抽出を実現した。
- Redisの集合演算を用いてフレンドとその他プレイヤーを混合したリアルタイムのスコアランキング生成を実現した。
- 数時間かかると考えられていた全プレイヤーに対するグルーピング処理を、Apache AirflowとRedisを用いたPython製のバッチ処理を実装し、30分前後の処理時間に収めた。
- リリース2ヶ月前というタイミングでPhoton Serverのマッチング処理ではより良いゲーム体験を提供できないと判明したため、Python製の独自マッチングサービスを1ヶ月で実装した。
- Jenkins サーバーの構築と運用および、モバイルアプリ向け自動ビルド環境を構築した。
- Go 製 Google PlayStore Voided purchase 集計サービス/ Slack ボットを開発した。
- cocos2d-x アプリのビルド時間のプロファイルと改善を行なった。
- Photon Serverの複数クラスタの負荷分散のために、pre-fork形式のWebサーバーを参考にしたモニタリングサービスをC++で実装した。
- Photon Serverの1クラスタ向けの複数台のAmazon EC2インスタンスをワーカーとするベンチマークツールをC#で実装した。
- Unityエンジニア・デザイナー向けのUnity3dエディタ拡張を実装した。
- Unity製ゲームのCI/CD環境を構築した。
ニューソン株式会社 (2008-04 〜 2013-09)
- 役割: ソフトウェアエンジニア
- 利用技術: Java, Struts, Struts2, Spring framework, Oracle Database, JavaScript, jQuery, Apache Tomcat, Apache HTTP Server
業務用Webアプリケーション設計/開発を担当した。
- 独自JavaScriptフレームワークを開発し、AjaxによるインタラクティブなWebアプリケーションを開発した。
- Javaで開発した多くの入力パターンを受け付ける化学化合物の計算ライブラリを実装し、データ駆動テストによって高品質を実現した。
自己PR
困難な問題解決への意欲
自分が未経験の難しい問題を解決し、それを通じて成長することに意欲を感じる。
メタバースのような新規分野に取り組み、仮想空間の永続化表現の定義やリアルタイム同期処理の設計・実装を担当した。 また、複数ユーザー間の同期処理を担うサーバーの内部アーキテクチャの設計を行い、VerneMQからの移行をメンテナンス期間なしで成功させた。
過去のゲーム会社の経験では、モバイルゲームリリース直後に高負荷対応が間に合わず、長期メンテナンスを余儀なくされた。この経験を踏まえ、以後は負荷対策やメンテナンス性を重視した設計を心がけるようになった。 その結果、自らリリースまで担当したサービスでは、運用開始後も安定稼働を実現した。
サービスの成長過程で直面する様々な課題を解決する経験を通じて、プロジェクトの成功や運用の安定化に貢献してきた。
チームの成長と技術的リーダーシップ
技術的リーダーシップを発揮し、チームメンバーの成長を促すことで、持続可能なチーム作りに貢献してきた。
モバイルゲーム開発では、サーバーチームのリーダーとして、メンバーへの教育や技術的指導を行い、リーダーがSPOF(Single Point of Failure)にならない体制を整えた。これにより、メンバーが自発的に行動し、リーダー不在時でもチーム全体が機能する仕組みを構築した。
また、開発チーム全体の設計・テクニカルライティングスキル向上を目的に委員会を立ち上げ、design docのテンプレート改善やガイドラインの策定を主導した。この取り組みを通じて、チームの技術力の底上げと効率的な意思疎通を実現した。
リモートワーク/非同期コミュニケーションの文化醸成
リモートワーク経験が豊富であり、非同期コミュニケーションを前提とした効率的な開発を得意としている。
テクニカルライティングスキル向上を目的とした委員会を立ち上げ、チーム全体で技術的知識を共有する仕組みを構築した。この取り組みを通じて、メンバー間のスキル向上や生産性の向上を実現した。
これらの経験を活かし、リモートワーク環境において、チームの非同期コミュニケーション文化の醸成や、知識共有の促進に貢献できると考えている。
個人プロジェクト
- SwiftNES: Swift製のクロスプラットフォーム向けNESエミュレータ
- gorones: Go製のクロスプラットフォーム向けNESエミュレータ
- rust_aliasmethod: Walker's Alias MethodのRust実装
- erajp: Rust製 日本の元号変換ライブラリ
- SoundIO: クロスプラットフォーム向け音声入出力ライブラリlibsoundioのSwiftバインディング
その他の活動
- JUnit実践入門 体系的に学ぶユニットテストの技法の出版前レビュー
- SpriteKitではじめる2Dゲームプログラミング
Swift対応 の執筆
- 第2章 Swiftの基本, 第8章リバーシを作ろう--AIの作り方 を担当
- iOSDC Japan 2019: Swiftでつくるファミコンエミュレータのススメ (LT発表)
- Go Conference 2022 Spring | メタバースを支える技術 ~UGCに溢れる3D空間のリアルタイム同期を支えるGo〜 (スポンサーセッション登壇)
資格
- 2019-10 End-to-End Machine Learning with TensorFlow on GCP(Coursera) 修了
- 2019-10 Google Cloud Platform Big Data and Machine Learning Fundamentals 日本語版(Coursera) 修了
- 2019-09 How Google does Machine Learning 日本語版(Coursera) 修了
- 2019-09 Launching into Machine Learning 日本語版(Coursera) 修了
- 2012-04 エンベデッドシステムスペシャリスト試験 合格
- 2011-09 情報セキュリティスペシャリスト試験 合格
- 2011-04 応用情報技術者試験 合格