PR

 ソースコードを生成する作業、すなわち「コーディング」とは、プログラミング言語を使って、設計書の内容を機械が解釈可能なソースコードを記述していくことを指します。「ソフトウエア開発の自動化」と聞くと、多くの人が真っ先に思い浮かべるのがソースコードの自動生成ではないでしょうか。

 古くから設計書からソースコードを自動生成する技術には高い注目が寄せられてきました。例えばそれは、CASEツール(Computer Aided Software Engineering)などの形で提案され、実現に向けたチャレンジが果敢に行われてきた歴史があります。ソフトウエア開発の自動化とは、コーディングの自動化を中心に発展してきたといっても過言ではありません。

 ソースコードの自動生成により、ソフトウエア開発における製造から試験までのデリバリーを大きく短縮することが可能となります。それにより、時代とともに高度化するフィードバックサイクルの中で、改善の量や頻度、そして質に応えられるようになると考えられています。

 現在、コーディングの自動化を実現するツールは様々なものが提案されています。しかしながらどのツールも万能というわけではなく、開発するソフトウエアの性質によって得意不得意な分野が存在します。そのため、昨今のコーディングの自動化ツールでは、目的に合わせて、高い生産性を実現できるものを選ぶことが重要となっています。

技術の進化は必ずしも高い生産性に結びつかない

 コーディングの自動化、つまりプログラムの自動生成技術は、それ自体は目新しいものではなく、プログラミング言語の技術とともに進化してきたといえます。例えば、今でも使われている自動化技術としてアセンブラ、コンパイラがあります。

 これは人間に分かりやすい抽象化されたプログラム言語、つまり計算機の機種などに依存せず、自然言語により近い形で記述できる言語から、コンピュータのCPUが直接理解し実行できるマシン語を自動生成(変換)するものです。今ではJavaやC#といった高級言語からの自動生成に発展しており、もはや業務アプリケーションをアセンブラで書く必要はほぼなくなり、より設計に近い形式でプログラミングが可能となっています。

 これら自動化技術の発展は、人間が扱えるソフトウエアの規模をより大きくすることを成功しています。コーディングの自動化技術とは、ソフトウエアを動作させるための仕様記述を、より人が扱いやすいように、抽象度が高い方向へ、上流に向けて進展させることを意味しています。

 一方では「4GL」(4th Generation Language)と呼ばれる、より高級と位置づけられるプログラミング言語や、MDA(Model Driven Architecture)などのソフトウエア設計手法などの技術の登場もありました。これらの技術もより抽象度が高く、より上流を表現できることを目指し開発されたといえます。

 しかし残念ながら、これらの技術は必ずしも、理想とされる高い生産性を実現できているわけではありません。その原因の一つとして、過度な“汎用化の模索”が挙げられます。