Monday, November 30, 2015

LiferayのAudience Targetingで動的にユーザーセグメントを割り当ててみよう

こんにちは、かわべです。かなり日が空いてしまいましたが、LiferayのAudience Targeting(ユーザー解析)に関する記事の続きです。前編ではインストール方法とユーザーセグメントについて説明しました。今回は後編として、タグとスコアを利用した動的なユーザーセグメントの割り当て方法と、キャンペーンという機能について紹介していきたいと思います。

ユーザーセグメントのタグとスコアとは

前回の記事からの繰り返しとなりますが、ユーザーセグメントとはユーザーを特定の条件に従ってセグメント化したものです。その特定の条件に、対象となるコンテンツを何度閲覧したかという「スコア」という仕組みを使うことができ、ユーザーセグメントのタグを使用して対象となるコンテンツを設定します。

具体的な使い方を見ていきましょう。引き続き、保険会社の会員向けポータルサイトにAudience Targetingを導入していくという設定です。ポータルにはすでに以下3名のユーザーがいるとします。

1. Boy Twenty-Five
2. Boy Forty
3. Girl Twenty-Five

今回はプロフィールに登録された性別や年齢によってユーザーセグメントを定義するのではなく、ユーザーが「海外旅行保険興味あり」というタグが設定されたコンテンツやページに3回以上アクセスすると、そのユーザーを「海外旅行保険興味あり」というユーザーセグメントに動的に割り当てることにします。結果を検証するため、「海外旅行保険興味あり」のユーザーには、ログイン後のトップページに海外旅行保険に関連するコンテンツを表示する設定を追加します。

まずは「海外旅行保険興味あり」というユーザーセグメントを作成します。対象サイトのシステム管理→編集→ユーザー解析へアクセスし、「ユーザーセグメントの追加」をクリックします。名前は「海外旅行保険興味あり」、ルール「振る舞い」から「スコア」を追加し、スコアの値は「3」にして保存します。この数字が何度のコンテンツ閲覧でこのユーザーセグメントに割当てるかという値になります(1アクセス1ポイントです)。



次は、閲覧すると「海外旅行保険興味あり」に1ポイント加算されるページを作成します。

トップページにバナーをいくつか並べておき、



真ん中の海外旅行保険のものをクリックすると、以下の海外旅行保険説明ページに遷移するようにします。


このページには、「海外旅行保険興味あり」のタグを設定しておきます。ユーザーセグメントを作成するだけで同じ名前のユーザーセグメントタグが自動で作成されているはずなので、ページのカテゴリの設定から設定します。(このユーザーセグメントタグは通常のタグとは異なります。)



今回はページに設定しましたが、他のコンテンツにも同じようにユーザーセグメントのタグを設定することができます。

ユーザーセグメントの割り当て結果を確認するため、トップページにユーザーセグメントコンテンツディスプレイポートレットを配置し、「海外旅行保険興味あり」用のコンテンツ、当てはまらない場合のコンテンツを設定します。




これで設定完了です。「海外旅行保険興味あり」ではないユーザーにとっては、トップページはこのように見えるはずです。



Boy Twenty-Fiveとしてログインすると、確かにトップページはこうなっていますが、



バナーのリンクをクリックして海外旅行保険説明ページに遷移し、「海外旅行保険興味あり」のスコアを追加することを3度繰り返すと…



トップページのコンテンツが変わりました。Boy Twenty-Fiveが「海外旅行保険興味あり」のユーザーセグメントに振り分けられたことがわかります。

Audience Targetingでは、このように動的にユーザーをセグメントに振り分けることもできるのです。

キャンペーン

最後に、Audience Targetingのもう1つの機能であるキャンペーンについて紹介したいと思います。

キャンペーンでは特定のユーザーセグメントを対象として、一定期間コンテンツを表示させることができます。また、一部のアクションをユーザーセグメント別にトラッキングすることもできます。今回は「旅行保険見積もりフォームへの入力」をトラッキングしてみます。トラッキング対象とするためのフォームをWEBフォームポートレットで作成し、ポートレットのルック&フィールからポートレットのIDを確認しておきます。



システム管理→編集→ユーザー解析へと移動し、「キャンペーンの追加」をクリックしてキャンペーンを追加します。対象とするユーザーセグメントは「海外旅行保険興味あり」のユーザーセグメントとします。キャンペーンの有効期間と優先度を入力します。


キャンペーンにおける追跡対象のアクションとしては以下から複数を設定できます。

  • サイトページ
    • 参照

  • WEBフォーム
    • 参照/入力/送信

  • YouTube映像
    • 表示/バッファリング/再生(一部)/一時停止/再生(完了)

  • コンテンツ
    • 参照

  • リンク
    • クリック

今回は先ほど作成したWEBフォームの入力をトラッキングするための設定だけを追加し、保存します。


これでキャンペーンを作成することができました。

キャンペーン関連のポートレットとしては、対象となるキャンペーンに当てはまる場合に特定のコンテンツを表示する「キャンペーン・コンテンツ・ディスプレイ」ポートレットがあります。今回は省略しますが、一定期間だけを対象として特定ユーザーセグメントにコンテンツを表示したいようなケースにはこちらが便利かもしれません。

