Thinking About 'SYSTEM' | 2007-1-11 by KOMPas | ||||||||
http://www.enissi.com/kompas/sienpi2006/otenki/exercise02.xls | |||||||||
EXCELマクロのお勉強 | |||||||||
■ | まず、EXERCISE02:「カレンダ2」で作ってもらった2つのコードが何をするか、整理しておきます。 | ||||||||
(EXERCISE02.xls を開いてみただけの人も、EXERCISE02.xlsを見ていない人も、 | |||||||||
以下何点かをイメージしてもらいましょう。) | |||||||||
■ | EXERCISE02.xls には2つのシートがあり、 | ||||||||
1つは、カレンダー様式の「カレンダ」 | |||||||||
1つは、データが一覧表形式で書込み、或いは表示する「予定表」 | |||||||||
■ | マクロが2つ書き込まれておりおり、 | ||||||||
train0201/train02 マクロは、それぞれ次のようなコードが書かれている。 | |||||||||
■ | train0201 マクロ | ||||||||
train0201 で作成したのは、あらかじめ「予定表」にあるデータの中から | |||||||||
目的の月データを読み込んで、「カレンダ」様式に書き込む転記マクロです。 | |||||||||
予定表 | -> | カレンダ | |||||||
■ | train0202 マクロ | ||||||||
train0202 で作成したのは、データベースにあるデータを「予定表」に読み込み、 | |||||||||
データベースにあるデータを「予定表」に読み込む転記マクロと、 | |||||||||
「予定表」で追加/編集したデータをデータベースに保存する転記マクロ、 | |||||||||
この2つの転記マクロです。 | |||||||||
データベース | -> <- |
予定表 | |||||||
■ | どちらも、「転記コード」である点と、 | ||||||||
どちらも、データの追加/編集は、「予定表」で行っている点、 | |||||||||
の2点が共通しています。 | |||||||||
つまり、2つのコードで想定された「データ入力インターフェース」は、「予定表」だということです。 | |||||||||
■ | この2つのコードを使って、どんな「システム」が構築できるか、 | ||||||||
或いは、あなたにとって、どんなシステムが便利なのかを、ここで考えてみましょう。 | |||||||||
考える上の「境界条件(?)」を思いつくままに列挙すれば、以下のようなもんでしょうか? | |||||||||
(1) | データを入力するのは誰か? | ||||||||
一人なのか、複数なのか? | |||||||||
複数の入力者たちは、近くにいるのか、離れたところにいるのか、むちゃくちゃ離れているのか? | |||||||||
(2) | カレンダを利用するのは誰か? | ||||||||
一人なのか、複数なのか? | |||||||||
複数の利用者たちは、近くにいるのか、離れたところにいるのか、むちゃくちゃ離れているのか? | |||||||||
コンピュータ画面で確認できればよいのか、紙でみたいのか、何か他の仕事につかうのか? | |||||||||
(3) | データを入力するのはどこか? | ||||||||
「入力インターフェース」を何にするか? | |||||||||
コンピュータは使えるのか、携帯電話なら使えるのか? | |||||||||
EXCELが使えるのか、ブラウザが使えるのか、メールが使えるのか? | |||||||||
インターネットに接続できるのか、WEB-SERVERは立ち上げられるのか? | |||||||||
(4) | 入力されたデータはどこに保存されるのか? | ||||||||
データベースなのか、 | |||||||||
1つのEXCELファイルなのか、複数のEXCELファイルのあるフォルダか、 | |||||||||
或いはそれ以外か? | |||||||||
入力に使っているコンピュータなのか、LANでつながったほかのコンピュータなのか、 | |||||||||
或いは、インターネットの向こうのコンピュータなのか、 | |||||||||
電話回線の先にあるコンピュータなのか? | |||||||||
(5) | セキュリティを顧慮すべきか? | ||||||||
どのレベルの、或いはどのレベルで、 | |||||||||
データをみせたくない誰かがいるのか、それは誰なのか、それはなぜなのか? | |||||||||
データを破壊/改竄される脅威があるのか? | |||||||||
顧慮したら、機能させたいセキュリティは有効に機能するのか? | |||||||||
(6) | システムを管理するのは誰か? | ||||||||
システムに責任があるのは誰か、それはどこまでか? | |||||||||
(7) | コストは? | ||||||||
いくら予算があればいいのか、どの位時間があればいいのか、誰が負担するのか? | |||||||||
データ入力/出力にかかるコストは?手間は? | |||||||||
運用/メンテナンスにかかるコストは?手間は? | |||||||||
「使い方」を教えるコストは?手間は? | |||||||||
(8) | このシステムは、誰のためにあるのか? | ||||||||
何の成果があがるのか? | |||||||||
誰が楽になるのか、誰か楽になるのか? | |||||||||
誰に負担がかかるのか? | |||||||||
(9) | どこかに協力者を期待できるのか? | ||||||||
う〜む。 | |||||||||
■ | EXCELファイル | ||||||||
■ | あなた一人で、あなたのコンピュータだけをつかってスケジュラを使うのであれば、 | ||||||||
train0202 マクロは使う必要がないことがおわかりでしょう。 | |||||||||
(苦労してつくったのにぃ。) | |||||||||
■ | さらに、「予定表」なんか使わなくても、 | ||||||||
12枚の「カレンダ」をつくってしまえば、1年分のスケジューラのできあがり、です。 | |||||||||
つまり、「入力インターフェース」を、はじめっから「カレンダ」にしてしまえば、 | |||||||||
train0201 マクロもいりません。 | |||||||||
あなたがマクロなんて知らなかった時から、実際にこなしていたことです。 | |||||||||
(苦労してつくったのにぃ。) | |||||||||
■ | とはいえ、train0201 マクロを使ったほうが便利かもしれないのは、 | ||||||||
あなた一人分とはいえ、「私用」「仕事用」さらに「もう1つの仕事用」「家族用」や「子供用」等々、 | |||||||||
同じ月でも、いろいろな種類のカレンダがいるときや、 | |||||||||
特に、ある1データを、(1回の入力で)複数種類のカレンダに表示させたいような場合、 | |||||||||
train0201 で頑張って書いたコードが役にたつかもしれません。 | |||||||||
■ | 「それならマクロなんてなくてもできるじゃないか」 | ||||||||
おっしゃるとおり! | |||||||||
この頁は、「マクロ/コードを使わない」という選択枝も含めて、考えてみたら、という頁です。 | |||||||||
(但し、「マクロなんていらない」説明は、これ以上はやりません。) | |||||||||
■ | あなたにもう少し時間があるのであれば、 | ||||||||
入力インターフェースである「予定表」を、もっと使いやすくしたり、 | |||||||||
たとえば、「予定表」を月別や年度別にしてしまうとか。 | |||||||||
tarin0201 コードを更にきめ細かく書き換えるのに時間をかける方が、 | |||||||||
賢い選択かもしれません。 | |||||||||
■ | 幾つかの選択枝が考えられるものの、 | ||||||||
入力も、出力も1つのEXCELファイルを開いて行い、 | |||||||||
データは、そのEXCELファイル上に保存されます。 | |||||||||
■ | ファイルサーバー | ||||||||
■ | ここで、「ファイルサーバー」について、若干説明します。 | ||||||||
「サーバー」といっても、何か特別なコンピュータで運用するものではなく、 | |||||||||
皆で使うファイルを、ネットワーク上共有な場所において、 | |||||||||
複数のコンピュータから利用できるようにするとき、 | |||||||||
その共有の場所或いは、共有場所を提供しているコンピュータを、 | |||||||||
「ファイルサーバー」といっています。 | |||||||||
■ | ファイルサーバーである条件があるとすれば、 | ||||||||
「常時電源がはいっていること」と、「ネットワーク上の共有フォルダをもつ」ことでしょうか。 | |||||||||
■ | 「ファイルサーバー」について気をつけることは、 | ||||||||
「読取だけ」の共有なのか、「更新可」なのか、という点です。 | |||||||||
■ | けっこう知られてはいますが、ちょっと特殊な「ファイルサーバー」としては、 | ||||||||
FTPサーバーがあります。 | |||||||||
FTPサーバーは、インターネット上で、ファイル共有を実現します。 | |||||||||
■ | 「ネットワーク」という考え方がうまれたと同時に、 | ||||||||
「ファイルサーバー」もうまれたわけで、 | |||||||||
ずうっと昔からある、極めて理解しやすい考え方をもつ技術の1つです。 | |||||||||
■ | 直前で「あなた一人で、あなたのコンピュータだけをつかって」のシステムなら、 | ||||||||
データベースは考えなくてもよいのではないか、という説明をしましたが、 | |||||||||
いま、「あなた一人で、あなたのコンピュータだけをつかって」ではないシステムを考えるにあたっても、 | |||||||||
「ファイルサーバー」があれば、データベースはいらない、と考えることができる場合があります。 | |||||||||
■ | 「あなた一人のあなたのコンピュータだけをつかう」スケジューラ、つまりEXCELファイルを、 | ||||||||
ファイルサーバーにおいておくだけで目的がはたせるなら、 | |||||||||
train0202で書き込んだ「データベースへの書込」「データベースからの読込」コードは、 | |||||||||
今回もまたいらないことになります。 | |||||||||
■ | あなたが、いろいろなコンピュータで仕事をする立場にいて、 | ||||||||
どのコンピュータで作業していても、自分のスケジューラをみたい、といった場合も、 | |||||||||
どれか1つのコンピュータを「ファイルサーバー」にしたてて、 | |||||||||
全章と同じ1つのEXCELファイルをファイルサーバーに置いておけば、目的を達成することができます。 | |||||||||
■ | もし複数の人で利用するスケジューラであっても、 | ||||||||
データ入力/編集の頻度がそれほど多くないなら、 | |||||||||
ファイルサーバーに置かれた1つのEXCELファイルで、用がたせる場合が多々あります。 | |||||||||
■ | さらに多くの人が利用するスケジューラで、 | ||||||||
データ入力/編集の頻度が多くても、 | |||||||||
例えば利用者の多くは、スケジュラーをみるだけで、 | |||||||||
入力するのは、だれか一人だけ、といった場合であれば、 | |||||||||
同じように、ファイルサーバーだけでこなせる場合が多々あるわけです。 | |||||||||
■ | 「ファイルサーバー」にEXCELファイルを送信する点が少し複雑ですが、 | ||||||||
データ管理自体から考えれば、 | |||||||||
入力も、出力も1つのEXCELファイルを開いて行い、 | |||||||||
データは、そのEXCELファイル上に保存される点は前章と同じです。 | |||||||||
■ | データベース | ||||||||
■ | 現役の(現在使われている)アプリケーションの大半は、 | ||||||||
データベースにデータを保存する仕組みでつくられています。 | |||||||||
EXERCISE02: train0202 のように、 | |||||||||
入力したデータをデータベースに保存し、取り出して出力する方法です。 | |||||||||
train0202でやったような、「データベースの入出力」を行うコードを書ければ、 | |||||||||
市販アプリケーションを使って入力されたデータを、その市販アプリケーション以外で使いたいときや、 | |||||||||
市販アプリケーション以外から入力されたデータを、その市販アプリケーションで出力したいときなど、 | |||||||||
自分たちの「システム」の中に、リゾナブルな市販アプリケーションも組み込むという選択枝を増やせます。 | |||||||||
■ | お題目の「スケジュラー」も、「データベースの入出力」を行うコードを組み合わせると、 | ||||||||
大規模システムを作ることさえ可能になります。 | |||||||||
結構な人数の入力者と、結構な数の出力者がいて、 | |||||||||
当然のように扱うデータが膨大になってきたときは、 | |||||||||
train0202 で「お勉強」したことが活かせます。 | |||||||||
■ | この場合、基本的な構造としては、 | ||||||||
EXCELファイルは、「ファイルサーバ」ではなく、 | |||||||||
操作するコンピュータにあります。 | |||||||||
■ | 一台だけのコンピュータなら、 | ||||||||
データベース | -> <- |
予定表 | -> | カレンダ | |||||
といった感じであったものを、 | |||||||||
-> <- |
予定表 | -> | カレンダ | ||||||
データベース | -> <- |
予定表 | -> | カレンダ | |||||
-> <- |
予定表 | -> | カレンダ | ||||||
のように使えるわけです。 | |||||||||
■ | さらに頑張って、 | ||||||||
「カレンダ」を、予定表からデータを持ってくるのではなく、 | |||||||||
「データベース」から直接「カレンダ」に転記するようなコード(train0203?)を書けば、 | |||||||||
-> <- |
予定表 | ||||||||
-> <- |
予定表 | ||||||||
データベース | -> <- |
予定表 | |||||||
-> | カレンダ | ||||||||
-> | カレンダ | ||||||||
-> | カレンダ | ||||||||
のようなシステムにすることもできます。 | |||||||||
■ | さらに、「カレンダ」と縁がきれた[予定表」は、 | ||||||||
入力だけしかしない「小さな予定表」をつくったり、 | |||||||||
「1日データ表示」「1週データ表示」等のカレンダを作ることも簡単になります。 | |||||||||
さらにさらに、この章の始めに触れたように、 | |||||||||
とても使いやすい入力インターフェースをもつ市販アプリケーションの入力や、 | |||||||||
とても魅力的な出力インターフェースをもつ市販アプリケーションの出力さえ利用できるかもしれません。 | |||||||||
-> <- |
予定表 | ||||||||
<- | 1日予定表 | ||||||||
データベース | -> | 予定表 | |||||||
-> | カレンダ | ||||||||
-> | 一日カレンダ | ||||||||
-> | 1週カレンダ | ||||||||
<- | 市販アプリケーション | ||||||||
-> | 市販アプリケーション | ||||||||
のようなシステムにすることもできます。 | |||||||||
■ | データをデータベースに保存することにすれば、 | ||||||||
コード/システム構造が複雑にはなりますが、 | |||||||||
一端「データベースとの入出力」コードをこなしてしまえば、 | |||||||||
入出力インターフェースの拡張がおこないやすく、かつ強力になるわけです。 | |||||||||
■ | WEB-SERVER | ||||||||
■ | WEB-SERVER は、インターネット上で公開するサーバーで、 | ||||||||
WindowsのIIS(インターネットインフォメーションサーバ)や、Apache(アパッチ)などがあります。 | |||||||||
技術的に1ランク上、となりますが、 | |||||||||
1から習得しようとすれば、これまた大変なことになるのでしょうが、 | |||||||||
EXCELマクロを書けるレベルであれば、IISでの.aspファイルを書くことは割合すぐできるし(これは本当) | |||||||||
根性と適切なお友達がいれば、perlだって無茶な話じゃありません。(やっぱし無茶かな) | |||||||||
(データ入力を伴わない「読込のみ」のファイルサーバーとしてなら、 | |||||||||
WEB-SERVERをたちあげるのに、1〜2時間もあれば、立ち上げられます。 | |||||||||
・・・僕に聞いたりしないように) | |||||||||
■ | ファイルサーバー志向であっても、データベース志向であっても、 | ||||||||
WEB-SERVER をたてることは、それなりに意味があります。 | |||||||||
データベースで説明したように、 | |||||||||
何がしたいのかを考えれば、あえてWEB-SERVERを立てる必要がないことも多々ありますが、 | |||||||||
一端コードを書いてしまえば、 | |||||||||
果てしないシステム拡張が可能になります。 | |||||||||
End. | |||||||||
■ | 一コンピュータ屋の私見にすぎませんが、 | ||||||||
時代のながれは、データベースからファイルサーバーへと戻りつつあるようです。 | |||||||||
というより、 | |||||||||
1つは、どんなファイルも、内容をデータベースのようにあつかえるようになりつつあり、 | |||||||||
もう1つは、フォルダーごとデータベースのようにあつかえるようになりつつあると、 | |||||||||
データベースをいじりたおすコストを考えれば、 | |||||||||
EXCEL/WORDや、HTML、等をそのまま管理したほうがずっと簡単だからです。 | |||||||||
■ | 勿論この背景には、 | ||||||||
極めて高速で、おおきなメモリーを積んで、しかも安価なコンピュータがあふれつつあること、 | |||||||||
何時間つなぎっぱなしでも、それほどコストがかからない、 | |||||||||
かつ超高速なインターネットがあること、 | |||||||||
そして、これまでのデータベースエンジンを進化させた知性が、 | |||||||||
ここ十年弱くらいは、インターネットの検索エンジンに興味が向かったこと、 | |||||||||
さらにその技術を、インターネットより下のネットワークにまで拡張されつつあること、 | |||||||||
などがあげられます。 | |||||||||
■ | コードを書くためのハードルは、皆さんが考えるより、ずっと低いです。 | ||||||||
(僕が考えるより、ずっと高い? のであればごめんなさい) | |||||||||
で、コードを書くための幾つかのハードルを越えるたびに、 | |||||||||
いろんなことが自分でもできることがわかります。 | |||||||||
■ | コードを書けるという前提で(自分がそのシステムをつくるんだという立場で)、 | ||||||||
コンピュータシステムやコンピュータ以外のシステムをみてみると、 | |||||||||
幾つかの無駄や重複に気付いたり、 | |||||||||
「改善」できそうなことを思いついたり、 | |||||||||
「論理矛盾(?)」をみつけたり・・・、 | |||||||||
時には(「時には」どころじゃないことも多々)、 | |||||||||
対象がコンピュータシステムであろうと、それ以外であっても、 | |||||||||
システムの「セキュリティホール」や「ボトルネック」に気付くことさえあります。 | |||||||||
KOMPas | |||||||||
TEL | 0949-29-2334 | ||||||||
FAX | 0949-29-2332 | ||||||||
携帯 | 090-6777-4241 | ||||||||
kompas@enissi.com (返事は |