はじめに
こんにちは!運営メンバーのなかやん(@nakayarn)といいます!今回、@adachin0817さんからお薦めされて読んだ技術書がとてもよかったので読書ブログを書かせていただきます。既にご存知の方は沢山いらっしゃるとは思いますが、まだ手に取ったことのない方の参考になると幸いです。
今回読んだ技術書
タイトル:失敗から学ぶRDBの正しい歩き方
著者:曽根壮大(@sodai1025)
発行所:株式会社技術評論社
・https://soudai.hatenablog.com/entry/2019/03/06/080000
読み始めたきっかけ
コミュニティメンバーと話している中で「毎月2冊は技術書を読んでいる」という話題が出たので、「私のレベルでも読めて、勉強になる技術書を教えて欲しい」とお願いしたところ、「アプリケーションエンジニアならデータベースの設計や運用、アンチパターンなどの知識として必須だから必ず読もう!」と熱量高くオススメしていただいたので、その場でAmazonで購入。早速、翌日から読み始めました。
この技術書の推しポイント
この技術書は、RDB関係のアンチパターンの原因とアンチパターンを生まないための対策が書かれています。
また、全ての章に具体的な現場でよく見かけるアンチパターンの実装内容が書かれており、開発現場でよく見たことのあるテーブル構成が沢山紹介されています。実務経験のある方なら馴染みのある内容が盛りだくさんです。
さらに、想像しやすいようにSQLのコード例や比較表、イメージ図などを掲載してくださっています。具体的な例を出しながら、それがなぜ良くないのかを噛み砕いて解説してくれているので、DBに苦手意識がある方でも理解しやすい内容になっています。
その中でも、私が特に印象に残った内容を以下に記載します。
特に見て欲しいおすすめの章
第4章:効かないINDEX
この章では、INDEXはRDBの高速化には欠かせないものですが、適切に設計しなければ使われないINDEXになってしまうということが書かれています。
INDEXを設定していても、適切に設計されていなければ効果を発揮しないケースがあることを知らず、この本を通じて学ぶことができました。
基本的には、RDBMSではBTree INDEXを使用していること、また、その構造や動きなども記載してくれています。
また、細かい部分では、MySQLとPostgreSQLを比較した表なども記載されていています。全編通してRDBMSの種類を比較しながら解説してくれているので、とても勉強になります。
第5章:フラグの闇
この章では、データを削除する際に、物理削除ではなく、論理削除(削除フラグをつけて、削除されたかどうかの状態を持たせること)を使用することに対する危険性が書かれています。私も先輩から「物理削除だとデータが復旧できないから、論理削除を使うといいよ」とアドバイスをいただいたこともありますが、本書ではアンチパターンとして紹介されていました。
また、「テーブルには状態を持たせることはお勧めしない」と一貫して記載されており、理由としては以下のような内容が詳しく説明されていました。
- クエリの複雑化
- UNIQUE制約が使えない
- カーディナリティが低くなる
もちろんアンチパターンを生まないための方法も書かれています。
著書の中では、「とりあえず削除フラグはじわじわと時間と共に苦しみを生み出すアンチパターンです。リファクタリングを検討してみてください」と記載されています。それくらい対策を取るべき内容ということですね。
第11章:見られないエラーログ
この章では、エラーログはシステムの振る舞いを教えてくれる大切な存在にも関わらず、エラーログが多すぎると、段々と見なくなり、オオカミ少年化されてしまいます。現場で経験していたため、強く共感してしまいました。
しかも、私においては、本書の中にあるエラーログを見なくなるパターン「エラーログに対する無知」と「エラーログが見れない/見づらい」というパターンに当てはまっていました。多くの開発者が陥りがちな状況として、とても参考になる内容でした。
本書では、「無知の場合はエラーログに関して知ることが大切」「エラーログが見づらい場合は、見やすいように加工しましょう」という内容が書かれていますので、今からでも見直すべきだと感じました。
第18章:ノーチェンジ・コンフィグ
この章では、コンフィグの設定が適切に行われているかという問題について解説されています。
本書では、コンフィグの設定を担当するエンジニアの役割が分散していることや、デフォルト設定のまま運用されがちな背景について詳しく分析されています。
また、パフォーマンス問題が発生した際に、コンフィグファイルが原因として疑われにくい理由についても解説されており、実践的な視点から問題の本質を理解できる内容になっています。
第19章:塩漬けのバージョン
この章では、RDBMSのアージョンアップをしていない危険性について解説してくれています。
サポートが切れたバージョンを使い続ける危険性について言及し、マイナーアップデートとメジャーアップデートについて比較。小まめにアップデートを行うことを推奨しています。
また、本書では「バージョンアップすることを文化にしよう」と書かれており、定期的に実施することが当たり前の風土を作ることで、悪習を断ち切ることができると記載されています。
個人的には「この習慣を変えていけるかどうかもまた、みなさんの手にかかっています」という締めくくりがとても良いなと感動しました。
おわりに
個人的には私のようなSQLやデータベース設計に苦手意識がある人にほど読んで欲しいと思っています。初学者向けの本では詳細を割愛されている部分を、深掘りして解説してくれています。また、参考にした資料や本に関しても注釈を入れてくれているので、興味が湧いてきた場合にさらに深掘りすることもできる、親切な作りになっています。発行記念として、そーだいさんが登壇されてる動画もありますので、そちらもぜひチェックしてみてください!
最後まで読んでいただいて、ありがとうございました!
後日談
著者の曽根さんとお話しする貴重な機会をいただき、サインまでいただくことができました。お食事をご一緒させていただいた際、曽根さんが実践されている具体と抽象を行き来する思考法を間近で体験でき、大変勉強になりました。様々な相談にも親身にお答えいただき、問題を体系的に分解して考えるロジカルシンキングの手法を実際に見せていただけたことは、とても貴重な経験でした。

@adachin0817さんとはエンジニアイベントを通じて知り合い、コミュニティに参加。現在は、未経験エンジニア向けの研修や、プログラミングスクールでの質問対応・就職支援を担当。メインの開発言語はRuby on Railsで、時々Javaも使用。サービス全体の構造を理解したいという思いから、フロントエンドやクラウドなど幅広い分野を横断的に学習中。