Wednesday, April 6, 2016

Alfresco Community Edition 5.1をインストールしてみよう

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

先日、埼玉県幸手市にある権現堂堤というところに桜と菜の花を見に行きました。以前から一度は行きたいと思っていたのですが、実際に目にしたピンクと黄色の鮮やかなコントラストは想像以上でした。ちなみに権現堂堤は秋になるとたくさんの曼珠沙華が咲き誇り、こちらも壮観です。


さて、ここからが本題なのですが、今回はAlfresco Community Edition 5.1のインストール方法について紹介しようと思います。AlfrescoはWindows / Mac / Linux向けにそれぞれインストーラを提供しているので、インストーラをクリックするだけでとても簡単にセットアップすることができます。

なお、この記事で使用しているAlfrescoのバージョンはAlfresco Community Edition 201602 GAというものです。 記事執筆時点でのコミュニティ版の最新版となります。なお、このバージョンは内部的には5.1.eとナンバリングされているため、以後5.1.e(5.1系)と呼ぶことにします。

これまで4.2.xや5.0.xと呼ばれていたバージョン番号が何故5.1から変わってしまったのか、正確なところは分かりませんが、5.1からalfresco(Alfrescoのコアリポジトリを提供するアプリケーション)とshare(AlfrescoのUIを提供するアプリケーション)のソフトウェアライフサイクルが独立したことに起因するのではないかと想像しています。

まずはインストーラのダウンロードから


というわけで、まずはインストーラをダウンロードします。目的のインストーラはCommunity file list 201602-GAからダウンロードできます。OSに応じたものをダウンロードしてください。このサイトではインストーラの他に、手動インストール用のモジュールなどもダウンロードできます。

インストーラを実行しよう


早速インストーラをキックしましょう。64bit版Windowsであればalfresco-community-installer-201602-win-x64.exeを実行します。以下、Windows版のインストーラに沿って見ていきます。

まずは言語選択画面が表示されるので、インストーラの表示言語を選択して「OK」をクリックします。ここで選択するのはあくまでもインストーラの表示言語です。インストールされるAlfrescoの言語ではありません(ここでの選択に関わらず、Alfrescoの対応する全ての言語リソースがインストールされます)。


続いて「次へ」をクリックします。



次に、インストールの種類を選択します。ここでは「詳細設定」を選択して「次へ」をクリックします。


必要なコンポーネントを選択して「次へ」をクリックします。各項目の内容は以下のとおりです。
  • Java : Java SE Runtime Environment 1.8。Alfrescoの起動に必要だが既にインストールされている場合は不要。
  • PostgreSQL : PostfreSQL 9.4.4。Alfrescoが利用するRDBMS。別にインストールされたRDBMSも利用可能だが、これを選択しておくとAlfresco専用にRDBMSを用意する上に構成も自動的に行われる。
  • LibreOffice : LibreOffice 4.4.5。オフィス系文書のコンテンツ変換やテキスト抽出に利用される。ひとまず選択したままでよい。
  • Solr1 : Apache Solr 1。基本的にはSolr 4を使うべきなので選択しないままでOK。
  • Solr4 : Apache Solr 4。検索に利用される。別途検索エンジンを用意しないのであれば選択したままにする。
  • Alfresco Office Services : SharePoint Protocol Support機能。AlfrescoがMicrosoft SharePointのフリをして、Alfresco上にあるオフィス系文書を直接MS Officeで開いたりAlfrescoに書き戻したりすることができる。不要であればチェックを外す。
  • Web Quick Start : Webコンテンツ管理モジュール。必要ならチェックを付ける。
  • Googleドキュメントの統合 : Google Docs連携モジュール。Alfresco上にあるコンテンツをGoogle Docsで開いたりAlfrescoに書き戻したりすることができる。不要であればチェックを外す。


次に、インストールフォルダを選択して「次へ」をクリックします。



データベースのポート番号を指定します。PostgreSQLを選択していた場合はデフォルトの5432番でOKです。



