技術書典6で「INSIDE MERY」と「スターティングgRPC」を頒布します!
4/14(日)に池袋サンシャインシティで開催される技術書典6にて「INSIDE MERY」と「スターティングgRPC」を頒布します。サークルは「MERY Engineer Team」です。この記事は、MERYサーバサイドエンジニアのgamiが書いています。以降簡単に本の内容を紹介したいと思います。
INSIDE MERY
「INSIDE MERY」は株式会社MERYのエンジニア6名で執筆しました。MERYは従来のメディアやキュレーションサイトの枠組みを超えた、かわいくなりたい女の子のためのインターネットサービスですが、裏側には記事配信を支えるかなり複雑な管理システムが存在しています。今回は主にバックエンドのシステムを中心に、設計から障害対応まで業務中に得た知見やシステムの裏側の部分などをまとめた1冊になっています。
INSIDE MERYのなかみ
第1章 MERYのシステム概要 MERYで実際に記事が届くまでの流れや具体的にどのようなシステム構成になっているか全部書いてます。INSIDE感満載です!
第2章 MERYにおけるマイクロサービスとGo言語で作るクリーンアーキテクチャ構成 僕が書きました。簡単にMERYのシステムの課題を解説した後、現在開発中であるGo製の内部APIのアーキテクチャについてまとめています。キーワードでまとめると、マイクロサービス における共通DBのつらみ・クリーンアーキテクチャ・開発中のシステムのパッケージ構成・選定したライブラリとその理由といった感じです。半年前の自分に送りたい一章です。
第3章 MERY許諾管理システムのドメイン駆動設計によるリファクタリング計画 MERYでは1日約80記事が配信されており、そこで使用されている画像は全て権利者の許諾を得て配信しています。複雑なビジネスロジックが要求されるので、システム自体も複雑なものになっています。現在ドメイン駆動設計(DDD)で保守運用しながら、少しずつ改修していこうというアプローチで進めており(ちなみにRailsです)、そのあたりの話がまとめられています。単一責任原則を犬と猫のクラスで例えていますが、今更ながら羊とヤギがいいなーって思いました。
第4章 記事作成ツールのフロントエンド開発(Nuxt.js × Atomic Design)1日約80記事配信を支えるCMSツールをスクラッチで作り直している話です。jQueryからNuxt.js(TypeScript)+ Atomic Designなシステムに作り直しています。Atomic Designでコンポーネントを分けていく中で、Atom / Molecule / Organismをどういった考えで分けていくのかということについて具体的に書いています。実際のソースも例示されているので、Atomic Designでのコンポーネント粒度や分け方に悩みどころがある方にぜひ読んでいただきたいと思います!
第5章 コレクションにおけるフラグメントキャッシュの粒度とパフォーマンスのはなし(Jbuilder編)記事にABテストを導入した際に、既存のキャッシュが使えないじゃん!どうする?という流れから問題を解決していくお話です。MERYではアプリ用のREST APIにJbuilderを使っていますが、Jsonのビルドにそこそこ時間がかかるので、viewのキャッシュを行なっています。ABテストでユーザーごとに記事を出し分ける必要があり、リストまとめてキャッシュすることが出来なくなったので、1記事ごとにキャッシュしたら、キャッシュストアとの通信回数が増えちゃうから、1回でできるようにして・・・みたいなABテストを入れても従来のパフォーマンスを維持できたよ!という話がきちんとした文体で記述されています。
第6章 障害対応などを通して得た知見 既存システムを保守運用をしていく中で直面した障害対応や不具合対応の話が具体的に書かれています。大ボリューム26ページです。最初は50ページくらいになりそう・・・という話で、僕はコストとかスケジュールとか考えてちょっとドキドキしたけど、自由にいい記事を書いて欲しいので黙ってました。内容は以下です。
1. ImageMagickでqualityを指定しないと画質が安定しなくなる問題
2. 画像のカラースペースがCMYKである時に起こった問題
3. 動画をリサイズしたサイズが奇数になってしまったときの問題
4. 記事内に制御文字が入っていた時の問題
5. 記事内のUnicodeの結合文字が含まれていた時に表示が崩れる問題
すごく詳しく解説されているので、Unicodeの部分とかレビューしてて、本当に勉強になりました・・・。正直なんとなくしか理解してなかった・・・現象、詳細な原因から解決策まで細かく解説されており、同じ現象で困っている方がいたら参考になるかと思います。次回はもっとたくさん書きたいそうです。
ぬりえ 巻末にぬりえコーナーがあります。ぬってください!ぬりえはブース内でも配布予定です。人混みが落ち着いたらぬりえコーナーも作ろうと思っているので、お子様連れの方はぜひお立ち寄りいただきたいです。ぬりえを書いてTwitterにアップしていただくと、抽選で1名様に素敵なプレゼントがあります。
INSIDE MERYのおまけ
お買い上げいただいた方にはステッカーを2枚お渡しします。右はMERYの公式ロゴ(ひつじ)、左は今回MERYのデザイナが書いてくれた「
INSIDE MERY」オリジナルロゴ(やぎ)です。こんなにかわいいのに、ここでしか手に入らない貴重なステッカーとなっております。
スターティングgRPC
初めての出展ですが、個人でもう一冊書きましたので、こちらも頒布させていただきます。こちらは執筆で精一杯だったので、ステッカーはついていませんが、ダウンロードカードをおつけします(逆にINSIDE MERYは製本版のみとなっております)。gRPCをはじめていく中で、公式ドキュメントを当然参考にされると思いますが、あいさつをするチュートリアルではイメージしづらい部分も多く、実際のアプリケーションを書くまでのステップが不足している面は否めません。本書は「パンケーキを焼いて、焼いた数を数える」APIの実装を通じて、そのステップとなることを目指して執筆しました。最初に社内で「パンケーキのAPIがあって・・・」という話をしたら1分ぐらい絶句した後に「・・・MERYらしいですね・・・」といわれました。永遠に続くかのような沈黙であった。でもMERYらしいのかもしれない。
スターティングgRPCのなかみ
第1章 gRPCとRESTの違い gRPCとは何?というところから、gRPCの長所と短所をREST APIと比較する形で解説していきます。実際に技術選定でgRPCを使うかRESTでいくか迷っている方に参考になるかと思います。
コラム gRPCは何の略? gRPCのgの意味はリリースバージョンによって違いますが、その意味を1.0から1.20まで全て紹介しています。飲み会のネタに使えるかもしれません。
第2章 protoファイルを書いてみよう gRPCのAPIを定義するためのIDLとなるprotoファイルの文法を解説します。サンプルも書いてあるので、リファレンス的に使っていただければと思います。Protocol Buffersの公式リファレンスでもいいけど。
コラム gRPCのゆるキャラパンケーキくん gRPCの公式キャラクターパンケーキくんの紹介です。一番最初に執筆しました。このコラムだけでもいいので立ち読みしてください。
第3章 Go言語でつくるgRPCサーバー gRPC APIのサーバー側はGoで実装しました。パンケーキAPIのprotoファイルを書いて、Goのコードを生成して、サーバーを書いて、ハンドラを書いて、grpc_cliで動作確認するという流れです。サンプルコードにコメントを入れているので、Goがはじめての人でもなんとなくわかるんじゃないかとは思いますが、勝手な期待かもしれない。
コラム protoファイルをどう管理するか、あるいはどう配布するか protoファイルの管理方法について他社の事例を中心に紹介しています。この部分自社の事例はまだないです。
第4章 RailsアプリケーションからgRPCサーバーにアクセスする gRPC APIのクライアント側のとなるサービスをRuby on Railsで実装します。第3章で書いたprotoファイルからRuby用のコードを生成して、クライアントの実装を追加し、Railsコンソールから確認します。ついでにクライアント側にgRPCのdebugログを追加したり、タイムアウトの設定を入れたりもしています。
コラム grpc gemのAlpine Linuxでのビルド設定 Ruby用のgrpc gemのネイティブエクステンションをAlpine Linuxでビルドする際に発生したトラブルと回避法を書きました。
第5章 インターセプタでログや認証を追加してみよう インターセプタを使ってサーバー側に認証とログを追加し、Rails側から再度アクセスして確認します。go-grpc-middlewareを使っています。
コラム protocでプラグインを使ってみる go-validatorとgrpc-gatewayを中心にprotocのプラグインについて解説しています。
付録 Google APIのprotoスタイルガイド protoファイルを書く上で参考になるGoogle Cloud APIのスタイルガイドの内容を紹介しています。
それぞれの技術書典6での販売情報
どちらも頒布価格1000円で、現金/かんたん後払いに対応しています。
「INSIDE MERY」は300部、「スターティングgRPC」は150部用意しております。「スターティングgRPC」は完売した場合は電子版のみの頒布に切り替える予定です(値段変わらず)。どちらも余裕を持った部数を用意したつもりではいますが、万が一完売した場合は申し訳ありません。
スターティングgRPCのBooth販売
電子版については技術書典6開催と合わせてBOOTHでも開始する予定です。スターティッドgRPC Tシャツを作るかもしれないので、その時はBOOTHで売るかもしれません。
サークルページ
ぜひサークルチェックをお勧めします。
https://techbookfest.org/event/tbf06/circle/46210003
イベント情報
日時:2019/04/14 (日) 11:00〜17:00(11:00-13:00は入場料1000円が必要です)
場所:池袋サンシャインシティ2F 展示ホールD(文化会館ビル2F)
ブース:け30(出口の近くです)
ご来場お待ちしております!
この記事が気に入ったらサポートをしてみませんか?