パスワードを忘れた? アカウント作成
13891352 journal
日記

quaternionの日記: WordやExcelの文書をバージョン管理するベストプラクティスはなんだろう? 15

日記 by quaternion

学生に「ファイルはバージョン管理しろ『レポート最終の最終.docx』とかフォルダに置いてあるの格好悪いぞ,どれが最新だったかすぐにわからなくなるぞ」と口を酸っぱくして言っていたのだが,先日『長期研究計画書2019更新3.xlsx』という恥ずかしい名前のファイルをメール提出していた.こういうオフィス文書の類をバージョン管理したい.ソースコードとの違いは

  • バイナリファイルが中心である
  • ファイルサイズは数KBから数GBまであり得る
  • コミットグラフはあまり分岐しない
  • クラウドストレージサービスにバックアップを取りたい(GitHub や BitBucket だと容量制限が厳しい)
  • リポジトリを共有することはほとんど無い
  • 日本語ファイル名が使えると嬉しい

と言ったところだろうか.Quoraでも回答をもらってBoxに履歴機能があることを知ったのだが,ブランチ機能が欲しいので微妙だ.

ぱっと思いつくのはDropboxフォルダを作って,そのフォルダ内をMercurialで管理しちゃうことなので,これから試してみる.

  • by Anonymous Coward on 2019年04月20日 10時04分 (#3602641)

    Word/Excelは標準でバージョン管理する機能が付いてます。
    デメリットとしてファイルサイズが膨らむ事と配布時に注意が必要な事ですかね。
    配布時にOfficeの機能を適切に使っていれば問題ありませんが。
    クラウドに適時バックアップするだけで十分では?

    ここに返信
    • by Anonymous Coward

      >標準でバージョン管理する機能が付いてます。

      差分を求める機能とは違うのかな?

      TortoiseSVN でリポジトリに doc も xls も放り込んでいて、試しに「差分を表示」させたら どうもそうらしいことに気付いた、4年前。

      でも単体で使用方法は未だにわからず・知らず・知ろうとせずで今に至る。

      doc の差分は見えない成分もずらずら列挙されたけどまあ使えたかな。
      xls の差分は挿入・削除された行・列を認識せず、同セル同士の一致・不一致を表示だったけどないよりましではあった。

      “全選択・コピー・エディタに文字のみ貼り付け→これを diff で比較”はいろいろ面倒なので。

      • by Anonymous Coward

        xdocdiffかな?
        http://freemind.s57.xrea.com/xdocdiff/ [xrea.com]

        • by Anonymous Coward

          docの差分結果がdocだったり xlsの差分結果がxlsだったりします?これ。

          差分をとるとワードやエクセルが立ち上がってそこに差分・変更点が見えたんだけど…。

          • TortoiseSVNの標準で差分を見るとそうなるのですが
            #3602661 のACさんが上げている xdocdiff というプラグインを通すと
            テキストに変換した結果をdiffしてくれます。
            もちろん思ったようにパースしてくれていないときもあるし
            レイアウトの変更は全く感知してくれませんが
            標準よりはだいぶいいと思います。

          • by Anonymous Coward

            元々Wordなら「校閲」(R)リボンの中に「比較」(M)>「比較(C)...」が有るけど中身はどうなのやら。
            WinMergeがそうですが、COM経由などで比較してる物もが有るかもしれませんね。

            あと、Office365ユーザーでPlus版を利用中なら比較ツールが公式で提供 [office.com]されてる。
            # SharePoint経由でGoogleドキュメントのように、同一ドキュメントを複数ユーザーで編集可能にもなったりと、Plusが有ると結構別物。

      • by Anonymous Coward

        > 差分を求める機能とは違うのかな?

        違いますよ。

        そのまんな履歴を管理するための機能です。
        その履歴管理の一部に差分比較もありますけど。

        個人的には Word/Excelの履歴管理をそのまま使うより、シェアポイントにつっこんでそっちで履歴管理するほうが、手元のファイルは履歴情報のないシンプルなものになるので、扱いやすいと思ってますが。

        • by Anonymous Coward

          校閲メニューの中に、変更履歴の記録というのがありますね。
          初めてみました。試しに使ってみようと思います

          • これ、使い方によっては便利なので、ぜひ活用してほしいんだけど、いろいろ問題もある。

            まず、管理できる版は、二つ(初版と最終版)しかない。
            三つ以上のバージョンを管理する場合は、他の手法と組み合わせるか、別の手法に完全に切り替えるかのどちらか。

            次に、バグっぽい動きがあって、レイアウトが崩れちゃうことももある。

            最後に、すべての変更履歴を記録できるわけでは無い、ってこと。
            しばらく使ってると、記録できないものについては、その旨ダイアログボックスで確認される場面に出くわすはず。

            ちょっとしたTipsとしては、書式の変更なんかについては、普段は表示させない方が良いかも知れない。
            画面表示が煩くなり過ぎるので。

  • by Anonymous Coward on 2019年04月20日 11時16分 (#3602669)

    自分ならGitでやるけど、まぁツールは何でもいいな。
    あの手のバージョン管理システムは普通にローカルでも動くから別にgitサーバーじゃないといけないわけじゃないもんね。

    この条件での既存のVCSとの違いを別に挙げると

    • ファイルがZipファイル(普通のVCSではバイナリ扱い)。
    • 各ファイルは独立している(別のファイルに依存しない)。
    • 古い版にアクセスする需要はあまりない。
    • Zipファイル内のファイル重複などのせいでファイルが大きくなりがち。
    • バージョンは日付で十分。他ファイルとの関係は割とどうでもいい。
    • オフィス側にはVCS連携機能はない(自前のバージョン管理ならある)。

    てな感じだ。
    比較的シンプルな要件。

    自分ならシェルスクリプトをいくつか書いて何とかするだろうな。

    • シェルスクリプトを回すと自動でバックアップする。
    • 単純に「長期研究計画書2019.xlsx」があれば「history/長期研究計画書2019.20190420.1056.xlsx」にコピーする。
    • コミットメッセージ的なものは「history/長期研究計画書2019.20190420.1056.最終版.xlsx」とかに自分でリネームする。
    • 一カ月ごととかにzip展開し、ソリッドブロックサイズが大きめの7z圧縮でもする(取り出してzipで再圧縮すると元に戻る。バグがあると履歴が全部消えるのでデバッグ・確認は念入りに)。
    • 履歴は全部フォルダ構造で表現する。整合性の問題が生じやすいメタデータは作らない。

    こんな感じかな。

    作る必要があるのは

    • 最終更新日が変更されている場合に日付付きでファイルコピーをするだけのシェルスクリプト/ドラッグアンドドロップできるやつでもいい。
    • zip展開して7zip圧縮するシェルスクリプト(拡張子を消さないように注意/念入りに確認)。
    • 7zipファイルから選んでzip圧縮しなおせるツール/面倒なら展開して全部圧縮しなおしてもいい
    • ついでに履歴にあるファイル名を一括変更するツールとかもあれば便利。

    割と簡単。
    バッチファイルやシェルスクリプトの"for"コマンドとコマンドライン版"7z"と日付日時の扱い方さえわかれば作れる。
    要するに「計画書.20190420.docx」みたいな普通の人がやってるバージョン管理と別に変らないんだが、ちょっと自動化すれば便利という程度。
    この辺りがちょうどいい感じだと思うな。

    ここに返信
    • by Ryo.F (3896) on 2019年04月21日 1時05分 (#3602976) 日記

      コミットメッセージ的なものは「history/長期研究計画書2019.20190420.1056.最終版.xlsx」とかに自分でリネームする。

      細かい指摘で悪いんだけど、「最終版」は無いわ。
      だいたい、そーゆー命名規則でバージョンを管理しようというのは破綻が目に見えている。
      間違いは無くならないし、未来は不確定なので、最終版だと思っても、それ以降変更が発生するかもしれない。
      なので、「最終版」的なファイル名による命名規則では「最終版」「最終版2」「最終版・最新」「最終版・修正中」みたいなものが出てきて破綻するよね。
      本当に「最終版」が決められるのなら、そもそもそれ以降バージョン管理をする必要は無く、ただ単に最後のバージョンを最終版だと思えばいいだけの話。
      なので、何かバージョンに区切りを付けるために名前を付けるにしても、「最終版」は無しなんじゃない?

      一カ月ごととかにzip展開し、ソリッドブロックサイズが大きめの7z圧縮でもする

      ここでいう「zip展開」ってのは、*.xlsxとか*.docxとかをzipで展開する、って話?
      それを再び7zで圧縮するのは、ディスク容量削減のため?
      今どきそんなケチらなくても良くね?
      まだzipで展開したものをVCSに突っ込むとか言うんだったら判らんでもない(実効性があるかどうかは未検証)けど。

      バッチファイルやシェルスクリプト

      なんでなん?
      今どきバッチファイルとか流行らんやろ。
      WSLもあるから、Windows上でもシェルスクリプトが使える、ってのは判らんでもないけど、
      どうせWindows前提なら、Powershellでよくね?

      あと、全体として、複数のメンバで作業することに対応しきれない気がするね。
      ブランチ機能も必要だって話だけど、どうする?

  • by Anonymous Coward on 2019年04月20日 14時14分 (#3602738)

    旧フォーマット(doc/xls/ppt)

    他の方が挙げてるけど、SharePointとかsvnでxdocdiffするとか
    基本そのまま蓄積で差分はツールでがんばる

    単体履歴はこれらがないときには重宝しそうだが、運用もふくめて習熟が必要かな...

    新フォーマット(docx/xlsx/pptx) / Office Open XML

    つまりはzipでxml+media
    なので、できればこうなってほしい

    * git-lfsみたいにフィルタするツールで、中身をリポジトリ管理
    * 簡易には素xmlでのdiffできる
    * もちろん、各状態でzipしたファイルを取り出せる

    こうなれば、mediaファイルは差分が不要ならデータサイズが増えにくいし、最悪それをlfsにさらに回せるとよいなと...

    まだ特には作られてないみたいだけど...
    # なので、実質は旧と同じになる

    でもEPUBもzipだし、OpenDocumentもあるんだから、どっかしらでこういうのサポートしてほしいね。

    ここに返信
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...