Tomcatのポート設定を行います。Tomcatの前面にApache等のWebサーバを立てる場合はそのドメイン名を入力します。Tomcatの各ポートはデフォルトのままでよいと思いますが、Tomcatで直接80番にホストしたいとか、他のTomcatサーバと競合する等の場合はポート番号を変更します。日本語表示にするとAJPポートが下に切れてしまうのはAlfrescoの伝統です。というのは冗談で、デフォルトで8009番と入力されていて、もちろん変更することも可能です。



続いて、LibreOfficeのポート番号を指定します。他のサービスとポートが競合しない限り、デフォルト設定のままでよいと思います。


次に、FTPポートを指定します。デフォルトでAlfrescoサーバにFTPアクセスすることができ、そのポート番号を指定します。このFTPサーバ機能は、スキャナ等との連携や、初期データ登録、Windows Explorerを使ったAlfrescoへのアクセスなどに利用することができます。


管理者アカウントのパスワードを入力します。デフォルトの管理者ユーザ名はadminです名前です。



最後にWindowsサービスとして登録する際のスタートアップの種類を選択します。自動起動にしたい場合は「自動」を選択します。



以上で設定は終わりです。「次へ」をクリックするとインストールが始まります。



インストールが終わると以下のようなダイアログが表示されます。「Alfresco Communityを起動する」にチェックが入っていると、「終了」をクリックした後にAlfrescoサービスが開始されます。なお、Windowsの場合はAlfrescoは以下の2サービスからなっています。
  • alfrescoPostgreSQL : PostgreSQL(RDBMS)のサービス 
  • alfrescoTomcat : AlfrescoをホストするTomcatのサービス

Alfrescoにアクセスしてみよう


Alfrescoが起動したら、ブラウザで http://localhost:8080/share/ にアクセスしてみましょう。以下のダイアログが表示されたら、ユーザー名adminと先ほど設定したパスワードを入力します。



正常にインストールされていれば、ログインに成功して以下のような画面が表示されるはずです。



これでAlfrescoを利用する準備が整いました。

うまく動かない場合は…


うまく起動しない場合は以下の内容を確認してみてください。
  1. Alfresco起動設定の確認。Windowsの場合は <alfresco_dir>/tomcat/bin/alfrescoTomcatw.exe でJVMオプション等を確認/設定することができます。



  1.  ログの確認。以下のようなログがあります。
    • <alfresco_dir>/alfresco.log : Alfrescoアプリケーション(コアリポジトリ)ログ
    • <alfresco_dir>/share.log : Shareアプリケーション(UIアプリ)ログ
    • <alfresco_dir>/solr.log : Solrアプリケーション(検索エンジン)ログ
    • <alfresco_dir>/tomcat/logs/alfrescotomcat-stderr.log : Tomcat標準エラー出力ログ
    • <alfresco_dir>/tomcat/logs/alfrescotomcat-stdout.log : Tomcat標準出力ログ
    • <alfresco_dir>/tomcat/logs/catalina.log : Tomcatログ
    • <alfresco_dir>/tomcat/logs/localhost_access_log.txt : アクセスログ

まとめ


今回はAlfresco Community Edition 5.1のインストーラインストールを紹介しました。インストーラを使うと必要なモジュールのインストールと設定がとても簡単にできます。実際に利用する環境を構築するためには、要件に合わせた更なる設定とパフォーマンスチューニング等が必要になりますが、お試しで軽く使ってみようという程度であればインストーラでインストールしたもので十分かと思います。是非みなさんも試してみてください。

なお、Alfresco Community Edition 5.1の新機能についてはAlfresco勉強会での発表がありましたのでこちらの記事が参考になります。後ほどこのブログでも紹介したいと思います。


Thursday, March 31, 2016

GitLab にプッシュすると差分が自社サイトに FTP されるようにしてみた

こんにちは、すぎもとです。

普段は別のブログに書いていますが、今回は社内のシステム環境の話だったのでこちらにポストしてみます。

