.NETでバッチ処理4

4月 16th, 2012

MSBuildを単純にバッチ処理Frameworkとしては使えません。いろんな機能が足りないからです。

では、どうすれば拡張できるかを調べました。拡張するポイントは大きく2つです。

1.カスタムタスクを作る

実際のバッチ処理はそれぞれ個別のことを処理しなければならないと思うので、これをカスタムタスクとして作りこめば良いのではと思います。

ちなみに、カスタムタスクはネット上にもたくさん落ちてます。

MSBuild Extension Pack

SDC Task

あたりは有名ですね^^

個別の処理とかだけでなく、このFramework用のタスクも作る必要があるかと思います。例えばトランザクションの開始とかコミットとか。

2.  Project Extensionsを使う

これは何を言ってるのかというと、MSBuildを使うときは必ずプロジェクトファイルを作らないといけないです。このプロジェクトファイルにターゲットとかを記述しますけど、バッチ処理を行う上では記述する内容がちょっと足りない気がします。例えばデータベースへの接続文字列とか。プロパティを使えば良いというのもあるのですが、それだけだとカバー出来ないことがたくさんあるかと思います。

プロジェクトファイルのスキーマを調べると、ProjectExtensions要素というのがあって、ここにMSBuild以外の情報を含めることができます。そこでここにバッチ処理用の情報を記述する方向で実装したいと思います。

Posted in 技術メモ | No Comments »


.NETでバッチ処理3

4月 16th, 2012

前回のを実現するべく、具体的に考えてみました。というより、前回までのはとってつけたようなもので後付です。今回のが先に思いついてましたww

突然ですが、MSBuildって知ってます?知らない方はGoogleとかで調べてみてください。JavaでいうApache Antとかと同じでいわゆるビルドツールですね。

ググればたくさん出てきますけど、定型的な作業を自動化するとか書いてある記事が多いです。そこで、「定型的な作業を自動化」=バッチ処理では?と思ったわけです。

XMLでターゲットとかプロパティやらアイテムを定義して実行する、別にビルドしかやってはいけないという決まりもないし、これをベースにバッチ処理してもいいんじゃないでしょうか。もちろん、トランザクション管理とかサポートしてないし他にも足りない機能はたくさんあります。足りないところは追加すればなんとか使えるかなと思ってます。

決定的にダメというところをご存知の方、ぜひ教えてくださいm(_ _)m

私の浅はかな知識では特に見当たらなかったので、MSBuildをベースにバッチ用Frameworkの実装を考えてみます。

肝心なことを忘れてました^^;

どのバージョンのMSBuildを対象とするかですけど、まずは2.0でww

理由は、私がよく使っているのが.NET 2.0だからです^^;

2.0用で考え&作ってから4.0まで対応できればいいなと思います。

Posted in 技術メモ | No Comments »


.NETでバッチ処理2

4月 16th, 2012

前回の続き。

.NETでのバッチ用Frameworkがあまりないようなので、なければ作ってしまいましょww

もし有用なものがあれば教えてくださいm(_ _)m

なければ作るというのは私の性格で、この業界に入って少し経ったころなんかはテキストエディタまで作ろうと思ってましたww

それはさておき、バッチ用Frameworkを作るといってもコンセプトというか、そういうのを決めたいなと。どうせ使うのは私だけだろうから、完全に趣味に走るとして、

- ホストのJCLみたいな感じなのがいいなぁww

- エラー処理とかログとかはサポートしたい

- データベースに対するトランザクションは管理したい

- あまり複雑なものにしたくないので、分散処理とか並列処理とかは除く

- 1つのバッチ処理は複数のジョブというか、サブ処理というかそういうのの塊にしたい

-> 要は同じ処理を何度も書きたくないだけ

- サブ処理を自由に組み合わせて1つのバッチ処理を実現できるように、XMLでバッチ処理を記述かなぁ。。。

なんか抜けてるところがある気もするけど、とりあえずはこんな感じのが作りたいですww

Posted in 技術メモ | No Comments »


.NETでバッチ処理

4月 15th, 2012

今までの話とは全く関係ない、.NETでのバッチ処理の話です。

今更なネタかもしれませんが、数年前から.NETでのバッチ処理はどういう風にするべきなのかを考えてました。当然ずっと考えてたわけではなく、時折ですけどね^^;

個人的にはですけど、バッチ処理を考えるとJP1を思い出します。ガッツリJP1を使ってたわけではないので的外れかもしれないですけど、バッチのジョブ管理とかはJP1で行うべきと思います。他にもいろいろなツールはあるかと思いますが、単に知らないだけですww

でもですね、JP1はそれなりの価格の製品ですし、常に導入できるわけでもありません。実際に私が今勤めてるところはいわゆるITベンダーではなく普通の企業です。お金がないわけではないんですけど、大人の事情によりJP1を導入することが出来ません。

結局どうしてるかといえば、タスクスケジューラで起動してそれぞれのバッチ処理でログを書き出しているわけです。これはこれで悪くはないわけで、予算とかを考えるとこれが精一杯というよもよくある話です。

