BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JavaScriptでGitを実装するKickstarterプロジェクト、28時間で資金調達

JavaScriptでGitを実装するKickstarterプロジェクト、28時間で資金調達

原文(投稿日:2013/03/26)へのリンク

 

JavaScriptおよびNode.jsコミュニティで有名なTim Caswell氏が、JavaScriptでGitを再実装しようと思いつき、Kickstarterで360名を超える出資者により28時間で資金調達した。このプロジェクトは、Atwoodの法則「JavaScriptで書けるものは、いずれJavaScriptで書かれる」の一例だ。

このプロジェクトについてもっと知るため、Tim氏に話を聞いた。

JSGitのアイデアはどこから生まれたのですか?

私はいつも、自分が持っているデバイスをプログラムする新しい方法を探しています。最近、Microsoftのよい人からSurface RTが送られてきました。前のプロジェクトで使ったiPadも2台ありますし、ChromeBook Pixelを買ったところでした。いずれも興味深いデバイスなのですが、かなり不満がありました。鍵のかけられた環境で、そのデバイス上で開発するのには不向きなんです。だれも、あのAppleですら、鍵をかけていないプラットフォーム、それがブラウザのJavaScript環境です。あなたはコードを書いてブラウザで動かせます。ローカルストレージにもアクセスできますし、インターネットにデータをアップロード、ダウンロードすることもできます。

1年ほどCloud9で仕事をして、ブラウザベースのIDEは実現可能だとわかりました。Cloud9がうまく解決していなかった唯一の問題、それがオフライン作業でした。自分のGitリポジトリを自分のデバイスにローカルにクローンし、海外へのフライト中(あるいは裏庭の向こうをぶらぶらしながら)オフライン作業し、その後インターネットにつながる環境に戻ったら、変更を自分のパブリックなGitリポジトリにプッシュする、そういうのがやりたかったんです。

JavaScriptはどこでも使えるプラットフォームです。そこでGitをポーティングしようと決めたんです。

JSGitのユースケースをどう考えていますか? 単なるブラウザベースのIDEやエディタですか、それとも、もっといろんな応用があるんですか?

私の一番のユースケースはブラウザベースのプログラミング環境ですが、別の使い道に関心を持っている人がたくさんいます。たとえば、Node.jsのための完全にJavaScriptで書かれたGitクライアントとサーバなどです。Gitはいろんなデプロイメントシステムの共通コンポーネントなので、Git for Node.jsできめ細かくコントロールできれば、多くの人にとって非常に役立つでしょう。

パフォーマンスはどう考えていますか?

JavaScript自体はかなり高速です。最近、JavaScriptで非常に高速なハッシュ関数(MD5、SHA1、SHA256)を書いたんですが、私のデスクトップのブラウザで、1秒間に500,000 MD5ハッシュまで可能でした。大きなGitリポジトリの場合、高速なノートパソコン上でネイティブクライアントを使ったとしても、クローンには時間がかかるので、それがうまくやれるとは思っていません。でも、小さなリポジトリでは、かなり高速になると思っています。

JavaScriptでスクラッチから全部再実装するのではなく、Emscriptenのようなもので、既存のGitのC実装をクロスコンパイルするというアプローチを取らないのはなぜですか?

これも調べるつもりですが、初期調査の結果、2つのことが問題になると予想しています。1つ目は、Emscriptenはコードジェネレータだということです。これはかなり巨大なコードを生成します。コードの大部分を手動で微調整しない限り、結局は直接の移植になります。2つ目は、GitのCによる実装を見てみると、下位のファイルシステムやネットワーク呼び出しとの密結合がかなりあります。Gitのブラウザベースバージョンには、かなりのカスタマイズが必要になるでしょう。各種Webプラットフォームには独自のファイルストレージAPIがあるため、それぞれについてファイルシステム抽象化レイヤを書かなくてはなりません。

Gitには、C、Javaなどの言語による実装がありますが、JavaScriptで実装するときの課題は具体的に何だと思いますか?

JavaScriptでcrypto関係を実装した経験がかなりあるため、それは問題になるとは思っていません。でも、実装しなくてはならないコード量は問題でしょうね。まずは必要最小限なところに取り組んで、そこから時間を使い果たすまで成長させていくつもりです。

なぜ今、このプロジェクトをやるんですか? これを可能にする特別なHTML5技術があるのでしょうか?

どちらかと言うとハードウェアですね。長時間のバッテリーとすばらしい画面を持つデバイスがどんどん増えていますが、開発環境としてはひどいものです。

プロジェクトは1日ちょっとで資金調達できましたが、それでどんな機能が作れると思っていますか?

Stretch Goalsで見積もったように、Gitの基本機能が作れると思っています。時間があれば、さまざまなプラットフォームとのインテグレーションもやりたいです。

どうしてKickstarterを使ったんですか?

よさそうに聞こえたんですよ。これまでやってきて、そしてKickstarterのルールを全部読んでみて、プロジェクトの理想には辛うじて合うかなと感じています。

Kickstarterで資金調達しようとする(JavaScript)オープンソースプロジェクトは増えると思いますか?

まだわかりませんね。これは1つの実験です。アイデアに何ヶ月も時間を費やす前に、アイデアをスクリーニングするという考え方は気に入っています。私は、結局はコミュニティの関心がほとんどないとわかるプロジェクトに、自分の自由時間を何百時間も費やして来ました。みんなが期待するクールなプロジェクトにフルタイムで取り組むという考え方は実に気に入っています。Kickstarterが長期的にうまくいくかはわかりませんが、もしうまくいかなくても、他の考え方を探し続けます。

JSGitは、Kickstarterで資金調達に成功した最初のJavaScript関連プロジェクトではない。過去には非同期JavaScriptプログラミングに関する書籍テスト駆動JavaScriptのスクリーンキャストのプロジェクトがあった。だが、JSGitはJavaScriptライブラリを作る最初のKickstarterプロジェクトだ。

このプロジェクトの支援募集は2013年3月30日までだ。期日が過ぎたら、Tim氏はすぐにプロジェクトに取り組む予定だ。

 

この記事に星をつける

おすすめ度
スタイル

BT