Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

要求・要件の整理 #1

Open
key-amb opened this issue Jun 1, 2015 · 19 comments
Open

要求・要件の整理 #1

key-amb opened this issue Jun 1, 2015 · 19 comments

Comments

@key-amb
Copy link
Contributor

key-amb commented Jun 1, 2015

aozorahack/aozorahack#1 の続き。

「要求・要件の整理」にとどまらない話も上ではありましたので、そちらは別イシュー切ってもらってもよいです。
要求、要件というカタイ言葉を使わずに言うと、「青空文庫の工作員の方々(より一般的な雑誌・書籍の編集・校正作業を含んでもいい)がこのシステムを使ってこんなことができるようになったらよさそうだな」というものと、「それを達成するためにこういうシステムを作ったらよさそうだな」ってとこですかね。

議論のアウトプットはこのリポジトリ内(か、どこか)にドキュメントの形でまとめたいなと思います。

完璧に洗い出すことにはこだわらない方針としたいですが、これを元に設計を進めることができるようになったり、ゴールイメージをある程度みんなが共有できるようになったらいいなと思います。

@cognitom
Copy link
Member

cognitom commented Jun 1, 2015

議論のタネに、一番横着したパターンを提示してみます。アイデアソンではもう少し、WebをFatにする方向性だったのは承知しつつ書いているので、参考程度にしてもらえたらと。

編集・校正ツール

Webアプリに仕立てる場合は、これら要素技術の組み合わせに。

  1. aozora-flow (仮): Gitの手順を定めた規約とコマンド (@ksato9700 さんのアイデア、勝手に命名してスミマセン...)
  2. aozora.json (仮): リポジトリURL, 書名, 工作員名ほかのメタデータ規約
  3. 青空文庫テキストのパーサー + コンバータ: 例. txt2xhtml
  4. 青空文庫テキストのシンタックスハイライター
  5. 青空文庫テキストのプレビューワ
  6. diff ※既存ツールで十分?
  7. 旧字体・新字体変換
  8. 工作員向けGitHub/Bitbucketのサインアップマニュアル

工作員ネットワーク「工作院」

gemnpmを念頭に。書籍のGitリポジトリはそれぞれがGitHub/Bitbucket/独自で持っていて、バージョンタグのついたものだけ、中央サーバにコピーするイメージ。

  1. 工作員登録
  2. リポジトリ登録 (aozora.jsonを使う)
  3. 校正/素読み希望を出せる
  4. バッジシステム
  5. API

@ksato9700
Copy link
Member

@cognitom さん、まとめありがとうございます。aozora-flowの要件を考えていて少し疑問に思うところが出てきたので相談させて下さい。

管理するテキストデータの単位について

基本は青空文庫で言うところの「作品」だと思うのですが、それで問題ないですかね?ページ毎に分けて入力とか校正をできる様にするにはもう少し細かい単位になるのかも知れないと思いましたが、他の代案が思い浮かばず、取り敢えずは作品単位かなと思ってます。

変更者(工作員)情報の保持について

入力はシステム直接だけでなく、メールや郵送で送られてくる事もあるとの事。したがって誰か別の人がシステムに代理コミットする事が前提になります。となると、gitの変更者の情報が即ちテキストデータの変更者とはならなくなります。

これをgitの中でやろうとすると例えばauthorを必ず指定して実際の工作員の名前・アドレスを入れる様にする事になります。それで何かしら不都合はないでしょうかね…?

工作員のIDについて

EmailアドレスをIDにするというのは一案と思いますが、変わる場合もありますし、複数持っている人もいるので何かしら別のモノを振った方が良いでしょうか? 取り敢えずアドレスの想定で良いですかね?

もしこれらで何か気がついた事やご意見があれば是非。

@ksato9700
Copy link
Member

自己フォローになりますが、emailアドレスは個人を特定する情報になるので必須にするのはまずいですね。自ら認めた場合は別として、現在運用されている様に略称に留めておくのが良いのかも知れません。

@takahashim
Copy link
Contributor

あんまり文脈がわかっていませんが、青空文庫では工作員IDとして数値を振っています。ID自体は公開情報です。
http://reception.aozora.gr.jp/idlist.html

@ksato9700
Copy link
Member

@takahashim さん、ありがとうございます。工作員の方には既に連番のIDが振られていたのですね。参考になります。

@key-amb
Copy link
Contributor Author

key-amb commented Jun 3, 2015

みなさま、ありがとうございます。

@cognitom さんのアイディア - #1 (comment) は、基本 GitLab/GitBucket 的なモノをほぼそのまま使い、青空文庫の文書フォーマットに最適化された最低限のツールを用意する、というアイディアですね。
自分がプロトタイプと考えていたものに近いです。

