ユニケージ開発手法

ユニケージ開発手法 (ユニケージかいはつしゅほう、)とは業務システム用の商用開発手法の1つ。ベンチャー企業ユニバーサル・シェル・プログラミング研究所（USP研究所）が考案し、独占的な権利を所有してライセンス販売を行っている。同社および開発パートナー契約を結んだユニケージ認定エンジニアが商用コマンドセットusp Tukubaiを使って開発を行う。

「一般的なプログラミング言語は非技術者には習得が困難である」という前提の元、非技術者でも習得が容易であるという理由でシェルスクリプトでシステム開発するのが特徴である。同社はシェルスクリプトを「もっとも歴史が長いローコードアプリケーションプラットフォーム」だと主張している。データベースの代わりやサーバー側の処理にしか適用できず、ユーザーインターフェースの開発にはHTML, Ruby, .NET Framework, Reactなどを使う。

特徴
同社のビジネスモデルは、ユニケージコマンドセットやアプライアンス・パッケージのライセンス販売、ユニケージ開発手法の教育と初期構築とサポート業務である。システムの内製化を目指して初期システム構築のみをUSP研究所監修の元、ユニケージの基礎教育を行いながら開発パートナーやユーザー企業と連携して開発する。その後の機能追加に伴うメンテナンス自体は開発パートナーやユーザー企業自身で行うことも可能である。

ユニケージ開発手法は開発方法論とされているが、無償で使えるものではない。利用するには独自コマンドセットなどを利用するための資格「ユニケージ認定エンジニア資格」に合格し、独自コマンドセットusp Tukubaiの使用ライセンス契約を結ぶことが必須である。

ソフトウェア開発の技術者（プログラマー）ではない現場の作業員（非エンジニア）が開発することを想定している。現場の作業員でもシェルスクリプト（bash）なら使える。ただし高度な書き方はしない。プログラマは次のようループを使った難しい書き方をする。

for i in 1 2 3 4 5 6 7 8 9; do
	echo "2×${i}＝$((2 * ${i}))"
done

しかし非エンジニアを対象としているユニケージ開発手法のユニケージエンジニアは、素人でも理解できるような次のような冗長な書き方をする。以下はユニケージエンジニアの作法その一 forやwhileなどの繰り返し構文の使用は控えるからの例である。

echo "2×1＝$((2 * 1))"
echo "2×2＝$((2 * 2))"
echo "2×3＝$((2 * 3))"
echo "2×4＝$((2 * 4))"
echo "2×5＝$((2 * 5))"
echo "2×6＝$((2 * 6))"
echo "2×7＝$((2 * 7))"
echo "2×8＝$((2 * 8))"
echo "2×9＝$((2 * 9))"

次のような例は

for i in 1 2 3 4 5 6 7 8 9 10; do
	rm a${i}.txt
	mv b${i}.txt B${i}.TXT
	touch c${i}.txt
done

ユニケージ開発手法の発想で記述すると次のようになる。

rm a1.txt ; mv b1.txt  B1.TXT ; touch c1.txt
rm a2.txt ; mv b2.txt  B2.TXT ; touch c2.txt
rm a3.txt ; mv b3.txt  B3.TXT ; touch c3.txt
rm a4.txt ; mv b4.txt  B4.TXT ; touch c4.txt
rm a5.txt ; mv b5.txt  B5.TXT ; touch c5.txt
rm a6.txt ; mv b6.txt  B6.TXT ; touch c6.txt
rm a7.txt ; mv b7.txt  B7.TXT ; touch c7.txt
rm a8.txt ; mv b8.txt  B8.TXT ; touch c8.txt
rm a9.txt ; mv b9.txt  B9.TXT ; touch c9.txt
rm a10.txt; mv b10.txt B10.TXT; touch c10.txt

繰り返し構文を使わなければ記述できない場合には、繰り返しの終了判断をループの最後に記述する。通常、whileは次のように最初に繰り返し終了判定を記述することが多い。

i=1
while [ $i -le 10 ]; do  # 10または10よりも小さければループ継続
	echo "${i}周目"
	i=$(( $i + 1 ))
done

ユニケージ開発手法では次のように終了判定を繰り返し構文の一番最後に書く。

i=1
while [ 1 ]; do
	echo "${i}周目"
	i=$(( $i + 1 ))
	[ $i -gt 10 ] && break; # 10よりも大きければループ終了
done

