第四世代言語

第四世代言語（、4GL）とは、FORTRANやCOBOLのような手続き型言語より高機能なプログラム言語を一般的に指す言葉である。

主にアプリケーションプログラムを開発する際に用いられる。

4GLは単体で存在することよりも、特定のアプリケーション開発システム（たとえばデータベースシステム）と組になって提供されることが多い。たとえば、データベースアクセスや報告書作成用言語やDBMSの言語、OracleのPL/SQLなどである。

4GLはプログラマだけではなく、エンドユーザーでも簡単なパラメーターを対話形式で指定するだけで、表計算のような業務処理を行ったり、あるいはプログラムを作成したり出来るようになっているのが特徴である。

第四世代というのは、機械語を第一世代、アセンブリ言語を第二世代、手続き型言語一般を第三世代と解釈するからである。

4GLの定量的定義は、Capers Jones がファンクションポイント法の研究の一環として行った。それによると、プログラミング言語の世代は開発者の生産性で決まり、人月当たりのファンクションポイント数 (FP) で表される。4GLは、12 FP/人月から 20 FP/人月となる言語である。これをソースコードの行数に換算すると、ファンクションポイント当たり16行から27行でコーディングできるのが4GLだということになる。

4GLはドメイン固有言語 (DSL) とよく比較される。

研究者によっては、4GLはDSLのサブセットだとする者もいる35th Hawaii International Conference on System Sciences - 1002 Domain-Specific Languages for Software Engineering。

アセンブリ言語が最新の開発環境（MS Studio）にもあることから、今後も各世代の言語が混在して利用されると予想する者もいる。

Forthは、4番目の言語という意味が名前の由来である。しかし4GLではない。

 歴史 
それ以前から論文や会話で「4GL」という単語は使われていたが、最初に公式に使ったのは1982年のの著書 Applications Development Without Programmers であったMartin, James. Application Development Without Programmers. Prentice-Hall, 1981. .。

同書では、手続き型でない高級仕様記述言語を指していた。

最初の原始的な4GLとしては、IBMのRPG（1960年）が挙げられる。その後、Informatics の MARK-IV（1967年）、スペリーのMAPPER（1969年から社内で使用、1979年外部リリース）が登場した。

4GL という用語が生き延びてきた原因はいくつかある。まずこの用語は非常に広範囲のソフトウェア製品に適用される。また、ある種の特徴や実装能力を求める手法全体を表すとも考えられる。3GLはプログラマに大きな力を与えたが、同様に4GLは一般の人々に開発環境を開放した。

ある意味では4GLはブラックボックス処理の例であり、世代が後になるほど機械そのものから遠くなっている。このため、4GLはエラーが発生した場合に理解するのが困難でデバッグしづらい傾向がある。4GLはビジネス分野で主に使われ、技術分野でも一部使われている。機械そのものから遠いということは、応用分野に近くなっていることを意味する。

初期の4GLでサポートされていたデータ入力方法は、パンチカードでの入力を考慮して、1行72桁に制限されていた。4GLは少ないパンチカードで各種処理が可能になっており、当時の3GLのプログラムのカードデッキに比較すると、枚数が非常に少なくて済んだColumbia University Computing History: IBM Cards。その後、コンピュータのメモリが増え、パンチカードから端末入力に変わっても、72桁のパンチカードのメタファーがそのまま使われ続けた。それでも、非常に洗練されたアプリケーションがサポートされた。インタフェースが改善され、より長い文が入力可能となり、文法に沿った改行などが可能になると、さらに能力がもたらされた。例えばNomadには、以下のような一節がある。

 もう1つのNormadの能力を示す例として、Nicholas Rawlings はコンピュータ歴史博物館のNCSS社に関する展示へのコメントがある。それによると、ジェームズ・マーチンは自身が Engineer's Problem と呼ぶ標準問題（職務格付けが平均で7以上の技術者に6%の昇給を与える）をNomadで解く方法をRawlingsに尋ねた。マーチンはCOBOLのプログラムが書かれた数十枚の紙と、Informatics社の MARK-IV で書かれた1、2枚の紙を提示した。Rawlings は同じ処理を行うプログラムを次の1行で提示した……

4GLの発展はいくつかの要因に影響を受けており、特にハードウェアとオペレーティングシステムの制限は大きな影響を与えた。4GLが登場したころ、ハードウェアやオペレーティングシステムが違えば、アプリケーション開発環境はシステム固有なものにならざるを得なかった。例えば、スペリーのMAPPERがそれである。MAPPERは様々なアプリケーションに有効であることを証明し、最新のプラットフォームに移植されてきた。最新版はユニシスのBISに含まれているUnisys. Business Information Server (BIS).。MARK-IV は現在ではCAから VISION:BUILDER として販売されている。

アッチソン・トピカ・アンド・サンタフェ鉄道はシステム開発にMAPPERを使った。これは4GLを使ったソフトウェアプロトタイピングであり、エンドユーザーによるプログラム開発プロジェクトの例であるLouis Schlueter, User-Designed Computing: The Next Generation, 1988. [book on report generator and MAPPER systems] 。この場合の考え方は、鉄道の専門家にMAPPERの使い方を習得させる方が、プログラマに「鉄道操作の複雑な事情」を教えるよりも簡単だ、というものであったMcNurlin & Sprague. Technologies for Developing Systems Information Systems Management in Practice. Prentice Hall, 2003.  。

その後コンピュータの発展に伴って、4GLはデータベースシステムと関連付けられるようになり、初期の4GLとはかけ離れた技法やリソースを使うようになった。

 具体例 
汎用
DataFlex
Forte 4GL
IBM Cross System Product
IBM VisualAgen/VisualAge GeneratorIBM VisualAgen/VisualAge Generator
PowerBuilderPowerBuilder
WinDev
Visual DataFlexVisual DataFlex（Microsoft Windows のみ）
 データベース問い合わせ言語
FOCUS
Informix-4GLInformix-4GL
NATURAL
Progress OpenEdgeProgress OpenEdge
SQL
 報告書生成
BuildProfessionalBuildProfessional
LINC
METAFONT
NATURAL
Oracle ReportsOracle Reports
PostScript
Progress OpenEdgeProgress OpenEdge
RPG-II
 データ操作/解析/報告
Ab InitioAb Initio
ABAP
Audit Command LanguageAudit Command Language
Clarion Programming LanguageClarion Programming Language
FOCUS
IDL
IGOR Pro
Informix-4GLInformix-4GL
LabVIEW
Mathematica
MATLAB
NATURAL
PL/SQL
Progress OpenEdgeProgress OpenEdge
R言語
S言語
SAS
SPSS
Stata
XBase++XBase++
 データベース駆動型GUIアプリケーション開発
GenexusGenexus
UNIFACEUNIFACE
 画面生成
FOURGENFOURGEN
Oracle FormsOracle Forms
GUI生成
4th Dimension
MATLAB の GUIDE
Omnis StudioOmnis Studio
OpenROADOpenROAD
LiveCode (← Revolution ← RuntimeRevolution  )
 ウェブ開発
ColdFusion

 注釈 

 出典 

 関連項目 
 ドメイン固有言語
 RAD
 ロー・コード
 ノー・コード

 外部リンク 
 Fourth Generation Environments
 Aubit project GPL/GNU の4GLオープンソース開発ツールのプロジェクト
 Domain-Specific Languages for Software Engineering 4GL と DSL の比較

Category:プログラミング言語の分類