こんにちは!JP1/AJSのジョブ設計やバックアップ運用、日々お疲れ様です。
JP1のジョブネットやジョブのプロパティには、用途やメモを残せる「コメント」欄がありますよね。 そのコメント欄に、何気なく #(シャープ) という記号を使って、以下のように記載したことはありませんか?
コメント例: #1処理用のジョブネット
これを、ajsprint コマンドなどでテキストファイルに定義出力(退避出力)して中身を確認してみると……
cm="##1処理用のジョブネット";
「あれ? シャープが『##』に増えてる!? もしかして文字化けか定義の破損……?」
と、ちょっと不気味に感じた経験がある方もいるかもしれません。今回は、この現象が起きる理由と、そのまま運用しても大丈夫なのか(安全性)について解説します!
1. 結論:これはJP1の正常な仕様(エスケープ処理)です!
結論から言うと、これはバグでも異常でもなく、JP1/AJSが正しく定義を出力するための正常な仕様(エスケープ処理)です。
なぜこのような変換が行われるかというと、JP1の定義テキストファイル内において、# という記号は「環境設定パラメータ」や「コメント行」などを表す、システム用の特別な意味を持つ文字(制御文字)だからです。
もしコメント内の # をそのまま出力してしまうと、JP1が定義ファイルを読み込む(回復する)際に、「ここから先はシステムへの命令かな?」と誤解してしまい、エラーの原因になってしまいます。
そのため、JP1は「このシャープはただの文字(コメント)ですよ!」ということを証明するために、自動的に # を重ねて ## に変換(エスケープ)して出力しているのです。
2. 回復(インポート)するとどうなる?
一番心配なのは、バックアップからジョブネットを復元(ajsdefine などで回復入力)したときに、コメントが「##」のままになってしまうのではないか、という点ですよね。
これも心配ありません。 JP1は定義ファイルを読み込む際、「『##』という並びを見つけたら、元の『#』1文字に戻して画面に表示する」という逆の処理(デコード)を自動で行ってくれます。
そのため、回復後のAJS View画面を開いてプロパティを確認すると、何事もなかったかのように綺麗に元の「#1処理用のジョブネット」に戻っています。
3. それでも、ジョブネットのコメントに「#」は使わない方が良い?
仕様としては完全に安全であることが分かりましたが、運用の現場目線で言うと「可能であれば『#』は使わない(または別の文字に代替する)方が無難」と言えます。
理由は以下の2点です。
-
他社製のツールや自作スクリプトでパース(解析)しづらくなる 定義テキスト(ajsprint結果)をExcelに変換したり、Pythonやシェルスクリプトで読み込んで「ジョブネット定義一覧」を自動作成したりする運用を行っている場合、この
##のエスケープ仕様を考慮してコードを書かないといけないため、実装が面倒になります。 -
運用担当者が「不気味」に感じて混乱する 今回のように、仕様を知らない後任の担当者やオペレーターが定義ファイルを見たときに、「設定ミスでは?」と不要な不安や確認の手間(オオカミ少年効果)を生んでしまいます。
💡 おすすめの代替案
シャープをどうしても使いたい場合は、以下のような代替表記にするのがおすすめです。
-
全角の「#」を使う(全角であればシステムに干渉しないため、そのまま「#」と出力されます)
-
「No.1」や「第1」などの表記に変える
まとめ
-
コメントに
#を使うと、退避出力ファイルでは##にエスケープされる。 -
回復(インポート)すれば、自動で元の
#に戻るのでシステム的な問題はない。 -
ただし、テキストでの可読性やスクリプト運用のしやすさを考えるなら、全角の「#」や「No.」で代用するのがベスト。
一見すると不気味な現象ですが、中身はJP1が誤動作を防ぐために裏で頑張ってくれている証拠です。仕様を正しく理解して、日々のジョブ運用に役立ててくださいね!
