ユニケージ FAQ
Ⅰ. ユニケージについての基本
- ユニケージとはなんですか?
- UNIXとはなんですか? Windowsとはどう違うのですか?
- シェルスクリプトとはなんですか?
- コマンドとはなんですか?
- ユニケージにはどのような利点があるのですか?
- ユニケージはどのような技術に使えるのですか?
- ユニケージは「速い」と聞きましたが、どういう意味ですか? なぜ速いのですか?
- ユニケージは、同じスクリプト言語(例えばPython)などとどう違い、どのような利点があるのですか?
Ⅱ. ユニケージによる開発
Ⅲ. コマンド・ユニケージ技術に関するご質問
- 排他制御はどうするのですか?
- リレーションはどのように行うのですか?
- エラーハンドリングはどうなっていますか?
- ロールバックは出来ますか?
- データアクセスに対するセキュリティはどうなっていますか?
- コマンドインサートなどの攻撃に対する対処はどうするんですか?
- ウエブアプリケーションをCGIで記述するとプロセス過多にならないですか?
- ユニケージはクラウドと相性がよくないというのは本当でしょうか?
- ユニケージは保守が難しいと聞きましたが、実際のところどうなのでしょうか?
Ⅳ. ユニケージとデータベース
Ⅰ. ユニケージについての基本
Ⅰ-1. ユニケージとはなんですか?
ユニケージ(ユニケージ開発手法)とは、UNIX系のOSを基本とし、さらに追加されたいくつかの コマンドとシェルスクリプトという技術を基本としてシステムを構築する開発手法のことです。現代 の言葉でいうと「ローコードアプリケーションプラットホーム」の一つともいえます。 UNIXというシステムの思想と基本部分とを最大限に活かす開発手法で、企業の基幹システム や生産管理システムなど、様々な分野への応用が可能です。
Ⅰ-2. UNIXとはなんですか? Windowsとはどう違うのですか?
UNIX(ユニックス)とは、半世紀以上前に開発が始まった、コンピューターの基本システム(オペ レーティングシステム・OS)です。 UNIXには様々な特徴がありますが、「小さなコマンドを連携させて求める処理を行う」「データは 基本的にテキストファイルで保存し、可読性を高める」といった特徴があり、これはユニケージの 思想の基本をなしています。 なお、UNIXの考え方を元に独自に開発された、UNIXと極めて「よく似た」システムがLinux(リ ナックス)です。近年ではUNIX=Linuxと考えられることも多いですが、実際には異なります。 なお、コンピューターの基本システムという点では、UNIXとWindowsは同じカテゴリーに属しま す。ただ、Windowsはコンピューターに慣れていないユーザーが扱いやすいことを前提として、グ ラフィカルなインターフェイス(GUI)を基本としています。これに対し、UNIXは(今は基本的にGUI も備えていますが)コマンドを主としたインターフェイス(CUI)操作が基本です。
Ⅰ-3. シェルスクリプトとはなんですか?
UNIX上でユーザーが対話するためには、コマンドを打ってその結果を受け取る必要がありま す。その際、ユーザー側の窓口となるプログラムがシェルと呼ばれるものです。 シェルはユーザーからの入力を受け取り、それをシステムに渡します。そしてシステムが実行し た結果をシェルがユーザーへと返します。 シェルはそれだけではなく、ユーザーが入力などを実行しやすい便利な環境を用意するなど、 便利な機能を備えています。 さて、シェルで連続してコマンドを入力するのであれば、それをいくつか並べてファイルとして実 行させる手もあります。このようにコマンドを並べ、シェルがそれを解釈して実行させるようなプロ グラム(人間が読める形で書かれているため、スクリプトといいます)をシェルスクリプトといいま す。シェルスクリプトとは、このような、シェルが実行可能なプログラムのことをいいます。
Ⅰ-4. コマンドとはなんですか?
コマンドとは、ユーザーがコンピューターに対して、特定の事柄を実施するために入力する命令 のことです。また、そのためにあらかじめシステムに用意された実行可能なプログラムのこともコ マンドといいます。 Windowsなどでは、一般的にはマウスなどを使ってユーザーがシステムやアプリケーション・プ ログラムから表示される選択肢などを選びながら仕事をしていきます。これに対して、ユーザーが 何かの出力(例えばファイルの一覧)を得たいときに、コマンドを実行してその結果を得る(UNIXで あれば「lsというコマンドをシェルを通して実行する」)、ということもできます。 コマンドを通してコンピューターに仕事をさせることをCUI(コマンドライン・ユーザー・インタフェー ス)と呼びます。CUIはキーボードでの作業が主体となり、また実行すべきコマンドを覚えなけれ ばいけない、打ち間違いなどが起こりやすいなどの欠点が指摘されてきましたが、ユーザーが慣 れてくればこういった弱点は自然に解消されます。また、定型的な処理は、コマンドをまとめる (シェルスクリプト)ことによってすばやく実行することも可能です。
Ⅰ-5. ユニケージにはどのような利点があるのですか?
ユニケージの利点は、以下のような言葉で要約できるでしょう。 ・速い…UNIXの基本コマンドといくつかのコマンドから成り立ったシンプルなフレームワークです ので、余計な処理がなく、速度が速いことが特徴です。 ・早い…多くの処理に使われるようなコマンドをあらかじめ用意してあること、また後述のように シェルスクリプト自体が習得しやすいものであるため、システム構築を早く実現できます。 ・習得しやすい…シェルスクリプト自体はプログラミング言語と考えても非常に習得しやすいもの であり、コンピューター技術に精通していない人でも覚えて使いこなすのは容易です。 ・やわらかい…シェルスクリプトはテキストファイルであり、UNIXなどに用意されているエディター といった編集プログラムで容易に変更できます。処理内容に変更があった場合にもすぐにそれに 応じた変更を行うことができます。 ・長持ち…UNIXの50年以上の歴史の中で、シェルスクリプトはずっと使われ続けてきました。こ れからもUNIXがある限り使われていくでしょう。他のプログラミング言語がともすれば流行り廃り に影響されがちな中で、シェルスクリプトはこれからもずっと使われていきますし、従ってユニケー ジで書かれたプログラムも長く使うことができるのです。
Ⅰ-6. ユニケージはどのような技術に使えるのですか?
ユニケージが使える範囲は非常に幅広いです。 企業における基幹システム(会計処理、物流管理、発注処理など)、生産現場における生産管 理(工程管理、生産物品管理など)、高速な処理が必要となる分野(大量データの高速処理)など が代表的です。 上記はあくまでも代表的な事例であり、適用範囲は無限であるといえるでしょう。いまもし業務 でお困りの分野があれば、その分野にユニケージがお役に立てるはずです。
Ⅰ-7. ユニケージは「速い」と聞きましたが、どういう意味ですか? なぜ速いのですか?
ユニケージが速いというのには複数の意味があります。 1つは「実行速度が速い」というものです。ユニケージで使われるコマンド群(Tsukubaiコマンド) はC言語で書かれており、近年のコンピューターの技術動向(並列化、他コア化)による恩恵を最 大限に享受できるように設計されています。このため、コマンドによるデータ処理を非常に高速で 行うことができます。 また、「構築が速い」ことも事実です。コマンド群は実際の処理画面でよく使われる内容だけを 厳選しており、そのコマンド名もketaやmarumeなど、内容が直感的にわかる名前になっていま す。そのため、構築するプログラマーも処理内容においてどのようなコマンドを使えばよいかがす ぐわかり、総じて開発速度が速くなります。
Ⅰ-8. ユニケージは、同じスクリプト言語(例えばPython)などとどう違い、どのような利点があるのですか?
あらゆる道具にそれに応じた使い方・場面と適さない使い方・場面があるように、プログラミング 言語は開発手法でも得手・不得手、あるいは適した場面・適さない場面があります。 例えば、Pythonは近年の開発現場では極めて高くもてはやされるプログラミング言語ではあり ますが、大規模システムの構築や継続的な変更などといった実システム分野への適応では難し い場合も見受けられます。 また、Python自体が流行り始めたのはここ10年強くらいです。その前はJava、さらにその前… というように、開発に使われるプログラミング言語にも流行り廃りがあります。こういったいっとき の「はやり」に乗ってしまった場合、将来的に(例えば10年後、20年後といった段階で)システムの 改善や機能追加などに困難を生じるかも知れません。その頃その言語がマイナーなものとなって しまっていたり、開発が中止されるなどして、技術者が確保できなかったり、そもそも動かすため のプラットホームが準備できないということも考えられます。 ユニケージで使用しているシステム(C言語及びシェルスクリプト)は、UNIXというものが誕生し た1970年代にまで遡る歴史あるシステム、そして現在でも進化を続けているシステムです。 UNIXというものがある限り(なくなるということはまず考えられませんが)、この手法はずっと使い 続けられます。その分、10年後、20年後といった長いスパンでシステムの保守・拡張を考えていく ことができます。
Ⅱ. ユニケージによる開発
Ⅱ-1. ユニケージによる開発は、具体的にどのように行われるのでしょうか?
ユニケージは、いきなりプログラムを書くというような開発手法ではありません。むしろ ユニケージ開発手法におけるプログラミング部分は比較的少ないといえるでしょう。 開発においていちばん重視すべき部分は、システム化する業務の流れ、さらにはデータの流れ です。当社はまず最初にこの部分を徹底的に追求します。お相手の企業さんの業務フロー、 発生データ、実際の現場における(現行の)システムの使われ方などをヒアリング、 あるいは直接お伺いして把握し、要件定義、データの定義を実施していきます。 その上で実際のプログラム作成、テスト、テストデータを使用した試験運用、実運用へと 進んでいきます。
Ⅱ-2. ユニケージでは、ミドルウェアは使わないのでしょうか?
一般的な企業のシステムでよく使われるようなミドルウェアは、ユニケージでは使用しません。 なぜなら、ユニケージはその企業のシステム、さらにいえばシステム化すべき業務に最適なシス テムを作るものであり、ミドルウェアに「業務を合わせる」ようなことはしないからです。 もちろん、既存のミドルウェアとユニケージ採用システムを併存したい、あるいは徐々に置き換 えていきたいというようなご要望にも対応できます。
Ⅲ. コマンド・ユニケージ技術に関するご質問
Ⅲ-1. 排他制御はどうするのですか?
ulock コマンドを使用します。ulock コマンドはロックファイルを排他的に作成します。また、そのロックファイルが存在する間は、待ち続けます。
例)ulock コマンドの実際の記述例
if ulock lockfile; then
###############################
# 排他的に行いたい処理を記述
###############################
# 最後にロックファイルを消去する
rm lockfile
fi
ulock コマンドにはタイムアウトや古いロックファイルの消去、シェアードロックなどの機能もあります。
Ⅲ-2. リレーションはどのように行うのですか?
ユニケージで使用するデータは整理されたテキストファイルです。リレーションを実現するために、ユニケージでは、ファイル同士を連結し、連結結果を標準出力にだす各種コマンドが用意されています。列数/項目指定、InnerJoin/OuterJoin など様々なバリエーションがあります。
例)MASTER の1列目と TRAN の2列目をキーにして2つのファイルを連結
$ cat MASTER
001 Japan
002 America
$ cat TRAN
a 001 100
b 001 200
c 002 300
d 003 400
$ join1 key=2 MASTER TRAN > RESULT
$ cat RESULT
a 001 Japan 100
b 001 Japan 200
c 002 America 300
Ⅲ-3. エラーハンドリングはどうなっていますか?
シェルスクリプトでは各コマンドの終了ステータスコードを捕捉することができます。bash においては、パイプでつながれた各コマンドの終了ステータスは配列変数 PIPESTATUS に収められ、それが全部0なら正常終了と見なされます。
例)エラーハンドリングのコード例。plus コマンドは引数の数値をすべて足した結果を標準出力に出します。
function ERROR_CHECK()
{
[ $(plus ${PIPESTATUS[@]}) -eq 0 ] && return 0
echo error:$1
exit 1
}
command1 |
command2 |
command3 > result
ERROR_CHECK $LINENO
Ⅲ-4. ロールバックは出来ますか?
ユニケージのコマンドは入力ファイルを処理して別の出力ファイルに結果を書き出します。つまりどの時点においても、処理の元ファイルと結果ファイルは別であり、重要なファイルは常に保存しています。
例えばマスターの更新では、次のようにすべての更新前後のファイルを残します。シンボリックリンクでファイルを同名参照できるようにします。リンクを切り替えるだけでいつの時点にでもロールバックすることができます。
if ulock lockfile; then
time=$(date +%Y%m%d%H%M%S).$$
upl key=1 MASTER TRAN > MASTER.$time
rm MASTER
ln -s MASTER.$time MASTER
rm lockfile
fi
Ⅲ-5. データアクセスに対するセキュリティはどうなっていますか?
一般にユニケージでデータアクセスに対するセキュリティ対策を講じるときは、クライアント側は、一旦ウエブサーバーとCGIなどのプログラムを介してデータにアクセスするようにシステム構築し、直接データを持っているサーバーにログインして端末操作できないようにします。その上で、権限体系によるデータのアクセス制御はアプリケーションで実装します。 個人情報などの重要情報は暗号化コマンドを使います。復号時にもパイプを使ってストリーム処理しますので、処理途中にファイルやメモリ上に展開されることはありません。
Ⅲ-6. コマンドインサートなどの攻撃に対する対処はどうするんですか?
ユニケージによる入力データはファイルに納め、ファイルのままコマンドのみで加工するのを基本とし、データをシェル変数にセットすることを少なくしています。データのチェックもファイルに対して行うことができるコマンドが用意されています。 さらに、exec, eval, :, source コマンドのチェックシェル変数を行の先頭においていないかのチェック awk の system 関数などのチェックができる「お作法チェッカー」スクリプトがあり、不法アクセスを誘引する記述の排除を行います。
Ⅲ-7. ウエブアプリケーションをCGIで記述するとプロセス過多にならないですか?
プロセス数が数千程度だと今の標準的なサーバーだと問題はありません。万オーダーになってとるべき対策は、CGI 内部で次のような処理順番待ちを行う仕組みを入れます。
semwait --less_than 10 "semaphore.*"
touch semaphore.$$
##############
# 実際の処理
##############
rm semaphore.$$
これで解決しないようなオーダーのアクセスに対しては FastCGI 設定してウエブアプリケーション自体をサーバー化してプロセス数を増やさないようにします。
Ⅲ-8. ユニケージはクラウドと相性がよくないというのは本当でしょうか?
いいえ、そのようなことはありません。 現在、ユニケージ開発手法を採用したシステムがクラウド上でも盛んに運用されています。 クラウドシステムで多く使われているシステムはLinuxであり、ユニケージ開発手法とももっとも 愛称がよいシステムといえます。また、ユニケージ開発手法の利点である「早い(速い)開発」「高 速な実行速度」などは、クラウドという環境で真価を発揮します。 実サーバー(オンプレミス)からクラウドへのスケーリング、逆にクラウドサーバーからオンプレミ スサーバーへの移設、あるいは両者の併存といったどのような環境でも、疎結合的なシステムで あるユニケージ開発手法は柔軟に対応することが可能です。 ですので、システムマイグレーションなどの際にクラウド化を検討している場合には、ユニケー ジ開発手法は最良の選択肢としてご検討いただけるものといえるでしょう。
Ⅲ-9. ユニケージは保守が難しいと聞きましたが、実際のところどうなのでしょうか?
保守が難しくなる理由としては、 ・要件定義や入出力データなど、システム開発の際に定義しておかなければいけない箇所が曖昧に なってしまった ・古いプログラムを無理に拡張してしまい、修正が困難になってしまった ・複数人でプログラミングを行った際、プログラミングスタイルの違いなどにより可読性が悪い プログラムができてしまい、保守が難しくなる。 などが考えられます。これらはユニケージに限らず、プログラミング言語一般にいえるものです。 まず、ユニケージで使用するシェルスクリプトは、ローコードの代表例ともいえるだけあって、 1つのプログラムはそれほど長くありません。ですので、プログラマー、あるいは開発したい人が 全体を把握しやすいだけでなく、修正も容易です。 また、ユニケージでは、統一されたプログラミングスタイルである「お作法」を重視し、常にこれ に沿ってプログラムを記述することになっています。ですから、お作法に則って書かれたプログラ ムであれば、誰もがそれを読み、修正することが可能です。
Ⅳ. ユニケージとデータベース
Ⅳ-1. データベース(DBMS)を使わないでシステムを作るってどういうことですか?
まず最初に、「データ」と「データベース」の違いについてお話しします。 「データ」は、住所録や販売結果などの情報のことを示します。「データ」をコンピュータの中でどのように保存するかは、いくつかのやり方があります。 (1)「ファイル」として保存する ExcelファイルやPower Pointファイルなどがこれにあたります。 (2)「データベース」に保存する 「データベース」とは正確には「データベースマネージメントシステム(DBMS)」と呼び、その正体はソフトウエアです。DBMS というソフトウェアにデータを保存するには、各データベースメーカが提供する SQL というコンピュータ言語を使って、データを保存するための命令をします。 DBMS も基本的にはデータをファイルに保存していますが、保存されるファイルはデータベースメーカー特有のフォーマットを持っていて、SQL を使わずにその中身を読むのは非常に難しくなっています。 最近では、中身を読みにくいファイルを避けるという傾向があり、データベースも XML 形式とか Json 形式と呼ばれるテキストファイルで保存できるように改良されてきてはいますが、多くが SQL を使わないと中身を読むのが難しいです。 (ちなみにエクセルファイルもパワーポイントファイルも現在はXML形式のテキストファイルです。) ユニケージではデータを「(2) DBMS に保存」ではなく「(1) テキストファイルとして保存」しています。 データベースでは SQL を使って DBMS に保存すると前述しましたが、ユニケージではコマンドという基本的な命令文を使ってデータを直接ファイルに保存します。 ユニケージには多くのコマンドがあり、SQL が持っている機能を全てカバーしています。 例えば、SELECT 文という SQL の機能は、self というコマンドが提供しています。self コマンドは直接ファイルを読んで、ファイルに結果を保存します。 逆に DBMS は、その機能がデータベースメーカーが提供している SQL の機能に限られます。例えば、ORACLE にはできて MySQL には出来ない、という機能があったりします。データベースメーカーはその提供している機能でお互い競い合っています。 ユニケージはデータベースは使いませんが、このようにデータの保存のやり方が違うだけで、機能的には問題ありません。だから、データベースを使わないでもシステムが作れるわけです。
Ⅳ-2. データベース(DBMS)を使わない理由を教えてください。
ユニケージのコマンドは、全てのデータベースメーカーが提供する機能をカバーしています。加えてデータベースが扱うのが不得意な履歴データや不定形データを扱うコマンドもあり、ユニケージの方がより柔軟なシステムを構築するのに優れているため、DBMS を使う理由がないのです。 DBMS の制約がないため、自由に機能を実現することが可能になります。 DBMS は単純なデータ処理を行う場合は、確かに便利ですが、ビッグデータや履歴データ、不定形のデータを取扱うのは不得意です。またIoTなど多くの分散コンピュータを扱うのも便利ではありません。また、DBMS 自体のバージョンアップは今まで作ったプログラムの改変を伴うことが多く、システムを維持するのも大変です。 ユニケージ は、DBMS よりもより OS に近いところで動作するため、自由にファイルを配置したり、コマンドを作成することによって、シンプルな処理から複雑な処理まで、幅広く対応することが可能です。
Ⅳ-3. データベース(DBMS)と共存は出来ないのですか?
出来ます。そのためには各 DBMS に接続できるクライアントコマンドを利用します。
例えば、SQL Server に接続するには、unixODBC と FreeTDSをインストールし適切な設定を行えば下記のコマンドで DB にシェルスクリプトからアクセスできます。
$ tsql -S mssql -U username -P password
Oracle ならば、Instant Client パッケージをインストールして sqlplus コマンドを使います。ユーザー情報などDBで一元管理されている情報をDBより取り出してユニケージで利用するときなどに使います。トランザクションデータなどは、DBからCSVファイルに出力してもらいそれをシェルスクリプトで利用するケースが多いです。
Ⅳ-4. UIはどうやって作るのですか?
UIを作る手段にこだわりはありません。HTML, Ruby, .NET Framework, React など様々な手法で開発が可能です。ユニケージはデータベースの代わりや、サーバ側の処理のためなどに使います。