« 2009年12月 | トップページ | 2010年6月 »

2010年1月31日 (日)

脱C/Sプログラマー計画 その3

■メニュー

MySQLの第一段です。
初めてのMySQLの方対象です。
この回では以下の4ステップを学習します。

1.MySQLの環境を設定
2.データベースの作成
3.テーブルの作成
4.PHPでテーブル内容を表示

■MySQLをインストールする

さてMySQLをWindows XP SP2以上にインストールします。
下記をダウンロードしてすべてデフォルトでインストール
します。(20010/1/22)

MySQL本体                 : mysql-essential-5.1.42-win32.msi
MySQL Workbench(GUI) : mysql-workbench-oss-5.2.14-beta-win32.msi

私がインストール設定したログをPDF+ZIP化しましたのでダウンロードして参照ください。

MySQ設定                    : mysql.zip
MYSQL WorkBentch設定 : mysql_workbentch.zip

WorkBenchはGUIでMySQLを操作するツールです。
とりあえず基本を覚えるためにコマンドライン中心です。

インストールの詳細はネットで検索してください。

■MySQLとPHPで検索

HTMLで書くのが大変なので、これ以降は下記PDFを参考にして、
ください。時間を短縮してよい学習教材を提供していきます。

この学習をマスターすると下記のような画面をブラウザーに表示できる能力が身につきます。

その3テキスト

Ws000005

| | コメント (0) | トラックバック (0)

2010年1月24日 (日)

脱C/Sプログラマー計画 その2-4

2-3からの続き

■サーバサイドの受信結果を表示するPHP
いよいよPHPのコードを書きます。
画面に出力するためにHTMLコードの中でPHPのコードを書きます。
Ws000020

<?phpと?>の間にコーディングされたコードがPHPになります。
ここで重要なのが$_POST[‘エレメント名’]です。連想配列といいます。サーバへPOSTされた値が設定されていてかつグローバルに参照できます。
PHPのコード内変数は$変数名で定義され参照できます。
$_POST配列から$userと$passに値を代入して、print関数で出力します。文字列を連結するためには、print関数の場合’.’ドットを使います。HTMLなので改行コードを文字列の最後に付けます
<br/>。echoもブラウザーへ文字列を出力しますが、決定的な違いは、echoは実行結果に戻り値がありません、printは戻り値があります。また複数の文字を出力する場合、echoは’,’カンマで区切ります。

ファイル名をsample2.phpでC:/WWW/htdocsに保存します。

さてこれですべてのコードの準備ができたので、実行してみましょう。

■コード実行

Ws000021

ブラウザーのURLへhttp://localhost/を入力して上記画面を表示させます。
マウスでsample2.htmlをクリックします。
Ws000022

ログイン画面が表示されます。
フォーカスはUserのテキストボックスにありますか?
なにも入力しない状態でLoginボタンをクリックしてみてください。
Ws000023

Userを入力してくださいとエラーメッセージが表示されます。
何か文字をUserに入力後Enterキーを押下してください。
Ws000024

当然パスワードを入力していないのでエラーメッセージが表示されます。OKをクリックすると下記画面のようにPasswordのテキストボックスにフォーカスがあります。

Ws000025

それではパスワードを入力してLoginボタンをクリックしてみましょう

Ws000026

ブラウザーに下記のように入力したUserとPasswordが表示されればOKです。

Ws000027

次回はMySQLというDBシステムに対して問い合わせ処理を行う画面を作成する予定です。

このその2のテキストをPDF化しました。ご自由にダウンロードしてお使いください。

脱C/Sプログラマー計画第2回テキスト

| | コメント (0) | トラックバック (0)

脱C/Sプログラマー計画 その2-3

2-2からの続き

■キー入力制御JavaScript

3つの関数を作成します。
1.FirstFocus関数  Pageをロードした時に最初のコントロールにフォーカス設定。
2.NextFocus関数   テキストボックスなどでEnterキーを入力した時に次のコントロールにフォーカス設定。
3.CheckSubmit関数 入力値のチェックを行い、エラーのない場合、サーバへ入力値をsubmitします。

