まだ20世紀だった頃。ある会社の社長と飲んだとき「Accessってのは敷居は低く見えてそうでもないし、かといってたいしたことが出来るわけでもない」と結構ひどい評価を下していた。

その後、本格的にAccessの案件に関わることがあったが、作りがひどい。誰かが作っていたのを別の人がメンテしていて「無理」と放り投げたのを私がキャッチした。Excel VBAの案件という触れ込みで参画したはずなのに・・・。しかし、若干クセはあったものの、それほど困ることはなくAccessの世界にも足を踏み入れることとなった訳だ。当時はExcelの他、WordやOfficeのVBAには携わってたが、AccessはJetが嫌いで避けていたのだった。

余談の長いのが年寄りの悪いところだ。さて、今回からときどき「Accessを上手に使おう」というのを記事にする。
目的は「Accesssでは限界を感じているもの」をなんとかしよう、というもの。なんともならない原因はAccess固有の方言ではないだろうか、と思っている。それを解消すれば移行も夢ではないのだ。

ということでなるだけこの記事の頻度は多くなると思うが、よろしくお願いいたします。



AccessのフォームやVBAを使っているとなかなかAccessから離れられないだろう。しかし、データベースに関して「遅い」と感じるなら、データベースをAccessから別のものに置き換えることをおすすめする。
フリーのものがいくらか出回っているが、個人的には SQL Server 2008 R2 Express Edition を薦めたい。

容量など制限はあるが、フリーである。更にSQL Server Management Studio というツール付きのものもあり、SQL文に慣れていなくてもこれがあればデータベース作成等にそれほど苦労はしないだろう。

先日、あるWebシステムでデータベースにAccessを使っていたものがあった。件数が増えるとついにタイムアウト(30秒だったと思う)が起きるようになってしまったのだが、SQL Server に置き換えると多く見積もっても3秒以内で処理が返ってきた。なお、トレーサーなどがなかったので体感的なターンアラウンドタイムであるが。
つまりは、少なくとも10倍程度の速度はある、ということだということになる。

Accessでちまちまとチューニングをしてもなかなか大きな効果は得られないだろう。データベースエンジンを変更し、SQL文を変更、場合によってはSQL文を使っていないのでSQL文に修正しないといけないし、DBへの接続を変更する必要があるが、速度はずいぶんと速くなる。
ただ、上記のような変更が困難、というケースもあるのだろう。自前で作成したものであればともかく、業者に依頼して作成したもので「全面作り直し」「莫大な費用がかかる」「難しい」という回答が返ってくるなら、そういう業者はあまり信用できないのではないだろうかと思う。よほど元の作りが下手くそか、技術力がないか、のどちらかに違いないと思われるからだ。

Accessは遅いので、データベースを置き換えられるように設計しておく、というのが常識として認識されてほしいものである。そのためにVBAの書き方のお作法ってものや、マクロ、クエリ、フォームののお作法ってものも、実践していれば自ずと見つかるのだ。
そのあたりも情報発信が必要なのかもしれない。
プログラム言語にせよ、自然言語にせよ、言語の目的は「伝える」ことであろう。ただ言葉を投げるだけではなく、受け取り手が居て、それを受容/共感/無視/拒絶を経て関係が始まる。
この辺の社会学的?なところは余談。

日本語は細やかな表現ができる一方、論理性に欠けるといわれる。一方、英語などは論理的な表現に向くといわれる。これは日本語は句読点はあるものの文字を切れ目なく綴ることに対し、英語は単語単位で連ねていくため、切れ目が分かりやすいということもあるのだろう。IT関連では英語の文献にあたることもときどきあるが、論理的であるがためにずいぶんとラクに解釈させてもらっている気がする。
これも余談。

さて。
昨今、日本語が乱れていると指摘されている。確かに外国人からすれば「?」と思える表現は至る所に見受けられる。ただ、気になっているのは「日本語の表現の細やかさが失われつつある」ように思える。
例えば、「やばい」という言葉。仕事場の若い子が食事の際に使っていたが意味が分からなかった。「産地偽装されている食材では」という疑いなのか、「放射性物質大丈夫か?」という懸念なのか、「皿が欠けてて危ない」という意味なのか。結局は「おいしい」という意味だったらしいが、まったく通じない。言葉でのコミュニケーションではなく、その場の雰囲気、いわゆる「場の空気」がなければ伝わらないレベルの言葉になってしまっている。

コンピュータ言語も「コンピュータに指示する」ための言語であるが、最近のプログラマのプログラムが読みにくいケースが多い。トラブル時にチェックすることがあるのだが、理解に苦しむケースが多い。
論理表現も多いので数学的センスもある程度は必要ではあるが、その基礎すらできていないために冗長表現になっているケース。業務上の知識が不足しているがために陥っている奇妙なロジックがあるケース。それ以前に、後々読みやすくしておこうという工夫が一切されていないケースが結構ある。
例えばVBAの場合でも、Cell("A1") という表現と Cell(1,1) という表現を混在させるケースや、セルの場所を取得するのに絶対位置と相対位置を使っていても、絶対位置用の変数と相対位置用の変数とでどちらがどちら用の変数かわかりにくいケースがあり、その変数の取り回しによってバグを潜在していているケースもあった。

プログラムの記述も
・わかりやすく
・シンプルに
・読みやすく
というような基本的なところが意外と実践されていない。VBAではこれは致命的なのではないかと考えている。

裏を返せばVBAでも他の言語でも、ちゃんとした情報がないのではないか?そういえばJavaはそのあたりしっかりしていたように思う。が、他のオブジェクト指向言語ではダメダメなのか?と考えていたが、要は「Javaで学んでからその言語に移行したわけではないから」だろうと思う。VBAならなおさらだ。こちらで整備が必要な部分かもしれない。