このページでは『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜』の正誤表と増補・改訂をお知らせします。

この本を手にとってくださった方がちょっとでも選んでよかったと思う本に育てていきたいので、章の追加なども楽しみにしていてください。

増補・改訂版は購入方法に応じて異なります。

  • ダウンロードカード: Googleドライブ。バージョン毎にフォルダが分かれています。
  • 技術書典のサイト: 技術書典サイトのマイページ。常に最新版をアップロードしています。
  • Booth: Booth購入ページの注文詳細画面。常に最新版をアップロードしています。

引き続きフィードバックお待ちしてます!@toshi0607

正誤表

PDFページ PDF反映 ePub版反映 MOBI版反映 修正日 version

増補・改訂

PDFページ 内容 PDF反映 ePub版反映 MOBI版反映 修正日 version
全般 Knative v0.14へのバージョンアップ done done done 2020/5/12 v2.0.0
全般 プロダクトのバージョン明記 done done done 2020/5/12 v2.0.0
全般 インストールされるコンポーネントの一覧追加 done done done 2020/5/12 v2.0.0
全般 CNCFlandscape上の位置付け追記 done done done 2020/5/12 v2.0.0
全般 カウプランさんのRe:VIEW Starterへの移行 done done done 2020/5/12 v2.0.0
8 API Gatewayとサービスメッシュコラム追加 done done done 2020/5/12 v2.0.0
21 Ingress APIの機能拡張コラム追加 done done done 2020/5/12 v2.0.0
21 L4からL7 LB移行のコラム追加 done done done 2020/5/12 v2.0.0
35 Ambassadorの提供機能一覧追加 done done done 2020/5/12 v2.0.0
39 AmbassadorのIR関連記述の詳細化 done done done 2020/5/12 v2.0.0
55 KourierのKnativeリポジトリでのリリース追記 done done done 2020/5/12 v2.0.0
60 Kourierの活用事例コラム追加 done done done 2020/5/12 v2.0.0
80 Envoyとgo-control-planeの未来コラム追加 done done done 2020/5/12 v2.0.0
89 所属の変更 done done done 2020/5/12 v2.0.0

リソース

明けましておめでとうございます。2019年は2匹の猫を家族に迎え入れ、安らぎとは何かを教えてもらった1年でした。

仕事では2018年9月に転職してから開発に取り組んでいたメルペイが世に出たりしました。その中でKubernetesなどに出会い、いろいろあって2020年はメルカリのMicroservices Platformチームに移って基盤の開発・運用に取り組みます。

リンクはない目次

  • OKRの振り返り
  • 習慣目標の振り返り
  • 2020年の話
  • 2019年アーカイブ

OKRの振り返り

2019年の振り返り

2019年10〜12月の振り返り

KR毎に3段階で達成度を判定し、それぞれ所感を書いていきます。

  • できた
  • 微妙
  • できなかった

Objective 1

O1: プラットフォームエンジニアへの闘争

Key Result 1 【できた】

DIY Serverlessプラットフォームを構築する

  • ServerlessDays Tokyo
  • ServerlessDays Fukuoka
  • CLI
  • server -> functionのミドルウェア

ServerlessDays TokyoとFukuokaでFaaSプラットフォームを作るワークショップを担当する過程で作りました。

ServerlessDays Tokyo 2019でWorkshop 03「Knativeで作るDIY FaaS」を担当しました #serverlessdays


https://github.com/toshi0607/build-your-own-platform-with-knative

HTTPリクエストを受けて処理するのが主なユースケースです。既存のKubernetesでFaaSを利用したいのはイベントハンドリングだと思うので、その観点ではだいぶ未熟です。

CLIはkubectlのプラグイン形式で公式の手続き的なコマンドを追加し、ミドルウェアは薄いのを書くつもりでした。しかし、CLIについてはtriggermesh/tmで、ミドルウェアはopenfaas/faasで実験用途には十分だったので自作しませんでした。

本格的に検討するときには①イベントハンドリング②ミドルウェア③CLIの優先度で深掘ろうと思います。

ワークショップは社内でもやってみました。福岡でも感じましたが、FaaSやサーバーレスに興味がある人よりは、普段Kubernetesを触ってるエンジニア(アプリケーションでもプラットフォームでも)に対してKnativeを触ってもらうといろいろ議論したり有意義なのかなぁと思いました。

Knativeに限らず勉強会のノリでやっていけるとよさそうです。

Key Result 2 【微妙】

Kubernetesの知識を網羅的・原理的に理解する

  • CKA取得
  • 何かコントローラー作る
  • what-happens-when-k8sを図を書きながら説明できるようになる

CKAについては、11月半ばに2020年1〜3月に回しすることにしてCKADを受験しました。10、11月は平日毎朝30分~1時間『Kubernetes完全ガイド』を読み直す時間とり、(いろいろ落ち着いた)12月の半ばからdgkanatsios/CKAD-exercisesをGKEのクラスタ上で3周やってみました。

12月28日に受験して合格しました。

コントローラーは未着手です。この振り返り記事が終わったら『実践入門Kubernetes カスタムコントローラへの道』で入門はしたいです。

what-happens-when-k8sの説明については必要があったのでホワイトボードで図を書きながら説明する必要にかられてやりました。

特にネットワーク周りが弱かったので次四半期の課題です。

Key Result 3: プラットフォームを支えるOSSにコントリビューションする 【微妙】

機能 > テスト > リントツールでわかるもの > 設定ファイル > ドキュメント・コメント

https://github.com/syndbg/goenv/pull/105
https://github.com/syndbg/goenv/pull/104
https://github.com/GoogleCloudPlatform/functions-framework-go
https://github.com/GoogleCloudPlatform/functions-framework-go/pull/14
https://github.com/syndbg/goenv/pull/103
https://github.com/syndbg/goenv/pull/102
https://github.com/syndbg/goenv/pull/101
https://github.com/dapr/dapr/pull/631
https://github.com/gcpug/handy-spanner/pull/1

何もやっていないわけではないですが機能なりテストないでコントリビューションしたかったです。tektonで割り当てられているissuesを解決するコードを書くところから…

Objective 2: ゆとりある心で秋〜冬を感じる

KR1: 心があたたまる食べ物を食べる 【できた】

鍋パする

しました!

KR2: 季節のイベントに参加する

  • ディズニーハロウィン
  • 温泉
  • もみじ、山

ディズニーはハロウィンに間に合わなかったのでクリスマスに行きました。

温泉は昨年のふるさと納税で長野へ。大学のゼミで訪れた小布施にも久しぶりに行ってきました。

奥多摩にもみじ狩に行ったらあまり紅葉が進んでない日もありました。

KR3: やりたこと、いきたいことリストをつくりワクワクする 【できた】

やってみました!OKRに家庭の時間を入れるようにしたものの、3ヶ月単位で考えると計画的にやらないと実現できないことを含めることが難しいと感じました。その一方で生きてるうちにやってみたいことって何なんだろう?と思ったのが取り組んだきっかけです。

  • カッパドキアで気球に乗る
  • シャウエンを歩く
  • ピラミッドを見る
  • ミラコスタに泊まる
  • 開発者のプラットフォームを開発する
  • クラウドを開発する
  • このOSSと言えばtoshi0607みたいなのを開発する
  • 仕事でOSSを開発する
  • OSS開発が仕事になる会社で働く
  • クリスマス島でカニの大群を見る
  • 久石譲のSummerをピアノで弾く
  • 腹筋を割る
  • 宮古島で野生のヤシガニに遭遇する
  • 技術書典の本を底本にしない単著の技術書を出す
  • オライリーの本を監訳する
  • 湯らっくすで整う
  • ロックマンX系の曲演奏する
  • また歌うのが楽しいと思えるようになる
  • 低温調理できるようにする
  • 大きめの甲殻類を飼育する
  • 本場でノドグロを食べる
  • パラグライダーする
  • 燻製料理を生産できるようにする
  • サグラダファミリアを見る
  • 古民家に泊まる
  • 宿坊に泊まる
  • マカオタワーのバンジージャンプする
  • 砂漠をラクダでゆく
  • オーロラを見る
  • フィンランドでサウナに入って湖に飛び込む
  • 弘前公園の花筏を見る
  • 裸眼で視力1.5
  • ニュルンベルクのクリスマスマーケットに行く
  • スイスの登山鉄道に乗る
  • サントリーニ島に行く
  • イグアスの滝を見る
  • モアイ像を見る
  • 船旅をする
  • ガンジス川を見る
  • ペトラ遺跡を見る
  • クアッカワラビーと写真を撮る
  • 氷に糸垂らして魚釣る
  • ザリガニ捕まえる
  • 毎年スノボする

海外旅行、仕事、趣味などいろいろですね。準備した上で良いタイミングにめぐり合えないと実現できなさそうなものや、時間をとってお金を払えばOKなものもあります。

基本は今後のOKRに盛り込みつつ、このTODOリストみたいなやつひたすらチェックつけていったら本当に人生よかったって言える?とか人生の進捗を考えていこうと思います。

OKR総括

今四半期の最大の焦点は7〜9月の振り返りで書いたこの部分でした。

プラットフォームの運用・構築・開発、利用サポートができるエンジニアになりたい思いが強まったので、個人OKRもそれに寄せていきたいです。人と話して目の前の技術スタックに活きる順番ではまずKubernetesの使い方・動作原理を理解してより低レイヤーに降りていくのが現実的そうでした。本業として実現できるように頑張る。

本業として実現できるように頑張る。頑張ってもらいつつ頑張った結果、2020年から(最終的に)メルペイからメルカリのMicroservices Platformチームに移ることになりました。

大きなチャレンジになりますが、早く一人前のYAML Engineerになれるようキャッチアップしつつ頑張ります。

習慣目標の振り返り

習慣という意味では、7〜9月の予定が厳しい時期にスマホゲームを(クロノ・トリガー以外)全部アンインストールしました。その結果、歩いてる時間にPodcastを聴く習慣が身につきました。来年は仕事では基本的に英語コミュニケーションになるのでよかったっぽいです。

2019年の目標

本(執筆): 2冊/年

技術書典が2回あったので2冊出しました。初版が不完全燃焼でも、Knativeの歩き方のように第2版で大幅アップデートして手に取ってくださった方に届けられ、自分の知識もアップデートできるうちは有効に思います。

CFP: 4ヶ月に1回出してみる

  • CloudNative Days Tokyo(登壇)
  • Serverlessconf New York City ’19
  • ServerlessDays Melbourne 2019(登壇)
  • ServerlessDays Fukuoka(登壇)

今年は年間を通じてプロポーザルが必要なカンファレンスに挑戦するようになりました。Serverlessconf New York City以外は幸い採択され、登壇の機会をいただきました。おすすめなカンファレンス用プロポーザルの書き方を読んで審査員の方々の気持ちを考えたり、社内の強くて親切な方にプロポーザルを添削していただいたり手厚いサポートあっての登壇でした。

業務未経験で駆け出したエンジニアの5年後 〜目標管理の変遷と個人OKR〜にも書いたのですが、個人活動のアウトプットにおいていかにフィードバックをもらうかは注力すべきポイントなので今後も意識して継続していきたいです。アンケートとるのもいろんな人からたくさん声をいただく上でとても有効な手段の1つだと思います。お願いして時間をいただいてヒアリングしたりバイネームで臨むのが僕にとっては後の活動への影響が大きかったです。

OSS: 1PR/月

新しく作ったには2リポジトリです。

https://github.com/toshi0607/build-your-own-platform-with-knative
https://github.com/toshi0607/jctl

自分が作ったもの以外へのOSS PRは前年比だいぶ習慣にはなったものの、7〜9月の振り返りに書いたこれに尽きます。

自分な好きなOSSに対しリリースノートに載るようなインパクトのあるコントリビューションがしたいという思いを強めました。

1〜3月

https://github.com/syndbg/goenv/pull/71
https://github.com/cncf/wg-serverless/pull/74
https://github.com/syndbg/goenv/pull/68
https://github.com/jamiehannaford/what-happens-when-k8s/pull/18
https://github.com/syndbg/goenv/pull/66
https://github.com/syndbg/goenv/pull/65
https://github.com/serverless/serverless/pull/5726
https://github.com/syndbg/goenv/pull/64

4〜6月

