25
第 30 第 Alfresco 第第第 Alfresco 第 Share 第 JavaScript 第第第第第第第第 2015/10/28 Tomomi Kawabe

Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Embed Size (px)

Citation preview

Page 1: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

第 30回Alfresco勉強会Alfrescoと ShareのJavaScriptをデバッグしよう

2015/10/28 Tomomi Kawabe

Page 2: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

はじめに

自己紹介 川部知美です aegifで働いています Alfrescoは 4.2.dからぼちぼち触っています

今日の環境 Alfresco 5.0.dをMac OS X 10.10にインストーラの設定を特に変更せずにインストールしたもの

Page 3: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

内容

Alfrescoで利用されている JavaScriptについて

Alfrescoのサーバサイド JavaScript Shareのサーバサイド JavaScript Shareのクライアントサイド JavaScript

Debug Menu

Page 4: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Alfrescoで利用されている JavaScriptについて

Alfrescoは 2つのアプリケーションで構成されている Alfresco - リポジトリのコア機能を提供 Share - UI機能を提供

JavaScriptの利用には 3パターン Alfrescoのサーバサイド Shareのサーバサイド Shareのクライアントサイド

それぞれについて、デバッグとログ出力の機能を見ていきましょう

Page 5: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Alfrescoのサーバサイド JavaScript

主に REST APIを提供するためのWeb Scriptsで利用されている

Rhino( Javaによる JavaScriptの実装)で実行される 以前は

webapps/alfresco/WEB-INF/classes/alfresco配下にあったが、 5.0.dではwebapps/alfresco/WEB-INF/lib/alfresco-remote-api-5.0.d.jarあたりに固められている

Page 6: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Alfrescoのサーバサイド JavaScript

デバッグ ツールが用意されており、起動方法が 2通りある

1. tomcat/webapps/alfresco/WEB-INF/classes/log4j.propertiesに以下を追記

2. ブラウザでhttp://localhost:8080/alfresco/service/api/javascript/debuggerにアクセスし、管理者情報を入力して認証後” Enabled”をクリック

※1 custom-log4j.propertiesなどの名称のファイルに追記し tomcat/shared/classes/alfresco/extensionに配置しても OK※2 Macや Linuxでは、 setenv.shで JAVA_OPTS= -Djava.awt.headless=falseに設定しないと起動しない (Windowsでは未確認)

log4j.logger.org.springframework.extensions.webscripts.ScriptDebugger=on

Page 7: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Alfrescoのサーバサイド JavaScript

このようなデバッグツールが起動する

Page 8: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Alfrescoのサーバサイド JavaScript

ログ出力 log4j.propertiesに以下を追記(ログレベルの変更)する

org.alfresco.repo.jscript.ScriptLoggerはサーバサイド JavaScript内で loggerオブジェクトとしてアクセスできる

以下のコードで、 catalina.outや alfresco.logにログが出力される(詳細は org.alfresco.repo.jscript.ScriptLoggerを参照)

if (logger.isLoggingEnabled())logger.log("something to log");

log4j.logger.org.alfresco.repo.jscript.ScriptLogger=debug

Page 9: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのサーバサイド JavaScript

主に REST APIを提供するためのWeb Scriptsで利用されている

Rhino( Javaによる JavaScriptの実装)で実行される webapps/share/WEB-INF/classes/alfrescoあたりに置いてある

Page 10: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのサーバサイド JavaScript

デバッグ (Alfrescoのサーバサイドとほぼ同様) ツールが用意されており、起動方法が 2通りある

1.tomcat/webapps/share/WEB-INF/classes/log4j.propertiesに以下を追記する

2. ブラウザで http://localhost:8080/share/service/api/javascript/debuggerにアクセスし、管理者情報を入力して認証後” Enabled”をクリック

※1 Shareの場合は tomcat/webapps/share/WEB-INF/classes配下の log4j設定ファイルでないと反映されない※2 Macや Linuxでは、 setenv.shで JAVA_OPTS= -Djava.awt.headless=falseに設定しないと起動しない (Windowsでは未確認)

log4j.logger.org.springframework.extensions.webscripts.ScriptDebugger=on

Page 11: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのサーバサイド JavaScript

ここは Alfrescoと同様。起動されるツールでデバッグ

Page 12: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのサーバサイド JavaScript

ログ出力 log4j.propertiesに以下を追記する

org.alfresco.repo.jscript.ScriptLoggerはサーバサイド JavaScript内で loggerオブジェクトとしてアクセスできる

以下のコードで、 catalina.outや share.logにログが出力される(詳細は org.alfresco.repo.jscript.ScriptLoggerを参照)

if (logger.isLoggingEnabled())logger.log("something to log");

log4j.logger.org.alfresco.repo.jscript.ScriptLogger=debug

Page 13: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのクライアントサイド JavaScript

Shareで UI画面作成や操作のため、アクセスするそれぞれのブラウザで実行される JavaScript

tomcat/webapps/share/componentsあたりに置いてある

