Shares転職して1年が経ちました。Shares転職して3年が経ちました。Lambdaの開発フローの違い」を話してきました。toshi0607·0件のコメント2019年9月22日(日)開催の技術書典7で3冊出展します!カエルと空というサークル名で場所は「お12C」です。遊びに来てください!興味を持っていただけた方はサークルのチェックリストに登録しておいていただけると助かります。今後の印刷数の参考にします。今回の新刊はKnativeの実装についてです。Knativeの仕組みをより深く追おうとすると必ずKubernetesのカスタムリソースやカスタムコントローラーの話が出てきます。以前mercari.goで発表した内容をより詳細にコード参照しながら解説します!目次です。additionalPrinterColumnsお値段は前回に引き続きこんな感じです。実はすでにBOOTHで購入できる状態になっています。https://toshi0607.booth.pm/items/1568456当日会場に来れない方や今すぐに読みたい方、お待ちしてます!正誤表や増補改訂情報ページはこちらです。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からダウンロードできるできるようになっています。ボリュームも増えているので、ぜひお読みになってください。正誤表や増補改訂情報ページはこちらです。技術書典5で出展した既刊の第2版も50部持っていきます。1000円お陰様で商業版を出版したり、こちらもすでに第2版がBOOTHで購入できる状態になっています。2019では僕が講師を務めるKnativeハンズオンを実施予定です。〜Knativeで学ぶKubernetesのカスタムリソースとカスタムコントローラー〜』の正誤表と増補・改訂をお知らせします。この本を手にとってくださった方がちょっとでも選んでよかったと思う本に育てていきたいので、章の追加なども楽しみにしていてください。引き続きフィードバックお待ちしてます!@toshi0607更新情報や新刊情報もこのアカウントでつぶやきます。全体の感想ある程度自分でCLIやアプリケーション開発をした上で読むと、「あれってどうやると良いんだろう?ベストプラクティス的なのって何だろう?」という疑問が解決できそうな本でした。Goを一通りやり終えた後にすすめられて読んだのですが、あまりピンときませんでした。プログラミング言語Goを読んで文法を理解した後に自分でCLIをいくつか書いてみたり、業務でGoのマイクロサービスをいくつか開発した今読むと実感できることが増え、改めて手を動かして確認したり、実践でも活用してみたいことが多いなぁと感じました。全体的に各テーマ類似するパッケージの特徴や使い方やベンチマークを比較しながら評価・解説されていることが多く、自分で技術選定する際の参考にもなります。Goを活用した開発を実践する上での課題を解決する手がかりが多く見つかるよい本でした。自分の開発環境を改めて見直すきっかけになってよかったです。パッケージ分割の基準や大きいstruct作るべきではないのはなぜかなども言語化されていてなるほどなぁと思いました。一度でもCLIツールやアプリをクロスコンパイルして配布しようと思ったことがあるとありがたみが増す章でした。バージョンアップデートを追うポイントについても学びがあり活かせそうです。マルチプラットフォームに対応したツールを作るときは特にWindows周りでパス、文字列、ファイル操作、ホームディレクトリあたりを気をつけようと思いました。自分でCLIツール作るときはとりあえずmacOSで使えるものを作った後にクロスコンパイルしてWindowsとかでも使えるようにするぞ!みたいな流れだったので、最初から気をつけるべきポイントがわかっているといざ配布するときに体験を損なわずに済みます。バイナリにリソースを埋め込むにあたり、jteeuwen/go-bindataやjessevdk/go-assetsはもうメンテされないので、rakyll/statikやgobuffalo/packrを勧めていた話の流れがよかったです。リソース埋め込みでまず思い浮かぶのがgo-bindataとgo-assetsだったので認識を改めることができました。awesome-goにGUIセクションがあることやGUI用のライブラリがたくさんあるのを知りませんでした。CLIツールを作るものという固定観念を打破してくれました。自分で積極的に作るモチベーションはないけれどそういう章があったら楽しめそうです。設定ファイルのフォーマットと場所をどうするかについて各フォーマット向けライブラリの成熟度などを比較した上で筆者の見解が述べられていたり、実装の注意点が整理されていたのがとてもよかったです。cgoを使っているかどうかによるクロスコンパイルの挙動差異や、ホームディレクトリ関連でcgoに依存しないAPIが特定Goバージョンから利用できるようになったことは自分がこれまで意識できていなかった観点で、バージョンアップを追うモチベーションやポイントの1つになりました。実用的なアプリケーションを作るためにタイムアウトやシグナルハンドリングなど、実践でよく使うが理解不十分だった部分の理解が深まった章でした。標準出力のバッファリングをあるLL言語と比較しつつ、bufioパッケージを利用した実装と利用していない実装を使ってシステムコール回数をstraceで観察していたのがよかったです。システムコール自体の重みがよくわかってないのでベンチとろうと思いました。dustin/go-humanize便利そう。わかりやすく表示できるのも、わかりやすい形式で引数などに指定できるのもいいですね。乱数系のパッケージはおそるおそる使っている感があるのでmath/randとcrypto/randの性質の違いがまとまっているのはとてもありがたかったです。contextパッケージはタイムアウトやgoroutineを扱う上で必ず通るのでありがたかったです。シグナルハンドリングと合わせて載っていてありがたみが増しました。シグナルハンドリング実装はよく目にしますが、シグナルを受けたときのデフォルトの挙動がドキュメント化されているのは知らず、とても良い知見でした。コマンドラインツールを作るCLIを書くときに実践すべきことが詰まっている章でした。CLIを開発し、テストの仕方を調べるときも筆者のブログを読ませていただいた記憶があります。flagパッケージへの気持ちも感じることができました。ライブラリを提供するのか、ライブラリを提供するのかで変えるのは面白いなぁと思いました。バイナリメインでもコマンドはcmdの下において外部提供する意図の無いパッケージをinternal下に置くのもありなのかなぁとも思いました。何れにしても意図をパッケージ構成で伝えるというのは取り入れたいです。flagパッケージの使いこなしを実装を追いながら学べ、その他サードパーティの利用方法や特徴と比較していた点がとてもよかったです。章全体でなぜ?が重視されていて学びが深まったので、筆者が標準のflagパッケージしか使わなくなった点も一層気になりました。「os.Exitはdefer文で呼び出した関数を実行せずに処理を終了する」あまり意識してなかった気がするので気をつけてみます。本章にも書いてあるとおりos.Exitは無闇に呼ぶべきではないと思っているので、仮に出会った時に見落としそう。簡単に素早く」そうだなぁと思いました。今度サブコマンドを扱うCLIを書くときはmitchellh/cliを使ってみようと思いましたがメンテされてない...?サブコマンドをインターフェースとして定義するの好きです。Reflectionベンチをとった解説がわかりやすく、reflectionのメリット・デメリットがよく伝わる章でした。他の章でもベンチをとって比較するのは登場していたのですが、特に効果的に感じました。型アサーションとソートについてreflectパッケージを使う場合とそうでない場合のベンチを比較していて、利用場面を選んで使うべきという主張の説得力が増していてよかったです。動的にselect文を構築する部分は難しくてよくわかりませんでした。Goのテストに関するツールセットアプリケーション開発で常に実践せざるを得ない感がもっとも強い章でした。ベンチマークを普段ほとんどとってないので、実装方法で迷ったり、チューニングする上ではやらねばと思いました。僕はモックはgolang/mockが好きで、比較はgoogle/go-cmpが気になるものの試せていません。Exampleテストのfunction名でgodocのどこに載るかが変わるのを知りませんでした。reflect.DeepEqualの挙動がtypeごとに説明されていてよかったです。ドキュメントにけっこう書いてあるんですね...!意外とオジェクトを比較するテストに出会っていません。Detectorの出自を知らなかったので勉強になりました。使用時にメモリ使用量5〜10倍、実行時間2〜20倍になることや、静的解析ツール出ないことも書いてあってよかったです。Constraintsで分ける話がよかったです。Constraintsを使うと明示的になりそうです。toolの中身を知れてよかったです。データベースの扱い方DBやそれを扱うためのORMの章ではありますが、ライブラリ選定をちゃんとやろうという気持ちになれる章でした。普段GoのAPIを書くことが多く、フロントも込みで開発することがないので画面込みで開発する部分は別章が丸々設けられていても楽しそうでした。goという概念を覚えました。mattn/go-nulltypeの紹介が、DB文脈でnullableを扱う上での課題を十分に説明した上で出てきて良い流れだなぁと思いました。ライブラリの選定プロセスを垣間見ることができる構成でとてもよかったです。「本書が古くなりこれらのライブラリが古くなってしまったとしても、プログラマのみなさんがやるべきことは変わりません。新しい技術要素を調査し、あらゆる候補を比較するためにベンチマークをとることです」は最高のしめでした。Lambda』に少し追記したり、いくつかいただいたフィードバックを元に改善したりしたものです。#技術書典フィードバックは僕が前々職で営業として働いているときにプログラミングを教えてくれた師匠である@ms2satoさん、前職の同僚である@Shuheiktgwさんにいただきました。技術書典5の後にインプレスR&Dの山城さんにお声がけいただき、言葉遣い的なところを直していただき複数のプラットフォームでの出版にいたりました。表紙を描いてくださったのはわかばちゃんと学ぶシリーズでおなじみの湊川あいさんです。出版を目前にした今でもお話ししたことはないにもかかわらず、これほどまでに素晴らしいカエルに出会えると思っておらず感動しました。技術書典5、BOOTHから読んでくださってるみなさん含めありがとうございました。出していただいてます。5の後に出し始めたBOOTHでも先日とうとう50部を超えました。#技術書典でも書いているとおりアップデートがあるときは商業版とは別にアップデートは続けます。句読点の使い方等僕の好きな表現の仕方もあるので、細々とやっていけたらと。miniOrange。