おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

ポエム:LibreOfficeの相互運用性について

この記事はLibreOffice Advent Calendar 2019の17日目です。

本記事はLibreOffice日本語チームあるいはThe Document Foundation、その他いかなるLibreOfficeコミュニティの意見を代表したものではない私見です*1。さらにいうと私はLibreOfficeの認定ほげほげではないので、ビジネスとしてガチに相互運用を検討したい場合はぜひ認定移行専門家にご相談ください。

さてと。

よく「LibreOfficeMicrosoft Officeとの互換性がね……」という意見を目にします。そのたびに私みたいなうるさ型から「いやいや別にLibreOfficeMS Officeとの互換製品だとは言ってないし」とか言われたって人もいるんじゃないでしょうか。

とはいえLibreOfficeMicrosoft Officeと「互換」ではないのか。そんなことを先日Twitterで書いたので引用しておきます。

繰り返すと相互運用(という言葉については後述)のための「機能」の互換性は大事に思ってるけど、互換アプリではないよと。そこは、例えば機能や文書フォーマットだけでなく積極的に操作性も揃えようとしているこういうソフトウェア(あくまでも一例ね)とは立ち位置は違うんじゃないかなと。

www.sourcenext.com

とはいえ、現実的な問題として、

Microsoft Officeのユーザーから受け取った、あるいは自分が作った文書をLibreOfficeで開いたら開けなかった、あるいはぶっ壊れた

というのは、まあ、あんまり幸せではないわけです。少なくともそれを良しとしている人は誰もいないんじゃないのかな。

そんなわけで、その点について思いつくことをちらちら書こうと思います。あ、主にMS Officeを相手にした話となります。

「互換性」(compatibility)ではなくて「相互運用性」(interoperability)?

前述のように、私はしばしば「LibreOfficeMicrosoft Office互換ではないが、Microsoft Officeと相互運用性があるソフトだ」みたいな言い方をします。ん? 相互運用性? それはなんぞ?

互換性ってのはWikipediaの記事によると:

互換性(ごかんせい、英語: Compatibility)とは、ある部品やコンポーネント(構成要素)などを置き換えても同様に動作させることができる性質のこと。

だそうです。それに対して相互運用性というのは、同じくWikipediaの記事によると:

相互運用性(そうごうんようせい、英: interoperability)とは、さまざまなシステムや組織が連携できる (相互運用できる) 能力に関する特性である。(略)

ですよと。つまり「同じであることを目指している」か「異なるモノを使いつつ一緒に連携できることを目指している」かということ。なんですよ。

「互換性」と言う言葉から期待される「何もかも同じでなければ文句を言われる」ところから、ちょっと踏み込んで、使い方の工夫とかも含めることができる、と思って、私は原則として「相互運用性」って言葉を使ってます。言葉遊びと言われればそうかもですが。

相互運用とインポート・エクスポートとファイルフォーマットの話

さて、相互運用というのは少なくとも二者間との連携ですよという話をしました。つまり「LibreOfficeしか使ってない私」と「MS Officeしか持ってないあなた」が、一緒に作業してアウトプットを出す……ってことです。

しかし、MS OfficeLibreOfficeは、違うファイルフォーマットを利用しています。MS Officeの場合はOOXML(Office Open XML.docx とか .xlsx とか)、LibreOfficeの場合はODF(Open Document Format、 .odt とか .ods とか)ですね。なので、この二人が共同作業するには、

どちらかしかないわけです。こういう、ネイティブなフォーマットじゃないフォーマットを読むことを「インポート」、書き出すことを「エクスポート」といいます。言葉通り、輸入・輸出ですね。

ところで、MS OfficeLibreOfficeは似たような機能は提供していますが、もちろん異なるソフトウェアです。

異なるというのはどういうことかというと、同じような見た目、同じような機能であっても、たとえば段落とか、箇条書きとか、表とか、そういうの。それを内部でどうやって扱うか、その仕組みは全然違うってことです。

わかりやすい話でいうと、ExcelとCalcの罫線。

Excelは、一つのセルに着目したとき、セルの4辺それぞれに罫線が引いてあるというモデルになってます。一方でLibreOfficeは、二つの隣接するセルがあるとき、その境界線に罫線が引かれてるというモデル*2

各アプリケーションの標準フォーマット、つまりはODFとかOOXMLは、こういった内部表現を比較的忠実に表現しています。

なので、インポート・エクスポートってのは、こういう違う世界を読み替えるってことなのです。情報の欠損や置き換えが起きて、ある意味当然なのです。