Aegif のコーポレートサイトは静的サイトで構築されています。最近リニューアルしました。ところが記事の更新などがあったとき、マーケティングを担当にしている同僚が手で涙ぐましい修正をしていたことが判明しまして、JavaScript で一部の作業を自動化をすることにしたんですね。

そうやって、やはり複数人が係わるようになると、編集→更新の流れをもう少し楽にしたいなという話が出てきました。まずは社内の Git リポジトリ環境(GitLab)にサイトのソースを置くことに。でも、ここまでやったら、プッシュしたら自動で本サイトに反映したいということになりますよね。

Web サイトが置いてあるサーバは Git が使えないので、GitLab 側からFTPすることにしました。やったことは以下の通りです。

GitLab のあるサーバは Ubuntu 14.04 です。まずは git-ftp を導入します。デフォルトでやってみたら最新が落ちてこなかったので PPA を追加して、apt-getします。

# add-apt-repository ppa:resmo/git-ftp
# apt-get update
# apt-get install git-ftp

つぎに GitLab が管理している Git リポジトリにカスタムのサーバサイドフックを作成し、プッシュされたときに FTP されるように設定します。

GitLab の管理するリポジトリはサーバのローカルパスで言うと


/var/opt/gitlab/git-data/repositories/aegif/CorporateSite.git 

みたいな場所に保管されます。このリポジトリ直下に

custom_hooks 

ディレクトリを作成し、そのなかに post-receiveという名前でスクリプトを作成します。スクリプトは以下のような記述にしました。

#!/bin/bash 
cd /path/to/tempdir/CorporateSite 
git --git-dir=.git pull 
git --git-dir=.git ftp push --branch master --user XXXX --passwd xxxxx ftp://xxxx.jp:21/pathtodir

このスクリプトのオーナーは git:git にしておき、実行権限を付けておきます(GitLabがキックするので)。なお Git コマンドを発行する行には上述の通り、 --git-dir=.git がないと怒られます。

注意点としては、普通の Git リポジトリなら custom_hooks 内で直接 git ftp できてしまうんですが、 GitLab が使う Git リポジトリは bare リポジトリなので、いったんサーバのローカル環境でで別の場所に取得してしてそこから FTP します。

ですので、サーバローカル内で手動 git clone を /path/to/tempdir/CorporateSite にしておきます。さらに FTP サーバ側に差分を送ることが出来るように、初回は手動で git ftp init をしてファイル群をアップロードしておきます。

以後はプッシュされると差分だけが上がるようになります。今回はステージング環境は存在しなかったので、master から直接本番環境にあげてしまっています。 けっこう時間がかかることが予想できたので nohupで起動させて放置しておきました。

nohup git ftp init --branch master --user XXXX --passwd xxxxx ftp://xxxx.jp:21/pathtodir > /path/to/git-ftp-log&

初回アップロードは1時間くらいかかりました。その後、試しにテストファイルを手もとからプッシュして、自社サイトの更新を確認しました。

こう書くとけっこう簡単に作業したか見えますが、思ったより時間がかかってしまいました。というのも git-ftp で出てくる記事が古いんですよね。おかげで、余計なライブラリとか入れちゃったり、bare リポジトリの存在をすっかり忘れて、アップロードできないと悩んだりして無駄に時間を費やしてしまいましたよ。

今こそほとんどワンライナーで出来ちゃいますが、昔はそこまで簡単じゃなかったようですね。イマドキの Web サーバはサーバのほうに Git が入ってたりしますし、そもそもサイト自体も動的なことがおおかったりするわけで、 FTP で更新するというので情報が少ないのも仕方ないですね。

今回、この試みで、うちの会社では技術者以外の同僚にも Git をつかってもらうことになりました。とりあえず GUI で使ってもらうべきだろうと SourceTree を入れてもらいましたが、 Mac 版と Windows 版でだいぶ構成が違ったり(更新担当者はどちらも使います)無償版でも無償ライセンスの登録が必要になっていたりと導入自体にハードルがあってなかなか大変。ひとまずはブランチなどを使わずに、「うっかり壊しても技術部門に相談してくれればもとに戻せるリポジトリ」みたいな扱いで master 直接プッシュでまずは運用をはじめてみました。