□FirstFocus()
JavaScriptについて詳細は説明しません。ネット検索すればいくらでも参考になるサイトを発見できます。
Ws000016_2

formsオブジェクトのform1のエレメントの0番目にフォーカスを設定するコーディングです。
JavaScriptの構造は下記のようになります。

Function 関数名 (引数1,引数2、・・・) {
    スクリプト1;
    スクリプト2;
    スクリプト3;
    続く…
}

スクリプトの最後が;で終わるコーディングはC系の言語と同じでCプログラマーであれば簡単に習得可能です。
return 戻り値;を関数内にコーディングすることで戻り値を設定することも可能です。

□NextFocus()

Ws000018

eventオブジェクトのkeyCodeプロパティからEnterキー(Chr(13))が押されたかをif文で判断します。
自分のエレメント番号を引数で受け取り、自番号の次番号のエレメントへフォーカスを設定します。

□CheckSubmit()
Ws000019 

19行目varでformオブジェクトの宣言を短くします。
コーディング内で何度も参照する変数は短くしたほうがコーディングしやすくなります。
同じように20行目から21行目の宣言では、フォームの二つのテキストボックスの値を変数に代入しています。
このuserとpassはHTMLでテキストボックスにnameプロパティで指定したエレメント名です。
次にuserとpassの入力がブランクの場合にエラーメッセージを表示してエラーのあるエレメントにフォーカスを設定する判定を入れます。エラーメッセージはalertで出力します。(24,27行目)
いずれのテキストボックスもブランクでない場合、submit関数でサーバへ入力値をPOSTします。

ファイル名をkeyhandler.jsでC:/WWW/htdocsに保存します。

ここまででクライアント側で処理するスクリプトの準備が終わりました。一般の企業で必要なオンラインシステムの画面を作成する上で必要な基本はこの内容で取得できます。後は枝葉を学んでいけばいいのです。

2-4へ続く...

| | コメント (0) | トラックバック (0)

脱C/Sプログラマー計画 その2-2

  2-1からの続き

たとえばよく見かける例としてGoogleの地図情報を自分のコンテンツで利用して提供するサービスです。
これはあらたに地図データを作成する必要はなく、自分のコンテンツ内でGoogleのコンテンツにAPIを使用して問い合わせを行い、結果を自分のコンテンツに表示させるだけです。つまり世界中のWebサーバへ問い合わせを行い、情報収集結果を取得する事ができるのです。キーワードはURL(Uniform Resource Locator)です。

【コラム PHPが実行できない】
よくApach+PHPで"http://localhost/XXXX.php"は実行できるのですが、HTMLで入力した結果をPOSTして別のPHPを実行させると「真っ白画面」、「PHPコードがそのままブラウザーに表示される」などの現象Q&Aを見かけます。 "http://localhost/XXX.php"が正常に実行できるのであれば、コードに誤りがないかぎり確実にPHPソースは動作します。localhost のURLでPHPが動作しているということは、Apachのサーバが正常にPHPのモジュールをロードできているからです。上記の現象はApachがPOSTされた結果のPHPを処理していません。

Ws000007

ApachはWebサーバです。URLを正しく指定しないとうまく処理できません。最初のHTMLはエクスプローから起動していませんか?
URLの入力にC:\WWW\htdocs\sample2.htmlとディレクトリーパスが表示されていた場合、これはURLではありません。Apachでは処理できません。Apachはhtt://サーバ/で入力された場合、その指定したURLのコンテンツを実行します。つまり起動にはURLを指定する必要があります。

■ログイン画面を作る

さてクライアントサイドのログイン画面を作成します。
HTMLについての詳細な情報はネット上で検索をして調べてください。
各タグセクションについて解説します。

□<head></head>
ヘッダーではページタイトルとキー制御のJavaScriptの指定を行います。
Ws000008