編集・校正ツールについて

aozora-flow

たぶん git-flow みたいな、成果物たる電子書籍をパブリッシュしていく上での一連の手続きのことですよね。
モノができてから最適な形を探る、でもいいかもしれません。

aozora.json (仮): リポジトリURL, 書名, 工作員名ほかのメタデータ規約

これはちょっとよくわかってないです。
リポジトリそのものなのか、フォーマットなのか。後ろの方に aozora.json を使ってリポジトリ登録するとあるのですが、そこをもう少し詳細に説明いただくか、あるいは別の利用イメージを提供いただきたいです!

青空文庫テキストのパーサー + コンバータ: 例. txt2xhtml
青空文庫テキストのシンタックスハイライター
青空文庫テキストのプレビューワ

この辺り必要そうですが、既に利用可能なツールもありそうですね。
「シンタックスハイライタ」はまあ Web 側ではいい感じにやる、と。
プレビューも Web 上で見れるとよさそうですね。
例えば、release すると GitHub Page みたいに特定の URL を発行して Web 上で見れるようにしたらよさそうですね。

diff ※既存ツールで十分?

とりあえずは GitLab 等(Git)のやつで事足りるのではないかと。

旧字体・新字体変換

As Is でいいような気もしますが、なんらか変換しなければならないケースもあるかもしれませんね。

工作員向けGitHub/Bitbucketのサインアップマニュアル

つまり「工作院への登録」ひいては「工作院利用マニュアル」になるという理解でよいでしょうか。
必要だと思います。

工作員ネットワーク「工作院」について

gemやnpmを念頭に。書籍のGitリポジトリはそれぞれがGitHub/Bitbucket/独自で持っていて、バージョンタグのついたものだけ、中央サーバにコピーするイメージ。

この辺り、自分のイメージできていないところです。
各自がローカルPC上にGitリポジトリを持つということでしょうか。
gem or npm は何をしてくれるのでしょう?

なんとなくですが、Web 側を API 中心に提供するか、Web UI での操作を前提にして作るかを、まず方針として決めた方がいい気がしています。
そしてなんとなく @cognitom さんは API を中心にクライアントで頑張ることを考えてらっしゃるのかな、と想像しています。

これはプロトタイプ段階では GitLab or GitBucket でどちらがやりやすいかで決めればいいかな、と思います。
が、もし API 中心に作るとしたら、クライアントも作らないといけないですね。(最初は Atom のイメージでしょうか。)

以下はこちらを踏まえてコメントします。

工作員登録

必要ですね。

リポジトリ登録 (aozora.jsonを使う)

必要ですね。

校正/素読み希望を出せる

"aozora-flow" とも絡みそうですね。
GitHub 的な発想だと、どんどんいじって Pull Request したらいいのでは、と思いますが、ワークフローを整理したいですね。

バッジシステム

あまり難しいことは考えてないですが、とりあえずは GitHub っぽく commit 数が可視化できればいいかなぁと。
スターをつけたりとかもできるとよさそうですね。
この辺りはアイディアを募りたい気がします。

API

API ベースで作るなら必須ですね。
Web UI ベースで作るなら、必須ではないと思いますが、Web UI ベースで作るとしても必要そうな API 機能があればご示唆いただきたいです。

@key-amb
Copy link
Contributor Author

key-amb commented Jun 3, 2015

@ksato9700 さんのコメント #1 (comment) について。

管理するテキストデータの単位について
基本は青空文庫で言うところの「作品」だと思うのですが、それで問題ないですかね?

自分もそのイメージでした。
ファイルはひょっとしたら chapter1, chapter2 など分かれるかもな、と思いましたが、まだ曖昧です。
シリーズ物をどう扱うかは、一考の余地があるかもしれません。

変更者(工作員)情報の保持について
入力はシステム直接だけでなく、メールや郵送で送られてくる事もあるとの事。したがって誰か別の人がシステムに代理コミットする事が前提になります。

なるほど。全然考えてなかったです。
Git の Author, Committer の区別が適用できるとわかりやすいですね。
システム的には容易に詐称できそうなのが気がかりですが、そこは性善説でいいですかねぇ。。
とりあえずはこの案をベースとしていいかと思います。

工作員のIDについて
EmailアドレスをIDにするというのは一案と思いますが、変わる場合もありますし、複数持っている人もいるので何かしら別のモノを振った方が良いでしょうか?