でもその被害? は、いくつかの工夫で減らすことはできるはず。さくっと箇条書きで。

  • バックアップは取ろうね
  • 最新を使おう
  • 出し入れを繰り返すのはやめよう
  • スタイルを活用する
  • フォントを揃える、代替フォントを活用する
  • ODF? OOXML? どっちがいい?

以下さらっと解説します。

バックアップは取ろうね

LibOでOOXMLを読んで、編集して、そのまま書き出すという行為。これは、インポートとエクスポートが両方走るわけです。事故の確率が2倍。

なので、最低でも「この文書めっちゃ大事で壊れたらぜったいまずい」かつ「LibOで編集するのは初めて」って場合は、バックアップとっとくと後悔しないんじゃないですかね。

っていうと「壊れるの前提だなんて!何事!」みたいなことを言う人がいるかもですが、同じことはMS OfficeでODF読んで書くときだっていえるはず。単に世の中にはODFが正本であるというケースが圧倒的に少ないので、それで文句を言う人が少ないというだけなんじゃ……と、思います。

最新を使おう

OOXMLはけっこうバージョン間でほいほい変わったりします。わかりやすいのはExcelのセル関数ですね。「新たにExcelにこんな関数が増えた!」みたいにニュースになったりしますし。でも当たり前ですがそういうものを使うと、LibOだけじゃなくて古いバージョンのExcelでもうまく扱えないです。

でまあ、LibOは「半年に1回メジャーリリースをする」という開発スタイルを生かして、ここらへんの新たな機能をキャッチアップしたり、相互運用に関わる不具合を直したりを積極的に行っています。なので、なにか変……という場合は、LibreOfficeの最新版を試してみるといいのではないかな。

とはいえ手元のバージョンを検証なしにほいほい最新にすることが難しいというのもあるとは思いますので、その場合は、インストールしないで使えるパッケージ、つまりWindows版の場合はポータブル版を、Linuxの場合はAppImage版の利用を推奨します。Macの場合はこのWikiの記事に従って並列インストールするのがよいですね*3

出し入れを繰り返すのはやめよう

出し入れってのはようは「インポート・エクスポート」のこと。それを繰り返し続けるのはよくないって話。繰り返しになりますけどインポート・エクスポートは情報の欠落や置き換えが起きる可能性が常にあるわけですから、それを繰り返し続けるのはよくないってのはまあそうだよね、と。

なので、例えばMS Officeで作業している人からファイルを受け取って、それをLibOで作業する場合、一度OOXMLからインポートした後、「名前を付けて保存」でODFにして、それを触り続けるほうがいいです。で、最後の最後、MS Officeしか持ってない人に渡すときに、再度OOXMLにエクスポートして返す。

いや、共同編集なので、私がちょっといじって直したやつを、この人に渡して、って作業したいから、出し入れ避けられない……という場合。うーん、本当にそれが必須でかつ大事な作業なら、向こうにLibreOffice入れてもらうなり、こちらが1ライセンスだけMS Office買うなり、するほうがいいんじゃないかなーと思います。

互換品じゃない、そうはいっても代替品として入れたとき

LibreOfficeMS Officeの互換品ではないですよ、とは書きましたが、同じような機能をする「代替品」(Alternative)ではあると言えると思います。なのでMS Officeあるいはその他のオフィスソフトの代わりにLibreOfficeを導入することは、できなくはないです。

その場合、社内の既存の資産の扱い、まあこれも過去の自分たちとの「相互運用」ですね。

なのでこの場合も、いったんはOOXMLの過去資産をすべてODFにして、以降はODFで一貫して触り続けるのがよいと思います。もし、マクロの利用や外部システム連携などでOOXMLを維持し続けなければいけない……のであれば、その分だけMS Officeを、少なくとも短期的には残すのが無難じゃないかなーと。

スタイルを活用する

さて、少し視点を変えて、インポート・エクスポートをしても壊れにくい文章ってどうやって作ったらいいかという話。

それには、スタイルをちゃんと作って、文書の修飾はスタイル側に寄せるってのが有効です。スタイルの利用については書き出すときりがないので深入りはしませんが、特にWriterの場合は、直接の書式適用は原則禁止! ぐらいにすると、結構きれいにインポート・エクスポートできると思います。

フォントを揃える、代替フォントを活用する

