データベースは社会を定義する – DB入門のすすめ –

現代社会においてデータベースの恩恵を受けていない人はいません。携帯電話のアドレス帳から、コンビニのPOSシステム、銀行口座、飛行機の予約システム、生産管理などの業務システムなどまで数多くのものがデータベースによって成り立っています。

その範囲は部品管理から生産管理、受注管理、売上管理、請求管理、支払管理、原価管理、勤怠管理といった具合に多岐にわたり、おおよそ全ての業種において何かしらのデータベースが運用されていると言い切ってしまっても過言ではありません。

つまり、現代の社会活動の多くがデータベースという形式を用いて記録され、その内容に基づいて動いていると考えることも可能なわけです。さらに言い換えると、データベースの知識さえあれば、多くの社会活動の記録や仕組みを正確に記述して、誰にでも伝わる形で表現することができるようになります。

物事を正確に記述して誰にでも伝わる形式で表現することができれば、それを応用できるようになります。たとえば、物体を対象とした力と運動の関係は、幼い子どもでもボールを投げたり、ブランコを漕いだりするうちに体験的に「理解」できるものですが、そのままでは応用できる範囲には限界があります。

しかし、そこに個々の物体と力と運動の関係を正確に記述する力学という表現手段さえあれば、任意の物体に対する正確な動力計算や強度計算などに用いることが可能となります。敢えて大げさに言えば、ボールどころかスペースロケットを飛ばすことにだって利用することが可能です。




力学が記述する対象は物体と力と運動の関係ですが、現在の一般的なデータベースが記述する対象は実体 (Entity) と関連 (Relation) の2つのデータの関係です。

実体とは実世界に存在する顧客、商品、組織のほか、契約プランやマラソン大会のように形がないもの、あるいは概念的な存在である場合もあります。ただし、文京区や Erika Mustermann と言った個別具体的な存在ではなく、顧客や学生、都道府県、自動車メーカーや市町村などの任意の総体を表す概念です。そこに氏名や生年月日、国籍、商品名、製造番号、JANコード、日時などの何かしらの属性(attribute) による特徴づけが加わって、はじめて特定の職員や商品やイベントなどの具体的な対象のデータとなります。

関連とは2つ以上の実体間の相互関係を表すものです。職員と部署という2つの実体間にある所属、会員と商品との間にある購入、取引先企業と配達業者との間の指名などの実体どうしの相互関係を表現します。

データベースは実体型と関連型の2系統のデータを用いて、地方自治体や企業や学校などの組織構造、サービス利用などの取引行為、診察歴などの医療行為といった実社会のあらゆる対象を定義します。したがって、多くの場合、データベースの内容さえ覗ければ、組織の内部構造や業務内容を剥き出しにすることもできます。

データベースの表現力はそれぐらい強力なのです。これを知っているかどうかで組織や社会活動に対する見方が大きく変わってきます。データベースという視点さえ持っていれば、データから組織や業務などの全体像を俯瞰的に把握できるようになります。

しかし、データベースの効用はそれだけには留まりません。データベースの真価はデータを資産として管理、運用し、そこから価値のある情報を生み出すことにあります。情報化社会の実現はデータベースの適切な活用なくしてありえません。

そこで重要となってくるのが DBMS (Database Management System) と SQL (Structured Query Language) への理解です。力学の例で言えば、これらは微分や線形代数にあたる存在です。利用者がデータベースという「コンテンツ」を利用しようとするときに実際に利用するソフトウェアが DBMS であり、そこで用いられる「言語」が SQL です。

これらはデータベースそのものではありませんが、データベースを思い通りに表現し、操作し、運用するときに用いられる、まさに数式や自然言語のようなものです。IBM DB2, Microsoft SQL Server, Oracle Database, MySQL, PostgreSQL, SQLite といったソフトウェアはすべて DBMS に該当します。これらの DBMS は記憶装置に書き込まれた物理的なデータと利用者またはソフトウェアとを仲介し、データベースとして利用するための諸機能を提供します。

