
シェア:
スティーブは自称数学者で、悪口の王様。グレイハウンド、曲がりくねったパズル、ヨーロッパのボードゲームをこよなく愛する。 非数学系の人には数学を、非Java系の人にはJavaの話をしていないときは、コーヒーを飲みながらコードをハックしている。
COBOLでテキストメッセージを送る
COBOLは銀行・金融業界で大流行しており、ATMのスワイプの95%以上がCOBOLコードに依存しているという。 ロイターのレポート.
このチュートリアルでは、COBOLを使ってテキスト・メッセージを送信するための、ちょっとハックした方法を紹介する。メインフレームを起動し、3270端末を準備して、COBOLを書き始めましょう!
ちょっと待って
それは何だ? 数百万ドルのメインフレームに何百万ドルもするメインフレームにアクセスできないのか?もしかしたら、あなたの雇用主が1台持っていて、それを借りられるかもしれませんよ?ない?大丈夫、回避策がある。
前提条件
また Nexmo CLI.これを使用して、テキストメッセージを送信するための電話番号を購入することができます。
また、COBOLコンパイラも必要で、COBOLをシステム上で実行するためのネイティブ・バイナリに変換します。このチュートリアルでは GnuCOBOL.
GnuCOBOLは、COBOLをCに変換し、変換されたコードをコンパイルするフリーのCOBOLコンパイラです。Mac、Windows、Unix/Linux上で動作するネイティブ・バイナリを作成することができます。
GnuCOBOLのダウンロードリンクはこちらです。 ここで.Macユーザーはhomebrewを使ってインストールすることもできます:
エディターも必要だろう。私は OpenCobolIDE.簡単なテキストエディタで何とかなるかもしれない。COBOLモジュールの構造についてはもう少し後で話すことにして、なぜ適切なIDEを持つことがある程度不可欠なのかを説明する。
COBOLでテキストメッセージを送る
このチュートリアルでは、Nexmo CLIで電話番号を購入する方法と、その電話番号を使ってCOBOLでテキスト・メッセージを送信する方法を紹介する。
背番号の購入
テキストメッセージを送信するにはNexmo番号が必要です。番号をお持ちでない場合は、Nexmo CLIを使用して購入することができます:
一部の国では、英数字の送信者IDからメッセージを送信できることに注意してください。詳しくは カスタム送信者ID.
購入した番号をメモしてください。後で電話をかけるコードを書くときに使います。
COBOLモジュールの作成
COBOLからテキスト・メッセージを送信するには、いくつかの方法がある。しかし、これらの方法のほとんどは、使用しているハードウェアによって異なる。おそらくメインフレームにアクセスできないので、少しごまかすことになる。これから行うのは、Nexmo CLIを呼び出してテキスト・メッセージを送信できるCOBOLモジュールを作成することである。
まず、COBOLのモジュール構造について説明しよう。COBOLに関する広範なガイドをするつもりはないが、モジュールがどのような構造になっているかを知っておくことは重要だと思う。
カラムの構造
COBOLには2つの異なるフォーマットがある:固定形式と自由形式である。固定書式は、コードが特定の列に整列することを要求する:
| Name | Column | Usage |
|---|---|---|
| Sequences | 1-6 | Used for sequence numbers. These were initially used for card and line numbers, but now the compiler ignores them. Most editors will automatically generate these. |
| Indicator | 7 | Used for indicating a comment * or a - continuation of a previous line. |
| Area A | 8-11 | Contains the start of the DIVISION and SECTION. |
| Area B | 12-72 | Contains all of your other code and programming logic not contained in the other areas. |
この図は、hello worldモジュールの例を示している:

COBOL 2002は、このような列の制限を取り除き、A領域とB領域を組み合わせた自由な書式を導入した。
ディビジョン
COBOLモジュールは、ディビジョンと呼ばれる4つの異なる領域に分かれている:
モジュール名などの識別情報を提供する
IDENTIFICATION DIVISIONで、モジュール名などの識別情報を提供する。その
ENVIRONMENT DIVISIONこれは、あなたのモジュールが実行されているコンピューターに依存している部分を記述しています。その
DATA DIVISIONあなたのデータが定義されている場所。モジュールの
PROCEDURE DIVISIONモジュールのプログラミング命令が定義されている場所。
SENDSMS.cbl」という新しいCOBOLプログラムを作成し、各行の内容の前にスペースが必須であることに注意して、以下の内容を追加する:
IDENTIFICATION DIVISION.
PROGRAM-ID. SENDSMS.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY "Hello world".
END PROGRAM SENDSMS.OpenCobolIDEを使っているなら、このモジュールを実行すれば、コンソールに "Hello world "と表示されるはずだ:

