技術監修を担当させていただいた「SQLクックブック 第2版」が2022年2月に発売された。これはとても嬉しいことだった。今回はこの事について書こうと思う。
TL;DR
- SQLクックブック第2版が発刊された。
- 書籍の対象読者とそうではない人をまとめた。
- 技術監修を担当したので役割と作業内容をまとめた。
- 作業を通して学んだことをまとめた。
SQLクックブック第2版について
SQLクックブックの特徴と対象読者
SQLクックブックの内容には次のような特徴がある。
- 問題とその解決策を提示し、それを解説している。
- 複数のデータベースについての説明がある。
- 設定されている問題の数が多い。
- 絵や図は極めて少ない。
- データベースに関する基本的な用語などの解説はほとんどない。
- SQL以外のプログラミング言語4は登場しない。
- データベースの運用や実装についての記述はほとんどない。
この特徴を元に対象読者と対象ではない人を整理した。
対象読者
特徴から以下の人に読むことをおすすめできる。
- SQL力を向上させたい。 データベースを用いてデータの処理を行っていて、SQL力を向上させたいと考えている人は多いだろう。書籍の構成は一貫して問題、解決策、解説となっており、興味のあるテーマを練習がてら自分なりの答えを出してみると、SQL力の向上に繋がるだろう。DBAとしての役割を持ったエンジニア、データベースとやりとりすることの多いWeb系のバックエンドエンジニア、データサイエンス系のエンジニアの方が該当するだろう。余談だが小規模なチームだとインフラ担当者がとDBAを兼務することが多いように思う。
- 複数のデータベースについての実行するSQLの違いについて知りたい。 MySQL、PostgreSQL、Oracle、Db2、Microsoft SQL Serverではどのようにすれば問題が解決できるのかということが解説されている。同時に複数の種類のデータベースを扱うことは少ないかもしれないが、例えば今まではPostgreSQLを使用していて急遽別のプロジェクトにアサインされてDb2を扱うことになったといったことはしばしばある。「PosgreSQLでのSQLをDb2ではどのように書けばよいのか」ということを学ぶ参考資料になる。
- SQLを用いてデータを操作するための練習と答えの材料が欲しい。 具体的な問題をたくさん掲載しているため、そのため授業のネタやハンズオンのネタにするにはちょうどよいだろう。例えば情報系の学校の先生やティーチングアシスタントの方、データベースのハンズオンの題材の製作者の方が該当する。
- SQLに興味がある。 書籍は様々な難易度のSQLとその解説がある。SQLを学ぶにはちょうど良い書籍だ。データベースの環境の構築方法については一切記述がないが、ローカルでのDockerを用いた環境構築方法についてはサポートページにて記述する予定だ5。
対象外
前述とは逆におすすめできない人もいる。以下にその条件とその理由を説明する。以下に該当する場合はこの書籍を読んでも要求を満せない。
- プログラミングを学び始めたい。 この書籍はプログラミングの入門書ではないので、この要求には答えられない。 とりあえずどの言語でも良いので公式(もしくはそれに近い)ドキュメントを見て環境を作成し、簡単なプログラムをいくつか書いてみると良い。その後、入門書を読んでみるのも良いかもしれない6。
- スマホアプリを開発したい。 これを読んでもスマホアプリは作成できるようにはならない。きっとSwiftやKotlinと言った言語や、React NativeやFlutterを学ぶと良い。
- データをどのようにビジネスに生かすかを知りたい。 データをどのようにビジネスに生かすかといった内容については記述されていない。
- 各種データベースの運用方法が知りたい。 取得したいデータをSQLとしてどのように表現すればよいかという事に焦点が置かれている。特定のデータベースの運用方法については記述されていない。設定やチューニングについても記述されていない。
- データベースの実装方法を知りたい。 データベースをどのように実装するかについては記述されていない7。
- プログラミング言語からのデータベースの利用方法について知りたい。 データベースの接続方法、利用方法、O/Rマッパーについての記述はない。最初から既にSQLの実行が可能な状態が前提となっている。
- 受験生 受験勉強に集中しよう。
書籍の主な内容
部署(dept)と従業員(emp)のテーブルと初期データ8は事前に与えられ、データ操作を行う。取り上げられるデータ操作は、従業員数の取得のような基本的なSELECT文、面倒な文字列や日付の操作、ウィンドウ関数を用いた複雑な集計など様々だ。付録ではウィンドウ関数とCTE(共通テーブル式)について解説されている。トピックは章ごとに仕分けられている。以下は各章とそのタイトルだ。
章 | タイトル |
---|---|
1章 | レコードの取得 |
2章 | クエリ結果のソート |
3章 | 複数テーブルの扱い |
4章 | 挿入、更新、削除 |
5章 | メタデータクエリ |
6章 | 文字列 |
7章 | 数値 |
8章 | 日付の演算 |
9章 | 日付の操作 |
10章 | 範囲 |
11章 | 高度な検索 |
12章 | レポート作成と形状変換 |
13章 | 階層クエリ |
14章 | その他 |
付録A | ウィンドウ関数の再確認 |
付録B | 共通テーブル式 |
各トピック流れは、まず問題を挙げ、次に各種データベースでの解決策、次にそれらの解説といった流れで記述されている。解決策と解決は各種データベースについて言及があるものもあれば、トピックによっては解決策がそもそも存在しないものも一部ある。更に詳しい内容はオライリージャパン社のSQLクックブック第二版の書籍ページ1で確認できる。
技術監修としての役割
今回の書籍は原著が存在する。そのため技術監修としては原著を崩すことなく、内容として間違いがない状態にするということを求められる。手法はさまざまだが、明らかにおかしい箇所や一貫性の観点で著しく崩れている箇所は修正するがそうでない箇所については原著を尊重する。
例えばSQLのキーワードの記述はは大文字か小文字のどちらにするかとか、SQLの改行位置やインデントの位置などは原著をできるかぎり尊重している。またその他のこちらで巻き取れるところをやっていく。検証環境の整備や、作業上のルール化、サポートページなんかもそれにあたる。
時期別のコミット状況
参考までに実際のコミット状況を掲載する。
スケジュール
私の主な作業内容を月毎にまとめた。本格的に監訳作業を開始したのは2021年05月からだった。それよりも前は翻訳が済んでいないので比較的のんびりとしていた9。事前準備では原著を元に必要な検証環境や、Githubリポジトリ等必要なリソースを整備した。議事録を見返すとYoutubeチャンネルを解説しようなんていう話も挙がっていていた10。
時期 | 主な作業内容 | 備考 |
---|---|---|
2021/02 | 事前準備 | Githubリポジトリ等必要なリソースを整備。 |
2021/03 | 事前準備 | 原著を元に検証環境、初期データの準備。 |
2021/04 | 事前準備 | おおまかなスケジュールを立てる。 |
2021/05 | 翻訳原稿確認 | 翻訳原稿の記述を確認し、間違いや不明瞭な箇所を修正する。 |
2021/06 | 翻訳原稿確認 | 上記と同じ。必要に応じて原著の担当者にフィードバック。 |
2021/07 | 翻訳原稿確認 | 上記と同じ。 |
2021/08 | 翻訳原稿確認 | 上記と同じ。 |
2021/09 | 翻訳原稿確認 | 上記と同じ。 |
2021/10 | 翻訳原稿確認 | 上記と同じ。 |
2021/11 | 翻訳原稿確認 | 初校の組版。原著2刷りが発刊される(今回の作業のフィードバックが盛り込まれている)。 |
2021/12 | 初稿確認 | 初稿は紙に印刷し、赤ペンで修正していく。 |
2022/01 | 再校、三校確認 | 情報解禁。印刷入稿。 |
2022/02 | サポートページ作成 | 予約開始。発刊。SNSでの広報活動。 |
2022/03 | アフターフォロー | 問いあわせなどがあれば都度対応。 |
各種データベースの検証環境の整備
今回の検証環境は5種類のデータベースであったためそれらを整備した。Oracle以外はDockerイメージがあるのでDockerを利用した。OracleについてはDockerイメージはなかった。しかしソースコードとDockerイメージをビルドする方法は提供されていた。それを利用してDockerイメージをビルドした。
Emacsの整備
検証環境を含め多くの作業でEmacsを利用している。Emacsにはデータベースユーティリティが用意されている。デフォルトの設定ではローカル環境にデータベースクライアントが存在することを期待している。今回データベースサーバーはDockerで起動している。もちろんlocalにデータベースクライアントをインストールすることもできるが、クライアントはデータベースサーバー内に既にあり docker exec
で入ってしまえば接続設定を多少省略できる。そのため docker exec
でコンテナに入る形でEmacsのデータベースユーティリティを利用できるように整備した11。
定例会議
作業を停滞させない為に定例会議を実施した。定例会議があると、それまでに自分で設定したノルマを達成しようと作業に取り組むため、作業が進まず困るということが無くなる。以前はオンラインではなくオフラインでの打ち合わせをお願いしていた。だが今回はコロナ禍という事もあり、オンラインでの打ち合わせとした。今までの他の本の監修作業を行う場合にも、編集者の方に願いして実施して頂いている。
主な内容は以下のような内容だ。
- 頻度は週1回。
- 時間は1時間。
- 曜日時間は固定。
以下の内容が議題。
- 進捗報告。
- 困っている事の共有と対応の決定。
- その他、雑談など。
所感
データベースはWeb系のバックエンドを実装していると必ず扱う。O/Rマッパーを用いてデータベースへアクセスすることも多いか、発行されるSQLを意識して実装するのとそうでないのとではちがった実装になる。O/Rマッパーによって発行されるSQLを考えていないと、N+1問題を起しがちだ。そういったコードはリファクタリングもしにくいし、パフォーマンスチューニングも難しくなる。データベースが得意なことはデータベースに行わせるのがよい。そういった意味でもSQLを書く力は必要になる。SQLクックブックはSQLを書く力を高めるための教材としてはとてもよい書籍だと思う。
またSQL自体は一度覚えてしまうと息の長い技術的要素だ。たとえば今Ruby on RailsのWebアプリケーションを書いていたとして、3年後もRuby on Railsを書いているだろうか。もちろん書いているかもしれない。でも、もしかしたらPythonに転向しDjangoを使っているかもしれない。GoでAPI Serverを実装しているかもしれない。ただそれらの場合でもきっとRDBMSを使っている(使っていないかもしれないけれど)。
Webアプリケーションフレームワークやプログラミング言語を学ぶことも重要だが SQLを学ぶ重要性はそれと同等かそれ以上に高いと感じた。
謝辞
今回私は技術監修という立場で制作に参加した。とても名誉なことだと思う。この素晴しい機会を与えてくださった株式会社オライリー・ジャパンの皆様、出版に関った方々に感謝している。特に担当編集者の方には大変お世話になった。今回に限らず毎度お世話になっているといった方が正しいかもしれない。ご自身の編集者としての作業の傍ら、私の作業が滞らないように管理しその都度必要な助言やサポートをしてくださった。
おわりに
私個人としてはとても得るものが多い書籍だった。そしてデータベースやデータについて、また仕事や作業のやり方など考えることが多かった。ぜひデータベースやデータについて考えてくれる人が増えて欲しい。そのきっかけが私の関った書籍であったなら本当に素敵なことだ。それではまたどこかの勉強会で。
脚注
「SQLクックブック 第2版――データベースエキスパート、データサイエンティストのための実践レシピ集」 https://www.oreilly.co.jp/books/9784873119779/
「SQLクックブック――データベースエキスパートのための実践レシピ集」 https://www.oreilly.co.jp/books/9784873113159/
「SQL Cookbook: Query Solutions and Techniques for All SQL Users」 https://www.oreilly.com/library/view/sql-cookbook-2nd/9781492077435/
SQLはクエリ言語であってプログラミング言語ではないとするこもある。 何をもってプログラミング言語とするのかは議論の余地がある。 ここではプログラミング言語とした表現を用いたが、言いたいこととしては PythonやJavaやCと言ったプログラミング言語は書籍内には登場しないということだ。
SQLクックブック 第2版 サポートページ https://oreilly-japan.github.io/sql-cookbook2-ja/
もしその言語がPythonであれば「Head First はじめてのプログラミング――頭とからだで覚えるPythonプログラミング入門」をおすすめする。 https://www.oreilly.co.jp/books/9784873118741/
そのような内容を知りたければ 「詳説 データベース ――ストレージエンジンと分散データシステムの仕組み」 がマッチするかもしれない。 https://www.oreilly.co.jp/books/9784873119540/
初期データについては書籍のはじめにで掲載されている。 ただデータの値しか示めされておらず、コピー&ペーストしてテーブルを作成しデータを挿入できる状態ではなかった。 そのためサポートページにテーブルのCREATE文とデータのINSERT文を掲載した。 https://oreilly-japan.github.io/sql-cookbook2-ja/
この書籍と関係のない仕事で忙しくしていた。 個人的にはのんびりできていた訳ではない。
動画の方向性は「SQLのゆっくり解説」で考えていた。 理由は私と編集者の方が"ゆっくり解説"好きだからだ。 "ゆっくり解説"とはゲーム関連の東方Projectを元にしたデフォルメされたキャラクター 霊夢と魔理沙が機械音声でテーマの解説するという動画ジャンルだ。 結局これは実現できなかった。 要因はいくつかあるが一番大きい要因は本気度が足りなかったことだと思う。 今から考えるとふざけすぎだった。
私のEmacsの設定のDatabaseの章で設定している。 https://github.com/TakesxiSximada/emacs.d/blob/main/README.org