ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

XMLからJava(以外もOK)自動生成 その1:JAXP(DOM)を使ってXMLのタグ名を出す

2005-04-16 22:27:06 | JavaとWeb
 前のブログで書いた「これから数回に

わけて、JAXPからXMLからJavaに変換するプログラムのお勉強を公開したいと思います。」についてです。
 なお、考えてみたら、別にJavaソースじゃなくっても、XMLからXMLスキーマやRelax,DTDへの変換でも、あるいは、DBのテーブル作成のDDLの自動生成でも、このやりかたでOKです。
 ではまず、なにを入力して、なにを出力するかについてです。




入力について

 以下のようなXMLを入力とします(どんなXMLの形式かについては、後日細かく説明します。簡単に言うと、クラス名がトップのタグ、その子供にクラスの中の変数があるようなもの。テーブル定義の場合、テーブル名がトップのタグ、カラム名がその子供にある場合です)。

<?xml version="1.0" encoding="Shift_JIS" ?>
<testClass extends="absClass">
	<komoku1>9999</komoku1>
	<komoku2 arrays="*">XXX</komoku2>
	<komoku3 type="long" />
</testClass>





出力について

以下のようなJavaプログラム(クラス)を出すことを考えます。
setterやgetterも出せることも考えます。


public class testClass extends absClass
{
	int		komoku1;
	String[]	komoku2;
	long		komoku3;
}



この入力と出力にかんしては、最終的にこういうものを出すという話です。




今回のお題


 今回の課題は、以下のとおりです。

■■ 課題
DOMを使って、入力のファイルを読み込み、そのタグ名をすべて表示しなさい


■■ プログラム

以下のとおりです。
JavaでHelloWorld XML(DOM)編を参考にさせてもらいました。