では、アクションのトラッキングについて確認してみましょう。Boy Twenty-Five、Boy Forty、Girl Twenty-Fiveという3ユーザーそれぞれで見積もりフォームのラジオボタンをクリックしてみます。入力をトラッキングできるかの確認なので、送信までは行いません。


それぞれのユーザーで操作が終わったら、管理者としてログインしてキャンペーンのレポートを見てみます。トラッキング動作のレポートとキャンペーン・コンテンツ・ディスプレイポートレットによるコンテンツビューのレポートがありますが、今回関連するレポートは前者です。

更新してからアクセスすると、



このようなレポートが表示されます。フォーム入力が3回記録されていることを確認しましょう。また、内訳としてどのユーザーセグメントのユーザーによるアクションであるかということもわかるようになっています。キャンペーンがどれだけ想定通りに効果を発揮したか、ということを計測するためにこのレポートを役立てることができます。

まとめ

2つの記事でAudience Targetingの基本的な使い方はご紹介できたかなと思います。ポータルへのアクセスユーザーに対してよりパーソナライズされた情報を提供する機能として、ぜひ試して見てください。

Monday, November 2, 2015

Alfresco勉強会#30でJavaScriptのデバッグについて発表しました

こんにちは、かわべです。前回のLiferayに関するブログで、続きを書きます!なんて書いておいて、まだ書けていなくてすみません。必ずや近いうちに…。
さて、今日は先日開催したAlfresco勉強会の振り返りブログを書こうと思います。なんと記念すべき第30回でした。

Alfrescoとはそもそもどういうものか?という入門編から、先日弊社が開催したセミナでお話したアクティビティログ解析といった発展編まで、盛りだくさんな内容となりました。
そんな中、私はAlfrescoのJavaScriptのデバッグについて発表しました。JavaScriptまわりの開発をしているとき、どういうふうにロガーを仕込むとどこにログが出力されるのか、ということがわかっていなくて苦しんだことがあるので、まとめてみました。カスタマイズをする場合には参考にしてみてください。


次の勉強会は2016年1月27日(水)に開催します。以下のリンクからお申し込みいただけます。

第31回Alfresco勉強会

発表されたい方や、こんなテーマでの発表が聞きたいなどのリクエストがある方はぜひお気軽にconnpassのフィードに投稿してください。ご参加お待ちしております。

Monday, September 14, 2015

LiferayのAudience Targetingでユーザーセグメントを定義して使ってみよう

こんにちは、最近自動車の運転を練習しているかわべです。カーシェアで早朝にちょこっと運転してパン屋さんでおいしいパンを買って帰り、家でゆっくり食べる、という夢があるのですが、先日練習したところどこにも駐車できずに疲れて帰ってきました。先は長そうです。

さて、本日はLiferay社が開発しており、Marketplaceから無償で入手してインストールすることができるAudience Targeting(オーディエンス・ターゲティング)という機能について紹介したいと思います。日本語では「ユーザー解析」という名称に訳されている、複数のポートレットやフックから構成されるプラグインです。2回に分けて記事にしようと考えているので、前半である当記事では機能の説明、インストール方法、そしてユーザーセグメントの利用方法について説明したいと思います。

Audience Targetingで何ができるようになる?

デフォルトのLiferayの機能でも、ユーザーが所属する組織やサイト、割り当てられたロールなどによって特定のコンテンツやページを表示する/しないという制御をすることはできます。これは権限のないユーザーからコンテンツを保護するためのポータル製品としての機能と言えます。
Audience Targetingを利用すると、ユーザーに最適なコンテンツを動的に表示させる更に細かいルールの適用が可能になります。例を挙げると、

  • 30代の男性ユーザーにはコンテンツA、40代の男性ユーザーにはコンテンツB、それ以外のユーザーにはコンテンツCを表示する
  • 午前6時から午前10時までにアクセスしたユーザーにはコンテンツEを表示する
  • コンテンツDを10回以上閲覧したユーザーをキャンペーンEの対象とし、登録フォームへの入力率を一般ユーザーと比較する

などです。ポータルサイトとしての可能性が広がりそうな機能だと思いませんか?

これらの表示ルールの一部は、EE版で提供されていたDroolsルールエンジンとポートレットを応用すれば以前から実現可能でしたが、Droolsではルール適用のためにスクリプトを記述する必要があり、そこに導入のハードルを感じた方もいるかもしれません。一方、Audience Targetingでは管理画面からのUI操作だけでルールが設定できるので、コーディング知識は必要ありません。

それではインストールから順を追って使い方を見ていきましょう。以下ではLiferay Portal 6.2 EE SP12をTomcatバンドルでMacにインストールしたものを使用しています。

Audience Targetingのインストール

Audience Targetingに限った話ではありませんが、Marketplaceにあるプラグインをインストールするには方法が2つあります。
  • Liferayの起動中に管理者としてログインし、コントロールパネル→MarketplaceでLiferay.comのアカウントを紐付けて画面上から購入、インストールする
  • ブラウザでMarketplaceにアクセスし対象のプラグインを購入後、ダウンロードし、ダウンロードしたファイルをLiferayのdeployフォルダに配置する

