2020年9月12日(土)〜22日(火)に開催される技術書典9で5冊出展します!

カエルと空というサークルで、このページから出展しているのでぜひのぞいて行ってください!

カエルと空のサークルページ

出展する本を紹介します。

『Google Cloud Platformで学ぶTerraform 〜基礎編〜』

僕は、マイクロサービスを開発するためのプラットフォームを開発・運用するチームで2020年から働き始めました。それ以前の仕事は、バックエンドエンジニアとしてのマイクロサービス開発です。プラットフォームチームが開発したTerraformモジュールに設定を渡し、GCPやKubernetesのリソースを作成していました。

いざそのモジュールを作成したり、エラーのデバッグをする立場になってみると何もわかりません。つぎのような疑問がわきました。
・モジュールとは何か
・複数のリソースから構成されるアーキテクチャはどう組み立てるのか
・なぜ Terraform の状態と実際のクラウドリソースの状態はずれるのか

Terraformの概念や個々のリソースの使い方、GCPを利用したサンプルのモジュールはたくさんあります。Terraformに関する書籍もあります。
しかし、Terraformの具体的な説明に登場するクラウドは、ほとんどがAWSです。クラウドアーキテクチャの設計経験も多くはない僕にとって、AWSベースで説明された内容をGCPに置き換えながら学ぶのはとても大変でした。そこで、この本を書くことに決めました。

AWSからGCPへの翻訳をせず、クラウドの設計やTerraformをGCPを通じて学べる本。半年前の僕が欲しかった本です。この本を通じ、Terraform をより身近に感じる人が増えたら幸いです。

正誤表・増補改訂情報はこちらのページで公開しています。

『Google Cloud Platformで学ぶTerraform 〜基礎編〜』の正誤表と増補改訂情報 #技術書典

すでにBOOTHで電子版をご購入いただける状態になっています。

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

登場するほとんどのサンプルコードも、GitHub上で公開しています。

toshi0607/Learning-Terraform-with-GCP

目次です。

第1章 はじめに

第2章 Terraform の概要
2.1 Terraformの意義
2.2 Terraformのアーキテクチャ
2.3 まとめ

第3章 環境構築
3.1 GCPアカウント
3.2 GCPプロジェクト
3.3 GoogleCloudSDK
3.4 tfenv
3.5 vscode-terraform
3.6 まとめ

第4章 リソースとterraformコマンド
4.1 リソース
4.2 terraformコマンド
 init
 plan
 apply
 destroy
4.3 ライフサイクル
 create_before_destroy
 prevent_destroy
 ignore_changes
4.4 まとめ

第5章 Configurationの書き方
5.1 関数
 join
 length
 contains
 values
 file
 その他の関数
5.2 変数
 variable
 output
 locals
 データソース
5.3 ループ
 count
 for_each
 for
 dynamic
5.4 条件式
5.5 バージョンの明示
5.6 モジュール
 子モジュールの定義
 ルートモジュールの定義
5.7 まとめ

第6章 ステート管理
6.1 ステートの構造
6.2 リモートバックエンド
6.3 管理単位
 ワークスペース
 バックエンド
6.4 参照
6.5 ズレと直し方
 定義あり、ステートあり、リソースあり
 定義あり、ステートあり、リソースなし
 定義あり、ステートなし、リソースあり
 定義あり、ステートなし、リソースなし
 定義なし、ステートあり、リソースあり
 定義なし、ステートあり、リソースなし
 定義なし、ステートなし、リソースあり
 定義なし、ステートなし、リソースなし
6.6 リファクタリング
6.7 まとめ

あとがき

『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜 第2版』

初版から大幅に加筆した第2版です!

2019年末同僚に「なぜIstio(VirtualService)を使わずにKnativeはトラフィックスプリッティングのような機能を実現できるのか」と質問されて答えられなかったのがきっかけで調べることにしました。

Knativeは当初Ingress GatewayにIstioを採用(依存)しましたが、後にGlooをはじめ様々なコンポーネントで代替可能になりました。代替できる事実は知りつつも、なぜ代替できるのか、代替できるとはどういうことなのかを調べることはありませんでした。

しかし、「プラットフォームを開発・運用する」ことへの関心が高まり、(何層もある)Knativeより下のレイヤーを学びたい気持ちが強くなりました。本書はその一環です。Knative = Kubernetes Networkingとも説明されるKnativeのIngress Gateway周りの調査はKubernetesが提供しているService、Ingressの特徴や課題、そもそもロードバランサーとは何かのか、サービスメッシュやEnvoyとはどういう関係があるのか、といったネットワーク関連の入門にもうってつけでした。

「KnativeはなぜIngress Gatewayを交換できるのか?」という問いに答えることは、Envoyの設定をどう表現し、どう配信するかというデザインパターンを見い出すことに繋がります。

90ページ弱の自由研究に付き合っていただけたら幸いです!

すでにBOOTHで電子版をご購入いただける状態になっています。

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

目次です。

第1章 Knative
1.1 概要
1.2 Serving
1.3 Eventing
1.4 まとめ

第2章 Gateway
2.1 ServiceとIngress
2.2 Gateway と Service Mesh
 [コラム]APIGatewayとサービスメッシュの違い
2.3 Envoy とコントロールプレーン
2.4 コントロールプレーンの実装例(Istio)
2.5 まとめ
 [コラム]IngressAPIの進化
 [コラム] L4 から L7 ロードバランサーへ

第3章 Istio
3.1 概要
3.2 KnativeのCRD
3.3 Knativeのコンポーネント
3.4 IstioのCRD
3.5 Istioのコンポーネント
3.6 localgateway
3.7 Gateway
3.8 まとめ

第4章 Ambassador
4.1 概要
4.2 Knativeのコンポーネント
4.3 Ambassadorのコンポーネント
4.4 AmbassadorとEnvoy
4.5 まとめ

第5章 Contour
5.1 概要
5.2 Knativeのコンポーネント
5.3 Contourのコンポーネント
5.4 まとめ

第6章 Kourier
6.1 概要
6.2 Knativeのコンポーネント
6.3 Kourierのコンポーネント
6.4 まとめ
 [コラム] Kourier の活用事例

第7章 Gloo
7.1 概要
7.2 Knativeのコンポーネント
7.3 Glooのコンポーネント
7.4 まとめ
 [コラム]Envoyとgo-control-planeの今後

第8章 まとめ
8.1 Gateway
8.2 Ambassador
8.3 Contour
8.4 Gloo
8.5 Kourier
8.6 Istio
8.7 最後に

Appendix

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

こちらはKnativeのコンポーネントの説明やユースケースを中心に説明した本です。実際にKnativeが利用されたプロダクトの図解も掲載しています。

こちらもすでにBOOTHで電子版、紙本 + 電子版がBOOTHで購入できる状態になっています。

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

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

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

目次です。

第1章 Knativeの概要
1.1 Knativeの構成要素
1.2 Serving
1.3 Build
1.4 Eventing

第2章 Kubernetes環境の準備

第3章 KubernetesとKnativeの関係
3.1 Kubernetesの基本的思想
3.2 Kubernetesのオートスケール
3.3 Kubernetesの拡張機能

第4章 Knative Serving
4.1 Knativeのインストール
4.1.1 Istioの設定
4.1.2 Knativeの設定
4.2 Configuration
4.3 Revison
4.4 Routes
4.5 Service
4.6 オートスケールの仕組み

第5章 Knative Build
5.1 Build
5.2 BuildTemplate
5.3 Servingと組み合わせる

第6章 Knative Eventing
6.1 Sources
6.2 BrokerとTrigger
6.3 ChannelとSubscription

第7章 Knative のユースケース
7.1 FaaS プラットフォームの構築
7.1.1 イベントやリクエストを Function に渡すサーバー
7.1.2 サーバーとFunctionのパッケージング
7.1.3 CLI
7.2 イベント pull 型の FaaS 〜Knative Lambda Runtimes の利用例〜
7.2.1 AWS Lambda の Function(Go)
7.2.2 AWSLambdaとRuntimeInterface
7.2.3 knative-lambda-runtime
7.2.4 triggermesh/aws-custom-runtime
7.2.5 bootstrap
7.2.6 Tekton で生成するコンテナイメージ
7.3 イベント push 型の FaaS 〜OpenFaaS の Watchdog の利用例〜
7.3.1 WatchdogによるFunction制御
7.3.2 WatchdogとFunction同梱のDockerfile
KnativeのCLI

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

