Fuzoku実践入門ブログ

Amazon で好評発売中の『Fuzoku実践入門』に関するエピソードなどを紹介するブログです。

MS Wordで書かれた原稿をテキストファイルでGit管理する

MS Wordで書かれた原稿を電子書籍化する作業を行ったのですが、個人的には使い慣れたRe:VIEWで管理したいものです。

そこで、MS Wordをテキストファイル化してRe:VIEWファイルに書き換えることにしました。

docx2txtを使ってMS Wordをプレーンテキストに変換する

ワードファイルのテキストをコピペしてテキストファイルに置き換えるのは流石に面倒ですし、ヒューマンエラーも発生しそうです。

そこで、何か良い方法はないかと思って、おもむろにGoogleで『docx2txt』と検索してみると、まったく同じ名前のソフトウェアを発見することができました。

ページはややレトロですが、ツール自体はメンテナンスもされているようで、これを導入することにしました。

リポジトリ作成

まずはリポジトリの作成です。とりあえず、次のようなファイル配置をしました。

.
├── Rakefile
├── script
│   ├── docx2txt.pl
│   └── docx2txt.sh
└── src
    ├── Chapter1.docx
    └── Chapter2.docx

そして、Rakefileには次のようなスクリプトを書きました。

require 'rake'

desc 'convert ./src/*.docx to ./src/*.txt'
task :docx2txt do
  Dir.glob('./src/*.docx') do |docx|
    txt = File.basename(docx).sub(/\.docx$/, '.txt')
    if File.exist?("./src/#{txt}")
      puts "#{txt} exist."
      sh "rm ./src/#{txt}"
    end
    sh "./script/docx2txt.sh #{docx}"
  end
end

テキストファイルへの変換

ファイルの配置が終ったら、rake docx2txtコマンドを実行。

$ rake docx2txt
./script/docx2txt.sh ./src/Chapter1.docx

Text extracted from <./src/Chapter1.docx> is available in <./src/Chapter1.txt>.

./script/docx2txt.sh ./src/Chapter2.docx

Text extracted from <./src/Chapter2.docx> is available in <./src/Chapter2.txt>.

すると、

.
├── Rakefile
├── script
│   ├── docx2txt.pl
│   └── docx2txt.sh
└── src
    ├── Chapter1.docx
    ├── Chapter1.txt
    ├── Chapter2.docx
    └── Chapter2.txt

こんな感じで無事にテキストファイルが作成されました。

とりあえず、これをコミットしておけば、今後もしワードファイルが更新されても、差分を確認することが可能になりました。

なお、docx2txt自体はファイルを上書きしないように作られていますが、Gitで管理していれば、上書き上等なので、Rakeの中でファイルの存在を確認し、削除するようにしました。

まとめ

MS Wordをコピーして貼り付けると、記号文字がちょっとアレな感じだったのですが、docx2txtを使って変換すると、いい感じに変換してくれたので、編集作業もとても楽に行うことができました。

作業が終ってから、この記事を書くにあたって調べてみると、docx2txtを使ってgit diffで直接差分を表示するという方法を紹介している記事を見つけたりして、人によってはこれだけで十分嬉しいかと思います。

やり方は他にも色々とあるかと思いますが、今回私が実際に利用した方法を紹介してみました。

追記

d:id:zariganitosh さんにコメントで、 テキストでないファイルのdiff(差分)をとる方法 - ザリガニが見ていた...。という記事を紹介していただきました。(コメントで すいません、リンク先の方法と同じでした。未承認としておいてください。 といただいたのですが、折角なのでこちらでご紹介させていただきます。)

上でリンクした記事と根本的な手法は同じですが、Word以外のバイナリファイルをGitで差分を確認する方法が紹介されています。