今回は後者の方法で進めます。Liferay.comに登録した自分のアカウントでAudience Targetingを購入(無料)し、プロフィールの「購入済アプリケーション」からダウンロードします。Audience Targeting EE.lpkgというファイルがダウンロードされます。Audience TargetingにはCE版も用意されているので、CEを利用されている場合はそちらを入手してください。
deployフォルダはLiferayを展開したフォルダ配下に存在するはずなので、その中にこのファイルを置きます。と、ここで注意。
通常、LiferayのプラグインはLiferayが起動していてもホットデプロイすることが可能ですが、Audience Targeting EE.lpkgはLiferayが停止しているときにdeployフォルダに入れ、その後Liferayを起動してください。
そうしないとエラーログが出力されてデプロイに失敗してしまいます。
また、これは試している中で気づいたことですが、deployフォルダにプラグインを入れて起動が完了した後、もう一度Liferayを停止→起動してください。そうしないとドックバーが一部無効になってしまうようです。(使えるようなら問題ありませんが、例えばコンテンツ追加のための「+」を押しても反応しなかったりしたら再起動しましょう。)

起動と停止をするにあたり、ついでに停止中に<TOMCAT_DIR>/bin/setenv.shでJVMのメモリサイズ設定を確認し、デフォルト値のままになっている場合は値を大きくしましょう。Audience Targetingを使用する場合、最低でも"-Xmx2048m -XX:MaxPermSize=512m"を割り当てることが推奨されているようです。

無事にインストールが完了すると、管理者としてログインした際にドックバーにシミュレータ用のボタンが追加されているはずです(クリックするとこんな風に左サイドペインが開きます)。



また、システム管理→編集へと移動すると、「ユーザー解析」という項目が追加されています。次はここから操作を行い、ユーザーセグメントを追加していきます。

ユーザーセグメントとは?設定方法は?

名前から想像が付くとおり、ユーザーを特定の条件に従ってセグメント化したものです。このセグメントごとにコンテンツの表示ルールやキャンペーンが設定できます。今回は、保険会社の加入者向けポータルサイト「Aegif Demo Insurance」である範囲の年齢と性別を条件としたユーザーセグメントを作成するという例を試してみたいと思います。
管理者としてログインし、対象サイトのシステム管理→編集→ユーザー解析へ移動すると、「ユーザーセグメントの追加」ボタンがあるはずなのでクリックします。すると、どのようなルールでユーザーセグメントを作成するか、画面から作成することができます。標準で用意されているルールは以下です。

ソーシャル(Facebook連携ログインを利用する場合のみ有効。Facebookの各項目を使用した分類)
  • 学歴
  • 特定ページへの「いいね!」有無
  • 性別
  • つながり
  • 年齢

振る舞い(Liferayポータル内で訪れたコンテンツによる分類)
  • 閲覧済みコンテンツ
  • スコア(タグのついたコンテンツの訪問回数を集計)
  • 閲覧済ページ

ユーザー属性(Liferayに登録した属性などによる分類)
  • サイトメンバー
  • 性別
  • サイトロール
  • ユーザーグループ
  • ログインの有無
  • 組織ロール
  • 組織メンバー
  • 標準ロール
  • 年齢

セッション属性(IPアドレスなどアクセス元による分類)
  • ロケーション
  • ブラウザ
  • OS
  • 時間
  • デバイス
これらのルールはもちろん組み合わせて利用することが可能で、必要な項目をドラッグし、希望する設定値を追加するだけでOKです。今回は「21-35歳男性」というユーザーセグメントを以下のように作成してみました。



ユーザーセグメントコンテンツディスプレイの利用

このユーザーセグメントに当てはまる場合のみ特定のコンテンツが表示されるように、「ユーザーセグメントコンテンツディスプレイ」ポートレットをページに配置してみましょう。今回はTOPページに置いてみます。ドックバーの「+」(追加)をクリックし、対象のポートレットをページにドラッグします。



右上の設定アイコンから、以下の条件で表示されるように設定して、保存します(日本語がいまいちだったので英語表示にしています)。
  • ユーザーが「21-35男性」のセグメントに当てはまる場合、「自動車保険へのリンク」というWEBコンテンツを表示する」
  • それ以外の場合、「保険見直しへのリンク」という別のWEBコンテンツを表示する


ところで上の画面キャプチャからわかるように、セグメントは複数を同時に利用することが可能で、セグメントの「すべてに」または「どれか1つに」該当する場合、という設定をすることができます。更に「+」を押すとセグメントの判断を追加できるため、「AならA', BまたはCならB'、Dなら…」というような複雑な表示設定も可能です。また、表示させるコンテンツもWEBコンテンツだけに限らず、ドキュメントやブログ記事など他の種類にも対応しています。

さて、それでは実際にユーザーセグメントが有効になっていることを確認してみましょう。以下3人のテストユーザーを作成し、Aegif Demo Insuranceに順番にログインしてみることにします。

1. Boy Forty 40歳男性



2. Boy Twenty-Five 25歳男性


3. Girl Twenty-Five 25歳女性


ちゃんと設定したユーザーセグメントに従ってコンテンツの表示がされました!
また、いちいちそれぞれのセグメントに該当するユーザーで入りなおさなくとも、管理者など権限があるユーザはドックバーのシミュレータボタンをクリックすると「このユーザーセグメントに属するユーザーにはどういうページに見えるのか」というのを確認することができます。


