Hori Blog

フリーランスでバックエンドエンジニアとして活動している Ryota Hori のブログです。ドメイン駆動設計や Go の話など。

About Me

「人間は人間がやるべき仕事に集中しよう」が最近のコンセプト

Whois

フリーランスで活動しているバックエンドエンジニアです。メイン言語はGoで重めなアーキテクチャ設計が得意です。

特に、ドメイン駆動設計とコード生成技術により、ビジネスへの高い駆動力と高い生産性を両立することを強みとしています。

スキル

Go

株式会社サイバーエージェントにてライブ配信サービス「FRESH LIVE」の立ち上げに初期メンバーとして参加。メイン言語をGoとし、以後継続的に使用。

動画配信の初期構築を行った後、動画周りの拡張に主軸を置きつつ横断的に全バックエンド領域への遊軍的なミッションを主に担当。

並列処理やパフォーマンスチューニングを触ることが多く、複雑になりがちな非同期処理をGoの特性を生かして可能な限りシンプルに表現することを得意とする。

参考:非同期処理で荒れがちなchannelの使い方や、sync系パッケージについて

参考:デファクトスタンダードであるRTMP(動画のプロトコル)とH.264(動画のコーデック)で実用レベルの実装がなかったため自作。(READMEの整備をサボっていますが本番導入済み)

2018年の秋くらいから大規模リファクタリングや新規サービス立ち上げを牽引する立場になり、特にDDDを意識したアーキテクチャ設計や開発生産性向上に強い興味があり、注力していた。

参考:generator芸の一部

株式会社サイバーエージェントを退職後、フリーランスとしての活動においてもGoをメインで使用している。

フリーランスではAmazon Kinesisを活用したデータ基盤の構築など、AWS Lambdaも活用したサーバレスアーキテクチャを導入することも多く、凝集度と結合度を強く意識した開発に注力。

最近では開発をDRYにする必要性をより一層強く感じ、さらなるcode generatorの進化とアーキテクチャ設計に勤しんでいる。

動画

2015年4月よりライブ配信サービスの立ち上げに携わり、動画処理周りを主担当していた。サービス運用に必要な各レイヤーの知識と経験は網羅できていると思っている。

今後は動画以外の領域を主戦場としていくつもりだが、動画界隈には引き続き携わっていく予定。

動画・生放送ストリーミング研究会 - connpass の運営にも参加している。

AWS

大規模に使用したのはAurora、ECS、EC2、S3、CloudFrontなどなど、ライブ配信サービスで活用できるものが中心。

最近は小さく作ることが多いので、Kinesis、Lambda、Fargate、DynamoDBなど、運用負担を最小限にできるものを中心に使用。

コンテナ技術

2015年から触り始め、ライブ配信サービスはすべてコンテナ化して運用していたので少なくとも主要知識は網羅できているはず。 初期はECSで構築し、2018年夏にKubernetesへ移植した。

Kubernetes移植を主導し、Statefulな配信サーバ運用をKubernetes上で解決するなど(StatefulSetなどの既存リソースでは実現できない仕組み)、挑戦的に使用していたのでそれなりに強い領域と言えるはず。

最近はKubernetesの運用負担が見合わないプロジェクトに携わることが多く、必要に応じてのんびり活用(AWS Fargateによるbatch処理など)するに留めている。

アーキテクチャ設計

「人間は人間がやるべき仕事に集中しよう」を掲げ、DDDを意識した本質的で重要な実装のみに注力できるアーキテクチャ設計と構築に強みがある。

特にコード生成を前提とした設計と構築は、ビジネスへの高い駆動力と高い生産性を実現できる強みであると思い試行錯誤中。

職務経歴

フリーランスとして活動開始(2019/06 - 現在)

2019年5月末を最終出社として株式会社サイバーエージェントを退職し、フリーランスとして活動を開始。

サービスドメインは何でも楽しめる性分なので、どちらかといえば開発効率の向上に貢献できそうか否かで案件を検討しがち。

熱いメンバーが周りにいると感化されやすいので、熱い想いのあるサービスに携われるとより嬉しい。

株式会社サイバーエージェント:OpenSaaS Studio(2019/03 - 2019/05)

「人間がやるべき本質的作業だけに注力しよう」を広く展開すべく、OpenSaaS Studioに参加。

