なぜそこまでやった、開発者コミュニティの異種格闘技「超エンジニアミーティング」エンジニア100連発、日本Rubyの会、java-ja超エンジニアミーティング」レポート Day1(2/2 ページ)

» 2012年06月14日 00時00分 公開
[星暁雄@IT]
前のページへ 1|2       

野生のモヒカンが突っ込みまくるjava-ja

ひがやすを改めHGCやすを氏の降臨

 java-jaは、本来はJava開発者達の集まりと伝え聞いているが、この日はJavaとはほとんど関係がない話ばかり。それだけJavaは浸透しているということなのだろう。

 「今日から名前を変えます!」と話し始めた最初の発表者は、Hyper Great Creatorやすを氏(以下、HGCやすを氏。元・ひがやすを氏。@higayasuo)。UI/UXエンジニアのこうのみどり氏との掛け合いで、iPhone向けにHTML5でどれだけネイティブアプリに迫れるかを語った。

HGCやすを氏とUI/UXエンジニアのこうのみどり氏。HTML5によるネイティブアプリ並みの快適さを目指している。 HGCやすを氏とUI/UXエンジニアのこうのみどり氏。
HTML5によるネイティブアプリ並みの快適さを目指している。

 名前を変えた理由は「僕は自信を喪失すると自分の名前を言えなくなる。HGCやすをという恥ずかしい名前を堂々と言えるようになれば自信喪失も直るに違いない」というものだ。

 HGCやすを氏は、自身の最近の仕事について語り始める。「エンタープライズJavaの仕事をやっていたが(JavaフレームワークSeasar2が代表作)、自分としては2008年ぐらいでやり尽くした。クラウドでは、Google App Engine Java版向けのSlim3というフレームワークを作って、割と成功したと思う」。だが、その後で「世の中が大きく変わって、ソーシャルアプリが台頭した。サーバサイドの技術が抜きんでていれば成功する時代ではなくなった。2010年に自分でもソーシャルアプリを作ったが、自信を持てなかった」。

 そして、HGCやすを氏は2011年4月から、「汐留(電通)で」、こうのみどり氏と共にHTML5アプリの開発に取り組んでいる。

 こうのみどり氏はある日、HGCやすを氏が開発したHTML5アプリを見ていた。画面遷移をするたび、画面全体が一度真っ白になってから、画面がぽつぽつと表示される。HGCやすを氏は「これは仕方がない。そういうものだから」と説明したが、こうのみどり氏はこう言ってしまった。「ユーザーにとって、ネイティブだろうがHTML5だろうが関係ないことです」と。

「その瞬間にわれわれの方向性が決まりました」とHGCやすを氏は語る。ネイティブなみのパフォーマンス、気持ちよさのHTML5アプリを作ろう、と決心したのだ。

 ある日、HGCやすを氏の右肩に激痛が走り、腕が上がらなくなった。そこで、「ペアプロをしてほしい」とこうのみどり氏に依頼した。「3日やって、2つ気付いたことがある」(HGCやすを氏)。それが「0秒思考」と「類推力」だ。「彼女には、これができる」。

 「0秒思考」とは、作ったものが動かないとき、その原因を考えるのではなく、次の行動をすぐに取る。「これは自分の頭を覚醒させるため。反射神経で何かやらないといけない。追い込まれる。物事を速く考えられるようになる」。

 「類推力」とは、「Aが起きたときBという結果になるに違いない」と類推する能力だ。バグがありました、と言ったとき、過去に起きたある現象に似ているからこの修正をやればいい、といった形で類推が働く。

 こうした経験を経て、HGCやすを氏は「オレの才能を彼女に伝えられるんじゃないか」と考えた。そのために試みたメソッドが「ペアシンキング」だ。考えていることを喋りながら、ディスカッションしながら作業する。

 「仕事場ではずっとしゃべっている状態になります」

 こうした開発プロセスを経て、2人が編み出した手法は次のようなものだ。まず「ネイティブ並みの心地よさ」を実現する方法。結論として、HTML5/CSS3で、ネイティブ画面とほぼ同様のスクロール速度は実現できる。ポイントとして、jQueryのようなフレームワークは重いので、Pure JavaScriptとCSSだけで作っている。