ユーザーセグメントリポート

各ユーザーセグメントに当てはまるユーザーがどのコンテンツを閲覧したかを表示する機能も備わっています。システム管理→編集→ユーザー解析→ユーザーセグメントに移動し、それぞれのユーザーセグメントで操作→リポートを選択すると、「そのユーザーセグメントに当てはまるユーザーが閲覧したコンテンツ」を見ることができます。



デフォルトでは1日に1度更新されますが、更新ボタンをクリックするとその都度更新されます。これもユーザーの動向を分析するために活用することができそうです。

次回予告

ユーザー分析にはまだ紹介できていない機能があります!後編として、ユーザーセグメントのタグ、そしてキャンペーン機能について近いうちに紹介したいと思います。

Monday, September 7, 2015

Enterprise API Hack night#1 に行ってきました!

コレステロール値に要観察の結果がでてしまった(前から出ていた?)ナクラです。

先週、木曜日(9/3)に第一回Enterprise API Hack nightに行ってきました。
正直な話、当日までこういうものがあるのは知らなかったのですが、
弊社の自社開発チームのメンバが、「行きたいのに行けない」と言うので
代わりにちょっと様子を見ようと気楽なノリでいってしまいました。

さて、皆さんEnterprise APIってなんだと思いますか?
私も全然こういう言葉に感度がなくて何なのだろうと思っていました。
「Enterprise」は日本語に訳せば「企業」
APIはApplication Programming Interfaceの略称ですので、
企業向けアプリケーションソフトウェアのインタフェースということでしょうか。
結局明確な定義はちゃんと理解できなかったのですが、
最初の登壇者の事務局の加藤さんは
B2BのAPIの普及を進めていきたいという話をされていたので、
大まかな捉え方としては、B2B向けのAPIがEnterprise APIで問題なさそうです。
とはいえ、公開APIの話もあったので、完全にB2Bに閉じたものでもないようです。

さて、このHack Nightでは3つの講演がありました。それぞれ簡単に感想を書いていきたいと思います。

講演1:ビジネスのデジタル化におけるAPI活用事例

apigee(アピジーと読むらしいです)の清水さんが話されました。
グローバルの世界では、今APIの活用がどんどんと進んでいるらしいです。
Walgreens、AP通信社、SalesForce、Dell、BECHTELなどで行われているAPIの活用事例を紹介してくださいました。
とくにBECHTELではipadを使った工事管理の事例で、Appleのipad事例にもなっているそうです。
こういった大規模なAPI群を管理するためのAPIマネジメントプラットフォームが重要になってきているという話でした。(apigeeもこの分野を取り扱うソフトウェア(?)のようです)

講演2:APIがNTTコミュニケーションズのサービスを変える!

NTTコミュニケーションズの緒方さんが話されました。
現在NTTコミュニケーションズでAPIの代理店向けのAPIが公開されはじめていて
代理店のポータルシステムとNTTコミュニケーションの情報を管理するシステムとが連携して、
ポータル側で契約情報や故障情報などがリアルタイムで確認できるようなことになっているそうです。
APIの利用を促進するために、
標準化ルールの設定、APIの管理、ニーズを捉えたAPIの作成が必要だと言う話をしていただきました。

講演3:IoT/M2M分野におけるWeb APIの使い方とデモ 

MOONGIFTの中津川さんが話されました。
M2Mについて最近はmachine to machineでは無くmachine to cloud to machine
M2C2Mになっているという話で、cloudの部分ではブラウザなどでアクセスして情報を閲覧したりできるような形になっているということでした。
M2Mは利用目的によっていろいろな方法がとれるので、ネットワークの設計を慎重に検討して、最適なネットワークを選ぶことが大切だというお話でした。
IoTのWeb APIの話では、大量のデバイスからデータを取って、データを蓄積するビックデータ型と
ビーコン系のデバイスとスマフォを通信させてるスマートフォン型の利用方法があり、それぞれのメリットでメリットの話も聞けて、とてもためになりました。
また、音声入力でチャットしたり、玄関の電球を灯けたりするデモも見せてもらいました。
今更ながら、ラズベリーパイが欲しくなってしまいました!




講演の後にはライトニングトークがあって、何人かの方が発表されていましたが、
お酒が振る舞われた後だったので正直あまり覚えていません(汗)



弊社もNemakiWareやCmisSyncなどAPIを活用した自社ソフトウェアがありますので、
この流れにおいていかれないように、今後もEnterprise API Hack Night は「要チェックや!」と思いつつも、コミュニケーション力を高めていかないと、なかなかコミュニティに入り込めないなと、ひとしきり反省しながら帰りました。

興味を持っていただいた方はツイッターで#entapihackのハッシュタグで検索してみてください。

また次回参加したらブログに感想を書きたいと思います
ではでは。

Tuesday, September 1, 2015

Alfresco勉強会#29 ユーザのアクティビティを可視化してみる

こんにちは。錦織選手が全米オープンで初戦敗退と聞いて凹んでいるてらしたです。足のケガで出場できるかどうかも微妙だった去年が準優勝で、万全と言っていた今年が初戦敗退とはわからないもんですねぇ。

