楽にプログラミングでき,コンパイルなしで動かせるスクリプト言語。ここ数年,“軽い言語”という意味を持つ“Lightweight Language(LL)”として見直されている。本特集では,LLの良さとは何か,開発にどう適用すればよいかを解説する。さらに現場のエンジニアがどうLLを使いこなしているか,実例を紹介する。
近年,Javaに代表される“重厚な”Webシステム開発言語に対するアンチテーゼとして,より手軽な「Lightweight Language(LL)*1 」が注目を集めている。
LLの定義は明確ではないが,
(1)やりたいことを少ないコード量で実装できるため,プログラミングにかける労力が少ない
(2)インタプリタ型*2
であるため,アプリケーションを開発してから実行させるまでの時間がかからない
(3)言語構造がシンプルであるため,言語の習得期間が短くて済む
といったことが共通の特徴になるだろう(図1)。ここでは,LLの中核を成す,4つのスクリプト言語を紹介したうえで,企業情報システムの開発への適用について解説する。
|
|
図1●スクリプト言語のソースコードの量はJavaより少なくて済む カンマで区切られた「東京,神田,秋葉原」という3つの駅名データを順に読み出して,「次は東京」,「次は神田」,「次は秋葉原」と表示するプログラムを各言語で作成した [画像のクリックで拡大表示] |
コンピュータを操作する“台本”
そもそもスクリプトという言葉は,映画や放送の台本という意味を持つ。スクリプト言語もコンピュータを操作する“台本”を書くための言語と言える。だがスクリプト言語にそれ以上の厳密な定義はない。開発スピードを重視したインタプリタ型言語がそう呼ばれているに過ぎない。
読者がスクリプト言語と聞いて思いつくのは,Perl, PHP, Python, Rubyあたりではないだろうか。これら4つの言語に共通しているのは,オープンソースのオブジェクト指向言語ということだけではない。開発者が多く携わる大規模アプリケーション開発に耐えうるポテンシャルを持ち,Webアプリケーションの言語として広く使われている。コミュニティ活動も盛んだ(表1)。
|
|
表1●代表的なスクリプト言語の特徴 [画像のクリックで拡大表示] |
ルーツはジョブ制御の記述
スクリプト言語の歴史は古い。1960年代に登場したバッチ処理やジョブ制御を記述するJCL(ジョブ制御言語)に端を発する。
その後,コンピュータの利用目的が汎用化し,スクリプト言語で記述される対象が多様化してくると,さまざまなソフトウエア・コンポーネントを連携する「glue(糊)言語」としての性質を帯びていった。例えば,UNIXにおけるシェルスクリプト,WindowsにおけるMS-DOSバッチ,MacintoshにおけるAppleScriptは,OS上で多様なコマンド/プログラムを組み合わせて,新たなアプリケーションを作り出す役割を担っていた。
1990年代後半からインターネットの隆盛が目立つようになると,動的なWebページを開発するため,PerlがCGI*3 の記述言語として台頭してきた。Perlの豊かな表現力と強力なテキスト処理能力が,開発者のニーズとマッチした結果である。
しかし大規模なWebアプリケーションをCGIで開発すると,リクエストごとにWebサーバーのプロセスを起動しなければならず,十分な処理性能を得られない。そこで開発のトレンドはCGIからWebアプリケーション・サーバーへと移っていき,アプリケーション記述言語としてJavaを採用することが増えていった。
再び脚光を浴びる2つの理由
だが,ここへきてスクリプト言語が再び注目を集めている。それはなぜか。筆者はこのムーブメントは決して偶然の出来事ではなく,2つの背景があるからだと考える。
1つ目の背景は開発期間の短縮化である。インターネットを使ったビジネスモデルの変革スピードは今や,ドッグイヤーをしのぐほど速くなった。新システムの企画からリリースまでの期間をいかに短くするかが,ビジネス成功の鍵になっている。
これに伴い,より簡単にプログラミングできる言語が好まれるようになってきた。AmazonやGoogleといった巨大ネット企業では,開発言語として一部,スクリプト言語を採用している。スクリプト言語は,目覚しい勢いで新サービスを展開し続ける原動力になっているのである。
またここ数年,開発の短期化の要求に呼応するかのように,セッション管理やページ遷移制御といった,Webアプリケーションに不可欠な機能を備える,スクリプト言語向けの本格的なMVC(Model View Controller)フレームワークも登場している。主なものに,Rubyで使える「Ruby on Rails*4 」やPerlで使える「Catalyst*5 」がある。
このようにスクリプト言語の特徴を活かして大規模システムを開発する環境は整いつつある。「スクリプト言語は小規模向けシステムのもの」というイメージは,Webの世界では過去のものになりつつある。
スクリプト言語が再び注目を集めるもう1つの背景が,スクリプト言語で開発したアプリケーションの実行速度が実用域に達してきたことだ。インタプリタ型のために「実行速度が遅い」というスクリプト言語の弱点は,ムーアの法則*6 に従って向上していくコンピュータの処理能力によって解決しつつある。
実際,リクエストごとにプロセスを起動させないようにして,スクリプト言語で書いたアプリケーションの実行速度を高める,「mod_perl」や「mod_ruby」といったHTTPサーバー用プラグイン・ソフトを使えば,Webアプリケーションをスクリプト言語で記述しても,Javaに劣らぬパフォーマンスを得られる(図2)。
|
|
図2●スクリプト言語で開発したWebアプリケーションの処理性能は,Javaなどに比べて見劣りしない [画像のクリックで拡大表示] |
EoDを満たすスクリプト言語
企業情報システム開発で広く普及しているJavaの世界では最近,“EoD”というキーワードが注目を集めている。EoDとはEase of Developmentの略。いかに開発を容易にするかという開発容易性を表す言葉だ。
スクリプト言語はEoD,すなわち開発容易性を満たしているだろうか。答えはイエスである。スクリプト言語は覚えなければならないプログラミング上の約束事が少なく,自由に記述できるからだ。例えば,アプリケーションで使う変数の型をあらかじめ決める必要があるJavaやC++などの言語と異なり,スクリプト言語は変数の型を決める必要がない。
また,JavaやC++などではコンパイルが必要だが,インタプリタ型のスクリプト言語では変更を即座に確認できる。このことも開発容易性を向上させる。例えばJavaの場合,コンパイルした後,TomcatなどのWebアプリケーション・サーバーにプログラムを配備しなければ,Webページの変更内容を確認できない。最近,配備の手間を軽減するツールが出回っているが,それでも煩雑さは残る。一方のスクリプト言語は,ソースコードを書くとすぐに実行できるので,変更を即座に確認できる。
プログラマの確保が課題
これまではスクリプト言語を使うことの優位性を述べてきた。だが,良いことばかりではない。実際の開発プロジェクトでスクリプト言語を採用するうえでの課題もある。
1つ目の課題が,アプリケーション記述言語としての自由度の高さである(図3)。これは長所の裏返しになるのだが,自由度が高いことで開発が容易であるがゆえに,「開発者によって品質が均一になりにくい」,「ソースコードの可読性が下がる」という課題が出てくる。この課題はコーディング規約などを設けることで軽減できる。ただし規則で縛りすぎると,開発生産性を下げることになりかねないので,注意が必要だ。
もう1つの大きな課題が,プログラミング要員の確保である。要するにJavaやCに比べてスクリプト言語を書けるプログラマが圧倒的に少ないのだ。これはマネジメント上の課題だが,実開発では考慮すべき重要事項である。この課題の解決策は,スクリプト言語を使いこなせるエンジニアと,活用事例を地道に増やしていくこと以外にない。
|
|
図3●スクリプト言語にはメリットがある反面,企業情報システムの開発言語として利用するときには注意が必要だ |
特徴の活かし方を検討すべき
最後に企業情報システムの開発でスクリプト言語を採用するときの留意点を述べておく。
まず「スクリプト言語の長所を十分に活かすには,どんなプロジェクトの形態にすべきか」を考えるようにしたい。企業システム開発はとかく大規模になりがちだ。だからといって「スクリプト言語を大規模開発で採用するにはどうすればよいか」と考えるのは避けたい。大人数で開発するためには,記述の仕方を統一する必要がある。そうなると,スクリプト言語本来の良さである自由度の高さを損ねてしまう恐れがあるからだ。自由度が高いからといって「規約や規則で制限する方法を考える」のは早計だ。
同様の理由から,「スクリプト言語の自由度の高さを活かしながら,チーム開発をするにはどうすれば良いか」も考えるべきだ。ここでは言語が持つ長所の活かし方を考えるべきだろう。要は適材適所に使っていくのが大事だということだ。
スクリプト言語は今最も注目すべき,優れた道具の1つであることに間違いない。本記事がスクリプト言語に取り組むきっかけになれば幸いだ。
|
|