Paper2 Blog

ともに、かける

失敗から学ぶRDBの正しい歩き方 Software Design plus

筆者がWeb系のシステム開発を通じて見てきたRDBアンチパターンについて記載されています。 Software Design の連載を本にまとめたもので、全20章に渡りRDBアンチパターンを紹介しています。当書籍はDBの設計に自信がない、アンチパターンを知らないといったような初学者におすすめの書籍です。

私はDBの設計・構築経験が少ないため初学者に近い立場でした。時折性能問題が発生した際に見事に解決していく同僚に憧れてこの書籍を読みましたが、良い意味で当書籍は期待外れでした。この書籍には同僚が解決していたようなレベルの話は出ておらず、もっと初歩的なお話が書かれていたようです。そして私はそれすら知らないことが多かったです。知れば知るほど自身が無知であることに気づきます。この書籍はDBに詳しい同僚を巻き込んで一緒に勉強会として読みましたが、同僚からすると基礎的な内容が多く、特に学びがなかったようです。少なくとも私にとっては様々な学びがあり、同僚も基礎として認知していたことからもコアなアンチパターンが詰まっている素晴らしい本であることは間違い無いでしょう。

例えばJSONを安易に使わない方が良いという話もとても勉強になりました。機能としてあるし、スキーマレスで使いやすさがあるので何も知らないと使い始めてしまいそうに思います。筆者なりの使っても良いパターンの考察など含め大変勉強になりました。また、キャッシュの考え方は一般的なものでもあるので私はとても良い整理になりました。

コラム記事だったのか1章がとても軽く、ささっと読めます。少し凝ったタイトルもありますが、タイトルを読んで内容を推測できなければ読んでみる価値はあるかも知れません。

(参考)書籍の目次

  • 第1章 データベースの迷宮
  • 第2章 失われた事実
  • 第3章 やり過ぎたJOIN
  • 第4章 効かないINDEX
  • 第5章 フラグの闇
  • 第6章 ソートの依存
  • 第7章 隠された状態
  • 第8章 JSONの甘い罠
  • 第9章 強過ぎる制約
  • 第10章 転んだ後のバックアップ
  • 第11章 見られないエラーログ
  • 第12章 監視されないデータベース
  • 第13章 知らないロック
  • 第14章 ロックの功罪
  • 第15章 簡単過ぎる不整合
  • 第16章 キャッシュ中毒
  • 第17章 複雑なクエリ
  • 第18章 ノーチェンジ・コンフィグ
  • 第19章 塩漬けのバージョン
  • 第20章 フレームワーク依存症

Platform EngineeringはSREを変えるのか

先日行われた「Platform Engineeringへの招待」という発表がとても話題になりました。この発表を見て以下2点について考えてみました。

  • Platform EngineeringはSREを変えるのか
  • Platform Engineeringは自組織のSREを変えるのか

Platform EngineeringはSREを変えるのか

Platform Engineeringの考えが(特に国内の)SREを変えるのでしょうか。結論としては変えないと思っています。その理由について記載していきます。

まずPlatform Engineeringの定義を発表スライドを引用させていただきながら簡単にご紹介します。一般的な定義はなく発表者の一つの解釈となります。まずはDevOpsについての説明です。

しかし多くのツールの活用を前提とする昨今では真のDevOpsは多くの組織で現実的ではないと主張しています。

そこで開発者の認知負荷を下げるためのプラットフォームが必要になります。そのプラットフォームはプロダクト開発のように開発者をユーザとして扱い、本当に必要で使われるものを作るべきだと主張しています。以下が当発表におけるPlatform Engineeringの定義です。

ではこのPlatform Engineeringの考えが国内のSREの考え方を変えるのでしょうか。私は変えないと思っています。なぜならSREは多様化しており、すでにPlatform Engineeringと似た考えを持つSREが存在するからです。

例えばマネーフォワードさんのPlatform SREfreeeさんのPlatform/Enabling SREです。 より一般化した形としては7種類のSRE実践パターン - 株式会社X-Tech5の「6.プロダクト・サービスを提供する」や「7.プラットフォームを提供する」あたりのパターンが近いと思います。このような理由から特に大きな変化は起きないというのが個人的な意見です。

Platform Engineeringは自組織のSREを変えるのか

一方で、自組織のSREについては変わるかもしれないと思っています。(個人の妄想でこの整理を元にメンバとディスカッションしてみるつもりです。)