Scriptに外部のJavaScriptを指定しています。これはキー入力制御を共通で処理するようにするためです。ここに直接コーディングすることも可能ですが、それですとクライアント側にしょぼいコードを公開することになるので止めます。

□<body>
Ws000009_2

Pageが初期ロードされた時の処理をonloadイベントで指定します。これは<head>で指定したJacaScriptの関数を指定します。(FirstFocus())
他のbody属性指定はページのカラーを指定しています。
スタイルシートを利用してもよいかもしれません。
私のコーディングスタイルですが、たくさんの属性を指定する場合、<>の>を改行します。コードの見易さもありますが、この講座の最後の方でExcelのVBAを利用した自動フォーム作成ではこの属性1つに1行というコードの記述方法が重要になってきます。

□<body>内の<script>

Ws000011_2

<head>で指定したJavaScriptで記述したキー入力制御関数をコーディングします。JavaScriptは後述で説明します。

□<form>

Ws000012

formの名前を指定します。デフォルトでform1にします。これはJavaScriptの関数で利用する共通の名前です。actionプロパティに画面のボタンがクリックされた時に処理するPHPを指定します。
methodプロパティにはサーバに対する動作を指定します。サーバへ向けて上り(送信)ですから”post”を指定します。

□<table></table>
入力用テキストボックスと入力した結果をサーバへPOSTするためのボタンのコントロールを定義します。

1.User入力

formの名前を指定します。デフォルトでform1にします。これはJavaScriptの関数で利用する共通の名前です。actionプロパティに画面のボタンがクリックされた時に処理するPHPを指定します。
methodプロパティにはサーバに対する動作を指定します。サーバへ向けて上り(送信)ですから”post”を指定します。

□<table></table>
入力用テキストボックスと入力した結果をサーバへPOSTするためのボタンのコントロールを定義します。

1.User入力

Ws000013_2

ログイン画面なのでオートコンプリートをOFFにします。
また入力長を制限するためmaxlengthで入力テキストの数を指定します。onkeydownイベントではEnterキーを入力した場合に次のコントロールへフォーカスが移動する制御を指定します。これもJavaScriptで作成した関数NextFocus()を指定します。
NextFocus(this)のthisはフォームオブジェクトインスタンスを関数へ引継ぎます。onfocusイベントはこのテキストボックスにフォーカスが設定された場合の動作を指定しています。this.select()はテキストボックスに文字が入力されている場合、全選択します。

2.Password入力
Ws000014

パスワード用のテキストボックスのため入力文字をマスクします。typeプロパティにpasswordを指定します。
後の指定はUserのテキストボックスと同じです。

3.Loginボタン
Ws000015_2

Typeにbuttonを指定します。
Onclikイベントにボタンをクリックした時に実行するJavaScriptの関数を指定します。(CheckSubmit())

以上でHTMLのコードが完成しました。
ファイル名をsample2.htmlでc:/WWW/htdocsに保存します。(apachのコンテンツを格納するディレクトリー)
次にキー制御のJavaScriptをコーディングします。

2-3へ続く...

| | コメント (0) | トラックバック (0)

脱C/Sプログラマー計画 その2-1

■メニュー

今回は3つのコードを書きます。

1.クライアントサイドのログインHTML    sample2.html
2.画面キー入力制御JavaScript          keyhandler.js 
3.サーバサイドの受信結果を表示するPHP sample2.php

それぞれのソースは各番号のソース名にリンクしていますので、ダウンロードして内容を確認の上、自由にお使いください。※ファイル名で右クリックして対象をファイルに保存を選択して保存してください。

3つのコードでブラウザーにログイン画面を表示して、入力した結果をブラウザーに表示するまでの手順を紹介します。

もちろん色々な手順があります。ツールを使用して作成するのがもっとも簡単なように思えますが、一番単純な方法、エディターやメモ帳とExcelだけでWebシステムを組めれば、どんな環境でもこのアプローチで問題を解決できるはずです。

