COBOLのビルド・デプロイを自動化!初心者でもわかるスクリプト活用術
生徒
「COBOLのプログラムを作った後、本番の環境で動かせるようにする作業がすごく複雑で怖いです。ボタン一つで全部終わらせる方法はありますか?」
先生
「それは『ビルド』と『デプロイ』という作業ですね。シェルスクリプトという手順書を作れば、自動化してミスなく完了させることができますよ。」
生徒
「ビルドとデプロイ……難しそうな言葉ですが、パソコンに詳しくない私でもスクリプトを作れるでしょうか?」
先生
「大丈夫です。料理をパックに詰めてお店に並べるような作業だと思えば簡単です。具体的なスクリプトの例を見ながら学んでいきましょう!」
1. ビルドとは?プログラムを「動く形」に組み立てる作業
プログラミング未経験の方にとって、まず最初の壁がビルド(Build)という言葉です。ビルドとは、人間が書いた「ソースコード」というテキストファイルを、コンピューターが実行できる「実行ファイル(バイナリ)」という形に組み立てる一連の作業のことを指します。
これを料理に例えると、レシピ(ソースコード)を見ながら実際に料理を作り、食べられる状態(実行ファイル)にすることに似ています。この工程には、「コンパイル(翻訳)」という作業が含まれます。COBOLは人間が読みやすいように英語に近い言葉で書かれていますが、コンピューターは「0」と「1」の数字しか理解できません。そのため、ビルドを行うことでコンピューター専用の言葉に変換してあげる必要があるのです。この作業を自動化するのが「ビルドスクリプト」の役割です。
2. デプロイとは?完成したプログラムを「現場」に届ける作業
次に覚えたいのがデプロイ(Deploy)という言葉です。これは、ビルドして完成した実行ファイルを、実際に動かす場所(本番サーバーやテスト環境)に配置して、使える状態にすることを言います。日本語では「展開」や「配置」と訳されることもあります。
先ほどの料理の例で言えば、出来上がった料理をお店のお客さんのテーブルに運んだり、お弁当にして棚に並べたりする作業がデプロイです。ただファイルを置くだけでなく、古いファイルを新しいものに入れ替えたり、設定ファイルを書き換えたり、不要なゴミを掃除したりする作業も含まれます。これらを手作業で行うと、ファイルを置き間違えるなどのミスが起きやすいため、スクリプトを使って「自動デプロイ」を行うのが現代のCOBOL運用の常識です。
3. ビルドスクリプトの基本形とCOBOLコンパイル命令
では、実際にビルドを自動化するシェルスクリプトの例を見てみましょう。ここではオープンソースの「GnuCOBOL」というツールを使う想定です。ビルドスクリプトには、コンパイルの命令だけでなく、エラーが起きていないかを確認する機能も持たせます。まずはビルド対象となる簡単なCOBOLプログラムです。
IDENTIFICATION DIVISION.
PROGRAM-ID. BUILD-TEST.
PROCEDURE DIVISION.
DISPLAY "ビルドとデプロイのテスト成功です!".
STOP RUN.
このプログラムを自動でビルドするスクリプト(build.sh)は以下のようになります。初心者の方でも、一行ずつ何をしているかコメント(#の後の説明)を読めば理解できるはずです。
#!/bin/bash
# 1. 古い実行ファイルを削除して掃除する
rm -f ./BUILD-TEST
# 2. コンパイルを実行する(-xは実行ファイルを作るという印です)
echo "コンパイル中..."
cobc -x BUILD-TEST.cob
# 3. 成功したか確認する($?は直前の命令の結果が入る魔法の変数です)
if [ $? -eq 0 ]; then
echo "ビルドに成功しました!"
else
echo "エラー:ビルドに失敗しました。コードを確認してください。"
exit 1
fi
4. 複数のファイルを一括でビルドする応用スクリプト
大きなシステムになると、一つのファイルだけではなく、数十、数百というプログラムを一度に準備する必要があります。これを手作業でコンパイルするのは現実的ではありません。そこで、フォルダ内にあるすべてのCOBOLファイルを一気にビルドするスクリプトを活用します。
「ワイルドカード(*)」という記号を使うことで、「名前に.cobがつくファイル全部」という指定ができます。これにより、どんなにプログラムが増えても、スクリプトを一度動かすだけで一瞬で準備が整います。プログラミング未経験者にとって、この「大量の作業を一秒で終わらせる」体験こそが、スクリプト活用の醍醐味です。
#!/bin/bash
echo "全プログラムの一括ビルドを開始します。"
for file in *.cob; do
echo "${file} をコンパイルしています..."
cobc -x "$file"
done
echo "すべてのビルド作業が終了しました。"
5. デプロイスクリプトの役割とファイル移動の自動化
ビルドが成功したら、次はデプロイです。デプロイスクリプトは、完成した実行ファイルを正しい場所へ運びます。例えば、自分の作業机(開発環境)から、みんなが使う共有棚(実行環境)へファイルをコピーするイメージです。以下のコードは、数値を計算して表示する別のプログラム例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. CALC-PROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(2) VALUE 50.
01 NUM2 PIC 9(2) VALUE 30.
01 ANS PIC 9(3).
PROCEDURE DIVISION.
COMPUTE ANS = NUM1 + NUM2.
DISPLAY "計算結果は: " ANS.
STOP RUN.
このプログラムを「bin」という名前の実行専用フォルダへデプロイするスクリプト(deploy.sh)を作成します。フォルダがなければ自動で作る機能も付け加えましょう。
#!/bin/bash
DEST_DIR="./bin"
# フォルダがなければ作成する
if [ ! -d "$DEST_DIR" ]; then
mkdir "$DEST_DIR"
echo "実行用フォルダを作成しました。"
fi
# ファイルをコピー(デプロイ)する
cp ./CALC-PROG "$DEST_DIR/"
echo "デプロイが完了しました。場所:${DEST_DIR}"
6. ビルドとデプロイを連携させる一気通貫スクリプト
ここまで「ビルド」と「デプロイ」を別々に見てきましたが、実務ではこれらを一つの流れとして実行することが多いです。これを「パイプライン」のように繋ぐことで、開発者の手間を最小限にします。まず、挨拶を時間帯で分けるような少し複雑なコードを考えてみます。
IDENTIFICATION DIVISION.
PROGRAM-ID. GREET-AUTO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HH PIC 9(2).
PROCEDURE DIVISION.
ACCEPT HH FROM TIME.
IF HH < 12 THEN
DISPLAY "おはようございます!"
ELSE
DISPLAY "こんにちは!"
END-IF.
STOP RUN.
このプログラムを「作って、運んで、動かす」までを一度にやるスクリプトです。これができると、開発のスピードが劇的に上がります。
#!/bin/bash
# 1. ビルド
cobc -x GREET-AUTO.cob
if [ $? -ne 0 ]; then exit 1; fi
# 2. デプロイ
mv ./GREET-AUTO ./bin/
# 3. 即座にテスト実行して確認
echo "--- 動作確認テスト ---"
./bin/GREET-AUTO
実行結果の例です(午前に実行した場合)。
--- 動作確認テスト ---
おはようございます!
7. 環境変数による設定の切り替えと柔軟な運用
デプロイ先が「自分のパソコン」なのか「会社のサーバー」なのかによって、設定を変えたいことがあります。そこで使われるのが環境変数(かんきょうへんすう)です。これは、プログラムの外側に置いておく「設定メモ」のようなものです。
スクリプトの中でこの環境変数を参照するようにしておけば、スクリプトそのものを書き換えなくても、設定一つでファイルの送り先や動作モードを切り替えることができます。パソコン初心者の方は、「行き先が書かれた付箋を貼り替えるだけで、バスの行き先が変わるようなもの」だとイメージしてください。この工夫により、安全で柔軟なシステム運用が可能になります。
8. バックアップ作成機能でトラブルに備える
デプロイ作業で一番怖いのは、新しいプログラムを置いたせいで、今まで動いていたものが動かなくなることです。そのため、優秀なデプロイスクリプトには必ず「バックアップ(予備の保存)」を作る機能が入っています。古いファイルを消す前に、日付をつけた名前で別の場所にコピーしておくのです。
万が一、新しいプログラムに不具合が見つかっても、バックアップから元のファイルを戻すだけで、すぐにシステムを復旧させることができます。これを「ロールバック(引き返し)」と呼びます。未経験者の方ほど、この「失敗しても戻れる仕組み」をスクリプトに組み込む重要性を理解しておきましょう。安心感を持って開発に取り組めるようになります。
9. ログ機能で「いつ誰が何をしたか」を記録する
自動化が進むと、誰がいつビルドやデプロイを行ったのかが分からなくなりがちです。そこで、スクリプトが動くたびに、その時の時刻と作業内容をテキストファイルに書き残す「ログ機能」を追加します。これを「証跡(しょうせき)」と呼び、仕事としてのシステム運用では非常に重視されます。
「〇月〇日 10時 太郎さんがデプロイ成功」といった記録が残っていれば、後で何か問題が起きたときの調査に役立ちます。CLIツールやスクリプトは、こうした文字情報の扱いが非常に得意です。ボタンをクリックするだけのGUI操作よりも、文字で記録が残るスクリプトの方が、実は大規模なシステム管理には向いているのです。まずは簡単な記録を残す一行を、自分のスクリプトに加えてみてください。