メアド or 工作員ID を UNIQUE なものとして扱えそうですね。
工作員IDを持ってない人への考慮も必要ですが。
少し悩ましいですが、比較的細かい仕様部分なので、後回しでもいいかなぁと思います。

@cognitom
Copy link
Member

cognitom commented Jun 3, 2015

@key-amb さん、コメントと整理ありがとうございます! 長くなりそうなので、議論を分割した方がいいかもしれませんね。と言いつつ、とりあえずこのまま返信しちゃうことををお許しください。

aozora.json

aozora.json (仮): リポジトリURL, 書名, 工作員名ほかのメタデータ規約

のところですが、npmのpackage.jsonにあたるマニフェストファイルを想定していました。イメージとしてははこんなやつです。

{
  "name": "高瀬舟",
  "version": "1",
  "status": "released",
  "author": "森鴎外",
  "transcripter": "cognitom",
  "corrector": "someone",
  "repository": "git://github.com/cognitom/takasebune",
  "format": "aozora-text"
}

工作員ネットワーク

この辺り、自分のイメージできていないところです。
各自がローカルPC上にGitリポジトリを持つということでしょうか。
gem or npm は何をしてくれるのでしょう?

Gitサーバは各自が用意するつもりでいました。ここがちょっと私の認識のずれていたポイントかもしれません。著作権の残ったものが念頭にあったので...。参考まで、npmnpm publishコマンドで、npmのデータベースへの新バージョンの登録を受け付けています。そうすることで、npmは面倒なリポジトリ管理を本体から切り離しています。(GitHub以外にも、Bitbucketや独自のGitからも登録可能です)

GitHubやBitbucketであれば基本サインアップするだけで使えるので、マニュアルを整備すればなんとかならないかな...と。その辺単純化した、工作員向けのGitサーバを用意するのもありです。

編集・校正はWeb? クライアント?

そしてなんとなく @cognitom さんは API を中心にクライアントで頑張ることを考えてらっしゃるのかな、と想像しています。

ですね。最終的にはWebですが、先にクライアントで作っちゃった方が、早そうだと見てます。最小ステップとしては、幾つかのCLIコマンドの開発くらいなので、どちらかというと「頑張らない」ためかも。(ただ、そのままコマンドを工作員の方に叩いてもらうわけにはいかないので、atomのプラグインかelectronアプリ他で、ラッピングする必要はあります)

@key-amb
Copy link
Contributor Author

key-amb commented Jun 3, 2015

おおお、なるほど! やっと本質的な違いがわかったような気がします。

GitHubやBitbucketであれば基本サインアップするだけで使えるので、マニュアルを整備すればなんとかならないかな...と。その辺単純化した、工作員向けのGitサーバを用意するのもありです

プロトタイプとして、サーバ機能は GitHub 等を使って、あとはクライアント側で頑張った方が速い、という発想ですね。
自分は GitLab/GitBucket と言ってるのになんでだろうと、気になってました^^;

それはそれで全然アリだと思いますね。
が、サーバ機能とクライアント機能を両方盛り込んで1つのプロジェクトとして進めるのは難しいかな(私の手に負えなさそう)という気がしています。

「工作院」の方はサーバ側で頑張るプロジェクトとして、それとは別にクライアント側で頑張るプロジェクトを作るのはいかがでしょう?
最終的に両者が結合できればなお良いですが。

クライアント側でどう要求を実現するのか、自分はイメージできていないところがあるのですが、おそらく @cognitom さんの中にはあって、勝算があるのではないでしょうか。
もし、そうであれば、たぶん「工作院」よりも早く出来ると思います。

仮にリポジトリが分かれても、お互いに進捗状況など情報共有して、「工作院」側としては適宜アドバイスなど頂ければな、と思います。

ご一考下さい。
よろしくお願いします。

@cognitom
Copy link
Member

cognitom commented Jun 4, 2015

いくつかの要素技術を切り出した方が良さそうですね。

@ksato9700
Copy link
Member

たぶん皆さんでホワイトボードの前で議論した方が早い気もするのですが、@cognitom さんの「npm pubilshのイメージ」で「各自がgitリポジトリを持つ」とした時に、どんな構成になるのか少し考えてみました。そして、いまだに大きな勘違いをしている気もするのですが、取り敢えず絵にしてみました。

元々の私の想定は全ての作品のテキストデータが入ったリポジトリが一つだけあるのかなと思っていました。ですが、各々が持つとすると全てをCloneするのは無駄すぎるのできっとGitリポジトリは作品単位になりますよね。自分が入力したい作品のリポジトリを共有リポジトリサイトに作りそれを手元にCloneしてくる。そして入力後、push。校正もそこからcloneしてきてPushで戻す。

