1. バッチプログラムとは

バッチ処理とオンライン処理

コンピュータシステムにおいて、「データを処理する」ということは、
1.データの読み込み
2.繰り返し処理
3.条件分岐
4.データの書き込み
の4つの動きの組み合わせで成り立っています。

以下の処理内容は、よくあるシステム上での処理内容です。
・ブラウザから入力したデータを、データベースに保管する。
・他のシステムから送られてきたファイルを取り込んで、データベースに保管する。
・データベースに保管されているデータと特定の条件で抜き出してファイルに書き出す。

これらが、前述の1~4の処理の組み合わせでできていることがわかるでしょうか。

そしてシステムの構築においては、使う技術から「バッチ処理」と「オンライン処理」に分けられます。
このサイトでは、バッチプログラムの開発について述べていくことになります。

オンライン処理は、利用者からの入力、もしくは利用者に対して情報を表示するための機能です。
一方のバッチ処理は、システム上のデータを別の形に加工・整形する一連の処理のことを言います。

画面からデータを入力、もしくは画面上にデータを表示する
画面画面からデータを入力、もしくは画面上にデータを表示する

バッチ処理は自動的にデータの加工・編集を行う
バッチ処理は自動的にデータの加工・編集を行う

画面機能に比べ、様々なタイミングで行われる人間の操作を想定する必要が無く、バッチ処理は一方向の流れでしか行わないため、画面と比べると”簡単”というイメージがあるかもしれません。

しかし、それが故に安易に作業が行われ品質の低いプログラムができやすいという側面もあります。

「良いバッチ処理」の条件

それでは良いバッチプログラムであるためにはどのような点を満たしていれば良いでしょうか。大きく下記の6点が挙げられると思います。

  1. シンプルで効率の良いロジックであること
    同じ処理であれば、少ない行数でシンプルに記述されているのが望ましいです。
  2. プロシージャ、ファンクションが適切に分割されていること
    同一処理内では細かくプロシージャに分割するのが望ましい構成です。
  3. 統一感のある構成であること
    異なる複数の処理であっても、処理内容が類似している場合、その構成はできるだけ近しいのが望ましいです。
    プログラムの設計や記述は、必ずしも正解は1つではないが、類似処理がある場合は、同じように実装することにメリットがあります。
  4. 共通機能が正しく使用されていること
    同じ処理内容を実現する場合、共通関数化し、複数の処理が同じ関数を使用します。
  5. 各種オブジェクトのスコープが明確に指定されていること
    変数の宣言は、”その変数を必要とするスコープ内”でのみ使用できるように宣言します。
    グローバルで宣言しておけばどこからでも呼び出すことができますが、可読性の低下につながります。
  6. 性能面の考慮が行われていること
    性能テストはシステム開発終盤に行われるのが一般的で、その時に対応すれば良いのでは?と思われがちですが、性能面の考慮は設計開始当初から行われるべきです。

これらの要素について考慮した開発を行う必要があります。

PL/SQLの特徴

PL/SQLでバッチプログラムを開発する場合、自ずとデータベースにはOracleを使用することになります。
他言語からOracleデータベースにアクセスする場合、プログラム中に、データベースへの接続・切断を行うロジックやコネクションの管理が必要になりますが、PL/SQLではそれが必要ありません。

PL/SQLはAdaを祖とした言語であり、大きく次の2点の特徴があります。

  • データ型の宣言に特徴があり、文字型・数値型といった変数だけではなく、レコード型(C言語で言う構造体のようなもの)やネステッド表、連想配列も独自の型を定義し宣言することができます。
  • ブロックと呼ばれるDECLAREから始まる宣言部、BEGINで始まる本体、EXCEPTIONで始まる例外部に分けられ、正常系と異常系のロジックを明確に分けることができます。

この特徴を有効に活かした設計を行います。

設計に入る前に

以下の点について検討済みであることを確認しましょう。

・システムの全体像

大まかでも良いので、システム全体のデータフローがわかる資料があると良いです。
データフロー図が書けるレベルの情報が揃っていることが望ましいです。
その中で、要件定義で検討してきた業務的視点から考えてきた機能構成を、物理面からの考慮も加え、分離・統合を行います。

・データ連携要件

前述のデータフローにおける個々のデータ連携について、
・データの種類(テーブルかファイルか)
・データの取得元・登録先の構成、名称
が決まっている必要があります。

・ファイルの場合の要件

対象がファイルの場合は下記の内容についても把握する必要があります。
最初から完璧に情報をそろえる必要はなく、設計を進めながら詳細化していくことになります。

 

個々のデータについて、データフォーマット(項目レイアウト)も確定する必要があります。項目名一覧、データ型、桁長の他に、一意キー、集計キーとなる項目がどれかも把握します。

また忘れられがちですが、件数についても把握します。
全体の件数だけではなく、データ保持期間を考慮に入れたシステムとしての総件数、集計処理を行う場合は、集計後の件数もこの時点で把握できることが望ましいです。

 

2017-12-11

Posted by tfurukaw