2013/06/20(木)SIerの我々がWebサービスを作った理由

2013/06/20 23:23
Tustle!の技術面の話は昨日書いたので、今日は開発に至った経緯を書いてみたいと思います。 Tustle!の開発がスタートしたのは2009年のことでした。もちろん、4年間ずっと開発を続けていたわけではなく、本業が忙しくなって手つかずになったり、環境面の問題で一から作り直したりとずいぶんと回り道をしました。今から作り直すのであれば、週末を何回か使えば完成させられると思いますw そもそもなぜTustle!を作ろうと思ったかというと、仕事では身につけられない技術面の勉強をしたいということもありましたが、我々のポートフォリオが欲しかったという面が大きいです。 2009年ごろは我々が前に所属していた会社の経営が悪化していた時期で、給与の遅配も発生していました。こうなると別の会社に移ることになるわけですが、その転職活動のときに職務経歴書にプラスアルファするものになればいいな、くらいの思いがありました。もっとも、実際には誘われた会社に移ったので、堅苦しい面接のようなことは一切やらずに転職が決まったのですが。 さて、転職の必要はなくなったのですが、ポートフォリオが欲しいという気持ちは変わりませんでした。今度は自分たちが仕事を取るための足がかりにするためのものとして。 私もjoeくんも、自分の技術を売るのではなく、自分の時間を切り売りする人売りの業態にうんざりしている部分があり、できれば社内で開発をしたいと考えていました。 近頃、SIerはオワコンだとたくさんの方が喧伝していらっしゃいます。それが正しいか否かはここでは議論しませんが、私は「オワコンではないものの規模的には縮小して行くだろう」と思っています。また、ソーシャルゲームバブルが弾けたら、そちらの技術者たちが我々の業界に流れ込んでくるかもしれません。残念ながらこの業界の先行きが明るいとは思えません。 一方、そう考えない人もいます。うちの営業は、ゼネコンピラミッドの頂点に近い会社さんと契約できたことで満足してしまっています。でも、それって間にピンハネ業者が入っていないだけであって、いつでも代わりが効く労働力として人売りしてることには変わりがないですよね……。 やりたいことがあって、でも会社ではそれができなくて。じゃあどうするかというと、会社と関係なく、自分たちで勝手にやるしかないじゃないですか。もちろん、Tustle!だけでお金を稼げるとは思っていませんし、これだけで仕事が取れるほどの技術力のアピールになっているとも思いません。ただ、これは一歩目なんです。この一歩が踏み出せたことは大きいと思っています。 Tustle!自体もまだまだ追加したい機能がありますし、ほかにもアプリの企画がいくつか立ち上がろうとしてます。今後ともTustle実行委員会をよろしくお願いいたします。 最後に、Tustle実行委員会では、システム開発のお仕事を募集しております。わりと真剣に。

2013/06/19(水)目標管理Webサービス「Tustle!」の仕組み