自組織SREのビジョンは以下です。

目指すのは真のDevOpsです。発表の中では信頼性には焦点を当てていませんが、Devと信頼性向上を目指すSREの垣根をなくすという意味で本質は同じだと思います。

そのため開発者が全部を担う真のDevOpsが多くの組織では現実的ではないという考えは大切だと思っています。理想を描きつつも現実に即した施策を実施するためにも重要なポイントです。

今まで基本的には民主化を意識しており、SREだけが触れるものを作らないという思想を持っていました。ただ、現実的には信頼性をセルフサービスで向上するプラットフォームをデザインする選択肢も必要なのではないかと考え始めています。引き続きチームメンバや開発者と話しながらより良い姿を模索していきたいです。

(おまけ) 本当にPlatform Engineeringがないと真のDevOpsは現実的ではないのか

ポイントは開発者の認知負荷総量だと思います。Platform Engineeringでは認知負荷を下げるためにプラットフォームを作ることが前提にあります。抽象化した認知負荷量が多ければ、それらを実際に把握する専任のエンジニアも必要となるでしょう。

発表の中では認知負荷が高い一例としてKubernetesとDockerを挙げていました。一例ではありますがコンテナ開発のデファクトともいえるこれらプロダクトは大きな要因になっていると思います。これらを本当に素晴らしい抽象度で汎化したサービスがあります。はい、みんな大好きCloud Runです。

Kubernetesも好きな私の感覚で言うと要件さえ合えばかなりの認知負荷削減が実現できます。一応要件が合えばと書きましたが、個人的な意見を言うと本当に要件が合わないシステムは少ないのではないかと思ったりもします。Cloud Runを活用することで認知負荷観点では大きく削減できます。そこに専任エンジニアはいりません。Cloud Runは一例に過ぎませんがクラウドサービスにより今後も開発者の認知負荷を下げることでPlatform Engineeringが流行らない未来もあるのではないかと思ったりはします。

SRE サイトリライアビリティエンジニアリングが”ザックリ”「すっきり」分かる本: Googleが実践している新DevOps方法論

書評

SREを学ぶ最初の一歩には適した書籍だと思います。SREのコアとなる概念を綺麗にまとめて丁寧に説明しています。例えばSREとは何か、何故SREが必要なのかなどをDevOpsの考えや背景なども交えて説明しており初学者でも理解しやすい構成になっています。またSREプラクティスで登場する用語を"ザックリ"と理解できる良い抽象度で解説しておりとても良かったです。用語としては「可用性」「信頼性」「SLI/SLO/SLA」「CUJ」「パーセンタイル」「エラーバジェット」「ポストモーテム」「トイル」などが解説されています。すべてを理解していないのであれば是非読んでみてください。

もともとチームにSRE経験がない新しいメンバがやってくるのでオンボーディングの教材として使えないか確認するために読みました。期待通りの本だったので使ってみようと思っています。ちなみに誤字脱字が複数あったのでそこは少しだけ気になってしまいました。100%の信頼性を目指さないというエラーバジェットの考え方を同時に教えてくれる良い書籍でした笑

次にオススメするもの(おまけ)

経験則的にはSREの考え方を"ザックリ"理解した後に解像度を上げていくのが非常に難しいです。兎にも角にも実践してみるのが一番解像度を上げるために良いという当たり前のことを言います。

ただ、机上でもう少し解像度を上げるなら、、、でお勧めしたいのは株式会社スリーシェイクさんの「SREとはなにか」というブログです。このブログの良いな〜と思っているポイントは

  • 具体的な説明が多く、深い理解ができる。
  • 国内企業の事例紹介が豊富で、色々なSREの取り組みを理解できる

点です。こちらもオンボーディング教材としては活用させていただきたいと考えていたりします。

初登壇の感想

ということで、2023年2月24日に「【マネーフォワードSRE Meetup】SREをはじめるあなたへ」で初登壇をしてきました。発表資料は以下になります。

動画もYouTubeで公開されています。

挑戦するぞ!という意気込みでドキドキしながら申し込み、発表までやりきれたので自身的には「よくやったな!」という感想です。また、良いフィードバックもいただけてとても嬉しいです。司会者の人からも「わかりやすかった」と最高の褒め言葉をいただき、頑張ってよかったな〜と思いました。また、こんなツイートもいただけて本当に感謝です。