さて、開催から1週間も経ってしまいましたが、先日29回目のAlfresco勉強会が開催されました。今回は弊社の戸谷がAlfrescoでのユーザアクティビティの可視化について発表しました。

Alfrescoにはユーザがサイトに参加した、ファイルをアップロード/ダウンロードした、といった操作内容を記録して表示するためのアクティビティという機能があります。標準機能でも、アクティビティをダッシュレットに表示したり、日次でメールで通知したりすることができるのですが、それをもうちょっとわかりやすく可視化できたらおもしろいんじゃないか、という内容でした。

具体的には、LogstashでAlfrescoのREST APIを叩いてアクティビティを取得 → Elasticsearchに登録 → Kibanaで見てみる、という話です。この内容を参考にして、収集するアクティビティや見せ方を色々応用していったらおもしろそうです。ご興味があればぜひ試してみてください。


次回のAlfresco勉強会は10月28日(水)です。たくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

第30回Alfresco勉強会

もちろん発表も大歓迎です。発表はできないけどこういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。

Monday, August 31, 2015

LiferayのLDAP連携

最近は涼しくなってきましたね。残暑はあるのでしょうか。暑さに弱いので、できればこのままいってもらいたいナクラです。
今日はLiferayのLDAP連携について書きたいと思います。
わたしも社内のご多分に漏れずMacを利用しているので
LDAPとしてはOpenLDAPを利用します。
OpenLDAPのインストールについては、こちらの記事を参考にしてください。

さて、Liferayではユーザ情報としてはメールアドレスが必須になります。
従ってLDAP側では メールアドレス付きのユーザを作成しておく必要があります。
上記のリンクの記事を参考にOpenLDAPを入れていただいた場合、
メールアドレス情報付きのユーザを作成するには、
slapd.confファイルに
include         /private/etc/openldap/schema/cosine.schema
include         /private/etc/openldap/schema/inetorgperson.schema
のような形で、cosine.schemaとinetorgpersion.schemaをインクルードする
設定を追記してください。

LDAP:ユーザの作成

次には、LDAP上にユーザを作成していきましょう。
今回はApache Directory Studioを使って作っていきます。
まず、Apache Directory Studioを起動します。
右下のConnectionビューの「New Connection」をクリックします。


 
新しいコネクションを設定するウィンドウが開くので、コネクション名とホスト名、ポート名などを設定します。
今回はコネクション名はsample_liferay、ホスト名はlocalhost、ポート番号は389とします。(ホスト名やポート番号は、実際にLDAPをインストール環境にあわせてください。)


Nextをクリックすると、認証の設定画面に変わるので、
Bind DN or user:の部分にはslap.confのrootdnの値を設定します。
Bind passwordにはrootpwで設定した値(slappasswdコマンドで生成した値を入れている場合は、生成時に設定したパスワード文字列)を入力します。



Finishをクリックします。
右側のLDAP Browserビューに新しくコネクションが追加されます。
まず、slap.confのsuffixに該当する組織を作成します。
右クリックしてNew > New Context Entryと選択します。
エントリ作成の画面が表示されます。


Create entry from scratchにチェックが入っている状態で、Nextをクリックします。
エントリのオブジェクトクラスを設定する画面が表示されるので、dcObjectを選択して、Addボタンを押します。
同じようにしてorganizationUnitを選択してAddボタンを押して、項目に追加します。
追加が終わったらNextボタンをクリックします。




Distinguished Nameを設定する画面が表示されるので、slap.confのsuffixの設定と同じものを入力します。 (例 dc=aegif,dc=jp)



Nextをクリックすると、次のような画面が表示されるので、ouに値を設定してFinishをクリックします。ouは組織名です。設定する値はなんでも構いません。



 次にユーザを作成します。先ほど作ったコンテクストエントリを右クリックして、New > New Entryと選択します。先ほどと同じようなエントリ作成の画面が表示されます。Create entry from scratchにチェックが入っている状態で、Nextをクリックします。
エントリのオブジェクトクラスを設定する画面が表示されるので、inetOrgPersonを選択して、Addボタンを押します。



NextをクリックするとRDNを設定する画面が表示されます。
ここではLiferayに必要な情報を追加していきます。スクリーン名、メールアドレス、姓、名などを入れていきます。項目名は事前に利用するクラスによって使えるものが決まって来ます。

Nextをクリックして、Finishをクリックします。

これで、LDAP側にユーザが作成できました。
次はLiferay側の設定をしましょう。


LiferayのLDAP設定

Liferayサーバを起動して、管理者でログインします。
コントロールパネルに移動し、ConfigurationのPortal Settingsをクリックします。
右側のメニューでAuthenticationをクリックします。
LDAPタブを選択します。次の画面が表示されます。



 EnabledのチェックボックスとImport Enabledのチェックボックスにチェックを入れて、保存をクリックします。
次にLDAP ServerのAddボタンをクリックします。
サーバの追加画面が表示されます。
Server Nameを入力し、
Default ValuesにOpenLDAPにチェックを入れてReset Valuesをクリックします。



 これでOpenLDAPに則した項目マッピングがされるようになります。ただし、Connectionの部分は、自分の環境に合わせて設定が必要です。



 Base Provider URLはホストサーバのURLとポート番号、Base DNにはslap.confのsuffixの値、Principalにはrootdnの値、Credentialsにはrootpwに該当するパスワード文字列を設定します。
