Oceanでは、Webサービスとのインテグレーションを主目的としています。ただし、Webサービスと連携をしない、単体でのサービスも提供することが出来ます。ここでは、そのようなプロジェクトのことを、スタンドアロンプロジェクトと呼ぶことにします。スタンドアロンプロジェクトでは、データベースなどは自動で用意され、非常に簡単にサービスを開始することが可能です。
特にWebサービスとの連携が必要なく、小規模での利用が目的の場合は、スタンドアロンプロジェクトが最適です。
まずはOceanの使い方の感覚をつかむために、スタンドアロンプロジェクトでサーバーを起動し、Jabber/XMPPプロトコルをサポートするクライアントアプリケーションから実際につないでみましょう。
この例では、MacOSXで実験を行い、クライアントアプリケーションにはMacOSXに標準で付属しているiChatを利用してみます。
Oceanのインストールが完了すると、いくつかのコマンドが使えるようになります。
まずは、任意のディレクトリに移動し、次のように ocean-standalone コマンドを打ってみましょう
ocean-standalone
対話方式のシェルの開始されるので、任意に回答を打ち込むと、それに従ってプロジェクトテンプレートが生成されます。ここでは仮に、最初のプロジェクト名の問いに対して foo と回答することにします。残りの問いには、何も回答せずにEnterを押し、デフォルトの設定にします。
カレントディレクトリ内に、新たにfooディレクトリが生成され、さらにその下に、様々なファイルが生成されたことを確認して下さい。このfooディレクトリが、プロジェクトルートディレクトリとなります。
fooの中に移動します。
cd ./foo
スタンドアロンプロジェクトでは、
という三つの段階を踏むだけで、簡単にサービスを開始することが出来ます。
まずはコンフィグファイルを編集してみましょう。
コンフィグファイルは、必要最低限のものがデフォルト値で埋められた状態で生成されています。
場所は、プロジェクトルートディレクトリ/config/xmpp.ymlになります。
では早速編集してみましょう。
vi ./config/xmpp.yml
--- server: type: xmpp domain: - xmpp.example.org host: 192.168.0.1 port: 5222 backlog: 1024 max_connection: 100000 timeout: 300 timeout_preauth: 10 max_read_buffer: 10000 report_interval: 60 use_stanza_counter: yes stanza_counter_expiration: 60 max_stanza_count: 1000 pid_file: __path_to(var/run/xmpp.pid)__ context_class: Foo::Context log: type: print formatter: color level: info show_packets: yes filepath: __path_to(var/log/xmpp.log)__ sasl: mechanisms: - PLAIN - X-OAUTH2 # - CRAM-MD5 # - DIGEST-MD5 #tls: # cert_file: __path_to(certs/cert.pem)__ # key_file: __path_to(certs/server.nopass.key)__ # cipher_list: ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP:+eNULL event_handler: node: Foo::Handler::Node authen: Foo::Handler::Authen connection: Foo::Handler::Connection message: Foo::Handler::Message people: Foo::Handler::People room: Foo::Handler::Room p2p: Foo::Handler::P2P handler: db_file_path: __path_to(db/database.db)__
hostを 192.168.0.1 から、127.0.0.1 に変更し、domainを、xmpp.example.orgから、localhost に変更しておきます。
server: type: xmpp domain: - localhost host: 127.0.0.1 port: 5222 backlog: 1024
次に、フィクスチャファイルを覗いてみます。
ファイルパスは、プロジェクトルートディレクトリ/config/fixture.ymlです。
vi ./config/fixture.yml
users: - id: user_01 username: kusanagi nickname: Kusanagi password: foobar oauth_token: aaaaaa profile_img_file: __path_to(asset/img/example01.jpg)__ - id: user_02 username: aramaki nickname: Aramaki password: foobar oauth_token: bbbbbb profile_img_file: __path_to(asset/img/example02.jpg)__ - id: user_03 username: batou nickname: Batou password: foobar oauth_token: cccccc profile_img_file: __path_to(asset/img/example03.jpg)__ - id: user_04 username: togusa nickname: Togusa password: foobar oauth_token: dddddd profile_img_file: __path_to(asset/img/example04.jpg)__ - id: user_05 username: ishikawa nickname: Ishikawa password: foobar oauth_token: eeeeee profile_img_file: __path_to(asset/img/example05.jpg)__ - id: user_06 username: saito nickname: Saito password: foobar oauth_token: ffffff profile_img_file: __path_to(asset/img/example06.jpg)__ - id: user_07 username: paz nickname: Paz password: foobar oauth_token: gggggg profile_img_file: __path_to(asset/img/example07.jpg)__ - id: user_08 username: borma nickname: Borma password: foobar oauth_token: hhhhhh profile_img_file: __path_to(asset/img/example08.jpg)__ relations: - follower: user_01
ユーザー名、ニックネーム、プロフィール画像等、ユーザーの最低限の情報が設定されていることがわかります。プロジェクトテンプレート生成時に、8人のデモユーザーが登録されています。
必要であれば、このファイルを編集して、ユーザーの追加、削除、編集を行います。
今回は、デフォルト状態のままデモユーザーを使用して進めることにして、変更は加えずにファイルの編集を終わります。
これで準備が出来ました。
起動するときは、次のように プロジェクトルートディレクトリ/bin/ocean-startスクリプトを実行します。
perl ./bin/ocean-start
ログが流れ始めました。サーバーを起動することが出来たのが分かります。
では次に、iChatを起動してみましょう。
対話の実験のために、ユーザー二人分を登録します。
アカウント管理画面左下の「+」ボタンを押してユーザーを追加します。
次のように設定項目を埋めて、新規アカウントを登録します。
パスワードにはfoobarを入れます。デフォルトで作成されるデモユーザーの初期パスワードは全てfoobarになっています。これは上記のフィクスチャファイルで設定されています。(今回は実験なのでこのままパスワードを利用しますが、実運用する際には勿論パスワードは変更することが推奨されます。)
同様にもう一人登録します。
アカウント欄を確認すると、二つのアカウントが追加されたことが分かります。
アカウントをダブルクリックしてウィンドウを開き、現在の状態を「チャット可能」にしてみます。
ウィンドウがログイン状態になりました。
オフラインの友人がグレーで表示されているのがわかるでしょうか。
サーバー側でログが流れていることを確認しておきましょう。
同様にもう一人のユーザーも、状態を「チャット可能」にしてログインしてみます。
kusanagiとaramaki、お互いに相手がログイン状態になっていることが確認できます。
相手に話しかけてみましょう。
対話できることが確認できたでしょうか
このように、スタンドアロンプロジェクトを利用すると、非常に簡単にJabber/XMPPのサービスを開始することが可能です。