ogochan
「情報共有システム(まだ名はない)」はJupyterにあるセルの種類以外のものもセルに出来るようにしたいと考えています。
ちなみに、今Jupyter(lab)にあるセルの種類は
- コード
- markdown
- 生データ
- タイトル
です。私はこの他に、
- 表
- フォーム
を付加したいなと考えています。他に「コード」はサーバ(kernel)で動くものの他に、フロントで動くものも必要だと考えています。ちょうどObservableやstarboard-notebookのようなものです。まぁこの辺は「あれも、これも」と言うよりは「必要なら何でも追加できる機構」を用意する方が良いとは思いますけど。
ここがそこそこ動くようになってから公開しようと思っています。
とりあえず今は「表」と「フロントで動くコード」を実装しようとしています。
「表」の必要性
「表」となると、やっぱりExcelっぽいものを想像します。
JupyterでCSVを扱う時、だいたい外部ファイルとして使うようになっていて、内容の編集は外部のプログラムで操作するのが普通じゃないかと思います。Jupyterだとそれは読み込むだけ。でも、規模によりますが、これをセルの中で自由に編集したいなと思うことはないですか?
また、日本人はExcel大好きで、Excelで何でも作ってしまいます。「表にまとまる」というのは、それはそれで見易いですからね。また、特に「表」としてでなくても「フィールドの説明とフィールドが並んだもの」がいくつか並ぶのは、わかりやすいですよね。Excelで嫌われがちなのは、全てを1枚のシートに納めようとするあまり、セル結合を多用してしまうということもあると思いますが、同じページにいろんな幅の表が書けるようになっていれば、そういった有害なセル結合はいらなくなるでしょう。
あるいはMarkdownでtableを書くこと、結構面倒臭くありませんか? 何かちょっと間違うとgdgdなものになってしまい、書き方が悪いと「どこが悪かったか見つけられない」みたいな目にあったり。tableなんだからもっとtableらしく編集したいなと思います。
まぁそんなわけで、「Excel的な表」結構優先度高めの機能だと思っています。
「表」という部品
ところが、この「Excel的な表」を結構大変です。
まず第一に種類が多過ぎるのです。
こういったものを集めたサイトに「jspreadsheets.com」というのがあります。ここのトップページを見ると、「3×17」の51種類並んでいます。これだけでも多いですが、Grid.jsやXToolsetのようにここにない大物もいます。どれを選んで良いかよくわかりません。
部品選択の要件
いろいろ種類があって全てが使えるとは限りません。
オープンソースにありがちの「オーファン(orphan)ソース化」したものや「賞味期限切れ」のものは、うっかり手を出さない方が安全でしょう。
オーファンソース化してしまったものでも、素性が良ければ「本家のバージョンアップ」を心配することなくいじり倒せて良かったりします。しかし、流行り廃りの早いウェブフロントエンドの世界だと、オーファンソース化と「賞味期限切れ」はほぼ同義だったりするので、避けておいた方が良いでしょう。逆にあまりに新しいのも、まだ世間で評価されていないという意味でもあるので、ちょっと手を出し辛いです。
特定のフレームワークに依存したものは、いくら混ぜ書きが出来るかも知れないとは言え避けた方が無難です。また、今時jQueryとか言われても、せっかく他でjQuery依存を消して来た手前ちょっと勘弁して欲しいところです。ライブラリ名に「React」とか「jQuery(jq)」とついてると、敬遠したくなります。
ライセンスというか提供形態は大事かも知れません。
この手のライブラリはどうもビジネスになるらしく、「低機能のものはオープンソースライセンスだけど有償ライセンスの高機能版がある」のがほとんどです。あるいは「無償公開するなら無料版使っていいよ」というのもあります。「このシステムだけ」「うちで使うだけ」であれば、別に「有償ライセンスの高機能版」でも構わないのですが、広くリリースさせたいとなるとそういったものは避けておくべきです。この意味だと、Handsontableはよく使われている割にその辺が乱暴に扱われていると感じます。Handsontableをフリーで使って良いのは「教育、研究、評価」だけなんですけど、なぜかあちこちで見掛けます。
もちろん完全フリーの方が使いやすいのですが、「フリーの低機能版」でも必要な機能が十分あったり、ちょっとの追加で何とかなるのであれば、それでも構わないと思います。
あと、フレームワーク的に使えるライブラリだと、拡張して使うとか出来て都合がいいですね。また、ここで欲しいのはあくまでも「表」だけなので、いわゆる「Excelモドキ」として「全部入り」みたいなものである必要性はありません。
と言ったことを考えると、案外残りません。結局選択肢として残ったのは、
くらいになりました。他はライセンスに難があったり、特定のフレームワークに依存しすぎていたり、マイナー過ぎたりということで、ここの選択肢にはなりえなかったのです。
それぞれの特徴や使用感
候補が絞れたところで、どちらにするか検討します。
幸い、どちらも「デモページ」が作られていて、githubのページからリンクされているので、そこで使ってみたりデモコードを見たりしてみます。
一番気になる、「日本語がちゃんと通るか」という点については、どちらも問題ないように思えました。入力も後からの編集も特に問題らしいものはありません。特にx-spreadsheetの方は作者が中国人のようなので、より問題が少ないかも知れません。
APIは本質的に大差ありません。妙なクセみたいなものも、評価の範囲では感じられません。Jspreadsheetはフレームワーク的なものを使ってはいますが、ごく小さいライブラリの範囲ですし、作者が同じなので問題はありません。
ライセンスはx-spreadsheetはMITです。Jspreadsheet CEもMITですが、高機能版の「Jspreadsheet Pro」というものも存在しています。今回使う機能の範囲であれば、ちょっと追加コーディングするだけで、Jspreadsheet CEでも何とかなります。
そんなわけで、必要としている範囲ではどちらも似たようなもので、ちょっとだけx-spreadsheetの方がいろいろ上かな感じるところです。「星」の数も多いですしね。
とは言え、結局選択したのはJspreadsheet CEの方です。以下理由を箇条書きで。
- x-spreadsheetは機能が豊富過ぎる
スプレッドシートとしては便利なんですが、今回必要としない機能が大量にあります。「使わない機能を除く」のは、簡単そうで難しい作業です。Jspreadsheet CEの方はむしろ機能が足りないくらいですが、結構簡単に機能追加できます - x-spreadsheetは組み込み用でない(?)
組み込んで使えないことはないとは思いますが(機能的には可能になっています)、あまり小回りがきいてる感じではありません。多分スタンドアローン的な使い方の方が良いように見えます - Jspreadsheet CEの方がいじりやすかった
あくまでも主観ですが、どうもフレームワーク的にいろいろやって欲しそうな感じが見えます。Proのコードを見たわけではありませんが、多分Proの方はそうやって「機能拡張」したのだろうと思われます - x-spreadsheetはCANVASを要求する
致命的というわけではないですが、いろんなところがちょっとハードルが上がります
まぁ実のところ大差ないです。でも「部品で使うならJspreadsheet CE、スタンドアロン的に使うならx-spreadsheet」という感じはあるなと思います。もっとも、他のフレームワークを使っている人は、また違う評価になるかも知れないですけど。
ここでは評価しなかったGrid.jsも悪くはないだろうなと思いますが(星多いし)、サンプルページにある「表」がちょっと残念な感じがするのと、今回の目的とはちょっと違うということで、採用には至りませんでした。元気のある人は評価してみて下さいw