Kengo's blog

Technical articles about original projects, JVM, Static Analysis and TypeScript.

remtterクローンのサービス @twistoire を終了しました

twistoireをトップページだけ残して停止しました。ご利用いただいた皆様、ありがとうございました。


以下、技術者が読むという想定のもとに終了の経緯とふりかえりをだらだら書きます。

終了の理由

大きく分けて3つあります。

  • 私がTwitterをあまり使わなくなったため、開発のモチベーションが低下した
  • AppEngineの価格上昇による金銭的負担
  • メンテナンスコストが高くなり、趣味としての運営が難しくなった

終了を思いついた理由はやはり金銭的コストでした。工夫によって相当安く抑えることはできましたが、自分が使わないサービスに払う価格ではないなぁと思う規模でした。もちろん多くのユーザー様に使っていただけるのは嬉しいのですが。
また技術的なメンテナンスコストもなかなか大きくなっていました。twistoireは私にとってAppEngineとappengine-mapreduceの処女作*1であり、大規模なリファクタリングが必要な状態でした。他にもTwitter4Jの仕様変更*2に追随するなど、メンテナンスの必要性には常に追われていました。モチベーションが高ければコストを払う方向に進んだかもしれませんが、ここに払うよりも次のチャレンジに費やしたいという発想に至りました。

今後に活かすこと

超自動化されているAppEngineとはいえ、ひとつのサービスを開発から管理まですべて1人でやるのはとても良い経験でした。ここで得た経験は次に繋げます。具体的には、OSS化、多言語化、開発環境の自動化、フィードバックの収集を推し進めたいと思っています。

OSS化

途中からOSSにしようと思ってあれこれ試したものの、セキュリティリスクが大きいため難しいだろうという判断になってしまいました。XMLを.gitignoreするだけで問題ないはずなんですけどね。結局はめんどくさかったのかもしれません。今後は最初からオープンにしようと思います。

またウェブサービスはあまりOSSとしては良くなく、ライブラリやフレームワークのほうが面白いのかなと思うようにもなりました。個人でJavaのOSSを持つことで自分の"Java/JVMの理解者"としての特徴をわかるようにするという思いをずっと前から持っているので、近々そうしたジャンルでひとつ書きたいところです。
いやGitHubにはいろいろ置いてるんですが、置いてるだけで売り込んでないですしね。Webに置いてあればOSSってわけでもないでしょう。最近はバイトコードを吐くBrainf*ckコンパイラとかちまちま書いていて楽しいので、こうしたバイトコード生成によるライブラリが書ければ一番幸せかなと思っています。

多言語化

twistoireは完全に日本人向けだったのですが、次回はより広いユーザーを想定したいと思っています。たまに海外の方からtwistoire宛に@が飛んできたりして、あーこの距離感はすごいなーと思ったので。せっかくインターネットで公開するものなのだから、総人口のたった数%にターゲットを絞ることもないですよね。まぁ今はその数%にすら届いていないんですが。

最近はpull requestやドキュメントも普通に英語で書いていますし、とりあえず英語対応は簡単なんじゃないかと。ライブラリならREADMEとログを複数パターン生成するだけで済むので、そんなに苦労しないかもしれません。画面を持つといきなりつらくなるのですが……。

開発環境の自動化

twistoire以降のプロジェクトでリポジトリをGitHubに置くようになり、開発がすごく楽になりました。ローカルにリポジトリ立ててDropboxで端末間同期をかけるとか自分でサーバーを立てるとかよりも、圧倒的に簡単で便利です。怠慢万歳。
GitHubに限らずAppEngineやAWSといった「クラウドサービス」が開発の初速と継続力を改善しているのは間違いないので、彼らの恩恵は今後も最大限享受したいところです。特にテストとソース分析に注力したいと考えており、試しにCloudBeesを使い始めています。GitHubとCloudBeesでVCS・BTS・CIサーバーの「三種の神器」が揃えば、今まで以上に楽に開発ができるんじゃないかと期待しています。

ユーザーからのフィードバック

昔の家庭用ゲームの開発者を想像すると、今はすごくユーザーからのフィードバックを得やすい環境にあるんだと思います。ゲームの感想を聞いて回ったりプレイヤーの隣に行って楽しむさまを眺めたりすることは難しいですが、自分のサービスのURLをつぶやいている人を見つけたり飛んできた@を眺めたりするのは簡単です。実際twistoireでも、「これおすすめだよ! っ@twistoire」とか「@twistoireの報告によると@ナントカさんがボクをリムーブしたらしい……」とか飛んできてニヤニヤしたりヒヤヒヤしたりできました。
フィードバックはモチベーションに直結するので、今後のプロジェクトでも「フィードバックをもらう仕組み」をきちんと構築しておきたいです。もちろんユーザーにレスポンスする仕組みも同じくらい重要でしょうし、仕組みが常に活用されるとも限らない*3んですが。フィードバックをもらう仕組みを作ると言うより、ユーザーの動線を考えると言う方が近いかもしれません。

今後の予定

プライベートでは計画的に行動しないタチなので、参考程度ではありますが。

まずは前述の理由から、Javaのツールかライブラリを1つ仕上げたいと思っています。ただ、これは思っているだけです。最近のJava開発では自分でコードを書かないと解決できない問題にあまり会わないので、書くモチベーションが出ません*4。当面は今書いているコンパイラを継続開発する感じになると思います。
またJavaScript、というかenchant.js周りのライブラリもあわせて書いていきたいです。この年末年始のゲーム開発でいくつかライブラリやプラグインを作ったので、まずはそれらの汎用化版を公開していくつもりです。できればマップエディタも作ってみたい。
enchant.js周りはマイナー開発者がたくさんいらっしゃるように見えるので、楽しみつつ爆発的に交流を広げるチャンスなんじゃないかと思っています。仕事で交流する人とは全く異なるフィールドに生きている方々ですし。この点で、今年はJavaよりもJavaScriptと仲良くなる年になるかもしれません。