PowerPoint Presentation - Kvasir/Sora

Download Report

Transcript PowerPoint Presentation - Kvasir/Sora

Kvasir/Sora勉強会
The Seasar Project
(株)アークシステム
横田 健彦
今日の勉強会の目的
• Kvasir/Soraとはなんぞや、を知ってもらう
• Kvasir/Soraを使ってWebサイトを構築するた
めの手順を知ってもらう
– プラグイン開発のやり方については今日は説明
しません
勉強会の流れ
• Kvasir/Soraとは
– Kvasir/Soraの特徴を説明します
• Kvasir/Soraを使ってみる
– 簡単にKvasir/Soraを使ってみます
• Kvasir/Soraの仕組み
– Kvasir/Soraの仕組みや機能を説明します
• Kvasir/Soraを使いこなす
– 実際にKvasir/Soraを使ってWebサイトを構築し
てみます
Kvasir/Soraとは
Kvasir/Soraとは
• Javaで書かれたコンテンツ管理システム
– J2SE5.0(Tiger)で書かれている
• Webアプリケーションとして動作
– ServletAPI2.4に準拠したコンテナ(Tomcat5.5、Jetty6.0.2)上で動作
• ライセンスはThe Apache Software License 2.0
• 最新バージョンは3.0.0-RC1
– 4月中には3.0.0をリリース予定
• 名前について
– 「クヴァシル・そら」と発音
– Kvasirは北欧神話の神様の名前
– Soraは横田の息子の名前
特徴
• Eclipseライクなプラグイン機構を持つ
– ベース部分はランチャとプラグイン管理機構だけ
– CMS機能はプラグインとして実現されている
• 様々なコンテンツ記述形式のサポート
– plain text、HTML、Wiki、reST、…
•
•
•
•
•
•
画面テンプレート言語はZPT(Zope Page Template)
ユーザ/グループ/ロールベースのアクセス制御
コンテンツの公開期間を設定可能
1コンテンツに複数言語の本文を持たせることが可能
WYSIWYGなサイトレイアウト編集機能
全文検索機能、WebDAVサーバ機能、複数ドメイン管理機
能、…
開発体制
• 横田が2001年から開発を開始
– バージョン1系は非公開
– バージョン2系はGPL(コミッタ2名)
• 現在(バージョン3系)はThe Seasar Project傘下で開発
– http://kvasir.sandbox.seasar.org/
– コミッタ6名
• 2006年6月~2007年2月までIPAの未踏ソフトウェア創造事
業の支援を受けて開発
• 協力者を募集中
– ドキュメントを書いてくれる方
– 宣伝してくれる方
– HTML+CSS+JavaScript系に詳しい方
Kvasir/Soraを使ってみる
導入
• ダウンロード
– 公式サイトからアーカイブをダウンロード
– kvasir-cms-3.0.0-RC1.zip
• War版
• 既にサーブレットコンテナを導入済みの場合はこちら
をダウンロード
– kvasir-cms-3.0.0-RC1-jetty.zip
• Jetty同梱版
• Kvasir/SoraをJettyで動作させたい場合やとりあえず
使ってみたい場合はこちらをダウンロード
•
インストール(War版)
1. アーカイブを展開
2. kvasir.warをサーブレットコンテナにデプロイ
–
ファイルとして展開しておくこと(Warのままでは動作しません)
3. http://localhost:8080/kvasir/ にアクセス
•
インストール(Jetty同梱版)
1. アーカイブを展開
2. bin\start.batを実行
–
UNIX系の場合はbin/start.sh
3. http://localhost:9846/ にアクセス
•
初期設定
–
•
管理者ユーザのパスワードを設定
パスワードの設定手順
1. サイトトップにアクセス
2. ログインフォームから管理者ユーザでログイン
–
ユーザ名「administrator」、パスワードは任意
3. 「管理ツール」メニューから「管理ツール」リンクをクリッ
ク
4. 「サイト管理者のパスワード」にパスワード文字列を入
力して「設定」ボタンをクリック
基本操作
•
ページ(コンテンツ)の追加
1. 「Webサイト編集を開始する」リンクをクリック
2. 赤いスパナのアイコンをクリック
•
オプショナルコンソールが開く
3. 追加したいページの名前(パス)とラベル(表示
名)を入力
4. 「子ページを追加する」ボタンをクリック
– 空のページが追加される
•
ページの本文の追加
1. 空のページをダブルクリック
– 編集フォームが表示される
2. 「本文」にページの本文を入力
3. 「OK」ボタンをクリック
Kvasir/Soraの仕組み
• コンテンツ管理方式
• レイアウト管理方式
• サイト管理機能
コンテンツ管理方式
• Pageオブジェクトツリーモデル
– Webページツリーに対応するPageオブジェクトツ
リーを持っている
– リクエストパスに対応するPageオブジェクトの内
容からレスポンスを構築
/
id=2, type=directory,
name=””, pathname=””
doc
id=101, type=directory,
name=”doc”, pathname=”/doc”
2006
id=103, type=directory,
name=”2006", pathname=”/doc/2006"
01.html
id=107, type=page,
name=”01.html”, pathname=”/doc/2006/01.html”
02.html
id=108, type=page,
name=”02.html”, pathname=”/doc/2006/02.html”
2007
id=104, type=directory,
name=”2007", pathname=”/doc/2007"
01.html
id=109, type=page,
name=”01.html”, pathname=”/doc/2007/01.html”
02.html
id=110, type=page,
name=”02.html”, pathname=”/doc/2007/02.html”
img
id=102, type=directory,
name=”img”, pathname=”/img”
logo.jpg
id=105, type=page,
name=”logo.jpg”, pathname=”/img/logo.jpg”
image.jpg
id=106, type=page,
name=”image.jpg”, pathname=”/img/image.jpg”
lordとgard
• lord
– サブPageツリーのルート
– 英語で「領主」を表す語
– gardを定義するための概念
• gard
– Pageツリー内にインストールされたサブPageツリーイン
スタンス/アプリケーションインスタンス
– 北欧神話で「国」「領域」を表す語
– gardのルートPage(gard root)はlord(逆は真ではない)
– gardは入れ子になることがある
gard
日記アプリ(ユーザA用)
200612
lordかつgard root
01.html
02.html
200701
01.html
02.html
gard
日記アプリ(ユーザB用)
200612
lordかつgard root
01.html
02.html
200701
01.html
02.html
variant
• 国際化対応のための概念
• 属性値を複数言語分保持するタイプの属性におい
て、言語を表す文字列
• 例:
– 属性名:pageTitle
– variant:ja、属性値:「こんにちはKvasirさん」
– variant:en、属性値:「Hello, Kvasir!」
• Javaのロケールに対応
– 現在のロケールに応じて属性値を検索する手順は
ResourceBundleと同様
• デフォルトvariantは空文字列
マルチツリー
• Kvasirは複数のPageオブジェクトツリーを持
つことができる
• heim(ヘイム)
– 1つのPageオブジェクトツリーを表す
– 北欧神話で「国」を表す語
– heimとURLを対応付けることで複数ドメインを1
つのKvasirで管理可能にしている
– 初期状態ではデフォルトのheimとシステムオブ
ジェクトを保持するheimの2つ
Pageの種類
• 通常のページだけでなくディレクトリ、ユーザ、
グループ、ロールもPageオブジェクト
page
通常のページ
directory
ディレクトリ
user
ユーザ
group
グループ(ユーザの集合)
role
ロール(ユーザやグループの役割)
特別なPageオブジェクト
パス名
説明
/
ルートディレクトリ
/users/administrator
管理ユーザ
/users/anonymous
匿名ユーザ。ログインしていない状態でのユーザ
/groups/administrator
管理ユーザのグループ。このグループに属しているユー
ザには管理者ユーザと同等の権限が付与される
/groups/all
全員を表す仮想的なグループ
/roles/administrator
管理者ロール。管理者グループと管理ユーザに付与され
ている
/roles/anonymous
匿名ユーザロール。匿名ユーザに付与されている
/roles/all
全員に付与される仮想的なロール
/roles/owner
Pageオブジェクトの所有者に権限を付与するための仮想
的なロール
Pageの属性
• 識別子
– id
• 識別番号
• Kvasirの世界で一意
– name
• 名前
• 同一の親Pageの下で一意
– pathname
• パス名
• 同一のheimの下で一意
基本属性
id
識別番号(Kvasirの世界で一意)
heimId
Pageが属するheimのID
type
種別(page, directory, user, group, role)
name
名前(同一の親の下で一意)
pathname
パス名(同一のheimの下で一意)
ownerUser
所有者
createDate / modifyDate
作成日時 / 更新日時
revealDate / concealDate 公開日時 / 公開停止日時
node
ノード(後述)かどうか
asFile
生ファイルとして扱うかどうか
listing
一覧表示に含めるかどうか
orderNumber
同一の親の下での表示順序を表す数
lord
lord(後述)かどうか
node
• リクエストされた際にディレクトリリソースへのアクセ
スとして扱うかどうか
– 例:http://localhost:9846/path/to/directoryにアクセスす
るとhttp://localhost:9846/path/to/directory/にリダイレク
トされる
– Webページ内での相対パスの解釈を通常のWebページ
と合わせるために導入した概念
• typeがdirectoryであるPageはnode=true
• nodeであることと子Pageを持てるかどうかは別
– Kvasirの世界では、どのtypeのPageも子を持てる
asFile
• Pageの中身を生ファイルとみなすかどうか
• asFile=falseである場合、Pageを表示するた
めにテンプレート(後述)を利用する
– Webサイトの統一的な枠にPageの内容が埋め
込まれて表示される
• asFile=trueである場合、Pageの内容がその
ままレスポンスとして返される
– 画像、スタイルシート、JavaScript、バイナリデー
タ等についてはasFile=trueとする
ability
• Pageオブジェクトが持つ拡張属性
• プラグインで追加可能
property
• key=valueのセット
• variant毎に値を持つ
content
• ページの内容
• variant毎に値を持つ
• 変更履歴を持つ
template
• ページの表示テンプレート
• variant毎に値を持つ(が、localeとは対応しない)
permission
• ページへのアクセス権限情報
content
• ページの内容
• 内容の書式を表す「メディアタイプ」を指定可
– メディアタイプ…ContentTypeからcharset指定をなくした
もの
• asFile=falseでかつメディアタイプに対応する
handlerが登録されている場合、handlerを使って内
容がHTMLに変換されて表示される
• handlerが登録されている書式:
– プレーンテキスト、HTML、Wiki形式、reST、ZPT
• handlerはプラグインで追加可能
template
• ページの表示テンプレート
• テンプレートの書式を表す「タイプ」を指定可
• 「ページの内容を表示する」とは実際はテンプ
レートの評価結果を表示するということ
– 通常はテンプレートの中に「このページの内容を
出力する」という指示が書かれている
• テンプレートの書式はZPT(Zope Page
Template)
• テンプレートの書式はプラグインで追加可能
アクセス制御
• (ロール、ページ、権限レベル)の組で表現
– どのロールがどのページに対してどの権限を持つか
• 権限レベル
–
–
–
–
–
–
NEVER…決して権限なし(後述)
NONE…権限なし
PEEK…基本属性とプロパティのみ参照可
VIEW…PEEK+本文を参照可
COMMENT…VIEW+コメント投稿可
ACCESS…全ての操作可
アクセス制御に関する注意点
• アクセス権限は親を継承しない
– 親Pageへの参照権限がなくとも子Pageへの参照権限が
あれば参照可能(UNIXと違う)
– ただしPage作成直後のアクセス権限情報は親の権限情
報のコピーとなる
• アクセス権限はリクエスト対象のPageについてしか
チェックされない
– /path/to/pageにアクセスされた場合は/path/to/pageの権
限だけがチェックされる
– レスポンス生成のために他のPageオブジェクトを操作す
る場合でもそのPageの権限はチェックされない
NEVERとNONEの違い
• NONEは権限を持たないことを表す仮想的な権限レ
ベル
• 権限レベルがNEVERであるロールを持つユーザは
権限チェックに必ず失敗する
• 例(ロールAがユーザAに付与されているとして)
– Pageに(全員、VIEW)という権限が付与されている場合
…ユーザAは参照可能
– Pageに(全員、VIEW)と(ロールA、NEVER)という権限
が付与されている場合…ユーザAは参照不可能
リクエストの処理手順
•
例:http://localhost:9846/path/to/page
1. ドメイン部(http://localhost:9846)から対応する
heimを決定。対応するheimがなければデフォ
ルトのheimが使われる
2. パス部(/path/to/page)をパス名として持つ
Pageオブジェクトを検索
3. リクエストユーザがそのPageに対して参照権限
を持つかチェック
4. Pageオブジェクトに対応するテンプレートの評
価結果をレスポンスとして返す
テンプレートの探索
1. Pageオブジェクトがテンプレートを持ってい
ればそれを用いる
2. 持っていなければPageのタイプ毎のデフォ
ルトテンプレートを用いる
•
/templates/(タイプ名)
3. タイプ毎のデフォルトテンプレートがなけれ
ばデフォルトテンプレートを用いる
1. /templates/page
テンプレートの探索例
•
/path/to/directory
1. /path/to/directoryが持つテンプレート
2. /templates/directoryが持つテンプレート
3. /templates/pageが持つテンプレート
•
/path/to/page
1. /path/to/pageが持つテンプレート
2. /templates/pageが持つテンプレート
レイアウト管理方式
• POP
– Webページに埋め込んで使用する部品
– 「Part, Or Piece」の略
• Pane
– POPを配置するためにWebページ上に定義され
た領域
– 1Paneに複数POPを配置可能
pane
POP
POP
• 識別子
– popId…種類を表す
– instanceId…同一種類中でのインスタンスID
– id…popId + ”-” + instanceId
• プロパティ
– POPの外観を決定する
– key=valueのセット(valueはvariant毎)
• Paneへの配置
– 管理ツールのWebサイト編集機能で行なう
POPの種類
•
Powered By
•
– Powered Byメッセージを表示
•
紹介文
– Webサイトの紹介文を表示
•
•
– Webサイトの表示言語を切り替える
ためのドロップダウンリストを表示
•
ページコンテント
•
ログインユーザ
– 現在ログインしているユーザの名前
を表示
•
管理ツールリンク
– 管理ツール関連のリンク集を表示
•
メニュー
– あるディレクトリ以下のサブディレクト
リやページの一覧を表示
一覧表示
– あるディレクトリ以下のページの一覧
を表示
– ページのタイトルや本文を表示
•
パンくずリスト
– 現在表示しているページのトップ
ページからの階層を表示
サイトタイトル
– Webサイトのタイトルを表示
言語切り替えドロップダウンリスト
•
•
•
ログインフォーム
検索フォーム
画像
– 任意の画像を埋め込み表示
•
カスタム
– 任意のHTMLブロックを表示
Pane
• 識別子
– id…識別文字列。Webサイト内で一意
• 定義
– テンプレートに直接埋め込む
<div id="pane.left-sidebar" class="pane">
<div tal:repeat='pop java:org.seasar.kvasir.cms.pop.util.PopUtils.renderPane(
request, response, pageRequest, "left-sidebar")‘
tal:attributes="id pop/id; class string:pop ${pop/popId}">
<h2 class="title" tal:condition="pop/title" tal:content="structure pop/title">
POP TITLE</h2>
<div class="body" tal:content="structure pop/body">POP BODY</div>
</div>
</div>
サイト管理ツール
• Pageコンテンツツリー内にインストールされている
サイト管理アプリケーション
• できること
–
–
–
–
コンテンツの操作
ユーザ、グループ、ロールの操作
プラグインの管理
WebサイトのWYSIWYG編集
• 利用するには
– 管理ツールへのリンクをクリック
– http://localhost:9846/manageにアクセス
WebDAV連携機能
• WebDAVサーバ機能を持つ
– http://localhost:9846/DAV
• OS上でのファイル操作と同様の操作でKvasirコン
テンツを登録・変更・削除できる
• 若干機能に制限あり
– property、content、template以外の拡張属性を扱えない
• 少なくとも現段階ではコンテンツのコピーや移動はサイト管理ツー
ルで行なったほうが無難
– サイト管理者しか利用できない
Kvasir/Soraを使いこなす
•
コンテンツに関する操作(サイト管理
ツール)
–
–
–
–
–
•
追加
変更
コピー
移動
削除
コンテンツに関する操作(Webサイト
編集機能)
– 追加
– 変更
– 削除
•
コンテンツに関する操作(WebDAV
連携機能)
– 追加
– 変更
– 削除
•
外観・レイアウトに関する操作
–
–
–
–
–
•
アクセス制御に関する操作
–
–
–
–
•
スタイルシートの変更
POPの配置変更
POPのプロパティ変更
テンプレートの変更
Paneの追加
Pageのアクセス権限の設定
ユーザの管理
グループの管理
ロールの管理
プラグインの管理
– プラグインのプロパティ変更
– プラグインの追加
– プラグインの更新
おわりに
• ドキュメントが全然足りていません m( )m
• 「Kvasirでこういうことをやりたいんだけど」等の質問
があれば気軽にMLで聞いて下さい
– kvasir-user ML
• https://ml.seasar.org/mailman/listinfo/kvasir-user
– MLでのQ&A結果はWebサイトにドキュメントとして公開し
ていきます
• 要望もどんどんMLで言っていただけるとうれしいで
す
• というわけでまずはMLに入って下さい
ご清聴ありがとうございました