編集者がGitHubを使えないなら、penflipで本を執筆すればいいじゃない

可能と適切の差異

近年ではブログ記事をGitHubで管理している人は珍しくない。さらには、GitHubを雑誌の連載記事や書籍の執筆に利用する人も増え始めている。 文章の変更履歴管理にGitの差分管理はうってつけではあるし、後者のような複数人での作業時にこそGitHubの腕の見せどころである。 また技術者との共著の場合において、GitHub上でコミュニケーションが完結するのは極めて都合が良い。馴染みのあるUIと手順で本が書けるので、Gitを使い慣れた技術者にとっては不満はないはずだ。 しかし、そこに編集者を介するとなると少し面倒なことになる。 @naoya_itoさんも言及していたように、GitやGitHubを使いこなせる人は多くないという現実に突き当たるのだ。 Gitの学習コストは皆さんが思っているより高くつくので、「編集者の皆さんにGitを勉強してもらおう」という意見は些か乱暴である。 そもそも、GitHubはコードを置くための場所なのであって、本の執筆に最適化されているわけではないということも注意されたい。 ともすれば、Gitを使わないGitHubライクな本を書くためのサービスが必要だ、という話になる。 そして、それがpenflipである。

penflipを使ってみて

この散文を書く際にpenflipを利用したので、以下にその感想を書くことにする。大半がGitHubとの違いの説明が占めている。 感想を述べる前に、「今現在GitHubで執筆をしている人達がわざわざ移行するほどではないが、少なくとも近い将来この手のサービスが求められるだろう」という個人的な見解を述べておく。

全てがWebで完結する

GitHubは優れたサービスではあるが、ほとんどの人がREADEMEの編集であってもローカルのファイルを編集し、terminalからgitにまつわる大袈裟な所作をするはずだ。(webで完結させることも可能ではある。) その点、全てがweb上で完結するpenflipは大変都合が良いし、markdownでの文章入力に最適化されたUIになっている点も素晴らしい。 また、プロジェクトを章で分けた時の見通しの良さはGitHubには無い利点である。 さきにも述べた通り、文章を書くことに最適化されたサービスなので、執筆という行為に集中して取り組むことが出来ると言えるだろう。

commiという概念の欠如

penflipにおいては保存は常に上書きで、最新の文書以外の履歴を参照することは出来ない。 ⌘+S を押すと入力中の文章が保存されmasterが更新される。 恐らくこれは意図的な機能削除だろう。 文章を保存する度にcommit messageを聞かれるのは面倒であるし、少なくとも僕の経験上、散文を書いている時に「あの時の文章を復元したい」と考えることは無い。 そういう意味で、僕はこの機能削除には肯定的である。

共著のための機能はあるが........

さて、commitが無いと聞いて「Pull Requestを送りたい時はどうするの?」と思った人もいるだろう。 penflipではMake Changes(fork)とSubmit Changes(push)を使い、Authorに変更リクエストを送信することが出来る。(Pull Requestという言葉は用いない) AuthorにSubmit Changesする際には任意のコメントを書くことが出来、さらに文章をドラッグした位置に一言のコメントを残すことも出来る。 蛍光ペンで場所を示し、ポストイットを貼ってコメントをするようなものだと考えると分かり易い。 issue機能はないが、Chatと呼ばれるdiscussionをするための場所はあるので、ファイルの変更を伴わないコミュニケーションも可能である。

branchという概念の欠如

さきのSubmit ChangesはいわゆるPull Requestを送る行為と似たようなものだが、branchという概念の欠如していることが大きな違いだ。 penflipでは常にmasterで作業することになる。これはcontributorも同様である。 ほとんどのケースではmasterで作業しても問題は起きないが、プロジェクト参加者全員でプルリク運用しようとすると面倒なことになる。 branchという概念が無い上に、Project(repository)はAuthorに強く紐づくせいで、同じ権限を持ったcontributorが他に居たとしても、Authorはmasterで作業することしか出来ない。 そのため最初にProjectを作ったAuthor、この記事で言えば僕(nekova)は誰かにレビューをしてもらうことが出来ない。 これは大変不便だと感じたが、ダミーのアカウントを作りProjectを作成し、他の全てのユーザをcontributor(権限はadmin)として追加することで相互レビューを実現することが出来るようだ。

より込み入った話をしよう。branchを切れないせいで執筆時に極めて面倒な問題が生じる。 たとえば、僕がpenflipにてRails3の本を執筆したと仮定しよう。今更Rails3.xの本を買う人は多くないので、全ての項目をRails4.xに対応した記述に改訂することにした。 ところがどっこいpenflipにはbranchという概念がないので、新しいbranchを切って改訂作業を進めることは出来ない。また、commitという概念がないため、どこまでがRails3.xの履歴で、どこからがRails4.xの履歴なのか分からず、復元も出来ない。 この場合は、Rails4.x対応のために新しいプロジェクトを立ちあげるしかないだろう。 あなたがする最初の作業はもちろん、本の記述を全てコピーして新しいProjectにペーストすることだ。おそらくChat等のコミュニケーション履歴をimportする機能はないので、必要ならばそれらを逐一コピーする羽目になる。 考えるだけで面倒だが、こうする他ない。

日本語であるが故の問題

Google日本語入力との相性が芳しくない点は非常に残念である。 penflipの場合は、文章を入力している位置の真上にGoogle日本語入力による補完が被って表示されてしまうせいで、かなりストレスが溜まる。 また、⌘+→で移動すると入力位置が正しく表示されなくなる場合があり、これもひどく残念である。 このような日本語の問題は新しいEditorに触ると必ずと言っていいほど直面することになるので慣れっこではあるが、Webサービスなので運営の対応を待つしかないのが辛いところだ。

結論

今現在GitHubで執筆をしている人達がわざわざ移行するほどではないが、少なくとも近い将来この手のサービスが求められるだろう。 この記事を書く前は、commitやbranchという概念があるものだと思っていたが、penflipはよりシンプルな作りになっているようだ。 GitHubライクなサービスというよりは、複数人で書くために拡張されたブログライクなサービスと呼ぶ方が語弊がないかも知れない。 ちなみに履歴はnekova/penflipで管理しているので、誤字脱字等の誤りがあった場合はこちらにPull Request(それに対応する言葉が存在しないのも辛い)を送って頂ければ幸いである。