気になる開発プロダクツ

第5回 NetBeans 6.0 M10

この記事を読むのに必要な時間:およそ 4.5 分

Rubyプロジェクトでのアプリケーション作成

RubyスクリプトをNetBeans上で実行できることを確認したら,次はRubyプロジェクトを開いてアプリケーションを作成してみましょう。ここで作成するのは,gihyo.jpのRSSデータをHTMLに変換してファイルに書き込むアプリケーションです。実行する前に,ネットワークに接続されているかどうかを確認しておいてください。

Rubyプロジェクトは,File -> New Projectの順にクリックし,図2を開きます。ここでRuby -> Ruby Application -> Nextの順にクリックして図3に進みます。ここでプロジェクトの名称を入力します。デフォルトではRubyApplication1などの名称になっていますが,ここに新しい名称を入力して「Finish」をクリックします。

図2 Rubyプロジェクトの作成

図2 Rubyプロジェクトの作成

図3 プロジェクトの名称を設定

図3 プロジェクトの名称を設定

そうすると図4のようにRubyプロジェクトが開きます。画面左上がソースコードなどの配置を示しています。画面の右半分にRubyスクリプトを入力していきます。

図4 Rubyプロジェクトが開いたところ

図4 Rubyプロジェクトが開いたところ

スクリプトの入力時には,図5のようなコードアシスト機能を利用できます。これはクラスやオブジェクトがもつメソッドなどの一覧を表示し,選択したものがスクリプトに追加されるものです。

Javaの場合は,オブジェクトに対してあらかじめデータ型が明示されていますので,アシスト時にどの型のメソッドを表示すればよいかということが比較的わかりやすいのですが,Rubyのような動的型付け言語の場合,定義時にデータ型が宣言されていないことが多いため,アシストしようとしているものがどんなオブジェクトなのかということを知るには,ソースコードを解析していくしかありません。これがIDEでスクリプト言語をサポートするにあたってぶつかる大きな難関の1つでした。これを突破した事例が出てきたことで,スクリプト言語をサポートするIDEは今後どんどん増えていくことでしょう。

図5 コードアシストもサポート

図5 コードアシストもサポート

このようにして,リスト1のようなスクリプトを作成しました。これにより,リスト2のように受信したRSSデータがリスト3のようなHTMLに変換され,ファイルに書き込まれます。実行結果は図6のようになります。また,リスト3をWebブラウザで表示したものを図7に示します。変換後のデータが書き込まれたファイルが画面左上のツリーに追加されているのがわかります。そして画面下のOutputには,putsによる出力が表示されています。

ファイルIconvは文字コード変換を行うクラスで,UTF-8で配信されたRSSデータをシフトJISに変換してファイル'gihyo_rss.html'に書き込んでいます。RSSデータから必要な部分を取得するために,REXMLライブラリも利用しています。これはJRubyに備わっているXMLデータを扱うライブラリです。

図6 スクリプトが実行できた

図6 スクリプトが実行できた

図7 HTMLをWebブラウザで表示

図7 HTMLをWebブラウザで表示

リスト1 RSSデータを取得してHTMLに変換しファイルに書き込む

require 'iconv'
require 'net/http'
require 'rexml/document'
require 'uri'

# HTMLファイルのパス
filePath = 'gihyo_rss.html'
# RSSデータのアクセス先
url = 'http://www.pheedo.jp/f/gihyo_rss2'

# RSSデータを取得する
rss_doc = Net::HTTP.get( URI.parse( url ) )

File.open(filePath, 'w') do |html|

  # RSSデータ(XML形式)を解析する
  rss = REXML::Document.new(rss_doc)
  rss_title = rss.get_elements( '//channel/title' )[0].text

  # HTMLの出力開始
  html << Iconv.conv( 'Shift_JIS', 'UTF-8', "<html><head><title>#{rss_title}</title>" )
  html << Iconv.conv( 'Shift_JIS', 'UTF-8', "<meta http-equiv='Content-Type' content='Shift_JIS' /></head><body>" )
  html << Iconv.conv( 'Shift_JIS', 'UTF-8', "<h2>「#{rss_title}」から取得したリンク先</h2>" )
  html << '<ul>'

  # リンク先ごとにHTMLに変換・ファイルに出力
  rss.elements.each( '//item' )  do |item|
    title = item.get_elements( 'title' )[0].text
    link = item.get_elements( 'link' )[0].text
    puts Iconv.conv( 'Shift_JIS', 'UTF-8', title )
    html << Iconv.conv( 'Shift_JIS', 'UTF-8', "<li><a href='#{link}'>#{title}</a></li>" )
  end

  html << '</ul>'
  html << '</body></html>'

# ファイル出力終了
end

リスト2 変換前のRSSデータ(抜粋)

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="/css/rss20.xsl" type="text/xsl"?>
<rss xmlns:pheedo="http://www.pheedo.com/namespace/pheedo" version="2.0">
<channel>
 ..........
 <item>
  <title>第1回 移行前の基礎知識</title>
  <link>http://www.pheedo.jp/click.phdo?i=8c97a10b27de6403b85f0d288885c6a4</link>
<pheedo:origLink>http://gihyo.jp/dev/feature/01/php-migration/0001</pheedo:origLink>
  <description>2007/7/14にPHP4のメンテナンス終了日がアナウンスされ,通常のメンテナンスが2007/12/31まで,セキュリティフィックスが2008/8/8までと発表されました。本特集では,これを踏まえてPHP4.4からPHP5.2への移行について解説します。<br style="clear: both;"/>
      <a href="http://www.pheedo.jp/click.phdo?s=8c97a10b27de6403b85f0d288885c6a4"><img alt="" style="border: 0;" border="0" src="http://www.pheedo.jp/img.phdo?s=8c97a10b27de6403b85f0d288885c6a4"/></a>
  </description>
  <pubDate>Thu, 02 Aug 2007 10:40:40 +0900</pubDate>
  <category domain="http://gihyo.jp/dev/feature/01/php-migration">残り一年! PHP4からPHP5への移行</category>
  <guid isPermaLink="false">http://gihyo.jp/dev/feature/01/php-migration/0001</guid> 
  <author>大垣靖男</author>
 </item>
 ..........
</channel>
</rss>

リスト3 変換後のHTMLデータ(抜粋)

<html>
  <head>
    <title>gihyo.jp:総合</title>
    <meta http-equiv='Content-Type' content='Shift_JIS' />
  </head>
  <body>
    <h2>「gihyo.jp:総合」から取得したリンク先</h2>
    <ul>
      <li><a href='http://www.pheedo.jp/click.phdo?i=8c97a10b27de6403b85f0d288885c6a4'>第1回 移行前の基礎知識</a></liv
    </ul>
    ..........
  </body>
</html>

著者プロフィール

沖林正紀(おきばやしまさのり)

SE/プログラマを経て,WebアプリケーションやXMLなどについて雑誌記事や書籍の執筆活動を始める。大手メーカで製品資料の作成や,セミナーの講師を担当したこともある。現在は,取材記事や製品レビューなどに執筆活動の幅を広げる一方,プログラミング教材の開発も手がけている。

著書