Page 14: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのクライアントサイド JavaScript

準備 デフォルトではminifyされた JavaScriptとなっているため、以下の設定を変更してクライアントデバッグを有効にする tomcat/shared/classes/alfresco/web-extension/share-config-

custom.xml

4 <config replace="true"> 5 <flags> 6 <!-- 7 Developer debugging setting to turn on DEBUG mode for client scripts in the browser 8 --> 9 <client-debug>true</client-debug> 10 11 <!-- 12 LOGGING can always be toggled at runtime when in DEBUG mode (Ctrl, Ctrl, Shift, Shift). 13 This flag automatically activates logging on page load. 14 --> 15 <client-debug-autologging>false</client-debug-autologging> 16 </flags> 17 </config>

Page 15: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのクライアントサイド JavaScript

デバッグ ブラウザのデバッグツールを利用

開発者ツール、 Firebugなど…

Page 16: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのクライアントサイド JavaScript

ログ出力 share-config-custom.xmlに記述あり

client-debug-autologgingを trueにするか、 Ctrl, Ctrl, Shift, Shiftで log4javascriptのログ出力画面を起動

4 <config replace="true"> 5 <flags> 6 <!-- 7 Developer debugging setting to turn on DEBUG mode for client scripts in the browser 8 --> 9 <client-debug>true</client-debug> 10 11 <!-- 12 LOGGING can always be toggled at runtime when in DEBUG mode (Ctrl, Ctrl, Shift, Shift). 13 This flag automatically activates logging on page load. 14 --> 15 <client-debug-autologging>false</client-debug-autologging> 16 </flags> 17 </config>

Page 17: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのクライアントサイド JavaScript

ログ出力画面

Page 18: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Shareのクライアントサイド JavaScript

ログ出力 log4javascriptを利用している 以下のコードで出力(詳細は log4javascriptの loggerを見てください)

if (Alfresco.logger.isDebugEnabled())Alfresco.logger.debug("something to log");

Page 19: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Debug Menu Shareのクライアントサイド JavaScriptをminifyしないように share-config-custom.xmlの設定を変更したが、この設定によって有効になるものが他にもある

それが Debug Menu

Page 20: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Debug Menu Debug Menu

4.2の途中で追加された、新しい headerを作成するウィジェット群をデバッグする機能 alfresco/core/Coreモジュールをmixinしたウィジェットが対象 (4.2) Aikau Frameworkを利用しているウィジェットが対象で、 YUIなどを利用している昔からのウィジェットは対象外 (5.0.d)

5.0.dで Aikau Frameworkを利用している箇所 Header Live Search Filtered Search Page Search Management Page Site Management Page Analytics and Reporting Widgets Page Creator Document List prototype

Page 21: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Debug Menu Debug Logging

“Debug Logging”と” Show All Logs”にチェックを入れてクライアントデバッグツールを開くと、ログが出力される

ログの例:

出力コード( alfresco/menus/AlfMenuBar.jsから抜粋):

this.alfLogが LoggingServiceにログを出力する際、 functionの命名規則を読み取ってログに反映させる

LoggingServiceをカスタマイズすることで出力先を変更することも可能

alfresco/menus/AlfMenuBar/CustomMenuBar/[closeChild] >> Custom MenuBar _closeChild

var CustomMenuBar = declare([MenuBar, AlfCore], {_closeChild: function alfresco_menus_AlfMenuBar_CustomMenuBar___closeChild(){ this.alfLog("log", "Custom MenuBar _closeChild");} });

Page 22: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Debug Menu Toggle Developer View

Surfbugのように、 Aikau Framework部分のウィジェットを確認できる

Page 23: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

Debug Menu Toggle Developer View

拡張に必要なファイルを JARとしてダウンロードできる

Page 24: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

まとめ

Alfrescoのサーバサイド JavaScript Shareのサーバサイド JavaScript

デバッグツールの起動 log4j.propertiesでデバッグレベルの変更 loggerオブジェクトによるサーバログへのログ出力

Shareのクライアントサイド JavaScript ブラウザのデバッグツール利用 ログ出力ツールの起動 log4javascriptのツールによるログ出力

Debug Menu Aikau Frameworkのウィジェット用

開発中にデバッグしたいときにも参考にしてください

Page 25: Alfresco勉強会#30 alfrescoとshareのJavaScriptをデバッグしよう

参考にしたサイト・記事

http://docs.alfresco.com/community/tasks/dev-extensions-share-tutorials-debugging.html

http://docs.alfresco.com/5.0/concepts/aikau-intro.html http://aegif-labo.blogspot.jp/2013/02/alfrescojavascript.html http://blogs.alfresco.com/wp/developer/2013/11/07/debugging-in-alfresco-share-4-2/ http://blogs.alfresco.com/wp/kevinr/2010/04/07/developer-tips-for-alfresco-share-33/ http://blogs.alfresco.com/wp/developer/2015/04/01/adding-views-to-filtered-search/