そして出来上がった作品のテキストデータは npm publish的にaozora.jsonのメタを付けて別の「完成品置き場」にpushされるのかなと思いました。これもgitベースで作っても良いと思いますし、単にNoSQL/SQL DBで作っても良いのだと思います。

そしてAPIサーバーの方はこの完成品DBをバックエンドに持ち、フォーマット変換や統計情報処理などしながらデータ提供する、といったイメージです。

この想定だと、Aozora-flowとして必要なのは前半の入力や校正を行うためのgitリポジトリの為のルールという事になります。その詳細に入る前にここまでの想定が大きくずれていないことを確認したいのですが、いかがでしょうか? > @cognitom さん、 @key-amb さん

@cognitom
Copy link
Member

cognitom commented Jun 4, 2015

わお! @ksato9700 さん、ありがとうございます!!
私のイメージしていたそのものズバリな感じです。aozora-flowについて、リポジトリ作成のIssueを立てても良いかもですね。

@ksato9700
Copy link
Member

@cognitom さん、ご確認ありがとうございます。それほどズレていなくて良かったです。

aozora-flowはgit-flowの流用で行けるような気がしていますが、仕様の明確化などのためにリポジトリあっても良いかもしれないですね。ご助言ありがとうございます。

@cognitom
Copy link
Member

cognitom commented Jun 4, 2015

絵を見て気がついたんですが、「工作院」の指すものとして、

  • @key-amb さん:「共有リポジトリサイト」
  • 私:「完成品置き場」

のところがずれちゃってたんですね、たぶん。もしかすると @key-amb さんの考えてらっしゃるのは「完成品置き場」も含めたものなのかな...?

@key-amb
Copy link
Contributor Author

key-amb commented Jun 6, 2015

@ksato9700 さん、整理ありがとうございます!
少々自分が考えていたものと違いました。
更に混乱を招いてしまうかもしれませんが、自分もイメージを伝えるためにお絵かきしてみました。

default

「工作院」の指すものとして、

  • @key-amb さん:「共有リポジトリサイト」
  • 私:「完成品置き場」

のところがずれちゃってたんですね、たぶん。もしかすると @key-amb さんの考えてらっしゃるのは「完成品置き場」も含めたものなのかな...?

なるほど。 @cognitom さんは工作院を「完成品置き場」として考えてらしたのですね。
確かに自分は図の通り、「工作院システム」≒「共用リポジトリサイト」と考えていたので、そのズレがあったようですね。
…で、自分は「工作院」に GitHub の release (tag) のように、校正を経てパブリッシュされた完成版も置かれていくと想定したので、その意味で「完成品置き場」も含んでいると言えるでしょう。

さて、自分のイメージがお2人の考えていたものと違ったことがわかったので、一旦私の案は置いておいて、お2人の案(というか @ksato9700 さんの図)をベースに考えてみます!
以下では、私が「工作院システム」と考えていたものは、「Web UI 付き共用リポジトリサイト」と呼ぶことにします。

  • 「共用リポジトリ」は Git そのものでよさそうですね。
  • 「工作院」は工作を行う場ではなくて、工作した成果 = 完成品を置く場ということですね。

これはこれでアリなのではないかと思いますが、いくつか気になる点が出てきました。ので、以下に挙げます。

  • 共用リポジトリのアクセス制御はどうするんだろう? 全公開になるのだろうか。著作権が切れてないものがアップロードされたとき、制御可能なのだろうか。
    • これは以前のコメントで @cognitom さんが仰ってた各自が GitHub/BitBucket を使う場合でも問題になりそうで、この問題を回避するには、私は「共用リポジトリサイト」で制御するのが手っ取り早いと考えています。
  • 基本は各クライアント環境で作業するのだと思いますが、元々の構想にあった「複数人で同時に入力・校正する」という機能を上手く満たすことができるのだろうか? 「Web UI付き共用リポジトリサイト」上でマージ作業をするのではなく、各自のクライアント環境でマージ作業をするのは、難しいのではないかと思います。
    • 例えば、自分以外の人の差分も手元でマージしなければならなくなるのではないでしょうか?
    • あるいは、常に共用リポジトリのHEADを正として、各自がそれに fast-forward で差分を積んでいくのかもしれません。その場合、誰ひとり差分をチェックしないという状況も生まれかねないのではないでしょうか?
  • また、この構成だと、「工作院」へのリリース作業は、基本的に1人で行われるものになりそうです。校正が十分でない作品や、最後にリリースした人の手によって、おかしな差分が入った作品がリリースされないか心配な気がします。
  • そもそも、git-flow を非エンジニアの人は到底使いこなせない(そもそも Git の概念を理解するのが困難)と思うのです。aozora-flow はもっとずっと簡易なものになるとは思うのですが、PCが使える工作員の方みんなが簡単に使えるものができそうでしょうか?