Knativeの仕組みをより深く追おうとするときに、Kubernetesのカスタムリソースやカスタムコントローラーの枠組みを知っておくと追いやすくなります。本書では、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

引き続き電子版、紙本 + 電子版がBOOTHで購入できる状態になっています。

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

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

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

『Goで学ぶAWS Lambda 第2版』

技術書典5で出展したAWS Lambdaのユースケースに関する本も引き続き。

AWS Lambda周辺のエコシステムはこの本の最終更新後に大きな変更がありました。Amazon RDS Proxy with AWS Lambda、AWS Lambda VPC接続の改善、Provisioned Concurrency for Lambda Functionsは本の中でも触れられている課題の決定的な解決策です。少し本の内容が古くなってしまったものの、AWS Lambda(とSAM)をGo言語で学ぶ入門の1つとしては依然として有効ではないかと思います。

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

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

GoとSAMで学ぶAWS Lambda

目次です。

第1章 環境構築
1.1 anyenv
1.2 anyenvupdate
1.3 goenvとGo
1.4 pyenvとPython
1.5 aws-cli
1.6 aws-sam-cli
インストールトラブルシューティング
1.7 saw
1.8 direnv
1.9 dep
1.10 gig

第2章 S3 イベントの活用
2.1 概要
2.2 S3
2.3 シーケンス
2.4 フォルダ構成
2.5 ソースコード
2.6 テスト
2.7 デプロイ
2.8 削除

第3章 SNS と SQS によるファンアウト
3.1 概要
3.2 SQS
3.3 SNS
3.4 シーケンス
3.5 フォルダ構成
3.6 ソースコード
3.7 テスト
3.8 デプロイ
3.9 削除
CloudFormationトラブルシューティング

第4章 API Gateway と DynamoDB を使った URL 短縮サービス
4.1 概要
4.2 APIGateway
4.3 DynamoDB
4.4 シーケンス
4.5 フォルダ構成
4.6 ソースコード
4.7 テスト
4.8 デプロイ
4.9 削除
DynamoDBのテーブル定義変更
LambdaとAPIGatewayのローカル実行

2020年3月7日(土)から開催される技術書典 応援祭で4冊出展します!

『KnativeとIngress Gateway 〜Ambassador、Contour、Gloo、Kourier、Istioの比較〜』

今回の新刊はKnativeのIngress Gatewayについてです。3回連続でKnative関連のお話になりました。

昨年末同僚に「なぜIstio(VirtualService)を使わずにKnativeはトラフィックスプリッティングのような機能を実現できるのか」と質問されて答えられなかったのがきっかけで調べることにしました。

Knativeは当初Ingress GatewayにIstioを採用(依存)しましたが、後にGlooをはじめ様々なコンポーネントで代替可能になりました。代替できる事実は知りつつも、なぜ代替できるのか、代替できるとはどういうことなのかを調べることはありませんでした。

しかし、「プラットフォームを開発・運用する」ことへの関心が高まり、(何層もある)Knativeより下のレイヤーを学びたい気持ちが強くなりました。本書はその一環です。Knative = Kubernetes Networkingとも説明されるKnativeのIngress Gateway周りの調査はKubernetesが提供しているService、Ingressの特徴や課題、そもそもロードバランサーとは何かのか、サービスメッシュやEnvoyとはどういう関係があるのか、といったネットワーク関連の入門にもうってつけでした。

「KnativeはなぜIngress Gatewayを交換できるのか?」という問いに答えることは、Envoyの設定をどう表現し、どう配信するかというデザインパターンを見い出すことに繋がります。

80ページ弱の自由研究に付き合っていただけたら幸いです!

すでにBOOTHで電子版をご購入いただける状態になっています。

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

7月の技術書典9で紙本を印刷するのを目指し、フィードバックを受けてブラッシュアップしていく所存です。

目次です。

第1章 Knative
1.1 概要
1.2 Serving
1.3 Eventing
1.4 まとめ

第2章 Gateway
2.1 ServiceとIngress
2.2 Gateway と Service Mesh
2.3 Envoy とコントロールプレーン
2.4 コントロールプレーンの実装例(Istio)
2.5 まとめ

第3章 Istio
3.1 概要
3.2 KnativeのCRD
3.3 Knativeのコンポーネント
3.4 IstioのCRD
3.5 Istioのコンポーネント
3.6 localgateway
3.7 Gateway
3.8 まとめ

第4章 Ambassador
4.1 概要
4.2 Knativeのコンポーネント
4.3 Ambassadorのコンポーネント
4.4 AmbassadorとEnvoy
4.5 まとめ

第5章 Contour
5.1 概要
5.2 Knativeのコンポーネント
5.3 Contourのコンポーネント
5.4 まとめ

第6章 Kourier
6.1 概要
6.2 Knativeのコンポーネント
6.3 Kourierのコンポーネント
6.4 まとめ

第7章 Gloo
7.1 概要
7.2 Knativeのコンポーネント
7.3 Glooのコンポーネント
7.4 まとめ

第8章 まとめ
8.1 Gateway
8.2 Ambassador
8.3 Contour
8.4 Gloo
8.5 Kourier
8.6 Istio
8.7 最後に

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

こちらはKnativeのコンポーネントの説明やユースケースを中心に説明した本です。実際にKnativeが利用されたプロダクトの図解も掲載しています。

こちらもすでにBOOTHで電子版、紙本 + 電子版がBOOTHで購入できる状態になっています。

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

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

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

目次です。

第1章 Knativeの概要
1.1 Knativeの構成要素
1.2 Serving
1.3 Build
1.4 Eventing

第2章 Kubernetes環境の準備

第3章 KubernetesとKnativeの関係
3.1 Kubernetesの基本的思想
3.2 Kubernetesのオートスケール
3.3 Kubernetesの拡張機能

第4章 Knative Serving
4.1 Knativeのインストール
4.1.1 Istioの設定
4.1.2 Knativeの設定
4.2 Configuration
4.3 Revison
4.4 Routes
4.5 Service
4.6 オートスケールの仕組み

第5章 Knative Build
5.1 Build
5.2 BuildTemplate
5.3 Servingと組み合わせる

第6章 Knative Eventing
6.1 Sources
6.2 BrokerとTrigger
6.3 ChannelとSubscription

第7章 Knative のユースケース
7.1 FaaS プラットフォームの構築
7.1.1 イベントやリクエストを Function に渡すサーバー
7.1.2 サーバーとFunctionのパッケージング
7.1.3 CLI
7.2 イベント pull 型の FaaS 〜Knative Lambda Runtimes の利用例〜
7.2.1 AWS Lambda の Function(Go)
7.2.2 AWSLambdaとRuntimeInterface
7.2.3 knative-lambda-runtime
7.2.4 triggermesh/aws-custom-runtime
7.2.5 bootstrap
7.2.6 Tekton で生成するコンテナイメージ
7.3 イベント push 型の FaaS 〜OpenFaaS の Watchdog の利用例〜
7.3.1 WatchdogによるFunction制御
7.3.2 WatchdogとFunction同梱のDockerfile
KnativeのCLI

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

Knativeの仕組みをより深く追おうとするときに、Kubernetesのカスタムリソースやカスタムコントローラーの枠組みを知っておくと追いやすくなります。本書では、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

引き続き電子版、紙本 + 電子版がBOOTHで購入できる状態になっています。

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

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

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

『Goで学ぶAWS Lambda 第2版』

技術書典5で出展したAWS Lambdaのユースケースに関する本も引き続き。

AWS Lambda周辺のエコシステムはこの本の最終更新後に大きな変更がありました。Amazon RDS Proxy with AWS Lambda、AWS Lambda VPC接続の改善、Provisioned Concurrency for Lambda Functionsは本の中でも触れられている課題の決定的な解決策です。少し本の内容が古くなってしまったものの、AWS Lambda(とSAM)をGo言語で学ぶ入門の1つとしては依然として有効ではないかと思います。

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

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

GoとSAMで学ぶAWS Lambda

目次です。

第1章 環境構築
1.1 anyenv
1.2 anyenvupdate
1.3 goenvとGo
1.4 pyenvとPython
1.5 aws-cli
1.6 aws-sam-cli
インストールトラブルシューティング
1.7 saw
1.8 direnv
1.9 dep
1.10 gig

第2章 S3 イベントの活用
2.1 概要
2.2 S3
2.3 シーケンス
2.4 フォルダ構成
2.5 ソースコード
2.6 テスト
2.7 デプロイ
2.8 削除

第3章 SNS と SQS によるファンアウト
3.1 概要
3.2 SQS
3.3 SNS
3.4 シーケンス
3.5 フォルダ構成
3.6 ソースコード
3.7 テスト
3.8 デプロイ
3.9 削除
CloudFormationトラブルシューティング

第4章 API Gateway と DynamoDB を使った URL 短縮サービス
4.1 概要
4.2 APIGateway
4.3 DynamoDB
4.4 シーケンス
4.5 フォルダ構成
4.6 ソースコード
4.7 テスト
4.8 デプロイ
4.9 削除
DynamoDBのテーブル定義変更
LambdaとAPIGatewayのローカル実行

今後

回を追うごとにニッチな感じになってきた気がします。自分の興味のある分野の自由研究としてとても面白くはあるものの、技術書典9はポップでキャッチーなやつ書こうかなと思っています。

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ハンズオンを実施予定です。

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

CloudNative Days Tokyo 2019で登壇してきました。振り返ります。

発表資料はこちらです。

なぜプロポーザルが必要なカンファレンスに登壇するか

今回の登壇は初めてCFPに対してプロポーザルを提出し、審査を経たものでした。

なぜプロポーザルを提出する系のカンファレンスで登壇をしたいと思ったのかについては2019年1月に遡ります。

目標を立てるにあたって昨年は登壇回数を指標にしていました。それももちろん意味はあるのですが、

「自分はこれを喋る」というのを明確に定めた上で検証、準備し、そのテーマに興味のある人にダイレクトに話を届け、問い、フィードバックを得て自身の学習サイクルやスキルを向上させる

というのが意義だと思っています。

それで日々お世話になっているコミュニティへの貢献だったり、仕事で生み出す価値の質が上がれば言うことはありません。

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

そのため、今年は登壇回数ではなくてCFPを4ヶ月に1回出してみるというものに習慣目標を変更しました。

その後またOKRの運用を始め方針が変わったものの、プロポーザルの内容がOKRでより具体的になる感じなので両立できそうです。

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

テーマの選定

プロポーザルとして提出したのはこんな文章 + αでした。

講演タイトル - Abstract Title

(最大50文字)受講者の目を引くようなるべく具体的なテクノロジー名を含めることをおすすめします

Knativeで実現するKubernetes上のサーバーレスアーキテクチャ

講演内容 - Abstract

(200文字程度)どんな人に向けた講演かこの講演によって受講者がどんな情報を得られるかを含めることをおすすめします

Kubernetes(K8s)上でサーバーレスアーキテクチャを実現するKnativeが何を解決するのかを構成するコンポーネントやユースケースを交えて紹介します。
本講演は次のような方を対象にしています。
・Knativeがなんなのか、k8sとどのような関係にあるのか、どういう仕組みなのかを知りたい
・K8s上でもサーバーレスアーキテクチャを実現したい
・K8s上のアプリケーションの開発・運用負荷を下げ、機能開発により集中したい

なぜKnativeをテーマにするのかについてはこれまでのServerless Meetup、mercari.go、技術書典6など折に触れて書いてきました。

  • みんな大好きLambda奴を自分で実装できるっぽい
  • Kubernetes詳しくならざるを得ない状況を作れる

からです。

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

1〜2月にKubernetes完全ガイドでK8sに入門し、2月にk8s source code reading #1に参加してみてちょうどCFPの話があったので応募してみることにしました。

提出時点ではまだKnativeに触ったことはなかったものの、5ヶ月くらい準備があり、継続して学びたいテーマであるため「自分がこの5ヶ月で理解したいこと」をプロポーザルに書くことにしました。

準備

主に準備すべきことはプロポーザルに書いたこの3つです。

①Knativeがなんなのか、k8sとどのような関係にあるのか、どういう仕組みなのか
②K8s上でもサーバーレスアーキテクチャを実現するにはどうしたらいいのか
③K8s上のアプリケーションの開発・運用負荷を下げ、機能開発により集中するにはどうしたらいいのか

①についてはServerless Meetup、mercari.go、技術書典6で調べていたのでアップデート分を調べつつ、直近の2週間では②、③を中心に検証したり調べたりしました。

特にユースケースについてREADME以上のことに触れられていなかったので、「③を実現するサーバーレスアーキテクチャを実現するためのプラットフォームを構築する」という観点でtriggermesh/knative-lambda-runtimeやOpenFaaSを調べました。

振り返り

OKR

CNDTは個人OKRを達成する上で重要な位置付けにありました。Objective2は家庭面なので、CNDTの位置付けが明示されているObjective1について振り返ります。

Objective 1

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

Key Result 1

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

  • CloudNative Days Tokyo 2019 登壇
    -> コンテナベースのアプリケーションを開発するにあたり、各ユースケースがどんな課題を解決するのかを意識して説明するようにしました。

K8sでサーバーレスをやる意義の中でKnativeがK8sとサーバーレスをどう捉えているか述べた上で説明した(つもりな)のでよかったんじゃないかと思います。

  • ServerlessDays Melbourne 登壇
Key Result 2

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

  • CloudNative Days Tokyo 2019 登壇
    • Knative Lambda Runtime

-> これは今回の登壇で一番伝えたかった部分です。FaaSをDIYする上でのリファレンスアーキテクチャの思想や設計を調べるのは楽しかったし、一般化できたのは大きな進捗でした。

スライドの図 + コードを見ながら具体的に追っていくことがさらに理解を促し、自分で作る上でも意義があると思うので下に書いてあるKnative本で実現しようと思っています。

  • 技術書典7執筆 既刊Knative本アップデート
    • Pivotal Function Service
    • OpenFaaS functions on knative
  • 何かCloud Runの話できる機会があれば
Key Result 3

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

-> CNDTの文脈ではかすりませんでした。

mercari.goの反省を踏まえて

6月に登壇した mercari.go #8での反省を踏まえて次のようなことを意識してCNDTの準備を行いたいと書いていました。

mercari.go ♯8で『Goで学ぶKnative』を話してきました #mercarigo

人に事前に2回聞いてもらい、軌道修正する

  • 今月(6月)中に目処を添えてお願いする

-> 何もかもできませんでした。事前に見て欲しいのは

  • 道徳、コンプラ、セキュリティ面でアウトなことがないか
  • 人に聴いてもらって感想をもらったら大体気づきが得られる

という目的があったと思います。

  • 割とこれまで話したことが多い
  • 書籍などこれまでのアウトプットに対してもらったフィードバックやこれまでの登壇のフィードバックを盛り込んでいる

などがあり「事前」にそこまでこだわらなくてもいいかもと思い始めました。

ただ、OKRを決めて集中すべきことを絞るのはギリギリまで資料作りに追われるようなスケジュールにしないという意図もあるので、何かの登壇前には一度やってみようと思っています。

やってみた上でスタイルは決めたいです。

あと事後的な感想はまだ間に合いそうなので聞きに行ってみます。

テーマである「解決する課題」を明確にして関係するユースケースを話す

  • デモとかするにしても何のためにやって何を見て欲しいかを明確にする

-> けっこう久々にデモしました。「簡単さ」「手軽さ」みたいなものを伝えるならmanifestファイルをkubectlで適用するのではなくて、knコマンドなど直接それらを触らない形で見せられるとよかったのかもと思っています。

漠然と機能や実装を追わず検証のゴールを先に決める

  • つぎの土日は項目出しのためにグダグダ調べていい
  • ただしその後は集中すべきことに集中する。やすみやすみ!

-> 今回は何か作業する前にリスト作ってそれに集中するというのを意識的にやった気がします。それも含めた管理にNotionが適していたので使い始めました。

Good

プロポーザル出した

第一歩を踏み出せたことはよかったなぁと思います。

調べたかったことを調べて理解できた

K8s上でFaaSをどうやったら作れるか?の具体的なイメージがわく程度に調べることができてよかったです。

ただ、その主要な調査自体は1日だったので、Objectiveを達成するためにもっと近道しようと思えばできるということは意識しておきたいです。早く切り上げてより難しいことや他のことをやりたくなったとき向けに。

準備プロセスの改善

やる作業のスコープを定めて集中するのと調べる項目を洗い出すのに時間をとるのはよかったです。

とはいえ調べてる途中でも項目は変わるので、アウトプットも1つのプロダクトと思ってアジャイルしますかー

Challenge

前見て喋ろう

DEMOもするのでマイク固定で話していたら前傾して前を見れないし、反応見れないしでけっこう不安なまま突っ切った感があります。

固定できても必要なときだけホルダーに置き、基本は持つようにします。

あと今回せっかくピンマイクも使えたのに普段と違う設備でやるのが不安で避けましたが多分使えたら使うのがベストプラクティスっぽい。

後ろからDemo画面見よう

大きめにしてたけどDemo画面後ろまで見えてたかわからぬ…

スクリーンに表示して後ろから見て調整するようにします。人から今どう見えてるのかは把握しときたい。

分量

セッション枠に対してゆとりある分量にしてゆっくり喋りたい。

とりあえず資料作って読み上げたら40分枠に対して50分以上かかりました。そこから内容を削り、練習では最終的に43分くらい。本番も42分半。アウトです。

詰め込めるように練習してなんとか時間を短縮したのもあって、本番を想像すると近況が余計に増すのが何より厳しかったです。

時間が余りそうなら余りそうで不安だとは思いますけどね。

「ゆっくり話して収まるように思い切って削る」を次はやります。

セルフログミー

Serverless Meetupの登壇資料とログミーさんから出た記事の媒体の反響の差分は資料単体の拙さだったり、コンテキストの差だと思います。

今回の登壇準備で得た知見はコードを追いながら文字で説明したい部分が特に重要な箇所だったので自分でやってみようと思いました。

それがそのままKnativeの既刊に追加されそう…

表面的

技術的深掘りがREADMEから抜け出せてない感がまだまだ強いです。

今回いただいたフィードバックの観点や実装面で深掘りして新刊を出すので、そこでもう少しなんとかしたいです。

それでもアウトプットの機会を経るごとに理解できたと思うことは増えているのは思うので、理解しようとするスコープを定めて着実に進んでいこうと思います。

妥協したが理解した方がいい部分

  • RouteとIstio
    • RouteがIstioのリソースをいじってると思い込んでてGateway、VirtualService、DestinationRuleなど探したものの、Routeの変更が反映されたりはしていませんでした。Glooなど他のGatewayに差し替えれるにしてもRoute設定したときに何を変更しているのかなどは理解したいです。
  • Tekton
    • TektonでPipelineを作ってKnativeのサンプルをデプロイしようとしたもののできなかったのでその原因を調べ切りたいです。
  • CloudEvents
    • もっと追ってみると楽しそうでした。FaaSの課題、イベントドリブンなものを作るつもりで書いてたのにあまり触れられなかったのもイケてないです。
  • Eventingのリソース
    • brokerとfilterのdeployment、ラベルを消してもDeploymentを消しても何度でも蘇り消えなかったので実装追いたいです。
    • issueにさっきコメントついたので読む

仕様を覚えるだけで実現する仕組みを追わないのは、他のことを追い始めても先が見えてる気がするのでここは後手に回っても最終的に妥協しないようにしたい。

あと、この文脈は関係ないけど登壇依頼される程度に特定の分野に詳しいことが認知され、なおかつその分野の正しい見識を持っている状態になりたい。

フィードバック

登壇後にAsk the speakerで何人かにご質問いただいたり、お話ししたり、インターネッツから拾ったりしました。

Knativeの発表でこんなに色々話してるの聞いたのは初めてみたいな声はお世辞でも嬉しかったです。

  • K8s使い始めだとメリットが理解しづらかった
  • 実際どう?使ってる?メルペイでもサーバーレスワークロードって検討してる?
  • K8sクラスタでFaaSを使えるようにする意義は?
  • node affinityと両立するにはどうしたらいい?(?)
  • FaaSはわかるけどPaaS基盤を構築するってどういうこと?
  • いつGA?ロードマップでてる?
  • ブルーグリーンデプロイってK8sやIstioでもできると思うけどKnativeでやる意義は?
  • 隠蔽されることで調査しづらくなったりする部分ないか
  • K8sでできるけどKnative使うとできなくなることないか
  • (プラットフォーム的に現実的に選択できる)Cloud Runどう使うとよさそうか
  • Istio、Gloo以外にもAmbassador使えるのでは?
  • EventingのIstio依存ってもうないのでは?

自分のアウトプットに対してこういう声をもらうのが目的なので本当に嬉しいと思ったり、重要な視座をもたらしてくれる人はだいたい変わらないのでそういう人に直接話に行った方が強くなれるのでは?って思ったりしています。

特に最後の5つはいざ使うときに技術選定する大事なポイントだったり、自分が情報を追う上で見つけられなかった点だったりして深めていこうと思います。

その他も言われてみたらたしかに気になる点だと思うし、node affinityの件は問題を生じる状況を理解できていないところだったりします。

一番のフィードバックは業務で得られるはずですが、それに加えて行なっている個人的な活動なのでいただいた内容を糧に強くなっていこうと思います。

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

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

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

技術書典6で『Knativeの歩き方 KubernetesからServerlessを訪ねて』と既刊第2版を出展します #技術書典

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

早速修正がありますすいません…

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

謝辞

今回も単著と言いつつも妻に編集や表紙デザイン、サークルカット作成、入稿(本とダウンロードカード)をお願いしました。

初めてだらけの前回と比べると多少平和だった感はあるものの、4/8入稿に対して4/7の夜まで粘ってしまったので丁重に労わせていただく所存です。

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

振り返り

Good

テーマ

こちらでも書きましたが、Kubernetesをある程度理解しないと先に進めないKnativeをテーマにしたことは仕事にも大いに役立ちました。

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

さらに、サーバーレスと謳っているとはいえ最初は愛しのLambdaには程遠く感じたKnativeも、愛しのLambdaに感じる愛しさの根源を見つめ直し、それをKubenretesの利用者に届けたい気持ちを感じとれたことは今後の検証の方向付けになりました。

CloudNative Days Tokyoでも「Knativeで実現するKubernetes上のサーバーレスアーキテクチャ」というタイトルで発表させていただけることになったので進めていきます。

その検証の課程で『Knativeの歩き方 KubernetesからServerlessを訪ねて』をよりよくしていきます。

具体的にはつぎのような内容の章を追加します。

  • Knativeのコンポーネントを組み合わせたユースケース
  • Knativeを使ったプロダクトを利用することで「開発者にとってより機能・サービスのユーザーに対する価値向上」に集中できるか
  • Knativeで作る俺たちのLambda

そして何より、普段の仕事で感じるような感じないような課題と自分の趣味の交点がこのあたりな気がするので楽しい!!楽しいよ!!!

わくわくする技術との出会いが何よりも大きな価値です。

って書いたら振り返りもう満足した。

BOOTH事前販売

技術書典5では本番後に販売を開始しましたが、今回は入稿日に販売を開始しました。

Knativeの歩き方 KubernetesからServerlessを訪ねて(PDF、ePubセット版) #技術書典

前回そうしなかったのは「本来紙本を買ってくれるはずの人が紙本でなくBOOTHに流れ、紙本が売れ残るのがこわかったから」です。

BOOTHで事前に買ってくださる方は当日参加できない事情がある(別の用事がある、興味があるが会場が遠い)方のような気がしたのと、紙本売れ残るリスクそんなに感じなくなりました。

ABテストできるわけではないので何とも言えないですが、収益が目的ではないので告知タイミングで欲しいと思ってくださった方が当日を待たずその場で手に取れる方が幸せだと思うので今後もそうします。

うれしい感想

いただいた感想が嬉し過ぎて本当に書いてよかったなぁと思いました。

