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

6,525 views
6,332 views

Published on

第5回関西LibreOffice勉強会の資料です

Published in: Technology
2 Comments
13 Likes
Statistics
Notes
  • @2dice Pro Gitに載ってた方法ですね!確かにdiffを取るためだけにfodtで保存しろというのもアレだし、そっちのほうがいいのかなぁ
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • odt2txt(macportsあり)とgitの属性(.gitattributes)を使うとgitでodfファイルのテキストだけのdiffが取れました.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
6,525
On SlideShare
0
From Embeds
0
Number of Embeds
2,426
Actions
Shares
0
Downloads
25
Comments
2
Likes
13
Embeds 0
No embeds

No notes for slide

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

  1. 1. Flat ODF+Redmine Git(Gitolite, SparkleShare) で文書共有システムを作ってみた のがたじゅん <nogajun@gmail.com> 2013.12.14 第5回関西LibreOffice勉強会
  2. 2. 事の始まり ドキュメントを Gitで管理したい ドキュメントを LibreOfficeで書きたい
  3. 3. はい?
  4. 4. Gitはバージョン管理システム ● 変更されるファイルの変更点を記録し バージョンを管理する。 バージョン間の差分を見たりできる。 ● 管理するファイル形式はおもにテキスト形式 バイナリも保存できるが基本的には関知しない
  5. 5. LibreOfficeのファイル形式はODF ● ODF(OpenDocumentFormat) XMLの文書ファイル以外に文書情報など複数のXML ファイルとドキュメント内で使われる画像ファイルな どをzip形式で圧縮したアーカイブファイル ● バイナリファイル
  6. 6. この事実を合わせると… ● ODFはバイナリファイル ● Gitはバイナリファイルを関知しない
  7. 7. ( ^o^)ODFファイルをGitでバージョン管理 ( ˘⊖˘) 。o(待てよ?ODFはZIPファイルでバイナリじゃん) |The Document Foundation|┗(☋` )┓三 ( ◠‿◠ )☛そこに気づいたか・・・消えてもらう ▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわああああああ
  8. 8. そこで「フラット」ODFですよ
  9. 9. “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
  10. 10. テキストファイルということは… ● 既存のXMLツールやテキスト編集ツールで 直接ODFの編集加工ができる! xmlstarletなどを使ってXMLツリーの操作やgrep, diff, sed, awkを使っての加工も容易 ● difを取ってみると…
  11. 11. $ 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>
  12. 12. これで勝つる!
  13. 13. Flat ODFの欠点 ファイルサイズが大きくなる ● 画像ファイルがbase64エンコードされて埋め込まれる ことと非圧縮形式なので、ファイルサイズは大きくな ります。 ● サイズは画像ファイルに左右されますが、ODFと比較 するとだいたい1.3倍から1.5倍程度なので、それほど 気にする必要はないかもしれません。
  14. 14. 通常の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
  15. 15. ODFとFlat ODFの使い分け ODFとFlat ODFに一長一短ありますが… • ドキュメント制作中→Flat ODF • ドキュメント制作が終わったら→ODF という風に扱うといい感じになると思います
  16. 16. 文書共有システム
  17. 17. 構成図 サーバー Redmine: Gitリポジトリビュワー ・pushされたファイルを更新履歴含めて見る ・チケット管理と連動 Gitolite: Gitリポジトリ管理 リポジトリとアクセス管理 SparkleShare: 自動ファイル同期・共有ツール ファイルを自動同期する 裏ではgit push/pullしている ● ● ● ● LibreOffice: Flat ODFを作成・編集 更新 flat ODF ユーザーはGitを意識することはない もちろん普通のファイルも共有できる ファイル・更新履歴にひもづけて Redmineのチケットが作れる Gitoliteでアクセス範囲が変えられる
  18. 18. サーバーとクライアント サーバー側(Redmine, Gitolite) ● Debian GNU/Linux 7.2(Wheezy) on さくらインターネット インストールはapt-get一発です クライアント側(SparkleShare) ● Debian GNU/Linux Sid ● Windows 7 (SparkleShareはVista以降でないと動きません) ● たぶんMacでも大丈夫なはず
  19. 19. くわしい構築方法は… LibreOffice Advent Calendar 2013の12月17日を ご覧ください いい訳じゃないけど原稿を書くだけでも結構大変だっ たのよ… LibreOffice Advent Calendar 2013 - Adventar: http:/ /www.adventar.org/calendars/172
  20. 20. それもなんなんで、 もうちょっとだけ
  21. 21. RedmineとGitolite
  22. 22. RedmineとGitolite Redmineはプロジェクト管理ツール ● Gitなどバージョン管理ツールと連携してプロジェク トの進行管理を手助けします GitoliteはGitリポジトリ管理ツール ● 複数のGitリポジトリを作成したりアクセスできる人 を制限できます ● 管理はコマンドラインベース ソースコードをGitで管理、プロジェクト進行は Redmineという組み合わせはポピュラーかも
  23. 23. ここに非技術者の人が 入ったらどうなる?
  24. 24. そこでSparkleShareですよ
  25. 25. SparkleShareとは ● DropBoxのように自動的にファイルを同期するソ フトウェア マルチプラットフォームです。 ● バックエンドにGitを使っている 大きなバイナリファイルの扱いは不得意です ● サーバーは自前で用意する必要がある GithubやBitbucketなどのGitを使ったサービスもサー バに利用できます。
  26. 26. なぜSparkleShareを使ったのか ファイルに紐づけてタスク管理をしたかった ● OwnCloudが同じようなソフトで履歴もサポートして いますが紐付けてタスク管理はなかった ● gitlabを使っても良かったかもしれないけどaptで入ら なかった CmisSyncがフォークして作られている話から再び 使いたくなった gitを使いたい人とgitが使えない人を取り持つ気 がしたので試したかった
  27. 27. さらにFlat ODFを使う
  28. 28. Redmine Git(Gitolite, SparkleShare) LibreOfficeが つながった!
  29. 29. これでうまくプロジェクトが 回るとよいなぁ(ええっ!
  30. 30. Any Questions?
  31. 31. ありがとうございました

×