面倒な作業だが避けては通れない――。開発を進めていくと,そんな場面に遭遇することが少なくないのではないだろうか。

 そんなとき,手軽にプログラムを作成/実行できるスクリプト言語を使うと,面倒な作業を簡単に済ませることができる(図4)。Part2では,スクリプト言語の特徴を十分に活かして,やっかいな作業を楽に進めている6人のエンジニアの活用事例を,開発フェーズごとに紹介しよう。

図4●さまざまな開発作業の効率化にスクリプト言語は役立つ
図4●さまざまな開発作業の効率化にスクリプト言語は役立つ

設計フェーズ:プロトタイプでの確認に活用

 「アプリケーションを設計してみたものの,問題なく動くかどうかが不安だ。手早く確かめる方法はないかな」。そんな悩みを抱えているとき,スクリプト言語が役に立つ。

 日本総合研究所 技術本部で,Javaアプリケーションの開発プロジェクトに携わる橋本吉治氏は,設計作業の際,Rubyを使ってプロトタイプのプログラムを作り,設計内容を確認している。自らが書いたUMLモデルに従って,Rubyでプロトタイプを作成し,実行させてみて設計内容に問題がないかどうかをチェックしているのである。

 RubyはJavaと同じオブジェクト指向言語で,クラスを定義することでプログラムを開発できる。「Rubyで作成するソースコードの量は,場合にもよるがJavaの数分の1程度の量で済む。Javaでは必須のコンパイル作業をする必要もないので,設計内容を反映させたプログラムをすぐに実行し,動作に不具合がないかを手軽に確認できる」(橋本氏)。

 この手軽さを,橋本氏はRubyを使う最大のメリットだと考えている。「自分で書いた設計内容がプログラムとして正しく動くかを,すぐに確かめられる。安心感を持って次の作業に移れる」と橋本氏は話す。

実装フェーズ:ソースコードを容易に検証

 スクリプト言語が役立つのは,設計内容の確認だけではない。ソースコードの検証にも威力を発揮する。

 日立ソフトウェアエンジニアリング 技術開発本部 生産技術センタの正村勉センタ長は2002年,ある大規模開発プロジェクトに携わっていたとき,プログラマが作成し終えたソースコードの内容を分析するツールをPerlで開発した。

 正村氏が開発した分析ツールは,ソースコードのなかからSQL文を探し出し,ソースコードの中に書かれているプログラム・モジュールがそれぞれ,データベースのどのテーブルをどう操作しているかを表形式でWebページに表示するものだ(図5)。

 正村氏は当時,そのプロジェクトで,データベース操作がソースコードで設計書どおりに記述されているかどうかを分析する作業を担当していた。この作業ではソースコードから,SQL文をすべて洗い出さなければならない。正村氏は開発中,この作業を繰り返し行う必要があったが,分析するソースコードの量は最大70万行にも上った。

 「数人のエンジニアが手作業でSQL文を洗い出すと,最大1カ月はかかっただろう。『手作業でやるべき仕事ではない』と早々に見切りをつけ,ツールを作った」(正村氏)。

 正村氏が作成したPerlのソースコードの量は,ツールの基本的な機能の部分でわずか数行だった。「数行書けば面倒な作業をせずに済む。工夫次第で自分の仕事の生産性を高められるので,仕事が楽しくなる」と正村氏は語る。

図5●Perlで開発したソースコード内のSQL文の分析ツールの仕組み
図5●Perlで開発したソースコード内のSQL文の分析ツールの仕組み
[画像のクリックで拡大表示]

テスト・フェーズ:煩雑な作業を数行で自動化

 スクリプト言語が威力を発揮するのは,設計やソースコードの検証作業だけではない。テストやチューニング作業も効率化できる。ここでは,ソラン,NTTコムウェア,NTTデータ3社の各エンジニアが,スクリプト言語を使ってどう作業を効率化しているかを見ていこう。

 ソラン信濃事業本部ITソリューション事業部でオープン系システムの開発に携わっている松澤憲一郎氏はPerlを使って,テスト用データを自動生成したり,負荷テストを実施するツールを作成している。

 Perlにはランダムな数字の列を生成する処理命令「rand」や,数値を文字に変換する処理命令「pack」などがある。松澤氏はこれらの処理命令を複数使い,「日付」や「氏名」といった項目を含む負荷テスト用データを自動生成している。

 松澤氏は負荷テスト・ツールもPerlで自作したことがある。数年前,XML形式のファイルを添付したメールを受け付ける,業務データ集計システムの開発プロジェクトで,負荷テストを担当したときだ。

 負荷テスト・ツールの基本機能を作るのに,松澤氏が書いたPerlのプログラム行数は10~20行ほど。と言うのも,XMLデータの生成やメール送信といった機能を備える,Perlのソフトウエア・モジュールが無償公開されているため,ゼロからプログラミングする必要がなかったからだ。

 松澤氏は,モジュールが公開されているWebサイト「CPAN」から必要なものをダウンロードして使っている。「CPANに公開されているモジュールを活用すれば,やりたいことがすぐにできる。CPANのモジュールを利用させてもらい,とても助かっている」と松澤氏は言う。

