Java言語では様々なアプリケーションを作成することが出来ますが、Javaで作成したプログラムをバッチ処理として実行したいという要望も多いのではないでしょうか。
本記事では、Javaプログラムを使った手軽に出来るバッチ処理作成について解説していきます。
目次
バッチ処理とは
Javaプログラムをバッチ処理で動かす前に、バッチ処理とは何なのかについて確認しておきましょう。
概要
バッチ処理というのは、処理のひとまとまりのことを表す言葉です。
一般的には「日次バッチ」「月次バッチ」「年次バッチ」のように、定期的な周期で動かす処理のまとまりをバッチ処理と呼びます。
定期的な周期で動かす方法としては、Windows環境では「タスクスケジューラー」機能、MacやLinux環境では「cron」コマンドなどで実行させます。
メリット
バッチ処理を利用するメリットとしては、登録さえしておけば自動的に決まった周期で処理をまとめて実行してくれる点にあります。
スケジューラーにより処理が自動で実行されるため、業務時間外の深夜や早朝などに実行したいプログラムで利用すると非常に便利です。
また一度登録してしまえば、プログラムによる自動化が行え手動によるミスが起きないため、人的ミスを減らす意味でも有効です。
バッチファイルとの違い
バッチ処理と似た言葉に「バッチファイル」がありますが、バッチファイルは基本的にWindows環境で利用する拡張子が「.bat」のファイルのことを指しています。
バッチファイルの内部には複数のコマンドを記述し、上から順番に実行させることが可能です。
タスクスケジューラーなどでバッチファイルを起動するため、バッチ処理と同じような意味合いにはなりますが、バッチファイルはあくまでWindows用のひとまとまりのコマンドを集めたファイルと認識しておきましょう。
バッチ処理で実行するJavaプログラムを作成しよう
ではここからは実際にバッチ処理で動かすためのJavaプログラムを作成してみましょう。
Javaでの実装
まずはバッチ処理で実行するためのJavaプログラムを実装する必要があります。
今回はサンプルとして下記のコードを実装しました。
Sample1.java
class Sample1 { public static void main(String[] args) { Test1 test = new Test1(); } } class Test1 { public Test1() { System.out.println("ポテパンサンプル"); } }
Sample2.java
class Sample2 { public static void main(String[] args) { Test2 test = new Test2(); test.sum(10, 20); } } class Test2 { public void sum(int num1, int num2) { int result = num1 + num2; System.out.println("足し算の結果は" + result + "です。"); } }
jarファイルの生成
では作成したJavaファイルをコンパイルしてclassファイルを作成し、圧縮してjarファイルを作成するところまで進めていきましょう。
classファイルの作成
作成したJavaファイルのディレクトリまで移動した後、下記コマンドでコンパイルを実行します。
javac Sample1.java
lsコマンドで確認するとclassファイルが作成されていることが分かります。
$ ls Sample1.class Sample1.java Test1.class
jarファイルの作成
同じディレクトリで下記コマンドを実行して、classファイルをjarファイルとして圧縮します。
$ jar -cvf Sample1.jar *.class マニフェストが追加されました Sample1.classを追加中です(入=287)(出=221)(22%収縮されました) Test1.classを追加中です(入=363)(出=284)(21%収縮されました)
再度lsコマンドを実行するとjarファイルが作成されていることが分かります。
Sample1.class Sample1.jar Sample1.java Test1.class
2つ目のjarファイルを作成
バッチ処理で呼び出す用に同様の手順で「Sample2.java」を別フォルダでコンパイルし、jarファイルを作成するところまで進めておきます。
$ javac Sample2.java $ ls Sample2.class Sample2.java Test2.class $ jar -cvf Sample2.jar *.class マニフェストが追加されました Sample2.classを追加中です(入=323)(出=247)(23%収縮されました) Test2.classを追加中です(入=854)(出=518)(39%収縮されました) $ ls Sample2.class Sample2.jar Sample2.java Test2.class
commandファイルを作成してバッチ処理でJavaプログラムを実行してみよう
ここまでで、Javaプログラムが作成出来たので、commandファイルを作成し、バッチ処理としてJavaプログラムを実行してみましょう。
commandファイルの作成
commandファイルはWindows環境のbatファイルのようなもので、シェルスクリプト作成して拡張子を「.command」に書き換えるだけでダブルクリックでの実行が可能となります。
任意の場所に「Test.command」ファイルを下記の内容で作成してみましょう。
#!/bin/bash cd ~/Documents/java/sample1 java -jar Sample1.jar cd ~/Documents/java/sample2 java -jar Sample2.jar
commandファイルの実行
作成したcommandファイルは、Finder上からダブルクリックで簡単に実行することが出来ます。
まずはスクリプト内に記述したjarファイルのディレクトリにtxtファイルが作成されていないことを確認しておきます。
sample1 $ ls Sample1.class Sample1.jar Sample1.java Sample1.mani Test1.class sample2 $ ls Sample2.class Sample2.jar Sample2.java Sample2.mani Test2.class
commandファイルをダブルクリックして実行するとターミナルが立ち上がり下記のように表示されます。
/Users/ユーザー名/Desktop/Test.command ; exit; Saving session... ...copying shared history... ...saving history...truncating history files... ...completed. [プロセスが完了しました]
再度lsコマンドでtxtファイルが作成されているか確認します。
sample1 $ ls Sample1.class Sample1.java Test1.class Sample1.jar Sample1.mani sample1.txt sample2 $ ls Sample2.class Sample2.java Test2.class Sample2.jar Sample2.mani sample2.txt
このように作成したJavaプログラムが、バッチ処理によりまとめて実行出来ていることが確認出来ました。
さいごに: バッチ処理でJavaプログラムをまとめて実行してみよう
本記事では、Javaプログラムを使ったバッチ処理の作成方法についてご紹介してきました。
今回ご紹介したようにバッチ処理自体は「command」ファイルを作成することで簡単に実現でき、「cron」などと組み合わせることで定期的なプログラム実行の自動化も実現させることが出来ます。
定期処理や大量データの処理を行う上で、バッチ処理は欠かせない機能なので、この機会にバッチ処理の基本を把握しておきましょう。
jarファイルの格納先によってファイルパスは変更してください。