Slide 1

Slide 1 text

Copyright © Bitkey Inc. All rights reserved. スタートアップにおける Platform Engineering の 片鱗 株式会社ビットキー 大高浩太郎 / 津島雅俊 2024.07.09

Slide 2

Slide 2 text

Copyright © Bitkey Inc. All rights reserved. みなさんの組織に プラットフォームエンジニアリングチーム は存在していますか?

Slide 3

Slide 3 text

Copyright © Bitkey Inc. All rights reserved. プラットフォームエンジニアリング 理解できていますか?

Slide 4

Slide 4 text

Copyright © Bitkey Inc. All rights reserved. ビットキーに プラットフォームエンジニアリング を主務としたチームは存在しません

Slide 5

Slide 5 text

Copyright © Bitkey Inc. All rights reserved. しかし、これって プラットフォームエンジニアリングなのでは? といった片鱗が存在します

Slide 6

Slide 6 text

Copyright © Bitkey Inc. All rights reserved. プラットフォームエンジニアリングとは? 自分たちの組織でもできるかな?

Slide 7

Slide 7 text

Copyright © Bitkey Inc. All rights reserved. 大高 浩太郎 2020.04 2022.11 now 新卒社会人として Web業界にてエンジニア人生開幕 AWS Lambda など Serverless による開発を経験 株式会社ビットキーへジョイン BKP ( bitkey platform ) & HubCoreModule チーム Google Cloud を活用した デジタルキーを管理するプラットフォーム開発 認証認可なども実装 技術本部 / プラットフォーム開発部 Cross Service Backend チーム 認証・認可基盤を Go で実装したり GitHub Actions でピタゴラスイッチ作ったり The Go gopher was designed by Renée French. The icon was designed by @avocadoneko. Kotaro Otaka / @otakakot

Slide 8

Slide 8 text

Copyright © Bitkey Inc. All rights reserved. Outline 1. チームトポロジーで考えるビットキー開発組織 2. 事例①:GitHub Actions 3. 事例②:Cloud Run 4. 事例③:社内標準仕様 5. まとめと今後の展望

Slide 9

Slide 9 text

Copyright © Bitkey Inc. All rights reserved. チームトポロジーで考えるビットキー組織

Slide 10

Slide 10 text

Copyright © Bitkey Inc. All rights reserved. Copyright © Bitkey Inc. All rights reserved.

Slide 11

Slide 11 text

Copyright © Bitkey Inc. All rights reserved. ソフトウェアとハードウェアに跨る自社開発プロダクト

Slide 12

Slide 12 text

Copyright © Bitkey Inc. All rights reserved. ビットキー組織 CEO CRO COO CFO CHRO workhub 事業本部 homehub 事業本部 製品開発本部
 技術本部
 製品品質本部
 プロダクトバリュー デザイン部 homehub開発部 workhub開発部 プラットフォーム 開発部 ファームウェア 開発部 ハードウェア 開発部 製品検査部 デバイス品質保証部 研究開発部 CAO エンジニアリング 
 マネジメント室 


Slide 13

Slide 13 text

Copyright © Bitkey Inc. All rights reserved. ビットキー組織 CEO CRO COO CFO CHRO workhub 事業本部 homehub 事業本部 製品開発本部
 技術本部
 製品品質本部
 プロダクトバリュー デザイン部 homehub開発部 workhub開発部 プラットフォーム 開発部 ファームウェア 開発部 ハードウェア 開発部 製品検査部 デバイス品質保証部 研究開発部 CAO エンジニアリング 
 マネジメント室 
 コーポレート ビジネス 開発

Slide 14

Slide 14 text

Copyright © Bitkey Inc. All rights reserved. チームトポロジー ストリームアラインドチームが自律的に すばやく価値を届ける ↕ homehub や workhub が自律的 にすばやく価値を届ける https://pub.jmam.co.jp/book/b593881.html

Slide 15

Slide 15 text

Copyright © Bitkey Inc. All rights reserved. チームトポロジーで考えるビットキー開発組織

Slide 16

Slide 16 text

Copyright © Bitkey Inc. All rights reserved. チームトポロジーで考えるビットキー開発組織 Platform Engineering を主務とする チームは存在せず

Slide 17

Slide 17 text

Copyright © Bitkey Inc. All rights reserved. チームトポロジーで考えるビットキー開発組織 事例① 事例③ 事例②

Slide 18

Slide 18 text

Copyright © Bitkey Inc. All rights reserved. 事例①:GitHub Actions

Slide 19

Slide 19 text

Copyright © Bitkey Inc. All rights reserved. SREチーム ● 2名体制 ● ストリームアラインドチームの SLI / SLO の管理 ● アーキテクチャ設計支援・管理 (terraform)

Slide 20

Slide 20 text

Copyright © Bitkey Inc. All rights reserved. 課題 ● GitHub Actions をセキュアに利用するためのプラクティ スの実施状況がリポジトリによってバラツキ ● OIDC によるパブリッククラウドの認証や GitHub Apps を利用したAPIトークンの発行はやり方を知らなければ改善 の動機も生まれない

