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に入って下さい ご清聴ありがとうございました
© Copyright 2025 ExpyDoc