ひとまずこんなところでしょうか。
これらの懸念に対する考えはぜひ伺いたいです。

で、それらが解消されるとしても、やはり私が最初に思い描いたものとは違ったものになりそうなので、「公開作品置き場としての『工作院』」の方も、kosakuin とはリポジトリを分けた方がいいのではないかな、と今は思っています。

長文になりましたが、以上です。
よろしくお願いします。

(みなさんの都合が合えば、下北沢辺りでディスカッションしたいところではありますが。。いったん非同期で。)

@ksato9700
Copy link
Member

仰るように同期でお話できると早いと思いますが、まずはここで続けてみます。

私も実は最初は @key-amb さんと似たようなイメージを持っていました。共有リポジトリがすなわちAPIサーバのバックエンドにもなる。ここは今後の議論次第と思いますが、その可能性も無いわけじゃないと思います。READMEにaozora-flowの最初のアイディアをあげてみましたが、masterブランチ上でPUBLISHEDタグの付いているものは公開できるファイルなのでそれをそのまま公開サイトから参照するという方法もあるかと思います。

そして「幾つかの気になる点」として挙げられているポイントに関してコメントしてみます。

  • 「共有リポジトリサイトのアクセス制御」に関してですが、例えば著作権切れ以前の作品に関してはGitHubのprivate repositoryを使うようなイメージで考えていました。不特定多数ではない、極限られた数のメンバの間でしか共有しないリポジトリで作業を進めるイメージです。
  • マージの作業に関しては、出来る人は手元でやっても良いかもしれませんが、基本は「プルリクエストを送って中の人がマージ」と考えました。最初はgit-flowのように git feature finishまで手元でして、conflictも自分で解消して共有のブランチ(git-flowで言うところの"develop" aozora-flowでは"edit")にマージするところまでローカルでと考えていました。ですが、仰るようにそれは入力だけする人にはハードルが高いので、各々の作業ブランチで入力だけしてそれを送ってもらうだけにする方が良いかなと。逆に「中の人」の負荷が高くなりますが、ほとんどの場合はtrivial mergeでしょうし、そこに何かしら自動化する or 負荷軽減のツールを導入できるかと思います。
  • 不完全なものがリリースされてしまうリスクに関しては、自動検証ツールの拡充がひとつかなと思います。Travis-ci的なCI環境と組み合わせてeditブランチへのコミットに対しては必ず自動検証をかけるなど。あとは、不具合のあるものリリースしてしまった時に素早くtake backして修正してreleaseし直すプロセスを作っておくとかでしょうか。
  • 非エンジニアの人に使いこなせないだろうというのは私も懸念するところのひとつですが、aozora-flowはベーシックな仕組みだけを用意して、その上のツールで何かしらカバーできたらなと希望的観測で考えています。 😁

以上です。

@cognitom
Copy link
Member

cognitom commented Jun 6, 2015

@key-amb さん、一度、同期でお会いしたいですね。下北沢歓迎です :)

たしかに、アクセス制御については考える必要があります。受け入れ可能な、著者名を限定するとか、公開を承認制にするとかいくつか手はあるかも。あまりまだ深くは考えてないのですが...

どちらの方向性もあり、というか、要素技術を切り出してちまちま出していくか、まるっと出していくかの違いかな、とも思います。一旦、アイデアが出尽くしたところで、車輪の再発明をしなくて良いよいうに、プロトコル的なところの調整をしたいなと、いう感じでしょうか。

@ksato9700 さん、「ベーシックな仕組みだけを用意して、その上のツールで何かしらカバーできたらなと」に私も期待するところです。

@key-amb
Copy link
Contributor Author

key-amb commented Jun 11, 2015

@cognitom @ksato9700 さんと昨夜、下北沢のOSS Cafe で話して、方針をすり合わせました。
議論のメモは こちらのGist に置きました。

基本方針としては、 @cognitom さんが言うところの「完成品置き場」の実現をまずは目指すとします。
@ksato9700 さんの図 で言うと、「公開用DB」に近いです。

もう少し詰めないといけないところはあると思いますが、このイシューはちょっと伸びすぎているので、いったんクローズした方がいいかなと考えています。追って整理します。

@cognitom @ksato9700 さん、昨夜はありがとうございました!!

@cognitom
Copy link
Member

こちらこそ、ありがとうございました! お会いできて良かったです :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants