Non-code extensions ja
OOo Extensions project
Please view the wiki usage guidelines
|
---|
Categories: Pages: |
Extensions on the main site |
Extensions in other languages: |
OOo 拡張機能の基本概念
OpenOffice.org は始めから拡張可能なように設計されました。最初のすべての拡張はなんらかのコードを含んでいました (たとえば、Java または OOo Basic で書かれたコードなどです)。その拡張機能は UNO と呼ばれる私たちのコンポーネントテクノロジにより OOo に統合されていました。そのような拡張機能を含んでいるファイルは "UNO パッケージ" と呼ばれていました。そうしている間に、OOo 拡張機能はエンドユーザーの世界に広がりました。そのため、私たちは用語を少し変更することを考えました。次の文章はそのことを考慮にいれます。この文章の目的は概要と基本的な概念の説明を提供することなので、可能な限り "UNO パッケージ" という技術用語の使用を避けることにします。あなたが UNO に関してより詳しく学びたいのであれば UNO wiki または UDK プロジェクト のウェブページを参照できます。
OpenOffice.org 拡張機能の概念はコードに制限されず、コード以外のテンプレート、オートテキストなども手軽なひとつのファイルでインストールを可能にします。ここで拡張機能の基本的な動作を簡単に説明します。ターゲットとなるのは上級エンドユーザー、管理者、新人開発者です。ここで提供されているすべての情報は OpenOffice.org 2.0.4 にもとづくものです。旧バージョンとの違いは説明していませんが、最初に 2.0.4 で追加されている機能を明確にします。
あなたが開発にまったく興味がないのであればコード拡張機能についてのセクションは読み飛ばしたくなるでしょう。
設定マネージャについてのセクションはカスタマイズ目的のための OOo 拡張機能を使用方法に関する多くのアイデアを与えてくれます。
あなたが拡張機能がどのような仕組みになっているかといった完全な知識なしでコード以外の拡張機能の作成方法だけ知りたいのであれば "パス設定" について説明したセクションまで飛ばすことができます。とはいえ、すくなくともこの導入セクションは読むことをお勧めします。
Please send feedback to . あなたがこの wiki のアカウントを持っている場合は、このページの "ノート" タブももちろん使用できます。
OOo 拡張機能は事実上、いくつかの追加データとデータの内容を記述したメタデータを含む zip コンテナです。組み込みの拡張機能マネージャ GUI によりパッケージを配置できます ("ツール - パッケージマネージャ" 2.0.5 では "ツール - 拡張機能マネージャ" に名称変更されます)。OpenOffice.org を使用している現在のユーザーに拡張機能がインストールされます。同じことが OOo プログラムフォルダにある "unopkg" コマンドラインツールで行えます。このツールは "--shared" パラメータを使用して一人のユーザーだけでなくすべてのユーザーに拡張機能を配置できます。
拡張機能がインストールされると、拡張機能のインストール範囲により決められた場所とはいえ非公開の "share/uno_packages" または "user/uno_packages" 以下に内容がコピーされます (すべてのユーザーまたは一人のユーザー)。非公開とはパッケージ化されていない拡張機能の特定の構造に依存したコードを書かず、展開されたパッケージのファイルへのアクセスは呼び出し元の詳細を扱う API を使用する必要があることを指します。"uno_package" フォルダーの外のファイルはまったく手が加えられていません。 バグとしてみなされるひとつの例外では、OOo 拡張機能に含まれる Basic マクロはいまだに "Basic" ディレクトリの ひとつの xlc ファイルに登録される必要があります。
OOo 拡張機能は "実行時における配置" もサポートします。これは、たとえば拡張機能を使用可能にするためにアプリケーションをいつも再起動する必要のある Firefox とは違います。OpenOffice.org では基本的に拡張機能をインストールした直後から使用できます。これには制限があります。OpenOffice.org コードが使用する拡張機能によってインストールされたものはなんでも最初に実行されるときに見つかるとキャッシュされ、そのキャッシュは外部の影響により無効化される可能性があります。そのため、すくなくとも新しいウィンドウまたはドキュメントを開く、アプリケーションの再始動のどちらかが必要です。ほとんどの場合この現象はバグのように見えます。一例として、OpenOffice.org 2.0.4 テンプレート拡張機能は好きなときにインストールできますが、ギャラリー拡張機能はギャラリーを一度でも利用した後でインストールすべきです。
UNO サービスを含む拡張機能 (コード)
OOo 拡張機能が Java、C++ または Python で書かれた UNO コンポーネントを含む場合、このコンポーネントは OpenOffice.org が使用可能になるように機能を公開する必要があります。UNO にもとづいた開発では、定義されたひとまとめの機能性は "サービス" と呼ばれます。サービスはそのサービス名により識別、アクセスされます。そのため、そのようなサービスを実装したコンポーネントはサービス名を公言する必要があります。現在、すべてのコンポーネントは unopkg がコンポーネントに対してサービスレジストリファイルに必要な、 uno_packages フォルダ内に作成、保守される情報を書き込ませるためにコンポーネントを呼び出すことができる機能をエクスポートしています。OpenOffice.org が利用可能な UNO サービスを探すためにサービスマネージャを利用するとき、プログラムディレクトリにあるサービスレジストリ (services.rdb) (すべての"内部"サービスに関する情報を含む) だけでなく "uno_packages" フォルダにあるすべてのレジストリファイルもスキャンします。
もちろん OOo は UNO サービスの名前が分かるのときにのみその名前を利用して UNO サービスをインスタンス化できます。このことは OOo が確かに識別し、利用していて既存の"内部"サービスを容易に置き換えます。しかし、新しいサービスを提供するほとんどのコンポーネントに従うと、コンパイル時に識別されていないにもかかわらず OOo が使用できるようにする何かが必要です。つまり、これらの場合 UNO コンポーネントはそのコンポーネントが実装する特定のサービスがいつ読み込まれるべきかに関する追加のデータを提供しなければいけません。"コンポーネントの追加のデータ"は OOo 構成ファイル内で提供されます。
この例としてフィルターが読み込まれるように (他のものと混じって) ファイル形式が提供されるドキュメントフィルターコンポーネントの追加データがあります。特定のフィルターコンポーネントがWord Perfect のフィルタを読み込めるようにフィルタ自身を登録するかもしれません。ユーザーがファイルを読み込むためにこのフィルターを選択すると OOo は要求されたファイル形式 (wps) を含むすべてのデータを探すことで登録されたデータを見つけます。そしてデータから見つかったサービス名によりフィルターコンポーネントをインスタンス化してファイルの読み込みに使用します。拡張機能では組み込みのフィルタごとに構成データとドキュメントフィルタを持ち、組み込みデータを拡張するフィルタコンポーネント自身の構成を提供します。つまり、構成マネージャはそれに応じた方法でコンポーネントの構成データを配置、統合できなければいけません。
構成マネージャにおける拡張機能サポート
構成マネージャ UNO サービスマネージャと同じ機能を持っており、データを保存した一連のフォルダをスキャンしそれらをひとまとめにできます。構成を含むフォルダのリストは構成マネージャが追加の"レイヤー"を取得できるように (configmanager.ini ファイルを通して) 拡張可能です。追加のレイヤーとしてファイルシステム以外の他のバックエンドの利用の可能性も持ちますがここでは触れないことにします。
構成データはツリー状構造に配置されており、データはレイヤーごとのツリー状構造に記入できます。構成マネージャはより優先度の"低い"レイヤーのデータをより優先度の"高い"レイヤーのデータが置換または拡張するようにレイヤー (フォルダ) をスキャンします。Windows のレジストリによく似ています。置換または拡張されて刈り取られるデータはデータの型に依存します。これに関してはパス設定のための構成スキーマで説明されています。
デフォルトでは OpenOffice.org は既知の "share" および "user" の二つのレイヤーを持っています。最初のものはあらかじめ組み込まれたデータを持ち、後のものは特定のユーザーによって作成されたそのユーザーのすべての設定データを持っています。OOo 拡張機能の構成ファイルは "share/uno_packages" および "user/uno_packages" の二つの新規レイヤーを作成します。それらはデフォルトのレイヤーの間に位置します。明確な優先順位は次のとおりです。"share" - "share/uno_packages" - "user/uno_packages" - "user"。
つまり、OpenOffice.org の構成設定を上書きまたは拡張 (マージ) する xcu ファイルを提供することで拡張機能は OpenOffice.org の構成を拡張または変更できます。拡張機能は構成ファイルのためのスキーマファイル (.xcs) を提供しているなら自身の構成設定を持つこともできます。
(見え透いたことですが) 構成マネージャのレイヤーコンセプトを使用するもう一つの例は、"すべてのユーザー"水準であらかじめ組み込まれた OpenOffice.org 構成を上書きすることです。管理者は自分のアカウントで OpenOffice.org のインストールをカスタマイズし、作成された構成を含む xcu ファイルを取り出して拡張機能にバンドルできます。その拡張機能は OpenOffice.org をインストール、再インストールまたはアップデートする度に管理者が "unopkg add --shared" としてインストールします。"share/registry" にある xcu ファイルを手作業で編集する必要はありません。
サービスレジストリと構成のレイヤーコンセプトは OOo 拡張機能に力を与える基本概念なのです。
パス設定
OpenOffice.org のデータには xcu 設定ファイルに保存されていないものもあり、ファイルシステムのほかの場所に保存されています。たとえば、ドキュメントテンプレート、オートテキスト、ギャラリーなどです。もちろんこのコンテンツも拡張機能として配置できるべきで、これらのファイルへのアクセスは拡張機能がファイルへのアクセスに干渉可能にするレイヤーコンセプトがなければいけません。OpenOffice.org はこれらのファイルへのアクセスを管理するコンポーネントを持っています。これらのコンポーネントを(レイヤーを明確に使用させるようにすることで)構成マネージャまたはサービスマネージャを拡張した同じ方法により拡張できるはずです。しかし、構成マネージャのすでに利用可能な機能を再利用することにしました。
パス設定ではそれら設定ファイルが見られる場所は構成により決められています。2.0.4 より前のすべての OOo の"パス"はフォルダを示す一つの文字列またはフォルダのリストを示す文字列のリスト ("マルチパス") でした。残念なことにそのようなリストは優先順位の高いレイヤーでのみ"上書き"可能で、"拡張"できませんでした。そのため、パスのセットを拡張できるように"文字列のリスト"の代わりに文字列の"セット"を使用するパスのための新しい構成スキーマが必要でした。OpenOffice.org 2.0.4 に始まるパス設定のための新しいスキーマを使用します。旧式のスキーマとデータは互換性と新しいデータへの移行のために残されています。旧式のスキーマは OpenOffice.org 3.0 で取り除かれます。
以前の OOo のバージョンでは OpenOffice.org ツリーの "share" および "user" にたいてい二つの"テンプレート"フォルダが見られます。ユーザーまたは管理者によって追加されておればさらに追加のフォルダも見られます。
OOo 2.0.4 の"オプション"ダイアログの"パス"設定を見ると、マルチパスのすべてのパートが表示されておらず、新しい構成スキーマのうち "UserPaths" および "WritePath" 要素からのフォルダだけが表示されていることに気づくでしょう。デフォルトのインストールでは前者は空で普通はパス設定ごとに一つのフォルダしか表示されません。
ダイアログ ツール - オプション - パス
テンプレートのためのパスを見てください。"WritePath" 要素として "user/template" を、ユーザーまたは管理者により "UserPaths" 要素として追加されたもう一つのフォルダ ("g:\Departement Templates") が見られます。その内容が内部的な "InternalPaths" 要素の一部である "share/templates" フォルダをこのダイアログで目にしないでしょう。この要素はパス設定の拡張可能な一部分で、OOo のインストールまたは拡張機能のインストールにより追加されたすべてのフォルダを含みます。開発によって追加されてユーザーに操作されるべきでないものの場合、それらの削除は追加したものが行うタスクです。
OpenOffice.org のコードと同様にユーザーのための改善はユーザーが自分のデータを保存するフォルダをラジオボタンでマークして明確に選択できることです。旧バージョンでは OpenOffice.org がどのフォルダを選択するか常にとても不明瞭でした。たいてい、その場合はリストの最後のものが利用されていましたが、これからはすべて紛らわしくありません。
ダイアログ ツール - オプション - パス - 編集
テンプレート拡張機能
ドキュメントテンプレートのための拡張機能はとても簡単です。その拡張機能はおもにテンプレートのみを含み、テンプレートはドキュメントテンプレートマネージャによりテンプレートのカテゴリが定義されるディレクトリに整理しておきます。追加として、拡張機能をドキュメントテンプレートフォルダのセットに登録されるように Paths.xcu ファイルを提供しなければいけません。このファイルは拡張機能に含まれるテンプレートが展開される場所のフォルダ URL を含みます。拡張機能の作成時には分からないため、最終的な場所に xcu ファイルがコピーされるときに拡張機能マネージャにより置換される URL に変数を使用します。幸運なことにこの変数はいつもそれぞれのテンプレート拡張機能で同じで、このような拡張機能作成のための作成機能は必要ありません。
Paths.xcu
<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data oor:package="org.openoffice.Office"
oor:name="Paths" xmlns:install="http://openoffice.org/2004/installation"
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<node oor:name="Paths">
<node oor:name="Template" oor:op="fuse">
<node oor:name="InternalPaths">
<node oor:name="%origin%/template" oor:op="fuse"/>
</node>
</node>
</node>
</oor:component-data>
このデータをインストールされたデータと比較するのであれば、この要素を示す名前コンテナに構成をマージする "InternalPaths" でこれらを含む二つのファイルを参照することができます。構成のマージは"構成データ自身をコンテナに追加または要素が存在しなければ新たにコンテナを作成してください"という命令の "fuse" キーワードにより行われます。
例
ここにテンプレートを詰め込む準備のできたドキュメントテンプレートのための"空の拡張機能"があります。
この zip コンテナは"templates"と名前の付いたフォルダを含んでいます。"templates" フォルダ内にあなたが作成したすべてのサブフォルダは OOo テンプレートダイアログにテンプレートカテゴリとして表示されます。テンプレートはそのサブフォルダ内に収納しておくことができます。テンプレートのタイトルはドキュメントのメタデータ (ドキュメントのプロパティ) またはメタデータ内のタイトルが設定されていなければファイル名から取得されます。もしサブフォルダが既存のテンプレートカテゴリと同じ名称であれば OpenOffice.org テンプレートコンポーネントにより拡張機能のテンプレートがこのカテゴリにひとまとめにされます。試してみてください。説明するより試すほうが簡単です。
テンプレートのローカライズとテンプレートカテゴリ
カテゴリのタイトルとテンプレートはフォルダおよびファイル名から取得されます。これらの名称はローカライズすることができ、zip コンテナとターゲットファイルシステムが許容するすべての文字が使用できます。テンプレートをファイルシステムにインストールすることができますが、ローカライズされたカテゴリ (=フォルダ) 名を持つ問題があります。なので、ドキュメントテンプレートコンポーネントはそれらローカライズされたカテゴリ名を別のファイルにおいて提供可能にします。ローカライズされたドキュメントテンプレートの名称はドキュメントメタデータ (ドキュメントプロパティ) に保存できるので問題は起きません。
ローカリゼーションファイルは "groupuinames.xml" ファイルと呼ばれ zip コンテナの "template" サブディレクトリに置かれます。そのファイルの内容は単純なものです。ここに英語名を利用したフォルダのドイツ語ローカライズ版の例を示します。
groupuinames.xml
<?xml version="1.0" encoding="UTF-8"?>
<groupuinames:template-group-list xmlns:groupuinames="http://openoffice.org/2006/groupuinames">
<groupuinames:template-group groupuinames:name="educate"
groupuinames:default-ui-name="Bildung" />
<groupuinames:template-group groupuinames:name="layout"
groupuinames:default-ui-name="Prasentationshintergrunde" />
<groupuinames:template-group groupuinames:name="misc"
groupuinames:default-ui-name="Diverses" />
<groupuinames:template-group groupuinames:name="officorr"
groupuinames:default-ui-name="Geschaftliche Korrespondenz" />
<groupuinames:template-group groupuinames:name="offimisc"
groupuinames:default-ui-name="Sonstige geschaftliche Dokumente" />
<groupuinames:template-group groupuinames:name="personal"
groupuinames:default-ui-name="Private Korrespondenz und Dokumente" />
<groupuinames:template-group groupuinames:name="presnt"
groupuinames:default-ui-name="Prasentationen" />
</groupuinames:template-group-list>
多言語テンプレート拡張機能
多言語テンプレート拡張機能も作成でき、Path.xcu ファイルの 13 行目を多少変更する必要があります。
Paths.xcu
<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data oor:package="org.openoffice.Office" oor:name="Paths"
xmlns:install="http://openoffice.org/2004/installation"
xmlns:oor="http://openoffice.org/2001/registry"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<node oor:name="Paths">
<node oor:name="Template" oor:op="fuse">
<node oor:name="InternalPaths">
<node oor:name="%origin%/template/$(vlang)" oor:op="fuse"/>
</node>
</node>
</node>
</oor:component-data>
そして、OOo でサポートされている ISO 言語コードをその名前とする追加のディレクトリは "templates" フォルダに作成する必要があります。二つ目の空の拡張機能ファイルがインフラストラクチャを提供します。空の拡張機能ファイルを取得し、"de" フォルダにドイツ語のテンプレートを、英語のものを "en-US" に、フランス語のものを "fr" に入れるといったようにします。空のフォルダは問題とはなりません。ローカリゼーションファイル (groupuinames.xml) はこれからは言語に対応したフォルダに置く必要があります。直接 "templates" フォルダに置くのではなくまるで一つの言語拡張機能であるかのように配置します。
このようにして拡張機能を作成すればいつも現在の GUI 言語のテンプレートのみ利用可能です。これはパスの "$(vlang)" 変数によります。テンプレートを言語に依存せずに切り替える方法は依然としてありません。
オートテキスト拡張機能
テンプレート拡張機能について説明したことはオートテキストのための拡張機能にも当てはまります。Paths.xcu はこれからもちろん"テンプレート"のパスの代わりに"オートテキスト"のためのパスを含みます。ここにオートテキストをで満たせる拡張機能パッケージの例があります。現在、オートテキストのエクスポート機能はありません。作成した拡張機能ファイルに ".bau" ファイルをコピーしてください。ローカライズされたオートテキストを含む拡張機能も同様の手順で作成できます。手順は次のとおりです。"share/autotext" フォルダで見られるように ISO の言語コードから作成したサブフォルダにファイルを入れます。テンプレートのパスと異なるのは、オートテキストマネージメントコンポーネントとしての他言語拡張機能は内部で言語依存のアクセスを実装しているためオートテキストのパスに "$(vlang)" を含む必要が無い点です。
オートテキスト拡張機能を配置するときやりにくい点があります。それは、現在の使用ではオートテキストの GUI は任意の言語にオートテキストを保存することです。このバグが修正されなければいけません。オートテキストへのすべての変更が拡張機能を削除したときに失われます。拡張機能の内容はユーザーが直接変更するためのものではありません。
ギャラリー拡張機能
テンプレート拡張機能についてはすべて説明しましたがギャラリーに関しても当てはまります。Paths.xcu はもちろん "テンプレート" のパスを含まない代わりに "ギャラリー" のパスを含んでいます。ここ にあなたがギャラリーテーマで満たすための例があります。少しやりにくいのですが、現在のギャラリーコードはテーマファイルの名前の衝突が起きる傾向があるため、修正されるまでギャラリー拡張機能の使用はお勧めできません。
もう一つの未解決の問題として ギャラリーアイテムのローカリゼーションがあります。
辞書と単語帳のための拡張機能
言語用のツールと辞書の設定は改良されて現在は拡張機能として配布できます。 ここを参照してください。