もひとつ、問題になるのがフォントの扱い。正しくフォントが選択されている場合、レイアウトが大きく崩れることってそんなにないのですが、文書に含まれているフォントがシステムに存在しない場合は、フォールバックフォントの扱いでけっこう崩れる……という印象が、私にはあります。

なので可能ならば各プラットフォーム共通で導入できるフリーフォント(Noto fontとかIPAフォントとか)の利用を検討するのが良いと思います。

あるいは、環境ごとの設定が必要になってしまいますが、LibreOfficeのi ツール ▶ オプション ▶ 置換テーブル で、代替フォント(あるフォント名が指定されたときに別のフォントを割り当てる)を指定してあげるのも有効です。

ODF? OOXML? どっちがいい?

さて相互運用においてプチ悩ましいのが、

の、どっちがいいかという話。

これって結局はMSさんのODFエクスポートとLibOのOOXMLインポートどっちを信じる?って話だと思うのですが、私はこの点に対してちゃんとした答えを持ってないです。身も蓋もないことをいえば「どっちも試して結果がいいほうを選ぶ」がいいんじゃないかと思いますけど。

いちおう、与太話的に書いておけば。

イギリス政府が政府内のオフィスフォーマットとしてODFを義務化していることをご存じの方もいるとは思います。しかし、これはODFネイティブなLibreOfficeの利用を強制してないことには注意が必要です。要はODFを正しく扱うことさえできれば別のソフトでもよいわけです。そしてMSさんにとってもイギリス政府からbanされることは望ましくないので、ODFの扱いはそれなりにちゃんとする動機はあるはず。

一方で、ハンガリー政府は「プロプライエタリ(独占的)なオフィスソフトの利用を段階的に削減すること」というポリシーを掲げています。ファイルフォーマットではなくてアプリケーションを指定しているわけです。で、このサポートを請け負っているNISZという組織では、「MSのODFの扱いが改善されるかどうかは自分たちで制御できないが、LibOのOOXMLの扱いは自分たちで改善できる余地があるから」という理由で、内部フォーマットはOOXMLのままにLibOに移行するという決断をし、そのためにLibOの開発者を内部で育成するという活動をしています。(2019.12.18追記:もちろん、LibreOffice有償サポートベンダーの活動の多くもまた、顧客から求められた相互運用性の向上です。またそれ以外の多くのボランティア貢献者もこの部分にコミットしています。)

そんなわけで両者頑張っているので、現時点でどっちが絶対の正義ってのは簡単には言えませんよと。

あーもう一点、もし編集が不要で見るだけであれば、PDFにして渡すのが一番良いですね。LibreOfficeの「ハイブリッドPDF」(埋め込みドキュメントとしてODF形式を丸ごと抱いたPDF。LibOで開けば編集可能文書、そうでなければPDFとして見られる)を活用しましょう。

おわりに

ということで埋め草なポエムでした。もうちょっとちゃんと裏付けがある話を書くべきなのですが、思いつくままの書き散らしですみません。

明日は空席ですが、Advent Calendar自体はこれから先も面白そうな記事が予告されてるので楽しみですね!

……以下おまけ。

そもそもMicrosoft Officeって互換性高いっけか?

で、最後にこれは愚痴なんですけど、私ちょっと前までは仕事場ではMac使ってました。で、Macで顧客提案資料とか作って営業さんに渡すと、Windowsで開いたらレイアウト崩れてましたよーとか言われるわけですよ。Office 2013とかの頃かな。

MS Officeが概ね文字の配置ロジックにてOSから得られるフォントの割付情報をわりと素朴に使っているのはまあ知ってはいたので(WordよりもExcelのほうが酷い)、そりゃーズレるよなーとは、理屈ではわかるんですけどね……。

そもそも2013ぐらいのMacMS Officeって結構Windows版と機能もUIも違ってたりしたし。O365になって常に最新のを使うようになっても、MacExcelで作ってSharepointに上げたファイルをMS Office Onlineで開くと「このファイルは破損してるので開けないよ」って怒られるみたいなことがあったわけで*4

けっこうなお値段払ってるMS Officeだとみんな言わないのに、LibreOfficeだとちょっと違うと文句言われるのは、なんだか不条理だなと思ったと、そんだけです。

*1:私見じゃなかったらja blogに書いてます。

*2:っていう話は大昔にプレゼンしました

*3:Applicationフォルダー以下のフォルダー名をリネームするだけだと、設定が混じっちゃいますが、雑にやるならそれでも可です。

*4:今はMacはメインでは使わなくなったのでわかりません。直ってるかも。