最終更新時刻:2008年7月25日(金) 21時03分

2

beanshellで、ちょっとしたときにJavaを使う

公開日時:
2007/11/28 00:03
著者:
danjo

Java API、使ってますか?に触発されたので、Javaのスクリプト言語実装の一つBeanShellについてポストしてみます。

Java界隈で、JVM上で動作するスクリプト言語実装が注目されている。
知っている範囲で、以下のJVM上のスクリプト言語実装がある。

  • Jython
    PythonのJVM実装。長い歴史を誇る
  • Groovy
    JavaにRubyの文法を取り入れた独自言語
  • JRuby
    RubyのJVM実装。Ruby on Railsで海外での流行に合わせて、JavaデベロッパからもRubyデベロッパからも注目されている
  • Rhino
    JavaScriptのJVM実装。JDK6にバンドルされた
  • BeanShell
    Javaに文法が近い

繰り返しになるが、BeanShell(以下bsh)の特徴は以下。

  • Javaに文法が近い

JVM上のスクリプト言語のユーザは、以下の2種類に分けられると思う。

  1. 元々スクリプト言語を使っていた開発者が、JVM上でもその言語を使いたい場合
  2. Javaの開発者が、簡便のためにスクリプト言語を使いたい場合

さて、「ホーキング宇宙を語る」と言う本の中で、著者のホーキングは執筆時に以下のアドバイスを受けたという話がある。

本に数式を1つ入れる度に、売上は半分になる

ホーキングは数式を最小限に減らし(e=mc^2の1つだけらしい)、その本はベストセラーになった。

後者のユーザにスクリプトを使ってもらうことを考えると、クロージャ等の別言語から輸入されたシンタックスには、覚えるためのコストが必要になる。
私の周りには、Javaの開発経験はあるが、PythonやRubyは経験がない人たちが大勢いる。
私は彼らに簡単なスクリプトの便利さを知ってもらい、やがてスクリプトを書けるようになってもらいたい。
bshなら他の言語より学習コストは小さいので、もしかしたら使ってくれるかもしれない。

以下はSQLをOracleに投げる簡単なプログラムをJavaとbshで書いたもの。

 

SampleOra.java

import java.sql.*;

public class SampleOra{
  public static void main(String[] args){
    String drv  = "oracle.jdbc.driver.OracleDriver";
    String url  = "jdbc:oracle:thin:@servername:1521:SID";
    String user = "user";
    String pass = "pass";

    try{
      Class.forName(drv);
      Connection con = DriverManager.getConnection(url, user, pass);

      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("select 'Hello, world!' from dual");
      rs.next();
      String hello = rs.getString(1);

      System.out.println(hello);
    }catch(Exception e){
      ;  // do nothing
    }
  }
}

sampleora.bsh

import java.sql.DriverManager;

drv  = "oracle.jdbc.driver.OracleDriver";
url  = "jdbc:oracle:thin:@servername:1521:SID";
user = "user";
pass = "pass";

Class.forName(drv);
con = DriverManager.getConnection(url, user, pass);

stmt = con.createStatement();
rs = stmt.executeQuery("select 'Hello, world!' from dual");
rs.next();
hello = rs.getString(1);

print(hello);

上記サンプルを実行したい場合は大変です。コードをファイルとして保存し、Oracleの接続環境を整え、bsh-2.0b4.jar と適当なJDBCドライバをクラスパスに通て以下のような感じでコマンドを起動して下さい。

 

$ javac SampleOra.java
$ java SampleOra

$ java bsh.Interpreter sampleora.bsh

 

bsh版はJava版に比べ、スクリプト言語的として使いやすくするための以下の利点がある。

  • 記述量の減少
    bshでは、インタプリタがスクリプトを1行ずつ(1ステートメントずつ)読み込んでは処理する。エントリポイントとしてのmainメソッドの定義や、mainメソッドのためにMainクラスを定義する必要がない。

    また、コード中の例外はインタプリタが補足するため、ハンドリングする必要のない例外はtry〜catchで囲わなくて良い。

  • コンパイルが不要
    起動がjavaコマンド1つになる。
    javac/javaコマンドを使用する場合は、コンパイル時(Compile time)と起動時(Runtime)の区別がありますが、bshでは意識しない。javacで起きる類のエラーは起動時に報告される。
  • 動的型付け
    bshでは、変数の型付けはLoosely Typedと呼ばれる動的型付けになる。
    以下の例のように、型を宣言しない変数fooにはいろいろな型の値を代入できる。

foo = 1;
foo = "1";

Javaと同じように型を宣言することもできる。
型を宣言した変数barに別の型の値は代入できない。

int bar = 2;
bar = "2";
// Error: EvalError: Variable assignment: bar: Can't assign

java.lang.String to int : at Line: 5 : in file: :

bar = "2"

感触はつかんでもらえたでしょうか。

※このエントリは CNET Japan ブロガーにより投稿されたものです。シーネットネットワークスジャパン および CNET Japan 編集部の見解・意向を示すものではありません。

このエントリーへのコメント

ブログにコメントするにはCNET_IDにログインしてください。

このブログについて

ブロガープロフィール

アーカイブ

2008年7月
  12345
6789101112
13141516171819
20212223242526
2728293031  

カテゴリ

ブログネットワーク

アルファブロガー