私を含めて長年C/S型のシステム開発従事してきた開発者にとって一番得意な開発手法に持ち込めれば、ずいぶんと理解しやすいはずです。

     プラットホーム非依存

WebサーバにApachを選択した時点で、完全にC/Sシステムというプラットーホーム依存システムから卒業できます。もちろんサーバのApachWindowsまたはUnixOS上で稼動させる必要がありますが、それを使用するクライアントがどのOSからでもアクセスが可能となった時点でプラットホーム非依存となります。

いままで特定のOSに依存していたプログラムは世界中の色々なブラウザーの上で稼動することが可能となります。

     WebシステムとC/Sシステムの違い

もちろん開発言語や開発のスタイルに違いはあります、決定的な違い、それはC/Sシステムではディレクトリーに格納したプログラムやファイルを指定して処理を実行します。(Fig3)一方のWebシステムは処理させるHTMLJavaPHPなどのリソースはブラザーにURLを指定することで処理を行うところに決定的な違いがあります。(Fig4)Ws000000_3

(Fig1)

上記のアドレスhttp://localhost/を指定することでApachでドキュメントフォルダーに指定したディレクトリーに格納されたリソースが表示されます。(私の場合はC:/WWW/htdocs

前回作成したphpexec.vbsを参照すると、エクスプロラーから起動したディレクトリー付のPHPソースからファイル名を取り出して、

URLhttp://localhost/と組み合わせてブラウザーを起動させています。(18行目)

Ws000004

Ws000000

(fig3)

Ws000005

(Fig4)

WebシステムではURLによって参照するWebのコンテンツがそれぞれ複雑に絡み合った状態で利用することができます。

2-2へ続く...

| | コメント (0) | トラックバック (0)

2010年1月22日 (金)

脱C/Sプログラマー計画 その1

■前提

  この内容を理解するには
  下記のモジュールをWindows XP SP2以上のOSにインストールしなければ
  なりません。(2010/01/22)
  Apach2
apache_2.2.14-win32-x86-no_ssl.msi
  PHP     php-5.3.1-Win32-VC9-x86.msi
  インストールhttpd.confとphp.iniについては下記URLが最高でしょう。
  Apach
http://www.phppro.jp/phpmanual/install_win32_1.php#apache
  PHP    http://www.phppro.jp/phpmanual/install_win32_2.php

■PHPは簡単

    Cプログラマーなら
     <?php
        ~ C ミックス VB 同等のコーディング
     ?>
    でなんとプログラムが動きます。

    サーバーサイドとかクライアントサイドなんか気にしない。
    C/Sプログラマーだからしょうがないか(^◇^)
    とりあえずブラウザーから検索文字を入力して、DB(MySQL)を検索して
    結果をブラウザーに表示するまでを説明しようよとしています。
    無駄な知識は極力説明しません。疑問に思った事は逆に自分で調べる。
    といういい加減な説明です。
    この内容で何か問題が発生し場合、ご容赦をお願いいたします。
    一切当方で責任を負いかねます。あくまでも自己責任でお願いします。

■サンプル1

    おきまりの Hollow Worldをローカルブラウザーに表示してみましょう。

    <?php
        $var = "Hollow World";
        echo $var;
    ?>

    テキストエディター(メモ帳など)を起動して上記をコピペーして
    ファイル名をsample1.phpで保存してください。
    ちなみに私はPHPのドキュメントはc:/WWW/htpdocs/以下に格納しています。
    (通常ディレクトリーはWIN系は\で記述しますが/で記載します。)
    Apachのhttpd.confに定義してあります。その前提で説明していきます。

    そしてブラウザーを起動して、URLに http://localhost/sample1.php
    入力するとなんと下記のようにブラウザに表示されます。
    ピピンときましたか?

Sample1_2

    実際、コーディングしたPHPを都度ブラウザーにURL入力して実行する
    のは効率的でないので、エクスプローラーからPHPを即実行な仕掛を
    作ります。

