2010年10月18日

Getting Started Slim3 with Subversion

Mashup Award 6 のハッカソンでちょっとしたプロジェクトを始めることになりました。 認証情報が必要なフィードを取得して、それをデスクトップにプッシュするアプリケーションです。

認証情報に関しては OAuth という認可の仕様がありますので、それを利用します。 フィードを取得するサービスは Google App Engine に配置します。 App Engine には cron に似た仕組みがありますので、定期実行ジョブでフィードを確認する、という仕組みです。 取得したフィードはマルチデバイスに対応した仕組みで再度配信するようにします。 最初は HTML で表示してブラウザで確認できるようにしますが、時間に余裕があれば Adobe AIR や HTML5 Widget なども利用したいところです。

とはいえ、最初からあれもこれもでは何も始まりませんので、まずは Google App Engine でのプロジェクトをセットアップして、Subversion のレポジトリを準備します。 Google App Engine では Java を使用し、フレームワークには Slim3 を採用します。 Subversion のレポジトリには Google Code を利用します。

Slim3 の準備

プロジェクトのセットアップは非常に簡単です。 Slim3 のスタートガイド に沿って進めるだけです。 ハッカソンではハンズオンを開催して頂きましたので、その場でチョコチョコ聞けばすぐにスタートできました。

  1. Java をインストールする。
  2. Eclipse をダウンロードして zip ファイルを展開する。
  3. Google の Eclipse プラグイン をインストールする。
  4. Slim3ブランクプロジェクト をダウンロードする。
  5. Eclipse からブランクプロジェクトを import する。

1, 2, 3, 4 はダウンロードに時間がかかりますが手順として難しいことはありませんので、 ただただ粛々とネットワーク回線に頑張ってもらいます。

ブランクプロジェクトは zip ファイルなのですが、Eclipse は zip ファイルをプロジェクトとして取り込むこともできますので、手動で展開する必要はありません。

一通りのチュートリアルに目を通して簡単な入出力を簡単したら準備完了です。 最後に、プロジェクトの名称を変更したらオシマイです。

共有するデータの検討

チーム開発の場合にはソースコードを共有する必要があります。 原理的には *.java ファイルだけ共有すれば問題ないはずですが、 実際にはそうでもないことがほとんどです。

Java のチーム開発で難しいことのひとつは、統合開発環境を利用することを前提としている、ということだと思います。 今回は Google のプラグインの関係もありますので Eclipse を使います。 Eclipse には .project ファイルを始めとしたプロジェクト管理用の設定ファイルが必要です。 問題は、こうした設定ファイル (ドットファイル) も共有するかどうか?という点になります。

Slim3 のブランクプロジェクトから作成したプロジェクトのディレクトリには、次のようなファイルおよびディレクトリが含まれます。 通常ファイルもドット始まりのファイルもそれなりに存在しています。

$ ls -A
.apt_generated/        .externalToolBuilders/ .project          war/
build.xml              libsrc/                test/
.classpath             .factorypath           .settings/
build.properties       lib/                   src/

少し脱線しますが、Slim3 はモデル層の Java クラスに対応するメタクラスを生成します。 モデル層のクラスには @Model アノテーションを付与しますが、これを自動的に処理するために「Annotation Processing」を使用します。 Annotation Processing Tool を略して APT と表記します。 上記の .apt_generated ディレクトリは、APT が生成した何かを保存する場所です。 次に注意するのが .factorypath です。このファイルでは APT の場所を指定します。 Slim3 の場合は lib ディレクトリ直下にある slim3-gen-{version}.jar です。 今回のプロジェクトで利用する Slim3 のバージョンは 1.0.5 なので、その文字列が {version} に該当します。 先にも述べたように、Slim3 の APT はメタクラスを生成しますので、ここも CLASSPATH に含まれている必要があります。 つまり、この辺の設定をチームメンバーが共有できていないと、メタクラスを発見できない、という状態になります。

具体的な設定情報は次のようになります。

$ cat .factorypath
<factorypath>
    <factorypathentry kind="WKSPJAR" id="/joogoo/lib/slim3-gen-1.0.5.jar" enabled="true" runInBatchMode="false"/>
</factorypath>

$ cat .classpath
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="test"/>
    <classpathentry kind="lib" path="war/WEB-INF/lib/junit-4.7.jar"/>
    <classpathentry kind="lib" path="war/WEB-INF/lib/slim3-1.0.5.jar" sourcepath="libsrc/slim3-1.0.5-sources.jar"/>
    <classpathentry kind="src" path=".apt_generated">
        <attributes>
            <attribute name="optional" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="con" path="com.google.appengine.eclipse.core.GAE_CONTAINER"/>
    <classpathentry kind="output" path="war/WEB-INF/classes"/>
</classpath>

ということで、これを満足するようにプロジェクトで共有を進める必要があります。

Subversion の設定

Google Code にプロジェクトを作成し、管理者としての設定を行います。 プロジェクト作成のリンクは画面中央のやや下にあります。 Google Code にプロジェクトを作成するときは、一番最初にライセンスを指定します。 この辺は関係者のポリシーなり大人の事情なりで決めましょう。 当然ながら、すでに存在するプロジェクトと同名のプロジェクトを作成することはできません。 Google App Engine におけるアプリケーション ID との兼ね合いも考えてプロジェクト名を作成しましょう。

Google Code のレポジトリに変更を反映させるためにはユーザー ID とパスワードが必要です。 ユーザー ID は通常の Google アカウントそのままですが、パスワードは googlecode 用のものです。 googlecode 用のパスワードはランダムな文字列で、サイトで確認および再生成が可能です。

ここまで来たら、あとはそれをレポジトリに反映させるだけです。 しかし svn:ignore 設定には注意が必要です。 Java コンパイラが生成する *.class ファイルを除外することはもとより、App Engine の SDK が生成するファイルも除外しておく必要があります。 先ほどは共有すべきものを検討しましたが、ここでは、余計なものが共有されないように注意するわけです。 また、文字コードや改行コード、ファイルの実行ビットなども確認します。 例えば、 war/WEB-INF ディレクトリには次のように設定します。

$ svn propget svn:ignore war/WEB-INF
classes
appengine-generated

そしてついに変更をプッシュします。 変更点はプロジェクトのサイトで確認できます。 自分がコミットしたチェンジセットにはスターが付きますので、視認性はかなり良いと思います。 また、それぞれのコミットに対してコメントを付けることもできますので、普通にプロジェクト管理として使えますね。

まとめ

Slim3 でプロジェクトを作成して、それを googlecode にプッシュしました。 Slim3 のセットアップは1時間もあればサクサク進めることができました。 一方、Subversion を介してプロジェクトを共有するためには、やや時間がかかりました。 その多くはドットファイルに由来しますが、IDE を使わなくはいけないのは大変だなぁ、と思います。 IDE は補完してくれるから便利、という意見もあるようですが、diff が長くなることには変わりありませんし、 そもそも補完のキーバインドを記憶しておかなくてはなりません。

短期間での開発なので、何をどこまでやるかは難しいところです。 いろいろな兼ね合いを考えながら満足いくものができるものまで持っていきたいと思います。

ともあれ、Mashup Award 事務局および、ajn コミュニティの方には感謝です!

コメントを投稿