準備は正直大変でした。もしかするとLTはもっと時間をかけない人が多いのかもしれませんが、気合を入れて仕上げました。骨子から最後のスライドチェックまで先輩にお願いし、一緒に作り上げてきました。その結果が上記のフィードバックに繋がったと思っており、先輩には感謝しかありません。

やはりアウトプットは成長最強ツールであるようで、ストーリ構成、スライドの見せ方...etcと気付きに溢れる挑戦になりました。もともと前職から社内での発表はたまにやっていたのですが、まだまだ経験が足りず今回も色々な学びがありました。特に以下のような説明スライドの間をつなぐシンプルなスライドを挟む手法は初めて挑戦したのですが、スライドと発表がリンクしつつ、流れるような発表ができた気がしており個人的にはとてもよかったなと思っています。

準備は大変でしたがそれ以上に成長できていますし、実績としても残るので今後も積極的に挑戦できたらな〜と思いました。

(2023/03/11:追記)

自分の発表が人の役に立ったようです。これほど嬉しいことはありません。エンジニアの端くれとして、頑張ってきてよかったなと思いました。

「オブザーバビリティ・エンジニアリング」に感化され社内でオブザーバビリティ布教活動を行なった話 - Yappli Tech Blog

ヤプリのSREは「インフラエンジニア」や「何でも屋」というイメージが(主観的にですが)あります。実際やっていることもインフラエンジニア寄りのことが多く仕方のないことだと私自身も思っていたのですが、先日参加させていただいた「マネーフォワードSRE Meetup」イベントでSanSan株式会社のpaper2さんが「期待を合わせるためにもミッションを定義しましょう」とおっしゃっており、この言葉に感銘を受け弊社でもミッションの共有が必要であると思うようになりました。ヤプリのSREはフェーズ的にまだインフラエンジニア感はありますが、今後組織が拡大するにつれて期待の不一致が生じてくる可能性があり早段階からSREとは何なのか発信し続ける必要があると感じたためです。

そしてまさかのこんなお言葉もいただけました。。。ただ、ただ嬉しいです。。。これからも精進してまいります。

採用基準

概要

本書では筆者がマッキンゼーで10年以上採用マネージャとして働いた中で学んだことや得られた知見をもとに日本の若者にどのようなスキルを身につけるべきかを提示している。特にリーダーシップの重要性に関して、日本人が持つ勘違いを交えながら丁寧に解説をしている。リーダーシップはマネージャなどの役職は関係なくメンバ全員が持つべきスキルであると主張した上で、どのような振る舞いがリーダーシップなのか、リーダーはどうあるべきかなどについて説明する。

書評

リーダーシップについて丁寧に解説がされているため深く理解ができます。リーダーシップを持てている自信がない方にはとてもオススメです。読んでいて共感する部分が多く、自分自身は結構リーダーシップを発揮できていると認識できました。リーダーシップをスキルとして分解し、整理できたので強みとして今後うまく伸ばしていけそうな気がしています。それだけではなく各メンバがリーダーシップを持つことで組織の成果がより大きくなる可能性を理解できました。今後のチームビルディングにも大いに役立ちそうです。汎用的なスキルとして学ぶことが多いので本当にオススメです。一部内容を紹介します。

問題解決リーダーシップとは、解くべき課題(イシュー)の定義から、分析の設計、関連する組織や人とのコミュニケーションを含む一連の問題解決プロセスにおいて、リーダーシップを発揮することです。

地頭が良いだけではリーダーシップは発揮できません。基本的に仕事は組織で行うものであり、何かを成し遂げるにはコミュニケーションを含む問題解決が必要になります。問題解決のために人を巻き込み、目標達成のために皆で何かを成し遂げる力がリーダーシップに含まれます。

全員がリーダーシップを持つ組織は、一部の人だけがリーダーシップを持つ組織より、圧倒的に高い成果を出しやすいのです。

マッキンゼーはそういう組織らしいです。私も同じ意見です。ここでよくある日本人の考え方が以下であると紹介されています。

日本でリーダシップのある人というと「野球部のキャプテンをやっていたとか」、「プロジェクトのリーダーを任されている○○さん」など、役職がその代替概念としてよく挙げられます。

