Play!もEclipseで行こう!

誤操作してしまって、せっかく書いた記事が消えてしまいました。(>_<)

気を取り直してもう一回書いてみる。

先日、Play! framework勉強会に行ってきました。

Play! frameworkはMVCフレームワークやORM(JPA/Hibernate)だけではなく、アプリケーションサーバ(JBoss Netty)やデータベース(H2)、更には依存性管理(Apache Ivy)やユニットテスト(JUnit/Selenium)、ビルド環境(Eclipse JDT)までも入ったオールインワン環境です。

ですので、Playの他にはテキストエディターさえあれば開発を開始することが出来ます。

PlayのムービーでもTextMateというエディターでサクサクと開発を進めています。

Macな人がPlayで開発する際にはTextMateデファクトになりそうな感じですね。

ですが、私のPCはWindows7。で、VM上のUbuntuでPlayを動かしています。

Emacsやviで開発するという手もあるかもしれませんが、コード補完やデバッグのことを考えると、EclipseNetBeansIntelliJなどのIDEを使うのが良いと思います。

私的にはEclipseに慣れているので、とりあえずEclipseでPlayのチュートリアルYABEをやってみました。

play new yabe
play eclipsify yabe

playのeclipsifyコマンドはEclipseのプロジェクトファイル等を作ってくれるコマンドです。

後は、Eclipseを起動してインポートするだけです。

これだけで、Playのソースコードを参照したり、Playのソース内をトレースしたり、オブジェクトの中身を参照したりすることが出来ます。

試しに、Applicationクラスの継承元のControllerにCtrlキーを押しながらマウスを近づけてみてください。

マウスポインターが手の形に変わって、Controllerにアンダーラインが表示されましたか?

クリックしてみましょう。

Controllerクラスが表示されたでしょうか?

ブレークポイントを張ったり、トレースも出来ます。

まずは、下記のコマンドでPlayを起動しておきます。

play run yabe

次に、Eclipseで[Run]-[Debug Configrations...]でダイアログを開き、[Remote Java Application]を選択し、左上の[+]ボタンを押下して、[Debug]ボタンを押下します。

適当なところ(例えばApplication.indexメソッド)にブレークポイントを張り、ブラウザをリフレッシュしてみましょう。

ブレークポイントで止まりましたか?Play framework内のソースコードもトレースできます。


あと、EclipseでPlayを触っていて気持ち悪かったことがあります。

モジュールです。

YABEでもCRUDとSecureモジュールを使用していますが、これが気持ち悪いです。

モジュールは/modulesフォルダー内にアプリケーションとほぼ同じフォルダー構成でインストールされます。

Play!はこのフォルダーがモジュールであることを知っているので、問題ないのですが、Eclipseがモジュールの位置を知りません。

ですので、Eclipse的にはビルドエラーになってしまいます。

この状態でも、デバッグ機能は正常に動きますので、何の問題もないのですが、やっぱり気持ち悪いですよねぇー。

下記のように各モジュールappフォルダーをソースリンクすることで解決することが出来ました。

1. パッケージエクスプローラでyabeを選択し、右クリックで[Build Path]-[Link Source...]メニューを選択します。

[Browse]ボタンで各モジュールのappフォルダーを指定し、[Foler name]に各モジュール名を入力して[Finish]ボタンを押下します。

これでビルドエラーがなくなりました。

めでたし。めでたし。

@ikeike443さんのコメントにより、解決しました。

再度play eclipsifyをして、再度Eclipseにインポートし直すだけで自動的にモジュールもビルドパスに追加されて、ビルドエラーがなくなりました。@ikeike443さんありがとうございます。m(__)m

あと、Play!にはPlayclipseというEclipseプラグインも同梱されています。

/support/eclipse/org.playframework.playclipse_x.x.x.jarをeclipse/dropinsフォルダーにコピーして、Eclipseを再起動するだけです。

[Play!]メニューが追加されており、いくつかのツールボタンが追加されていればインストール成功。

ControllerやModel、Viewの雛形の作成やジャンプなどが出来るようです。

んー。。。でも、まぁ、まだちょっと微妙な感じですね。。。

Eclipse3.7 (Indigo) の新機能を使ってみる。(1)

先週、Eclipse3.7 Indigoがリリースされました。

http://www.eclipse.org/downloads/

新機能はいろいろありますが、その目玉の一つであるWindowBuilderをまず触ってみました。

WindowBuilderはSwing/SWTGUI画面をコンポーネントのドラッグ&ドロップでRAD開発できるツールです。

SWTということは、Eclipse PluginのWizardPageなんかもRAD開発できるということです。個人的にはプラグイン開発は画面部分が一番面倒だと思うので、私としてはこれはかなりうれしいです。

ということで、Hello WizardウィザードをWindowBuilderを使って作ってみましょう。

まずは、Indigoをダウンロード。プラグイン開発にはEclipse for RCP and RAP Developersをダウンロードすることをお勧めします。プラグイン開発に必要なプラグインが一式そろっています。

次に、WindowsBuilderのプラグインはダウンロード直後にはまだ入っていないので、インストールします。

  • [Help]-[Install New Software]メニューを選択し、Installウィザードを表示する。
  • 「Work with:」ドロップダウンリストで「Indigo - http://download.eclipse.org/releases/indigo」を選択し、[General Purpose Tools]の下の「SWT Designer」にチェックを入れて[Next>]ボタンを押下する。(SWT Designerを使用するためにはSWT Designer Core」「WindowBuilder Core UI」「WindowBuilder GroupLayout Support」も必要ですが、これらのチェックをオンにしなくても、Eclipseが依存性を自動的に判断してこれらも同時にインストールしてくれます。)


  • 後は画面の指示に従って[Next >][Finish]ボタンを押下する。

これでSWT Designerを使用することが出来るようになりました。

次にHello Wizardウィザードページを表示するプラグインを作成しましょう。

  • [File]-[New]-[Plug-in Project]を選択し、ウィザードの[Project name:]に「HelloWizard」と入力して[Next >]ボタンを押下する。


  • あとはデフォルト値のまま[Next >][Finish]ボタンを押下する。

すると、下記のようにMANIFEST.MFが生成されます。

次に、HelloWizardウィザードを作ります。

  • MANIFEST.MFの[Extensions]タブを開く。(Extension Pointsではありません。よく似ていますがぜんぜん違う機能ですので注意してください。)
  • [Add]ボタンと押下して、[Extension Point Selection]ダイアログを開く。


  • [Extension Point filter]で「new」と入力すると「org.eclipse.ui.newWizard」拡張ポイントが表示されるので、選択し、[Finish]ボタンを押下する。


  • [name]に「HelloCategory」と入力する。


  • [name]に「HelloWizard」[class]にはウィザードとクラス名である「hellowizard.HelloWizard」を[category]にHelloCategoryのid項目である「HelloWizard.category1」を入力する。

この画面の[class*:]のリンクをクリックすると[New Java Class]ダイアログが表示されるので、[Finish]ボタンを押下するとhellowizard.HelloWizardクラスが生成されます。

次にいよいよWizardページです。

  • [File]-[new]-[Class]メニューを選択し、[Java Class]ウィザードを表示する。
  • [Name]に「HelloWizardPage」と入力する。
  • [Superclass]の[Browse]ボタンを押下し、[Super class Selection]ダイアログの[Chose a type]テキストボックスで「wizardpage」と入力すると、「org.eclipse.jface.wizard.WizardPage」がリストボックスに表示されるので、選択して[OK]ボタンを押下する。
  • [Finish]ボタンを押下する

すると「HelloWizardPage」のJavaソースが生成されます。

継承元のWizardPageクラスにはデフォルトコンストラクタがないため、コンパイルエラーが発生しています。

HelloWizardPageのソースを下記のように修正します。

package hellowizard;

import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.widgets.Composite;

public class HelloWizardPage extends WizardPage {
public HelloWizardPage() {
super("Hello Wizard Page");
}

@Override
public void createControl(Composite parent) {
// TODO Auto-generated method stub

}

}

HelloWizardPageは通常のJavaエディターでオープンされていると思いますので、一旦閉じます。

そして、パッケージエクスプローラのHelloWizardPage.java上で右クリックしてコンテキストメニューを表示して[Open with]-[Other]メニューを選択し、「WindowBuilder Editor」を選択して[OK]ボタンを押下します。(※注意 下図のように「WindowBuilder Editor」が2つあるかもしれませんが、アイコンにJが入っている方を選択してください。)

HelloWizardPage.javaSWT Designerで開きましたので[Design]タブを押下してみてください。エラーが出ており、createControlメソッドに追加すべきコードが表示されているので、[Source]タブに戻り、同メソッドを修正します。

再度、[Design]タブを表示すると、でたぁ〜。