前書きに始まるKnativeを僕が書く必然性(僕が書くのにふさわしいとかそういう意味ではない)や、それぞれのコンポーネントのサンプルの登場させ方、順番、組み合わせ方。

中身としてはREADMEを超えるものにはなりませんでしたが、話の流れとして自然になるようにする部分にはこだわりました。

そういう部分や愛情が伝わったのは嬉しいです。

そしてKnativeを一緒にわいわいやる仲間が増えていくのは財産です。

本のタイトル

お気に入りです。

Serverless meetupを諦めなかったこと

去年のServerless ConfはLTやってみたい!と思っていたものの、技術書典5の準備と重なったり、それを発表できる形に整理する方法も思いつかずただただ指をくわえて見ていました。

今回は3月頭という技術書典1ヶ月前のタイミングでのServerless Meetup登壇を1つのマイルストーンとし、自分の認識もブラッシュアップしながら進めることができました。

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

継続して取り組みたい大きなテーマがあるときはアウトプットの場が分断されずいい感じに繋がるので継続したいです。

最新バージョンへの追従を諦めなかったこと

入稿数日前に0.4系から0.5系へのアップデートがリリースされ、1つのコンポーネントのアーキテクチャが大きく変更されました。

進捗も逼迫していたので迷ったのですが、開発に勢いがありどうせすぐ情報が古くなるなら可能な限り新しいものを届けたいと思い追従することにしました。

もし古いままだと、本を読みきったと思ってもまた別途新バージョンをキャッチアップする必要が生じやや二度手間感が生じます。

それよりは早くユースケースに進んでわいわいして欲しい。結果期限ギリギリになり妻には迷惑をかけてしまったので丁重にry

CloudNativeコミュニティの方々との交流

事前にテーマの近い人が知れる(そういう風に配置していただける)ことで事前にTwitterでいろんな方と交流できたのもよかったです。当日を迎えるのが楽しみになる要素の1つでした。

CloudNativeコミュニティやその勉強会、Meetupでもぼっちにならない…!ありがとう!!!

謎の試み

何に1000円を支払っていただくのか

前回比ページ数が減った上で同じ値段なの気が引けると思っていたこともあったのですが、そう考えるのはやめました。

検証された最新技術が本当に必要最低限の分だけまとまっていて、安心して気軽に入門できるのも1つの価値です。

当日実際手にとってみて、「この分量で1,000円かよ」って思われるなら別にそれでいいなぁと。

ソフトウェアをコードの行数で値付けする・しないと似たような話かもしれません。

あと僕は一度買ってくださった方には増補改訂版(電子)を無料で配布しています。

目の前にある紙に1,000円払ってくれと言ってるわけでもありません。

「紙を渡して1,000円を受け取る」しか見ないのは悲しいし、本質から遠いです。

Challenge

うやむやにしていること

期限あるものに間にあわせるにあたり妥協している部分があります。

たとえば、詳細は割愛する形でリンクだけのっけているようなものを全部完全理解しているわけではないし、公式のREADMEに書いてる仕様の実装全部追ってるわけでもありません。

今後ユースケース中心に見ていくにあたり、それが楽しくて疎かになりそうだが理解する時間を確保すべきだなぁと思う部分は個別に整理するなり、Knative本に唐突にコラムとして追加するなりしたいです。

  • Istio、Envoy、サービスメッシュ
  • IstioとKnative Serving(、Eventing)の関係
  • 実装としてのKnative
  • Kubernetesで特に弱いService周りの仕様、基礎事項
    • DNS、kube-dns
    • L4/L7
    • iptables
    • Ingress
    • kube-proxy
    • パブリッククラウドのLB
  • イベントドリブン、リアクティブなアーキテクチャ概論
  • 分散システムのアーキテクチャ

無限に学ぶことがあって楽しいですね。

実装面は5月の後半に少しGoにフォーカスした内容で30分くらいお話しすることが決まりつつあるのでいい流れです。

OGP画像

圧倒的失敗。せっかく作った本を視覚的に伝えるチャンスなのにもったいない。

OGP画像に最適なサイズと、これらを使えばキャッシュクリアできる知見を得たのでよかったです。

過去に投稿した分も更新されます。再投稿してもいいし、再投稿しなくてもいい。

https://cards-dev.twitter.com/validator
https://developers.facebook.com/tools/debug/og/object/

こういう感じに整理するのすごく見やすくていいなぁと思いました。何を頒布しているかわかりやすい。

コミュニケーションパス

何かあったら@toshi0607まで!みたいなのわざわざメンションしてコミュニケーションすることもないのかな。結構頻繁に「Knative」でTwitter検索してるのでだいたい拾えている気もする。

と考えていたところこんなツイートが!

ハッシュタグでゆるくつぶやいていただけたら拾いますくらいの方が楽に感じたり、何か言葉を投げかけてくれる人がいるかもって思いました。

ハッシュタグ作りやすいタイトルだと便利、しかしハッシュタグに最適化したタイトルつける必要もないみたいな姿勢でいけたらと思います。

みんなその辺どうしてるんやろうと思ってBOOTHのぞいたら完璧な方がいらっしゃって感動しました。

りあクト! TypeScriptで始めるつらくないReact開発 第2版

ハッシュタグ検索結果のURL貼っておくの正しいっぽいし、それに限らず親切な作りになっていて勉強になります。

会いに行けるアイドルならぬ、タイムライン上にいる著者をたくさん生み出した技術書典。

気軽に絡んで技術もふもふわいわい盛り上がりたいものです。

新刊の部数

数字の整理は後からしますが、Knative本の方は100部刷って完売が14時過ぎでした。

一方Lambda本は既刊の第2版で50部刷ったものの完売が終了直前。

Lambda本はちょうどいい具合だったと思うのですが、Knative本は150部刷ったらその分頒布できたのかわからないし、毎回テーマも異なるのでなんとも言えないですね。

ただ言えるのは、紙本が当日残ってもそれを必要としてくれる人に届ける手段はいろいろあるので、ちょっと余るだろうなぁくらい刷ってみるのも試してみようと思います。

金銭面では紙よりも電子で買っていただける方がよいかもしれませんが、自分は技術書はほぼ紙でしか読まないし、読もうと思ってくださった人が読みやすい形で手にしていただけるのが一番です。

査読

事前に募集したものの、その時メンションしてくださった方にすぐ返せず、いざというタイミングで探したらメンションはなくなっていました。

興味持ってくださる方は大切にしつつ、ゆるぼで集めるのは厳しく感じます。

紙本になる前に読んで欲しいケースもなったあとに本でほしいケースもどちらもあるので、目的を明確にしてお願いする形にすることにしました。

Knativeの動向

Cloud NextでCloud Run(Knativeを利用したプロダクト)が出たのは追い風になったと思うのですが、その追い風や発表直前のアップデートは頑張れば読めたかもしれなです。

発表前にBOOTHで販売を開始していたのはすごくよかったと思います。一方でこの点考慮できていれば紙本もうちょっと刷ろうと思っていた可能性が高いです。

今後

このとおりです。振り返りの「テーマ」と「うやむやにしていること」あたりをいい感じにやっていきたいと思っています。

  • Knativeのコンポーネントを組み合わせたユースケース
  • Knativeを使ったプロダクトを利用することで「開発者にとってより機能・サービスのユーザーに対する価値向上」に集中できるか
  • Knativeで作る俺たちのLambda
  • Knativeの実装
  • IstioとKnative Serving(、Eventing)の関係
  • 分散システムのアーキテクチャとKnative

めっちゃ楽しそう。楽しそう…!!!

数字の整理

売上

  • 本 + ダウンロードカード(PDF、ePub、MOBI): 1000円 × 100部(Knative) + 1000円 * 50部 = 150,000円
  • ダウンロードカード: 1000円 × 16枚 = 16,000円
  • BOOTH販売(PDF、ePub。MOBIは希望者に送付、Knative本を公開した4/8〜この記事を書いている4/20まで): 1000円 × 40部(Knative) + 1000円 × 11部(Lambda本) = 51,000円

-> 217,000円

きっとBOOTHはまだまだ伸びる…!BOOTHでのそう販売数は累計113部(Knative: 40部、Lambda: 73部)です。

かんたん後払いは 81/166(100 + 50 + 16)でした。半分くらい!