■PHP起動バッチとWSHでPHP起動ラッパーVBS作成

    【バッチ】
     テキストエディターを起動してコーディング内容をコピーペの後、
    下記名前でc:/WWW/htpdocs/に保存します。

     名前 : phpexec.bat

     コーディング : cscript //nologo phpexec.vbs %1

     【WSH】
      phpをブラウザー実行するラッパーを作成します。
      作成方法はバッチと同じ。

      名前 : phpexec.vbs

      コーディング :
      ↓------------------------------------------↓
      Option Explicit

      Dim args
      Dim objFSO
      Dim strFile
      Dim strURL
      Dim objShell

      Set args = WScript.Arguments

      If args.Count <> 1 Then
          WScript.Echo "引数が正しくありません。"
          WScript.Quit()
      End If

      Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
      strFile =  objFSO.GetFileName(args(0))
      strURL  =  "
http://localhost/" & strFile

      WScript.Echo strURL

      Set objShell = CreateObject("Wscript.Shell")
      objShell.Run(strURL)
      ↑------------------------------------------↑

      この二つのファイルを作成したらPHPファイルのファイル関連付けを
      上記のphpexec.batに行います。

      エクスプローラーでsample1.phpを選択⇒マウス右
      ⇒プロパティ⇒変更⇒参照でphpexec.batを選択します。

      これでエクスプローラーでsample1.phpをダブルクリックすると
      DOSプロンプト画面が表示されてさきほどブラウザーでURLを入力
      して表示した同じHollow Worldが表示されます。

     これで常にPHPはエクスプローラーから即実行可能になります。

     もちろんApachのサービスが動いている必要があります。

■謝辞
      ApachとPHPの開発に携わるすべての開発者に感謝します。

| | コメント (0) | トラックバック (0)

2010年1月17日 (日)