参考:OpenSaaS Studio - 強いSaaSを作り続けるOpenSaaS Studioの挑戦 - Speaker Deck

「Development Productivity Team」にて、Slack Botシステムなどを制作。「モチベーションを表現すればSlack、CLI、AWS Lambda、APIといった各種インターフェース層などが自動生成される仕組み」など。

株式会社サイバーエージェント:新規ライブ配信サービスプロジェクト(2018/10 - 2019/02)

テックリードとして新規ライブ配信サービスプロジェクトに参加。最終的には方針転換に伴い開発中止となった。

拡張性や可変性も高い巨大プロダクトを少人数かつ短期間で作成する必要があるため、開発方針は「人間がやるべき本質的作業だけに注力しよう」 とし、DDD、Kotlin Multiplatform、自動生成技術などを採用した。

下記のような「熟慮したい高価値な本質的作業」のみをモチベーション通りに実装していけば、他の関心が薄い実装(やドキュメント)は自動生成する見込みだった。

  • ドメイン概念の表現
  • アプリケーション概念の表現
  • View層(UIとそれに伴う柔軟な取得処理)
  • ビジネス価値の高い技術的詳細(動画プロトコルの実装など)

参考:成果物の一部

とにかく「人間がやるべき本質的作業だけに注力しよう」「実装=モチベーションを自然に表現するだけ」にこだわり抜き、高い生産性を実現していた。

株式会社サイバーエージェント:FRESH LIVE(ライブ配信サービス)(2015/04 - 2019/05)

2015年4月よりライブ配信サービス立ち上げに初期メンバーとして参加。最初期のミッションとして配信フロー構築を行い、その後も主担当として運用していた。

2015年時点では業界内でもインターネット生放送の知見が少なかったこともあり、検証や実装とともに積極的な情報公開なども実施した。

参考:やんちゃな HTTP Live Streaming トラブルシューティング集 - Speaker Deck

初期構築後は動画周りの拡張に主軸を置きつつ、横断的に全バックエンド領域への遊軍的な特務ミッションを実行することが多め。

ECSからKubernetesへの全移植や動画サービスならではの技術的課題解決を通し、特にGo言語、Kubernetes、動画技術周りはそれなりの経験を積めたと自負している。

2018年の秋頃より開発リーダーを引き継ぐ。

株式会社サイバーエージェント:バイラルメディア開発(2014/04 - 2015/03)

新卒5人によるサービス及び子会社立ち上げに技術リーダーとして参画。 バイラルメディアの新規立ち上げではCMSや各種ツールなども自作で行い、三週間での短期リリースを行った。

インフラレイヤーの構造はシンプルだったため、RethinkDBを使うなど適度な技術的挑戦を行った。

子会社の方針転換に伴いサービス終了、技術チーム解散。

株式会社サイバーエージェント:ファッションアプリ開発(2013/06 - 2014/03)

内定者5人による画像投稿型のファッションSNSアプリの開発。 入社に伴い運営終了。

株式会社サイバーエージェント:人事システム開発(2013/03 - 2013/06)

GeppoというHRテックサービスを開発リーダーとして初期リリースまで担当。

やっていきたいこと等

志向について

技術的なスペシャリストとして百人力、千人力となれるよう追求していきたい。

腰軽くプロトタイプを作るよりは重量級のアーキテクチャ設計の方が得意。継続的に価値を生める仕組みに興味が強い。

価値を提供したい人の障壁を可能な限り取り除き、武力を提供したい。

チームマネジメント等について

基本的にはマネージャーではなくスペシャリスト志向。周りへのポジティブな影響やチーム成果への意欲は強く、自発的に行動する性分だが、マネージャーという職務で責任を負うことへの意欲は薄い。特にネガティブな人の成果や成長にまで責任は負わない方針。

あくまで自発的な振る舞いとしては積極的に価値提供を図っていきたい。

懸念事項

  • 英語は弱い。ドキュメントを読んだり翻訳ツールの補助を借りてのやり取りはできるが、チャットや口頭でのコミュニケーションは厳しい
  • 記憶力と想起力が弱めなので即答でのコンサル業は苦手。下調べや確認の時間をいただいた方が効率よく価値提供が可能