これで設定はできました。一応、画面を下にスクロールして、User Mappingの項目を確認してください。LDAPサーバで登録したユーザ情報と項目がマッチするように設定されています。基本的にはデフォルトのままでOKですので、このままSaveボタンをクリックします。

以上、で設定が完了しました。
しばらくすると同期処理が走って、LDAPで作成したユーザがLiferay側にも作成されます。(デフォルトでは同期のタイミングは10分おきになっています。設定を変更したい場合はportal-ext.propertiesファイルに ldap.import.interval = XX と設定してください XXは任意の数字で分単位です)


まとめ

LiferayのLDAPサーバとの連携は非常に簡単です。
既存のLDAPサーバを連携する場合は、LiferayのLDAP設定から始めてもらえれば大丈夫です。ユーザと同じようにして、グループの設定も可能です。
Liferayの運用の場面で良くある話ですが、大量のユーザの追加をUIから行うのは大変なので、LDAP連携の機能を利用してユーザの管理を行うと作業が楽になるでしょう!

Tuesday, August 11, 2015

Liferayのパーソナライゼーションについて

ナクラです。
ひさびさにブログを書く事になりました。
いつまで続けられるか分かりませんが
今後は力の限り、Liferayの機能を紹介していきたいと思います。

さて、今回のトピックは「パーソナライゼーション」です。
Wikipediaなどを参考にすると、「パーソナライゼーション」とは、個人向けにカスタマイズを行うことを指すようです。
ポータルの概念で捉えると、「ポータルにアクセスしたユーザ毎に、表示する内容をそのユーザ向けに変更すること」になります。
Liferayでもいろいろな形でパーソナライズを行うための機能が用意されています。


能動的パーソナライズと受動的パーソナライズ

Liferayのパーソナライゼーション機能について見ていく前に、2つのパーソナライズ方針について整理しておきましょう。
これを仮に「能動的パーソナライズ」と「受動的パーソナライズ」と呼ぶ事にします。
「能動的パーソナライズ」の定義は「ユーザ自身が自分で、表示する内容を変更すること」です。例としては、個人のブログサイトが分かりやすいでしょう。ユーザがブログサイト上で自分でブログを書いたり、ページのレイアウトを変更したり、バナーを貼ったりといったことを行います。
 「受動的カスタマイズ」の定義は「ユーザの属性情報を元に自動で表示する内容を変更すること」です。
この例としては、会員制キャンペーンサイトなどがあります。
サイトにログインした会員に対して、会員の持っているポイント情報や、最近購入した商品、おすすめの商品など個別のユーザごとに表示するコンテンツが変わってくるものになります。

それでは、Liferay上でこれらのパーソナライズの機能をどのように実現しているのか見ていきましょう。

Liferayの能動的パーソナライズ

Liferayでは能動的パーソナライズとして2つの機能が用意されています。
1つ目は、個人用サイトの機能です。
ユーザを作成した際に、ユーザ自身が管理者となった「プロフィール」という名前の公開サイトと「ダッシュボード」という名前の非公開サイトが自動的に作成されます。
この個人用サイトではユーザがページやページの要素を設定できるため、非常に高い自由度があります。
Liferayにログインすると、自分の名前が表示されています。
その部分をクリックすると「プロフィール」と「ダッシュボード」が表示されます。
クリックすると、それぞれ個人用のサイトが表示されます。



個人用のサイトが表示されたら、その上で自由にポートレットを配置したり、コンテンツを表示したりできるようになります。



2つ目は、ページのカスタマイズ機能です。Liferayではページを作成する際に、ポートレットをページの上に配置していくのですが、それはページのレイアウトに従って配置されます。
以下の図は2列のレイアウトを表しています。



Liferayではデフォルトで様々なレイアウトが用意されていて、3列のレイアウトや1段目を1列、2段目を2列にするといったレイアウトなども用意されています。
ページのカスタマイズ機能はこのレイアウトの一部だけを、ユーザに解放し、そこだけは、ユーザが自由にポートレットを配置できるようにします。
カスタマイズの設定はまず サイトの管理権限のあるユーザでカスタマイズ設定したいサイトのページにアクセスして、画面上部のドックバーから「システム管理」➡「ページの編集」をクリックします。



ページの管理画面が表示されるので、カスタマイズ設定をするページをクリックします。
ここではHomeのページを選択します。右側のメニューでページ毎に設定できる項目が表示されるので、その中にある「カスタマイズの設定」メニューをクリックします。そうすると以下のようなカスタマイズ設定の画面が表示されます。
 ユーザにカスタマイズを解放したいレイアウトのエリアのチェックボックスにチェックを入れて保存します。



これで、Homeページを表示すると、カスタマイズを解放したレイアウトはユーザが自由にポートレットの追加や削除が可能になりますが、レイアウトを解放していない部分は固定になります。



Liferayの受動的パーソナライズ