import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class xmlReadTest {

	static	String	inFname = "testClass.xml";	//	入力ファイル

	public static void main(String[] args) {

		try
		{
			//----------------------------------------------//
			//	入力ファイルを読み込み		  //
			//----------------------------------------------//
		      	// 入力ファイルを読み込み、Documentオブジェクトを取得
			// (下の行、1行で書きたいんだけど、長いので途中で切った)
		      	Document doc = DocumentBuilderFactory.newInstance().
					  newDocumentBuilder().parse(new File(inFname));


			//----------------------------------------------//
		      	// クラス名となる、ルート要素を取得して表示	  //
			//----------------------------------------------//
		      	Element 	root = doc.getDocumentElement();
		      	System.out.println(root.getNodeName());

			//----------------------------------------------//
		      	// 子ノードを取得して、項目の表示		  //
			//----------------------------------------------//
			//	子ノード全部取得してリストへ
		      	NodeList childList = root.getChildNodes();
		      	for (int i = 0 ; i < childList.getLength();i++)
		      	{
				//	子ノード1個取り出し
		      		Node oneItem = childList.item(i);

				//	エレメントのとき(改行文字のテキストがありえるので)
		      		if ( oneItem.getNodeType() == Node.ELEMENT_NODE )
		      		{
					//	出力だぴょ
		      			System.out.println(oneItem.getNodeName());
		      		}
		      	}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}


■■ 結果
こんな感じ


testClass
komoku1
komoku2
komoku3


■■ 次回は
パラメータと値のとりかた。
いつやるか未定。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

XMLからJavaに変換する話とか、JAX何とかのまとめとか(JAXPとJAXBの違いとか)

2005-04-16 09:43:10 | JavaとWeb
 いきなりですが、JAXなんとかとつく(JAXPとかJAXBとか)ののまとめです。
 @ITのここのページに載ってました。
 結局、こうなるみたい。

JAXなんとかのまとめ

JAXPXML文書を読み書き
JAXMSOAPのメッセージ用API
JAXBXMLとJavaのバインディング
JAXRUDDIのようなXMLレジストリアクセスAPI
JAX-RPCWebサービスを構築するためのAPI

*バインディング:「オブジェクトをマッピング」するって、具体的にはXMLとJavaを対応づける

で、表題のXMLからJavaに変換するには、普通JAXBの話になる。




JAXBでJavaのクラスを作るにはXMLのスキーマ必要

 で、JAXBのはなし。
 JAXBについては、ここに書かれているように、

XMLのスキーマ構造からJavaのクラスに変換するxjc
XMLのインスタンスとJavaのインスタンス間の変換を行うマーシャル・アンマーシャル

になる(そのページの図がわかりやすいと思います)

そのため、たとえば、開発のときにドキュメントからJavaのクラスを自動生成するために、JAXBを使おうとすると、ドキュメントからXMLのスキーマ構造に変換して、(xjcを使って)Javaのクラスを作ることになる。
 ところが、XMLのスキーマ構造である、XMLSchemaとか、DTDとか(Relaxも使えるのかな?)とかは、書くのがめんどっちい。
 目からビームが出るほどだ(でないでない)

 なんで、気軽にできない。
 とくに、手書きで書いてもらうことなんてできない。
 だから、ドキュメントからJavaで自動変換してもらうのは、どーなのどーなのと思ってた。




JAXPは、XMLのインスタンスを読み込み、展開する


 でも、ちょっとまてよ!と気づいた。

 JAXPを使えば、XMLのスキーマがなくても、インスタンスだけ読み込んで、そのままDOMとして展開できる。
 っていうことは、

(1)JAXPを使ってXML文書をDOMで読み込み
(2)読み込んだ内容をもとに、ファイル入出力で、JAVAのクラスを書き出せばいいじゃん


 そっかそっか、きっと、みんな、そーやってるのね(^^;)




 でも、ウィリアムのいたずら、JavaでDOMをつかったことないんですう。
 Access VBAなんかだとあるけど(その成果はこちら
 つーことで、一度にはできないので(べつに、ネタを出し渋っているわけではない。いくら、本家が、乙部綾子さんネタで、何度も分けて書いてるからって、ここもそれを狙って。。。??いないっす)、これから数回にわけて、JAXPからXMLからJavaに変換するプログラムのお勉強を公開したいと思います。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

流通XML-EDIのJava化計画:その3:統一伝票の想定モデルと流通XML-EDIの問題点

2005-04-15 12:37:50 | 業務のモデル化
 さて、昨日の話。統一伝票は、小売と卸間で、今実際使われているものなので(多分)、これと流通XML-EDIが合うかどうか、見てみました。

 はい。合わないです。

流通XML-EDIの想定するモデルと、統一伝票の想定するモデルで合わなさそうなところ
・統一伝票では、問屋(卸)間、さらに工場までも含めているので、直送という概念があります。つまり、ものの流れとお金の流れは一致しません。流通XML-EDIのメッセージでは、そういうものは、たぶん、表現できなさそう。
・統一伝票では、返品の伝票があります。流通XML-EDIには、返品はない?


 ってかんじで、あわないんです。
 実際に、小売のシステム、卸のシステムを開発するとなると、現状の伝票の流れを元にモデル化するか、統一伝票の流れをもとにモデル化するということになると思います。
 そうすると、流通XML-EDIで考えられているモデルとかなりずれてくると思います。

 なので、流通XML-EDIをもとに考えられたクラスがJavaで出来ていて、それを実際のモデルに合わせる際にextendsするのであれば、できそうだし、そういう、フレームワークとしてとらえるのであれば、流通XML-EDIは役に立つと思います。

 でも、流通XML-EDIって、システムとしてできてるのよね。
 これに手を入れて修正するって言うのは。。1から作り直したほうが早かったりして(^^;)
 (だって、返品の「業務」ロジックを考えないといけなくなっちゃうんですよ。これ採用したら!)




 なお、統一伝票をJavaで表現する場合、この伝票自体を1つのクラスにしてしまえばよさそうですが、流通XML-EDIは、交換する6種類のXMLデータに対して1つずつクラスを定義したほうがいいと思います。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Kondaraを継承して「ももんが」Linuxになってたのね!

2005-04-15 11:58:13 | Linux
 ウィリアムのいたずらは、ここ数年(3、4年位かな)Linuxからはなれていたので、しらなかったんですけど、Kondaraを継承して、momongaになってるんですね。

 いや、本家のおばかブログを書いていて、Turbo Linuxに、乙部綾子さんの写真集をつけたら!ってかいたところで、
 「そうそう、デジタルファクトリ(昔Kondara Linuxの販売元だった)、売り場にテレビ(ビデオ再生用)いれて、やってたけなあ」
 と思い、「乙部さんのビデオ広告でTurboLinuxを売ったら。。」って書こうと思って、デジタルファクトリしらべたら??

  ないじゃん

 えーっと、じゃあ、Kondaraは

  ないじゃん。

 えーっとえーっと。。。っていうんで、しらべて行き着いたのが、このページ
Kondaraの流れを継ぐMomonga Linux 1がリリース -プロジェクト発足から2年

 なるほどー。ももんがって、こんだらのことかあ。。。
 このへんのいきさつを知らなかったので、「ももんがってなに?」とおもってた。




 で、ももんがのホームページをみたら、

momonga projectで開発するツールに「パッケージ更新ツール」おお、これできると便利だよね。
 で、どうなったんだろう。。。これ??
 つーか、どんなのだか、詳細がわからないのであった。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

VBAの本をたくさん書いてる大村あつしさんって、ジャパネットたかたの社長に似てない??

2005-04-15 00:36:26 | Weblog
どーでもいい話なんだけど、

VBAの本を、たくさん書いてる、「大村あつし」さんって、
ジャパネットたかたの社長に似てない??

比較写真
大村あつしさんは、ここ
ジャパネットたかたの高田社長は、ここ

いや、本当に、どうでもいい話なんだけどね(^^;)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

流通XML-EDIのJAVA化計画:その2:昨日のクラスとXML-EDIのメッセージと統一伝票の関係

2005-04-14 15:10:27 | 業務のモデル化
流通XML-EDIについて、昨日、クラスを定義したので(今日修正しました。理由は、この記事の本文中にあります)。今日は、以下のテーマについて

(今日のお題)

・肝心の流通XML-EDIには、どんな種類があるか
・XMLで定義しているのはなにか?
・そのクラスとどのようにかかわってくるのか?
・同じような小売と卸の決め事に統一伝票があるが、それはどうかかわるのか?


について説明します。




肝心の流通XML-EDIには、どんな種類があるか


 6つのメッセージ交換をXMLで定義しています。
 その定義しているものは、以下のとおりです。
(概説書P14の図をそのまままとめています)
メッセージ交換名小売からみると卸からみると
(1)商品マスタ商品情報(基本)の入力商品情報(基本)の出力
(2)発注発注の出力受注の入力
(3)入荷予定入荷予定の出力出荷予定の入力
(4)受領出荷確定の出力出荷確定の入力
(5)支払案内支払い案内の出力支払い案内の入力
(6)請求請求の入力請求の出力






XMLで定義しているのはなにか?


小売と卸のメッセージ交換部分について、定義しています。
つまり、情報のやりとりなわけで、これは、昔(というか、今でもリアルの世界では)伝票に書いてある部分のことです。

 昨日定義したのは、小売と卸の業務であり、業務は伝票の行き来(入出力)でおこなわれるので、当然、昨日定義したクラスの入出力にもなるわけです。
 その関係は、こちら(上の表と対比してね)。

メッセージ交換名小売からみると卸からみると
(1)商品マスタ商談の入力商談の出力
(2)発注発注の出力受注の入力
(3)入荷予定入荷予定の出力出荷予定の入力
(4)受領検品の出力*納品の入力
(5)支払案内支払の出力支払確認の入力
(6)請求請求書受理の入力請求書発行の出力


*納品の入力=納品が確定したことの入力の意味。納品書とは違う
5番と6番は、手順と入れ替わっています。

で、はじめ、昨日のブログのように書いていたら、入荷と出荷で、2つのメッセージが行き来することになり、他は1つなので、対照的にへん。なんか見落としてるかも?ということで、クラスを
(小売側)入荷については:入荷予定と検品に
(卸側)出荷については:出荷予定と納品に
わけました。その結果について、昨日のブログを修正してあります。




統一伝票は、どうかかわるのか


 統一伝票も、小売卸間でのメッセージのやりとりです。
ということは、上記のXML同様、統一伝票でも、伝票一枚一枚は、上記の6つのメッセージに対応、ないしは継承(XML-EDIが一般的、統一伝票が、細かくなってる)でないと変です。

 そうなっているのかについては、今後調べます。

 統一伝票の例として、e-お菓子ネット 統一伝票マニュアル 第四版を参考にしたいと思ってます。( ここにある。ただしPDF

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

本家はSkipeAPIのまとめ、ここは要求仕様書の書き方のまとめ(項目例)

2005-04-14 08:51:33 | コピーされるほど儲かるシステム!
 今日は、本家のほうに、いつもは、こっちで書くような話題である、Skype APIの現状と、それを使ったサイトの話題について(ここ)、書きまくってしまったので、こっちの話題は、時間がかからずにかける、「コピーされるほど儲かるシステム」開発日記の、要件仕様の話。

 いつも引用する「要件プロセス完全修得法」
スザンヌ・ロバートソン+ ジェームズ・ロバートソン/著 苅部英司/訳
http://www.sangensha.co.jp/allbooks/index/111.htm
では、要件仕様のテンプレートして、ボレーレ仕様テンプレートというのをあげている(P154から156)それによると、要件仕様書に書くパートは4つ。1.制約、2.機能要件、3.非機能要件、4.プロジェクト課題だそうな。

それらについて、細かく書くと、以下のとおり(以下上記の本の154から155を引用しています)。

■■ 1.システム制約
・システムの目的
・依頼主、顧客、その他の決定権者
・システムのユーザー
・要件制約
・命名法と定義
・関連事実
・仮定

■■ 2.機能要件
・システムの範囲
・機能およびデータ要件

■■ 3.非機能要件
・ルックアンドフィール要件
・使用性要件
・パフォーマンス要件
・運用・操作要件
・保守性および可搬性要件
・セキュリティ要件
・文化的および政治的要件
・法的要件

■■ 4.プロジェクト課題
・未解決課題
・既製品による解決策
・新たな問題
・必要作業
・カットオーバー
・リスク
・コスト
・ユーザー向け資料の作成
・要件予備軍

(引用おわり)-----------------

うーん、こう見ると、基本的にはいいとおもうし、結果としてこんなことを書くんだろうけど。。。
まとめたほうがよさそうなところとかもあるし。。。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

LinuxでXMLをフリーソフトを使ってPDFにする方法と、Javaを使った統一伝票の出力

2005-04-13 15:19:34 | JavaとWeb
 えーっと、表題ですが、LinuxとJavaが入るとクリック数が上がりそうな気がするので入れただけで、もちろん、WindowsでもOKでーす。
 今回は、XMLファイルをフリーソフトのFOPを使ってPDFにするお話。

 フリーソフトにしないでいいなら、XMLファイルをAccessで読み込み、それを出力する。
 終了
 となってしまうので、ここでは、フリーソフトの話(つーか、そういう意味ではLinuxっていうのも意味あるね)

 前のブログで 「統一伝票なんかも、クラスにしておいて,setterとgetter作っておいてくれて、FOPで出力できるように、XSLT書いておいてくれればいいのに」と書きましたが、そのやり方。

 ちなみに統一伝票とは、ここ。お菓子業界とか、スポーツ用品業界とか、その業界ごとに、発注・納品のための伝票を統一したもの。
 つまり、統一伝票をクラス化して、そのクラスから伝票を出力できるようにすれば、納品や発注の伝票出力の際に再利用できるわけ。
 Java的にみても、再利用価値の高い業務用クラスといえるわけなのだ(本当かいな??)




 で、まず、FOPとは、foファイルという、出力内容を書いたXMLファイルを読み込んで、PDFなどファイルを作成するものです。くわしい説明&FOPのダウンロード先なんか書いてあるサイトはここ

 つまり、

データをPDFにするには


  1.データの内容を、FOファイルに書き出す(出力したいレイアウトで)
  2.そのFOファイルをFOPで読み込み、変換
  3.PDFができるということになります。


 ってことです。ここで、出力したいレイアウトを統一伝票の形式にすれば、出力できます。

 その際、伝票のようなレイアウトだと、指定したい位置のところに書き出すわけですが、それは、fo:blockの外側に、fo:block-containerっていうのを使い、その引数でabsolute-position="fixed"にすると、ページの初めからの絶対位置で指定できたはずです。
(そうしないと、文章の流し込みみたいに、自動に文字が流れてしまう)




 で、ここでデータが、javaのクラスの中にデータが入っているのであれば、そのクラスがfoを書き出せばOKです。
 foは、XMLの形なので、JAXPを使ってDOMかなんかにしてから書き出してもいいし、そんな面倒なことしないで、ファイルのOutputStreamに直接、”<fo:root”みたいな感じで、文字列で書き出してもOKです。

 問題は、データがXMLに入っているときです。
 この場合は、2とおり考えられます。
1.データのXMLファイルをFOの形式に変換するXSLを書き
  そのXMLファイルとXSLをXSLTに読み込ませる。(とFO形式のファイルになる)
2.JAXPを使ってJAVAの中に読み込む
 



 ということは、1の方式でやる場合、

データをフリーソフトをつかってPDFにするには
(あ).必要なもの
 XSLT(Xalanなど)、FOP、(あとJavaのランタイム)
 
(い).必要なファイル
 XMLファイル(元データ=毎回作成)
 XMLファイルをFOファイルに変換するXSLファイル(一度作成すれば、基本的にはOK)

(う)やりかた
・XMLファイルをXSLTを使って、FOファイルに変換する(XSL必要)
・FOファイルをFOPに読み込ませ、PDFにする




 統一伝票をPDFにするには、したがって、
・統一伝票に書くデータをXMLにする
 →そのために統一伝票の項目をXMLのどのタグにするかをきめて、
  データをそのタグでかきださないといけない(そういうソフトを作る必要もあるかも)

・そのXMLを統一伝票の形式で書くXSLを書かないといけない

 なお、ここで、統一伝票の枠とかは、あらかじめ印刷されているもので、文字出力だけすればいいとします。。。って、バーコード、あった気が。。。どうしよう(>_<!)
 きっと、バーコードのソフトで、イメージにしておいて、それを貼り込むのです。

 そこに、お金かかるじゃん。だめじゃん(>_<!)。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

流通XML-EDIのJAVA化計画:その1:クラスをきめてみる(14日修正)

2005-04-13 08:43:51 | 業務のモデル化
 前のブログで、流通XML-EDIをJavaで開発する流通業システムに流用する話。

 まずは、概説書をもとに、クラスをきってみましょう。
 クラスには、佐藤 正美氏の考え方に基づき(?)リソースとイベントの2種類があると考えますと、


■■ リソース
 リソースは、以下のとおり

  1.小売(発注先)
    これには、以下の2種類
     1-1:支払先(支払う会社)
     1-2:納入先
  メソッドの定義は概説書にないので、CRUD(登録、照会、更新、削除)とします。

  2.卸(受注先)
    これも、本来は2種類に分かれるはずである
     2-1:入金先
     2-2:物流センター
    ところが、この2種類は、はっきりしていない。
(よくある話で、ものが送ってくるのは、工場直送とか、大きな卸会社なんだけど、お金は、小さな商社に払うなんていうケース)メソッドの定義は概説書にないので、CRUD(登録、照会、更新、削除)とします。

  3.商品
 メソッドの定義は、概説書14ページの商品マスタ管理は、契約単価の提案であり、これは商談に当たると思います。ふつうのマスタ管理とはちょっと離れているので、それらは除き、ここではCRUD(登録、照会、更新、削除)をメソッドとします。

■■ イベント
 概説書14ページの赤と黄色の四角をもとにわけます。
 メソッドについては、詳しく書きません(こまかくなってしまうので)

・小売側
  小売-4.商談
  商談を受けるほうになります。

  小売-5.発注

  小売-6.入荷
  入荷予定と、入荷確定をまとめます
  (14日修正)
   これ、まとめないほうがいいみたいです。
   つまり、以下のようにします。

  小売-6.入荷予定

  小売-7.検品
   これ以降、1番ずつ番号ずらしました

  小売-8.請求書受理
   請求を、このように書いておきます。買掛も、ここに入れておきます

  小売-9.支払
   買掛消しこみもここに入れます。

・卸側
  卸-4.商談
  小売側と逆で、商談をするほうになります

  卸-5.受注

  卸-6.出荷
  出荷予定と、出荷確定をまとめます
  (14日修正)
   これも、まとめないほうがいいみたいです。
   つまり、以下のようにします。

  卸-6.出荷予定

  卸-7.納品
   以下、番号がずれます

  卸-8.請求書発行
   請求を、このように書いておきます。売掛も、ここに入れておきます

  卸-9.支払確認
   支払を、このように書いておきます。小売からの売り上げを確認します。
   売掛消しこみもここに入れます。




 なお、リソースの、小売、卸、商品に関しては、小売側、卸側にも、どちらにも共通してあることになります。
 ただし、小売の場合には、小売には、自社情報、卸には、発注先情報(仕入先情報)が入ることになり、
 卸の場合には、受注先情報(得意先情報)、自社情報が入ることになります。
 ここで口座開設の業務が抜けていますが、これは、小売の場合は、卸マスタの登録、卸の場合は、小売マスタの登録に相当します。

 したがって、小売も卸も、この8(14日訂正)9つのクラスが基本で、そこにメソッドを配置することになります。
 その前に、小売・卸間のメッセージをXMLで表現したものについてですが、それは、また記事を改めて、近いうちに書きます。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ハードウェア構成と、それを実現するJavaのフレームワーク、要素技術のまとめ

2005-04-12 15:32:25 | JavaとWeb
前のブログで、


 一方、フレームワークは、そういうのがあるかというと、
  クライアントーサーバーで行う場合、
     サーバー側で画面をつくる      サーブレット,JSPまたはStruts
     クライアント側で画面をつくる    JavaScript、VBScript、アプレット
  など、考え方はある。。。けど、これもまとまってない。

 そのうちまとめるかも。。


と書いたので、JAVAにおいて、ハードウェア構成と、それを実現するフレームワークの対応をまとめてみました。なお、以下のものは、一般論で、これ以外にも、フレームワークとして成り立つものはあります。




■■ スタンドアロンの場合
 GUIを使わないなら、なにも悩むことはない。フレームワークを使わず、好きにかける。
 GUIを使う場合、AWT,SWING,eclipseのSWTとか、使うGUIにより書き方変わる


■■ クライアントサーバーの場合

(1)クライアント側に画面表示する
   (1-1)サーバーで画面を作成する
        ・サーブレットを利用する
        ・Strutsを利用する
        ・JSPを利用(併用)する

   (1-2)クライアントで画面を作成する
        ・java Scriptで行う
        ・appletで行う(特に図形表示など)

(2)クライアント側に画面表示をしない(GUIを利用しない)
    ・RMI
    ・EJB
    ・Webサービス
    ・CORBA(InterstageのCBS,CBMなども含む)


■■ P2Pの場合
JXTAというのがあるらしいが、使ったことがない。


■■ すべての場合に
・ソケットでポートを空けて通信
 コネクションをつなぎっぱなしにしたいとき便利
 基本的になんでもできる。




 実際には、いくつかを組み合わせて使います。たとえば、StrutsとJava Scriptを利用したり。

 また、サーブレットを利用するけど、サーブレットでは画面表示を行わないで(textでデータを受け渡しして)、クライアント側でSWINGなどを使って画面を書いて表示することなどもあります
 たとえば、いくつかの支店の在庫を問い合わせる場合、各支店のスレッドを発生させ、在庫チェックすると、サーバーで多くのスレッドが発生し、処理が遅くなるので、クライアントでスレッドを発生させ、GUI表示するケースなどがあります。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PMBOKに書いてあるプロジェクトの進め方と読み方(知識エリアとプロセス群にそって)

2005-04-12 09:05:56 | 開発ネタ
みかままさんの日記を見て、ちょっとPMBOKについて、書いておきたいことがあったので、そのお話。

 なお、PMBOKについては、プロジェクトマネジメント知識体系ガイドの第二版しか持ってない(最新は第三版)なので、第二版をベースに書いています。

 PMBOKは、9つの知識エリアがありますよね(知らなかった人は、「あるんです」。これを知らないと話が続かない)。

1.プロジェクト統合マネジメント
2.プロジェクト・スコープ・マネジメント
3.プロジェクト・タイム・マネジメント
4.プロジェクト・コスト・マネジメント
5.プロジェクト品質マネジメント
6.プロジェクト人的資源マネジメント
7.プロジェクト・コミュニケーション・マネジメント
8.プロジェクト・リスク・マネジメント
9.プロジェクト調達マネジメント

で、それらは、プロジェクトの流れ(プロセス群)の中、つまり、立ち上げ、計画、実行、コントロール、終結の中で、いろいろと実施されるわけですが、
・あるプロセスの中で、知識エリアすべて行われるわけではない。
  →たとえば、立ち上げエリアでは、「プロジェクト・スコープ・マネジメント」に属する「立ち上げ」作業しかない。

・さらに、その中でも、「計画」、「実行」、「コントロール」の中には、ほとんどのプロジェクトで行われる「コア・プロセス」と、プロジェクトによっては行われない、プロジェクトの特性によって行われる補助プロセスがあります。
 (この説明は、第二版だと、33ページの下にコアプロセス、34ページ中ごろに補助プロセスの説明があります。以下、ページ数は、第二版のページです)

 ここで、コアプロセス「だけ」を書くと、以下のとおりになります。
・立ち上げ:スコープ(32ページ 図3-4)
・計画:スコープ、タイム、コスト、リスク、統合(33ページ 図3-5)
・実行:統合(35ページ 図3-6)
・コントロール:コミュニケーション、統合(36ページ 図3-7)
・終結:調達、コミュニケーション(37ページ 図3-8)




そして、これらの作業を具体的にわかりやすく書くと、以下のとおりです

■■ 立ち上げ:スコープ
 立ち上げ作業を行う(54ページ)。
 ここで、プロジェクトマネージャーがきまって、そのプロジェクトの条件などがきまる。
 プロジェクトの根拠となるもの(契約書など。プロジェクト憲章)ができる。


■■ 計画:(1)スコープ、(2)タイム、(3)コスト、(4)リスク、(5)統合
(1)プロジェクトの目的と、成果物がきまり(スコープ計画 56ページ)、その成果物を構成要素にまとめる(WBSで記述される。スコープ定義 59ページ~)。
(2)その構成要素を作るために、しなきゃいけないことを順番にならべて(アクティビティ定義65ページ)、その「しなきゃいけないこと」にかかる時間をみつもり(アクティビティ所要時間見積り)、スケジュールを作成する(スケジュール作成75ページ)
(3)その一方で、「しなきゃいけないもの」を行うための、人、モノ(機器、資材)についての資源を決定し、そこから金=コストの見積もりを出す(資源管理とコスト見積もり)。そしたら、予算化しよう(コストの予算化)
(4)そして、これらのアクティビティとスケジュール、コストをもとに、リスクを識別し、分析する(リスクマネジメント計画129ページ~)
(5)そしたら、プロジェクト計画書として、まとめよう(プロジェクト計画の策定)


■■ 実行;
プロジェクト計画書に書いてあるすべきこと(アクティビティ)を実行すべし(プロジェクト計画の実行P46)


■■ コントロール:(1)コミュニケーション、(2)統合
(1)進捗報告をしよう(実績報告 P122)
(2)変更すべきところがあれば、変更しよう(統合変更管理 P47) 


■■ 終結:(1)調達、(2)コミュニケーション
(1)契約が完了した(もしくは中止になった)手続きをする(契約完了 P158)
(2)プロジェクトの結果の文書化(完了手続き P125)




これらの手続きをもとに、あとは、いろいろと追加していくことになる。

で、今書いたように、PMBOKの本のいやらしさは、知識エリア順に書いているので、頭から読んでいくと、いろんなプロセス群が入り乱れてかいてあって、????となってしまう。

 この本の読み方は、ずばり!こうです。

(1)P38ページの「プロセス群と知識エリアによるプロジェクトマネジメントのプロセスの分類表示」からみるべし。
(2)P32からP37の各プロセス群の内容をみて、コアプロセスと補助プロセスを確認すべし
(3)コアプロセスについて、各プロセスの図から、指定されている章の内容をみて読むべし
   →まず、成果物をみて、その章で、なにを作ろうとしているのか確認してから読むべし
(4)なっとくしたら、補助プロセスについて読むべし
(5)のこっちゃったので、はじめのページから32ページまでをよむべし。

以上っす

ついしん:昨日のアクセス数は、最近の中で一番多かった。
 なんで、そのうち、流通XML-EDIの概説書の中身とそれをJavaで表現したものをやろうと思います(今日は、違うねたを用意しているので、明日以降)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

流通XML-EDIと、それをJavaで開発する流通業システムに流用する可能性

2005-04-11 12:34:57 | JavaとWeb
 前のブログの最後に書いた流通XML-EDIについて、
 ・まず、なにそれ?ってことと
 ・個人的に思う、いいことと悪いこと
 ・Javaで開発する流通業システムに、応用できるかどうか
について、ちょっとまとめようと思います。




まず、流通XML-EDIは、流通システム開発センターが、
卸、小売業向けにEDIを行うために開発したXML
「JEDICOS(Japan EDI for Commerce Systems )XML-EDI」
の俗称という定義が、ふつうのようです(ここの説明は、そうなっている)
なお、そのXML-EDIについては、こちら

ただし、ふつう、これより有名なのは、流通XML-EDIサブセットで、こっちは「システム!」です(実際に動くプログラムがあって、ちょっと面倒な(代表者の許可までいる)手続きを経ると、タダでもらえる)。




 このいいところは、流通XML-EDIの概説書というのがあって、(それは、昔は申し込めば、煩雑な手続きなしでタダでもらえた。ウィリアムのいたずらは展示会でもらった。いまでも、くれるのかな?)その中に、
 ・流通業の標準的な業務とその流れ(つまりビジネスモデル)が記載されていること
 ・それら業務間でデータを交換する上でのXMLが、記載されていること
   (タグが分かりやすく書いてある)
 なので、これをたたき台として、業務を検討できることがいいところ。

 しかし、だめだめなのは、
 ・それをシステムとして作っちゃ、利用できないジャン!
  流用しようとしたとき、手を入れないといけないし、そもそも、そのソフトを手に入れるのに(ただだけど)、代表者の了解までいるなんて。。。

 ・その概説書の手順がある意味わかりにくく、クラス分けされているでもなし。。。
 ということで、ちょっと、そのまま使えるものではないのよ。




 でも、せっかくXMLもできてるわけだし、クラスもメソッドも、概説書をみると、大体わかるし。
 
 概説書の内容なら、たぶん、書いても差し障りないだろうし(タダで、別にサブセットみたいになにか書かなきゃいけないわけでなく、自由に配っているんだから)、Javaのクラスにまとめておけば、extensionして使えるよね。
 まあ、Java知らない人でも、クラスとメソッドみれば、基本的に、それ、たたき台に考えられるし。
 ちなみに、それって、MVCモデルのM(モデル)の部分に相当するわけなんだけど。。
(だから、フレームワークなんかとは直接関係無く、そのクラスから継承させて、改造することもできるし)
 そうすれば、Javaで開発する流通業システムに流用する可能性も出てくるよね。

 うーん、クリック数多かったら、書いてみようかな。。。




 統一伝票なんかも、クラスにしておいて,setterとgetter作っておいてくれて、FOPで出力できるように、XSLT書いておいてくれればいいのに。。。そうすれば、cocoonでだせるじゃん。

 流通システム開発センターに、Javaのプログラマを送り込む必要があります。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

デザインパターンもいろんな本が出てるけど、何から読んだらいいか、わかりにくいよね

2005-04-11 11:18:04 | 開発ネタ
 昨日のブログで、本の話をしたので、今日も本の話。
 デザインパターンの本って、いろいろ出てるんだけど、本によっては???となってしまったりする。
 ちなみに、デザインパターンの意味は、こちら

 そこの説明も、
・プログラム設計時に起こる典型的な問題とそれに対する解決策を整理し、再利用できるようにまとめたもの。
という話と、
・1995年に出版された書籍「デザインパターン」の中で23のパターンが解説されたのをきっかけに

 という2つの話がかいてありますが、この一般的なデザインパターンについて書いてある本と、後者の1995年に出たデザインパターンの本、つまり、GoF本についての説明の本と分かれます。

■■ GOF本について書いた本
 まずは、
オブジェクト指向における再利用のためのデザインパターン
ほかには、Javaで説明した本として、
Java言語で学ぶデザインパターン入門など。
 こっちのほうの本かどうかの見分けは、「23個の」なんとかかんとかとか書いてあったり、Iteratorの説明とかがあったら、まずこっち。

■■ 一般的なデザインパターンについて書いた本
Java言語で学ぶデザインパターン入門 マルチスレッド編など。




 で、GoF本については、はじめの「オブジェクト指向における再利用のためのデザインパターン」から読むと、抽象的なんでわかりにくい。かりにJavaがわかんなかったとしても(わかるんならなおさら)「Java言語で学ぶデザインパターン入門」からみて、23個のパターンは、どのように使われるのかを確認し、その後、Javaがわかるのであれば、ソースコードをみたほうが早い。

 そしてどういうときに使う、なんについてさしているのかがわかってから、「オブジェクト指向における再利用のためのデザインパターン」を読んだほうがわかりやすいと思う。




 あと、もうひとつわかりにくくしている話として、このデザインパターン以外にも、「典型的な問題とそれに対する解決策を整理し、再利用できるようにまとめたもの」はあるわけで、それとの関係や、現場で使うときは、どういう感じで使うのかについて、書いてないので、わかりにくいと思う。

 私は、こう理解しています。

 このデザインパターンの説明には、「プログラム設計時に起こる」ということが問題。
 つまり、システム設計するときは、システムの形態から、こういうシステムになるという、システム設計時におこる「典型的な問題とそれに対する解決策」がある。これは、フレームワークにまとめるのがふつう。

 また、このブログで触れたけれど、システム開発時には、形式的な側面と、業務的な側面がある。
 したがって、業務的な側面での「典型的な問題とそれに対する解決策」というのもある。
 たとえば、BtoC(ネットでの販売など)における集金方法っていうと、銀行振込、口座引落、カード、代引き、現金書留(前払い)などときまっていて、それぞれの手順は、業種に関係なく、お決まりのパターンになっている。
 これも、システム全体の話(小売業の業務手順など)と、ある部分(上記の集金方法など)の話がある。

 だから、表にまとめると、こんなふうになる。

典型的な問題とそれに対する解決策を整理したもの

形式的業務的
全体フレームワーク業種別の共通手順
一部分デザインパターンお決まり業務手順(集金方法など)





 そして、フレームワークは、クライアントサーバーならサーブレットまたはStrutsのように、決まった形を継承するパターンで再利用する(ActionとActionFormを継承することで利用する)。これらのフレームワークを利用すると、ある程度やることは決まっている(つまり、解決策=ソリューションの手順はある程度決まってしまう)

 一方、GoF本に出てくるデザインパターンは、クライアントサーバーのシステム全体を捕らえるというのでなく、プログラム中のあるパターンに対して、ノウハウを適用するものだから、ユーティリティ的な扱いになる。
 たとえば、utilクラスの中にカプセル化して、プログラムの必要な場面で使ったりするとか(事実、iteratorなどは、java.utilの中に入っている)。


 そうすると、デザインパターンで重要なのは、どういった場面で、どういうときに、何をつかったらいいのかという考え方を示さなきゃいけないはずなんだけど、そういう本がなかなかないのよね。
(GoF本の23個のパターンは、どういうものかの紹介で終わっている)
COBOLの場合の、このようなパターンに関しては、比較的簡単にわかりやすいけど(ちなみにパターンは、リスティング、エディティング、マージ、ソート、マッチング、チェッキングなどがあり、その処理結果に応じて、どれをどう使うかはわかる。

 一方、フレームワークは、そういうのがあるかというと、
  クライアントーサーバーで行う場合、
     サーバー側で画面をつくる      サーブレット,JSPまたはStruts
     クライアント側で画面をつくる    JavaScript、VBScript、アプレット
  など、考え方はある。。。けど、これもまとまってない。

 そのうちまとめるかも。。




 でも、いいたいことは、そっちじゃなくって、業務側のほう。
 業務全体についての、ノウハウをまとめたものについて、小売業、卸売業の場合の流通XML-EDIというのがあるんだけど、それについて、今後、触れて生きたいと思います。

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

VBAの本にExcelから他言語プログラムの自動生成について書いてない理由、わかりました

2005-04-10 21:00:12 | Weblog
 昨日のブログで、なぜ、VBAの本は、他の言語やSQL自動生成とか、Accessデータから銀行引き落としするためのデータに出力する際に必要なテクニックとか、ぜーんぜん書いてくれてないんだろう。

 みたいなことを書きましたが、理由、わかりました。
ウィリアムのいたずらのホームページアクセス数
閲覧数アクセスIP数
4/09 5539
4/0812066
4/0713273


 昨日のみ1日1記事で、ほかは1日2記事ということを考えても。。。
 結局、みんな興味なかったわけね(^^;)
 だから、そういう本が出ない。。。なっとく




 ちなみに、一番人気のあった日は、閲覧数は、4/5日の155,IP数では4/7日
 この日の記事は

4/7
ライブドア社長のブログに、最近のターボリナックスの話題でてるね&中国のLinuxの話題
Linuxの翻訳と、商用ソフトとの訳語の差

4/5
HTMLからStruts用のJSP、クラス、config自動生成の試案メモ
ソース公開、コミュニティが開発のLinuxって、ハッカー君が有利に見えるのは私だけ??




Linuxネタは受ける??
じゃあ、ただで入手できるLinuxの統合開発環境Kdevelopの話とかも、うけるのかな?
でも、あしたは、デザインパターンの本の話なんだな。多分


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

VBAの本って、ExcelからJava自動変換等で必ず使う、開発のトレンド技術について書いてない

2005-04-09 18:21:10 | Weblog
 最近、DBの構造(テーブル名と項目、型)などをExcelのシートに書いておいて、
  そこからJava(やC++)のDBアクセスメソッド、
      DBを作成するSQLを書いたDDL等を
 自動生成したりすることって、多くありませんか?
(そのやり方を知らない人は、出来たら便利だと思いませんか?)

 このブログでも、ExcelからStrutsのソース等の自動生成の試案とかについても書いてるし(ここ)JavaやPerlを使って、テストデータを自動生成する例も、こんな記事に出てる。
 日本の場合には、
  (Excelでシナリオを書くとき)DBに入れる値みたいなのをまとめておいて、
  そこからDBに入れるデータを自動生成する(insert文を自動で作る)
とかのノリも、結構あるよね(実際、自分でも、この手のプログラム、書くこと多し)

 まあ、最近のトレンドとして、さっきの記事にも出てたけど、自動化ソフトを買うんじゃなくって、Excelとか利用して、作っちゃうって言うのが多いよね。だって、お客さんが、開発ツール、テストツールのお金まで、だしてくれないんだもーん!




 さてさて、ここで。。だ!

 これらのことをやろうとしたときに、VBAで、必ずといっていいほど使い、それを知らなきゃできないっていう知識がある(逆にいえば、それさえ知ってればできる)。
 それをまとめておいくと、こんなかんじ。

1.シーケンシャルファイルの扱い方
  VBA(AccessでもExcelVBAでもおなじ)では、テキストファイルの場合、OPEN,PRINT,CLOSE,(入力はLINE INPUT)なんかを使う。

OPEN ファイルパス FOR OUTPUT AS #1 '書き出し用
PRINT #1,buf '出力する。改行してしまう
CLOSE #1

くわしくは、ウィリアムのいたずらの、ここをみよ
 ちなみに、ここは、バイナリファイルの読み方、書き方、ここはUTF-8での書き出しがまとめてあるじょ。

2.読み込み行数が分からないので、大きさが変えられる配列をとる
 Dim moji() As Stringで、読み込み時、ReDim Preserve moji(moji_su) する。
  ここ
 あれ、ReDimで2次元以上のときって、制約あった気がするけどなあ。。。
 書いてないや

3.Excelシートから値をとってくる
Sheets("シート名").Cells(行番号,桁番号)か、
Sheets("シート名").Range("セルをA1などの形式で")

例:Sheet1のB1をとってくる
Sheets("Sheet1").Cells(1,2) か、
Sheets("Sheet1").Range("B2")


4.あとは文字列操作で、出力内容に加工する
MidとかInStrとかReplaceを使って置き換える。




 でも、シーケンシャルファイルの扱い方(とくにバイナリ)とか、ReDimとか、VBAの本に、ぜーんぜん、書いてくれないんだよね。
 さらに、ファイル操作についてなんて、もっと見ない気がする。
 実際には、それ+文字列操作ばっか使ってるんだけど。。。ウィリアムのいたずらは(^^;)

 大村あつしさんとか、いっぱーい!VBAの本出しているのに、そういう、他の言語やSQL自動生成とか、Accessデータから銀行引き落としするためのデータに出力する際に必要なテクニックとか、ぜーんぜん書いてくれてない。

 なんでだろう。。

 ウィリアムのいたずらなんか、ドキュメントを作成するのと、そこからソースを自動生成することくらいしか、Excelって使わないのに。。

。。。まずい!「コピーするほど、儲かるシステム」開発日記のソフトを仕上げるためにも、使わないといけなかったぞ!忘れてた(わすれるなー!このブログの目的だじょー < 自分)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする