つい先日社内で今まで使っていたグループウェアを思い切って捨てて新しいグループウェアを導入することとなった。晴れて導入の運びとなったのが『Aipo6』オープンソースのグループウェアだ。
Aipo(アイポ)6は、株式会社エイムラックによりAGPLv3のライセンスで提供されている国産のグループウェア。スケジュール管理、TODO管理、掲示板、ワークフロー、ファイル共有などオープンソースにも関わらず十分な機能を標準で提供してくれる。
とはいえグループウェアといえば社内業務で頻繁に利用するアプリケーションである。いかに機能が多彩とはいえ業務を行っていく上で機能改善や追加の要求が少なからず挙がってくる。本連載ではAipo6の社内導入にあたり取り組んだカスタマイズの記録を書いていこうと思う。
まず初回はAipo6のシステム概要と早速要望として挙がったGoogleカレンダーとの同期について記載したい。
・Aipo6環境構築
今回導入したのはAipo6.0.1オープンソース・インストーラ版であるが、同時にソースコードからのビルドも行った。AipoではTomcat、PostgreSQLを利用しておりインストーラ版ではインストール時にこれらも同時にインストールされる。直ぐに利用してみたいユーザーはインストーラ版を使用すると良いだろう。
※なおインストーラ版では『MS VC++ 2005 SP1 再頒布可能パッケージ』がインストール時に必須となることに注意して頂きたい。
ちなみにAipo6オープンソース・インストーラ版とは別にクラウドにて有償で利用できるAipo+(アイポプラス)が株式会社エイムラックにより提供されているようだ。
筆者開発環境ではWindows XP 32bit版上にて6.0.1の ソースコードからビルドを行い自前で用意したTomcat6.0、PostgreSQL 8.4上にて動作させている。
・Googleカレンダーとの同期
さて、開発環境構築が終わってAipoとはどんなものなのか触ってみる間も無く、「某グループウェアではGoogleカレンダーと同期するアプリがあるんだけど、Aipoは同期できないの?」というのが社内で話題になった。ここからが苦難の始まりである。
大まかにAipoカレンダーとGoogleカレンダーとの同期実現にあたり調査した内容を箇条書きしておくと
- Googleカレンダーのカレンダーデータを外部アプリケーションから操作可能なAPIの有無
- Aipo側のカレンダーデータを外部アプリケーションから操作可能なAPIの有無
- そもそもAipoがどういう仕組みで動いているか
- 両者のデータ形式の相違
- 双方でのスケジュール削除時の動作、ダブルブッキングとなるようなスケジュールの同期仕様の検討
- APIを利用するに当たりライセンス面で問題が無いかどうか
である。3.が分かっていないあたり致命的な気はしたが今後末永く付き合っていく可能性があるソフトウェアでありソースコードだ。腹を決めて上から順に調べていく。
1.に関しては比較的簡単に実現方式が判明した。『Google Data API、Google Calendar Data API』のJavaクライアントライブラリを利用してカレンダーのイベントフィードを操作可能だ。
以下ライブラリを使ってサンプルコードの要領でカレンダーサービスに接続後、該当のイベントエントリーを取得できる。
使用するライブラリ |
---|
![]() |
サンプルコード |
---|
![]() |
Googleカレンダー側の接続方式の当たりがついたところで、次に2.のAipo側の接続方式を考える。
結論から言うと2011/07時点でAipo側でカレンダーデータを操作するようなAPIは存在していなかったのである。
・Aipo側のAPI利用以外の接続方式検討
Aipo側のAPIが存在しない。きっとあるだろうと高をくくっていただけに当初思い描いていた方式を見直さざるを得ない。
当初はユーザー個人のWindows PCに同期ツールとして同期用のアプリケーションをインストールし、APIを利用してGoogleカレンダー及びAipoへ接続する方式を考えていた。
APIが無いならばオープンソースなのだから作ればよい。という考え方もある。ただ一から始めるにはあまりにも設計・製造のコストがかかってしまう。品質も保証できたものではないだろう。また実はAPIの開発がAipoの開発コミュニティIssue257で6.xのマイルストンに置かれていた。正直なところこの実装を待ったほうが賢明である。ただそれではあまりにも面白味が無い。そこでAipoのポートレットとして実装することで同期の実現が可能ではないかと考えたのである。
・Aipoのシステム概要
さて、前項でAipoのポートレットという単語を上げたがポートレットとはなんだろうか。同期機能の実装に向けてAipoのシステムを知るために「ポートレットが何者なのか」や使われている言語、フレームワークなどシステム構成について触れていこうと思う。Aipoのソースコードを読むにあたってまず初めに必要なのは使われているフレームワークを知ることである。
- Aipoシステム構成
Aipoはサーバ側ではJAVA、クライアント側ではオープンソースAjaxライブラリdojo.jsを用いて多くのコードが書かれているが、骨格となる部分にいくつかのフレームワークを用いている。
・Turbine
Webアプリケーション・フレームワーク 。しばしばStrutsと比較されることがあるがAipoではテンプレートエンジンであるVelocityがこのTurbine上で利用されている。
※Velocityは筆者も今回はじめて触ることとなったがMVCモデルのViewの生成を担う部分でJSPに近い存在だとイメージしてもらえると良いだろう
・Jetspeed
ポータルサイト構築のためのフレームワーク。ユーザーが利用可能なWEBコンテンツ(Aipoでいえばスケジューラ、ワークフローなど)をポートレットという単位でWEBページ上に配置し、レイアウト変更などユーザー毎にカスタマイズ可能な環境を提供している。
・Cayenne
O/Rマッピング・フレームワーク。CayenneModelerを使用しマッピング・ファイルとエンティティ・クラスを生成して利用することでデータソースアクセスを実現している。
どうだろうか?馴染みのあるフレームワークもあれば初めて名前を聞いたフレームワークもあるだろう。上級のエンジニアなら上流工程でどのフレームワークを適用するか頭を悩ませ多岐に渡るフレームワークを実装レベルで知っていることもあるかもしれない。だが今回はカスタマイズであり追加実装である。既に適用されているフレームワークを知ることから始まり、また余程のことが無い限りこれらのフレームワークを避けて実装することはできない。
次回はフレームワークの設定やアクションクラス、表示テンプレートなどから同期ポートレットの実装手順と実際の同期仕様について触れていきたいと思う。
【第二回のターゲット】・Jetspeed
・Cayenne
・GoogleカレンダーとAipoカレンダーのデータ形式や同期仕様について株式会社ジェイエスピー2011/07/20小林 陽介
monipet
動物病院の犬猫の見守りをサポート
病院を離れる夜間でも安心
ASSE/CORPA
センサー、IoT、ビッグデータを活用して新たな価値を創造
「できたらいいな」を「できる」に
OSGi対応 ECHONET Lite ミドルウェア
短納期HEMS開発をサポート!
GuruPlug
カードサイズ スマートサーバ
株式会社ジェイエスピー
横浜に拠点を置くソフトウェア開発・システム開発・
製品開発(monipet)、それに農業も手がけるIT企業
※コメント投稿者のブログIDはブログ作成者のみに通知されます