Slide 21

Slide 21 text

Copyright © Bitkey Inc. All rights reserved. 解決策 ● GitHub Actions の Composite Actions や Reusable workflow をまとめるリポジトリを作成 ● 組織内で再利用可能に ● 事前に必要な設定はあらかじめ済ませておくことで、コード をコピペするだけで利用可能

Slide 22

Slide 22 text

Copyright © Bitkey Inc. All rights reserved. Composite Actions ● action.yaml / action.yml で定義 ● uses によって 利用

Slide 23

Slide 23 text

Copyright © Bitkey Inc. All rights reserved. Reusable workflow ● workflow を uses によって利用

Slide 24

Slide 24 text

Copyright © Bitkey Inc. All rights reserved. Composite Actions / Reusable workflow ● Google Cloud の OIDC による認証 ● 機密情報のハードコードを防ぐ静的解析 ● Slack への通知 ● Jira チケットとの自動紐付け ● GitHub Apps を利用したAPIトークンの発行 ○ のちに公式から Actions が提供

Slide 25

Slide 25 text

Copyright © Bitkey Inc. All rights reserved. Google Cloud の OIDC による認証

Slide 26

Slide 26 text

Copyright © Bitkey Inc. All rights reserved. Google Cloud の OIDC による認証

Slide 27

Slide 27 text

Copyright © Bitkey Inc. All rights reserved. Jira チケットとの自動紐付け

Slide 28

Slide 28 text

Copyright © Bitkey Inc. All rights reserved. Jira チケットとの自動紐付け

Slide 29

Slide 29 text

Copyright © Bitkey Inc. All rights reserved. Jira チケットとの自動紐付け

Slide 30

Slide 30 text

Copyright © Bitkey Inc. All rights reserved. 結果 ● 中央集権的なリポジトリを用意 ● 共通の課題を解決するコードを集約 ● 開発者は仕組みを理解していなくても、安全に便利に GitHub Actionsを利用可能

Slide 31

Slide 31 text

Copyright © Bitkey Inc. All rights reserved. 片鱗ポイント ● Composite Action や Reusable workflowごとに READMEを充実 ● InnerSource を意識して OSS のように README を 手厚く用意 ● カタログとしての機能は持たせておらず検索によって発見 されるので、認知の向上に課題 ※ InnerSource ... オープンソースの原則を社内のソフトウェア開発に適用すること

Slide 32

Slide 32 text

Copyright © Bitkey Inc. All rights reserved. 事例②:Cloud Run

Slide 33

Slide 33 text

Copyright © Bitkey Inc. All rights reserved. 遊撃隊チーム ● 2名体制 ● workhub チームへの支援 ○ 共通性が高いもの ○ 深いシステムへの対応 ● 広守備範囲 ● なんでもやる

Slide 34

Slide 34 text

Copyright © Bitkey Inc. All rights reserved. Cloud Run ● Google Cloud が提供するコンテナを実行できる マネージドなサービス ○ 任意の言語、ライブラリ、バイナリ ○ 高速な自動スケーリング ○ サイドカーパターン

Slide 35

Slide 35 text

Copyright © Bitkey Inc. All rights reserved. 課題 ● 通常のWebアプリケーションとは別で画像生成サーバーな どドメインの異なるサービスが増えてきた ● ビルドフローのコード内に追加するような形だと開発者が 追加していきづらいしわかりづらいので設定可能にしたい ● image 差し替えを terraform ではなくアプリケーション 側のデプロイフローに載せたい

Slide 36

Slide 36 text

Copyright © Bitkey Inc. All rights reserved. 解決策 ● Cloud Run サービスに必要な設定項目用に独自の yaml ( cloud_run.yaml )を規定 ● それを処理するスクリプトを実装 ● 最初は cloud_run.yaml とスクリプトだけでやっていたが、 image のビルド最適化のために image に関する設定は docker bake に分離 ● アプリケーションと独立したインフラとしての設定値は terraform で管理

Slide 37

Slide 37 text

Copyright © Bitkey Inc. All rights reserved. cloud_run.yaml IDE にてJSON Schema への補完や説明が記載される デプロイするための環境を指定 デプロイ対象のサービスリスト デプロイ対象のイメージ名 引数指定 デプロイ時の順序

Slide 38

Slide 38 text

Copyright © Bitkey Inc. All rights reserved. 実行スクリプト ref: https://github.com/google/zx お手軽に JS を shell で実行するおまじない 設定を config として読み込む デプロイしたいサービスを絞りたければ指定

Slide 39

Slide 39 text

Copyright © Bitkey Inc. All rights reserved. 実行スクリプト 複数のコマンドを用意 オーダー順に並び替え デプロイ関数を実行 デプロイ関数 gcloud コマンドによるデプロイ

Slide 40

Slide 40 text