業務システムの開発を担当する現場の作業員は非エンジニアであり、繰り返し構文がでてくると理解が及ばないことがあるためである。開発効率は悪くなるが、非エンジニアでも理解できる書き方をすることで、高コストなソフトウェア開発の専門技術者が不要となり、結果的に開発コストを下げることができる。バッチ処理用途がメインで継続的に開発を行うことが目的ではなく、ハードウェアやプラットフォームが変わったとしても一度開発したソフトウェアを何十年も修正することなく動かすことを重視している。

データをプレーンテキストをベースとしたタグ形式・ネーム形式・フィールド形式と呼ばれるユニケージ用データ形式でデータを保存し、この形式を扱うために開発された100種類程度フィルタコマンドをシェルスクリプトから呼び出して利用することが技術の根幹となっている。

パイプで連結したコマンドは同時に起動するため、マルチプロセッサシステム上のカーネルで並列処理が行われることを期待してパイプを多用する。ただしソートや集計処理等の標準ストリームの入出力を遮るコマンドがパイプライン中にあったりパイプラインの個々のコマンドの処理速度が偏る場合は並列処理の効果は小さくなる。例えばパイプラインの途中にsortコマンドが存在する場合、sortコマンドの処理が完了するまでそれ以降のコマンドは処理を開始できず、またパイプでつないだコマンド中で一番遅いコマンドよりも速く処理を完了することはできない。パイプで連結するだけで十分な並列効果が得られない場合は同時に多数のプロセスを並列起動する必要がある。

シェルスクリプトとの違い
ユニケージ開発手法では商用コマンドセットusp Tukubaiを使用することが前提で、一般的なシェルスクリプトの書き方とは異なる独自のコーディング規約に則って利用する。この作法はプログラミング言語の一般的な常識と全く異なるものであり、例えば条件分岐やループや変数や関数は非推奨である。そのためシェルスクリプトでありながら一般的なシェルスクリプトとは全く異なる書き方をする。これは非エンジニアにはプログラミング言語の習得は困難であるという独自の理論に基づき、シェルスクリプトをローコードアプリケーションプラットフォームとして再解釈し、シェルスクリプトのサブセットとして利用しているからである。

ユニケージ開発手法ではコーディング規約に則った独自のディレクトリ構造やファイル形式を用い、独自の考え方や独自の専門用語を用い、ユニケージ専用コマンドを利用して業務システムを開発する独自のフレームワークである。同社が独自で考案したユニケージ開発手法を習得し、ユニケージ認定エンジニアに育てるためのコストが必要となる。この独自コマンドの存在とこのノウハウに基づく「作法」により、大規模システムへのシェルスクリプト適用が可能であると主張している。

作法の例：
 ファイルを上書きしない。なるべく消去しない。
 シェルスクリプトの相互呼び出しを行わない。
データベース管理システムではなくファイルを用いる。
 ユニケージ開発手法で定められたデータファイル、シェルスクリプトの置き場所の標準化に従う。
 forやwhile、関数や変数の使用を控える。
 プロセス間通信にファイルを使う。
 ファイルの冒頭に自ファイル名、日付・連絡先、処理の前提条件・結果、マジックナンバーの意味を書く。

独自コマンドの種類や仕様についてはユニバーサル・シェル・プログラミング研究所が管理している。アプリケーション開発者は、コマンド作成や改変を行わない。既存のコマンドの組み合わせでは不可能であったり、時間的な費用（プログラマの作業時間、計算機の演算時間）が高くなる演算が見つかった場合、議論を経て新規コマンドを提供する。

新規コマンドの開発に慎重になることには、以下の理由がある。
 コマンドの種類や仕様を各システムで画一化することで、管理費用が増大することを防ぐ。
 自作コマンドの作成は時間がかかるため、コマンドの組み合わせ技を考えたり人に聞いたりする方が、結果としてアプリケーションプログラマの仕事が早く終わる。

評価

採用例・実績
 成城石井、良品計画などで、自社システムの内製用ツールとして2009年に導入された。
「ユニケージ開発手法および同開発コマンドセット」がIPA主催、「ソフトウェア・プロダクト・オブ・ザ・イヤー 2008　システム・基盤 分野」を受賞している。
 東急ハンズにおいてハンズラボの技術の中核として採用されていた。

脚注

外部リンク
 有限会社ユニバーサル・シェル・プログラミング研究所
 ユニケージ開発手法とは
 Unicage Development Method - Its Philosophy and Technologies (Japanese Audio) - YouTube

ソフトウェア開発