ブルースを忘れる頃 2-1

 第2章 ジョニーD

 1.漂流

 1889年11月11日、米国に42番目の州となるワシントン州が制定された。
 この制定に東洋から来た男が関わったとは史実にはない。
 ワシント州は合衆国の北西部、カナダと隣接する位置の州である。
 ワシントンD.Cとまったく反対側に位置している。
 ともにアメリカ初代大統領ジョージ・ワシントンに由来する。
 カナディアンロッキーに源を発するコロンビア川が流れる肥沃な土地は、北アメリカで最初に人が住んだ多くの考古学的資料を残している。
 ピュージェット湾を一望できる高台から一羽の白頭鷲《はくとうわし》が翼を広げてゆっくり海水で満たされた河口へ去っていった。
 その下で25フィートほどのフィッシングーボートのとも縄を木杭《きぐい》から外している漁師がいた。
 マイク・ハワード・ボルネンコの祖先はアイルランドから遣ってきた。
 敬虔な父母の元にカトリックの洗礼を受け、この地で暮らす漁師であった。
 年齢はまだ20歳を超えたばかりだ。
 前年にこの土地で起きたインディアンとの争いで父親のビルは左腕を失った。
 漁師としては致命的だ。
 マイクはそれまで港沿いにあるイギリスからの入植者の初等教育の学校の教師をしていた。ハイスクールを卒業する時に二つの選択肢があった。
 ひとつはノーザンパシフィック鉄道が新しく敷設している鉄道建設の技師の補助、そしてもうひとつは学校からの推薦でかの学校の教師の口がマイクにはあった。
 鉄道事業の将来性についてマイクはあまり気にとめていなかった。
 どちらかと言えば、自宅から馬で通える働き口を選んだようなものだ。
 しかし、通いだしてわずか数ヶ月後にマイクは職を辞する決心をした。
 インディアンとの漁地争いで父が倒れた時、マイクは漁師を引き継いだ。
 教師自体に興味を失っていたからだ。
 偉大なコロンビア川にフィッシングボートを浮かべる漁師の仕事が性に合っていた。
 三角の帆が風でこれでもかといいたげに膨らんでいた。
 風の無い場合は櫂《かい》を漕ぎ進むこともできる。
 誰気兼ねなく、早朝に漁師小屋から網を引きずり出し、昼までかかって川を浚《さら》い、港にサケやマスを上げ、仲買人へ値段を交渉する。
 季節になるとコロンビア川には産卵のために遡上《そじょう》した数百万匹のサケで溢れかえる。
 永遠に続くと思われる広大な川面にボートを滑らせる時、マイクは生を実感する。
 この3日間酷い嵐が続いた。
 天地創造を思わせるような雷鳴がコロンビア川流域を襲い、激しい風が次々と老木を押し倒した。暗天は決して晴れる事を予感させないほど黒く、わずかな明かりさえ与えてくれなかった。
 この流域は川が時々氾濫する。
 何度も川に掛かった橋が押し流され、流域沿いの家々が呑み込まれてきた。
 それにもかかわらずインディアンは幾代に渡り、この土地に生きづいてきた。
 それを上回る恵みをこの川は与え続けてくれる。
 彼らの言葉を借りれば、『神の怒り』なのかもしれないとマイクは嵐が続くとそう思うことがある。
 怒りが解けるとまるでそれが嘘であったように一点の雲も無い青空がコロンビア川の上にあるだけだ。
 久々の漁である。
 嵐の間もマイクは毎日漁師小屋に通い、網の補修や漁具を整備してきた。
 小屋の中には鋳物の薪ストーブがある。
 流れ着いた流木を集め、ストーブに合った長さに鉈《なた》で割り、小屋の軒下に積む。出漁できない日は、コロンビア川を望む窓の横に置かれたロッキングチェアーで過ごす。
 この季節は特に水が冷たく、トナカイ皮のヤッケを着込んで、同じ皮でなめした手袋を嵌《は》めて櫂を漕いでいた。
 さきほどの白頭鷲が川面すれすれにボートの横を飛び去っていった。
 マイクは鷲が獲物を発見したために急降下したと考えた。
 しかしそこには木を筏《いかだ》に組んだ漂流物がゆっくりと漂っていた。
 マイクは筏に人の倒れている姿を確認できた。
 櫂《かい》を川を横切るように漕ぎ出した。

 筏に縛り付けられた男がぼんやりと空を眺めていた。
 空をぐるぐると白頭鷲が旋回している。

 「そこの御仁、わしの縄を解いてくれぬか」
 マイクの聞いた事のない言葉だった。
 だがその縛り付けられている男が助けを求めている事は分かった。
 「Is it safe?」《大丈夫か》マイクは大声で叫んだ。
 マイクはあわてて櫂を漕ぎ、コロンビア川の流れを横切った。
 櫂の先で筏をボードに引き寄せ、筏の両端の丸太にロープでボートから離れないようにしっかり結わえた。
 インディアンだと思った。しかし、彫りの浅い顔立ちに黒々とした眉毛、かっと見開いた眼はどこか違う部族の者とも思えた。
 200を超える部族が存在することをマイクはよく知っていた。
 マイクはフィッシングナイフで男を縛り付けていたロープを解くと男の手を取り、ボートに揚げた。
「お手を煩わす」と男が話したが、もちろんマイクにその意味は通じない。
「Is it an Indian?」《インディアンか》
「おいはどうやらアメリカに辿り着けたらしい」
 マイクにも『アメリカ』と聞き分けられた。
 長いコートのような衣類を着、真中に平べったい紐をベルトにしていた。
 布製の長靴に似た靴を履いている。
 もちろんマイクはそれまでもこれからも生きている間に日本人を見る機会がなかったかもしれない。
 老人とは言わないが、若くもないようだ。
 インディアンと同じく年齢不詳に思える。
 彼にワインボトルに入った水をマイクは勧めた。
「ああ、うまいごたる」と男は大きな声で答えた。
 男はボートの舳先《へさき》に立つとコロンビア川を一望した。
「絶景たい、はは」と大声で何か叫んでいた。
 はるか彼方にロッキーの山々が雪に覆われていた。

にほんブログ村 小説ブログへ

