Ubuntu Weekly Recipe

第279回 LibreOfficeの『拡張機能』を作成する

この記事を読むのに必要な時間:およそ 5 分

今回はApache OpenOffice 4.0に含まれるImpressテンプレートを使用して,LibreOffice用の拡張機能を作成する方法を解説します。

Apache OpenOffice 4.0とLibreOffice 4.1.0の現状

冒頭の概要を読んでもまったく意味がわからないと思いますので,Apache OpenOffice(以下AOO)とLibreOffice(以下LibO)の現状の解説から始めます。

AOOは現在4.0のリリースに向けて開発中です。本来は今月末のリリース予定でしたが,来月の7月中旬に延びました。⁠サイドバー」と呼ばれる機能を実装し,ユーザインターフェースを一新するなど,大幅な変更が入っています。AOO 4.0はオープンソース化されたLotus Symphonyからたくさんの機能や不具合修正を取り込んでいますが注1)⁠そればかりではなくギャラリーやテンプレートも取り込んでいます。

もちろんLibO 4.1.0の開発も進んでおり,こちらはオンスケジュールで来月の7月末リリース予定です。こちらもこちらでいろいろな機能を実装しているのですが,AOO 4.0の機能も取り込んでいます。実はサイドバーも使用できますが,⁠実験的な機能」であってデフォルトでは無効です。そしてギャラリーは取り込んでいるのですが,テンプレートは取り込んでいません。理由はよくわかりませんが,Windows版だと全部の言語をひとつのインストーラにまとめている関係上ファイルサイズが非常に大きいのですが(200Mバイト前後)⁠テンプレートを追加すると更に大きくなるので,これを嫌った,というのは理由として考えられます注2)⁠仮に10Mバイト増えたとしても,1,000万回ダウンロードされたとしたら,そのトラフィックの増加量は恐ろしいことになります注3)⁠

テンプレートのあり方はAOOとLibOで違いがあります。AOO(とその前身のOpenOffice.org,以下OOo)では,あろうことかテンプレートを言語ごとに持っています。AOOの場合はWindows版でも言語ごとに異なるインストーラを配布しているのでさしたる問題はないのですが,言語ごとに収録されているテンプレートが異なります。まさに新しく追加されたテンプレートもそうで,英語(en-US)などの言語には収録されていますが,日本語(ja)など大部分の言語には追加されていません注4)⁠LibOでは言語ごとにも持てるようですが,基本的には1つにまとめられています注5)⁠

拡張機能もAOOとLibOで若干異なる部分もあるのですが,今回は共通で使用できるものを作成するので,仮にAOOにテンプレートが追加されていなかったとしても,今回の拡張機能を作成すれば,追加できるようになります。

新しいテンプレートは筆者も気に入っており,第276回で紹介したUbuntuオフラインミーティングのときの発表でも使用しました。

注1)
ちなみにサイドバーはLotus Symphonyのものを取り込んだわけではなく,一から開発したそうです。
注2)
逆にMicrosoftはOffice 2013でテンプレートを大幅に増加させるという方向に進化しているのが興味深いです。
注3)
The Document Foundationはサーバと回線の維持費に多額の出費をしています。
注4)
ただし,これは事実誤認の可能性があります。現在のところAOO 4.0開発版の日本語版はリリースされておらず,実物で確認することができません。自分でビルドすることもできるのですが,LibOと比較して大変すぎるので今回はしていません。
注5)
/usr/lib/libreoffice/share/template/を見てみてください。

拡張機能を作成する意義

LibOはテンプレートが少ないので,実用的なテンプレートを追加することだけでも充分に価値があります。数が多いと個別にインストールするのが面倒なので,一括でインストールできる拡張機能は便利です。もちろん台数が多い場合も,拡張機能は有利です。最後までご覧いただければわかるのですが,今回作成する拡張機能に関してはImpressのテンプレートの数を増やしても設定ファイルを変更する必要はほとんどありません注6)⁠

注6)
description.xmlのバージョン番号だけは書き換える必要があり,詳しくは後述します。

拡張機能の基礎知識

LibOの拡張機能は誰でも作成することができます。一定のルールで作成したファイルやフォルダをZIP形式で圧縮し注7)⁠拡張子を「oxt」にするだけです。問題はその「一定のルール」ですが,テンプレートを追加する拡張機能ぐらいであればさほど難しくありません。

注7)
それにしてもSun Microsystemsという会社はZIPファイルが好きだったのだなぁと思いました。Javaで使用されるjarファイルもZIPですし,ODF形式とその前身のsx形式もZIPです。

テンプレートのダウンロード

AOOのリポジトリはSubversionにあり,http://svn.apache.org/viewvc/openoffice/trunk/main/extras/source/templates/layout/lang/en-US/からダウンロードできます。ライセンスはApache Licenseバージョン2で,ライセンスのファイルはhttp://svn.apache.org/viewvc/openoffice/trunk/main/LICENSE_ALv2?view=logからダウンロードできます。

まずaoo-template-extensionというフォルダを作成し,ダウンロードしたテンプレートをlayout/ja/フォルダに置きます。ライセンスはファイル名を LICENSE_ALv2.txtとします。

svnコマンドで取得するのが王道ですが,たかだか26個のファイルをダウンロードするのにsvnを使用するのは牛刀割鶏というものです。かといって手動でダウンロードするのも面倒なので,ダウンロード済のものを用意しました。筆者のサイトからダウンロードしてください。

META-INF/manifest.xml

実際に拡張機能に必要な設定ファイルを書いていきます。まずは必須のmanifest.xmlですが,META-INF(すべて大文字)というフォルダを作成し,そこにmanifest.xmlも作成します。テキストエディタはgeditでいいでしょう。中身は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
    <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data"
                         manifest:full-path ="Paths.xcu"/>
</manifest:manifest>

キモは「manifest:full-path」の行です。今回のように1つのファイル(Paths.xcu)で済む場合は,変更せずそのままコピーすればいいでしょう。

Paths.xcu

次はmanifest.xmlに書いてある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%/layout/$(vlang)" oor:op="fuse"/>
			</node>
		</node>

	</node>

</oor:component-data>

今回の例ではとくに意味はないのですが,言語を指定しない設定にしました。日本語でインストールすると「$(vlang)」が展開されて「ja」になる,というわけです。

著者プロフィール

あわしろいくや

Ubuntu Japanese Teamメンバー。Ubuntu Japanese Teamではパッケージングなどを担当。ほかには日本語入力関連やOpenOffice.org日本ユーザー会コミッティも兼任。

コメント

コメントの記入