性能改善の当たりをつける

 スクリプト言語を使いこなせば,かなり充実した機能を持つチューニング用ツールも作成できる。

 NTTコムウェア プロジェクト管理統括部 技術SE部門で,Javaアプリケーションの性能改善を担当している兒玉松男氏は2003年,サーバーの処理性能の低下がどこで起きているかを分析しやすくするため,Perlで分析用ツールを開発した。

 具体的には,Javaプログラムの実行環境であるJavaVM(Java Virtual Machine)の挙動を示すログ情報,スレッド・ダンプの内容を基に,JavaVMのどこで処理性能が低下しているかをWebページに表示できるようにした。処理性能が低下している部分を色付けして表に示す機能を加えたので,どこが原因なのかを一目で確認できる(図6)。

 「スレッド・ダンプの生データを読んで,原因を突き止めようとするのは大変。表形式に表示するツールを作り,色分けして分かりやすくすることで,問題点が一目で分かるようになった。おかげで,どこを改善すればよいか当たりをつけやすくなった」と兒玉氏は効果を語る。

図6●Perlで開発したJavaプログラムの性能分析ツールの画面
図6●Perlで開発したJavaプログラムの性能分析ツールの画面
[画像のクリックで拡大表示]

テストの報告書を自動作成

 NTTデータ基盤システム事業本部システム方式技術ビジネスユニット第一技術統括部でオープン系システム開発プロジェクトの性能テストを担当している筒井邦弘氏は2004年末,同僚のエンジニア数人と協力して,Windowsのスクリプト言語,JScript*7)を使い,性能テストの自動化ツールを開発した。

 この自動化ツールは「どんな処理要求をサーバーに送るか」や「サーバーに処理要求を送るパソコンの台数など,条件をどう変えて何回テストをするか」といった,テストの実施内容をツールに設定しておくと,夜間に自動的に性能テストを実施して,テスト結果のデータを収集する。

 特筆すべきなのが,報告書作成機能。(1)性能テストで自動的に収集したテスト結果のデータをExcelに取り込んでグラフを作成する,(2)Wordファイルであらかじめ用意してあるテスト報告書の所定の位置に,作成したグラフを貼り付ける,といった処理を自動的に行う(図7)。

 「前日の晩にテスト内容を設定して実行させておくと,翌朝には,テスト結果をまとめた報告書を見ることができる。これで,本来時間を割くべきテスト内容の検証作業に集中できるようになった」(筒井氏)。

 ツールを開発して1年ほどになるが,「ツールを使っていなかった1年前は,1システムを分析するのに,40~50個のグラフを作成する必要があった。これを2人で手作業でやろうとすると1週間はかかる。現在は1年前に比べて,扱うテスト結果のデータが3倍になったものの,テストを実施して結果を検証し,報告書をまとめる作業を1日程度で済ませることができるようになった」と筒井氏は話す。

図7●JScriptで開発した性能テストの自動化ツールの出力結果
図7●JScriptで開発した性能テストの自動化ツールの出力結果
[画像のクリックで拡大表示]

プロジェクトマネジメント:進ちょく管理も手軽に実現

 インターネットでは,スクリプト言語で書かれた多くのツールが無償公開されている。そのツールをカスタマイズすると,ゼロから開発しなくても,機能が充実したツールを利用できる。

 Webアプリケーション開発会社,ウェブコアでは,Webデザイナー,プロデューサ,品質管理担当者など開発チームのメンバーが使う進ちょく管理システムとして,インターネットで無償公開されている「Plone」をカスタマイズしたものを,日々の仕事で活用している(図8)。

 Ploneは,Pythonで開発されたコンテンツ管理ソフト。Ploneのソースコードは公開されているので容易にカスタマイズできる。「どの作業がまだ着手されていないかが一目で分かる機能を追加して,『手になじむ』進ちょく管理システムに仕上げられた」とウェブコアの柴田淳 代表取締役は話す。進ちょく管理システムは2004年10月に柴田氏が1人で,仕事の合間を縫って1週間で開発した。

 「作業状況の進ちょく管理を手作業でやろうとすると,管理担当者が必要になる。だが,その担当者がプロジェクトのキーパーソンであることがほとんど。進ちょく管理システムを開発することで,これまで管理業務に携わっていたキーパーソンが現場の指揮に時間を割けるようになった」と柴田氏は進ちょく管理システムのメリットを語る。

図8●Pythonで開発した進ちょく管理システムの画面
図8●Pythonで開発した進ちょく管理システムの画面
Pythonで開発されたコンテンツ管理ソフト「Plone」をカスタマイズして,案件の種別や緊急度といった情報も管理できるようにした
[画像のクリックで拡大表示]

スクリプト言語を活用するネット企業

 開発作業の負担を軽減するのに有効なスクリプト言語。ネット企業では,サービス提供用のWebシステムの開発言語としているケースが多い。

 検索/ブログ作成サービスを提供するはてな(本社東京都渋谷区)は,創業した2001年以来,Perlを開発言語として採用している。同社サイトのページ・ビューは今や1カ月で4億。だが「性能に全く影響はない」(同社の伊藤直也取締役)。

 はてなはPerl用の開発フレームワークを独自に整備して,開発/保守効率を上げている。伊藤氏は,採用する開発言語をJavaにするか,スクリプト言語にするかといった議論は,本質的ではないと指摘する。むしろ「保守/拡張しやすいように,フレームワークを整備したり,オブジェクト指向設計のパターンを学ぶなど,言語によらず必須のスキルをエンジニアが身に付けておくことが重要だ」と強調する。

 懸賞付きメール配信サービスなどを提供するGMOメディア(本社東京都渋谷区)はJavaとPHPを開発言語として採用している。大規模システムではJavaを,データベースのデータを表示するといった簡単なシステムにはPHPを採用している。「今後はPHPを数百万ユーザーに向けたサービス提供用システムの開発に適用していく」と,同社システム本部システム開発部の佐藤真人部長は話す。