Labelを貼り付けて「こんにちは。ウィザード」と入力しましょう。

あとは、HelloWizard.javaを下記のように修正してください。
(addPagesメソッドの追加と、performFinishメソッドの戻り値をtrueに修正。)

package hellowizard;

import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;

public class HelloWizard extends Wizard implements INewWizard {

public HelloWizard() {
// TODO Auto-generated constructor stub
}

@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
// TODO Auto-generated method stub

}

@Override
public void addPages() {
addPage(new HelloWizardPage());
}

@Override
public boolean performFinish() {
// TODO Auto-generated method stub
return true;
}

}


それでは実行してみましょう。

パッケージエクスプローラでHelloWizardプロジェクト上で右クリックでコンテキストメニューを表示し、[Run As]-[Eclipse Application]を選択してください。

すると、もうひとつのEcllipseが立ち上がります。

新しく立ち上がったEclipse上で[File]-[New]-[Other]メニューを選択すると、ウィザード選択ダイアログが開き[HelloCategory]-[HelloWizard]が追加されていると思います。

[HelloCategory]-[HelloWizard]を選択して[Next >]ボタンを押下すると、下記のようなウィザードページが表示されます。

めでたし。めでたし。

AndroidフレームワークのソースをEclipseでステップ実行

Androidソースビルドに挑戦」の記事では、Android2.3.4をビルドしてみたけど、エミュレータでエラーが発生してしまって、正常に動かなかった。

原因は追究していないが、おそらくの2.3.4がまだ不安定なのかもしれないと思い、2.3.3r1のビルドをしてみた。

mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.3_r1
repo sync
make -j2

~/mydroid/out/host/linux-x86/bin/emulator -kernel ~/mydroid/prebuilt/android-arm/kernel/kernel-qemu -sysdir ~/mydroid/out/target/product/generic -system ~/mydroid/out/target/product/generic/system.img -ramdisk ~/mydroid/out/target/product/generic/ramdisk.img -data ~/mydroid/out/target/product/generic/userdata.img -skindir ~/mydroid/device/sample/skins -skin WVGAMedDpi


今度は、ちゃんと動いているっぽい。

で、調子に乗ってEclipseフレームワークのソースをステップ実行できるようにしてっ見ることに挑戦。


Hack#60に従ってフレームワークEclipseでステップ実行してみる

と思ったが、Hack#60ではLinux用のSDKを作成しているので、
Windows用のSDKの作成に挑戦してみた。

sudo apt-get install mingw32
sudo apt-get install tofrodos
source build/envsetup.sh
lunch sdk-eng
make clean
make -j2 win_sdk

mv /home//mydroid/out/host/windows/sdk/android-sdk_eng._windows /home//android-sdk-windows
cd ~
find mydroid/ -name "*.java" | cpio -pd mydroid_java_src
cd mydroid_java_src/mydroid
jar cf sources.jar dalvik/ frameworks/ libcore/ external/
cp sources.jar /home//android-sdk-windows/platforms/<プラットフォーム名>

  • 「/home//android-sdk-windows/」以下をフォルダーごとWindowsマシンの適当なフォルダーにコピーする。
  • Eclipseを起動して[Window]-[Preferences]メニューを選択し、[Android]項目の[SDK Location]に先ほどコピーしたSDKのパスを設定する。


  • [Window]-[Android SDK and AVD Manager]でAVDマネージャを開く。
  • [Installed packages]でAndroid SDK Toolsのリビジョンが8以上になっていない場合は、[Available packages]-[Android Repository]から[Android SDK Tools]の最新のリビジョンを取ってくる。
  • AVDマネージャの[Virtual devices]-[New]でAVDを作成する。


  • [File]-[New]-[Android Project]で新しいAndroidプロジェクトを作成する。
  • [Java Build Path]の[Libraries]タブ上で[android.jar]-[Source attachment]を選択し、[Edit]でandroid-sdk-windows\platforms\<プラットフォーム名>\sources.jarを選択する。


これでEclipseAndroidフレームワークのソースをステップ実行することができるようになった。

Androidソースビルドに挑戦

【送料無料】Android Hacks

【送料無料】Android Hacks
価格:3,990円(税込、送料別)

「Hack#49 ソースコンパイル環境の構築(Linux)」を参考にして、Androidのソースビルド環境の構築に挑戦してみました。これは結構苦労しました。

まずは、Hack#49のとおりやってみたが、froyo/2.2以降は32bit環境ではビルドできないって怒られました。