Copyright © Bitkey Inc. All rights reserved. 結果 ● 最小限の設定だけ気にすればよいので認知的負荷は減少 ● アプリケーション開発者がCloud Runサービスを追加する 機会はさほど多くはないので役立った場面は少ない ● docker bakeについてはさほど難しいものではないが、 追加で覚えることが増えて認知的負荷は上昇しているかも

Slide 41

Slide 41 text

Copyright © Bitkey Inc. All rights reserved. 片鱗ポイント ● 開発者が Cloud Run サービスを簡単に追加できるよう に仕組み化 ● 独自yamlと簡易スクリプトだけなのでプラットフォームと呼 べるほどではないがプラットフォームエンジニアリングの実 現していることに相似 ● workhub にしか適応できていない

Slide 42

Slide 42 text

Copyright © Bitkey Inc. All rights reserved. 事例③:社内標準仕様

Slide 43

Slide 43 text

Copyright © Bitkey Inc. All rights reserved. 津島 雅俊 Masatoshi Tsushima 2004 ソフトウェア開発との出会い Webサイトや携帯アプリを作って遊んでいました 2018秋 Bitkeyに参画 当初はbitkey platformの開発を担当 主にGoでサーバサイドを開発 2019秋 ファームウェアチームを立ち上げ 第一世代デバイスのファームウェアを内製化 現在に続く開発スタイルを構築 2020夏 第二世代ロックデバイスの開発 内製を前提としたファームウェア開発 2021春リリース 2022夏 Individual contributor (?) Android/iOS/Flutter、デバイスQA用アプリ、社 内仕様の標準化、Makefile職人、CIおじさん

Slide 44

Slide 44 text

Copyright © Bitkey Inc. All rights reserved. 組込み開発者のためのツール・サービス ● ビルド/エディタ設定生成ツール ○ CMake 的な役割 ● BLE クライアントアプリ ○ curl 的な役割 ● 社内標準仕様 ● 社内向け仕様書ホスティング ● CI/CD 用 Docker & GitHub Actions ● アップデートの配布

Slide 45

Slide 45 text

Copyright © Bitkey Inc. All rights reserved. ソフトウェアとハードウェアに跨る自社開発プロダクト 再掲

Slide 46

Slide 46 text

Copyright © Bitkey Inc. All rights reserved. 社内標準仕様ができる前のテスト bitlock LITE bitbutton bitlock GATE bitlock MINI bitlock PRO bitreader+ … bitlock homehub homehub Crew workhub bitreader bitbutton bitreader+ … 待ち受ける方 つなぎに行く方

Slide 47

Slide 47 text

Copyright © Bitkey Inc. All rights reserved. 社内標準仕様ができる前のテスト bitlock LITE bitbutton bitlock GATE bitlock MINI bitlock PRO bitreader+ … bitlock homehub homehub Crew workhub bitreader bitbutton bitreader+ … これ、毎回全部テストするの…? (実際やってた)

Slide 48

Slide 48 text

Copyright © Bitkey Inc. All rights reserved. Web で そんな困り方しなくない?

Slide 49

Slide 49 text

Copyright © Bitkey Inc. All rights reserved. RFC で定まっているから RFC 7230, 7231, 7232, 7233, 7234, 7235

Slide 50

Slide 50 text

Copyright © Bitkey Inc. All rights reserved. これは近い将来ヤバいことになる…! ● 全部テストしないと安心できない ● 一覧管理しないといつか被る ● バグってる方ではなく、直せる方を直してしまう ○ アプリ開発者「悪いのは、俺の実装の方か…?」 ○ 後段の出荷物にワークアラウンドをコピペしまくる

Slide 51

Slide 51 text

Copyright © Bitkey Inc. All rights reserved. RFC/IANA を参考にまとめる

Slide 52

Slide 52 text

Copyright © Bitkey Inc. All rights reserved. 出来上がったもの 標準仕様 番号の割り当て ツール

Slide 53

Slide 53 text

Copyright © Bitkey Inc. All rights reserved. 社内で標準化した方が良いと思う領域 ● ページネーション ● エラー ● ログレベル ● デザイントークン ● ロケールやタイムゾーンの扱い ● Slack チャネルのプレフィックス

Slide 54

Slide 54 text

Copyright © Bitkey Inc. All rights reserved. まとめと今後の展望

Slide 55

Slide 55 text

Copyright © Bitkey Inc. All rights reserved. まとめ ● ビットキーの組織とチームトポロジー ○ プラットフォームエンジニアリングを主務としたチームの不在 ● 各チームでのプラットフォームエンジニアリングの片鱗 ○ GitHub Actions ○ Cloud Run ○ 社内標準仕様

Slide 56

Slide 56 text

Copyright © Bitkey Inc. All rights reserved. 今後の展望 ● プラットフォームエンジニアリングの理解 ● ストリームアラインドチームへの説明 ● 組織としてプラットフォームエンジニアリングチーム