開発者コミュニティが集結した「超エンジニアミーティング」。エンジニアたちが技を繰り出しあう、混沌空間に張り付いてレポートする。
幕張メッセの展示ホール8区画という広大な空間を借り切って、2012年4月28日〜29日に開催された巨大イベント「ニコニコ超会議」──その一角で、複数の開発者コミュニティによる勉強会「超エンジニアミーティング」が開催された。
日本の開発者コミュニティの精鋭が集まると聞いて、この勉強会を2日間にわたって張り付き取材してみた。
会場は、さまざまな企画のブースが並ぶ一角。しかもすぐ隣の「超軽音部」のバンド演奏が流れてくるという、実に混沌とした空間だ。会場の壁にはニコニコ動画のような「字幕」が投影されている。すぐ隣ではバンド演奏があり、定時には「時報」のアナウンスが流れ講演をかき消すという、難条件のもとでの勉強会である。
しかし、四方から這い寄る混沌をものともせず、開発者コミュニティはそれぞれの精鋭を差し向けて、圧倒的な才能の無駄遣いぶりを披露。さながら“異種格闘技”のような世界と化していた。
基調講演は、 五十嵐健夫氏(東京大学大学院情報理工学系研究科コンピュータ科学専攻 教授/JST ERATO 五十嵐プロジェクト研究総括)による「デザインのためのインタフェース」。五十嵐氏は、研究成果を次々と鮮やかなデモンストレーションで見せていった。
五十嵐氏は、まず、普通のPC向けのソフトの一般的なUIをスライドで見せた。プルダウンメニューで操作を指示する、ごく普通のUIである。このUIの発想は「ボタンやメニューによってコマンドを発行すると、あとから結果が返ってくる」作りだ。メニュー表示によりコマンド群を完全に覚える必要をなくしているものの、本質的にはキーボードでコマンドを打ち込む動作と変わらない。
一方、五十嵐氏が試みている新しいユーザーインターフェイスは「ユーザーの自然な操作を計算機が裏からサポートする。ユーザーの操作に対して連続的に応答する」というものだ。その研究成果は、大きく次の3分野に分かれる。
直感的な操作で、アニメーションを作るツールを披露。最初は、フリーハンドのイラストから3Dモデルを作るという「Teddy」だ。続いて、「ピンモード」を備えたアニメーションツール。「ピン」を挿すことで動きの制約条件を付けることで、図形を変形させたり動かしたりする指示をごく自然な形で行えるようになる。
現実世界の「モノ」と、それを直感的にデザインするソフトウェアの連携で、どんな世界が可能になるのか──その可能性の一端を示す刺激的なデモンストレーションの連続だった。
画面上で好きな3D形状をデザインして、オリジナルの「ぬいぐるみ」を作る。物理シミュレーションを駆使して、ワイヤをどう通すかを自動的に計算し、画面上でビーズ細工を設計する。服の型紙の変更で人が着たときの「シワ」がどうなるかをリアルタイムでシミュレーションする。木の椅子をデザインし、レーザーカッターでパーツを切断する。これらのパーソナル・ファブリケーションとデザインツールの連携はまだ未開拓分野であり、さまざまな可能性が残されていそうだ。
ロボットに指示を出すとき、どうするか。音声やジェスチャー認識では、伝えられる情報が「粗過ぎる」、またリモコンやジョイスティックなどでは「細か過ぎる」と五十嵐氏は指摘する。
五十嵐氏は、「Magic Card」と呼ぶ方法を提案する。紙のカードを「作業をしてほしい場所」に置き、ロボットに指示を与える。「ここを掃除してください」というカード(タグ)を置いておけば、ロボットはこのカードをピックアップして、掃除ロボットを派遣する。一方、ロボット側からのメッセージも「カード」だ。電池切れなどで指示の作業が不可能な場合、「失敗しました、ごめんなさい」といったエラーメッセージのカードをその場に置いていく。
「写真で指示を出す」デモンストレーションも興味深かった。食事の配膳をするロボットに作業指示を与える際に、「配膳が完了した状態」の写真を入力として与える。するとロボットがその配置になるよう動作する。
さらに、ロボットが「押す」という動作だけでモノを意図通りに動かすための理論、も披露した。「磁気双極子(ダイポール)型の軌道」に沿ってモノを押す動作を繰り返し、所定のコースに沿ってモノを動かしていく。
五十嵐氏の研究は、異なる領域の情報を結びつけて、鮮やかな成果を出していくものばかりだった。フリーハンドの2次元の図形から3次元アニメーションを即座に作成したり、ソフトウェアによるデザインから現実世界のモノ(ぬいぐるみ、家具、楽器、衣服など)を作り出したり、ロボットにカードや写真という直感的なやり方で指示を出したりする。その背後には、マン-マシン・インターフェイス研究の蓄積や、ソフトウェア技術がある。ソフトウェアの知識を持つ人がこの現実世界を変えるために「できること」は、実はまだまだ手つかずの領域がたくさんあるのではないか、そのように思わされた講演だった。
「エンジニア100連発」と出した企画では、著名なエンジニアたちが技を競いあった。
最初に登壇した小飼弾氏(@dankogai)は、ブラウザ上で多種類のスクリプト言語を動かせるツール「lleval」を紹介。
「ブラウザであなたのコードを実行できるツールです」
Perl、Python、JavaScript、Ptyhon、Ruby、C、awkなど多種類のプログラミング言語に対応しており、言語処理系が手元にない場合でも、ブラウザさえ使えればプログラムコードを実行して試せる。
小飼氏はiPhoneの画面をプロジェクタを使って投影してプレゼンテーションをしたが、ここでiPhoneの音声入力機能を使って、Perlによる「FizzBuzz」プログラムコードを入力し、iPhoneのブラウザで開いたllevalを使って実行してみせる、という芸当を行った。
竹迫良範氏(@takesako)はビデオ映像で参加した(竹迫氏のBlog)の最初のネタは、「Windowsのゲーム『マインスイーパ』を操って解く約5万2000バイトのPerl正規表現」という、ハッカー以外は手を出さないような種類のプログラムだった。
竹迫氏が最後に見せたものは、Polyglot(複数のプログラミング言語処理系で実行できるコード)だった。顔文字が並んでいるように見えるテキストファイルがMS-DOSで動く8086機械語として解釈されたり、Perlプログラム、Rubyプログラム、JavaScriptプログラムとしてそれぞれ動く(しかも処理系のバージョン判定機能付き)。まさに「才能の無駄使い」の真骨頂といえるデモンストレーションだった。
小泉守義氏は、「それは素人にはPythonのようにしか見えないRuby」である「Rython」処理系や、PHPで書かれたPython処理系(ただし処理速度は非常に遅い)という異様なデモンストレーションを見せた。
しかも、「このプレゼンはPHPで書かれたXlib(X Window Systemの描画コマンドライブラリ)でお送りしました」という強烈なオチで締めくくった。
「プログラミング言語PHPを、想定範囲を超えて使う」例として、ずいぶん遠いところまで来てしまったと思わせる発表だった。
はまちや2氏は、「ブロガー、クラッカー」という刺激的な肩書きで登場。氏は、mixiの脆弱性を指摘した「ぼくはまちちゃん!」事件( @IT関連記事: Security&Trust ウォッチ(33)「ぼくはまちちゃん」 ――知られざるCSRF攻撃 )で知られる。
はまちや2氏の講演タイトルは「ふつうのformをつかいたい」。Webサイトの「入力フォーム」がどのような場合に使いにくいと感じるのか、それをプログラマやデザイナが共有できる形で言葉にした発表だった(発表資料が氏のBlogにある)。
例えば、入力フォームのエラーは、サーバに送信する前にJavaScriptでチェックすれば、ユーザーの時間を奪わずに済む。パソコンに不慣れなユーザーは「03 1234ー〇一二三」と番号を入力するかもしれないが、これを「03-1234-0123」に変換することは可能だ。IE独自拡張のcssプロパティ ime-modeを使えば、「このテキストエリアでは日本語入力ソフト(IME)をオフにする」ような指示が可能だ。iPhoneの場合はinputタグのtype属性でキーボードの種類を変えることができる。
また、「遷移」「押下」「○○画面」といった「開発者の言葉」は、多くのユーザーにとって見慣れない言葉なので避けた方がよい。
フォーム送信ボタンに「2度押さないでください」と注意書きが添えられている場合があるが、これも機械の側で対処できる。フロントエンド側でクリック直後にはボタンを効かないようにする、またサーバ側でも二重送信に対応する、リロードによる再postを、Ajaxやリダイレクトにより防ぐ、といった作り方は可能だ。
郵便番号やメールアドレスの入力欄をそれぞれ2つにしている例もあるが、これは「設計側の都合」。メールアドレスを辞書登録して使っている人もいる。
Google検索の画面を開くと、検索語を入れる領域にフォーカスがすでに移動している(入力可能となっている)。「ユーザーが必ずここに文字を入力する」というページであれば、このフォーカス移動を考えてみる価値がある。
はまちや2氏は、このように「使いづらさ」の具体例とその改善策を次々と挙げていく。入力フォームの「使いづらさ」は、開発側のちょっとした努力や気付きで大きく改善することを示したプレゼンテーションだった。そして、はまちや2氏は「世の中のすべての入力フォームがマシになりますように」と締めくくった。
日本Rubyの会が受け持ったセッションでは、Ruby処理系の最新動向と、Rubyコミュニティの最新動向が語られた。
達人出版の高橋征義氏(@takahashim)は、「『Rubyは楽しい言語』ということだけ覚えていただければ」と話を始めた。Rubyはオブジェクト指向スクリプト言語として開発されたが、その特徴を突き詰めると、「楽しい」となる。RubyKaigi2008でRuby開発者のまつもとゆきひろ氏が「Rubyをキメると気持ちいい!」という名言を残している。プログラミング言語はつまり「道具」なのだが、道具にもさまざまな種類のものがあり、Ruby言語は道具としての「楽しさ」を追求しているのだ。
例えば、「余計なものを排除(できる)」という設計思想がある。変数宣言や、引数のカッコ、文末のセミコロン、これらはRubyでは不要だ。RubyによるフレームワークRuby on Railsの「Active Record」は、「データベースのレコードを表現するための言語」であるかのような記法を実現している。この種の「設計の妙」がRubyの持ち味だ。Rubyでありながら他の言語のように書けるドメイン固有言語(DSL : Domain Specific Language)を作りやすい点も、Rubyの特徴である。
実は高橋氏は、会場があまりに騒々しい様子を見て講演内容を急きょ変更したという。Rubyの文化に関する部分をばっさりカット、代わりに最近登場したばかりの組み込み向けに作られた軽量Ruby処理系「mruby」のデモンストレーションを見せた。プレゼンテーションの途中でmruby処理系をコンパイルし(つまり処理系がコンパクトであることを示しつつ)、ライフゲームのプログラムを実行して見せた。
櫻井達生氏(@tatsuoSakurai)は、自分自身の転職経験から、Rubyと「楽しい開発」について語った。櫻井氏は、以前の職場では「楽しくなかった」と話す。「1人ぼっちで開発、新しい良い技術を使わない、後ろ向きな人たちばかり。チームワークがない、放置プレイ、何も言われずコードが修正される。誰のために何を作っているのか分からなくなる。その現場でしか使えないような開発に関係ない業務スキルが要求される」。
そこで、「楽しい開発」について真剣に考えてみた。それは「新しいこと、変化することを恐れない」ことだと考えた。そして、アジャイル開発やペアプログラミングなど気になる言葉を調べていくうちに、現在の職場である万葉に行き着いて転職し、「そこでRubyと出会いました」という。
Rubyによるアジャイル開発の現場の経験を、櫻井氏は次々と語っていく。音読しながら突っ込みを入れていく読書会、チャットツールLingrを使った読書会、ソーシャルコーディング、Twitter駆動開発、github、クラウドプラットフォームHeroku・・・こうした環境に櫻井氏は助けられながら「たのしい開発ができる、より良いものができる」と櫻井氏は語る。そして、「たのしい開発」に至るコースとしては、「イベントスタッフをやってみる」「楽しんでいる人が集まるところに行ってみる」ことを勧めた。
笹田耕一氏は、最近、東京大学大学院からクラウドプラットフォームのHerokuへ転職した。「何をしているかというと、Rubyをフルタイムで開発しています。上司は(Ruby言語開発者である)まつもとさんです」(笹田氏)。
Ruby言語の「誕生日」は、1993年2月24日とされている。この日に初めて動くバージョンが作られたという。そして誕生から20周年となる2013年2月24日は、「Ruby2.0」をリリースすることが決まった。
そのため、2012年の8月には大きな機能をフリーズ(仕様決定)する。笹田氏は「Ruby2.0に入れたい機能があったら、皆さん早めにお願いします」と呼びかけた。Rubyへ寄せられる要望の「矢を受ける」立場の切実さを何となく感じる一瞬であった。
笹田氏は「おまけ」として、Rubyに「できないこと」がどれだけ残っているかを挙げていった。Rubyは標準ではない、と言われることがあったが、最近JIS/ISO標準となった。ドキュメントがない、言われることもあったが、草の根でドキュメントを整備する「るりま」プロジェクトが進行している。フルタイム開発者がいない、という批判もあったが、今はCRubyには3名のフルタイム開発者がいる。まともなM17N(多国語)対応がない、という批判もあったが、これはRuby1.9で解決した。まともな仮想マシンがない、という批判にも同様にRuby1.9で対応した(笹田氏はRuby1.9で採用した高速仮想マシンYARVの作者だ)。「あれ、Rubyは意外とまともな言語?」と笹田氏はボケて見せる。
とはいえ、Rubyについて、実装上の「やりたいこと」はたくさんある様子だった。Ruby処理系のさまざまな高速化の手法について、猛烈な勢いで笹田氏は概観していく。
「実行時情報を使った最適化では静的型付け言語に勝てる!」
「浮動小数点演算のメモリ管理のオーバヘッドを直したらやたら速くなった。2.0では入れたい」
「世代別GCを入れるにはCで書いた拡張にアノテーションを入れる必要があるが、互換性を損なうのでやらない方針」
「マルチスレッドをどうしてもやりたければJRubyで。CRubyの提案は軽量なプロセス間通信とMVM(マルチ仮想マシン)」
CRubyでの検討項目や開発方針を説明した。Ruby言語は、バージョン1.8の頃まで「遅い言語」扱いされる場合が多かったのだが、最新のRuby言語はひと味違うことが伝わってくるセッションだった。最後に「Ruby2.0は来年(2013年)2月に出ます。100%コンパチ(互換)です」と締めくくった。
角谷信太郎氏(@kakutani)は、Rubyコミュニティの活動について発表した。RubyConfはオーストラリアで開催されるらしいこと。GitHubで人と人との「つながり」をマッピングできること。
2006年から2011年まで毎年開催された「日本Ruby会議」は、2012年は開催されない。一方、地方のRubyコミュニティの動きは一層、活発になっている。角谷氏は、「地域Ruby会議(Regional RubyKaigi)」として、6月2日に開催する「みなとRuby会議01(横浜で6月2日開催)」、7月7日に開催する「岡山Ruby会議01」をそれぞれの代表者と共に紹介した。さらに7月には「TokyuRuby会議05」、9月14〜16日には「札幌Ruby会議2012」が予定されている。
Ruby開発者コミュニティは、結束の強さが目立つ集団だ。Ruby開発者であるまつもとゆきひろ氏をなんらかの形で支援する(例えば、開発者コミュニティのイベントで講演を引き受ける)という目的をもって人々が集まった経緯があるからだろう。
そして、日本Rubyの会が担当したこのセッションでは、プログラマにとって心地良い形で融通が利くRuby言語の「たのしさ」、それを実用に適用して「たのしい開発」に結びつける人たち、そしてRuby処理系の実装を担当する開発者たちという多様な目線でRubyとRubyコミュニティの特徴が語られたといえる。
Copyright © ITmedia, Inc. All Rights Reserved.