DBMS のおかげで、データベースのファイル構造を意識せずにデータの検索、登録、更新、アクセス管理などの処理が行えるわけです。

そして SQL とは今日の DBMS の主流である RDBMS (Relational Database Management System) においてデータベースを操作するために用いられる言語です。複数の文献を見ていると RDBMS が最初に考案されたのは 1969 年から 1970 年あたりのことで、当初は数学の集合論を応用した関係代数 (relational algebra) というもので操作を行っていたようです。


The Relational Model for Database Management: Version 2

基本情報技術者試験、応用情報技術者試験などにおいて出題される直積や交差、射影といった操作を調べていくと、この関係代数に行き当たりますね。

SQL は先の関係代数 (つまり演算処理) を誰にでも使いやすくする目的で作成された専用言語で、のちにデータベース言語の国際標準規格にもなっています。今日ではデータベースと言えば、まずは何をおいても SQL に習熟することが第一の目標になります。世の中のほとんどの DBMS が SQL で操作されることを前提として設計されているためです。

考えたことを無意識に SQL で表現して、クエリを見たら瞬時に結果が思い浮かぶぐらいになると不自由なく DBMS を操作できるようになります。最初は戸惑うかもしれませんが、SELECT や UPDATE など頻繁に使用するものは数が限られているので、一つづつ覚えていけば大丈夫です。

ここでオススメなのは『SQL ゼロからはじめるデータベース操作』です。


SQL 第2版 ゼロからはじめるデータベース操作

ほかの参考書でも問題はありませんが、この著者のデータベース参考書は深い内容をきわめて分かりやすく説明しているものばかりなので、ハズレがありません。上の一冊だけでも初学者には十分すぎるぐらいの分量を丁寧に解説しています。

SQL の扱いに習熟しましたら、つぎに手にとって見ていただきたいのが『楽々ERDレッスン』です。


楽々ERDレッスン (CodeZine BOOKS)

こちらは 2006 年発行の少し古い本なのですが、ほかに類書を見たことがないほどユニークな本です。その内容は手元にある受付用紙や領収書、請求書などを題材にして手当たりしだいにデータベースを設計していくという異色なものです

最初に見たときは、その目のつけどころに感嘆しましたが、本書の魅力はその一点のみにとどまりません。データベース設計の過程を実演していくなかで、現役の業務用ソフトウェアのデータベース設計者がどこに着目して、どのような手順で設計を行っているのかを実例を通して学ぶことができます。

設計したデータベースを実際に DBMS 上で実装して、適当なデータを入力してみるとより理解が深まります。ここまででもデータベースの操作や設計というものが分かってくるので、その効用を実感できるはずです。

さらに内容を進めると運用やセキュリティという分厚い壁に直面することになるのですが、それを仕事にしないのであれば、そこから先は専門家に任せてしまっても問題はありません。

研究者や技術者でも無い限り、データベースを学ぶ上で重要なのは、データをきちんと整理して資産化し、必要なときに必要な情報に変換できること、そして、その上で情報を活用できることです。

ただ、それだけのことが強力な武器になるのは、現代社会の至るところにデータベースが用いられ、ありとあらゆる対象がデータベースという形式で記述されていることからも明らかです。これを知らないなんて、あまりにも勿体ないので、ぜひ有効に活用してください。

なぜアプリ開発の入門書は役に立たないのか

誰にとってもスマートフォンや SNS が身近になった昨今、iOS や Android といった OS や SPA (Single Page Application) のような Web 技術は技術者だけのものではありません。

書店に足を運べば、雑誌や一般書コーナーでも iPhone や Android はもちろん、React, Angular, Kotlin, Swift といった単語に遭遇することも珍しくはありません

そのなかには既成のサービスやアプリケーションを利用するばかりでなく、目的に合致したものを自分で作りたい人に向けて書かれた書籍も少なからず存在します。

ところが、こうした書籍の多くには共通して一つの残念な傾向が見られます。読者レビューで酷評されていることが多いのです。