https://github.com/ahmetb/cloud-run-faq/pull/22
https://github.com/syndbg/goenv/pull/86
https://github.com/syndbg/goenv/pull/84
https://github.com/knative/docs/pull/1373
https://github.com/syndbg/goenv/pull/83
https://github.com/syndbg/goenv/pull/78
https://github.com/syndbg/goenv/pull/73
https://github.com/knative/docs/pull/1147

7〜9月

https://github.com/mercari/wrench/pull/7
https://github.com/mercari/wrench/pull/5
https://github.com/mercari/wrench/pull/4
https://github.com/mercari/wrench/pull/3
https://github.com/mercari/go-emv-code/pull/8
https://github.com/mercari/go-emv-code/pull/7
https://github.com/virtual-kubelet/virtual-kubelet/pull/774
https://github.com/syndbg/goenv/pull/97
https://github.com/google/ko/pull/89
https://github.com/knative/client/pull/412
https://github.com/knative/pkg/pull/646
https://github.com/ijin/serverlessdays-tokyo/pull/16
https://github.com/k1LoW/tbls/pull/137
https://github.com/kedacore/keda/pull/343
https://github.com/GoogleCloudPlatform/cloud-run-button/pull/82
https://github.com/google/kf/pull/659
https://github.com/google/go-cmdtest/pull/1
https://github.com/syndbg/goenv/pull/95
https://github.com/kedacore/keda/pull/323
https://github.com/syndbg/goenv/pull/94
https://github.com/deislabs/osiris/pull/37
https://github.com/kedacore/keda/pull/323
https://github.com/syndbg/goenv/pull/88
https://github.com/syndbg/goenv/pull/86
https://github.com/kubernetes-sigs/kubebuilder/pull/967
https://github.com/knative/client/pull/388
https://github.com/knative/eventing-contrib/pull/557
https://github.com/knative/eventing/pull/1732
https://github.com/syndbg/goenv/pull/91
https://github.com/syndbg/goenv/pull/90

10〜12月

https://github.com/syndbg/goenv/pull/105
https://github.com/syndbg/goenv/pull/104
https://github.com/GoogleCloudPlatform/functions-framework-go
https://github.com/GoogleCloudPlatform/functions-framework-go/pull/14
https://github.com/syndbg/goenv/pull/103
https://github.com/syndbg/goenv/pull/102
https://github.com/syndbg/goenv/pull/101
https://github.com/dapr/dapr/pull/631
https://github.com/gcpug/handy-spanner/pull/1

ひとまとまりのソースコード公開: 1リポジトリ/月

技術書(読む): 30分/日

(2019年10〜12月分)

CKA/CKAD受験にあたり読み直しました。2019年はこの本でKubernetesに入門し、結果的にKubernetesを中核技術とするチームに移ることになりました。僕の2019年を象徴する本になりました。

CKADにちょうどよい本でした。Kubernetesでアプリケーションを開発するエンジニアのKuberentesリソース入門に最適です。

今読んでいてCKA向けに感じます。admin視点で各コンポーネントの入門に最適そうです。

その他本(読む): 30分/日

(2019年10〜12月分)

OKRの登壇をするにあたり読み直しました。各社のユースケースが載っていて実感がわきやすく、OKR登場の歴史がわかりやすいです。巻末のチェックリストだけでも読む価値があると思います。

OKRの登壇をするにあたり読みました。Measure What Matters比コンパクトにまとまっていて読みやすく、入門に最適です。個人でやる場合はこれ1冊読むだけで十分そうでした。

サンプル部分だけ読みました。上で紹介した2冊と別の情報が得られそうになかったので続きは読みませんでした。

筋トレしながらオーディオブックを聞くようになりました。日本語でも聞いた後に覚えてるかと言われると怪しいので、英語のリスニングって母国語でない以上のハードルがあることに気づきました。

ふぁーーーこれやーーーって本に出会いがっつり感想書く: 1回/3ヶ月

今四半期は読み直しが多く新しい出会いを強く感じることはありませんでした。

読んで強い影響を受けた本2冊(Kubernetes完全ガイドとMeasure What Matters)に必要に駆られて立ち返ったのは偶然ではないはずです。必死に生きて課題にぶつかり、先人の知恵に感謝しつつ本を読むことを継続していけたらと思います。

ピアノ晒す: 1回/月

1度も触らず。やりたいことリストに久石譲さんのSummerをピアノで弾くのとロックマンX系の曲をやるが入ってるので再開します。

筋トレ: 1回/週

週1品川健康センター通いを継続できました。12月半ばにリングフィットを導入したので、22時までに帰宅する日はやろうと思います。

腹の未来が気になるので、とりあえず割ります。

2020年の話

2020年はプラットフォームを開発・運用するチームで働くにあたって、必要な実力をつけて成果を出したいというのが本分です。

グループ内の異動とはいえ、これまではプラットフォームの利用者だったので転職以上に仕事への影響は大きいと思います。
そのため、これまで開発上でバンクエンドエンジニアとして感じてきた課題やインフラ面での難しさは念頭に起きつつ、Kubernetesを起点にレイヤーを下ってキャッチアップするのは大前提です。

具体的にどういう部分で知識・経験不足を感じるかがわからないだけに四半期単位くらいでOKRを定め確実に身につけていくサイクルはより重要です。今の段階で確実に厳しそうに感じる部分を盛り込んで直近3ヶ月のOKRを考えます。

あとは業務上得たよい知見でもって大きなカンファレンスで登壇したいという気持ちがあります。入門や概念説明系の登壇も裾野を広げる観点では意味があると思いますが、結局現実世界でどんな課題を解決したのかに対して去年何も応えられなかったのが僕はいたたまれませんでした。

習慣目標はいったん無くして、やっぱり欲しくなったら復活させます。英語も必要そうであれば何かしら足します。

OSS系は掲げるだけではやらないので、土日の一定時間をカレンダーで抑えてみようと思います。

Objective 1

プラットフォーム開発の基礎力向上

※働きはじめて特に厳しそうな分野が見つかれば変更してフォーカスする

Key Result 1

CKAを取得2020年3月までに取得する

Key Result 2

サービスメッシュ、LBなどの動作の仕組みをKubernetesの文脈で説明できる

  • 『Istio Up and Runnning』読む
  • 技術書典8でKnativeに利用できるGatewayコンポーネントの話を書く

Key Result 3

CloudNativeを実現するOSSを開発する(3PR以上)

  • issueを閉じる
  • テスト足す
  • 機能足す

Objective 2

生きてる実感を得て心をワクワクさせる

Key Result 1

嫁氏とゆったりした時間を過ごす

  • スターウォーズを観る
  • 低温調理できるようにする(from ワクワクリスト)

Key Result 2

趣味と闘争する

  • スノボする(from ワクワクリスト)
  • 腹筋を割る(from ワクワクリスト)
  • 土日のうち1時間をピアノに充てる(from ワクワクリスト)

Key Result 3

ワクワクリストを整理する

  • 優先度
  • 何をしたら実現できるか
  • 費用
  • 期間

2019年アーカイブ

登壇

やってみたかった海外登壇やServerless Meetup Tokyo、Serverless Days(Conf)への登壇が果たせてよかったです。大テーマが同じワークショップ3時間*2をやってみるのも、それを社内向けに展開してみるのもよい試みでした。業務との距離が近いテーマであればあるほどフィードバックに現実味がある一方で、多少距離があるのも技術的な出会いや別の視点を提供する場として有意義に感じました。

自分のKRと紐づけてアウトプットする場としては登壇でも執筆でもなんでもいいと思うものの、一種のお祭り感や人との交流がある点で無理なく続けていけたらと思います。

2019/12/13・14 ServerlessDays Fukuoka 2019

Microsoft Ignite The Tour 2019 Tokyo

業務未経験で駆け出したエンジニアの5年後 〜目標管理の変遷と個人OKR〜

2019/10/21・22 ServerlessDays Tokyo 2019

2019/9/19 Serverless Meetup Tokyo #14

2019/8/29 ServerlessDays Melbourne 2019

2019/7/22 CloudNative Days Tokyo 2019

2019/7/7 エンジニア銭湯#2

2019/6/14 mercari.go #8

2019/3/6 Serverless Meetup Tokyo #11

Kubernetes・Serverlessとの出会いと、Knative入門 @logmi

執筆

寄稿

技術書典での活動を継続しつつ、初めて雑誌寄稿する機会をいただきました。

記事

OSS

https://github.com/toshi0607/build-your-own-platform-with-knative
https://github.com/toshi0607/jctl
https://github.com/jamiehannaford/what-happens-when-k8s/tree/master/ja-jp
https://github.com/toshi0607/pse

受賞

概要

  • 状況変化が激しい環境で、向き合うべき課題と方向性を適切に定め、素早く成長していくためには「技術の学び方を学ぶことへの投資や管理」が不可欠
  • 経営管理手法の1つであるOKRを個人の目標管理に適用することはとても有意義
  • 個人でOKRをやる上ではフィードバックのもらい方や振り返りを工夫しない限り効果が半減してしまう

Microsoft Ignite The Tour 2019 Tokyoでの登壇

12月5、6日に開催された東京でのMicrosoft Ignite The Tour 2019個人OKRで加速させる技術力向上というタイトルで登壇しました。自分が45分間もOKRの話をするなんて夢にも思っておらず、後述する個人OKRにも含めているものでもなかったので依頼いただいたときには少し迷いました。しかし、つぎの理由から挑戦してみることにしました。

  • 定期的に目標管理手法を見直し、改善していくことには価値がある
  • キャリアの話と不可分で、需要がないこともなさそう

自由に資料公開できる雰囲気もないので、登壇をベースにまとめ直すことにしました。新年間近なこのタイミングでこの記事を書くことで、何かしら目標管理したい人の一助になれたらいいなぁと思っています。

OKRとは

OKRとは「会社内のあらゆる組織が、同じ重要な課題に全力で取り組むようにするための経営管理手法」です。

  • O(Objective、目標)は「何を」達成するか
    • 重要で、具体的で、行動を促し、人々を鼓舞するようなものです。
  • KR(Key Results、主要な結果、成果指標)は目標を「どのように」達成するかモニタリングする基準
    • 具体的で時間軸がはっきりしており測定・検証可能なものです。

採用企業

つぎのような企業で活用されています。

Intel、Google、AOL、Dropbox、LinkedIn、Oracle、Slack、Spotify、Twitter、Zynga、Anheuser-Busch InBev、BMW、Disney、Exxon Mobil、Samsung、freee、Mercari

OKRの設定例

まずIntelの例を見てみましょう。

  • O
    • 「8086」を業界最高性能の16ビットマイクロプロセッサ・ファミリーにする。以下をその尺度とする。
  • KR(1980年第2四半期)
    • 「8086」ファミリーの性能の優位性を示すベンチマークを5つ開発し公表する(アプリケーション)
    • 「8086」ファミリーの全製品をリリースし直す(マーケ)
    • 8MHz版の製造を開始する(技術、製造)
    • 演算コアプロセッサのサンプルを遅くとも6月15日までに製作する(技術)

マイクロプロセッサ開発で競合がひしめく中、業界トップになるために全社一丸となって取り組んだ際のOKRです。KRには担当の部門が割り振られており、それが各部門のOになりさらにKRが設定される階層構造になっています。

もう1つはYouTubeの例です。

  • O
    • 以下を成長の推進力として(2016年末までに)1日あたりの総視聴時間10億時間を達成する
  • KR
    • 検索チームとメインアプリ(+X%)、リビングルーム(+X%)
    • エンゲージメントと、ながら視聴を増やす(1日あたり総視聴をX時間にする)
    • 「ユーチューブVRエクスペリエンス」を開発し、VRカタログの動画本数をXからYに増やす

KRすべてが達成されるとOが達成されるという構成です。

OKRの特徴

OKRを採用すると何がよいのかについては『Measure What Matters 伝説のベンチャー投資家がGoogleに教えた成功手法 OKR』に書いてあります。かいつまんで紹介します。

  1. 優先事項にフォーカスし、コミットする
  2. アラインメントと連携がチームワークを生む
  3. 進捗をトラッキングし、責任を明確にする
  4. 驚異的成果に向けてストレッチする

①優先事項にフォーカスし、コミットする

何より大事なのは集中すべき大事なことがはっきりするということです。これからの3ヶ月で一番重要なことは何か?という問いは重要でないことも同じように明確にします。