Liferayでは受動的パーソナライズとして、アクセス権限管理機能が使えます。
ポータルの一般的な機能として、ユーザの持つ権限によって、ポートレットやコンテンツに対してのアクセス権の設定が行えるので、これを利用してページに配置したポートレットを見せたり、見せなくしたりできます。この機能はユーザ毎に設定するわけではないので厳密に言うとパーソナライゼーションとは外れるのですが、サイトコンテンツの表示を見せたり、見せなくする方法としてはよく使われる方法です。
本格的に受動的パーソナライズを行うにはルールエンジンと連携します。LiferayはDroolsといったルールエンジンと連携するプラグインが提供されています。(このプラグインはエンタープライズエディション専用のプラグインとなっています。)
ルールエンジンを活用すれば、アクセス管理で行うよりも柔軟な形のパーソナライゼーションが可能となります。
例えば、ユーザの住所の情報から、近くの地域で行われているイベントを抽出して表示するようなことが可能になります。
ルールエンジンとの連携については、また将来のブログで紹介させていただければと思います。

以上で、簡単ではありますが、Liferay で実現されているパーソナライゼーションについて見てきました。
ポータル製品の性格上、一般的なCMSに比べてパーソナライゼーションについての機能は充実しているのがお分かりいただけたかと存じます。
これらの機能を活用して、ダイナミックで魅力のあるサイトを構築してください。

それでは、また次回のLiferay紹介でお会いしましょう!


Thursday, July 23, 2015

Alfresco Community 4.2.c〜fでIE11だとログインできない問題への対処方法

こんにちは、そうまです。

今回はAlfresco Community 4.2.c〜fでIE11だとログインできない問題の対処方法についてまとめました。

この「IE11でログインできない」問題は比較的有名ですので、ネット上で探してみると対処方法は見つかります。しかし、記載された対処方法のみを行った場合に別の問題が起きてしまうことがありましたので、今更感がありますがエントリーを書いてみました。
なお、この問題は最新のAlfresco Community 5.0.xでは解消されています。

1. login.get.html.ftlファイルの修正

この問題について検索すると良く提案されている対策です。
ログインボタンのid属性を削除すると、IE11でもログインができるようになります。

<tomcat_dir>/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/guest/login.get.html.ftl
57行目:
<input type="submit" id="${el}-submit" class="login-button" value="${msg("button.login")}"/>
<input type="submit" class="login-button" value="${msg("button.login")}"/>
ただし、id属性を削ってしまった影響として、ログインボタンが以下のようにブラウザデフォルトのスタイルに変化してしまいます。


 2. login.cssの修正

デフォルトのスタイルとなってしまったログインボタンをAlfrescoのスタイルとなるように修正しましょう。idでの指定ができなくなりましたので、以下のclassでスタイルを指定した記述を追加します。
<tomcat_dir>/webapps/share/components/guest/login.css
.form-fields.login .form-field input.login-button {
  background-color: #ffa028;
  border-color: #ffa028;
  border-style: solid;
  color: #FFFFFF;
  font-family: Open Sans Bold,Arial,sans-serif;
}
これで、元どおりのスタイルが適用されたログインボタンとなります。



3. login.jsの修正

1.2.の対処方法だけで修正ができているように見えるのですが、実はid属性を削除したことで、javascriptエラーが発生するようになっています。
このエラーはブラウザをデフォルトの設定で使用している場合は表示されませんが、ブラウザでスクリプトのデバッグを行う設定となっていると、ログインボタンを押したときにエラーダイアログが表示されます。

例えばIE11の場合、[インターネットオプション]-[設定]-[ブラウズ]で、「スクリプトのデバッグを使用しない (Internet Explorer)」のチェックを外すと、以下のダイアログが表示されます。



Alfrescoを利用するだけであれば問題にならないかもしれませんが、Alfrescoでの開発の途中など、デバッグ有効にしているとログイン毎にダイアログが表示されて煩わしいため、これも対応しましょう。  

<tomcat_dir>/webapps/share/components/guest/login.js
90行目付近:
 this.widgets.submitButton.set("disabled", true);
 if (null != widgets.submitButton)
 {
     this.widgets.submitButton.set("disabled", true);
 }

109行目付近:
 this.widgets.submitButton = Alfresco.util.createYUIButton(this, "submit", null, {
    type: "submit"
 });
 if (null != this.widgets.submitButton)
 {
     this.widgets.submitButton = Alfresco.util.createYUIButton(this, "submit", null, {
        type: "submit"
     });
 }

なお、Alfrescoから利用されるのはlogin.jsをminifyしたlogin-min.jsですので、修正したlogin.jsからlogin-min.jsを作り直す必要があります。
 javascriptのminifyには様々なツールが提供されていますが、AlfrescoにはYUI Compressorが同梱されていますのでこれを利用します。
$ cd <tomcat_dir>/webapps/share/components/guest/
$ mv login-min.js login-min.js.orig
$ java -jar ../../WEB-INF/lib/yuicompressor-2.4.7.jar login.js -o login-min.js

これで、エラーも発生しなくなりました。

Alfresco Community 5.0.dに続きAlfresco One Enterprise 5.0.1がリリースされた現在ですが、まだまだAlfresco Community 4.2系を継続利用する環境もあると思いますので、その際の参考になれば幸いです。

Thursday, June 25, 2015

Alfresco勉強会#28 でAlfresco 5.0の検索機能について紹介しました。

こんにちは。おおたにです。