プログラミング言語やデータベースのように「名著」と絶賛される書籍が少なからず見られる分野と比較して、最新のウェブやモバイルアプリ開発の入門書という分野は統計的有意性が確認できそうなほど低評価のレビューが目立ちます。




その内容を詳しく見ていくと、掲載されているソースコード通りに記述してもプログラムが正常に動作しない、初心者向けではない、誤植が多い、技術的な考証がない(なぜ、そこでそれを使うのかという説明がない)といった評価は日本語に限らず、この分野の書籍レビューでは普遍的に行われていることが分かります。

そのレビューから、興味を持って手にとっては見たものの、エラーが出てまともに動かずに途方に暮れている読者の姿が浮かび上がってくるようです。

しかし、擁護するわけではないですが、多くの執筆者や編集者も決して手を抜いている訳ではありません。商品として提供するソースコードに対して全く動作確認を行わないということもありえません。

問題なのはソースコードではなく、ソフトウェア開発環境のほうが常に変化を続けている事です。とくにウェブやモバイルの分野はその変化が急激で、わずか1年ばかりの間に生じた変化により過去の情報が全く役に立たなくなることが実際に起こりえます。

書籍の場合は執筆途中から既に情報が旧くなり続けていていて、発行日当日から、とっくに環境変化に内容が置いて行かれていることさえあります。こうなると変化に適応するだけでも手一杯で、技術的に深い考察を行ったり、隅々まで内容を精査するところまで手が回らなくなることは容易に想像がつきます。

それでは本に書かれていることは全く役に立たないかと言うと、決してそんなことはなく、自分自身で非推奨になった技術を廃したり、エラーを修正できたりすれば著者の意図は伝わります。

ここで不幸なことには、有償刊行物として成立させるため、そうしたエラー対処などの経験を持たない多数派の一般層に向けた執筆を行う必要があることから、読者層が曖昧になったり、冗長な章や記述が増えたり、あるいは読者によっては段階を飛ばして、いきなり難しくなったように見える部位が出てくることです。

その上、機能解説のためのサンプルプログラムと多くの貢献者がいる人気アプリとでは、同じプログラムでも書き方が全く異なっていたりするので、本の内容と実際に使われている人気アプリや業務アプリとの間には大きな溝があります。

こうした読者の諸々の期待と書籍の内容の不一致が不幸な低評価レビューの一因となっていることが推測されます。

この分野の入門書や教科書を正当に評価するためには、ウェブやモバイルはそもそもが特殊な環境において、特殊な用途をもって動作するものであり、多くのライブラリやフレームワークを用いるためにソースコードは長大で複雑になりがちだということを理解しておかなければなりません。

日常生活において身近にあるからと言って、開発環境としては決して親しみやすいものではありません。公式のチュートリアルですら、初見では何をやっているのかイメージできないことが普通です。

したがって、まず導入以前のところで躓かないようにプログラミング言語や開発環境についての理解は万全にしておくことが求められます。少なくとも、問題が生じたときに、それがソースコードの問題なのか、設定の問題なのか、ライブラリやミドルウェアの問題なのかを自分で判断して切り分けられなければいけません。

これは単体で定番書が欲しくなるぐらいの大きなテーマです。しかし、現状では未経験者を対象としたプログラミング言語の入門書を何冊か読みこなしてコツを掴むしかありません。

また執筆者の方にも基本的な機能紹介に留まるだけではなく、どのような設計思想でプロジェクトを作り上げられているのかを理解し、模範的なクラス設計や適切なメソッドの使用法などを実例として積極的に提示していただきたいところです。

公式のドキュメントやチュートリアルに書かれていることをなぞるだけであれば、最新版に対応している分だけ、ウェブ上の情報のほうが正確で理解に要する手間も少なく、わざわざ書籍を購入する必要性がなくなってしまいます。

そうなると敢えてこの分野で入門書を出版する意義も薄れ、分野の発展にとって不幸な未来しか訪れません。

書籍は公式チュートリアルではありませんので、同一の対象についてパターンを変えながらさまざまな応用例を提示したり、柔軟にオーバーライドをつかって特定の機能を書き換えたり、同一の機能どうしを比較したり、多数の貢献者が参加している人気プロジェクトを初学者にも分かりやすく解説したりとドキュメントには書かれないことを追求する余地が多分にあります。