| | コメント (0) | トラックバック (0)

2010年1月 3日 (日)

ブルースを忘れる頃 1-5

 5.日記

 午後6時

 錦江湾の夜景を一望するホテルの窓から迎若菜《むかえわかな》はぼんやりとこれからの夜の帳《とばり》を想像するとじっとしていられなかった。
 その時、ホテルの廊下を黒服に包まれたサングラスの二人組が若菜の部屋の様子を伺ってるとも知らずにいた。
 明らかにその筋の男たちだ。
 短く刈り上げた髪、しなかな身のこなし、獣のような動きでドアの前にたった。
 一人の男が電子チップを埋め込んだカードを胸から取り出した。
 カードロック式のドアだ。男たちはホテルのマスターカードを手に入れていた。
 静かにドアが開いた。
 真っ白い陶磁器でできたバスの中に若菜はいた。
 バスルームのドアは開けたままだった。
 軽音楽が有線から流れていた。
 何かの物音が聞こえた。
 振り返る暇が無かった。
 若菜の頭は何か押し付けられバスタブに沈められた。
 裸体のまま若菜はシーツに包まれてホテルから拉致された。
「やりましたね」
 ベンツのトランクに若菜を放り込むと男たちは急発進してホテルを後にした。
「これでしこたま金を手にできる」
 助手席に収まった一人が胸のホルスターからS&W社製M500リボルバーを取り出した。弾倉を回すと再びホルスターに戻した。
「さっさと始末しようぜ」
「ああ矢吹のところで面通ししてからな」
「しかし上田はいなかった。女だけだった」
「ああ、ホテルのラウンジでもいったのか」
「後で面倒な事になりゃしないか」
「大丈夫だ、俺たちは金を受け取れば、そのまま中国へ高飛びさ」
 彼らは誤った誘拐を行ったのを知らなかった。

 例によって若菜は勝手に部屋を変えていた。
 お嬢様育ちには困ったものだ。
 フロントで海が見える部屋と変えるように粘った。
 ホテルのフロントマンは困惑したが、そこにちょうど到着した二人連れが申し出た。
「よろしければ、私たちの予約は確か海の見える部屋です」
 真っ白いミニのワンピース姿の女だった。
 若菜とあまり年齢が違いがないように見えた。
 少し上ぐらいかしらと思った。
 若菜はどこかで見た顔だと思ったが、その申し出を快く受け入れた。
「ありがとうございます。婚前旅行で来ちゃいました」
 とあっけらかんと若菜は話した。
「上田様、よろしいですか」
 ロマンスグレーで皮製のロングコートを着た男が若菜を一度見た。
「ああ、このお嬢さんの部屋と取り替えてください」
 50代前後だろうかオールバックバックに撫で付けた髪、艶やかな頬、静かな笑い、どこか若菜の親父に似た匂いを感じた。
「それでは青木様」
 ようやくフロントマンは若菜にカードキーを渡した。
 青木とは僕の苗字である。
 青木隆治、これが僕の本名だ。
 それはさておき、そのフロントマンは午後5時で明けだった。
 急いで帰宅しなければならない用事があった。
 代わりに立ったフロントマンは部屋が変更になったことを知らなかった。
 二人連れの男たちが遣ってきた。
 待ち合わせをしていると言った。
 部屋番号を聞いた。
 フロントマンは液晶ディスプレーの細かな文字を目を細めてみた。
 かなり老眼が進んでいた。
 今年還暦を迎えるフロントマンはようやく上田の名前を確認した。
「8階の8511号室です」答えた途端だった。
 一人がカウンター越しに何か強烈な刺激臭のするハンカチでフロントマンの口を覆った。
 フロントマンはそのままカウンターにうつ伏せに崩れ落ちた。
 そんな経緯で若菜がベンツのトランクに納まる事になった。

 同刻

 女は佐々木美樹といった。
 かなりいい女だ。
 しかし残念ながら、左手の薬指にエンゲージリングが輝いている。
 僕は人妻を基本的に相手にしない、危険には近づかない主義だ。