システムが1つとか2つ程度ならこれでも良いと思います。しかしたくさんシステムを導入すると、これだけだと困ったことになってきます。

タスクスケジューラで起動してるだけなので、エラー処理の方法とかがそれぞれのシステムでバラバラになったり、バッチ間の連携が取りにくくなったりします。それを避けるために、Excelとかでスケジュールを管理するとか、いろいろな手作業が出てきます。

これを避けるためにJP1みたいなものは重要だと思うのですが。。。このままだと話が無限ループになります。

ということで、バッチ処理の重要な機能の1つとしては「ジョブ管理」かなと思います。

でもこれって、バッチ処理そのものの中では行うべきではないですよね。バッチ処理そのものは、前の処理が終わってるかどうか、2重起動してないかどうかとか、そのあたりのことは気にせず処理そのものに集中するべきだと思ってます。

そう考えると、単にバッチ処理といっても大きく2つあるのかと思います。

1つは先にも挙げたジョブ管理に代表するバッチ処理を管理するもの、2つ目は、バッチ処理そのものです。

これらをネットで検索すると、バッチ処理を管理するツールはそれなりにたくさんあると思いました。値段もピンキリです。2つ目のバッチ処理そのものに関しては、意外とFrameworkが少ないのかなと思います。言語問わずであれば多少はあります。Spring BatchとかTERASOLUNAとかです。

.NETで使えるものとなると非常に少ないですね。。。それだけ需要がないということなのかなぁ。。。

個人的にはバッチ処理は業務システムを支える重要な要素の1つだと思うんですけどね^^;

細かい話は次回以降で。

Posted in 技術メモ | No Comments »


Zend Frameworkの導入

4月 11th, 2012

開発環境(?)をとりあえず作ったので、あとはホントに作り始めるだけですww

となればいいんですけど、本気で何もないところから作るなんてことはしません。今どきですから使えるFrameworkがあるはず、と決めつけいろいろ調べました。たくさん出てきましたけど、

- CakePHP

- Sympony

- Zend Framework

- Smarty

などなど。いろいろ考えた結果、Zend FrameworkとSmartyを使おうと思います。理由は直感ですww

VertrigoServでSmarty3.1.7が一緒にインストールされてたので、あとはZend Frameworkをインストール&設定するだけです。

前提:VertrigoServのインストールディレクトリをデフォルトのC:\Program Files\VertrigoServ\として書いてます。適宜読み替えで。

(1) Zend Frameworkのダウンロード

ここからMinimalのzip形式をダウンロード。バージョンは、1.11.11でした。

(2) ダウンロードしたファイルを解凍して、libraryディレクトリの下のZendというディレクトリをC:\Program Files\VertrigoServ\にコピー。

(3)PHPにZend Frameworkを認識させるために、php.iniを編集。

C:\Program Files\VertrigoServ\Php\php.iniを開いて、787行目辺りにあるinclude_pathにC:\Program Files\VertrigoServ\Zendを追加。と思ったのですが、Smartyが既に追加されているので、Zendを直接追加するのがなんとなく嫌なので、こんな感じにしました。

include_path =”.;C:\Program Files\VertrigoServ\”
(4)ApacheでZend Frameworkを動作させるために、mod_rewrite.soを有効にする。

C:\Program Files\VertrigoServ\Apache\conf\httpd.confを開いてmod_rewriteを検索。コメントは既に外れてて有効になってました。

(5) ポート番号を変更

これは普通は変更する必要ないです。私の場合は他にも開発環境が入っているPCを使っていて80番は都合が悪いので、8081番に変更しました。

C:\Program Files\VertrigoServ\Apache\conf\httpd.confを開いて46行目あたりを、Listen 8081に変更。

(6) Documentルートを変更

これはC:\Program Files\VertrigoServ\wwwをDocumentルートとしてそのまま使うなら変更する必要はないはず。

私は、C:\Program Files\VertrigoServ\www2に変更しました。

C:\Program Files\VertrigoServ\Apache\conf\vertrigo.confを開いて、2行目のDocumentRootを変更。

合わせて、

<Directory “C:\Program Files\VertrigoServ\www2″>
Options Indexes FollowSymLinks Includes
AllowOverride All
Order allow,deny
Allow from All
</Directory>

を追記。もちろんC:\Program Files\VertrigoServ\www2も作りました。

(7) Documentルートに.htaccessを作成

内容は、

RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

(8) 新しく作ったDocumentルートに確認用のPHPファイルを作る。

<?php
require_once ‘Zend/Version.php’; //ライブラリの読み込み
echo Zend_Version::VERSION; //現在のZend Frameworkのバージョンを表示

(9) Apacheを再起動してhttp://localhost:8081/でZend Frameworkのバージョンが表示されるかを確認

ここまでの内容は、CodeZineを参考にしながら設定しましたm(_ _)m

Posted in PHP | No Comments »