Merge changes from gotochika into master

Dominick Chen authored
revision ac6bdac5de9877ffd2e49adcdecf6b21c542f5a4
document
#dotplace#19
##「神はDiff(差分)に宿る」

!["git-difftool in action" by heipei (CC:BY-SA)](https://farm4.staticflickr.com/3346/3236351860_90f114d5c1_b.jpg)

 前回に続き、文章の書き手の視点から、Git的リアリティを更に追究していきましょう。
 前回の記事をPenflipに上げたところ、担当編集の後藤さんとの校正のやり取りがすごく楽だったことと、筆者の知人から誤字と表現の指摘を受けることができました。ただ、今回のような単純な文字校正のみであれば、Google DriveのDocsを使った方がユーザー登録のステップや新しいインタフェースを覚えるコストもかからずに早かったかも知れない、とも思いました。
 筆者は実際にGoogle Driveを使って、社内の企画書やサービス内で使用する文言、それに顧問弁護士との契約書や利用規約などをコライティング(Co-Writing、共同執筆)しています。メールにWordやPages(OSXのワープロソフト)のドキュメントを添付するというのは面倒くさ過ぎますし、Dropboxで非同期に同じファイルに編集を入れていくとバージョン衝突が起こって大変なことになります。最近、AppleのiCloud.comが進化していて、Google Drive的な同期編集が可能になりましたが、いかんせんコメント機能が付いていないので、お互いが勝手に編集して終わってしまうという感じで、仕事では使えません(ただし、Keynoteでスライドを作る場合には、iCloudで共同編集するとiPad やiPhoneでも再生したりできるので、かなり使えます)。
 それではリアルタイムに同期編集もできて、Wordのように「解決」することもできるコメントが非同期で付けられ、しかも変更履歴のバージョンを行き来することもできるGoogle Docs一択なのかというと、そうでもありません。Google Docsの問題点は、本文の変更を誰が最終的に決定するのかが分からないという曖昧さを抱えている点にあります。明確に書き手(意思決定者)とアドバイザー(コメントする人)が分かれていれば、前者が後者のコメントを受けて本文に追記したり削除すれば良いのですが、多くの場合において両方の立場が混在します。
 もっというと、どのようにも使えるDocsの自由度が、逆に混乱や曖昧さを生む原因にもなっているのかと思います。よくあるのが、一つの最終目標をメンバーでコライティングしようという時に、同じDocs内にお互いの複数のバージョンが散らかり、フォントの色やサイズのスタイリングも混在して、結果的によくわからない状態に陥るという場合です。それでは百歩譲って、頑張って書き散らさないようにDocsを使いこなし、一つの文章ブロックを精錬させてったとしても、もう一つ重要な欠点がありました。それはDocsの変更履歴の表示機能がイマイチなことです。
 まず、Docsではあるバージョンから別のバージョンに移る度にローディング表示が入ってページが更新されるため、どこがどう変わったのかが直感的に追いづらいことが挙げられますが、より重要なこととして、各バージョンの意味が、単純にひとまとまりの編集が自動保存されたタイミングでしかない、ということです。そこには意味のある差分も、無意味なものも、等価に扱われるので、それぞれのバージョンの「メッセージ」が見えづらいのです。実際、Docsの変更履歴は上手に使えた試しがありません。
 まさにこれらの点こそがGitが「バージョン管理」と呼ばれる所以が発揮されるところです。Gitではいくら変更を加えても、意図的にコミット(差分を新しいバージョンとして登録)しない限り、新しいバージョンは発生しません。そして各コミットにはメッセージを付けることが推奨されており、他者だけではなく自分自身のためにも各バージョンの意味を自ら記述する慣習が身に付くと、後からコードを見返す時に可読性が高まるようになります。他者の書いたプログラムのコミットログを追いかける行為には、その人の思考のプロセスを見ているような感覚が付随するように感じます。そして、その人プログラムがどのように構築されていったかということを順序立てて観察できることは、読み手にとっても高い学習効果を生みます。
 そして、Gitではコミット毎の差分はDiffと呼ばれ、追加された行と削除された行の一覧として表現されます。よく見られるのは赤色が削除された箇所で、緑色が追加された箇所を指します。更にカスタマイズを施すと、同じ行の中での差分が更に見やすく表示されるようになります。GitベースのGithubでももちろん、同様の表現を踏襲しており、ブラウザ上でブロック毎に整形してくれるため、CUIよりも一般的に見やすい表示になっています。Gitは、技術的にも差分情報のみを保存していくために旧来のバージョン管理システムよりも軽量という優位性がありましたが、使う側としても差分にのみすぐに注目できる表示形式なため、バージョンを見返す時に求めている情報に集中することができます。
 ところでGitベースであるPenflipでもコミット毎の前後のDiffをGit的なカラーリングで見せてくれるので、Gitに慣れている目からすると差分がスッと目に入ってくるのですが、GitやGithubとは異なり、そしてGoogle Docsと同じように、全文の中に差分が表示されるため、パッと見て全体の変更履歴が把握しづらいと感じました(実際に、知人からのプルリクエストには2点の変更が提案されていたのですが、上部ページのものに目をとられて下部ページのものに気付けませんでした)。この点はPenflip上のディスカッションに意見を提出しておきましたが、長文になればなるほど細かいDiffを一覧する機能が欲しくなる気がしています。

![CUI](https://dl.dropbox.com/s/lhmhkvxt80ksh8d/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202014-07-15%2000.18.55.png)

![Github](https://dl.dropbox.com/s/3h1xvc5yyhv5lqy/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202014-07-15%2000.14.12.png)

![PenFlip](https://dl.dropbox.com/s/4gh7f8w1tvt3yw4/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202014-07-15%2000.16.56.png)


 もう一点、Gitに基づく作業がGoogle Docsより優れていると言える点は、意思決定者とコメンターの立場の違いが明確になっていることです。DocsやWikiでは誰しもがいつでも編集できてバージョンを区切れてしまうがゆえに生じる混乱がGitでは構造上起こりません。この点は、複数人で一つのゴールに向けて複数のバージョンを提出しあうコライティングの場合にはどのように作用するでしょうか。次回はこの「各々が書き手になり、相互に読み手となる」というコライティングの可能性について考察したいと思います。