私も思い当たる節が正直あります。リーダーシップとはリーダーが持つものだと思っていました。しかし、今の組織に入り考えが変わりました。実は自組織がとてもこの状況に近いです。リーダーシップを持つ人が多く、役職に関係なく各メンバが自律的に事業成長に向けて課題解決をリードしています。自身もその一人です。誰かの上司ではないですが、SREチームであったり、文化醸成であったり、チームビルディングであったり自分が貢献できそうなところで何かしらをリードできています。自組織にはそういう人がたくさんいて、全体として組織の成果が最大化されていく実感があります。

全体の方向性に影響を与えない細かいことにこだわったり、現実的でない理想論を振り回す。面倒なことが起こると突然に無関心を装い、いつの間にか自分の役割を離脱しているこういった行動をとるのは、自分がリーダーとして苦労したことない人ばかりです。

これは本当にそうだと思います。リーダーは多くの決断をする必要があります。理想を描きつつ、時には十分な検討を行う時間がなくても現状の最適な選択を想像し、決断をする必要があります。そのような経験を積み重ねていると、理想ばかりでは世の中が回らないことがすぐにわかります。立派な理想を持つこと自身は素晴らしいことです。理想だけを振り回し、自分では何もしない人がいたらその人はリーダーシップがない人だと思います。その理想に向けて一緒に何ができるのか、自分ならどうするのかを常に考えることが重要だと思います。

もうひとつよく言われるのが「ポジションをとれ」という言葉です。これは、「あなたが意思決定者だとしたら、どう決断するのか」という意味です。

早めにポジションを取ることにより、さまざまな問題点が浮かび上がり、改善や修正も素早く行えるようになります。仮でも良いのでポジションを取って結論を出さないと、外部から反対意見させ集めることができず、何を改善すれば良いのか見えてきません。

これもとても重要だと思います。最初からこの考えを徹底させられると思うとマッキンゼー恐るべしです。自身も常々意識していて、私の場合は「たたき台を作る」が同じ意味になります。その状況における結論をたたき台として早めに作るようにしています。そもそも正解なんてないこともあるので、悩んでいても無駄なことも多々あります。まずはたたき台の中で決断をし、結論を出すことが重要です。反対意見がなければそれで進める。その方が早く進むことが多いです。

また、「たたき台」というのは正解である必要はなく、あくまでも「たたく」ための案なのです。もし最終決定者が自分でなくても、たたき台の中では自身は意思決定者なのです。そのため決断をする練習ができます。それを意識して、どんどん決断をすることで判断力も養われていくように思います。意思決定を自身でできていないと感じている方は是非たたき台を作ってみてください。

1年を振り返る

ブログを開始して1年が経ったので振り返ってみようと思います。

paper2.hatenablog.com

総括

月1回以上の目標も守り、アウトプットし続け成長することできました。目的の達成度合いも高いです。特に一番の目的である自身の成長という観点では大きく達成できたと思っています。以下でそれぞれの目的についての達成度合いに言及してみます。

目的の達成度合い

[100%] アウトプットによる自己成長

これは大きく達成していると実感しています。任意の人に対して自身の考えなどをアウトプットする練習になりました。やはり記事を書く中でストーリーの組み立てなどは少し上手くなっている気がします。もしかしたら意外とたたかれないなというのが少しづつ自信として積み重なっているのもあるかもしれません。今月はアウトプット開始1年というのもあり、社外登壇にも挑戦しています。初登壇のくせに2つも申し込むという大きな挑戦をしたりもしました。その中で自身で考えたストーリーをプロダクトのチーフアーキテクトに絶賛されたりと、自身の成長をしみじみ感じており文句なしの100%としています。

登壇情報

2023年2月14日【マネーフォワードSRE Meetup】SREをはじめるあなたへ moneyforward.connpass.com

2023年3月9日 実録!SRE cloudonair.withgoogle.com

[50%] 学びを共有することで、誰かの役に立つ

これは正直分かりません。ただ、Twritterで記事を公開した際に16RTされたりとフォロワー数に対して共感者が多かったこともあったので、全く役に立ってないことはないのかな〜と期待しています。(めちゃくちゃ数は少ないですがwww 精進します。)

反応が良かったツイートの例

[100%] 自己学習実績を公開する

