Ubuntu Weekly Recipe

第437回 LibreOfficeはreOfficeのライブラリではありません 〜LibreOffice Onlineを支える技術

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

皆さんはLibreOfficeというソフトウェアをご存知でしょうか。名前の最初に「Lib」がついているので何かのライブラリかと思いがちですが,実はこれMicrosoft Officeのようなオフィススイートなんです。今回はこのLibreOfficeをライブラリとして使用します。

LibreOfficeとはなんぞや

「ご存知でしょうか」も何も,この連載の読者であればLibreOfficeを知らない方はいませんよね。デスクトップ版のUbuntuであれば最初からインストールされていますし,UnityのLauncherにも登録されていますので,アイコンを見たことがないという方もほとんどいないはずです。

少しだけ説明すると,オフィススイートであるLibreOfficeはフリーでオープンなソフトウェアであり,非常に活発な開発コミュニティを持っているソフトウェアでもあります。およそ半年ごとにメジャーバージョンをリリースしており,8月には新しい5.2がリリースされたところです。ちなみにUbuntuで5.2を使いたい場合は第434回を参照してください。

機能としてはワープロ,表計算,プレゼンテーション,作図,データベース,数式といった一般的なオフィスソフトウェア機能一式を揃えています。ISOやJISの標準規格であるOpenDocument Format(拡張子.odt,.ods,.odpなど)をサポートするのみならず,Microsoft Officeで使われているフォーマット(拡張子.docx,.xlsx,.pptxなど)のファイルも読み書きできるのです。クロスプラットフォームに対応しているため,OSの垣根を超えて共通のスタンドアローンなオフィスソフトを使いたいとなると,LibreOfficeがもっとも有力な候補になるでしょう。また海外のみならず日本の地方公共団体でも採用事例が増えていることからもわかるように,UIや機能ともに日本語話者の利用に耐えうる品質を持っています。

LibreOfficeの詳しい話については,本連載のみならずgihyo.jpの各記事でも何度もとりあげていますので,そちらを参照してください。

LibreOfficeKit

さて今回はこのLibreOfficeを「ライブラリ」として使うことにします。オフィススイートであってもソフトウェアである以上,普段は人力で行っている各種操作を機械に任せたいと考えるのが人間の性です。LibreOfficeももちろん例外ではなく,⁠マクロ」「拡張機能」という形で各種処理を自動化できる仕組みが備わっています。とはいえこれらはあくまでLibreOfficeの中から,オフィスファイルを操作するツールです。どうせ自動化するのであれば,GUIを立ち上げることなくオフィスファイルを編集できると何かと便利です。

そこで今回は,オフィスファイルの操作ツールとしてLibreOfficeKitを使用します。LibreOfficeKitは,LibreOffice本体のライブラリ群を用いてLibreOfficeの各種機能にアクセスするためのC/C++向けインターフェースです。正確にはLibreOfficeKitは,LibreOffice本体のプログラムをdlopen()して使用するヘッダーファイルのみで構成されます。このヘッダーファイルをインクルードしたバイナリを作ることで,LibreOffice本体を経由したファイルの操作やレンダリングができるというわけです※1)⁠まさに「LibreOfficeをライブラリとして使う」という状態ですね※2)⁠

※1
単純にオフィスファイルを操作したいだけであれば,UNO APIを使用したプログラムを作るほうが手っ取り早いでしょう。またUNO APIであれば,各種プログラミング言語向けのバインディングも揃っています。LibreOfficeKitのメリットは,ファイルの内容をレンダリングできるという点にあります。
※2
ちなみにLibreOfficeKitのライブラリの一部は「liblibreofficekitgtk.so」という「libづくし」の名前になります。LibreOfficeKitそのものも以前は「liblibreoffice」という名前だったようです。

LibreOfficeKitは,オフィスファイルをブラウザから閲覧・編集できるLibreOffice Online新春特別企画の記事や,Android版のLibreOffice Viewerなどで使われています。つまりクライアント側でLibreOfficeのGUIを動かすことが難しい環境向けに,サーバー側でLibreOffice本体がレンダリングを行い,クライアント側ではそれを受け取ってクライアントの状況に即したレイアウトで表示させようという仕組みです。

ちなみにUbuntuの日本のコミュニティで活躍している有志が集まって執筆したうぶんちゅ!まがじん ざっぱ〜ん♪ Vol.5では,本連載の印刷関連の記事やLibreOfficeのイベントレポートでもおなじみのおがさわらさんが,LibreOffice Onlineを構築する手順やその内容について解説してくれています。興味のある方はぜひお買い求めください。

サンプルコードのサンプル

LibreOfficeKitのもっとも参考になるサンプルコードはLibreOffice Onlineのソースコードです。loolwsd(LibreOffice Online WebSocket Daemon)側でLibreOfficeKitを用いてオフィスファイルを操作・レンダリングした結果を,loleaflet側でJavaScript製のマップレンダリングライブラリであるLeafletとNode.jsによって描画するという仕組みになっています。LibreOfficeKitの使い方は,loolwsdのコードを見ればおおよそわかるでしょう。

シンプルな例ではlloconvがあります。これはunoconvのLibreOfficeKit版とも言えるツールです。基本的な初期化と使い方をてっとりばやく把握できます。

レンダリング機能も利用した例であれば,LibreOfficeのソースコードに同梱されているgtktiledviewerも参考になるかもしれません。ちなみにこれを動かす場合はLibreOfficeだけでなく「libreoffice-gtk3」パッケージも必要になります。

プログラムを作ってみよう

ここからは具体的なソースコードの例を交えて,LibreOfficeKitを使ったプログラムを作ってみます。作るのは以下の4つのプログラムです。

  • ファイルフォーマットを変換するプログラム2ページに掲載)
  • ImpressのすべてのページをPNGとして出力するプログラム3ページに掲載)
  • Calcでキーボード操作をエミュレーションするプログラム4ページに掲載)
  • スクリーンショットをCalcに貼り付けるプログラム5ページに掲載)

なお,動作確認環境はUbuntu 16.04 LTSとLibreOffice 5.1との組み合わせです。特に5.2の場合はいくつか挙動が変わっている可能性があるので,注意してください。また,いずれのプログラムもライセンスをCC0とします。また,ソースコードはGitHubにもアップロードしてあります

必要なパッケージのインストール

まずプログラムをビルドするためのパッケージをインストールします。

$ sudo apt install build-essential libreofficekit-dev

これだけです。⁠/usr/include/LibreOfficeKit」以下に必要なヘッダーファイルがインストールされます。ちなみにサーバー環境で使用したい場合は,別途LibreOffice本体もインストールしておいてください。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入