41/124で3割くらいだったので普及が進んでますね。あれだけ混んでても2、3件ちょっとアプリUI更新遅れたくらいで不自由をほぼ感じず、管理する側も便利でした!

原価

紙本印刷費(日光企画さん): 23,600円(Knative) + 21,890円(Lambda) = 45,490円
ダウンロードカード印刷費(プリスタさん): 1,700円(Knative)
技術書典参加費: 7,000円

-> 54,190円

Lambda分は前回とQRコード変えてないので残り分をそのまま利用、小物も追加なしです。

執筆関連の人の稼働という観点では、技術書典なくても検証するしまとめもするので皆無です。

表紙やダウンロードカード、サークルカットのデザインは妻がやってくれましたが、仕事として他の方に依頼するとけっこうかかる気がします。

大丈夫そう!

被チェック数

雑に貼ります。前回は最高127だったので前回よりは手にとっていただけそうな雰囲気はあるものの、当日ブースまでたどり着いて見つけていただくまでには混み具合なども影響すると思います。

あと複数頒布するとどちらにどの程度興味をもっていただけてそうなのかがわかりません。

来場者数も増えて母数増えたのかなとも思ったのですが、入場者数自体は前回と大差なさそうでした。

前回参加者10340人、今回10260人、運営や出展者込み。

  • 20190319 2227 16
  • 20190320 2353 18
  • 20190322 1530 24
  • 20190323 1850 25
  • 20190324 1925 26
  • 20190325 1904 29
  • 20190326 2227 31
  • 20190327 2121 34
  • 20190328 1819 34
  • 20190329 1100 35
  • 20190330 0931 36
  • 20190331 1038 38
  • 20190401 1224 39
  • 20190402 2245 42
  • 20190403 0853 42
  • 20190404 1022 47
  • 20190405 2054 48
  • 20190406 2139 50
  • 20190407 2211 56
  • 20190408 1842 57
  • 20190409 0826 66
  • 20190410 2128 82
  • 20190411 2358 96
  • 20190412 1357 104
  • 20190413 1931 138
  • 20190414 0836 185
  • 20190414 1400 207

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

まとめ

技術書典好き!!!

4/14(土)開催の技術書典6で2冊出展します!

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

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

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

今回の新刊はKnativeについてです。KnativeはKubernetes上でサーバーレスなワークロードを実現するためのパーツ群です。

昨年9月に現職に転職してKubernetesを触り始めたことや、AWS LambdaをはじめとするFaaSやサーバーレスアーキテクチャに興味があり調べてみることにしました。

より詳細な動機はSeverless MeetupでKnativeの話をする機会をいただいた際にまとめています。

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

自分の大好きなLambdaを実装するための仕組みを学ぶのはとても面白く、今後も検証を続けていく予定です。増補・改定も伴うはず。

今回の本ではKnativeを構成するコンポーネントであるServing、Build、Eventingをサンプルを触りながら基本的な仕組みを理解できるように(自分が理解したい)という思いで書きました。

Knativeは鋭意開発中のため、入稿4日前にガラッと仕様が変わったのに気づいて慌てて一から勉強みたいなのも乗り越えてここまでやってきました。まさしく愛憎劇です。

Kubernetes上に成立つ仕組みなので、最低限Kubernetesの特徴として知っておきたいこともまとめています。

GKEを触りながらぜひKnativeの世界に入門してください!

本の名前はこんな気持ちでつけました。

ついでにこれは愛猫ふわふわくんの様子です。

目次です。

第1章 Knativeの概要
1.1 Knativeの構成要素
1.2 Serving
1.3 Build
1.4 Eventing

第2章 Kubernetes環境の準備

第3章 KubernetesとKnativeの関係
3.1 Kubernetesの基本的思想
3.2 Kubernetesのオートスケール
3.3 Kubernetesの拡張機能

第4章 Knative Serving
4.1 Knativeのインストール
4.1.1 Istioの設定
4.1.2 Knativeの設定
4.2 Configuration
4.3 Revison
4.4 Routes
4.5 Service
4.6 オートスケールの仕組み

第5章 Knative Build
5.1 Build
5.2 BuildTemplate
5.3 Servingと組み合わせる

第6章 Knative Eventing
6.1 Sources
6.2 BrokerとTrigger
6.3 ChannelとSubscription

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

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

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

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

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

『Goで学ぶAWS Lambda 第2版』

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

初版ではS3へのアップロードやログの確認でGUIに移動していましたが、諸々の準備によりコマンドで完結できるようになりましたw

更に、新刊に合わせて表紙も新しくなっています。嫁氏デザイン!

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

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

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

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

GoとSAMで学ぶAWS Lambda

技術書典5で『Goで学ぶAWS Lambda』を出展します #技術書典

お願い

技術書を書くのは技術を身につけるためです。もし『Knativeの歩き方 KubernetesからServerlessを訪ねて』か『Goで学ぶAWS Lambda 第2版』を読んでフィードバックをくださるか宣伝(TwitterでBOOTHのリンク流してくださる程度で大丈夫です)していただける方がいらっしゃれば差し上げます。

ぜひお声がけください。

2018年12月28日に『GoとSAMで学ぶAWS Lambda』が発売します!

内容としては技術書5で書いた『Goで学ぶAWS Lambda』に少し追記したり、いくつかいただいたフィードバックを元に改善したりしたものです。

フィードバックは僕が前々職で営業として働いているときにプログラミングを教えてくれた師匠である@ms2satoさん、前職の同僚である@Shuheiktgwさんにいただきました。

技術書典5の後にインプレスR&Dの山城さんにお声がけいただき、言葉遣い的なところを直していただき複数のプラットフォームでの出版にいたりました。

https://nextpublishing.jp/book/10326.html より

そして表紙を描いてくださったのはわかばちゃんと学ぶシリーズでおなじみの湊川あいさんです。

出版を目前にした今でもお話ししたことはないにもかかわらず、これほどまでに素晴らしいカエルに出会えると思っておらず感動しました。

技術書典5、BOOTHから読んでくださってるみなさん含めありがとうございました。

宣伝媒体

色々と出していただいてます。

同人版

技術書典5の後に出し始めたBOOTHでも先日とうとう50部を超えました。

技術書典5の『Goで学ぶAWS Lambda』の振り返りとフィードバックのお願い #技術書典でも書いているとおりアップデートがあるときは商業版とは別にアップデートは続けます。

句読点の使い方等僕の好きな表現の仕方もあるので、細々とやっていけたらと。

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

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

執筆のモチベーションについては宣伝記事に書いたので、今回はこれからに向けての話を中心に書こうと思います。

技術書典5で『Goで学ぶAWS Lambda』を出展します #技術書典

謝辞

今回は単著やで!と言いつつ、大いに助太刀してくれた2人にまずお礼を言いたいです。

まず前職の同僚@Shuheiktgwさんです。査読でわかりにくい部分を指摘してくれたことで特に2章は大きく構成を見直せました。更にGitHubのリポジトリにもPRをくれ、大きく貢献してくれました。

そして妻です。9月12日時点ではまだ原稿0のようなペースで原稿以外に時間が割けなかったので9/8に「原稿以外のすべてを頼む!!!」と一任(丸投げ)し、締切管理、表紙デザイン、ダウンロードカードデザイン、発注・入稿、当日のチェックリストに基付いたパシリまで何一つ文句も言わずにやってくれました。改めて文字にしてみるとひどい夫や。

それでも、発注してくれた本の開封の儀やイベント当日の売り子を通じて「つぎは書いてみようかな…!」なんて言ってくれるのは心の救いです。ディズニーで打ち上げしてきます。

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

フィードバックが欲しい

今回頒布した『AWS Lambda』は技術書典3の『Extensive Xamarin』で担当したXamarin.Macの章と比べ実装に基づく内容になっています。もっと言えばAWSのアカウントがありGitHubからソースコードを落としてくればそのままデプロイできるものです。

それは、書籍を執筆するとは言いつつも自分が実装する手触りが欲しかったのが1つあります。そして、自分が技術を学ぶときは最低限のルール説明を読んだら掲載したサンプル+αの粒度のコードが読みたいと思うからです。

説明しないと伝わらないソースコードなら書き方がよくないかもしれないし、どうしても必要ならコードコメントでよいのではないかと思います。