外資系エグゼクティブの日々今アーキテクチャが面白い
外資系エグゼクティブの日々
クロサカタツヤの情報通信インサイトインターネットのリュミエール
クロサカタツヤの情報通信インサイト
平野敦士カールのアライアンスInsightGoogleお前もか?
平野敦士カールのアライアンスInsight
江島健太郎 / Kenn's ClairvoyanceiPhoneという奇跡
江島健太郎 / Kenn's Clairvoyance
末吉隆彦 ロケーションウェアの「空」と「実」サミット、サミット、そして今こそ!公衆無線LAN
末吉隆彦 ロケーションウェアの「空」と「実」
佐々木俊尚 ジャーナリストの視点暗黙共同体へ−秋葉原事件で考える
佐々木俊尚 ジャーナリストの視点
鈴木健の天命反転生活日記パラレルワールドとしての電脳コイル
鈴木健の天命反転生活日記

読者ブロガー

夢幻∞大のドリーミングメディア2011年テレビ滅亡論
夢幻∞大のドリーミングメディア
将来のPC業界パワーバランス最適なマウスの移動速度は?
将来のPC業界パワーバランス
電子政府パブリックコメントの抜粋パブリックコメントは国民に知られていなかった( 2 )
電子政府パブリックコメントの抜粋

企画特集

DELLが掲げる「新・仮想化アセスメントサービス」DELLが掲げる「新・仮想化アセスメントサービス」
〜企業システムの仮想化環境の構築を支援〜

新着コメント

 おひさしぶりです。  どこにコメントをつけるべきかと迷ったもので、この......
【初音ミク】キーボードを作ってみた
投稿者:first_note
櫻吉さんの記事エントリが気になって、私も調べてみました。すると...Mac、Wi......
最適なマウスの移動速度は?
投稿者:朝之丞
いちのせ さん、コメントありがとう御座います。 >「諦めたら、そこで試合......
[緊急入荷 ビックカメラ有楽町店]HP 2133 Mini-Note PC(HP Mini)
投稿者:朝之丞
しばらく前にフィンランドに行ってきました。大事な点がひとつ。 フィンラン......
2011年テレビ滅亡論
投稿者:tfujita
ミニノートPCはこれからのスタンダードになってくる気がします。コンシューマ......
[緊急入荷 ビックカメラ有楽町店]HP 2133 Mini-Note PC(HP Mini)
投稿者:いちのせかずま

ブログネットワークとは?

CNET Japan ブログネットワークは、元はCNET Japanの一読者であった読者ブロガーと、編集部の依頼により執筆されているアルファブロガーたちが、ブログを通じてオンタイムに批評や意見を発信する場である「オピニオンプレイス」、また、オピニオンを交換するブロガーたちが集うソサエティです。

広い視野と鋭い目を持ったブロガーたちが、今日のIT業界や製品に対するビジョンや見解について日々熱く語っています。

あなたもブログを書いてみませんか?

CNET Japanやその他サイトが提供するITニュースやコンテンツへの意見や分析、 ビジネスやテクノロジーに対するビジョンや見解について語っていただける方を 募集しています。ご応募はこちらから

ブログの投稿・管理

ブログの投稿はこちらから(※ブロガー専用)

ブログアワード2007開催決定!

今年最も活躍したブロガーを表彰します。詳細はこちらから

αマークって?

これは、CNET Japan 編集部の依頼に基づいて執筆されているCNET Japan アルファブロガーによるブログの印です。

Good!って?

CNET Japan ブログネットワーク内で拍手の代わりに使用する機能です。ブログを読んで、感激した・役に立ったなど、うれしいと思ったときにクリックしてください。多くGood!を獲得した記事は、より多くの人に読まれるように表示されます。

レビュー

[レビュー]高い信頼性を普通に使う地球に優しい電源ユニット--Antec EarthWattsシリーズ EA-650
“自作ユーザーは、電源ユニットに何を求めるのか?”出力なのか、安定性なのか、それとも機能性なのか?難し
オンリーワンの個性を極めた超薄型テレビ--日立 Wooo UTシリーズ
日立製作所の超薄型液晶テレビWooo UT 770シリーズは2008年6月にラインアップが増強され、さらに日立らしい
[レビュー]“この手があったか”と思わせるパワーユーザーも納得のPCオンデマンド--「VALUESTAR G タイプR Luiモデル」+「Lui RN」詳細レビュー
「VALUESTAR GタイプR Luiモデル+PCリモーター」は、設置場所にとらわれずにPCを使える、NECが新しく提案
今週の新製品総チェック:ドコモ、au夏モデルが続々店頭へ、ビデオカメラは新機種ラッシュ
NTTドコモ、auなど、ケータイ夏モデルの店頭発売日が決定し、盛り上がりを見せている。9.8mmの超薄型ケータ
[レビュー]テレビを持ち歩ける最強ツール--ソニー、Blu-rayレコーダー「BDZ-A70」
[レビュー]ネットワーク対応の高機能デジタルフォトフレーム--ソニー「Canvas Online CP1」
15時間の行列で手に入れたiPhone 3Gファーストインプレッション--ソフトバンクモバイル「iPhone 3G」
北京を見逃すな!--2008年夏、今買うべき「薄型テレビ」
[レビュー]通勤鞄に忍ばせたい軽さと装着感--マクセルのノイキャンヘッドホン「HP-NC15」