なので、Ubuntu 64bit環境の構築からやりました。

これには以下のページがとても参考になりました。

http://osmania.blog.so-net.ne.jp/2010-10-16-1

以下が、今回の環境構築メモです。


仮想マシンの作成

まず、VMWareをインストール。
http://downloads.vmware.com/jp/d/info/desktop_downloads/vmware_player/3_0
VMWare Accountを登録し、VMware Player 3.1.3 for 32-bit and 64-bit Windowsをダウンロード

インストール実行。画面に従ってデフォルトのまま実行。

以下を参考にubuntu 10.10 64bit版をインストール

http://osmania.blog.so-net.ne.jp/2010-10-16-1

要約すると以下のような感じ。

http://www.ubuntu.com/desktop/get-ubuntu/download
からubuntu10.10 64bit版をダウンロード

VMware playerを起動し、新しい仮想マシンを作成する。

後でOSをインストールを選択

ディス最大クサイズは推奨は20Gだが、余裕を持って50Gを指定してみた。

仮想マシンを作成する準備完了」画面で[ハードウェアをカスタマイズ]ボタンを押し、
メモリサイズを4Gに(最低1Gは必要)プロセッサコアの数を2に変更。
CD/DVDに先ほどダウンロードしたubuntuのisoファイルを指定する。

[完了]ボタンを押すと仮想マシンが作成され、ubuntuのインストールが始まります。

言語に「日本語」を選択し「Ubuntuをインストール」をクリック
後は適当に。

アップデートマネージャでOSを最新にアップデートする