意思決定せずに、あれもこれも大事な状態で闇雲に手を動かすこともよしとしません。はっきりと選択することで修正もできます。意思決定をしない、あるいはすぐ決定を変えてしまうと何も学べません。リーダーは何が重要か選択することに時間とエネルギーを注がなければならないとされています。

②アラインメントと連携がチームワークを生む

透明性の高いOKRというシステム下ではCEOを含めた全員の目標がオープンに共有されます。それにより、個人は自らの目標を会社の戦略と結びつけ、他部門との補完関係を理解し連携できます。

トップから現場までのアラインメントによってすべてのコントリビューターが組織の成功と結びつくようになります。

③進捗をトラッキングし、責任を明確にする

OKRは定期的な確認、客観的評価、継続的再評価により実効性が高まります。

OKRの進捗を確認する中で、主要な目標の達成が危ぶまれる事態になれば、立て直すためのアクションを作成します。進捗確認も定量的に設定されたKRがある上で行えば、主観を排し責任を明確にすることができます。

④驚異的成果に向けてストレッチする

OKRを設定するときには60〜70%の達成率になるような野心的な目標を立てます。100%達成するコミット目標も設ける場合もあります。設定したOKRのうちどれが野心的目標で、どれがコミット目標であるかという位置付けを明確にします。

四半期が終わり達成状況を確認するとき、達成率が常に100%の場合は目標が低すぎるため設定レベルを見直します。

OKRは評価と直接的に結びつけないことで、失敗する可能性がある目標にチャレンジする文化を醸成します。評価にOKRの達成度をまったく含めないという意味ではありません。

OKRを支えるCFR

OKRはCFRとセットで運用することで実効性が高まります。前述の「③進捗をトラッキングし、責任を明確にする」でも触れました。

CFRとは年1回の勤務評定の限界から生まれた継続的パフォーマンス管理のことです。

  • C(Conversation、対話)
    • パフォーマンス向上を目的にマネージャーとコントリビューターの間で行われる意見交換
  • F(Feedback、フィードバック)
    • プロセスを評価し、将来の改善に繋げるための同僚とのコミュニケーション
  • R(Recognition、承認)
    *貢献への感謝

1on1ミーティング、360度評価、社内表彰制度、ピアボーナスなどもこの文脈に位置付けると目的がはっきりします。

OKRのプロセス

チームでOKRに取り組み、各個人まで降りていくスケジュールはつぎのようになります。

1月から新しいサイクルがスタートする場合、11月頃から目標設定の議論がはじまります。12月末には1年と四半期単位の目標が決め全社目標を共有します。そこから1月の半ばには各個人が設定し、2月には定期的なチェックが始まっています。

re:Work OKRを設定するより

従来の管理手法との比較(参考)

KPIとMBO

  • KPI(Key Performance Indicator)
  • MBO(Management By Objective)
    • ビジネスの成功のために何を目的とするか
    • 部門の売上貢献、組織のオペレーション改善、チームの特定スキルの底上げなどを箇条書き

OKR運用失敗の3つの理由―、なぜ高すぎる目標が逆効果になるのかより

MBOとの比較

年次評価との比較

OKRを個人の目標管理に

僕は個人の目標管理にOKRを活用するようになりました。自分が置かれた状況に合う方法をいろいろと試した結果採用するに至ったため、置かれた状況と目標管理の変遷を合わせて紹介します。

2015年

状況

2014年、SIerで企画営業をしていた僕は(中略)海外でMBAをとって戦略系のコンサルに行くぞ!と思ったりしつつ、書き物が好きだったのでブログ書いたり、高校のときに情報の授業が異様に楽しかったりしたので週末にプログラミングを教えてもらったりして人生の模索をしていました。

その中で6月くらいに自分たちでサービスを作って、フィードバックを集めながらサービスをよくしていく体験にとても感動して、9月頃にはエンジニアになる気持ちでいました。そこから転職活動をはじめ、1社目は書類で落ち、2社目はやる気はすごいと思うけど育成コストが払えないと断られ、3社目に受けたfreeeでエンジニアとしての第一歩を踏み出すことになりました。上場本当におめでとうございます。

正社員ではなく、まず1ヶ月の業務委託からスタートということで生きるのに必死でした。2015年の1年の中で、Railsでサーバーを書くWebサービス単体のリリースからSeleniumを使った銀行明細取得エンジンの開発、WPFのWindowsデスクトップアプリ開発と色々なプラットフォームでの開発をしました。必死でした。

  • 転「職」
    • SIer企画営業からfreeeのソフトウェアエンジニアに
    • 1ヶ月の業務委託 → 6ヶ月の業務委託 → 正社員
  • プロジェクト
    • 青色申告承認申請書送信サービス(Web)
    • 銀行明細取得エンジン
    • 銀行明細取得用Windowsアプリ
  • 技術スタック
    • Ruby on Rails、HTML、CSS、Selenium、C#、XAML、WPF

目標

2015年の1月にエンジニアになるにあたって掲げていたのはこれです。

「技術寄りでサービスを考え、作り、変え、大きくしていくことができるエンジニアになる」

1年や四半期ではなく、長期スパンの理想像ですね。何をやればそうなれるのか具体的なプランや、何をもってそうなった言えるのかの指標はありませんでした(わかりませんでした)。状況が状況なだけに、エンジニアとして働き続けられるようにひたすら目の前のことに取り組みました。

SIer企画営業をやめ、クラウド会計ソフトのfreeeでエンジニアとして働きます

2015年も半ばになる頃にはつぎのような状態を目指していたようです。

  • 目の前にある、必要とされることを何でもこなせる
  • みんなが必要と思っている仕組みを一から(とは言わなくても「自分がやったった」って言えるくらいの貢献度で)作りたい
  • 特定の分野と、逆に誰もやってないけど誰がやるといいやろう?みたいなときにアイツや!って声かけてもらえるようになりたい

27歳になりました

2016年

2016年にはWindowsアプリ開発を中心にロールやプロジェクトが広がりました。Windowsアプリ経由で取得できる銀行明細の種類を増やすためのアーキテクチャの変更を行いつつ、Webからアプリを利用するまでのフロー全体の改善やサポートチームと協力して問い合わせ削減などをしていました。

UX改善は問い合わせ内容を分析した上でKPIを決めてメトリクスを取得、可視化、効果測定、分析して打ち手を考えることや、WebからシームレスにWindowsアプリを利用できるようにするためのWebフロント実装など、前年よりも必要な技術スタックが広がりました。

状況

  • 開発 + プロダクトマネジメント
    • 利用率、ダウンロード率などKPI設定
    • サポートチームと協力し、問い合わせ内容調査
  • プロジェクト
    • Windowsアプリ利用のためのUX改善
    • 銀行明細取得用Windowsアプリ対応行拡大
  • 技術スタック
    • Ruby on Rails、HTML、CSS、Backbone.js、CoffeeScript、C#、XAML、WPF、Embulk、Redush

目標

目標としては年初につぎのようなものを掲げていました。

  • フロントに限らず、QAテスト的な文脈やいろんなプラットフォームで使えるクライアントアプリという文脈でJavaScriptと真剣に向き合いたい
  • クライアントアプリ書いたよしみでAndroid触りたい
  • APIを整備できる人になりたい

転職して1年が経ちました。2015年の振り返りと2016年の目標!

分野は前年比具体的になりましたが、曖昧で指標もありません。

ただ、半年後に考え直し、腰を据えてC#を学ぶことにしたようです。当時社内ではRubyを書く人が多かったことからC#を腰を据えて頑張るのに覚悟が必要でしたが、フォーカスすることで他の言語、プラットフォーム、プロジェクトにも活きる力を伸ばすという意図でした。

2017年

2017年はMicrosoft関連の技術を扱うチームというくくりでチームを作り、そのリードをがんばるという年でした。Windowsアプリは継続的に育てつつ、別のWindowsアプリのMac版の開発にXamarinを活用するプロジェクトにも挑戦しました。サーバーレスにも出会い、Windowsアプリのバックエンドの負荷対策の一環でAWS Lambdaも本番環境に導入したりしました。AWSのコンソールに入ったり、IAMで権限設定したり、クラウドサービスの設定を少しでもしたのはこのときが初めてだった気がします。

