ちょっと仕事関連でHPを作成した。
CSSをページの枠組み用と装飾用の2つに分けたり、SEO対策で新規ページがどのくらいで上位に顔を出すのか実験してみたり、新しい試みをしている。

ページの作成を簡略化するため、ヘッダー部分、ページ遷移させるナビゲータ部分、コンテンツ表示部分にiFrameで分割したベースファイルを枠組みとして作成した。コンテンツはナビゲータ部分でクリックされたらページ書き換え、という方法を取ってみた。
ただ、検索エンジンはコンテンツのファイルにもリンクを作り、そのリンクを開くと「コンテンツのファイルだけ開く」という状態になり、他のページを見ることができなくなるケースをよく見かけるが、それだとちょっとおマヌケなので、何とかできないか、と検討した。
要するに、コンテンツのファイルを開こうとすると、それを表示するための枠組みであるベースファイルを表示し、更に該当するコンテンツを流し込めればよい訳だ。
しかし、Googleなどで検索してもなかなかいいやり方が見つからない。

情報を拾い集め、それをJavaScriptで組んでみて実現できるか試してみた。
まず、コンテンツファイルが開かれるとhref.locationでベースファイルを表示するようにする。トップレベルに表示された時のみ処理を動かすようにしておけば問題なくクリア。
問題は、href.location で表示したファイルに「さっきどのファイルが開いていたか」の情報をどのように渡せばよいか、であった。よく知らなかったのだが、href.location で、URLにパラメータを付加できるとの情報があったので、それを利用することで難なくクリア。

かくして、コンテンツのファイルが開かれると、ベースのファイルを読み込み、そのコンテンツ表示部分に該当コンテンツを表示するということが可能になった。

結構面倒くさそうであったが、意外と簡単であった。JavaScriptのオブジェクトモデルと、HTMLの仕様について少しだけ理解が深まった気がする。
情報システムは今、「所有する」から「利用する」への転換を迎えている。ASP、SaaS、クラウドなどといった、ネットワークの先にシステムもデータも置いてしまおう、という発想によるものである。

ただ、全てをネットワークの先に置くのではなく、セキュリティや使いやすさを考慮すると、ある程度はクライアント側にシステムがあった方がいいのではないか、と個人的に思う。


では、VBAで作るモノはどうか。私自身は基幹システムも構築したことがあるが、基本はちょっと作ってしまえるようなものであろう。過去に作ったモノのコピーや、書籍・インターネットのコードのコピーを駆使し、ちゃっちゃと作ってしまう。
ただ、そうなると「コピー元から引き継いだ、使わないコード」「よく分からないが何となく動くコード」をどんどん取り込むこととなる。また、過去に作成したモノや書籍・インターネットのコードが必ずしも堅牢なコードではなく、バグが残っていることもよくある。こうなってくると一般ユーザーにはメンテナンスはほぼ不能であろう。

そうしないために、BASP21のように、多くの人が利用し、バグもほぼ収束している(こういうのを「枯れている」と表現することがよくある)であろうモジュールを利用する方が安全かつ確実である。そう、システムの目的を充足するためには何でもかんでも「作る」のではなく、共通部品のように利用できる部分は「利用する」ことを選択肢として考慮した方がいいだろう。

単純なコードであっても、解読不能でメンテもできず、どこにバグが潜んでいるか分からないコードではなく「ここから先はブラックボックス」と割り切る。そうすることのメリットは大きい。

○ソースがコンパクトになり、可読性と保守性が高まる。
 詳細のごちゃごちゃしたところは外部に切り出すので、大まかな処理の流れも読みやすくなる。
○構築までの時間が短縮できる。
 テスト箇所が少なくて済むこともあり、リリースまでの時間が短縮できる。ビジネスには欠かせない要素だろう。
○バグの切り分けが行いやすくなる。
 何かあったときに、呼び出し方の問題か、部品の問題かが分かりやすい。ただし、部品は基本的には広く利用されておりバグが収束しているものがいいが、そうでなくても問い合わせ可能であったり、バグの履歴を公開していたりしているものがいいだろう。

・・何か他の観点(重要)を思いついて追記しようとしたのだが、飛んでしまった・・。思い出したら書く。
VBが6.0からVB.netになった際に、言語仕様としていくつか変更になっているものがある。VBAは非.net系の言語仕様をそのまま引き継いでおり、.netには移行していないので以前の言語仕様のままである。

※Office 2007/2010 に関しては未確認だが、同様ではないかと思う。

その中で一番注意しておく必要があるのは、おそらく型ではないかと思う。
何かというと、VB.netでの Integer は VBA での Long に相当する、ということだ。これはVB.netのみならず、例えばSQL Server でも同様である。

連携するプログラムを組んでいる人たちなら常識的かも知れないが、念のため。