Ubuntu Weekly Recipe

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

今回は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オフラインミーティングのときの発表でも使用しました。

拡張機能を作成する意義

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

拡張機能の基礎知識

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

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

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」になる、というわけです。

description.xml

ここまでやれば一応は拡張機能になるのですが、インストール前にライセンスを明示したり、説明を入れたりする場合はdescription.xmlが必要になります。すなわちほぼ必須ということになります。内容は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/description/2006"
xmlns:d="http://openoffice.org/extensions/description/2006"
xmlns:xlink="http://www.w3.org/1999/xlink">

  <version value="1.0" />

  <identifier value="info.fruitsbasket.ikuya.aootemplateextension" />

  <platform value="all" />

  <dependencies>
    <OpenOffice.org-minimal-version value="3.3" d:name="OpenOffice.org 3.3 and above"/>
  </dependencies>

  <registration>
    <simple-license accept-by="admin" default-license-id="this" >
      <license-text xlink:href="LICENSE_ALv2.txt" license-id="this" />
    </simple-license>
  </registration>

  <release-notes>
    <src xlink:href="release-note.txt" lang="ja" />
  </release-notes>

  <publisher>
    <name xlink:href="http://ikuya.info/" lang="ja">あわしろいくや</name>
  </publisher>

  <display-name>
    <name lang="ja">AOOテンプレート拡張</name>
  </display-name>

  <extension-description>
    <src xlink:href="description.txt" lang="ja" />
  </extension-description>

</description>

変更の必要があるところだけ解説します。

  • version value:拡張機能のバージョンです。変更があった場合は上げる必要があります。
  • identifier value:自動アップデートの対象にしない場合は、一意であれば何でもいいようです。
  • platform value:この拡張機能はプラットフォームに依存しないため、⁠all⁠です。
  • dependencies:必要な最低限のOOoのバージョンですが、今回は3.3以上にしました。LibO/AOOともにこれで問題ありません。
  • registration:今回最も苦労したのがここです。ファイル名以外は変更しないのが無難と言えます。
  • release-notes:一応指定しましたが、見るところはありませんでした。
  • publisher:作者の情報です。拡張機能マネージャに表示されます。
  • display-name:拡張機能の表示名です。
  • extension-description:拡張機能の説明です。これも拡張機能マネージャに表示されます。

他にアイコンも表示することができるのですが、今回は商標の関係で省きました。

release-note.txt

あってもなくてもあまり関係ありませんが、内容は次のとおりです。

これはApache OpenOffice (AOO) 4.0のImpress用テンプレートをLibreOfficeで使用するための拡張機能です。
AOO 4.0には含まれていますが、日本語版では使用できないため、日本語で使用するAOOユーザーにも有益かと思います。

ファイルは
http://svn.apache.org/viewvc/openoffice/trunk/main/extras/source/templates/layout/lang/en-US/
から取得できます。

description.txt

内容は次のとおりです。

Apache OpenOffice (AOO) 4.0のImpress用テンプレートをLibreOfficeで使用するための拡張機能です。

ファイル構成

これで完成ですが、ファイル構成は次のとおりです。このとおりになっているか今一度ご確認ください。

  • ./description.xml
  • ./Paths.xcu
  • ./description.txt
  • ./LICENSE_ALv2.txt
  • ./release-note.txt
  • ./META-INF
  • ./META-INF/manifest.xml
  • ./layout
  • ./layout/ja
  • ./layout/ja/lyt-frepa.otp
  • ./layout/ja/lyt-book.otp
  • ./layout/ja/lyt-roundedrect.otp
  • ./layout/ja/lyt-bluegrey.otp
  • ./layout/ja/lyt-bluelinesgrad.otp
  • ./layout/ja/lyt-glacier.otp
  • ./layout/ja/lyt-brown.otp
  • ./layout/ja/lyt-movwaves.otp
  • ./layout/ja/lyt-bluetitledown.otp
  • ./layout/ja/lyt-water.otp
  • ./layout/ja/lyt-greengradlines.otp
  • ./layout/ja/lyt-charglow.otp
  • ./layout/ja/lyt-forest.otp
  • ./layout/ja/lyt-aqua.otp
  • ./layout/ja/lyt-organic.otp
  • ./layout/ja/lyt-blackandwhite.otp
  • ./layout/ja/lyt-sunrise.otp
  • ./layout/ja/lyt-techpoly.otp
  • ./layout/ja/lyt-ocean.otp
  • ./layout/ja/lyt-rededges.otp
  • ./layout/ja/lyt-keyboard.otp
  • ./layout/ja/lyt-numdark.otp
  • ./layout/ja/lyt-paper.otp
  • ./layout/ja/lyt-wine.otp
  • ./layout/ja/lyt-tunnel.otp

圧縮

最後にZIPで圧縮するのですが、アーカイブの直下が上記のフォルダ構成になる必要があります。GUIのアーカイバを使用すると、もう1つフォルダを挟むことになってしまうため、コマンドラインで作成するのが簡単です。次のコマンドを入力してください。

$ cd aoo-template-extension
$ zip  ../aoo-template-extension.oxt * layout/ja/* META-INF/manifest.xml

これだとカレントフォルダの1つ上のフォルダに拡張子がoxtで保存できるため、あとはLibOに渡せば拡張機能のインストールができます。

作成した拡張機能は筆者のサイトに置いておきます。

インストール

できた拡張機能をインストールしてみましょう。問題がある場合はエラーメッセージが表示されるので、どこを修正するべきなのか大まかにわかります。

インストールは、拡張機能をダブルクリックするだけです。あるいは、右クリックしてもメニューからインストールできます。⁠ツール][拡張機能][追加]からもできます。以下いくつかスクリーンショットです。

図1 拡張機能が正しく作成できていると、このようなダイアログが表示される
図1 拡張機能が正しく作成できていると、このようなダイアログが表示される
図2 ライセンスを表示すると、なんだかそれっぽい
図2 ライセンスを表示すると、なんだかそれっぽい
図3 インストールが完了するとこうなる。description.xmlの内容が反映されている
図3 インストールが完了するとこうなる。description.xmlの内容が反映されている
図4 LibO 4.1.0 RC1でサイドバーを有効にし、テンプレートを表示した
図4 LibO 4.1.0 RC1でサイドバーを有効にし、テンプレートを表示した
図5 AOO 4.0の開発版。当然ではあるが同じテンプレートがある
図5 AOO 4.0の開発版。当然ではあるが同じテンプレートがある
図6 AOO 3.4.1にもインストールしてみた
図6 AOO 3.4.1にもインストールしてみた

参考情報

実のところ一番参考になるのは既存の拡張機能です。冒頭のとおり拡張子をzipにしたら普通に伸張できるので、中身を見るのも簡単です。

あとはWikiですが、以下に挙げます。ほとんどはOOo時代のものです。最後だけLibOのもので、LibOでしか動作しない拡張機能を作成する際に必要な情報です。

おすすめ記事

記事・ニュース一覧