けどそれならGitHubにしっかりREADMEを書いて公開して終わりになるし、書籍にする意義が見出せません。結局、GitHubと技術書の間みたいな構成の本になりました。

幸い印刷していた分は売り切れ、ダウンロードカードも購入いただき、BOOTHで販売している分も着実に売上を伸ばしています。

つまり、売れ残った紙本に縛られず思い切って増補改訂ができ、ダウンロードカードのURLを通じて紙本を買ってくださった方にも更新情報をお伝えできる状況です。

そこで、フィードバックをくださる方にダウンロード版(PDF、ePub、MOBI)を差し上げたいと思っています。ぜひ@toshi0607までDMをください。もちろん購入いただく分は止めません。それはそれでとても嬉しいです。

  • 本としてこの形式がありと思うか?
  • ソースコードはわかりやすいか、どうすればわかりやすくなるか?
  • 構成として過不足はあるか?
  • ユースケースから自分でLambdaを利用したアーキテクチャを検討するイメージはわくか?
  • もしあまり触ったことがなければ触りたくなるか?何が辛そうか?

このあたりの感想がほしいです。

僕が欲しかったのは売上ではなく自分の技術力を高めるための言葉だったことに気がつきました。

お金は社が十分供給してくれます。

増補改訂

他の記事でちょっと書いたのですが、目次を考えている段階ではLambdaを活用する上で組み合わせそうな技術要素をもっと盛り込む予定でした。

  • 認証・認可(4章、CognitoとかAutn0とか使う) 
  • サーバーレスSPA(4章、Vue.js)
  • Lambda上でヘッドレスブラウザ使うユースケース(途中まで実装してた)
  • GitHubアサインのSlack通知
  • AWS Serverless Application Repository
  • Kinesisを使うユースケース
  • DLQの設定
  • Alexaスキル系
  • GraphQL(AppSync)
  • SQS(FIFOキュー)のユースケース
  • CQRS(とても実装したかった)

しかし、9月12日の午前段階で3目のユースケースの実装が一通り終わったような状況だったので見送りました。

4章関連とCQRSはやって章も足したい。自分が買ったPDFの技術書の章、気付いたら増えてるとテンション上がりませんか?上がらなくても大丈夫です。

ただ、仕事ではAWSに触れなくなったのでいい感じに共存したいなぁとは思っています。

AppSyncもFargateも触りたい気持ちはあります。

けど、Serverless Conf Tokyoで@marcy_teruiさんのセッションを聞いて、プロダクトそのもの以外の技術系アウトプットの理想形はこういうのだと感じました。

実運用に裏打ちされた教訓が他には無い独特かつ研ぎ澄まされた視点で語られる40分はただただ感動ものでした。

季節性のあるいい感じのアウトプットイベントに一生懸命向き合うこと自体はもちろん価値があるけれど、それが自分が向き合うべき課題の解決に関連するものであれば尚更素晴らしいということです。

逆に関連ない方がよい結果になるかもしれないけれど、やってみないことにはわからないやってみよう。

数字の整理

売上

  • 本 + ダウンロードカード(PDF、ePub、MOBI): 1000円 × 100部 = 100,000円(14時完売)
  • ダウンロードカード: 1000円 × 24枚 = 24,000円
  • BOOTH販売(PDF、ePub。MOBIは希望者に送付、技術書典終了日23時頃オープン): 1000円 × 22 = 22,000円

原価

  • 紙本印刷費(日光企画さん): 30760円
  • ダウンロードカード印刷費(プリスタさん): 940円
  • 技術書典参加費: 7,000円
  • ダイソーで小物(ホワイトボード、テーブルクロス、見本誌台など): 1,000円
  • 人の力

被チェック数

技術書典当日(10/8)最高で127、そこから減って最終的に123。

  • 10/1: 38
  • 10/3: 51
  • 10/4: 57
  • 10/6: 73
  • 10/7: 98
  • 10/8 8:00: 116

何が原因で売れる・売れないが決まるかよくわかりません。

僕は10/1の夜入稿したので、結果的に完売は嬉しかったものの100部刷るのすらだいぶこわかったです。

そのためBOOTH販売に本来紙で買ってくださる方が流れて欲しくなかったので技術書典終了後に開始しました。

ただ言えるのは技術書典で自分のブースに来てくださったお客さんを見ているとやっぱり紙の本が欲しそう。

そしてBOOTHで買ってくださる層(住んでる地域とか紙・電子書籍のスタンスとか)と違ってそう。

まとめるとやっぱりよくわかりません。テーマやサークルの配置によっても変わりそう。

いろいろと考え方はあると思いますが、僕は紙本を余裕をもって売り切ってスッキリした気持ちでつぎの技術書典を目指したいです。執筆やその根底にある技術力向上にフォーカスしたいなぁと思いました。かと言って当日のダウンロードカード販売とBOOTH販売だけ行って紙本をもっていかないのも嫌です。

技術書典は楽しくてしょうがないけれど、技術書典でアウトプットすること自体は自分にとっての目的ではありません。

これからも自分なりのスタンスで向き合っていきたいなぁと思いました。

10/8(月/祝日)開催の技術書典5で『Goで学ぶAWS Lambda』という本を出展します。76ページです。

カエルと空というサークル名で場所は「か76」です。

ぜひ遊びに来てください!!

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

本の紹介

Goで実装したAWS Lambdaのユースケースを見ながら開発方法を学んでいく構成になっています。

目次はこんな感じです。

  • 第1章 環境構築
    • anyenv
    • anyenvupdate
    • goenvとGo
    • pyenvとPython
    • aws-cli
    • aws-sam-cli
    • インストールトラブルシューティング
    • direnv
    • dep
    • gig
  • 第2章 S3イベントの活用
    • 概要
    • S3
    • シーケンス
    • フォルダ構成
    • ソースコード
    • テスト
    • デプロイ
    • 削除
  • 第3章 SNSとSQSによるファンアウト
    • 概要
    • SQS
    • SNS
    • シーケンス
    • フォルダ構成
    • ソースコード
    • テスト
    • デプロイ
    • CloudFormationトラブルシューティング
    • 削除
  • 第4章 API GatewayとDynamoDBを使ったURL短縮サービス
    • 概要
    • API Gateway
    • DynamoDB
    • シーケンス
    • フォルダ構成
    • ソースコード
    • テスト
    • LambdaとAPI Gatewayのローカル実行
    • デプロイ
    • DynamoDBのテーブル定義変更
    • 削除

ユースケースは3つです。

3つともSAM(AWS Serverless Application Model)で定義を書いていて、Lambdaはもちろん、関連するAWSのサービスのデプロイはすべてコマンドで完結します。

勢いでシーケンス図も載せてみます。

  • 2章

  • 3章

  • 4章

執筆のモチベーション

Lambda好きや!!!

なんというか、AWS Lambdaがかわいくてしかたがないです。

趣味で触り始め、前職ではC#で書いて本番運用してました。

Rubyがマジョリティな会社でC#を使ってAWS Lambdaの本番運用を開始した話

今のお仕事ではAWSは触らなくなったものの今年に入ってからGoに出会い、Goを書いたら書いたで幸せな気持ちになることができました。

つまり、GoでLambdaを書けばよいのでは?ということで、他の言語に比べたらGoのサンプルも少ないし布教したい!という ~~名目~~ 一心で書いてみることにしました。

ただ、Lambdaの制限はーとか、実行方法はーとか、AWS公式チュートリアルを見ればおしまいなことだけを書いても悲しいのでとにかく実装に寄せることにしました。

よく見るアイコンが並べられたアーキテクチャ の図を眺めてふんふん言ってるのではなくて実装するのです。自分で手を動かすのです。

SAMなりCloudFormationなりも各リソースのプロパティをYAML・JSONで定義すれば終わりでしょうとは言わず、エラーにハマりまくってInfrastructure as codeを体得するのです。

そんな気持ちで書きました。

勉強になるかは知りません。ちょっとでもこのLambda(とGo)への愛情が伝わり、興味を持ち、触るきっかけを掴む方が増えたら嬉しいです。

「技術」書、単著