状況

  • チームリード
    • Microsoft Platformチーム
    • 日本マイクロソフト様とのHackfest
  • プロジェクト
    • 銀行明細取得用Windowsアプリ対応行拡大
    • サーバーサイド負荷対策でAWS Lambda(C#)
    • 電子申告アプリMac版をXamarinで開発
  • 技術スタック
    • Ruby on Rails、HTML、CSS、Backbone.js、CoffeeScript、C#、XAML、WPF、Xamarin、VSTS、AWS Lambda

目標

目標はつぎのような感じでした。

  • クエリ、データベース: 自分で早くKPIを追えるように、それが動く土台も詳しく
  • 機械学習: 経営者が一歩先に進むための判断をサポートするという文脈かつ良いタイミングなので追いたいです
  • 設計: 打ち手を増やして、サービスを作る、変える、大きくするを継続的によくするために。汎用的なデザインパターンとクライアントサイドの定石をまず身につけます。まだまだベストプラクティスを追うフェーズでよいと思っています。
  • フロントエンド: ユーザさんが直接的に触る部分をよくするための技術、問題解決できるサービスであることを伝えるための手段として。サービスで使われてるメインの技術をまずは追えるように…C#(WPF)的な文脈ではもう少しXAMLを理解しようと思います。
  • Linux: もう少しコマンド自由に使えるように…去年はLinux標準教科書を環境作って追ってみたら多少ましになったので、その復習プラスサーバの負荷状況調べれるようになりたいです。
  • Git: 最低限もわかってない感があるので、本一通り見るのは最低限やります
  • Xamarin: C#のコードが自分のスマホで動くのは純粋に楽しそう
  • エディタ: RubyMineとVisual Studioもう少し使いこなそう

転職して2年が経ちました。2016年の振り返りと2017年の目標

わからないと自覚できてきたことの羅列です。どのタイミングで何をがんばり、何をもってできたとするか基準が曖昧で何も管理できていません。

XAML、Xamarin、Visual Studio、機械学習(Azure ML)は業務との関連が深く、Microsoftプロダクトという共通性から結果的に集中的に取り組み、登壇や記事執筆を通じて結果的に多くの学びを得られました。しかし、土日は完全に消失しました。

2018年

状況

2018年はMicrosoft Platformチームから離れ、明細取得エンジンのマイクロサービス化に取り組みました。その中でGoに2週間ほど触れたことをきっかけにGopher道場に通い、「お金」に関して思うところもあったのでメルペイに転職しました。

メルペイではすべてが業務未経験技術スタックかつ担当マイクロサービスへの1人目のアサインだったため刺激が大きかったです。入社前のアサインの面談で、一番大変なところに配属してください!とお願いした通りでよかったです。

  • 9月に転職
    • すべて業務未経験の技術スタック
    • テックリード
  • プロジェクト
    • 明細取得エンジンマイクロサービス化(前職)
    • 精算マイクロサービス設計、開発
  • 技術スタック
    • Ruby on Rails、HTML、CSS、React(前職)
    • Go、gRPC、GKE、Spanner、Terraform、CircleCI、Spinnaker、Datadog

目標

  • 本: 2冊/年
  • 登壇: 6回/年
  • OSS: 1PR/月
  • ひとまとまりのソースコード公開: 1リポジトリ/月
  • 技術記事: 2記事/月
  • 技術書: 30分/日
  • その他本: 30分/日
  • カラオケ: 2回/月、歌練習: 1回/週
  • 品川健康センター: 2回/月、走る: 1回/週

転職して3年が経ちました。2017年の振り返りと2018年の目標

できた・できなかったがはっきり判断できる習慣を目標にするようになりました。しかし、なんのための習慣かはよくわかりません。
副次的効果として、振り返りやすくなため3ヶ月に1度振り返り記事を書き、行動自体を頻繁に見直せるようになりました。

2019年

状況

2019年はメルペイ全体のサービスリリースと、新たに設計・実装したリリースといろいろリリースが続きました。定期的なリリースはいまだに手が震えます。

  • マイクロサービスの設計、開発、運用
    • サービスリリースし、運用開始
  • プロジェクト
    • 精算マイクロサービスリリース
    • レポートマイクロサービス設計、開発、リリース
  • 技術スタック
    • Go、gRPC、GKE、Spanner、Terraform、CircleCI、Spinnaker、Datadog、Kubernetes、Pub/Sub、Dataflow
  • 2020年から新たな挑戦が…!

目標

目標管理は習慣目標を継続しました。

  • 本(執筆): 2冊/年
  • CFP: 4ヶ月に1回プロポーザル出してみる
  • OSS: 1PR/月
  • ひとまとまりのソースコード公開: 1リポジトリ/月
  • 技術書(読む): 30分/日
  • その他本(読む): 30分/日
  • ふぁーーーこれやーーーって本に出会いがっつり感想書く: 1回/3ヶ月
  • ピアノ晒す: 1回/月
  • 筋トレ: 1回/週

2018年の振り返りと2019年の目標 〜何かしらCFP出すぞ!〜

行動目標を継続することで目的は依然として不明瞭です。

行動に対する直接的なフィードバックが欲しかったため、プロポーザルが必要なカンファレンス登壇志向になりました。

重めの執筆や登壇が重なり、土日だけでなく平日朝・夜もいっぱいいっぱいに…『Measure What Matters 伝説のベンチャー投資家がGoogleに教えた成功手法 OKR』をそのタイミングで読んでいたこともあり個人の目標管理にもOKRを導入してみることにしました。

2019年7〜9月のOKRはつぎのように設定しました。

  • O1
    • DIY FaaSのためのKnativeのユースケース、動作の仕組みを理解する
  • KR1
    • どんな課題に対してどう使うのかを説明できる
  • KR2
    • Knativeを使ったプロダクトでどう利用されているか説明できる
  • KR3
    • Knativeの主要機能の実装方法を説明できる
  • O2 嫁氏とゆったりした時間を過ごす
  • KR1
    • スパイダーマン観に行く
    • バンブルビー観る
  • KR2
    • 花火大会に行く

2019年4〜6月ふりかえり 〜個人OKR運用開始〜

Measure What Matters』を読み、習慣目標はObjectiveなきKey Resultsの羅列であることや、目標管理とC(対話)F(フィードバック)R(承認)はセットだと気づきました。集中して身につけるべきことを絞り、家庭の時間も大事にすることにしました。

2019年10〜12月の振り返りと2020年1〜3月の目標設定記事は近日投稿予定です。

個人OKRをはじめてよかったこと

まだ取り組み始めてから2四半期で改善の余地はあると思うものの、取り組み始めてよかったなぁと思うことは多いです。

  • 無限にある「やらないといけないと思っていたこと」から解放され、やるべきことに集中できるようになった
  • 基本的に何でもやる自分に「やらない」や「断る」ための基準が生まれた
  • 「これをやることで何を達成したいのか」を考えるようになった
  • 3ヶ月という単位が何かを試すのに短すぎず長すぎずちょうど良い
  • エンジニアとしての人生に進捗が生まれ始めた

1年単位でテーマを設定したり、より長期的なスパンでどうなって何を達成したいのかも考えておくと各四半期でOKRを決めるときの指針になりそうと感じています。企業のOKRも場当たり的に決めているわけではなく、ミッション、ビジョン、バリューがある上でその進捗や課題感に応じてつぎの3ヶ月の目標設定をするのが妥当なのと同じです。

ただ、それを考えあぐねて何も着手できないよりは3ヶ月単位でも明確な目標を定めて動くことが有益です。行動により長期的ビジョンがブラッシュアップされ、それを基につぎの目標が持て、長期的視野が育っていく場合もあるでしょう。

個人OKRのtips

個人でやる場合、企業でやるのと同じように制度的に強制され人の目がある中で取り組むわけではないので、多少工夫が必要に感じました。

OKR設定のベストプラクティス

まず、目標設定においてはSMARTの枠組みに従うとよさそうです。

  • Specific(達成したいことの具体性)
  • Measurable(指標の計測可能性)
  • Attainable(ゴールの実現可能性)
  • Relevant(自身との関連性)
  • Time-bound(期限)

基本的に会社のOKR設定のベストプラクティス的なものはそのまま使えばよいです。本や記事もたくさん出ていて、特に良いものを最後に紹介します。

ただ、きれいなOKRを作るのが目的ではありません。自分が実現したいことに近づくのが一番大事なのでまずはやってみるとよいでしょう。

フィードバックの効果を高めるための工夫

個人でやる場合、制度的にフィードバックが保証されるわけではないので、人の関心が集まるオープンな場へアウトプットするのが重要です。

  • 期限付きのアウトプットの場とKRをセットにする
    • 技術書典、登壇、アドベントカレンダー
  • プロポーザルが必要なカンファレンスに申し込む
    • 聴く人、聴く人を代表する審査員の関心が高ければ通るし、最初からテーマがはっきりして関心のある人が聴きに来るのでフィードバックの精度が高い
  • 会社のOKRに紐付ける
    • サポートやフィードバックが得られる可能性が高い

振り返る習慣をつける

四半期の頭に立てたOKRを見直すのは次の四半期の頭ではありません。日々見直して軌道修正しながら取り組むことで実効性が高まります。

  • 設定したOKRを毎日見る
    • 毎朝SlackのReminderに通知させるなど
  • KRに紐づくイベント単位で振り返りをアウトプットする
    • Oの達成に近づけたのかどうか
    • 関連性の高い別のKRの質も高められる
  • 日々の活動を記録し、OKR関連のものとそうでないものの比率を見る
    • 関連の薄いものは無くしたり効率化したりできないか
  • 四半期最初の土日に振り返りと次のOKRを考える時間を確保する

個人OKRをはじめる

いいタイミングなのであなたも2020年1月〜3月のOKRを決めてみませんか?

Microsoft Ignite The Tour 2019 Tokyoでも5分各自がOKRを考える時間を設けました。

あなたのOKR

  • Objective
  • Key Result 1
  • Key Result 2
  • Key Result 3

OKRを深める

このセクションではオススメの本や記事を紹介します。

Measure What Matters

  • ジョン・ドーア著、日本経済新聞社、2018年10月16日
  • OKRがIntel、Google、ゲイツ財団などでどのように活用され、どのような成果が挙がったのかに関するケーススタディが収められた本
  • OKRとそれを支えるCFR、文化などにも触れられたOKRを知るための決定版
  • 参考資料にグーグルのOKR実践マニュアルが掲載されており、チェックシート的に使うだけでも価値がある

OKR シリコンバレー式で大胆な目標を達成する方法

クリスティーナ・ウォドキー著、日経BP、2018年3月15日
OKRを採用して困難に立ち向かう架空のスタートアップの話の前半とOKRの設定と運営のノウハウが紹介された後半に分かれる
『Measure What Matters』よりコンパクトで、個人で取り組むときにはちょうどよい内容

OKRを設定する

  • Google re:Workの1つ
    • https://rework.withgoogle.com/jp/guides/set-goals-with-okrs
  • OKRの概要、導入、評価まで網羅的かつ簡潔にまとめられている
  • 超簡略版『Measure What Matters』
  • 設定・評価用のシート付き

OKR運用失敗の3つの理由

  • Coral Capital社
    • https://coralcap.co/2019/11/three-reasons-okrs-backfire
  • いざやってみると目標の高低などちょうどいいものを見つけるのは難しい
  • Objectiveに垣間見る自分や成し遂げたいことの意義

いいキャリアとは

  • 青田努(@AotaTsutomu)さん、いい感じにはたらくTips Advent Calendar 2019 1日目
    • https://note.com/aotatsutomu/n/n3d783f60403e
  • 主観の価値を、他人や社会は決めてくれません
  • もし何も成し遂げられなくても、あとでふりかえった時に「それでも良かった」と言えるような日々

まとめ

  • OKRはチャレンジングな目標設定と計測可能な指標から構成され、継続的パフォーマンス管理とセットで大きな成果達成を可能にする手法
  • 個人でやるにあたってはSMARTの原則などベストプラクティスに沿ってOKRを設定し、アウトプットの工夫などでフィードバックをもらえる状況を作り、継続的にふりかえる
  • 限りある時間の中で重要なことに集中し、公私共々大きな成果を挙げましょう!!

ServerlessDays Tokyo 2019に関わられたすべてのみなさんお疲れさまでした!

僕は主に10/21(月)のWorkshop03「Knativeで作るDIY FaaS」のコンテンツ作成と当日の解説・進行に携わりました。22(火・祝)のカンファレンスではスタッフとしてうろうろしたり、Knative本を頒布したりしていました。

大規模なワークショップを作ったり運営したりするのは初めてだったので振り返ってつぎにつなげようと思います。

概要

  • 概要説明のスライド
  • ワークショップコンテンツの本体
  • カンファレンスでKnative Servingのお話をされていた@toversus26さんにいろいろ教えてもらってKnativeのDesign Docs見れるようになったのでもっと正確に、深く、理解したい

ServerlessDaysでワークショップを担当することに対する思い

これを実現したかったからです。

ServerlessDaysも何か話したりハンズオン担当したり(?)、海外でも登壇できたらなぁと思っています。

どちらかというと登壇そのものというよりは、人に話したくなったり、話してフィードバックもらいたくなるような好きな技術に常に触れていられたら幸せという気持ちの方が強いです。

そういうハンズオンやContributor Dayも含め、好きになる可能性のある技術に触れたり、どっかの誰かがなんか言ってる技術が自分の身近な課題を解決できるものと感じられるようになる場を作るというのにも興味を持ち始めました。

Serverless Meetup Tokyo #11 で「入門 Knative 〜KubernetesとServerlessとの出会い〜」を話してきました #serverlesstokyo

去年、一昨年とワークショップに参加して、僕はカンファレンスで話を聞いているよりも手を動かす場の方が好きでした。そこで今度は自分がそういう場を提供できるようになりたいという思いがありました。

改善点はあるとは思うものの、まずは思いを持ってServerlessDaysのワークショップを担当できて幸せでした。

テーマ

GCP

今年取り組んでいたKnativeを使ったワークショップを準備しました。題材はOSSなので実行環境はどこでもよかったのですが、つぎの理由からGKEを中心にGCPのサービスを使っています。

  • AWSとMicrosoftは毎年ワークショップあるのにGoogleはないので自分がやろう
  • 会社でGCPたくさん使っているものの、普段はGKEのクラスタ構築したりgcloudコマンド叩いたりすることが少ないので馴染みたい
  • 環境やマシンスペック揃える観点でローカルは避けたい、そしてGCPのCloud Shellが必要十分なことは技術書典で本を書く中で検証済みだった

DIY FaaS

KnativeでFaaSを作るというテーマにしたのはつぎの理由からです。

  • コンポーネントの各機能を動かしているだけではなんとなくいろいろな機能があって複雑なものという印象で終わってしまう(特に普段FaaSを触っている人から見ると)
  • リソースの抽象化は一面でしかないので抽象化好き、嫌いの好みの問題で終わってしまう(特に普段プラットフォームの運用・開発をしている人から見ると)

こういう背景があり、プラットフォームを作り運用する人の観点とプラットフォームを利用する開発者という立場を明確に分け、両方の立場からKnativeやKnativeがベースとなっているプロダクトに触れられるようにというコンセプトを強めに押し出しました。

  • Knative、Tektonの各コンポーネントを理解するステップ
  • KnativeベースのOSSを自分たちのプラットフォームにインストールして使うステップ
  • OSSを組み合わせてプラットフォームを構築するステップ
  • Knativeベースのマネージドサービスを使うステップ

という構成がそのコンセプトを具体化したものです。

対象参加者

Serverlessコミュニティ向けに行うということを考えたときに、Kubernetesをどこまで前提知識にするかは少し迷いました。必要最低限のリソースやコンセプト的な部分は軽くスライドで触れることにしました。

そして募集の段階で対象はつぎのように明示しました。それ以外の人の参加を拒否する目的ではない旨を話した上で参加者に挙手してもらうと、実際は右に書く人数が該当していました。

  • 普段Kubernetes上でアプリケーションを開発している方: 数名
  • プラットフォームを開発している方: 数名
  • AWS Lambda、Azure Functions、Cloud FunctionsなどFaaSが好きな方: 参加者40人くらいほとんど
  • Goでアプリケーションを開発している方: 数名

想定とずれてはおらず、自分のできる範囲で用意すべき材料は用意したという感じでした。こういうときはやはりフィードバックがほしいですし、自分で質問項目を準備して具体的なフィードバックを求めるべきですね…。

進行

つぎのような感じに進めました。

  • コンテンツに入る前にスライドで概要を説明
  • 基本的に僕が前で解説・実行しながら進める
  • 自分のペースで進めたい人はどんどん先に行って大丈夫

ゆっくり目に進めたつもりが進行が早かったとの声もあり、どう進めるのがよいのか考えていました。社内で毎週Go(とGCP)の知見を共有したり議論したりするGo Fridayという勉強会があり、このワークショップを紹介するとともに、golang.tokyo、Women Who Go Tokyo、GCPUGなどでどのようにワークショップを運営されてるのかを聞いてみました。

僕の進め方に足りてないと思ったのはこういうのです。

  • 前でやってから参加者の方々がコマンド動かす時間を確保する
  • step毎の完成イメージや動くものを先に見てもらう

前でやるなら見てもらうフェーズと操作してもらうフェーズを分けないと前見たりPC見たり大変で進められない!というのに自分で気づけなかったのは謎です。

あとはコードを書くタイプならTODOが書いてある枠組みを配ったり(tenntenn/gohandson)、他にもコードラボ形式のもあると教えてもらいました。

今回僕がやったCloud Shell上で進めていくものであればチュートリアル形式もあったりするので活用するのがよさそうです。

少なくともGitHubとCloud Shellを行ったり来たりしてYAMLの中身を保存してもらうよりはCloud Shellでgit cloneしてもらう方がよさそう。そうするとkubectl applyをひたすら打つだけになる気もする一方で、YAMLの中身をコピーして保存するときも必ずしも中身が読まれるとは限らないですね。

今度は11月頃に社内でやる予定なのでやっていき!!

振り返り

Good

  • 本番が始まるまでになんどもコンテンツを見直せた
  • 実際に自分でやってみながら致命的なミスを修正できた
  • ロールの分類とstepの位置付け明確化
  • ワークショップがまとまりあるアウトプットとして残るのはなんとなくうれしい
  • スライドを作るのが速くなった気がしたけど単に使い回し比率高いだけの気もする

Challenge

  • 進行方法改善
  • Eventing薄めなのでもう少しやりたい、cloudevents/sdk-goに馴染みたい
  • ワークショップでDIYしたFaaSはこの辺に書いてるとおり課題があるので、現実的な課題解決に耐えうるものを作りたい

今後

カンファレンスでKnativeの話をされた方にいろいろ教えていただきかなり学びがありました。

実際にSREとしてインフラや開発者の声に向き合いながらKnativeの本番環境での活用に向け検証を進められているようで、掘り下げも素晴らしかったです。定期的に話を聞きに行きたい。

教えてもらった中でもこのページknative-users@knative-dev@でGoogleグループをたどれて、「参加する(devは人が承認)」とTeam Drive内のDesign DocやMTGの議事録などいろいろ見れるようになるのは超重要情報でした。公式のドキュメントも古くなってる部分もあるとのことで、実装とこの辺りの情報を見ながら理解をアップデートしていく所存です。

今後はKnativeももちろん追いつつ、以下の記事でも書いてるようにプラットフォームエンジニアへの闘争を推進すべくKubernetes自体の理解に軸足を置けるとよいかなぁと思っています。

2019年7〜9月ふりかえり 〜プラットフォームエンジニアへの闘争〜

四半期ごとの人生振り返りです。

2019年の目標とは別に個人OKRの運用を開始したため、そちらを中心に振り返ります。

サマリ

プラットフォームエンジニアへの闘争を開始します

OKRの振り返り

基本的にやるべきことに集中するために大事なことを列挙する形で設定したのでつぎの3段階くらいでいいかなと思います。

  • できた
  • 微妙
  • できなかった

Objective 1

DIY FaaSのためのKnativeのユースケース、動作の仕組みを理解する

Key Result 1 【できた】

どんな課題に対してどう使うのかを説明できる

  • CloudNative Days Tokyo 2019 登壇
  • ServerlessDays Melbourne 登壇

CloudNative Days Tokyo 2019で『Knativeで実現するKubernetes上のサーバーレスアーキテクチャ』を話してきました #CNDT2019

ServerlessDays Melbourne 2019でBuild serverless application on top of Kubernetesを話してきました #sdmel19

CloudNative Days TokyoではKnativeが「どういう課題に対し、なんの機能がある」という形を意識してユースケースを組み立てました。

それに対してもうちょっとKnativeの大枠の意義や、どういうロール人の何を解決するのか、個々のコンポーネントの使い方でなくて構築したプラットフォームをどう使うのかという部分が知れるとよくなるのではないかというフィードバックをいただきました。

ServerlessDays MelbourneではKubernetesで運用するアプリケーションのツラミからそのソリューションの1つとしてのKnativeのような形に構成を変更して臨みました。

他のソリューションとの比較や構築したプラットフォームの活用までは至っていませんが、それは10〜12月のOKRに深く関係します。

対外的な発表だけでも検証した内容の抽象化や再構築にはとても役立ちますが、フィードバックをいただきブラッシュアップするプロセスはとても大事だと改めて感じました。

また、発表する前にレビューしてもらう段取りができなくて落ち込むこともありました。しかし、長期的なテーマを設定していろいろと取り組む前提で、イベントが終わってからじっくり感想をいただく形式も必ず進捗が生まれるので気が楽になりました。

Key Result 2 【できた】

Knativeを使ったプロダクトでどう利用されているか説明できる

  • CloudNative Days Tokyo 2019 登壇
    • Knative Lambda Runtime
  • 技術書典7執筆 既刊Knative本アップデート
    • Pivotal Function Service
    • OpenFaaS functions on knative
  • 何かCloud Runの話できる機会があれば

技術書典7で『Knativeソースコードリーディング』『Knativeの歩き方 第2版』『Goで学ぶAWS Lambda』を出展します #技術書典

CloudNative Days Tokyoではユースケースの後半にKnative Lambda RuntimeとOpenFaaSのWatchdogを活用したプラットフォーム構築のお話をしました。

その過程で整理したこの1枚のスライドは、Knativeを使って自分でFaaSを組み立てるときに何を開発する必要があるのかという観点でとても大事なことのようです。この知見を元に10〜12月実際に触れるサーバーレスプラットフォームを構築します。

その調査内容を文字化して『Knativeの歩き方』に章を増やす形で足しました。

Cloud Runの話はServerlessDays Melbourneで少し触れました。会社ではGCPを中心にサービスを構築しており、検証環境も充実しているので自然なユースケースで活用できる可能性も高いかなと思います。その観点で仕様の詳細を理解しておくと意味がありそうです。

Key Result 3 【できた】

Knativeの主要機能の実装方法を説明できる

  • 技術書典7執筆 新刊KubernetesのコントローラーをKnativeで理解する
  • 技術雑誌寄稿 kube-apiserverのクライアント
  • Programming Kubernetes: Developing Cloud Native Applications 再読

技術書典7の『Knativeソースコードリーディング入門』の振り返り #技術書典

6月にかなりお世話になったProgramming Kubernetes: Developing Cloud-native Applicationsを再読し、Knativeの実装を追う本を書きました。

Kubernetesのクライアントライブラリを含むコントローラーの追い方は慣れてきたものの、Knativeの固有実装部分までは終えてないなぁと思います。

メトリクスベースでスケールさせる仕組みや証明書管理、イベント関連の抽象化設計などはKnativeに閉じずプラットフォームの設計・実装にとって重要な要素だと思うので引き続き追っていこうと思います。

寄稿については技術書典が終わってからツール作成に着手し、初稿もなんとか10月頭に間に合いました。社内や編集者の方からたくさんのコメントをいただいたので今後の執筆にも大いに役立ちそうです。別途振り返る予定です。11月半ばに発売されるはずなので楽しみにしていてください!

コントローラーではないもののKubernetesのクライアントを書いたり、関連書籍を読むと自分で書きたい気持ちは高まりました。

Objective 2

嫁氏とゆったりした時間を過ごす

Key Result 1 【できた】

  • スパイダーマン観に行く
  • バンブルビー観る

観た!

Key Result 2 【できた】

  • 花火大会に行く

行った!

行ってみたいところ、やってみたいことは突発的に発生するところだけではなく、計画しないと実現できないこともあります。

カッパドキア行きたいとかクリスマス島のカニ見たいとかディズニーのミラコスタ泊まりたいとか。

リストにすると「やるべき」こと感が出る一方で、本当に実現したいなら先に時間を確保しないと「俺は強くなりたいので今期はそういうのしない」という判断を永遠に繰り返しそうです。でも今期爆進だけではしんどいということを強く体感しました。

10〜12月期はリスト化して、各期そこから1つOKRに入れてみようかなと思います。

OKR総括

全達成よく頑張ったたまには褒めてあげよう!

習慣の振り返り

2019年の目標

  • 本(執筆): 2冊/年
  • CFP: 4ヶ月に1回出してみる
  • OSS: 1PR/月
  • ひとまとまりのソースコード公開: 1リポジトリ/月
  • 技術書(読む): 30分/日
  • その他本(読む): 30分/日
  • ふぁーーーこれやーーーって本に出会いがっつり感想書く: 1回/3ヶ月
  • ピアノ晒す: 1回/月
  • 筋トレ: 1回/週

進捗

本(執筆): 2冊/年

2/2

終わり!

CFP: 4ヶ月に1回出してみる

合計5本提出のまま変わらず。この振り返りが終わったら2本書く予定です。

OSS: 1PR/月

30/3

1つ1つは細かいですがたくさん出しました。lintツールを実行してそれに基づく修正をしているだけです。

何もリントエラーが出ないプロジェクトと、大量すぎて比較的大事な項目だけ選んでPRを出すプロジェクトの差が激しいです。

このgolangci-lintを利用しています。

https://github.com/mercari/wrench/pull/7
https://github.com/mercari/wrench/pull/5
https://github.com/mercari/wrench/pull/4
https://github.com/mercari/wrench/pull/3
https://github.com/mercari/go-emv-code/pull/8
https://github.com/mercari/go-emv-code/pull/7
https://github.com/virtual-kubelet/virtual-kubelet/pull/774
https://github.com/syndbg/goenv/pull/97
https://github.com/google/ko/pull/89
https://github.com/knative/client/pull/412
https://github.com/knative/pkg/pull/646
https://github.com/ijin/serverlessdays-tokyo/pull/16
https://github.com/k1LoW/tbls/pull/137
https://github.com/kedacore/keda/pull/343
https://github.com/GoogleCloudPlatform/cloud-run-button/pull/82
https://github.com/google/kf/pull/659
https://github.com/google/go-cmdtest/pull/1
https://github.com/syndbg/goenv/pull/95
https://github.com/kedacore/keda/pull/323
https://github.com/syndbg/goenv/pull/94
https://github.com/deislabs/osiris/pull/37
https://github.com/kedacore/keda/pull/323
https://github.com/syndbg/goenv/pull/88
https://github.com/syndbg/goenv/pull/86
https://github.com/kubernetes-sigs/kubebuilder/pull/967
https://github.com/knative/client/pull/388
https://github.com/knative/eventing-contrib/pull/557
https://github.com/knative/eventing/pull/1732
https://github.com/syndbg/goenv/pull/91
https://github.com/syndbg/goenv/pull/90

自分な好きなOSSに対しリリースノートに載るようなインパクトのあるコントリビューションがしたいという思いを強めました。

ひとまとまりのソースコード公開: 1リポジトリ/月

1/3

雑誌寄稿に向けて作りました。10月分のような気もします。

https://github.com/toshi0607/jctl

ワンコマンドで下記全部やってくれます。

  • Goアプリケーションビルド
  • コンテナイメージビルド
  • レジストリにプッシュ
  • Kubernetes Jobとして実行

client-gogo-containerregistryを活用したCLIです。

GitHub Actionsでkindを使ってE2Eテストもやってみました。

以上…!

10〜12月期にはこんなの作りたいです。

  • 何かしらコントローラー
  • サーバーとfunctionsをつなぐミドルウェア
  • DIY FaaS用CLI

意図通りのものがあれば詳しく調べて記事にするのでもよさそう

技術書(読む): 30分/日

読んだ

Kubernetesがもっと好きになる!この本がなければKnativeソースコードリーディング入門 Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラーは生まれませんでした。Knativeに限らずKubernetes本体はもちろん、作られたタイミングがどうであれ他のコントローラーも読める雰囲気が出てきました。

kedacore/kedaとか読むとよさそうです。

【レビュー】『改訂2版 みんなのGo言語』(2019/8/1、技術評論社)の感想

技術書全然読んでへんわろたw

その他本(読む): 30分/日

読んだ

前作に引き続き読みました。日報とか強化し始めた気がします。社会を形作るのは絶対的な原則ではなく人間なのでたまには処世術に触れるのもよいのではないでしょうか。

氏の本は読むのに時間がかかる本の後にパーッと読みたくなります。

プレゼンの神様、Microsoft澤さんの本です。自分のプレゼンを直視して改めて絶望したので、聞く人の気持ちを考えることにしてみました。まずは社内でやるプレゼンにいくらか活かしてみました。

今も自分が喋りたいことを喋る基本姿勢は変わってません。けど、喋る目的は発信することでフィードバックを得てよりよい理解・アウトプットに繋げることです。なのでこの本で言われているように伝えたい中核となるものや聴衆観点で何をもって帰ってもらうのかを整理することは結果的に自分がもらえるかもしれないフィードバックの質を確実に上げます。

任天堂のWiiの企画をした方の本です。既知の良さと未知の良さがあって、最初は受け入れられないかもしれない未知の良さを探求する方法が具体的なお話を添えて解説されていました。

未知の良さを提供し、最終的に世界を良くするのは大変かもですがやりがいはありますよね。サーバーレスとか直感的に現実的でない、良さよくわからんみたいな声が依然として強いのでチャンスです。

読んでる

Windowsプログラミングの父?チャールズペゾルドさんの本です。コンピュータが動く仕組みを解説する「読み物(≠技術書)」です。めちゃくちゃ面白い。バイナリコードの説明が、「通りを挟んで反対側に住む子供同士が夜中にどうやって会話するか?」から始まって懐中電灯、モールス信号みたいな風に進んでいって「コンピュータの仕組み」的な本と一線を画しています。

CAREER SKILLSで紹介されてて読んでみて正解でした。けっこう時間かかりそう。

あとは筋トレ中のAudible始めました。

ふぁーーーこれやーーーって本に出会いがっつり感想書く: 1回/3ヶ月

今Qベストは世界№1プレゼン術でした。

ピアノ晒す: 1回/月

鍵盤1回も触らなかった…久石譲さんやっていきたい。

筋トレ: 1回/週

完璧!締め切りがいろいろ厳しくて2回くらいスキップしようとしたもののちゃんと行ってえらい。

今後の話

プラットフォームの運用・構築・開発、利用サポートができるエンジニアになりたい思いが強まったので、個人OKRもそれに寄せていきたいです。人と話して目の前の技術スタックに活きる順番ではまずKubernetesの使い方・動作原理を理解してより低レイヤーに降りていくのが現実的そうでした。本業として実現できるように頑張る。

サーバーレスも何かしらのPaaSやFaaSを使って開発することが目的ではなく、嫌なオペレーションを少なく、ビジネス価値により集中できるプラットフォームを活用して開発するのが本旨です。

これらを踏まえて技術スタックを3ヶ月単位で積み上げていきます。そういう方向性をもって人生を歩んだ結果3ヶ月後に全然違うことを言うのはありとします。7〜9月のOKRや集中すべきことを考えたり、運用したりする中で、何をやってもなにかしら自分にとってプラスの経験にもなるし思いもよらないよい出会いもあるけれど、長期的に目指したい姿を思い描いた上でやる方がよりワクワク過ごせそうです。集中もセレンディピティも失うことなく進んでいくのです。

10〜12月の個人OKRはつぎのような感じでいきます。

Objective 1

プラットフォームエンジニアへの闘争

Key Result 1

DIY Serverlessプラットフォームを構築する

  • ServerlessDays Tokyo
  • ServerlessDays Fukuoka
  • CLI
  • server -> functionのミドルウェア

Key Result 2

Kubernetesの知識を網羅的・原理的に理解する

  • CKA取得
  • 何かコントローラー作る
  • つぎの図をソースコードに基づき説明できるようになる

Key Result 3

プラットフォームを支えるOSSにコントリビューションする

機能 > テスト > リントツールでわかるもの > 設定ファイル > ドキュメント・コメント

Objective 2

ゆとりある心で秋〜冬を感じる

Key Result 1

心があたたまる食べ物を食べる

  • 鍋パする

Key Result 2

季節のイベントに参加する

  • ディズニーハロウィン
  • 温泉
  • もみじ、山

Key Result 3

やりたこと、いきたいことリストをつくりワクワクする

登壇

執筆

記事

技術書典7、無事終了しましたね!関わられたすべてのみなさんお疲れ様でした。

つぎの出展に備えて振り返りたいと思います。

本の内容についてはこちらにまとめています。

技術書典7で『Knativeソースコードリーディング』『Knativeの歩き方 第2版』『Goで学ぶAWS Lambda』を出展します #技術書典

Boothでも販売しています!

手にとってくださった方はこちらのページで変更内容をお知らせしていくのでぜひ見てみてください。

『Knativeソースコードリーディング入門』

『Knativeソースコードリーディング入門 〜Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー〜』の正誤表と増補改訂情報 #技術書典

『Knativeの歩き方』

『Knativeの歩き方 〜KubernetesからServerlessを訪ねて〜』の正誤表と増補改訂情報 #技術書典

『Goで学ぶAWS Lambda』

『Goで学ぶAWS Lambda』の正誤表と増補改訂情報 #技術書典

謝辞

今回も妻に編集、表紙、デザイン、サークルカット作成、入稿(本とダウンロードカード)をお願いしました。毎回パワーアップしていてすごい。圧倒的感謝です。

今回はPOPも専用のを作ってもらいました!

執筆環境として、TechBoosterさんのTechBooster/ReVIEW-Template@atsushienoさんのatsushieno/vscode-language-reviewを今回も活用させていただきました。ありがとうございます!!

振り返り

Good

継続

Knativeの歩き方やAWS Lambdaから継続して足を運んでくださる方がいらっしゃって嬉しいと共にホッとしました。

Knative本の続きを読んでみようと思ってくださる方や、カエルと空の本を今回も読んでやろうと思ってくださる方がいらっしゃるのはとても励みになります。

Boothの購入履歴を見ていてもその継続性はたどれたりします。

一方で、過去作読んだがやめとこうと思った方もいらっしゃるはずです。技術力や表現力を磨きながら、手に取ってくださった方によかったなぁ、またつぎも読みたいなぁと思っていただけるようなアウトプットを出せるよう修行していくしかないです。

個人OKR上の成果

今回の原稿の個人OKR上の位置付けは

Objective 1「DIY FaaSのためのKnativeのユースケース、動作の仕組みを理解する」のKey Result 2「Knativeを使ったプロダクトでどう利用されているか説明できる」技術書典7執筆 既刊Knative本アップデートとKey Result 3「Knativeの主要機能の実装方法を説明できる」技術書典7執筆 新刊KubernetesのコントローラーをKnativeで理解するに紐づけていました。

既刊ではKnatieの各コンポーネントに何を足せばDIY FaaSになるのかを章を増やして説明することにしました。これは10月、12月のServelessDaysに向けてストレートにやるべきことだったので、7月のCloud Native Days Tokyo登壇向けて行った調査を踏まえてよい時間を過ごせました。

実装を追った新刊については、Knativeの利用法を追うだけでなく、動作の根本原理を理解したいという思いで書きました。

時間

当初Cloud Native Days Tokyoが終わる7月末〜9/15までで書く予定でした。しかし、8月末に海外登壇に挑戦することになったのと、予想外に準備に時間がかかり9月の2週間で準備 + 執筆することになりました。
それでも

  • 9月の夜の予定をServerless Meetup以外すべてブロックする
  • スマホゲームをクロノ・トリガー以外すべて削除する

などしながら新刊60ページ、既刊アップデートと10数ページ追加を終えたのは確保できた時間でできる精一杯だったかなと思います。

想定時間通りに使えたらよりよい検証、執筆ができたかはわからないです。

Challenge

時間

できる限りのことはしたものの、やっぱりしんどかったのは事実です。内容が自分の好きなことであったとしても余裕がない状態でぶつかり切ると内容に関係なく嫌いになるリスクや燃え尽きるリスクがあります。

今度出展するときはまずOKRに位置付けられる前提で、2ヶ月調査・執筆に割けないなら見送りも検討するとよさそうです。いや、書きたい。

部数

まだ家に送った分が到着してないので正確な数はわからないですが、320部刷って200部くらい残りました。年末にかけてのイベントがあるので多く刷ろうとしていたものの、印刷発注日時点で前回より被チェック数が伸びてない状況で刷りすぎ感がありました。

実際に刷ったのは

  • Knativeソースコードリーディング入門 200部
  • Knativeの歩き方 80部
  • Lambda本 40部

でしたが、Knativeソースコードリーディング入門は100部でよかったです。前回歩き方を手に取ってくださった方の人数に鑑みさすがに200はない…!他の本はほんの少し少なめでもよかったかもくらいでした。

発注時点で平和な気持ちでいられるくらいの気持ちの余裕が必要です。

数字は記事下の方にまとめます。

ServerlessDays Tokyo/Fukuokaでも頒布します!!!

頒布情報

書ける部分も書くの遅かったかもと思っています。頒布情報に限らず、サークルの数も増える中でいかに自分の出展情報にたどり着いていただくかは悩みどころですね。

ただ、Knativeを知りたい気持ちがある方がたどり着くのに十分な情報はTwitterで発信してると思い込んでいます。力を入れるにしても、普段からKnative自体を知る人が増え、面白いので一緒に勉強してみたいと思う人を増やして盛り上げてく方がいいのかなと思います。

「OAuth」「DNS」「AWS」「Kubernetes」「Knative」みたいな並べ方をしたときにKnativeでうおーってなる人の数は他よりずっとずっとずっと少ないですよね。その分Knativeの人として認知されやすいかもしれませんが、それでも母数が厳しいです。

今後

直近は『実践Knative』という本があったときに入ってそうな内容は見ていきたいなぁと思っています。個人のOKR上では年内にDIY FaaSを(Knativeで)作るということになっています。

そのプラットフォームがある前提で

  • 独自に構築したプラットフォームのユースケース(Knative単体ではなくて、そのプラットフォームでどんなアーキテクチャが実現できてどんな課題を解決できるのか)
  • 運用・監視
  • 開発フロ
  • プラットフォームのデバッグ
  • 権限管理

などの全体的な見通しを示せないと、仕事で使うなり、現実世界の問題を解決するプロジェクト・プロダクトであるということを示したりできないと思っています。

また、そもそもIstio(をはじめゲートウェイコンポーネントとして依存するもの)やKubernetes自体の知見なしに存在するプラットフォームではないのでその観点から自分の知識・経験は強化して臨む必要もあります。

KnativeのServingはRC2ということでGAも遠くはない状況なので、つぎの技術書典の頃にはきっとGAし、Knativeベースのプロダクトの数も今よりきっと増え、プロダクション利用も増えてるかもしれませんね。

本のテーマはOKRや自身が詳しくなっていきたい分野にすると決めているので、年明けくらいにまたその直近の3ヶ月、その後の技術書典が含まれるであろう3ヶ月のテーマと決めようと思います。

あと、今回のようなOSSを触るときに、リリースノートに載る程度主要な機能を追加できるようになりたいと強く思います。

数字の整理

売上

現金

内訳は後日!
現金: 47000円

後払い

  • Knativeの歩き方 第2版: 21冊
  • Goで学ぶAWS Lambda 第2版: 7冊
  • Knativeソースコードリーディング入門: 42冊

1000円 × 70部 = 70,000円

Booth

9/17〜9/23分

  • Knativeの歩き方 第2版: 12冊
  • Goで学ぶAWS Lambda 第2版: 3冊
  • Knativeソースコードリーディング入門: 13冊

1000円 × 28部 + 優しさ1500円 = 29,500円

原価

  • 本印刷: 79240円
  • 参加費(パトロン): 20000円
  • ダウンロードカード印刷: 940円

被チェック数

  • 8/26 6
  • 8/27 9:00 14
  • 8/28 23:00 21
  • 8/31 23:00 23
  • 9/3 0:20 26
  • 9/5 29
  • 9/6 11:00 29
  • 9/7 12:00 30
  • 9/9 19:00 34
  • 9/10 23:00 38
  • 9/13 23:00 41
  • 9/14 23:00 44
  • 9/16 23:00 46 印刷発注日
  • 9/17 23:00 53
  • 9/18 23:00 58
  • 9/20 23:00 64
  • 9/21 23:00 74
  • 9/22 7:50 79
  • 9/22 11:00 87
  • 9/22 11:50 90
  • 9/23 18:30 99

技術書典6の数字はこちら

技術書典5の数字はこちら

2019年9月22日(日)開催の技術書典7で3冊出展します!

カエルと空というサークル名で場所は「お12C」です。ぜひ遊びに来てください!

興味を持っていただけた方はサークルのチェックリストに登録しておいていただけると助かります。今後の印刷数の参考にします。

『Knativeソースコードリーディング入門 Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー』

今回の新刊はKnativeの実装についてです。Knativeの仕組みをより深く追おうとすると必ずKubernetesのカスタムリソースやカスタムコントローラーの話が出てきます。

以前mercari.goで発表した内容をより詳細にコード参照しながら解説します!

目次です。

第1章 KnativeとKuberentesの関係
1.1 Kubernetesの概要
1.2 Kubernetesの拡張方法
1.3 Knative の概要

第2章 KubernetesのAPI
2.1 APIサーバーの責務
2.2 Kind
2.3 APIグループ
2.4 バージョン
2.5 リソースとサブリソース
2.6 APIリクエストの処理フロー

第3章 APIクライアント
3.1 client-go
3.2 Object
3.2.1 TypeMeta
3.2.2 ObjectMeta
3.2.3 Spec
3.2.4 Status
3.3 ClientSet
3.4 Informer
3.5 APIMachinery
3.5.1 Scheme
3.5.2 RESTMapper

第4章 カスタムリソース
4.1 CR
4.2 CRD
4.2.1 categories
4.2.2 shortNames
4.2.3 subresources
4.2.4 additionalPrinterColumns

お値段は前回に引き続きこんな感じです。

  • 最初の200冊は紙本 + ダウンロードカード: 1000円
  • あとはダウンロードカード: 1000円

実はすでにBOOTHで購入できる状態になっています。

https://toshi0607.booth.pm/items/1568456

当日会場に来れない方や今すぐに読みたい方、お待ちしてます!

正誤表や増補改訂情報ページはこちらです。

『Knativeソースコードリーディング入門 〜Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー〜』の正誤表と増補改訂情報 #技術書典

『Knativeの歩き方 KubernetesからServerlessを訪ねて』

既刊をパワーアップしてお届けします!

一番大きな更新ポイント(章追加)は「Knative Lambda RuntimesとOpenFaaSのWatchdogから学ぶ、KnativeとFaaSプラットフォームの間を埋めるもの」です!

Knativeの概要記事は多いものの、それを実際どう活用してプラットフォームを構築するのかという話はそれほど出てないのではないかと思います。

本書ではその辺を見つつ解説します。

初版時点ではv0.5だったKnativeも今やv0.8、v0.9やGAも間近なのでアップデートもしました。

Buildが廃止されTektonに引き継がれた点も触れています。

こちらもすでにBOOTHで購入できる状態になっています。

https://toshi0607.booth.pm/items/1309468

すでにBoothやダウンロードカードセットで初版をご購入いただいている方も購入ページやダウンロードURLからダウンロードできるできるようになっています。

ボリュームも増えているので、ぜひお読みになってください。

  • 最初の70冊は紙本 + ダウンロードカード: 1000円
  • あとはダウンロードカード: 1000円

正誤表や増補改訂情報ページはこちらです。

『Knativeの歩き方 〜KubernetesからServerlessを訪ねて〜』の正誤表と増補改訂情報 #技術書典

『Goで学ぶAWS Lambda 第2版』

技術書典5で出展した既刊の第2版も50部持っていきます。

  • 最初の30冊は紙本 + ダウンロードカード: 1000円
  • あとは紙本: 1000円

お陰様で商業版を出版したり、こちらもすでに第2版がBOOTHで購入できる状態になっています。

https://booth.pm/ja/items/1034858

GoとSAMで学ぶAWS Lambda

ServerlessDays Tokyo 2019

ServerlessDays Tokyo 2019では僕が講師を務めるKnativeハンズオンを実施予定です。

そちらも奮ってご参加ください!

このページでは『Knativeソースコードリーディング入門 〜Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー〜』の正誤表と増補・改訂をお知らせします。

この本を手にとってくださった方がちょっとでも選んでよかったと思う本に育てていきたいので、章の追加なども楽しみにしていてください。

引き続きフィードバックお待ちしてます!@toshi0607

更新情報や新刊情報もこのアカウントでつぶやきます。

正誤表

ダウンロードカード経由の方は

PDFページ PDF反映 ePub版反映 MOBI版反映 修正日 version
44 カスタムコントーラー カスタムコントローラー

増補・改訂

PDFページ 内容 PDF反映 ePub版反映 MOBI版反映 修正日

リソース

ServerlessDays Melbourne 2019で登壇してきました。振り返ります。

発表資料はこちらです。

書き起こし記事@mediumはこちらです。

Build serverless application on top of Kubernetes #sdmel19

なぜ海外カンファレンスに登壇するか

海外だから特別視してるわけではなく、今年の目標「4ヶ月に1回CFPに応募する」の一環でした。

とはいえいつか海外のカンファレンスも登壇できたらいいなぁとは思っていました。

プロポーザル

PaperCall経由で6/9に2つ提出しました。CFPのオープンが4/9、クローズが6/10でした。

CFPはこれです。

プロポーザルは社内の方にレビューしていただきました。正式にお願いしていたのではなく、提出予定の内容を分報部屋に貼って寝たら翌朝的確かつハートフルなコメントをつけていただいていたというのが事実です。

感動しました。

プロポーザルはServerlessconf New York City ’19にもだいたい同じ内容で出していたのですがそちらは通過しませんでした。

ニューヨークのとメルボルンのは設問や制限字数などが異なるので多少内容は変えていますが大枠同じものを提出しました。

提出した内容はつぎのとおりです。

通過したプロポーザル

Title

Build serverless application on the top of Kubernetes

Talk Abstract

An application engineer who has never used Knative might be surprised when he starts using it while imagining something like AWS Lambda or Azure Functions. It’s because it’s neither PaaS nor FaaS. It provides “building blocks”. In my talk, participants can grasp the way to build DIY FaaS platform!

Talk Description

Recently, serverless has been seen in container workload. Container orchestration by Kubernetes is awesome in terms of deployment, scaling and self healing. But, it is a little more complicated for application engineers. They (including me) have to write Dockerfiles and Kubernetes manifests, build Docker images, push them to Docker registry, and so on. In my talk, I’ll show you how Knative and Knative based services like Cloud Run help application engineers focus more on codes and features introducing use cases and my containerized application development experience.

Notes

I wrote two books about serverless in Japanese

  • Learning AWS Lambda with Go
  • How to deal with Knative

I’m one of organizers of the biggest Serverless community in Japan.

Additional Information

※過去の登壇内容を出してくれというのがリクエストでした

This is the latest talk about serverless on Serverless Meetup Tokyo. https://speakerdeck.com/toshi0607/getting-started-with-knative-90ff6190-1251-4b7b-ada9-bbba5a8ca4b8

I’m going to talk about serverless on top of Kubernetes next month at CloudNative Days Tokyo 2019, the biggest conference about Cloud Native in Japan.

https://cloudnativedays.jp/cndt2019/ Talk E3

https://speakerdeck.com/toshi0607/serverless-architecture-on-the-top-of-k8s-with-knative

他に出してたプロポーザル

Title

How does Knative work in Cloud Run?

Talk Abstract

Participants can see how Knative, which aims to standardize APIs across multiple clouds, is used in managed services and Cloud Run running on GKE. This will allow them to guess and guess what Knative’s goal will be realized and what features will be added to Cloud Run in the future.

Talk Description

I’ll talk about how Knative, which provides parts for building containe-based serverless applications on Kubenetes, is used in Cloud Run. Cloud Run is a managed compute platform that enables you to run stateless containers that are invocable via HTTP requests. Cloud Run is implemented in Knative. Cloud Run on GKE allows you to search for Knative components using a kubectl command that manipulates Kubernetes APIs. Also, since Knative is OSS and we can investigate its features and implementation, we will speculate on the features provided by Cloud Run in the future.

Notes

同上

Additional Information

同上

プレゼンの準備

基本はCloudNative Days Tokyo 2019で話した「Knativeで実現するKubernetes上のサーバーレスアーキテクチャ」(45分)の大事な部分を抽出して15分にまとめようと思っていました。

しかし、CNDTの振り返りでも書いたとおり事後的に何人かにフィードバックをもらいにいきました。

1on1を設定させてもらったり、ドキュメントに書いてもらったり、いろいろな観点から意見をいただけました。

それを踏まえると構成は結構考え直した方がよいと思い結果的に使いまわしたスライド(図)はあったものの一から練り直しました。

準備過程で出会ったこの記事からの学びもとても大きかったです。

Kubernetes Workloads in the Serverless Era: Architecture, Platforms, and Trends

Kubernetes Patterns: Reusable Elements for Designing Cloud-Native Applicationsの著者ということでそちらも気になりました。

資料は渡航2、3日前に一通り作成し終わりました。

社内の人に発表練習を聞いてもらったりするといいよという紹介もしていただいてたのですが、資料作成(構成練り直し)にけっこう時間がかかってしまいそれはできませんでした。

資料とスピーカーノート用にメモした内容は前職の同僚がかなり丁寧に添削してくれてとても助かりました。

ServerlessDaysの本番2日前の夜に現地入りしたのですが、添削してもらった内容をもとに前日に資料修正し、発表練習の詰めをしました。

前日

朝は会場のメルボルン博物館への経路確認と下見、昼は資料修正と発表練習をして夜はスピーカーディナーでした。

スピーカーディナーは諸事情により途中参加になってしまいました。

運営メンバーとスピーカー合わせて10人くらい。日本でのカンファレンスと違って知り合い皆無だったので、少しでも知り合いが増えたのは当日の安心感につながりました。

当日

接続チェックは入念に行いました。

緊張して飛んだら困るのでけっこうGoogleスライドのメモ欄を使っていて、プレゼンター表示(スピーカーノートやタイマー、現在と前後のスライドが表示されるやつ)が出ないと困るためです。

持参したコネクターの接続もあまりよくなく本番もちょっと手こずりましたがオーガナイザーの方のいい感じの喋りで浮くことはありませんでした。ありがたい。

コンテンツ自体に対するリアクションは伝わってるか伝わってないかわからないですが、とにかくあたたかい雰囲気でした。

登壇後もいろんな方が話しかけてくれました。

中でも帰り道、会場の外で「ネイティブのスピーカーより発音、文法、簡潔さどの点をとってもよかった。よくやった。気つけて帰るねんで」とわざわざ自転車から降りて話しかけてくれた人もいてまた感動しました。

他の方の発表で感じたのは、デモする人以外は画面(PCもスクリーンもあまり)見ずにそれっぽい身振り手振りしつつ「プレゼン」っていう感じが強いというものです。

PC直接操作もせず、黒曜石的なフィンガープレゼンターとハンズフリーのマイクがデフォでした。

どういうやり方がより伝わるかわかんないですが一度試してみるのもよさそうです。

トピックは全体としてかなりバランスがよかったです。

https://www.serverlessdays.me/

サーバーレストレンド系、K8s系、ワークフロー(Step Functions)、リアルタイム(SignalR)、マルチクラウド、チャットボット(Bot Framework)、ステートフル(Durable Functions)、本番導入事例、オブザーバビリティ、セキュリティ、フロント、mBaaS(Firebase)

ここまでバランスいいのすごいです。ベンダー的にはMS・Azureが多かったですがGoogle、AWSの中の人が出てきてました。

日本はK8s系を話す人がサーバーレスコミュニティにあまり来なくて自分が盛り上げる気でいますが、その点でも3トークあるのは印象的でした。

途中のコーヒー休憩・ランチ・ネットワーキングタイムもバランスよく設けられており、ほぼ全員会場から出て参加者同士けっこう話していたのも目立ってました。企業ブース散歩も含めてです。

マジで休憩時間中に会場内に残ってたのはつぎのスピーカーと運営の人2、3人。これはすごい。

一番よかったなぁと思った発表はこれです。

とにかく構成が美しいです。

ログ、メトリクス、トレーシングをAWSのどのサービスが実現しているのか、サーバーレスなアーキテクチャでマネージドサービスとファンクションをつなぐイベントとはどうあるべきでどう管理すべきかという文脈で最近出たEventBridgeが出てきたり、1つ1つの説明に対する引用が的を射ていたり。

スピーカーはAWSでサーバーレスのPrincipal EvangelistをやっていてAWS Lambda in Action: Event-driven serverless applicationsの著者でもある@danilopさんでした。

他の内容も#sdmel19を追えば大体わかります。マルチクラウドの話をした@ineffybleさんが大体リアルタイムで全部ツイートしてくれてましたすごい。

資料は後日集めてまとめられるっぽいです。

他にもいい話がいっぱいあったので公開されるタイミングでできたら改めてまとめたいです。

振り返り

Good

十分な準備

いろんな人に協力してもらって内容を練るところから資料のブラッシュアップまで十分準備して臨めたと思います。

構成考え直した

CNDTからけっこう直したのはよかったです。認識のブラッシュアップ・再構築はフィードバックもらう意義ですね。

スマホのゲーム消した

けっこうやってしまうポケGO、マージドラゴン、アビスリウムを消しました。

家でやってしまってた時間は準備に充てられるし、通勤で歩く時間もリスニングの時間になりました。

Kubernetes Podcast from Googleは特に内容も好きですし、知った表現をプレゼンに取り込んだりできて学習効率が高かったです。

飛行機ずっと本読んでた

飛行機の中や待ち時間には映画の誘惑に一切負けずずっとProgramming Kubernetes: Developing Cloud-native ApplicationsCAREER SKILLS ソフトウェア開発者の完全キャリアガイドを読んでいました。

Challenge

もっと内容に関して議論できるとよかった

K8sやってる人に登壇後出会えなかったのはあるにしろ、一応議論の土台は喋ってるのであれこれ話できるとよかったかなと思いました。

KEDAの話をした人も、KEDAとOpenFaaSとKnativeの話をした人とGoogleの人もいたので自分から話しかける選択肢はあったはず。

カンファレンスでは事前に聞く話を決めることがあっても、このテーマでちょっと議論したいみたいなスタンスで臨んだことはないのでそういう観点で準備するといいかもと思いました。

自分で検証するときのトピックの網羅性

今回のオブザーバビリティやセキュリティなどの話を聞いたり、普段人と話して思うのは「実際使いたいときに開発フローに組み込むことはできるのか?」「各開発フロー毎のベストプラクティスは?」みたいなのに関して自分が全然答えられないなという部分です。

根本のコンセプト、仕様、実装ももちろん理解してないと使えないですが、現実的に開発フローを組み立てるにはどうしたらいいのかという観点で検証して自分の知識を整理して発信していくのは有意義に思えました。

時間かけすぎ

9月締め切りがある原稿たちの執筆時間をかなり削った感は否めません。

個人OKR運用で継続で改善していくとは思います。

原稿の後には10月のServerlessDays Tokyoの Knativeハンズオンの準備が待ってるので、それにも活かせる形で書き上げたいです。

改訂2版 みんなのGo言語

全体の感想

ある程度自分でCLIやアプリケーション開発をした上で読むと、「あれってどうやると良いんだろう?ベストプラクティス的なのって何だろう?」という疑問が解決できそうな本でした。

僕は改訂前の本をA Tour of Goを一通りやり終えた後にすすめられて読んだのですが、あまりピンときませんでした。

しかし、プログラミング言語Goを読んで文法を理解した後に自分でCLIをいくつか書いてみたり、業務でGoのマイクロサービスをいくつか開発した今読むと実感できることが増え、改めて手を動かして確認したり、実践でも活用してみたいことが多いなぁと感じました。

全体的に各テーマ類似するパッケージの特徴や使い方やベンチマークを比較しながら評価・解説されていることが多く、自分で技術選定する際の参考にもなります。

Goを活用した開発を実践する上での課題を解決する手がかりが多く見つかるよい本でした。

各章の感想

1章 Goによるチーム開発のはじめ方とコードを書く上での心得

自分の開発環境を改めて見直すきっかけになってよかったです。

パッケージ分割の基準や大きいstruct作るべきではないのはなぜかなども言語化されていてなるほどなぁと思いました。

  • GOPATH、GOROOTは環境構築するたびに結局今ってどうするんやっけ?という気持ちになりますが自分の使い方では変える必要なさそうということでfix
  • Build ConstraintsをBuild Constraintsと呼ぶと意識して開発してなかったのでググる力が増しました
  • リポジトリ移動にpeco/peco
    を使ってなかったのでmotemen/ghqと合わせて使ってみます
  • Makefileのhelpコマンドは人が書いたワンライナーはっつけてましたがSongmu/make2helpよさそうですね
  • 「単独のパッケージとしてほかのプロジェクトから使えるかどうかがパッケージを分割する基準」よさそう
  • 「正規表現のパフォーマンスが悪いのは最悪ケースの処理時間が極端に遅くならないように設計されているため」知りませんでした
  • 「たくさんのフィールドを持つような巨大なstructを定義するのではなく、再利用可能な小さな部品を組み合わせてデータ構造を定義」よさそう

2章 マルチプラットフォームで動作する社内ツールのつくり方

一度でもCLIツールやアプリをクロスコンパイルして配布しようと思ったことがあるとありがたみが増す章でした。

バージョンアップデートを追うポイントについても学びがあり活かせそうです。

  • マルチプラットフォームに対応したツールを作るときは特にWindows周りでパス、文字列、ファイル操作、ホームディレクトリあたりを気をつけようと思いました。自分でCLIツール作るときはとりあえずmacOSで使えるものを作った後にクロスコンパイルしてWindowsとかでも使えるようにするぞ!みたいな流れだったので、最初から気をつけるべきポイントがわかっているといざ配布するときに体験を損なわずに済みます。
  • バイナリにリソースを埋め込むにあたり、jteeuwen/go-bindatajessevdk/go-assetsはもうメンテされないので、rakyll/statikgobuffalo/packrを勧めていた話の流れがよかったです。リソース埋め込みでまず思い浮かぶのがgo-bindataとgo-assetsだったので認識を改めることができました。
  • awesome-goGUIセクションがあることやGUI用のライブラリがたくさんあるのを知りませんでした。CLIツールを作るものという固定観念を打破してくれました。自分で積極的に作るモチベーションはないけれどそういう章があったら楽しめそうです。
  • 設定ファイルのフォーマットと場所をどうするかについて各フォーマット向けライブラリの成熟度などを比較した上で筆者の見解が述べられていたり、実装の注意点が整理されていたのがとてもよかったです。cgoを使っているかどうかによるクロスコンパイルの挙動差異や、ホームディレクトリ関連でcgoに依存しないAPIが特定Goバージョンから利用できるようになったことは自分がこれまで意識できていなかった観点で、バージョンアップを追うモチベーションやポイントの1つになりました。

3章 実用的なアプリケーションを作るために

タイムアウトやシグナルハンドリングなど、実践でよく使うが理解不十分だった部分の理解が深まった章でした。

  • 標準出力のバッファリングをあるLL言語と比較しつつ、bufioパッケージを利用した実装と利用していない実装を使ってシステムコール回数をstraceで観察していたのがよかったです。システムコール自体の重みがよくわかってないのでベンチとろうと思いました。
  • dustin/go-humanize便利そう。わかりやすく表示できるのも、わかりやすい形式で引数などに指定できるのもいいですね。
  • 乱数系のパッケージはおそるおそる使っている感があるのでmath/randcrypto/randの性質の違いがまとまっているのはとてもありがたかったです。
  • contextパッケージはタイムアウトやgoroutineを扱う上で必ず通るのでありがたかったです。シグナルハンドリングと合わせて載っていてありがたみが増しました。シグナルハンドリング実装はよく目にしますが、シグナルを受けたときのデフォルトの挙動がドキュメント化されているのは知らず、とても良い知見でした。
  • 「シグナルハンドリングでやるべき処理」
    • 外部からの新規リクエストを受けなくする
    • 受信時に実行中の処理が完了するまで待つ
    • メモリ上に確保したバッファをすべて書き出してファイルを閉じる

4章 コマンドラインツールを作る

CLIを書くときに実践すべきことが詰まっている章でした。

はじめてCLIを開発し、テストの仕方を調べるときも筆者のブログを読ませていただいた記憶があります。

flagパッケージへの気持ちも感じることができました。

  • パッケージ構成を考える上でバイナリ + ライブラリを提供するのか、ライブラリを提供するのかで変えるのは面白いなぁと思いました。ただ、バイナリメインでもコマンドはcmdの下において外部提供する意図の無いパッケージをinternal下に置くのもありなのかなぁとも思いました。何れにしても意図をパッケージ構成で伝えるというのは取り入れたいです。
  • flagパッケージの使いこなしを実装を追いながら学べ、その他サードパーティの利用方法や特徴と比較していた点がとてもよかったです。章全体でなぜ?が重視されていて学びが深まったので、筆者が標準のflagパッケージしか使わなくなった点も一層気になりました。
  • 「os.Exitはdefer文で呼び出した関数を実行せずに処理を終了する」あまり意識してなかった気がするので気をつけてみます。本章にも書いてあるとおりos.Exitは無闇に呼ぶべきではないと思っているので、仮に出会った時に見落としそう。
  • 「ロングオプション: 説明的、シェルスクリプトやドキュメント、ショートオプション: 簡単に素早く」そうだなぁと思いました。
  • 今度サブコマンドを扱うCLIを書くときはmitchellh/cliを使ってみようと思いましたがメンテされてない…?サブコマンドをインターフェースとして定義するの好きです。

5章 The Dark Arts Of Reflection

ベンチをとった解説がわかりやすく、reflectionのメリット・デメリットがよく伝わる章でした。

他の章でもベンチをとって比較するのは登場していたのですが、特に効果的に感じました。

  • 型アサーションとソートについてreflectパッケージを使う場合とそうでない場合のベンチを比較していて、利用場面を選んで使うべきという主張の説得力が増していてよかったです。
  • 動的にselect文を構築する部分は難しくてよくわかりませんでした。

6章 Goのテストに関するツールセット

アプリケーション開発で常に実践せざるを得ない感がもっとも強い章でした。

ベンチマークを普段ほとんどとってないので、実装方法で迷ったり、チューニングする上ではやらねばと思いました。

僕はモックはgolang/mockが好きで、比較はgoogle/go-cmpが気になるものの試せていません。

  • Exampleテストのfunction名でgodocのどこに載るかが変わるのを知りませんでした。
  • reflect.DeepEqualの挙動がtypeごとに説明されていてよかったです。ドキュメントにけっこう書いてあるんですね…!意外とオジェクトを比較するテストに出会っていません。
  • Race Detectorの出自を知らなかったので勉強になりました。使用時にメモリ使用量5〜10倍、実行時間2〜20倍になることや、静的解析ツール出ないことも書いてあってよかったです。
  • インテグレーションテストとユニットテストをBuild Constraintsで分ける話がよかったです。Makefileにテスト種別を区別して実行するためのパッケージ分類スクリプトが書いてあるのを見てきましたが、Build Constraintsを使うと明示的になりそうです。
  • カバレッジについては所属組織のデフォルトMakefileやIDE、ツール(Sourcegraph)に頼っていたのでそもそものgo toolの中身を知れてよかったです。

7章 データベースの扱い方

DBやそれを扱うためのORMの章ではありますが、ライブラリ選定をちゃんとやろうという気持ちになれる章でした。

普段GoのAPIを書くことが多く、フロントも込みで開発することがないので画面込みで開発する部分は別章が丸々設けられていても楽しそうでした。(それやると別タイトルの本になりそう)

  • cgoに対するpure goという概念を覚えました。
  • mattn/go-nulltypeの紹介が、DB文脈でnullableを扱う上での課題を十分に説明した上で出てきて良い流れだなぁと思いました。
  • ライブラリの選定プロセスを垣間見ることができる構成でとてもよかったです。
  • 「本書が古くなりこれらのライブラリが古くなってしまったとしても、プログラマのみなさんがやるべきことは変わりません。新しい技術要素を調査し、あらゆる候補を比較するためにベンチマークをとることです」は最高のしめでした。

改訂2版 みんなのGo言語