Top Banner
Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた のがたじゅん <[email protected]> 2013.12.14 第5回関西LibreOffice勉強会
31

Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

May 31, 2015

Download

Technology

Jun NOGATA

第5回関西LibreOffice勉強会の資料です
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

Flat ODF+RedmineGit(Gitolite, SparkleShare)で文書共有システムを作ってみたのがたじゅん <[email protected]>2013.12.14 第5回関西LibreOffice勉強会

Page 2: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

事の始まり

ドキュメントをLibreOfficeで書きたい

ドキュメントをGitで管理したい

Page 3: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

はい?

Page 4: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

Gitはバージョン管理システム

● 変更されるファイルの変更点を記録しバージョンを管理する。

バージョン間の差分を見たりできる。● 管理するファイル形式はおもにテキスト形式

バイナリも保存できるが基本的には関知しない

Page 5: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

LibreOfficeのファイル形式はODF

● ODF(OpenDocumentFormat)XMLの文書ファイル以外に文書情報など複数のXMLファイルとドキュメント内で使われる画像ファイルなどをzip形式で圧縮したアーカイブファイル

● バイナリファイル

Page 6: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

この事実を合わせると…

● ODFはバイナリファイル● Gitはバイナリファイルを関知しない

Page 7: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

( ^o^)ODFファイルをGitでバージョン管理

( ˘⊖˘) 。o(待てよ?ODFはZIPファイルでバイナリじゃん)

