ebiken
https://scrapbox.io/files/6763d4caaf9037247f20f1bd.jpg
This is my personal wiki.
Resume
Kenichi Ebinuma / 海老沼 健一
Links
Scrapbox (this page) / GitHub / Twitter / note / YOUTRUST / LinkedIn / Zenn
Publications
お仕事の依頼はこちらから
手を動かすエンジニア、開発コンサル、技術顧問など
mail: kenichi.ebinuma@gmail.com
Skills
Skills
ある程度複雑なシステムの要件定義から、アーキテクチャ設計、開発、運用
CI/CD や IaC, 監視基盤など DevOps の改善
経験のない技術、最新の技術の高速なキャッチアップ
0->1 のサービス立ち上げ
品質の細部へのこだわり
大規模トラフィックを捌くサービスのパフォーマンス改善
Tech Stack
Languages: Go, TypeScript (backend/frontend), Dart, Ruby
Frameworks: React, Next.js, Flutter, Rails
Databases: Cloud Spanner, MySQL, PostgreSQL, Redis, Memcached
Infrastructure
Google Cloud (Cloud Run, GKE, Cloud Spanner, Cloud Memorystore Cloud Pub/Sub, Cloud Tasks, Cloud Operations, BigQuery, Firebase)
AWS (ECS, Fargate, RDS, Elasticache, AWS Lambda)
Kubernetes, Nginx, Envoy, Terraform
Others
Protocol Buffers, gRPC, GraphQL, OpenAPI
GitHub Actions, CircleCI, ArgoCD, Stripe, Sentry, Algolia, LLM
Qualifications
基本情報技術者
応用情報技術者
Jobs
Mesh, Inc.
Company: https://mesh-corp.com
App: https://mesh-app.com
Duration
2022/08 ~ now (full-time)
2022/01 ~ 2022/07 (side job)
Role: Software Engineer
Summary
開発の初期段階からデリバリー型スーパーのシステム開発/運用を担う
Stripe と連携した決済機能、Algolia と連携した検索機能など、様々な機能のアーキテクチャ設計、開発/運用
初期のGoでのプロジェクト構築支援
Cloud Spanner の導入/運用を主導
インフラ設計/構築、IaC 化
Cloud Operations, Sentry を利用した監視基盤の構築
GitHub Actions を利用したCI/CDの構築
倉庫内作業員向けアプリの機能開発/運用
ADR, Design Doc の導入
スクラムの導入
Tech Stack
Languages: Go, TypeScript, Dart
Frameworks: React, Next.js, Flutter
Databases: Cloud Spanner
Infrastructure: Google Cloud (Cloud Run, Cloud Spanner, Cloud Pub/Sub, Cloud Tasks, Cloud Operations, Firebase, etc.)
Other tools: Protocol Buffers, gRPC, Terraform, GitHub Actions, Stripe, Algolia, Twilio, etc.
Links
最高の買い物体験を実現するため、 Mesh に入社しました
EVERSTEEL株式会社
Company:
Duration: 2025/4 ~ now (fulltime)
Role: Software Engineer (Tech Lead)
Summary
オブザーバビリティの改善
工場でのカメラ撮影~AI推論までの非同期ワークフローのアーキテクチャ見直し
ポストモーテムの導入
feature flag の仕組み導入
モノレポ化の推進
CI/CDの改善(ワークフロー見直し、高速化)
設計レビュー
AIツール利用の推進
エンジニア採用のサポート
Tech Stack
Languages: TypeScript
Frameworks: Next.js, NestJS
Databases: MySQL
Infrastructure: AWS (ECS, Fargate, Aurora, CloudWatch)
Other tools: GraphQL, Terraform, GitHub Actions, Sentry, Amplitude
Links
プロダクトの成長フェーズに入りオブザーバビリティを改善した話
Next Genba Inc. / ミライのゲンバ
Company: https://mirai-genba.com/
Duration: 2023/10 ~ now (fulltime/side-job)
Role: Software Engineer (Lead Engineer)
Summary
バックエンド、インフラ、管理画面を担当する1人目のエンジニアとしてジョインしサービスの立ち上げ
電子帳票のフォーマット管理を行う Web ノーコードUIの開発
電子帳票のエクセルライクな記入UIの開発
LLM (OpenAI API)を利用した機能の開発、検討
Firebase Authentication を利用した認証/認可機能、SSO (SAML認証)の開発
エンプラ企業向けのセキュリティ対策としてRLS,SSOの導入
インフラの構築、管理基盤の整備、CI/CDの構築、改善
Tech Stack
Languages: Go, TypeScript
Frameworks: React, Next.js
Databases: PostgreSQL
infrastructure: Google Cloud (Cloud Run, Cloud SQL, Cloud Operations, Firebase, etc.)
Other tools: Protocol Buffers, gRPC, Terraform, GitHub Actions, etc.
Links
ミライのゲンバを支える技術
DeNA, Co., Ltd.
Company: https://dena.com/
Duration: 2020/4 ~ 2022/07 (full-time)
Role: Software Engineer
Summary
1. 大規模ユーザー数を抱えるゲームサーバー基盤 Takasho の開発/運用
ArgoCD, CircleCI を利用した自動デプロイ環境の構築
Cloud Operations を利用した監視基盤の構築
Blue Green/Canary デプロイの技術検証、導入
2. あるゲームタイトルのサーバー開発チームリーダーとして、基盤を利用したゲームサーバーの開発/運用
500万人以上のユーザーが遊ぶリリースを無事に乗り切る
大規模リリースに向けた負荷試験、パフォーマンス改善を主導
チームメンバーの教育(アーキテクチャ設計、DB設計、コーディングなど)
Tech Stack
Languages: Go
Databases: Cloud Spanner, Redis, Memcached
Infrastructure: Google Cloud, Kubernetes (GKE, Cloud Spanner, Cloud Pub/Sub, Cloud Memorystore)
Other tools: Protocol Buffers, gRPC, Terraform, CircleCI, ArgoCD
Links
社内ゲームサーバー基盤 Takasho とは
『東方ダンマクカグラ』を支える Takasho の裏側
Google Cloud 実践編 | Google Kubernetes Engine、Cloud Spanner、Cloud Memorystore の活用を色々聞いてみよう
基盤チームとしての挑戦と社内コミュニティで得た学び
YouTube
世界中の人が使うシステムの技術選定、設計実装も。DeNAゲームサーバー基盤グループが担う未来
Training
研修生が開催したTech Talk「今後の業務で皆に役立ちそうな技術」ベスト4を紹介します!
効率的に学びたい!エンジニアとしての学び方【研修振り返りレポート】
BluAge
Duration: 2021/09 ~ 2021/11 (side-job)
Role: Software Engineer
Summary
CDNと連携した画像変換サービスの導入(調査~負荷試験~提案~実装)
Tech Stack
Languages: Go
Infra: Google Cloud (GKE, Cloud Spanner, Envoy)
Qriteria
Duration: 2021/06 ~ 2021/12 (side-job)
Role: Technical Advisor, Software Engineer
Summary
Web 標準の音声認識APIを利用したオンライン 1on1 会議自動分析システムの PoC 作成、実装サポート
VPC 利用環境での AWS(ECS) への移行支援
Tech Stack
Languages: TypeScript
Frameworks: React
SYN, Inc. (Chompy, Inc.)
Company: https://chompy-inc.com/
Duration: 2021/04 ~ 2021/06 (side-job)
Role: Software Engineer
Summary
店舗用タブレットで利用する注文管理アプリをReact(web)からFlutter(native)へリプレース
管理画面の機能開発
Tech Stack
Languages: Go, TypeScript, Dart
Frameworks: React, Flutter
Other tools: Protocol Buffers, gRPC
DeNA, Co., Ltd.
Company: https://dena.com/
App: https://hibiyamusicfes.jp/2020/app/
Duration: 2020/1 ~ 2020/3 (freelance, full-time)
Role: Native Application Engineer
Summary
日比谷音楽祭の参加者向けアプリの開発
Tech Stack
Languages: Dart
Frameworks: Flutter
Other tools: Protocol Buffers, gRPC, RxDart
Links
日比谷音楽祭おさんぽアプリ2020 開発の裏側を語る / クライアント編
STELLA, Inc.
Company: https://www.stellajp.net/
App: Synchro
Duration: 2018/12 ~ 2019/12 (freelance, full-time)
Role: Backend Lead Enginner
Summary
若者向けYouTube同期視聴アプリ Synchro の開発/運用
創業期の企画段階から参画し、幅広く開発、運用を行う。初期から様々な技術選定を主導
Tech Stack
Languages: Go, TypeScript
Frameworks: gqlgen
Databases: MySQL, Redis
Infrastructure: AWS (ECS, Fargate, RDS, Elasticache)
Other tools: GraphQL, GORM, Socket.IO, CircleCI
Links
gqlgen でGraphQLサーバーを半年間運用してみた感想
playground, Co., Ltd.
Company: https://playground.live/
App: https://moala.live/ticket
Duration: 2017/6 ~ 2018/11
Role: Software Engineer (intern)
Summary
電子チケットアプリサービスプラットフォーム QuickTicket (現 MOALA Ticket https://moala.live/ticket) の開発
QuickTicket のwebアプリ、管理画面開発
EC2 から ECS(EC2) へのサーバー移行調査、検証
iOSモバイルSDKの開発
Tech Stack
Languages: Ruby, TypeScript, Swift
Frameworks: Ruby on Rails, Angular
Databases: MySQL
Infrastructure: AWS (EC2, ECS, RDS)
Other tools: CircleCI
---
Scrapbox Settings (UserScript)
/scrasobox/WebからコピペしたらSB記法に変換する
code:script.js
if (sessionStorage.getItem('scrasobox-paste') !== 'true') {
document.addEventListener('paste', event => {
const type = 'text/html'
const d = event.clipboardData
if (d.types && d.types.indexOf('Files') == -1 && -1 < d.types.indexOf(type)) {
event.preventDefault()
const dom = new DOMParser().parseFromString(d.getData(type), type)
const ng = text => text.trim().replace(/[\\\n]/g, ' ')
const q = query => dom.querySelectorAll(query)
const f = (text, deco) =>
[].concat(text.split(/\n/)
.filter(l => l.trim()).map(l => [${deco} ${l.trim()}] )).join('')
q('pre').forEach(d => {
d.innerText = 'code:code.*\n' + d.innerText.split('\n').map(l => ${l}).join('\n') })
q('h3').forEach(d => { d.innerText = f(d.innerText, '**') })
q('h2').forEach(d => { d.innerText = f(d.innerText, '***') })
q('h1').forEach(d => { d.innerText = f(d.innerText, '****') })
q('em, i').forEach(d => { d.innerText = f(d.innerText, '/') })
q('strong, b').forEach(d => { d.innerText = f(d.innerText, '*') })
// q('ahref imgsrc').forEach(d => {
d.closest('a').outerHTML = [${d.src.trim()}#.png ${d.closest('a').href}] })
// q('ahref').forEach(d => { d.outerHTML = [${d.href} ${ng(d.text).trim()}] })
q('imgsrc').forEach(d => { d.outerHTML = [${d.src.trim()}#.png] })
q('iframesrc*="//www.youtube.com/embed/"').forEach(d => {
d.outerHTML = [https://www.youtube.com/watch?v=${d.src.split('/embed/')[1].split('?')[0]}] })
q('code').forEach(d => { d.innerText = '' + d.innerText + '' })
let depth = -1
const li = node => {
depth++
node.querySelectorAll('li').forEach(n => li(n))
return node.innerHTML = '@sp@'.repeat(depth--) + node.innerHTML
}
li(dom.body)
const div = document.createElement('div')
div.innerHTML = dom.body.innerHTML
document.body.appendChild(div)
const range = document.createRange()
range.selectNode(div)
//const text = range.toString()
const text = div.innerText
document.execCommand('insertText', null, text.replace(/(\s*\n){3,}/g, '\n\n').replace(/@sp@/gi, ' '))
document.body.removeChild(div)
}
})
sessionStorage.setItem('scrasobox-paste', true)
}
window.addEventListener('unload', () => { sessionStorage.setItem('scrasobox-paste', false) })
faviconを変更する
code:script.js
$('head > linkrel=icon').attr('href','/api/pages/ebiken/ebiken/icon');
:xxxで/emojiとiconをいれられるように
code:script.js
import '/api/code/yutaro/emoji_selector/script.js'
UserCSS
Settings