「青木といいます」
 と名乗ると女はさもそうだという顔付で私を改めて眺めた。
「まああなたが隆治さん」
「隆治です」
「父がよく話してました」
「いつも叱られてばかりいましたから」と私は恐縮するように頭を下げた。
 唐沢のところへ拾われたのは小僧の頃の話だ。
 それ以来佐々木とは会っていない。
 あまりこの土地で佐々木は付き合いをやっていなかったようだ。
 もちろん極道から足を洗ってから久しい。
 まばらな弔問客を余所《よそ》に美樹は奥の八畳ほどの喪主用控室に案内した。
 座卓を間に差し向かえで美樹は茶を煎れてくれた。
「私が小さき時、父は唐沢さんのところから足を洗ってくれました。この土地で落ち着いた生き方をしたいと、植木屋を始めました」
 確かに唐沢邸の庭園はずっと佐々木が手間隙を掛けていたのを思い出した。
「そうですか植木屋を」
 一瞬美樹は笑ったように思えた。
「私もそうだとずっと思ってきました」
「思ってきた・・」
「父には物後心付いた時からある物を探してきたようなのです」
「ある物・・」
「親戚もほとんど父の若い頃の事があって寄り付きませんでした」
 美樹は部屋の片隅に置いていた風呂敷包みを寄せ、中から古びた書籍を取り出した。
「佐々木には形見分けするような物はありません、これを見て頂きたいのです」
 それは赤茶けた表紙であら紐で閉じられた古書のようであった。
 裏返してみるとかなり判別するのが難しいが達筆な筆文字が綴られている。
『南州』と僕にはそう読めた。
「西郷隆盛・・」と僕はそう思った。
「ええ、西後どんの号です、よくご存知で」
 美樹は不思議そうな顔で、
「どうぞお手に取って」
 僕は面々と綴られた筆文字を読む能力は無かった。
 ただ年月日が記入されているのは分かった。
「日記ですか」
「はいそうです」
「このような達筆な文字を読めません、美樹さんはいかがですか」
「私は郷土史の学芸員をしています」
「ということは何が書かれているかわかるということですか」
「はい、もしこれが本物でしたら、歴史の教科書を変更しなければなりません」
「歴史」
「ええ、西後どんの小さい時から明治政府誕生までの自筆による伝記です」
「本人自ら書いた」
「はい、そいうことになります」
「たいへん貴重な日記ということですか」
 僕は空港で購入した西後のプロフィールの中に、成人する前に諍《いさか》いで怪我をした下りを思い出していた。確かその時を境に西郷は学問の道に精進し始めたと書かれていた。
「ええ、最後の年号を見てください」
 裏表紙を捲《めく》り、その年号を見ても僕にはピーンとくるものは無かった。
「明治二十二年3月4日とあります」
「それが・・」
「西南戦争の十二年後です」
 僕にもその意味する事がわかった。
「つまり、西南戦争で自決したはずの西郷が十二年後に日記を認《したた》めているということですね」
「はい」
「私は父の遺品を整理していてこれを発見しました」
「父が何を探し続けたのか、この日記によって始めて知りました」
「それまではご存知なかった」
 何か美樹はじっと下に視線をやると、
「はい、父とは別に暮らしていましたから」と強調した。
「父がこの土地にやってきた意味がここに記されていました」
「薩摩の隠し財宝」
「薩摩の・・」

 僕は『日本幻影図鑑』を美樹に見せるべきか躊躇していた。
 この図鑑と日記はどう関係するのか、あらためて唐沢のおじきに問い詰める必要がありそうだ。
 本来渡すべき佐々木はすでにこの世にいなかった。
 残った美樹だけが何か熱心に話していたが、僕は手に入れてはいけないナンバー2を手に入れてしまった事に困惑していた。

にほんブログ村 小説ブログへ

| | コメント (0) | トラックバック (0)

« 2009年12月 | トップページ | 2010年6月 »