スタンドアロンプロジェクトの実験

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で確認

では次に、iChatを起動してみましょう。

対話の実験のために、ユーザー二人分を登録します。

アカウント管理画面左下の「+」ボタンを押してユーザーを追加します。

次のように設定項目を埋めて、新規アカウントを登録します。

パスワードにはfoobarを入れます。デフォルトで作成されるデモユーザーの初期パスワードは全てfoobarになっています。これは上記のフィクスチャファイルで設定されています。(今回は実験なのでこのままパスワードを利用しますが、実運用する際には勿論パスワードは変更することが推奨されます。)

同様にもう一人登録します。

アカウント欄を確認すると、二つのアカウントが追加されたことが分かります。

アカウントをダブルクリックしてウィンドウを開き、現在の状態を「チャット可能」にしてみます。

ウィンドウがログイン状態になりました。

オフラインの友人がグレーで表示されているのがわかるでしょうか。

サーバー側でログが流れていることを確認しておきましょう。

同様にもう一人のユーザーも、状態を「チャット可能」にしてログインしてみます。

kusanagiとaramaki、お互いに相手がログイン状態になっていることが確認できます。

相手に話しかけてみましょう。

対話できることが確認できたでしょうか

このように、スタンドアロンプロジェクトを利用すると、非常に簡単にJabber/XMPPのサービスを開始することが可能です。