VMWare Toolsもインストールする。
UbuntuのCDがマウントされている場合はCDのアイコンの上で右クリックでコンテキストメニューを開き[取り出す]を選択
[仮想マシン]-[VMWare Toolsのインストールを選択すると、CDがマウントされる。

sudo su -
cd /tmp
tar zxpf /media/VMware\ Tools/VMwareTools-8.4.6-385536.tar.gz
cd vmware-tools-distrib
./vmware-install.pl
すべてデフォルトのままEnter
/usr/bin/vmware-user

■各種ツールのインストール

sudo apt-get update

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse"
sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse"
sudo apt-get update
sudo apt-get install sun-java6-jdk
sudo apt-get install valgrind

cd ~
mkdir bin
curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo

echo $PATH

で/home//binにPATHが通っていることを確認する。
はログインユーザIDです。tomotaro1065でログインしていた場合は

/home/tomotaro1065/binにPATHが通っていないといけません。

通っていない場合は

vi .bashrc

として、viを起動して最終行に下記を加え、端末を開きなおす

PATH=$PATH:/home//bin
export PATH


Androidソースの取得

今回はgingerbreadのソースをビルド取得してみた。(froyoをビルドしたい場合は下記のrepo initの際に「-b gingerbread」の代わりに「-b froyo」とすればOK。もしくは、バージョンを指定せずに最新を取得するには-b以下の指定は不要。)

mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread
repo sync


2〜3時間後に完了(うちは回線スピード遅いからなぁ。。。)


■ビルド

source build/envsetup.sh
lunch generic-eng
make -j2

1〜2時間後に完了(Core i5 2.66GHzのノート上のVM上なので。。。)


エミュレータの起動

~/mydroid/out/host/linux-x86/bin/emulator -kernel ~/mydroid/prebuilt/android-arm/kernel/kernel-qemu -sysdir ~/mydroid/out/target/product/generic -system ~/mydroid/out/target/product/generic/system.img -ramdisk ~/mydroid/out/target/product/generic/ramdisk.img -data ~/mydroid/out/target/product/generic/userdata.img -skindir ~/mydroid/device/sample/skins -skin WVGAMedDpi


おぉ〜。で、でたぁ〜。

さっそく、settingアプリでAbout phoneを確認してみる。

と、思ったら、何やらエラーダイアログが頻発。

何じゃこりゃ。

んー。。。froyoで再挑戦してみるか。。。

って、froyoはJava5か。めんどうっちいなぁ。

Andriodに再挑戦(2)

昨日の続きです。

「初めての Android」開発環境 〜IDEA 編〜 (1) : Android SDK のインストール(Windows インストーラ)のとおり、引き続きSDK Managerを起動し、[Accept All]ですべてのコンポーネントをインストール。

待つこと。。。どのくらい待ったっけ?忘れた。(^^;

たぶん余裕で30分以上は待ったと思う。その間にご飯食べたり、お風呂に入ったりした。

次に、Eclipseを起動して[Help]-[Install New Software...]で下記のURLからADT Pluginのインストール。

http://dl-ssl.google.com/android/eclipse/

特に問題なく入ったみたい。順調。順調。

[Window]-[Preferences]で[Preferences]ダイアログを開き左側ペインで[Android]を選択する。

右側ペインの[SDK Location]に先ほどインストールしたSDKのパスを設定し、[Apply]ボタンを押下。[OK]で[Preferences]を閉じる。

次に[Window]-[Android SDK and AVD Manager]を選択。


左側ペインで[Virtual devices]を選択し、右側ペインで[New]ボタンを押下する。

[Name]に適当な名前を入力して[Target]でAPIレベルを選択して[Create AVD]ボタンを押下。


これでようやく開発環境が整った。

さっそく、お約束のHello Worldだ。

[File]-[New]-[Project]メニューを選択し、[New Project]ダイアログで[Android]-[Android Project]を選択。

[Project name][Application name][Package name][Create Activity]に適当な名前を入力し、[Build Target]で適当なターゲットを選んで(今回は「Android 2.3.1」を選択した。)[Finish]。

HelloAcitivity.javaが自動生成されたが、赤いxがついてエラーが発生している模様で、少しあせる。

が、しばらくするとエラーが消えるので一安心。

どうやら「gen//R.java」が自動生成されるのだが、生成されるタイミングが少し遅いので、それまでの間Rクラスが見つからないっていうエラーが出ていたっぽい。

まぁ、ともかくよかった。

さて、早速実行。

パッケージエクスプローラでプロジェクトを選択し、右クリックでコンテキストメニューを表示し、[Run As]-[Android Application]を選択。


エミュレータの画面は出るけど、待てど暮らせどエミュレータの画面は真っ黒のまま。

なんで?

エミュレータのタイトルが「554:test(応答なし)」になってる。

なんでやねん。

とりあえず、×ボタンで終了してみる。

先ほど作ったAVDのTarget(API Level10)とプロジェクトの作成時に指定したTarget(2.3.1 API Level9)が違うからなのか?

とりあえず、AVDのTargetも2.3.1に変更してみる。

気を取り直して、再度実行。

おっ。「ANDROID」って出た。

待つこと約1分。

ANDROID」の文字が消えた。

待つこと約1分。

おぉ〜。「Hello World, HelloActivity!」ってでたぁ〜。

けど、やっぱ遅いねぇ。エミュレータの起動。

このマシンスペックでこのくらいかかるのか。。。

気軽に修正しては実行を繰り返すような開発スタイルでは無理ですね。

ってことで、ユニットテストが重要ってことのようです。

Androidに再挑戦

数ヶ月前にAndroidをはじめてみようと思って開発環境の構築をしてみたものの、PCのスペックが低かったため、エミュレータの起動にやたらと時間はかかるは、メモリ不足でエラーが出るはで、挫折しました。

が、新しいマシンが到着しました。

Acer Aspire TimelineX 3820T-F52C

です。

CPUは Core i5 -480M 2.66G

OSはWindows7(64bit)

メモリは+4Gして6Gにしました。

これで6万円ちょっとなら安いです。

大変コストパフォーマンスが良いと思います。満足です。

で、Androidに再チャレンジです。


まずは、JDKから。

http://www.oracle.com/technetwork/java/javase/downloads/index.htmlからjdk-6u24-windows-x64.exeをダウンロードし、実行。

次にEclipse

http://www.eclipse.org/downloads/からeclipse-rcp-helios-SR2-win32-x86_64をダウンロードし、適当なディレクトリに解凍。

次にAndroid SDK

「初めての Android」開発環境 〜IDEA 編〜 (1) : Android SDK のインストール(Windows インストーラ)の説明がわかりやすい。


http://developer.android.com/intl/ja/sdk/index.htmlでinstaller_r10-windows.exeをダウンロードし、実行。

が、ここで問題発生!

Java SE Development Kit(JDK)not found.」エラー発生。

途方にくれていたら、Android SDK 3.0(R10)インストーラーバグ対応版の記事を発見。

助かった。

installer_r10-windows.exeのインストーラにはバグがあるらしく、JDKをうまく認識できないらしい。

対処方法としては、まず、installer_r09-windows.exeをインストールしてから、再度installer_r10-windows.exeをインストールすると無事成功するらしい。

やってみる。おぉ〜。無事成功した。