2013/06/19 23:10
6月6日に[Tustle!](http://tustle.jp/)という目標管理Webシステムをリリースしました。このブログをご覧のみなさまにも使っていただけると嬉しいです。 このシステムは私とjoeくん([@joe_uragami](https://twitter.com/joe_uragami))で作ったのですが、その仕組みについて簡単にご説明したいと思います。またの名を「こんなところで苦労したリスト」です。 #### ■ 言語 最終的にはPython + Djangoに落ち着いていますが、実はこのシステム自体は紆余曲折がありまして、以下のような変遷を辿っています。
Java + Wicket
Wicketで始めるオブジェクト指向ウェブ開発を読んで惚れ込んだ私のわがままで環境が決定しました。しかし、当時は現在のように安価なVPSはなく、肝心な公開する方法が思い当たらなかったので、やむを得ず方針転換することになりました。
PHP + kohana
PHPであれば動かすサーバーには困らないだろうということで決定しました。kohanaを選んだのはやはり私のわがままです。しかし、Javaがメインである私もjoeくんも、フレームワーク云々よりもそもそもPHPに馴染めなかったこと、また、GAE/Jの存在を知ったことで、またもや方針転換することになりました。
Java + Slim3
joeくんと二人で「Slim3すげぇ」「これGAE以外でも動くといいのになぁ」と言いながら、かなり楽しみながら開発することができました。このときに、副産物としてテスト用ユーティリティを作っています。しかし、本業の参入プロジェクトが派手に炎上したため、残念ながら開発が遅々として進まず。その間にGAEの料金体系が変更され、これならVPSを借りたほうがいいんじゃないかということで、三度方針転換することになりました。
Python + Django
Java開発者の読むDjangoの設計思想が決め手になりました。また、これまでに何度もリスケしていて、いつになったら公開できるかわからない状況になってしまったので「もう機能は削ってでもリリース日は絶対に動かさない」と決めました。もっとも、システムテスト中に本業のほうがどうしようもないくらい燃え上がったこと、最後の最後でどうしても実装したい機能が追加されたこと(後述)もあり、4月1日リリースを5月→6月と延ばしたのですが、なんとか6月6日に公開することができました。
#### ■ ログイン認証 これは早い段階で「自分たちでアカウントを持ちたくない」ということを決めていました。個人情報を預かりたくないというのもありましたが、アカウント作成のメールを出す処理とか、パスワード忘れ対応とか、作りたいシステムの本質とは直接関係ない部分の作り込みが多数発生するのが嫌だったというのが大きいです。 GAE上で動かすときはGoogleアカウントを使おうと思っていたのですが、Djangoに方針転換してからは、自分たちが使っていること、Python用のTwitter APIライブラリであるTweepyが非常に使いやすいことから、Twitterアカウントを認証に使わせてもらうことにしました。ちなみに、Twitter API1.0から1.1の対応も、Tweepyのバージョンアップだけで済んでいます。素晴らしい。 また、Djangoは認証のバックエンドを簡単に差し替えられるので、Twitter認証バックエンドとして[Twingo](https://github.com/7pairs/Twingo)を作って公開しました(全文検索用の対応などもあったため、実際にTustle!で動いているのは公開しているソースに手を加えたバージョンです)。 #### ■ 全文検索 GAEのときはgomokuを使って分割した値をListのまま保存し、検索時には検索ワードをgomokuでバラしてからListの値をチェックしに行く、という方法を取っていました。 DjangoになってからはRDBを使用するので、Listのまま保存するということはできません。検索用キーワードを別テーブルにするというのも考えましたが、新規作成時のINSERTはともかく、変更時のUPDATE(実際にはDELETE/INSERTになりそうですけど)が面倒そうだし、パフォーマンス的にもどうなるか疑問です。もちろん、一番楽なのはLIKE検索なのですが、それもやはりパフォーマンスが微妙なことになります。 いろいろ調べてみたところ、textsearch_jaのことを知りました。うん、これならやりたいことができそうだ。 というわけで、現在のTustle!はPostgreSQL + MeCab + textsearch_jaで実現しています。[開発用マシンであるMacBook Airに環境構築する際は非常に苦労しました](http://short-circuit.jp/programming/20130106183427)が、環境が組み上がってからは満足の行く結果を出してくれています。 #### ■ 画像アップロード 実は土壇場で追加した機能です。 VPSの容量的な問題もありますので、画像の機能を実装するのは諦めていたのですが、ベータ版を見ていただいた先輩に「Flickrに上げればいいんじゃない?」と言われ、悩んだ末にリリースを少し遅らせて実装することにしました。先ほど書いた「機能は削ってでもリリース日は絶対に動かさない」の逆を行く行為でしたが、出来上がったものを見てみるとこの判断は正解だったと思います。さすがに仕事だったらこんな判断はできませんが……。 Flickrとの連携には[Python Flickr API kit](http://stuvel.eu/flickrapi)を使っています。最近あまり更新されていないので少し不安ではあったのですが、ひととおり確認してみたところ、問題なく動作するようなので使わせてもらいました。 問題はFlickrが米Yahoo!のアカウントを要求するため、新規にアカウントを作るハードルが高いことでしょうか。joeくんが詳細なマニュアルを作ってくれましたが、英語サイトということで抵抗が出てしまう人も多いと思います。でも、こればっかりは仕方がないですよねぇ……。 #### ■ デザイン ほぼ100%デザイン担当のjoeくんにお任せしていましたので、私はまったく苦労していませんw そのうちきっとjoeくんがデザイン面のお話をしてくれると無茶振りしつつ、今日のエントリの締めくくりとさせていただきたいと思います。

2013/06/18(火)カーターおかえりなさい!

2013/06/18 21:41
カーターがライオンズに帰ってきました! [【西武】カーター「タダイマ」背番号は10 - プロ野球ニュース : nikkansports.com](http://www.nikkansports.com/baseball/news/f-bb-tp0-20130618-1144350.html) 昨年、勝負強いバッティングと気持ちを全面に出したプレイでファンの心をガッチリつかんだカーターでしたが、膝の具合が思わしくなく、残念ながら自由契約となってしまいました。 あのときはヘルマン、オーティズがいるし、外国人枠を考えると仕方がないのかなぁ……と納得はしたのですが、今年はオーティズが完全にヘタれてしまい、新外国人スピリーもまだ本領を発揮しているとは言いがたい状態です。こんな状況で帰ってきてくれてのは本当にありがたいです。 今年プレイしていたBCリーグの石川ミリオンスターズでの動きを見た上での再獲得でしょうし、膝はある程度治っていると考えていいのかな。少なくとも去年より酷いということはないのでしょう。 [youtube]http://www.youtube.com/watch?v=rmCO2BP-vtI[/youtube] ライオンズに帰ってこれたことをこんなに喜んでくれるなんて、本当にいい奴なんだなー。一軍の試合で会えるのを楽しみにしています。

2013/06/17(月)西武ドームに行ってきました

2013/06/17 12:22
20130617 01 20130617 02
[勝] 岸  3勝5敗0S
[敗] 藤井 4勝2敗0S

[本塁打]
  6回裏 浅村 11号 2ラン (藤井)
南流山の方々と西武ドームに観戦に行ってきました。 今日は一塁側内野席ということで、ライオンズのTシャツの下に一枚羽織るという微妙な格好だったのですが、周りの方々を見れば、別にレプリカユニを着ても大丈夫だよなーという程度にはライオンズファンが多かったです。 試合のほうは正直言って微妙な内容でした。3回まではお互いに壮絶な譲り合いで得点が入らず、点は入らないのに緊張感もないという、家でパ・リーグTVを観ているような状況だったら間違いなく裏で別の作業を始めるなという展開。 試合が動いたのは4回でした。2アウトからヘルマン、スピリーの連続フォアボールでチャンスを作ると、熊代が三遊間をしぶとく破るタイムリーヒットでライオンズが1点を先制。対するベイスターズは5回、石川のタイムリーで同点に追いつきます。ようやく眠気が吹き飛ぶ展開になってきました。 ベイスターズの藤井はライオンズの拙攻にも助けられて5回まで1点に抑えていましたが、6回につかまります。ヒットの栗山を一塁に置いて、浅村がバックスクリーン左に運んでライオンズが勝ち越し。さらにヘルマンにもヒットが出たところで藤井はノックアウトとなりました。 代わった2番手小林太、3番手林も勢いを止められず、熊代のタイムリー、秋山のタイムリー、山崎の2点タイムリーツーベースでライオンズはこの回計6点。試合をほぼ決定づけてしまいました。 7回以降は両チームとも打線が大人しく、特にチャンスもなくそのままゲームセット。同じ得点でも、1~3回と7~9回が逆だったらもうちょっと緊張感のあったゲームに感じられたかもしれません。ともあれ、せっかく行った試合なので勝てて良かった。 **熱心なライオンズファンである** 私は、[来週の日曜日](http://www.seibulions.jp/news/detail/7775.html)も西武ドームに行きます。あー、野球楽しみだなー。

2013/06/16(日)反発係数の基準値の下限を目標にすること自体が間違いである

2013/06/15 24:28
統一球の検査結果が公表されました。 [NPB統一球検査結果を公表、昨年下回る - プロ野球ニュース : nikkansports.com](http://www.nikkansports.com/baseball/news/f-bb-tp0-20130614-1142716.html) ネット上の記事には詳細な数字は挙がっていませんが、紙面のほうの同じ記事には2009年から今年まで検査結果が載っています。 2011年、2012年の43件のサンプルで基準値に届いたのがわずかに4件だけ。この件に関してはコミッショナーに報告が行くことになっているそうなので、さすがに知らなかったということはあり得ないでしょう。これを2年間放置してただけでもコミッショナーの駄目さが浮かび上がってくると思います。 また、今年の12件のサンプルについては、基準を満たさなかったのは4月10日の西武ドームだけということで、ボールの変更は効果を上げていることがわかります。基準値以下が12分の1は多すぎる気もしますが、サンプル数が少ないので、こちらに関してはもう少しデータが揃ってから改めて見直したいところです。 しかし、記事全体を読んでみると、そもそもの統一球の前提がおかしいような気がします。 > 1球ごとに多少の品質のばらつきが出るのは避けられないため、反発係数には公差(許容範囲)が認められおり、統一球では基準値の下限0・4134の上下0・01までが許容範囲となる。個別の数字が下回っても、6球場の平均が公差の中に収まれば問題ないとされる。 > > [NPB統一球検査結果を公表、昨年下回る - プロ野球ニュース : nikkansports.com](http://www.nikkansports.com/baseball/news/f-bb-tp0-20130614-1142716.html) これって単にNPBが「反発係数0.4134の製品を作れ」と指示し、ミズノがそれを忠実に守っただけ、ということになりませんか? 上下0.01の公差を認める前提であれば、ミズノはその範囲内の製品を納入しているわけですから。上下の公差を認めるのに、基準値の下限の製品を作るよう指示したNPBは阿呆としか言いようがありませんが、ミズノを責めるのも筋違いなような気がします。 公差のことを考えれば、飛ばないボールを作ろうとした場合は反発係数0.4234の製品を作るように指示することになるわけですが、そうなると公差を含めた反発係数の範囲は0.4134~0.4334となります。そうなると、実は基準値の0.4134~0.4374とあまり変わらなくなります。 そもそもこの基準値0.4134~0.4374って、この中間を狙って作ったらこの範囲に収まりますよ、っていうくらいの思惑で設定された数値なんじゃないかなーと思います。公差0.01が妥当なものなのかどうかはわかりませんが、妥当なものだとしたら、人間の力では基準内で飛ぶ飛ばないをコントロールするのは難しい、ということになりそうです。この件も充分に検討する必要があると思います。 また、今回は2010年以前のデータも載っているのですが、統一球導入前にも基準値を下回っているサンプルがあります。2011年以降は球場が公表されているのに、それ以前は公表されていないのはなぜなんでしょう。 **公表できない理由でもあるのでしょうか** 。隠すと憶測が憶測を呼んで面倒なことになると思いますけど。