数は少ないかもしれませんが、目標としていた月1回の更新を欠かさず実施できました。またブログ活動が練習となり登壇に繋がったところもあるので、実績を公開するという意味ではここも100%と言って良いのではないかと思っています。まあ言ったもん勝ちにはなってしまいますが、、、笑

さいごに

月1回の目標も守り、アウトプットし続け成長することできました!!現状成長のために有効なツールであると判断しているので今年も続けていきたいと思います。よろしくお願いします。

「具体⇔抽象」トレーニング 思考力が飛躍的にアップする29問

概要

皆さんは「具体と抽象」の違いを認識できているでしょうか。「具体と抽象」の概念を理解し、往復することはとても強力で応用の効くスキルの一つです。一方で違いを把握していないとコミュニケーションギャップが発生することが多々あります。本書ではそのコミュニケーションギャップを解消することを目的として様々な表現を用いてその違いを説明し、「具体と抽象」のそれぞれが持つ重要性を説明します。また、それらを行き来するための「抽象化」と「具体化」について説明しています。

総評

まず最初に絶賛させてください。義務教育としたいくらいとても良い本でした。同著者の名著である具体と抽象の副読本という立ち位置?のようですが、個人的には本書の方がおすすめです。

本書でも記載がありますが、抽象を扱える人は具体の世界を把握することができます。一方で具体を扱える人の中には抽象の世界を把握することができない人がいます。そのため具体の世界から抽象の世界へ行けない人は多く存在します。実は私も3年前は具体の世界に留まる一人でした。なのでこの感覚は身をもって経験しています。上司とのコミュニケーションギャップに悩み、ある日自身が具体的なことに着目しがちで認識齟齬が発生していると仮説を立てた私は具体と抽象を手に取りました。この本を読み、「具体と抽象」の違いを理解し、強く意識するようになってから少しづつ上司とのコミュニケーションギャップがなくなっていきました。また抽象化ができることにより視座が上がり、物事の吸収力が上がりました。抽象化とはそれほど強力なツールなのです。(ちなみに上記意見に対して反証のみが思いつき、そんなことはないと思った方には本書がよりおすすめできます。それ自体がコミュニケーションギャップであり、本書により解消が期待できます。)

最初に具体の世界から抽象の世界に行くことはとても難しいことです。まず「具体と抽象」の違いを認識することが難しいからです。本書の素晴らしい点は豊富な言い換えと秀逸な表現力により「具体と抽象」を綺麗に説明している点です。具体の世界にいる人は具体的な内容からしか理解ができません。本書では複数の具体的な表現により「具体と抽象」を説明しているため違いを理解するためにはとても良い書籍です。また、ある程度「具体と抽象」を理解した私からしても、表現が秀逸で感動しました。ここまで綺麗に言語化することは私にはできません。もはやアートです。「具体と抽象」の認識が曖昧な方には特におすすめですが、ある程度理解している方にも同僚や後輩に説明する上でより良い表現力を学ぶことができるのでおすすめできます。

一部ですが良いと感じた表現を紹介します。

抽象化とは「まとめて一つにする」こと

抽象化の最も基本的な定義は、同じ属性を持ったもの同士をまとめて一つに扱うという「分類」の機能です。

実に本質的な表現だと思います。例えば、下図のように具体の集合として図形が12個あります。これらはそれぞれ色や形、大きさなどが異なり具体の世界では12個の図形です。抽象の世界ではこれらを分類することで複数の図形をより少ない数で表現できます。例えば形で抽象化した場合は12個の図形が四角、三角、丸の3個で表現できます。これにより個別を一括で扱うことができます。これが抽象化の一つの力です。

抽象化とは「都合の良いように切り取ること」

この考え方は私は意識できていなかったので、非常に良い気付きとなりました。上記の例からも分かる通り、抽象化の軸は複数存在します(上記例だと形、色、大きさなど)。どの軸を選ぶかは抽象化をする人の都合によって変わります。例えば形に着目したければ形で分類しますし、色が重要であれば色で分類します。このように抽象化には意志と意図が含まれているため、場合によっては騙されたりするため受け取り方には気をつける必要があります。また、抽象化の軸を誤ると本質を見誤る可能性などもあります。

まとめ

本書は「具体と抽象」を豊富な言い換えと秀逸な表現力により説明しており、違いが曖昧な方には特におすすめです。また、ある程度理解している方にも同僚や後輩に説明する上でより良い表現を身につけることができるので役に立つかと思います。