|The Document Foundation|┗(☋` )┓三

( ‿ )◠ ◠ ☛そこに気づいたか・・・消えてもらう

▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわああああああ

Page 8: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

そこで「フラット」ODFですよ

Page 9: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

“Flat”ODFとは

Zip内のすべてのファイルが一つのOpen Document XMLファイルに収められているODF● 別ファイルになってた文書情報もXMLツリーに内包● 画像はbase64でエンコードされて埋め込まれている● ODF 1.2仕様書の3.1.2で定義されている

テキストファイルエディタで読めるしsedなどでも編集可

参考: Flat ODF as the Swiss Army Knife: http://plugfest.opendocsociety.org/lib/exe/fetch.php?media=plugfests:201210_berlin:fridrichplugfestberlin2012.pdf

Page 10: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

テキストファイルということは…

● 既存のXMLツールやテキスト編集ツールで直接ODFの編集加工ができる!

xmlstarletなどを使ってXMLツリーの操作やgrep, diff, sed, awkを使っての加工も容易

● difを取ってみると…

Page 11: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

$ diff -u flatodf1.fodt flatodf2.fodt--- flatodf1.fodt 2013-12-14 02:11:40.105362705 +0900+++ flatodf2.fodt 2013-12-14 02:12:10.533630801 +0900

(メタ情報の差分は略)

@@ -241,7 +244,7 @@ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/> </text:sequence-decls> <text:h text:style-name="Heading_20_1" text:outline-level="1">ダミーテキスト</text:h>

- <text:p text:style-name="Text_20_body">彼は背後にひそかな足音を聞いた。それはあまり良い意味を示すものではない。誰がこんな夜更けに、しかもこんな街灯のお粗末な港街の狭い小道で彼をつけて来るというのだ。人生の航路を捻じ曲げ、その獲物と共に立ち去ろうとしている、その丁度今。 彼のこの仕事への恐れを和らげるために、数多い仲間の中に同じ考えを抱き、彼を見守り、待っている者がいるというのか。それとも背後の足音の主は、この街に無数にいる法監視役で、強靭な罰をすぐにも彼の手首にガシャンと下すというのか。彼は足音が止まったことに気が着いた。あわてて辺りを見回す。ふと狭い抜け道に目が止まる。 彼は素早く右に身を翻し、建物の間に消え去った。その時彼は、もう少しで道の真中に転がっていたごみバケツに き転ぶところだった。 彼は暗躓

闇の中で道を確かめようとじっと見つめた。どうやら自分の通ってきた道以外にこの中庭からの出道はないようだ。 足音はだんだん近づき、彼には角を曲がる黒い人影が見えた。彼の目は夜の闇の中を必死にさまよい、逃げ道を探す。もうすべては終わりなのか。すべての苦労と準備は水の泡だというのか。 突然、彼の横で扉が風に揺らぎ、ほんのわずかにきしむのを聞いた時、彼は背中を壁に押し付け、追跡者に見付けられないことを願った。この扉は望みの綱として投げかけられた、彼のジレンマからの出口なのだろうか。背中を壁にぴったり押し付けたまま、ゆっくりと彼は開いている扉の方へと身を動かして行った。この扉は彼の救いとなるのだろうか。</text:p>

+ <text:p text:style-name="Text_20_body">彼は背後にひそかな足音を聞いた。それはあまり良い意味を示すものではない。誰がこんな夜更けに、しかもこんな街灯のお粗末な港街の狭い小道で彼をつけて来るというのだ。人生の航路を捻じ曲げ、その獲物と共に立ち去ろうとしている、その丁度今。 彼のこの仕事への恐れを和らげるために、数多い仲間の中に同じ考えを抱き、彼を見守り、待っている者がいるというのか。それとも背後の足音の主は、この街に無数にいる法監視役で、強靭な罰をすぐにも彼の手首にガシャンと下すというのか。彼は足音が止まったことに気が着いた。あわてて辺りを見回す。ふと狭い抜け道に目が止まる。 彼は素早く右に身を翻し、<text:span text:style-name="T1">建物の間に消え去った。</text:span>その時彼は、もう少しで道の真中に転がっていたごみバケツに き転ぶところだった。 彼は暗闇の中で道を確かめようとじっと見つめた。どうやら自分の通ってきた道以外にこの躓

中庭からの出道はないようだ。 足音はだんだん近づき、彼には角を曲がる黒い人影が見えた。彼の目は夜の闇の中を必死にさまよい、逃げ道を探す。もうすべては終わりなのか。すべての苦労と準備は水の泡だというのか。 突然、彼の横で扉が風に揺らぎ、ほんのわずかにきしむのを聞いた時、彼は背中を壁に押し付け、追跡者に見付けられないことを願った。この扉は望みの綱として投げかけられた、彼のジレンマからの出口なのだろうか。背中を壁にぴったり押し付けたまま、ゆっくりと彼は開いている扉の方へと身を動かして行った。この扉は彼の救いとなるのだろうか。</text:p> <text:p text:style-name="P1"/> </office:text> </office:body>

Page 12: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

これで勝つる!

Page 13: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

Flat ODFの欠点

ファイルサイズが大きくなる● 画像ファイルがbase64エンコードされて埋め込まれる

ことと非圧縮形式なので、ファイルサイズは大きくなります。

● サイズは画像ファイルに左右されますが、ODFと比較するとだいたい1.3倍から1.5倍程度なので、それほど気にする必要はないかもしれません。

Page 14: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

通常のODFへの変換

● ODFへの変換はLibreOfficeでFlatODFファイルを開き、ODFで保存しなおします

● 大量に変換する場合はコマンドラインが便利です

ex)soffice --headless --convert-to odt *.fodt

--headless like invisible but no userinteraction at all.--convert-to output_file_extension[:output_filter_name] [--outdir output_dir] files Batch convert files. If --outdir is not specified then current working dir is used as output_dir. Eg. --convert-to pdf *.doc --convert-to pdf:writer_pdf_Export --outdir /home/user *.doc

Page 15: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

ODFとFlat ODFの使い分け

ODFとFlat ODFに一長一短ありますが…• ドキュメント制作中→Flat ODF• ドキュメント制作が終わったら→ODF

という風に扱うといい感じになると思います

Page 16: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

文書共有システム

Page 17: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

構成図 Redmine: Gitリポジトリビュワー・pushされたファイルを更新履歴含めて見る・チケット管理と連動Gitolite: Gitリポジトリ管理リポジトリとアクセス管理

SparkleShare:自動ファイル同期・共有ツール

ファイルを自動同期する裏ではgit push/pullしている

flat ODF

サーバー

更新LibreOffice:

Flat ODFを作成・編集

● ユーザーはGitを意識することはない● もちろん普通のファイルも共有できる● ファイル・更新履歴にひもづけて

Redmineのチケットが作れる● Gitoliteでアクセス範囲が変えられる

Page 18: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

サーバーとクライアント

サーバー側(Redmine, Gitolite)● Debian GNU/Linux 7.2(Wheezy) on さくらインターネット

インストールはapt-get一発です

クライアント側(SparkleShare)● Debian GNU/Linux Sid● Windows 7 (SparkleShareはVista以降でないと動きません)● たぶんMacでも大丈夫なはず

Page 19: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

くわしい構築方法は…

LibreOffice Advent Calendar 2013の12月17日をご覧ください

いい訳じゃないけど原稿を書くだけでも結構大変だったのよ…

LibreOffice Advent Calendar 2013 - Adventar: http://www.adventar.org/calendars/172

Page 20: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

それもなんなんで、もうちょっとだけ

Page 21: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

RedmineとGitolite

Page 22: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

RedmineとGitolite

Redmineはプロジェクト管理ツール● Gitなどバージョン管理ツールと連携してプロジェク

トの進行管理を手助けします

GitoliteはGitリポジトリ管理ツール● 複数のGitリポジトリを作成したりアクセスできる人

を制限できます● 管理はコマンドラインベース

ソースコードをGitで管理、プロジェクト進行はRedmineという組み合わせはポピュラーかも

Page 23: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

ここに非技術者の人が入ったらどうなる?

Page 24: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

そこでSparkleShareですよ

Page 25: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

SparkleShareとは

● DropBoxのように自動的にファイルを同期するソフトウェア

マルチプラットフォームです。● バックエンドにGitを使っている

大きなバイナリファイルの扱いは不得意です● サーバーは自前で用意する必要がある

GithubやBitbucketなどのGitを使ったサービスもサーバに利用できます。

Page 26: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

なぜSparkleShareを使ったのか

ファイルに紐づけてタスク管理をしたかった●OwnCloudが同じようなソフトで履歴もサポートして

いますが紐付けてタスク管理はなかった●gitlabを使っても良かったかもしれないけどaptで入ら

なかった

CmisSyncがフォークして作られている話から再び使いたくなった

gitを使いたい人とgitが使えない人を取り持つ気がしたので試したかった

Page 27: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

さらにFlat ODFを使う

Page 28: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

RedmineGit(Gitolite, SparkleShare)

LibreOfficeがつながった!

Page 29: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

これでうまくプロジェクトが回るとよいなぁ(ええっ!

Page 30: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

Any Questions?

Page 31: Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた

ありがとうございました