いろいろなシステムを見ることができるのが面白い
――ミックさんは『SQL 第2版 ゼロからはじめるデータベース操作』のほかにも、翔泳社から多数出版されています。データベースとSQLの書籍が主ですが、普段はどういった仕事をされているのでしょうか。
ミック:私はSIerに勤めていて、システム開発というよりは、システム開発でトラブルが起きたとき支援を行なうチームに所属しています。パフォーマンスを高めることが専門のチームなのでチューニングの仕事も多いのですが、問題を未然防止するための上流の設計やコンサルタント的な仕事も行なっています。
昔はシステム開発をしていましたが、当時から高いパフォーマンスが必要なデータ量の多いシステム、いまでいうビッグデータを扱うデータベースの開発に携わっていました。その意味ではパフォーマンスを意識する仕事が多かったので、そういうチームの人たちと仕事をするようになり、いまに至っています。なんだかんだで長くやってきていますね。
この仕事は、いろいろなシステムを見ることができるのが面白いです。一口にシステムといっても、業界や分野によってさまざまなバリエーションがありますから。ビッグデータ系はもちろん、クラウドやマイグレーション、あるいは見たことのない業務パッケージやミドルウェアを解析することもあります。
苦労はしないことがないですね(笑)。基本的には知らないシステムに取り組むことになるので、最初は手探りで情報をかき集め、断片的な情報を繋ぎ合わせて自分の中で構成していく必要があります。
もちろん私がやっているような、ある意味最後の駆け込み寺のような仕事を必要としないシステムは、幸せです。私としてはうまくいっているシステムのほうが多いだろうと信じています。でないと、世の中のシステムの多くが火を噴いていることになりますからね。ただ……仕事は増え続けているので、そこは自信がありません。医者が世の中病人で溢れていると感じるバイアスと同じものだと信じたいところです。
これからは非文字情報を扱うデータベースが盛り上がる
――そもそもの話になって恐縮ですが、データベースとはどういうものなのでしょうか。
ミック:データベースとは特定のフォーマットでデータを保存したものです。そのフォーマットの違いがデータベースの違いになっています。なぜフォーマットを決めてデータを集めると便利かというと、そのほうがプログラミング言語でデータを扱いやすい、つまり乱雑にデータを集めるよりもはるかに効率的だからですね。定型処理はプログラムが最も得意とする作業です。
実はこの「データとデータベースの違い」という発見は革命的で、このアイデアに基づいてデータベースの基礎を作った方々はチューリング賞を受賞するなど功績を讃えられています(チャールズ・バックマン、エドガー・F・コッドなど)。もちろん、昔から人々は、データを扱うことはしてきました。私たちもテキストファイルやExcelを使って、日々データを処理しています。ですが、これらのフォーマットは、普通ばらばらで、統一性を意識しませんよね。これを特定のフォーマットに合わせて扱えるようにしたことでプログラムとの相性が非常によくなり、いまのデータベースのような利用方法が可能になったのです。
――データベースの社会的な役割についてはどうでしょうか。現在はどんな分野で盛り上がっていると感じていらっしゃいますか?
ミック:少し前にビッグデータという言葉が流行りました。従来いろいろな制約からうまく使えなかったデータを分析に活用する動きがあるのは事実です。ですが、それ以前から、データの保存という意味ではデータベースの役割は重要で、それが何十年も続いてきました。データそのものが持つ価値に注目して、それでビジネスをやってみるという動き自体はここ数年、急に盛り上がってきたように感じます。
いままでは、大量のデータを扱おうとしてもハードウェアのリソースや技術が追いつかなかったんですが、ようやくそれが解消されてきたんですね。
――「ビッグデータ」に対して、データベースエンジニアはどういう仕事をするのでしょうか。
ミック:データベースエンジニアといっても幅広く、まずはハードウェアやミドルウェアのレベルから物理的な基盤を作ったり、システムを組み上げたりするインフラ寄りのエンジニアがいます。また、モデリングという、データを格納するテーブルなどの設計を行なうエンジニア(モデラー)もいます。あとは、エンドユーザーに近い立場でビジネスにどうデータを活かすかを考えるタイプのエンジニアもいますね。
インフラ寄りのエンジニアは、数としては少ないと思います。本書の初版も、ビジネス寄りや業務システムの開発を行なうエンジニアに多く読まれたように思います。本当はSQLも、インフラというか、ハードウェアのリソースやデータベースの内部ロジックも考えて書くほうがパフォーマンスがよいのです。しかし、SQLとデータベースはそうした物理レイヤーを隠蔽する目的を持っているので、あまり意識することがないかもしれません。まあ、物理層を意識せずにデータを扱えるのは、SQLのいいところでもあるのですが。
――ビッグデータは流行語になったのでイメージがつきやすいですが、いまは地味でも今後盛り上がっていきそうな領域はありますか?
ミック:リアルタイム性のあるデータの扱い、「ストリーミング」と呼ばれていますが、こうした領域が一つ。また、いままで扱えなかったタイプのデータを扱えるデータベースは応用が進むのではないでしょうか。例えば、文字や数字以外、音や画像、動画などのデータをネイティブに扱うデータベースです。いまもマップアプリなどで地図データベースは実用化されていますね。
さらにグラフを扱うデータベースにも個人的に注目しています。グラフとは、SNSのユーザー相関図のようなノードを結んだあの図形です。リレーショナルデータベースではなかなかうまく扱えなかったデータなんですが、そういうデータを扱う研究が進んでいます。電車の経路探索やSNSの友達を探す機能なども、グラフ情報を応用したものですね。
私たちは「データ」と聞くと基本的に文字情報を思い起こします。しかし、今後は上記のような「データの概念を拡張する」動きがより活発になるでしょう。これまでは一度取得したデータをデータベースに保存し、そのあとで処理するためタイムラグが発生していましたが、それをなるべく「取得したらすぐ処理」するような、タイムラグをなくすリアルタイム処理が進展していくと考えられます。そうすると、ますますパフォーマンスの負荷がかかるので、私の仕事も難しくなっていくだろうなと予想しています(笑)。
ただ、こうした新しい分野が出てくるのがITの一番の醍醐味ですから、面白いんです。
やり手のエンジニアは初見の敵に対応できる
――そのお話をうかがうと、データベースエンジニアの需要は増していく一方な気がします。
ミック:そうですね。いままで誰もやったことがない分野が常に出てくる業界なので、前例のない、とっかかりのないものをなんとかして作り上げていく人たちの需要はなくならないと思います。
業界としては、技術が確立されると陳腐化するのも早いのでそこにジレンマがあります。ですが、データベースとSQLは40年ほど基幹の部分が変わらずに通用してきた珍しい技術です。少しずつバージョンアップはされていますが、これらに取って代わる基幹データベースはまだ登場していませんので、しばらく地位は揺るがないのではないでしょうか。その意味で、最初に学んでおくといろいろなところで応用が利くかもしれません。いまのところ、ある程度の規模のシステムであれば、リレーショナルデータベースを使わないというシステムはないので。
――この先求められる人材になるにはどういう能力が必要ですか?
ミック:データベースに限らずの話になりますが、「一人称で動ける人」ですね。分からないことや難しいことに遭遇したとき、教わっていないからといって立ち止まる人ではなく、自分でできるところまで工夫して進んでいける人です。自分の限界に至ったときも、それがなぜ限界で、なぜ自分では分からないのかを整理できる能力が必要です。
やり方が分からない物事を手探りで掘り進めることがこの先のエンジニアに求められる仕事なので、分からないことを分かるようにしていかなければなりません。確立された技術を効率化していくのは、あっという間に自動化されて人間の仕事ではなくなっていきます。
要は、初見の敵とどうやって戦うかですね。ゲームでは初見で絶対に勝てない敵を「初見殺し」とよく言いますが、でも初見に殺されてはいけません。エンジニアは初見の敵に対してもなんとか引き分けに持ち込む必要があります。そのためには、問題の構造を見抜いてパターンに落とし込む必要があります。初見殺しの敵も、実はパターンさえ見切れば簡単に勝ててしまうものです。
若手を育てる立場になって思うのは、どうして初見の敵に対応できる人とできない人がいるのかということです。同じカリキュラムで、同じようなメソッドで教育しているはずなのに、なぜか差が出てくる。できる人は、分からない問題でも自分の手である程度進めていけて、最終的に解けなかったとしてもいいところまでいける。どこがダメだったのか、整理できるんですね。この能力はどうも学校で教わるものではなさそうですし、どこでどう身につける能力なのか、興味深いです。
先ほどデータベースエンジニアの需要は増しているとお話ししましたが、ただ作業するだけの仕事はどんどん減っていくでしょう。必要なのは初見の敵、すなわち未知の問題に取り組んでいけるエンジニアです。「作業者」にならないよう、自分なりに工夫してみてほしいですね。
――ミックさんはどのように人に教えているのでしょうか。
ミック:最低限覚えるべき技術を教えて、あとは実践です。また、戦い方がうまい人と組ませて、その人のやり方を見て学んでもらうペアリングも実施しています。もう一つは、後輩をつけてあげることです。自分が教えられる側だったり一人でやっていたりすると、やっていることをあまり言語化しません。ですが、人に教えようとすると言葉にしなければならないので、それが学びになりますね。
――独学だとどういう学び方をすればいいですか?
ミック:どんな仕事をやっているかによりますが、コーディングやプログラミングは独習できる分野なので、現代では環境に苦労しないと思います。いいコード、悪いコードは探せば見つかりますから。ただ、先ほど言った未知の問題への取り組み方をどう学ぶかは難しいですね。独学でこれを身につける明確な答えはまだ自分にも分かりません。
まったくの初心者がデータベースとSQLを学べる1冊
――ミックさんの書籍は中級者以上向けが多いのですが、本書は初心者向けということで工夫された点はありますか?
ミック:初心者向けの書籍は難しいですね。自分は忘れてしまったハードルを思い出して書かないといけないので、どこをどのくらい説明しなければいけないかという勘所を外さないように気をつけないといけません。
初心者がSQLでつまずくポイントは、例えば「結合」と「相関サブクエリ」があります。理解するには理論的な説明が必要ですが、いわゆるSQLの入門書だと書いて覚えるタイプが多いように感じています。ですから、本書の場合は理論も細かく解説しています。特にSQLはデバッグができず、内部でどう動いているのかイメージしづらい特性があります。本書ではそれがなるべく見えるようにして説明しました。
――対象としてはどれくらいのレベルの方なのでしょうか。
ミック:入社1年目の新入社員の方や、大学で初めてプログラミングの勉強をするような方など、本当の初心者を想定しています。プログラミングの知識自体はなくても大丈夫です。
そうした初心者が、SQLでデータを簡単に操作できるようになる、プログラミング言語とデータベースを組み合わせた簡易なシステムを作れるようになるところまで学べると思います。実は本書のことをひととおり勉強すれば、一般的なシステム開発をしているSEレベルのことはできるようになりますね。
SQLに関しては自己流で学んでいる方も多いのではと思います。初心者向けにきちんと解説した書籍が少ないのもありますが、SQLは簡単なことをやるなら簡単に書けるという特徴があり、深く考えなくても使えるんです。
――自己流で困ることは何かありますか?
ミック:結局のところ、自己流だとSQLとデータベースで複雑なことができず、効率のいいシステムを作れなくなりますね。SQLを簡単にしてプログラムを複雑にするほうが、普通のプログラマやSEにとっては簡単です。しかし、本当はSQLとデータベースである程度のことを行なうほうが、システムとしては効率がよくなります。簡単なやり方に慣れてしまい、結果としてシステムとしては非効率になるケースは非常によく見ますね。
ただし、本書ではパフォーマンスにこだわる前に、まずは変な癖を持たない、筋のいい初心者になっていただけるような解説をしています。
一度覚えれば長く活かしていける技術、それがデータベースとSQL
――本書で学べる言語はSQLですが、サンプルプログラムのデータベースはPostgreSQLです。手軽さでいうとMySQLもありますが、これはなぜなのでしょうか。
ミック:一つはMySQLと同じでオープンソースなので誰でも使え、ノートPCで動かせるほど軽いからです。また、SQLの構文に癖がなく、標準に沿っているからです。ほかのデータベースに構文を適用しても基本的に通用します。ですから、OracleやMySQLを使いながらでも本書を読み進められます。あまりデータベースの違いにはこだわらず勉強できるように工夫しています。
第2版では1章分を追加しました。そこではプログラミング言語のJavaからデータベースにアクセスしてデータを操作する方法を解説しています。初版の読者から「データベースとSQLは扱えるようになったがどうやってプログラミング言語と組み合わせればいいのかイメージが持てない」という声があり、たしかにそこは初心者だとイメージが湧かないところだな、と思いました。現在サーバサイドのプログラムとして主流のJavaでデータベースを操作するイメージを掴んでもらえたらと思います。
――本書で学び終わったあとはどのように勉強すればいいでしょうか。
ミック:大きく、テーブルやデータの設計をするモデリングと、インフラの方向があります。論理設計と物理設計とも呼びます。SQL自体でもう少し高度なことをやるという方向もありますね。どの分野をやるにしても、勉強することはまだまだ多いです。ちなみに、私の著書である『達人に学ぶDB設計 徹底指南書 ~初級者で終わりたくないあなたへ』では設計について、『達人に学ぶSQL徹底指南書』では高度なSQLを解説していて解説しています。
――では最後に、ミックさんが感じるデータベースの魅力を教えてください。
ミック:いろんなデータを自在に操作できるのは、純粋に楽しいものです。いままでの書籍でもそういう声もいただいています。いままでやろうと思っていてもうまく書けなかった処理をきれいに書けるようになったという感想もありました。
実利的な面でいうと、リレーショナルデータベースは数十年間存在していて、これからもなくなるということはないでしょう。覚えておくことで、多様なシステムの開発に対応できるようになると思います。リレーショナルデータベースを使わないシステムはまずありませんから。
データベースとSQLは、一度覚えると末永く役に立つ技術です。