「デコメ絵文字」の入力画面。JavaScriptプログラムにより絵文字エディタを作り込んでいる。 「デコメ絵文字」の入力画面。JavaScriptプログラムにより絵文字エディタを作り込んでいる。

 GPU(グラフィックスプロセッサ)のアクセラレーションを利用することも高速化の重要なポイントだ。iPhone(iOS)の場合は、CSS3によるプロパティで3D処理を行うよう指定するとGPUアクセラレーションが有効になる。なおAndroidの場合は、Android4.0以降でないとこの手法で高速化できないとのことだ。

 「WYSIWYG絵文字つきテキストエディタ」の開発では、HTML5のテキストエリアの中に「デコメ絵文字」、つまりアニメーションGIFファイルを表示できる仕組みを作り込んだ。テキストフィールドと、プログラム作り込んだ自前のエディタを重ね合わせている。デコメ絵文字入力のキャレットも表示するよう作り込んだ。「キャレットを表示することで、入力できそうな雰囲気を作り出している」(こうのみどり氏)。

 さらに、アニメーションGIFを多用するとスクロールが遅くなるという問題に対処するため、「時間をとめる」(HGCやすを氏)ハックを施した。これはJavaScriptプログラムでアニメーションGIFのバイナリを解析し、動かないGIFを作り出すやり方を取った。

 HGCやすを氏は、名前を変えただけではなく、活動の範囲をサーバサイドJavaのフレームワークからソーシャルアプリのためのHTML5アプリへと移した。この日の発表は、「自分の名前が言えなくなる」ようなストレスに耐えつつ得たノウハウを披露する場となった。

西尾泰和氏「アイデアを塩漬けにしない方法を考えた」

 続いて、西尾泰和氏(@nishio)の発表タイトルは、「アイデアを塩漬けにしない〜世界中の人に手伝ってもらう方法〜」。

 「アイデアをいつ実現するか」は、社会人にとって難しい課題だ。「いつかやる」ことがどんどん増えてしまう。

 西尾氏は、「iPadアプリとして置き時計を作る」というアイデアを何カ月にもわたって「塩漬け」にしていた。ASIAGRAPH2009で優秀作品となったCGアート「Virtual Star」をビジュアルとして用いた置き時計というアイデアだ。

西尾泰和氏(サイボウズ・ラボ) 西尾泰和氏(サイボウズ・ラボ)
「アイデアを塩漬けにしない〜世界中の人に手伝ってもらう方法〜」と題してクラウドソーシングサービスを利用した経験を語った。

 だが、「やる気がでない」。そこで「代わりの人を探そう」とした。クラウドソーシングサービス「oDesk」を使い、やって欲しい仕事を投稿したところ、世界中から応募が来た。その中で、ウクライナのプログラマに、iPad/iPhoneアプリのUI周りを依頼することにした。CG描画で呼ばれる関数を用意してもらい、「僕はその中味だけ実装した」という。

 こうして完成したのが、iOSアプリ「Virtual Star Clock」だ。App Storeで有償版と無償版が共に公開中である。画面上には無数の円が描画されているのだが、錯視で星形が見える仕組みである。

 この自身の経験から、西尾氏は得るものは多かったという。「何が自分でないとできないことか。どう説明したら他人に“自分がやりたいこと”を伝えられるか。どういう部品を作ってもらったら応用が利くのか。いくらまでなら払えるのか」。

 西尾氏自身もプログラマだが「詳しい人に依頼すると、自分より短い時間で自分よりいいものができる。知識は貴重なリソース」。そして、「違う視点からの体験が得られる。どんな応募がダメなのか。プログラマとは逆の立場で考えられる」。そして「グローバル化の恐怖を感じる。インドやインドネシアでは大学卒初任給が年間2〜3万円だが、自分は何が違うのか?」。

 こうして、西尾氏は自分自身の経験から「塩漬けにしない1つの方法は、世界中の人に手伝ってもらうこと。予想以上のメリットがある。時間・やる気・知識は貴重なリソース」と締めくくった。西尾氏の発表資料はWebで閲覧できる(リンク先)。

和田卓人氏「正しい使い方を簡単に、誤った使い方を困難に」

 和田卓人氏(@t_wada)は、和田氏が監修した書籍『プログラマが知るべき97のこと』の53番目のエピソード「正しい使い方を簡単に、誤った使い方を困難に」を題材に、議論を繰り広げた。

 Java言語向けのテスティングフレームワークJUnitのasserEqualsメソッドは、

 assertEquals(期待値、実際値)


 の順番に書く。ここで引数の順番を間違えてもテストに通ってしまうという罠がある。また、引数を3個とる場合の並びは、

 assertEquals(メッセージ、期待値、実際値)


 とオプション変数が最初の引数となり、Java言語の慣習とは違う。これも間違えやすい。

 また、JUnit以外のxUnitテスティングフレームワークでも違いがある。例えばPHP向けのPHPUnitでは、引数を3個とる場合の並びは

 assertEquals(期待値、実際値、メッセージ)


 となる。

 非常に間違えやすいので「どうしてこうなった?」と犯人捜しをすると、どうやら最初にこの仕様を設計したのは『アジャイル開発宣言』の筆者の1人でTDD(テスト駆動開発)とも関わりが深いMartin Fowler氏であることが判明した(Xunit - bliki)。「何十年も、いろいろな人が引数の順番で苦しんだ!」という意外な発見だった。

 「もしオレだったらどうする?」と和田氏は語る。