先日、弊社オフィスにてAlfresco勉強会#28が開催されました。当日の様子はこちらの記事にも書いてある通りですが、たくさんの方が集まり色々な質問が飛び交いました。発表は先ほどの記事のメタデータテンプレートと私の「Alfresco 5.0の検索機能をみてみよう」の2本立てでした。

私の発表では、Alfresco 5.0で大幅に強化された検索機能の紹介と、その中でも特にファセット検索(検索結果の絞り込み)のGUI上での設定方法について紹介しました。簡単にフィルタを追加できるので、実際にAlfrescoを利用する際にも有用な機能かと思います。


最後に、2点ほどお知らせをば。

お知らせ1 : 
次回、第29回Alfresco勉強会は2015/08/26(水)です。参加登録はこちらからお願いします。発表します、こういう話が聞きたいです等、どしどしフィードに書き込んでください。

お知らせ2 : 
2015/07/06(火)、弊社においてミニセミナー「パターン別ドキュメント管理のキーポイント 〜Alfresco, NemakiWareなどを例として〜」が開催されます。一概に文書管理と言っても目的に応じていくつかのパターンがあり、それぞれにおいて必要とされる機能やシステム導入時に考慮すべき事項が異なってきます。本セミナーでは、AlfrescoやNemakiWareと言ったECM製品を例にいくつかのパターンの文書管理の勘所を紹介しますので、ご興味をお持ちの方は是非ご参加ください!

Alfresco勉強会#28 メタデータテンプレートの作り方について発表しました

こんにちは。てらしたです。

昨日6/24に第28回Alfresco勉強会が開催され、Alfresco Shareのドキュメントリストに表示される属性情報を条件によって切り替えるためのカスタマイズ(メタデータテンプレート)について発表しました。
せっかくカスタムモデルを作って属性情報を追加したのにコンテンツの詳細画面を開かないとその属性が見れないというのは不便、ドキュメントリストにも表示したい、といった要件を満たすためのカスタマイズです。
Evaluatorの定義の仕方や使い方はメタデータテンプレートだけでなく、インジケータやアクションのカスタマイズをする場合も参考になると思います。


今回の勉強会は私が知る限りたぶん過去最高に参加者が多く、質疑応答も今までで一番活発だったのではないかと思います。私の発表の中でも、参加者の方からの質問でメタデータテンプレートが検索結果画面のリストには効いていないという発見があったりしました(下調べ不足という話でもありますが・・・。すみません。)

さて、次回のAlfresco勉強会は8月26日(水)です。次回もたくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

第29回Alfresco勉強会

こういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。そもそもAlfrescoって何ができるの?というところから教えてほしい、といった要望でもかまいません。もちろん発表も大歓迎です。

Friday, May 22, 2015

AlfrescoのZipダウンロード機能が文字化けで使えない場合の対処法

こんにちは。最近花粉症っぽい症状がぶり返しているおおたにです。同僚に聞いたところ、イネ科の花粉がこの時期に飛ぶらしいとのことで、近いうちにアレルギー検査をしてこの症状の原因を突き止めたいと思っています。

さて、今回はAlfresco 4.2系以降で利用可能な「Zip形式でダウンロード」機能に関して起こりがちな問題と解決方法について説明します。


「Zip形式でダウンロード」機能とは


「Zip形式でダウンロード」機能は、複数のフォルダやファイルを一括ダウンロードする機能で、選択したフォルダもしくはファイルをZip形式で圧縮してダウンロードします。Alfresco 4.2において実装された機能で、現行のAlfresco 5でも利用することができます。





Zip形式ダウンロードを行うとファイル名が文字化けして展開できないことがある


とても便利な機能なのですが、Windows 7(もしくはそれ以前)においては、ファイル名が文字化けして展開できないことがあるという問題があります。MBCSのファイル名、例えば全角文字を含むようなファイル名のものを「Zip形式でダウンロード」でダウンロードしてみましょう。

Archive.zipというファイルがダウンロードされるので、エクスプローラで開いてみます。すると、以下のように文字化けしてしまうことがあります。なお、Windows 8やMac, Linuxでは文字化けせず、Windows 7以前でのみ文字化けします。



これは、Alfrescoが生成するZipファイルでは格納されているファイル名がUnicodeで記録されているにも関わらず、Windows 7以前ではファイル名をShiftJISとして認識しようとしていることに起因します。Mac等で生成したZipファイルをWindowsで開こうとすると文字化けすることがあるのと同じ問題です。


2つのワークアラウンド


この問題、既にAlfresco JIRAに報告されていますが、Alfresco側で手当てする予定は無いようなので、クライアント側で対処する必要があります。対処法としては以下の2つがあります。

1. Unicodeファイル名に対応したアーカイバを利用する
 Zipファイルの展開にエクスプローラではなくUnicodeファイル名に対応したサードパーティのアーカイバ(7-Zip等)を利用することで、文字化けせず適切に展開することができます。

2. Windowsの修正プログラムを適用する
 どうしてもMicrosoft謹製のエクスプローラで開きたいという場合は、各クライアントPCにこちらの修正プログラムを適用することで、Unicodeファイル名を適切に扱うことができるようになります。

2.の修正プログラムを適用すると、先ほどのArchive.zipも文字化けせずに展開できるようになります。



本記事は以上となります。ファイル一括ダウンロードを利用したいという方は是非お試しください。