データの定義
テキスト・メッセージの送信先番号、送信元番号、テキスト・メッセージの内容である。
COBOLのデータ項目は階層形式である。各変数にはレベル番号が与えられ、上位のレベルは下位のレベルに従属する。
例えば、次のような構造で日付を表すことができる:
01 WS-DATE.
02 WS-YEAR PIC X(4).
02 WS-MONTH PIC X(2).
02 WS-DAY PIC X(2).これにより MOVE "20190401" TO WS-DATEとして参照し、各コンポーネントを取り出すことができる。 WS-YEAR, WS-MONTHそして WS-DAY.逆もまた真である。
キーワードは FILLERキーワードは、構造体に定数を注入したり、入力データの特定の部分を無視したりするのに使うことができる。たとえば、日付をダッシュで区切って表示したい場合は、次のように書くことができる:
01 WS-DATE.
02 WS-YEAR PIC X(4).
02 FILLER PIC X VALUE '-'.
02 WS-MONTH PIC X(2).
02 FILLER PIC X VALUE '-'.
02 WS-DAY PIC X(2).では、次のコードを実行してみよう:
MOVE "2019" TO WS-YEAR.
MOVE "04" TO WS-MONTH.
MOVE "01" TO WS-DAY.
DISPLAY WS-DATE日付は次のように表示されます。 2019-04-01.
Nexmo CLIコマンドのビルド
Nexmo CLIがテキストメッセージを送信するために必要なコマンドを作成することで、これを利用することができます:
念のため、電話番号はそれぞれ15桁まで、メッセージ本文は160文字までとしましょう。
プログラムの WORKING-STORAGE SECTIONを追加する:
01 WS-COMMAND.
02 FILLER PIC X(5) VALUE "nexmo".
02 FILLER PIC X(5) VALUE " sms ".
02 WS-TO-NUMBER PIC X(15).
02 FILLER PIC X VALUE SPACE.
02 WS-MESSAGE PIC X(160).
02 FILLER PIC X(8) VALUE " --from ".
02 WS-FROM-NUMBER PIC X(15).
02 FILLER PIC X(10) VALUE " --confirm". Nexmo CLIを呼び出す
この CALL文は、他のプログラムやモジュールを呼び出すのに使われる。プログラムは SYSTEMプログラムは他の言語の execと似ており、プログラムからコマンドライン・プログラムを実行することができます。この WS-COMMANDには、Nexmo CLI経由でテキスト・メッセージを送信するコマンドが含まれています。
あとは変数を埋めて WS-COMMANDを SYSTEMプログラムに渡すだけです。
段落に以下を追加する。 MAIN-PROCEDURE段落に YOUR-PHONE-NUMBERをあなたの電話番号に、そして YOUR-NEXMO-NUMBERを購入したNexmo番号に置き換えてください:
MOVE "YOUR-PHONE-NUMBER" TO WS-TO-NUMBER.
MOVE "YOUR-NEXMO-NUMBER" TO WS-FROM-NUMBER.
MOVE "HELLO WORLD FROM COBOL" TO WS-MESSAGE.
CALL "SYSTEM" USING WS-COMMAND.これが完成したプログラムだ:
IDENTIFICATION DIVISION.
PROGRAM-ID. SENDSMS.
DATA DIVISION.
WORKING-STORAGE SECTION.
* nexmo sms <to> Hello world! --from <from> --confirm
01 WS-COMMAND.
02 FILLER PIC X(5) VALUE "nexmo".
02 FILLER PIC X(5) VALUE " sms ".
02 WS-TO-NUMBER PIC X(15).
02 FILLER PIC X VALUE SPACE.
02 WS-MESSAGE PIC X(160).
02 FILLER PIC X(8) VALUE " --from ".
02 WS-FROM-NUMBER PIC X(15).
02 FILLER PIC X(10) VALUE " --confirm".
PROCEDURE DIVISION.
MAIN-PROCEDURE.
MOVE "YOUR-NUMBER" TO WS-TO-NUMBER.
MOVE "NEXMO-NUMBER" TO WS-FROM-NUMBER.
MOVE "HELLO WORLD FROM COBOL" TO WS-MESSAGE.
CALL "SYSTEM" USING WS-COMMAND.
STOP RUN.
END PROGRAM SENDSMS.
試してみる
さあ、プログラムを実行し、あなたの携帯電話に新しいテキストメッセージが表示されたら、驚いてください。
これからの方向性
COBOLについての考察を楽しんでいただけたなら幸いです。COBOLはテキスト・メッセージを送信するのに最適な言語ではないかもしれないし、実行するハードウェアに大きく依存する。
もし挑戦する気があるなら、Steve Williamsは COBOL RESTクライアントを使ってNexmo APIを直接呼び出せるかもしれない。
送信メッセージをメッセージ・キューにキューイングし、Javaを使ってテキスト・メッセージを送信すれば、もっとうまくいくかもしれない。 Javaを使ってテキスト・メッセージを送る.
お使いのメインフレーム環境に応じて、IBMには以下のような説明があります。 HTTPクライアントとしてCICSを介してHTTP要求を行う.
COBOLについての詳しい情報は 国立アメリカ歴史博物館.COBOL開発チームを率いた女性、グレース・ホッパーの生涯については、こちらをご覧ください。 グレース・ホッパーの伝記.