技術書3の頃にちょうど前職でXamarinでMacアプリを開発していたこともあり、Xamaritansというサークルの『Extensive Xamarin』の出典・販売に携わりました。そして技術書典4では同サークルの本のレビューにちょこっと携わり、当日売り子をさせてもらいました。

技術書典3で『Extensive Xamarin』という同人誌の出展・販売に携わりました

技術書典3で携わった『Extensive Xamarin』が3月に商業出版されました。そして間近な技術書典4

やっぱ技術書典は!書かないと!!寂しいの!!!

というわけで技術書典5の申し込みが開始されてから秒で申し込みました。

ここ半年の社会生活に鑑み単著で、『Extensive Xamarin』では全然技術書っぽい章にできなくて(他の著者はちゃんとした内容でしたよ)不甲斐なかったので思いっっっ切り実装してから書く前提で。

ルールを調べてまとめただけの記事をもう書いてはいけないの!!!

つまりモチベーションはエンジニアとしての愛と憎しみです。

あと年初目標的には年間執筆数があります。

カエルと空

前々職のCMで一時期カエルを使っていたことから今も惰性でカエルグッズを集めています。

机はカエルでいっぱいです。

蛙(かわず)から連想するものの1つに、「井の中の蛙大海を知らず」という諺があるじゃないですか?

一方で、日本の後付けで「井の中の蛙大海を知らず、されど空の深さ(青さ)を知る」というのもあります。

由来の真偽はどうでもいいです。

自分にカエル属性があるかどうでもいいです。

ただ、思い上がるのも卑下するのも時間の無駄で、自分が見識を深めるべきもの、解決すべきものにひたすら向き合うのだという思いがあります。

その象徴としてカエルと空というサークル名にしました。

今向き合うべきはLambdaではない可能性があります。

現在はBOOTHでも頒布中です。

ちょっと前の話になりますが、4月〜5月にかけてメルペイさん主催のGopher道場#1に参加し、2回LTしました。

業務で1〜2週間Go言語を触ったときのなんとも言えない幸福な日々がきっかけでGoもっと書きたい学びたいと思い参加することにしました。

※Go触ってない他の日々が幸福でないとは言ってない

講義を聴き、次の講義が期限(?)の宿題を解きながら、うんうん完全に理解したと思っていたことがいざ手を動かしてみると理解できてないことを実感する、というのを繰り返しました。

Goで作り直すgitignore生成コマンド

宿題は指定仕様のCLIやサーバーを書くものもあれば、hogehoge interfaceの意義など説明する系のものもありました。

その中でio.Writerを調べていると、自分もそれ使って書きたいという気持ちが高まり書いたのがこちらです。

toshi0607/gig

generate (or output) .gitignore using github/gitignore

.gitignoreを生成するためのコマンドです。

Usage:
  gig [OPTIONS] [Language]

Application Options:
  -l, --list      Show list of available language
  -f, --File      Output .gitignore file
  -q, --quiet     Hide stdout
  -v, --version   Show version

Help Options:
  -h, --help      Show this help message

もともとgiboというシェルスクリプトベースのコマンドがあったのですが、

  • git cloneベースでなくて、毎回最新のファイルをgithub/gitignoreから取得したい
  • コマンド書いたことない(Gopher道場の選考課題で初めて書いた)のでGoで一から書いて配布するところまでやってみたい
  • io.Writer interfaceを活用した柔軟な出力差し替えを体験したい

という動機のもとで書きました。

まだ機能比較でもgiboに追いついてないのはありますが、どちらかというとシュッとリリースするためのスクリプトを準備する方が時間がかかった気がします。

https://github.com/toshi0607/gig/tree/master/scripts

このあたりの組み合わせです。

Gopher道場の最終回でLTする時間をいただけたのでお話してきました。

Goのinterfaceを使って外部サービスに依存しないテストを書く

AWS Lambdaが好きなので、今度は何かAPI書いてみようということで書きました。

toshi0607/release-tweeter

API to tweet the latest release tag version using AWS Lambda(Golang) & API Gateway

コマンドをアップデートするときに、そのコマンドのGitHubリポジトリの最新タグを拾ってきてtwitterに投稿してくれると楽だなぁと。

いかにも既存の何かしらだったり、連携機能やサービスで実現されてそうですがその辺は気にせず…

テーマはAWS Lambda使うという大前提がありつつも、

  • API GatewayとAWS Lambdaをローカル実行する
  • SAMのCLI使ってデプロイしてみる
  • direnv使ってみる
  • 外部サービスに依存する部分はモックしてテスト書く

というのを試してみたかったのでそうしました。

その最後の1つについてGopher道場#1 LT大会でお話してきました。

このLTについてはつぎのようなツッコミをいただいてます。

  • 「差し替えたい対象が複数になったら困る」が正しいのであれば、関数使うのがアンチパターンになってしまい、全部interfaceにすればいいよね?ってなる
  • 処理の差し替えであれば関数でいいし、抽象として扱いたいのであればinterfaceにすればいい

処理の差し替えであれば関数でいいし、抽象として扱いたいのであればinterfaceにすればいい、大賛成です。

差し替え対象が複数になっても困りはしないと思いますが、もし差し替えたい処理が増えてバラバラ1つずつ入れ替えないといけない状況になったら依存するサービスごとinterfaceで抽象化してしまった方が見通しいいかもくらいのテンションで当日はお話していました。

ただ、タイトルを「結論」としてinterface使わない方法はよくないみたいな資料の流れになっているのは間違いないので、資料単体で見返したときにも誤解を生まないかという観点でも見直すなり、資料に表現しきれない部分も記事にするなり改善方法はあるなぁと反省しています。

コメントいただけるのはとても嬉しいです。

振り返り

コードを書く

Gopher道場の影響を大きく受け、これも作りたいあれも作りたいみたいな思いが沸くことが増え(?)GitHubの緑化が進みました。

READMEしか直してないみたいな日もありますが、「作りたい!」ありきでその中で試したいこと、テーマがあるくらいのテンションだと愛着も増すし、手も動くのでいい感じです。

コードを読む

(すでにあるかどうかを度外視して)そのとき作りたいものを作ると大体選考実装や要素技術の実装例はGitHubに転がっているので、個人開発の文脈で人のコードを意識的に読む時間が増えた気がします。

これまではtwitterなどで流れてきた人気リポジトリをなんとなくたどることが多かったですが、自分が知りたいことを探しながら追うと吸収度や感情の振れ幅が変わりました。

発信する

これまでMicrosoft系のコミュニティでしか話したことがなかったので、今年はその外で話すというのが隠れ目標でした。
https://speakerdeck.com/toshi0607

発信する内容としては自分が初めて対外LTしたときみたいに特定技術(サービス)の使い方をなぞる系はやりたくないと思っています。

やるメリットももちろんあると思いますが、技術力をつけるという観点では

  • 何かしらの課題を解決すること
  • 何かをテーマに作りきること

を最重視すべきと思っていて、その過程自体や困ったこと、うまくいったことの言語化・発表を通じより前進できると考えます。

5月に行った2つのLTはたとえ入門レベルの内容であったとしても、信念は貫いたのでよい経験をさせていただいたなぁと思っています。

次はgolang.tokyoで発表できるか?と言われたらとてもハードルを感じているのが正直なところなので作りたいもの作るなり、解決したい課題を解決するなり積み重ねていこうと思います。

「こんなことやりたいと思っている」を書くと、書いたことで満足してしまう節がなくはないですが追い込めもするので書いてみようと思います。

Serverlessconf Tokyo 2018

去年参加してとても楽しかったので今年も参加しようと思っています。

ただ、今年はLTしたいなぁと。

CFP受付中ですが、それは尻込みしています…

サーバーレスなアーキテクチャの認証・認可どうやればええねんって思っていて、追っかけてると楽しくなってきたのでその辺の話をする予定です。

もちろんサンプルコードはGoで!

技術書典

前回はレビューと当日の売り子だけ参加で多少寂しかったので、今度はしっかり書きたいなぁと思っています。

技術書典3の『Extensive Xamarin』は強い方々におんぶに抱っこ感がすごかったので、今度はサーバーレスシングルページアプリケーションチュートリアル的な感じで丸っと自分の力で書いてみたい!

rejectされてもnoteで販売するぞ!