和田卓人氏(タワーズ・クエスト取締役社長) 和田卓人氏(タワーズ・クエスト取締役社長)
書籍『プログラマが知るべき97のこと』の53番目のエピソード「正しい使い方を簡単に、誤った使い方を困難に」に関して語った。

 「順番に依存しないようする。例えばどの引数が何を示しているのか、型で表現する。あるいは、RubyやClojureのテスティングフレームワークexpectationsのように、期待値は1カ所だけに書けるようにする。JUnitでも後から登場したassertThatメソッドは間違えない」

 このように、間違えにくいインターフェイスと、よりよい語順が大事だ。そこで、JUnitとhamcrestライブラリを組み合わせることで「英語として読めるようなassertionを書く」やり方も可能となる。またGroovy言語では言語仕様のassertが使いやすい。

 この議論は、数々の「突っ込み」を交えて展開されたのだが、興味深かったのは、日本Rubyの会の高橋氏からの指摘だ。「assertEqualは、Rubyist的には名前が良くない。Equalという言葉は同格であることを示唆する。非対称の語彙の方がいいんじゃない?」。

 まとめとして、「直交性は重要」との教訓を指摘した。ライブラリ(フレームワーク)のAPIの設計の際、「単に語彙を増やしていくと、いろいろな要素を同格として増やしてしまい、覚えることがどんどん増えていく」。API設計では、抽象的なもの、拡張性の高いものを作るのと同時に、「覚えることを減らす」ように考えよう、と和田氏は語りかけた。そのためには「試行錯誤のループを回すこと。自分が最初のユーザーになってみる。あるいは、隣の人とペアプログラミングしてみる、コードレビューをしてみる」ことが大事だ、と締めくくった。

『プログラマが知るべき97のこと』から 『プログラマが知るべき97のこと』から
API設計の方針を示した言葉。実際には、考えるだけでなく「試行錯誤のループを回す」ことも大事だと話す。

LT&ハッカソン成果発表会も盛況

 1日目と2日目、それぞれ最後の時間帯は、「LT(ライトニングトーク)&ハッカソン成果発表会」が行われた。以下、発表内容をまとめる。

  1. ニコニコ動画ユーザ発の自主制作アニメプロジェクト「ニコ-アニ」の進捗管理システムの経験と教訓のお話(ぶー氏)
  2. PC内のファイル(特に書籍)を外出先から検索できるWebアプリの開発のお話(瀬宮新氏)
  3. ゲーム業界からデブサミ担当に転職した体験談とエンジニアとクリエイターに送る「越境」のススメ (NABEMON(鍋島理人)氏)
  4. ニコニコ超会議号ブルートレインからの動画配信の一例(aomonoya氏)
  5. エンジニアがスキルを相互評価するサービスForkwellのお話(おおかゆか氏)
  6. Rubyでニコニコ動画のCookieを「ごにょごにょ」するソフトの開発(MH35氏)
  7. ニコニコ動画のコメントを画面いっぱいに展開するChrome拡張の開発(あるふぁ氏)
  8. ニコニコ動画のタグの割合を調べ推奨動画を示す「ニコニコすいしょうらー」の開発(ヒロ助氏)
  9. 難解プログラミング言語Brainf*ckの「一番速い処理系」の紹介(hogelog氏)
  10. 難解プログラミング言語「Nyaruko」の作者による、WebでBrainf*ck言語を作れるサービス「self-f*ck」の紹介(まさらっき氏)

 今回は、「超エンジニアミーティング in ニコニコ超会議」の1日目を紹介した。午前10時から午後6時近くまで連続で行われたマラソン勉強会で、フル参加した当方もかなり疲労したが、日本の開発者コミュニティの一種の最前線を垣間見られたことは、得がたい収穫であった。

 2日目は、「プログラミング生放送」勉強会、Node.js 日本ユーザーグループ、日本Scalaユーザーズグループの発表模様をお届けする。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。