はてなダイアリーの記事をgithubでバージョン管理する。


githubcode repos のような公開リポジトリを使って、ブログに履歴管理機能を追加できるのではないかと考えた。この記事では、はてなダイアリーの記事をgithubでバージョン管理する方法を検討する。また、ブログ記事の履歴を公開するメリットについて考える。

この記事の履歴は、以下で参照できる。

これまでにやったこと

はてダラはてダロ

外部ファイルではてなダイアリーを更新する、既存の素敵ツールがあるので使う。

ライターとローダーは両方使いたい。でないとブラウザから更新したときに困る。が、ローダの方はログイン処理が古くて動かなかった。コードが基本は一緒だったので、一つにまとめた。

インストール手順

素のhw.plを使うこともできるが、Rakeでもうちょっと便利な環境を作った。

のDownloadボタンでtgzかzipをダウンロード。適当なディレクトリに展開し、

$ rake init

で初期化。生成されたconfig.txtを編集する。通常はIDのみ書き換えればよい。

$ rake load@2009-07-01

として、text以下にファイルをダウンロードできればインストール完了。@の後ろには、公開済みの日記の日付を指定する。

ディレクトリ構成

  • hw.pl …… はてなダイアリーライター(+ローダ版)
  • Rakefile
  • config.yml …… 設定ファイル。rake initで生成。
  • cookie.txt …… クッキーファイル。rake initで生成。
  • text/ …… データディレクトリ。rake initで生成。.この中をgithubで管理する。

config.yml、cookie.txt、textは.gitignoreに設定されているので、hatenadiary-writer をフォークして使うこともできる。

プレビューサーバ

rake server
rake server@ポート番号

でプレビューサーバが起動する。デフォルトでは8080で起動。

サーバはWEBrickはてな記法のパーサには、Text::Hatenaを使わせてもらった。というかText::Hatenaがあったから作った。

プレビューは以下のような感じ。意外と役に立ってる。

リンクにtitle:bookmarkがそのまま付いてしまうのが問題。リンク記法が認識されてない。あとで検討。

Rakeタスク

$ rake load@2009-06-30
$ rake load@20090630
$ rake load@./text/2009-06-30-foobar.txt

2009-06-30の記事を./text/2009-06-30.txtに保存する。@の後ろはTime.parseできるものなら何でもよい。

$ rake update

ちょっとした更新

$ rake release

通常更新。

$ rake status

更新対象のファイルを表示。

$ rake diff

更新対象のファイルと、公開されている日記のdiffを表示。

$ rake diff@2009-07-01
$ rake diff@20090701
$ rake diff@./text/2009-07-01-foobar.txt

2009-07-01*.txtと公開されている2009-07-01の日記のdiffを表示。

動機

最近書いた、

などの記事は、次のことを意識しながら書いていた。

  • ストックテキストとして書く。
  • 書きかけで公開し、反応を見ながら更新する。
  • 余計なことを書かない。自分で理解できるギリギリの記述で十分。YAGNI

上の記事は、思ったよりも評判が良かったので、この方法が向いているかもしれない。心の中でこれをイテレーティブ・ブログライティングと呼んでいる(カッコイイ)。

ストックテキスト

ストックとフローについては以下参照。

ブログに特別なインタフェースが無くても、ストック型のコンテンツを混ぜ込むことはできる。長いスパンで参照されるつもりで書き、同じ記事をメンテナンスし続ければいい。

ただ、記事の更新履歴を残せないのが難点だ。ストックテキストには、いちいち(追記)などと書きたくない。Wikiを更新するように更新したい。

はてなが記事のバージョン管理までしてくれる可能性は無いだろうなあ、などと思っていたのだが、今の世界には github があった。外部のリポジトリでバージョン管理すればいい。

アルファ版を公開する

公開しないとモチベーションが上がらない。意識して書きかけを公開するようにした。

(自分が書くような記事ではなく)本当に重要なドキュメントなら、パッチを送ってもらってドキュメントを更新してもいい。半Wiki的に。

ブログ記事の共同執筆は、記事がCodeReposのような公開リポジトリに入っていれば、簡単に実現できる。

動機まとめ

ブログの記事も、ソフトウェアの開発と同じようにイテレーティブに開発し、バージョン管理するといいことがあると思う。

TODO

実装済み

  • diff。何が更新されるかわからないと不安なので。
    • 実装した。hw.pl -D日付 で手元のtxtと上がってる日記のdiffを表示。
    • rake statusで、touch.txt以降に更新されたファイルを一覧表示するようにした。diffよりこっちをよく使うかも。
  • ファイル名を日付+名前にしたい。2009-06-29-HatenaGithub.txtとか。
    • 実装した。

この記事の履歴