ぜひ思わず手に取りたくなるようなテーマを取り上げて、この分野を大きく盛り上げてもらいたいところです。

勉強用に使えるシャープペン グラフ1000

いい歳をした大人が趣味の資格試験のためにペンシルを購入しました。贅沢にも日本製の ぺんてる グラフ1000 というやつです。

マークシートに回答するために使い慣れておく必要があるため、このところ意図して長時間筆記を心がけていますが、本体の軽さもあってか1日に数時間ほど使用し続けても疲れがあまり残りません。


ぺんてる シャープペン グラフ1000 フォープロ PG1005 0.5mm

この グラフ1000 についての評判はあまり耳にしませんが、購入店においてイチオシだった ぺんてる スマッシュ Q1005-1 ほかの売れ筋のペンシルよりも私の手に馴染んで使いやすく感じました。

正直なところ、私は昔からペンシルが苦手でして、新たに購入した グラフ1000 を除くと、数年前に購入した製図用の1本しか持っていません。

私は絵を描かないですし、回路製図なんかは専用のソフトウェア上でしか行わないので、自ら機会を作り出さなければ普段の生活でペンシルに触れる機会などありません。




その反対によく使うのはボールペンです。ポストカードも、備忘のためのメモも、雑な計算過程も、なんでもボールペンを使って書きます。大学の定期試験でも、院試でも専らボールペンしか使用しませんでした。

子供の頃は万年筆を使って青インクで記述、緑インクで自己添削するように指導されていたので、いつぐらいからボールペンばかり使うようになったのかは覚えていないのですが、ここ10年ぐらいの生活では筆記量の7割ぐらいがボールペン、残りが万年筆によるものです。

それも使用するボールペンは重たい金属軸と潤沢なインクフローの組み合わせで、指先よりも手首からさき全体を使って書くタイプです。記述内容は [a-zA-Z0-9] が中心で、住所よりも複雑な文字は書きません。

そのため、ペンシル購入前は途中から投げ捨てて二度と使用しなくなるのではないかという不安を感じていました。本音を述べると sin の i や f(x) の f といった文字がとても書きづらく、そこだけが不自然に大きな文字になったり、傾いたりしてしまうのですが、これはペンシルそのものの問題なので、ほかのモデルを使用しても結果は同じになります。

それを除けば大きな問題は見られず、違和感もなく使えています。ボールペンや万年筆(ファウンテンペン)といったペンと比較して、ペンシルはどうしても紙との摩擦が大きく、使用感も異なるので、選び方や使い方には特別な注意が必要となることを痛感しました。

もし私と同じような経歴や使用目的をお持ちの方がおられたら、ぺんてる グラフ1000 フォープロ PG1007 0.7mm に硬度 B または 2B のリフィルを使用すると大きな違和感を感じずに使用できるかもしれません。

軸も細く、本体も軽量であるため、紙に引っかかるような違和感を感じても、滑らせるように筆記を続けることができるからです。

私が実際に購入したのは PG1005 0.5mm ですが、これは購入目的が試験に限定されるので、リフィルの入手性の良い 0.5mm のほうが良いだろうという提案を受けてのものです。

店舗で試し書きさせていただいた際には 0.5mm よりも 0.7mm のほうが持ちやすく、筆記中の違和感も少なく感じました。

もちろん、たとえば生医工程や電機工程のように複雑な文字をたくさん記述する必要がある場合などには、もっと細めで硬度のたかいリフィルのほうが使いやすいということも十分にあり得ます。

個人ごとに手の大きさも違いますし、使用目的も異なりますので、なかなか1本で何にでも使える筆記用具を探すことは難しいのですが、ぺんてる グラフ1000 は大量に字を書き続けるさいにも違和感なく使える良いペンシルだと思われました。

と言うか、ほんとうは線を引いたり、細かな絵を描いたりするときに使うものですよね、これ。