この非技術者による Git 運用についてはまた軌道に乗ったらお伝えできたらと思います。

Friday, March 25, 2016

Alfresco勉強会#32 Alfresco Bulk Import toolのご紹介


こんにちは。ご無沙汰しております、Aegifのそうまです。

先日3月23日(水)に、弊社オフィスにて第32回Alfresco勉強会が開催され、そこで「Bulk Import toolのご紹介」という内容で発表させていただきました。

「Bulk Import tool」は名前の通り、コンテンツをまとめてAlfrescoへインポートするツールで、以前はAdd onとして提供されていたのですが、現在(Alfresco 4.0以降)はAlfrescoの配布物に含まれておりインストールした直後から使えます。

他のインポート手段に比べ比較的高速で、ファイルの複数バージョンを設定したり、メタデータを与えることが出来たりと手軽な割に便利なツールなのですが、Alfrescoを利用されていても意外と知らない方が多いように感じていましたので、今回紹介させていただきました。

Alfrescoを使いはじめたり利用をしていく上で、これまで別の場所に蓄積されたコンテンツをAlfrescoへインポートする機会は多いのではないかと思います。その際に利用可能なインポートツールの1つとして参考にしていただけると幸いです。




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

第33回Alfresco勉強会

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

Alfresco勉強会#32 Alfresco Community 5.1.eの機能紹介

こんにちは。てらしたです。ご無沙汰しております。しばらく書いていなかった上に今回は他のメンバーがAlfresco勉強会で発表した内容の紹介という手抜きっぷりですがご容赦ください・・・。

先日3月23日(水)に第32回のAlfresco勉強会が開催されました。発表は2つあり、1つは「AlfrescoのBulk Import toolのご紹介」(詳細はこちら)、もう1つはここでご紹介する「Alfresco Community 5.1.eの機能紹介」でした。

5.1.eで新たに追加された機能としてShare UIからのモデル定義とスマートフォルダの機能を紹介してもらったんですが、個人的にはスマートフォルダで助かる場面は色々あるんじゃないかと思いました。Alfrescoにすでに入っているコンテンツを何らかの属性をキーに引っ張ってきて横断的に見たいってケースはそれなりにあるんじゃないかと思うんですよね。もともとWorkdeskというAlfrescoとは独立した別のアプリケーションを使えば実現できた機能ではあるんですが、Alfrescoの標準機能として使えるようになったのは大きいと思います(Workdeskは開発終了したみたいですし)。

Share UIからのモデル定義も欲しかった人にはうれしい機能だと思うので、スマートフォルダも含めて詳細については以下の発表資料をご覧いただければと思います。


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

第33回Alfresco勉強会

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

Thursday, January 28, 2016

Alfresco勉強会#31でAlfrescoにウイルススキャンを実装する話をしました

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

先日、第31回Alfresco勉強会が開催されました。今回はいつもより参加者が少なかったこともあり、具体的なAlfrescoの利用方法や便利機能、設定項目など、様々な内容についてディスカッションが行われました。

さて、今回の発表ですが、私が、「Alfresco 5.0にウイルススキャン機能を実装してみる」というタイトルでAlfrescoにアップロードされたコンテンツをウイルススキャンするようなカスタマイズについて発表しました。



Alfresco自体はウイルススキャンのエンジンを持っていないため、ファイルアップロードのタイミングで外部のウイルススキャンを利用する必要があるのですが、 それらを実現するために必要な仕組みの説明と実際のデモをご覧いただきました。当日のスライドを見ると分かるのですが、ウイルススキャンを実装するために以下の仕組みを利用しました。
  • Policy(とBehaviour)
  • Transaction Listener
  • Action
  • RuntimeExec

サンプルコードはBitbucketで公開しておりますので、是非お試しください。



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のフィードに投稿してください。ご参加お待ちしております。