2012-11-14

レコーディングソーシャルダイエット、途中経過

はい、というわけで、オンライン上のソーシャルサービスを、無為に長時間利用するのを避けるために記録するというプロジェクトですが、まあまあ継続しています。しかし、記録しわすれもそれなりにあるという現状です。

記録内容について書いていませんでしたが、実はソーシャルなサービスだけじゃなくて、Google Readerなどの巡回も記録に取ることにしています。ぶっちゃけて言うと「ネットを使ったヒマツブシ」全般ということになりますでしょうか。

で、記録しているだけでも、1日に2時間程度はこういうことに時間を費やしているようです。予想以上に時間を使っている気がします。ゲームは1日1時間、とはちょっと違うかもしれないけれど、もうちょっと減らすべきですかね……。

ただ、当初の目論見通り、細々とした時間にちょくちょく見てしまうという問題は少し減っていると思います。習慣的に見てしまうことで時間を浪費することは減って、じゃっかんの時間の余裕もできつつある気がします。

とはいえ、そうそう思うようにはいきません。そもそも、特にナンにもしたくないダラダラしたいという状態がまずあるのであって、ヒマツブシの種を削ったとしても、ほかのどうでもいいことで時間を消費するだけという、なかば予想していた状況にもなってきました。まあ、ダラダラしたい時間にはダラダラするのがいいのではないかとも思うのですが、さて、どうしたもんでしょうね。

以下、枝葉末節ながら、記録を取る以外にやってみたことを適当に書いてみます。

  • 前にも書いたように、ケータイのホーム画面からもアプリのショートカットを削除。アプリ自体は残しておくが、せいぜいちょっとだけアクセスを悪くするため。
  • ところが、ケータイでの用途は、ちょっとしたあいた時間を潰すというものなので、アクセスを悪くする程度ではだめ。他のヒマツブシアプリがほしい。
    • キンドルは、ひとりで食事をするときなどはいいのだが、もう少し短い時間には向いていない
    • メールはそういうのに比較的向いているけど、いつも未読があるわけでもない
    • というわけで、InstaFetchというアプリを導入した。Instapaperで「あとで読む」にした記事を自動的に同期してくれて、いつでも読めるようにしてくれるアプリ。ロード時間がほぼかからないので、ちょっとした時間潰しに便利
  • いままで、こうしたサービスについては基本的にタブを開きっぱなしにしていたのですが、とりあえず閉じて必要なときに開くように方針転換。根本的に、こういう問題意識を持ってるのにタブ開きっぱなしはイクナイ。
  • こちらはいいヒマツブシの代替案がないのが現状。まあ本を読むぐらいかな……
というわけで、まとめると、そんなに順調というわけでもないですが、まあまあ続いています。

2012-11-09

財布なし生活のその後

おそらく誰も覚えてないと思いますが、年初から財布のない生活というのを試してました。せっかくなので近況を報告します。というか、まあ、ざっくりいうとわりと敗北な感じの話です。

改めて書いておくと、当時試行錯誤して到達したのは、財布に入れていたもののうち、
  • 小銭類は普段はあまり持ち歩かない、もしくは小銭入れをカバンに入れる程度に留める。お釣りの小銭はポケットにそのまま入れる
  • お札のためにマネークリップを使う
  • カード類はよく使うものだけを輪ゴムでまとめておく。残りは名刺ホルダーにまとめてカバンに入れておく
などと分散させるというものでした。小銭入れはけっきょく使っているので、ゲンミツに言えば財布の撤廃ではなくなったわけですが、普通の厚さの財布を後ろのポケットに入れておくよりはだいぶコンパクトになりました。

ただ、カード類に問題が出てきました。というのは、輪ゴムでとめるのはラクでいいなと思ったのですが、そのままずっとポケットに入れておくと、だんだん褪せてきたわけです。表面の色が少しぐらい剥げるならいいかと思ってたのですが、カード類で裏に書いた名前とかが読み取りづらくなってきたような気がしてきたので、これはちょっと別な方法を考えたほうがいいんじゃないかと思ったわけです。

で、リンク先の radium software の人でも、実際にはカード類には封筒を使っていると書いてあります。私もたまたま、カードにあうサイズの封筒をまちなかで見かけたので、これがいいんじゃなかろうか、と思い、切り替えることにしました。

ただ、これはもう生活スタイルか何かの問題だと思いますが、紙の封筒というのはかなりすぐボロボロになります。まあちょっとぐらい穴が開いても、カードをまとめて持ち歩くという用途には使えるのでいいんですが、しばらくすると完全にフチが破れて、カードを紙で巻くぐらいの状態になってしまうため、ある程度の頻度では交換しないといけなくなることに気づきました。

それでも引越しをするまで、ようは9月頭ぐらいまでは、ずっとそういう生活スタイルだったわけですが、アメリカに来てそういう封筒をどこで買えばいいかも定かではなくなってしまいました。まあ探せば普通にあると思いますが、カードを入れて持ち歩く用の封筒などというものを探してあれこれ吟味するぐらいなら、普通にカードホルダを買えばいいんじゃない?というかなり台無しな結論に到達してしまいました。

そんで買ったのがコレです。

数枚程度のカードが入って、マグネット式で紙幣を留める機能があるカードホルダです。まあまあ薄いし、たいしてかさばらないのはよいと思いました。どっちみちアメリカではほとんどの場合はクレジットカードが使えるので、現金を使うことは少ないんですが。

というわけで、カードホルダ兼マネークリップと小銭入れに分散しているので、いちおう「財布」は持たない生活になってるかもしれないけれども、まあ、当初の話からはちょっと遠いところに落ち着いたな、という現状報告となります。

ほんと人にもよるんだと思うんですけど、クリップとかなしで紙幣をポケットに入れてるとぐしゃぐしゃになってしまって紙幣が痛むし、小銭はポケットにそのまま入れてると実質使えなくなるし、カード類は上で書いた理由により何らかのカバーを必要とする気がします。なので自分の場合、こういうモノを管理するための何かはけっきょく必要だと思いました。

もっとも、それが「財布」という単独のものである必要はない、ということがわかったのはひとつの成果かなあと思います。うまくメンテすることで嵩を相当減らすことができますし、たいていの財布は構造上なかなか薄くはできないので、機能を分散させるというのは悪くないんじゃないかと思います。いっとき流行った薄い財布のようなものもあるのですが、あれも薄くて取り回しが便利な一方で、カードの枚数や小銭の容量には相当の思い切りがあり、使い始める前に自分の財布の中身を見返して、リストラ(再構築)をしないといけないものだ、と認識しています。つまり、「自分の生活スタイルを見返して必要なものだけポケットに入れる」という方向性じたいは、実はけっこう近いと思うのですね。

2012-11-02

レコーディングソーシャルダイエット / 30day challenge

アメリカでも11月になったということで、今月の30日チャレンジとして「レコーディングソーシャルダイエット」というのを考えてみたいと思います。この単語、どういう語順でも語弊があると思いますが、ようは「レコーディングダイエット」の手法をソーシャルメディア中毒に適用してみたい、ということです。

きっかけはHajime Morrita氏の投稿から「ネット依存」についての文章を読んだことでした。「ネット依存について思うこと」およびその反論記事への再反論記事である「ネット依存・続き」です。

ぼくも、「ネットの利用」はもう少し控えたいな、と思っている口です。ただ、ちょっと違うなという気がするのは、ネットの利用というよりはソーシャルメディアの利用というのが近い気がします。FacebookやGoogle+やtwitterや、ほかのなんでもいいんですが、何らかのソーシャルなメディアで無為に時間を潰してしまうことが多いなと思うわけです。
そういう意味では、↑の著者であるyucoさんの方法論は私にとってはやりすぎな面があって、スマートフォン自体は悪くない。たとえば、地図アプリは普通に便利だし日常生活を根本的に変えてしまうと思っています。ぼくにとって問題なのは、ソーシャルメディアの利用です。ぶっちゃけ、あいた時間でちょくちょくGoogle+とか見るみたいな。

だらだらとWikipediaを読んでしまうという問題もありますが、これはまた別な話かもしれません。それについては稿を改めたい。

こういうのは楽しいんですが過度に時間を使ってしまうのはいかんなと思うのです。実際、そういう観点からこういうののアクセスを完全に断っちゃう人もいますし、完全にこういうものを絶ったら生産性が向上した的なライフハック記事もよく見かけます。その通りだと思います。
でも、まあ、完全に絶ってしまうというのは私にとっては極端すぎる方法論だなと思うのです。そんな私にとっては、「依存」ではなく「誘惑」じゃないの、とする新井さんの指摘はいい点をついていると思いました。

つまり、もしこれが依存症だとすれば完全に断ち切ることが唯一の解決策となります。しかし、食べ過ぎと似たような問題なのだとすればダイエットの方法論を適用してみる、という考え方も成り立つ。

そこでレコーディングダイエットを適用してみるということを考えてみたわけです。レコーディングダイエットというのは、基本的には、自分の食ったものを記録していくというものです。本格的には品目を記載したり、カロリー計算したりするのですが、カジュアルには食べたものをひたすらメモしていくだけでもそれなりに効果があると言われています(たとえば大ヒットした岡田斗司夫の『いつまでもデブと思うなよ 』など)。
なぜ記録するだけでダイエットの効果があるのか、というのは明確にこうだという断言があるわけではないのですが、おおむねこのような理屈であると考えられている気がします。つまり、いまダイエットをしたい人というのがいて、その人の食生活に何らかの問題があり、したがってダイエットをしたいのだとします。メモしていくことで、自分がどれだけ食べたのかを把握することができ、ボトルネックを知ることができるというわけです。
また同時に、もし食生活の問題が間食や甘いドリンクなどであったとすると、いちいちメモを取るということが間食の頻度を下げることにつながります。書くだけで「わざわざ書くという手間をかけるほどのことか?」という疑問をもたげさせることにつながります。実際にはそのあと間食を食ってしまうとしても、なんとなく食べてしまう、といった状態と比較すると頻度は落ち、結果として間食の量が減るといったお手軽な効果があるのではないかと思います。

ソーシャルダイエットの場合、この後者がポイントなんじゃないかと思うのです。
いま、ソーシャルメディアへのアクセス量を減らしたいとしたとき、何が問題なのかというと、気軽にちょくちょくアクセスして時間を潰せてしまうというところなのではないか、という仮定を置きました。仮定っていうか、まあ自分の利用形態を念頭に置いています。こういったページを開きっぱなしにしておいて、何かちょっと時間があくと見る、みたいな感じです。これをやめる、ないしは頻度を減らすようにするためには、まさに同じような方法論が使えるんじゃないだろうか。

というわけで、何時何分から何時何分まで、こういうサイトを実際にブラウズしたか、というのを記録に取ることにしました。記録に取る場合、Chrome拡張などを使ってアクセス時間を自動的かつ厳密に測定する、ということもできるのですが、今回はそれをしないことにします。アクセスにフリクションをつけることが目的なので、手動の部分を残す、というのが大事です。
また、スマホについては、写真のアップロード等ができたほうが個人的にうれしいのでアプリ自体は残しておきますが、アクセス手段を悪くしておきます。たとえばホーム画面から除くなど。twitterのアプリは昔、似たようなこと考えたときにアンインストールしたのでいまは入ってません。

ぶっちゃけ、手動で記録するのは相当めんどいと思うので、すぐ飽きてやめちゃうかもしれません。30日も続いたらお疲れさま、とねぎらってやってください。続かなかったらギブアップ宣言をしますが、優しくしてあげてください……。

2012-10-31

Courseraの講義を翻訳してみた

ぐぐぷらを眺めていたら、行動的な知り合いがCouseraの講義に字幕をつけるのを手伝いたい、と申し出ていたのに気づいた。その後の進展を見ていると、実はCouseraの字幕翻訳という話はとっくにあって、amaraというサービスでボランティアベースで進めているらしい。

へえ、そりゃ面白い、ちょっくらやってみよう、などという軽い好奇心から、やってみたのでした。それがこちら。データ構造の講義の、赤黒木についての話です。以下はその体験談なのですが……

予防線を張っておきますが、この手の記事にありがちな「みんなもやってみよう!」という感じの気分にはなりませんでした。ぼくと同じく「へえ面白い、ちょっくらやってみようかな」と感じた人は、記事を最後まで読んでください。

さて。

どんな感じの作業になるかというと、少なくともCourseraの講義については、すでに英語字幕がついています。なので、その字幕をもとに淡々と日本語に訳していくということになります。ツールが使い辛いということはなく、あんまり問題はない気がします。ぼくはそのままブラウザで作業しました。

ですが、根本的に翻訳というのはしんどいわけです。どんな本でも一緒で、読むのはすぐでも翻訳となれば数倍とか数十倍という時間がかかります。読む場合にはなんとなく雰囲気で流しちゃうような細部の単語についても、きちんとどういう意味があり、文全体の構造を把握し、正しく日本語にしなければなりません。

もちろん、専門用語がバリバリなので、術語は定訳を使わなければいけないし、本当は同じ単語は同じように訳すといった労力を払う必要があります。あと、コンピュータ関係に特有の問題としては、カタカナ語が多いので、字幕の枠にあわせるのが大変な気がします。

しかも、講義というのは話し言葉なので、言いよどんだり、文法的に変な言葉になっちゃったりということもあります。なおかつ、映画の字幕とかと一緒で、あまり長文にならないよう、元の発言と時間的にもかけ離れたことにならないよう、気をつけて訳さないといけません。

さらに講義資料がある上でのことなので、「ここでこのノードが……」みたいな文章になっていると、英文字幕の字面だけから単に訳すというのは実際ムリで、講義を聞いてみて、こういうスライドでこういう言葉ならこういう訳になるか、などと確認しながら進めていくことになります。

さらにさらに追い打ちをかけるような問題としては、英語字幕の品質にも疑問があります。たぶん音声認識をベースにしていると思われ、不思議な字幕になっていることがあります。英文字幕だけから翻訳するとえらいことになりそうです。

結論を一言でいうと、「こりゃー大変だな」って感じです。たかが20分の講義ですけど、訳すのは何時間もかかりました。映画字幕の翻訳とかの大変さも垣間見ました。

というわけで、素人にはおすすめできない。

翻訳することで講義内容と英語を同時に勉強、といったお気楽なつもりで始めたらいっかな終わらない気がします。自分でよく理解している内容について書いてこんなレベルですからね。自分の知らない内容については、翻訳しないほうがよいのではないかと思います。

期待されるのは、高い専門知識を持った人間が長時間をかけて頑張れる仕組みである気がしており、こういうものこそ大学とか公的機関で、地道にやっていくのが望まれるのかなあ、などとぼんやり考えました。ボランティアベースではしんどい気がするなあ。正直、私は「もうしばらくはいいや」っていう気分です。

あ、ところで上の私がやった訳ですが、もちろんたくさん間違いが含まれていると思います。見て気づいた点があったら、どんどん直していってください。そういう細かい修正は、ボランティアベースが効く気もします。

---

ともあれ、Couseraの翻訳というのは、未来を感じるのは確かです。こうして優れた講義がオンラインで誰でも受講できるとなると、すごいことになるんじゃないかと、期待だけは胸を膨らませておきたい。

2012-10-22

高野豆腐を自作した

そうだ、豆腐を冷凍しよう


どうもご無沙汰しております。最近、たまに自分で料理をしています。たまにというか、まあ土日だけなんですけど。しかもアメリカにいるわけですけど。でも、私のいるあたりには日本食材スーパーが豊富で、ちょっと高いかもしれないけれど、そんなに食材で不自由したりはしません。まあそんなに純和風なものばっかり食べないですし。

そういうわけで、豆腐を買ったわけです。豆腐を1丁。で、味噌汁に入れたりとかしてたわけですが、なにぶん土日だけしか料理しないと、ひとりで1丁など使い切れません。余る。どうしよう。もちろん、平日に適当な大きさに切って醤油でも垂らして冷奴にしてもよいのですけど、ふと「これは凍らせると高野豆腐になるのではないか?」という妄想が脳裏をかすめました。

で、せっかくだからやってみた。

手順

1. まず、豆腐の上に適当な重し(皿とか)を載せて均等に圧力をかけ、脱水させます。んで、「高野豆腐ってそういえば薄かったよな……」と思い、適当な厚さに切り、冷凍庫にイン。

2. 翌日、冷凍庫を確認するとかちこちに凍ってました。これをいったん解凍させます。めんどかったので自然解凍させました。朝会社に行くまえに皿とかに放置すると、夜帰ってきたら解凍しているという。この時点でそうとう高野豆腐なアイデンティティを確立しています。なぜかちょっと黄色くなるし。なんでだろう。

3. 解凍したらギュッと絞って水分を出し、また冷凍庫で凍らせて、を繰り返しました。3〜4回ぐらい。

4. 何回か繰り返すけど、ある程度以上は水分が抜けたりはしなくなってしまった。天日干しにもしていなかったし……。ともあれ、この時点での見た目はかなり高野豆腐。たぶん完成、と思うことにする。

5. 冷凍庫で保管していたので氷結しているため、調理前にいったん熱湯で戻す。

6. 戻したら市販の高野豆腐と似たような感じになったので、ふつうに出汁醤油で含め煮に。

感想

テキトーに作った醤油味の雑炊と
普通にスーパーで売っている高野豆腐は、スポンジの「目」というか、穴の部分がきめ細やかだけど、これはふつうの木綿豆腐を適当に脱水して凍らせるだけなので、氷のぶぶんの大きさ(つまり脱水後の穴の大きさ)はまちまちであり、わりと大きな穴や亀裂ぽいものもけっこうできてしまう。

だが、そういう見た目にこだわらなければ予想以上にふつうに高野豆腐っぽい物体が出来上がった。味もふつう。穴も大きいので中まで味がしみる。本体も、むしろ豆っぽい味が強く出ている気がする。気のせいとか、自分作なので脳内補正が入ってるだけかもしれないが……。

作るのも、凍った状態から戻すのも時間がかかるのでおすすめではないのですが、まあ実験としてはなかなか楽しいかも。

そういえばアンデスの伝統食材として、じゃがいもを同じような工程で脱水してスポンジ状にするチューニョという食い物があるんだそうです。じゃがいもといえば、「冷凍にするとスポンジみたいになって不味くなる」(だから肉じゃがとかカレーとかは決して冷凍にしてはいけない)と基本事項のように言われる気がするのですが、敢えてそれをやってしまうという挑戦的なモノです。
面白そうなので、いずれやってみたい気もします。面倒そうだけど。

2012-09-28

Ernst Cline "Ready Player One"

嫌いになれない。

ギーク小説、というジャンルがあると思う。ギークな作家が、自らの体験を交えて書くようなタイプの作品だ。具体的な作品名やキャラクター名や設定が飛び交い、そこにどっぷりと「浸かっている」ような読者を喜ばせて、身悶えさせる。そういう意匠に凝りに凝った作品、っていうのが確かにある。
たとえば、秋口ぎぐるの『ひと夏の経験値』は、90年代にテーブルトークRPGをやっていた中高生というごく狭い人々にとってはただ事ではない迫真さがある。そういう狭い層にはいかんともしがたいというものがある、というタイプの小説というのは、たしかにある。

本書 "Ready Player One" も、そういう「ギーク小説」のひとつで、80年代アメリカのデジタルゲーム・アニメ・ゲーム・まんが・ポップカルチャーに強く依拠している。僕よりも少し年上の世代がストライクなのかな。いずれにせよアメリカの本なので、日本人にはそこまで強くは訴求しないかもしれないけれども、そういう道具立てがすごい。

21世紀のなかごろ、稀代のゲームデザイナーとうたわれたジェームズ・ハリデイがとある遺言のビデオレターを残す。ハリデイはもともと重度のおたくで、優れたゲームセンスを持ち、友達とゲーム会社を立ち上げて大成功する。だが21世紀初頭になって、MMORPGとSNSをくっつけたようなOASISというシステムを構築し、これまた大成功。この作品の時代には、このOASISというのがインターネットと同義になっていて社会インフラと化しており、なおかつそれが娯楽でもある、みたいな状態になっている。

ハリデイは自らの莫大な富を、このOASISのどこかに隠したのだという。それがビデオレターの遺言の内容だった。天涯孤独だった彼には肉親はおらず、富は宙に浮いている。ハリデイが隠した秘密を解き明かし、ゴールまでたどり着いたものがこの富を得ることができる。ヒントはないが、ハリデイの愛した80年代ゲーム・ポップカルチャーが強いモチーフになっていることが暗示されている。

これが発表されてからさあ大変、誰も彼も、猫も杓子も大企業も、この「イースターエッグ」を探し求める旅に出た。だがなかなか見つからない。手がかり一つとっても誰もわからない。人々はハリデイの嗜好から問題傾向を推測しようと、80年代ポップカルチャーの研究を深め、そういったファッションが大流行していく。だが、それでも見つからないまま5年が経過。人々の興味も薄れかけてきたそのころに、ついに変化がおとずれる。無名のハンターの名前が、突然スコアボードに躍り出たのだ。それが主人公である「ぼく」のことなのだが……。

どう思いますか、この筋立て。

似たようなことを思う人もそれなりにいると思うので、はっきり言わせてもらうと、こういうセカンドライフみたいなSNSが世界を席巻するみたいな世界観には、ぶっちゃけて言えばうんざりする。しかもこの本は刊行が2012年。2012年に出た本とは思えないほど、この小説内のサイバーカルチャーは時代錯誤感にあふれている。3DCGのSNSもそうだし、リアルライフとヴァーチャルライフの単純な二分もそうだ。いくらなんでもこれはないんではないか……などと思うのはもしかすると僕がMMORPGなどの文化に親しみがないからであって、スカイリムとかをやっている人にはこういうのもリアリティがあるのかもしれない。が、ともあれぼく個人の感想を正直に言うと、特に序盤は投げそうになるほど、この辺の感覚の齟齬が大きく、読んでいてキツいものがあった。

そもそもなぜ、SF作家は3DCGバーチャルリアリティがそんなに好きなんだろ? むしろ今となってしまうと、こういう世界にはリアリティを感じなくなってしまった。個人的には、3DCGのバーチャルリアリティ空間が採用されるのは、小説が書きやすいからだろうと理解している。チャットや掲示板だけで描写すると、あまりにも前衛的な文学になってしまう。大衆娯楽文化としては、会話の途中の細かい描写を描かないと読みづらくなってしまうし、そうするには手っ取り早いのは3Dにしてしまうことだ。そうすれば、目線を逸らしたり、身じろぎをしたり、そういった何気ない、言外のジェスチャーを描写できる。この本がそうなのも、案外とそういった理由だったりするのかも。

ともあれそういうわけで、ベースラインとなる設定は個人的にはかなりキツい。だが、娯楽小説としては普通によく書けており、読みやすいし、さらさらと読むぶんには特に問題を感じない。そんでもってむしろ、本書の核心はむしろポップカルチャーやゲーム・おたく文化の部分にある気がするので、ここにあまりこだわっても仕方ないのかもしれない。SFファンというのは基本的に設定にうるさいので、気にしてしまうわけだが……。

だが、そういう「きつさ」を乗り越えて読み進めると、やっぱりどうしても、嫌いになれない自分に気づく。なかに登場するゲームなどのネタの大半は、厳密にはよくわからんのだけれども、肌感覚でちょっとわかる。そしてその「わかっている感じ」というのはたまらない楽しさではあり、それこそが「ギーク小説」の(ギークにとっての)楽しみではあるわけだ。たまに登場する日本文化のネタはときどき微妙に間違っており(ウルトラマンの身長が156フィートだとか……アメリカではそういう設定なのだろうか?)、そういう感じでニヤニヤしたりする楽しみもある。それにまた、クライマックスの戦いで主人公がレオパルドン(東映スパイダーマンのやつ)に乗り込んで、「チェンジ・マーベラー!」とかやってから出撃してメカゴジラと戦う、みたいなところではやっぱり日本人のおたくとしては気分はそれなりに盛り上がり、「やっぱ嫌いにはなれないよなあ」としみじみしてしまうのだ。

つまるところ、この本は「ギーク小説」としてよく書けている。ギーク小説は、もちろん普通の小説として読んで楽しむこともできるけれども、中に散りばめられたギークネタを拾って楽しむというのがやっぱり楽しい、というタイプの小説だ。ぼくもそういう小説は好きなのだ。だから、どうにもこういう話は否定しにくいものがある。

まあ、苦労して読むほどの価値はないけれども、まんがいち訳されることがあったら読んでみたらいいんじゃないかと思います。

2012-08-29

chromiumの継続的インテグレーション

最近はどうもJenkinsとかTravisCIとかいうのが話題みたいなのだが、使ったことがないのでよくわからない。だがどうも漏れ聞く話を見ていると、こういうのは継続的インテグレーション(CI)と呼ばれていて、だいたい自分の社内プロジェクトでも似たようなことをやっているらしい。そこで、Chromiumがどういう環境でCIしているか、ということを簡単にまとめてみたい。あらかじめ書いておくと、名前が違うだけでだいたい普通です。

BuildBot
Chromiumは普通のクライアントプログラムなので、ビルド環境の想定がけっこう複雑だ。Windows/Mac/Linux/ChromeOS(最近はAndroidなどのモバイル環境)のようにプラットフォームは多岐にわたるし、同じプラットフォームでも様々なビルドコンフィグレーションがある。テストも数が多く、ローカルに走らせておくのは時間がかかる。

BuildBotは様々なビルド環境で実際にビルドし、テストを実行するフレームワークだ。複数のマシンインスタンスがそれぞれ微妙に違ったコンフィグレーションでビルドを行い、テストを実行してくれる。どこかに問題があれば即座に問題を報告し、ツリーを閉じる。

ツリーが閉じられると基本的にはだれもコミットができなくなる。問題のレポートは、問題となりそうな……つまりそれまでビルドが通っていたのに新しくビルドが壊れる状態になるあいだにコミットされたパッチの作者(たち)に送られる。問題を引き起こした開発者は、単純ミスですぐ直せそうなら自分で直すが、たいていの場合はrevertする。

鵜飼さんの講演にもあったように、Chromiumでは平日では平均で7分半にひとつといった頻度でパッチがコミットされている。このため、一つ一つのパッチをすべて段階的には確認するほどのリソースはかけず、複数のリビジョンをある程度はまとめてBuildBotで確認している。頻度が高いというのは、ツリーが閉じられたらものの数分で誰かが気づくということだ。ツリーを壊すと「お前の変更で壊れてるっぽいんだけど」と文句を言われ、せっつかれることになる。そんなときは冷や汗を書きながら、ごめんごめん、いまrevert中なんだ、などと答えたりする……。

sheriff
たいていの場合、ツリーの閉じられ方からはだれのどのパッチが問題なのかはすぐわかる。開発者は、壊れた状況から自分ぽいな、ということはすぐわかるし、壊したらすぐ自分で対処する。……とはいえ、完全に開発者の自治のみというわけでもなく、BuildBotとツリーの状態を守る専任もおり、sheriffという。

sheriffは専任といっても、実際にはローテーション制が採用されていて、担当になると数日間、ツリーの監視を行う。デベロッパは世界中にいるので、ローテーションも在籍地の時差を考慮して複数人が割り当てられており、さすがに夜寝てるあいだとかにはほかのsheriffが仕事をしてくれる。

sheriffの仕事は実際問題としてはそんなに忙しくはない。ふだんはのんびりと、メインの仕事をしていたりする。だが、ひとたびツリーが閉じたら問題を調べ、だれのどのパッチが問題を引き起こしたのか同定する。そしてその開発者とコンタクトを取って、修正が容易なら修正するし、ダメならrevertする。

炭鉱の庭師という記事を読んで、gardenerはsheriffより大変だなと思った。ツリーのcloseは自動的なためsheriffの仕事はリアクティブだし、上にも書いたように、多くの場合には何がツリーを閉じたのかは自明なので、負荷は大きくない。ごくまれにコンパイラのバグが顕在化して大混乱に陥ることもあるけれど……。sheriffはどちらかといえば、「ツリーが閉じててコミットできん!」と怒れるほかの開発者の代理に文句をいう仕事であり、仮に当該の開発者はもう家に帰ってしまったとかいった理由で反応がない、などの理由で連絡が取れない場合に責任をもってrevertする仕事だ。

trybots
BuildBotとは別にtrybotというのもある。trybotは、自分のパッチをコミット前に確認するための仕組みだ。trybotも同じように、様々なビルド環境とコンフィグレーションを持っていて、それぞれ名前がついている。winとかmacとかlinuxとかlinux_chromeosとか。そしてそれぞれ適当なリビジョンのソースツリーを手元に持っている。開発者がコマンドを発行すると、パッチを適用し、実際にビルドしてテストを走らせ、結果を教えてくれる。

コミット前に適宜trybotを走らせておけば、パッチの健全さはわかる。Chromiumの使っているRietveldには改造が施されていて、trybotを走らせた場合にはその実行結果が表示され、わかるようになっている。

trybotはBuildBotほどバリエーション豊かじゃないし、ごくまれにtrybotをすり抜ける問題もある。だが99%の問題はtrybotでふるい落とすことができると思う。パーセンテージの数字は適当 :-P

commit queue
trybotは確認のためのインフラであって、それ自体は自動化はされていない。trybotの手間を惜しんでしまうひとがいることもありうるし、まれに必要なtrybotを走らせておらず、うっかりビルドが壊れるということがある。たとえば、ChromeOSでしか使わないと思っていたら、とある特殊なコンフィギュレーションのMacでも使われることがあることを見落としていたとか、標準的なC++を自分では書いているつもりがVCでだけコンパイルエラーになるとか。私もいちど、ごく普通にあるクラスにkInvalidIDというクラス変数を足したところ、実はCarbon内でkInvalidIDは#defineされているためMacでだけコンパイルエラーになる、などという自体に遭遇してひっくり返りそうになったことがある。そんなの知らんがな……。

閑話休題。

そんなわけで、commit queue (CQ)がある。開発者がパッチにフラグをつけるとCQはそのパッチをひと通りのtrybotにかける。それで全部でうまく行ったものだけがコミットされる。これによってくだらない問題を回避できる。上で書いたMacの問題も、まさにCQによって発見された問題であって、これがなければうっかりビルドを壊してしまっただろう。タイミングによっては直せず、revertされてしまったかもしれない。

もっともCQにも弱点はある。というのは、一般的なtrybotでの確認しかしないから、特殊なビルド環境で開発している場合は自己責任でtrybotを走らせるしかない。それに、特定のプラットフォーム以外ではビルドすらされないような変更では、CQを走らせるのはたんに時間と計算リソースの無駄でしかない。

コードレビューとコーディングスタイル
コードレビューいろいろでも紹介されているように、Chromiumのコードレビューはコミット前に行う。デベロッパは自分でレビュワーを見つけ出し、指定する。レビューは(trybot等の表示の改造が施された)Rietveldを使っている。

レビューは基本的にだれがやっても良いし、だれに依頼しても構わない。ただし、ディレクトリごとにオーナーがおり、そのパッチで関連するファイルのすべてのディレクトリのオーナーからの許可なしにはコミットはできない。とはいえ、オーナーの数は限られていることも多いから(たとえばui直下のオーナーは3人しかいない)、そうした場合には、そのファイルやパッチの内容に詳しいレビュワーにまずレビューをお願いし、そちらのレビューがひと通り完了した段階でオーナーにレビューをお願いし最終確認をもらう、というパターンも多い。

たまに、ふだんあまりいじらないあたりのファイルをいじっていると、だれにレビューをお願いしたらいいのかわからないこともある。そのときは適当にログを調べて、最近そのファイルをいじってたりそのファイルの変更をレビューしている人をピックアップしたりする。比較的最近、Chromiumで使っているgit-clでは、チェンジの内容からレビュアーをサジェストする機能が導入された。experimentalだが、わりとよいサジェスチョンをしてくれることも多い気がする。

ところで、Chromiumではコーディングスタイルを定めていろいろ細々と決めている。ベースはGoogleのコーディングスタイルなどだが、さらに細々としたことも決めている。このあたり、人によっては意見もあるだろうけれど、コーディングスタイルを決めることには、このタイプのレビューと親和性があると思っている。

レビューでは、いろんな人が勝手にいろんなことを言う。細かく、どちらでもいいことであっても、いったんこうと決めておくことでレビューが進められる。たとえば、Foo* barであってFoo *barでない、などのスタイルは、本来はどっちでもいいが、いずれにせよどちらかに統一すべきものだ。だからすぱっと決めてしまえばいい。そうすることで、機械的に問題をチェックすることすら可能かもしれない。瑣末なことを決めてしまえば、本質的なポイントにフォーカスしたレビューができる……まぁ理想的には……と思っている。

goma / ninja
コードレビューの話はいささか本題から外れてた気がするので話を戻す。

ChromiumはほぼC++なので、ビルドの高速化は至上命題だ。gomaはChromiumで使われるクラウドコンパイラで、ローカルのファイルをデータセンターのインスタンスに送り、コンパイル結果を返す。コンパイル結果はキャッシュされている。大半の場合はファイルの変更はないから、gomaのキャッシュにヒットするとコンパイル時間は凄まじく高速化される。gomaはもちろん開発者の生活も幸せにしたが、実際にはBuildBotやtrybotでも使われており、これらのチェックの高速化に寄与している。

ninjaは平たく言えばmakeの代替物。いわゆるビルドシステムだ。ChromiumではビルドにはGYPというソフトウェアを使っている。GYPは.gypファイルを読み込むと各種のビルドシステム用のファイルを生成する。WindowsならVCのプロジェクト、MacならXcodeプロジェクト、LinuxならMakefileといった具合。GYPはninjaサポートを済ませており、簡単な設定でこれらのファイルの代わりに(あるいは加えて)ninjaファイルを生成する。

ninjaはプロジェクトの目的に高速であることを第一に掲げていて、実際makeより格段に高速である。なぜそんなに速いのか、実際のところはよく知らないのだけど……。

まとめ
Chromiumでの開発環境をひと通り解説した。

正直なことを言うと、少しも特別なことはしていないと思う。当たり前のことを当たり前にやっているだけだ。だから、こういう文章がどれぐらい参考になるのかはよくわからない。

また改めて書くまでもなく、こうした手法やツールは相互に依存し合っている。trybotみたいな仕組みが必要なのはプラットフォームが多岐に渡っているからだし、またコミット前レビューの仕組みとも関わっている。Rietveldはコミット前レビューが前提なため、他のレビュープロセスなプロダクトで導入すると面倒なことになるかもしれない。gomaが大きな意味を持つのは、開発言語が主にC++であることも大きい。

開発プロセスに正解はない、と思う。あるプロジェクトでうまく行っている、というのを聞きつけて、その一部だけ取り出してもうまくはいかないかもしれない。どちらでもいいが一方を選択している、ということもある。ChromiumでRietveldが使われているのはたぶんGuidoが作ったシステムだからという理由でしかなく、WebKitにRietveldを導入したい、という意見はあまり興味を持たれないらしい。WebKitはbugzilla上でコードレビューも行うため、issueと正確に一対一対応されるが、Rietveldはバグトラッカーではないため、issue管理は別にやる必要がある。Chromiumではissueの管理はcode.google.comで行い、Rietveld上でissueと関連付けられるようになっている。レビューツールとissueツールが別、というのはぼくにとっては自然だけど、そこはまぁ好き好きかもしれないし、ぼくがなにかに洗脳されているだけかもしれない。

ちょっと話がそれたが、それでもまぁ、こういう文章もある種のケーススタディとして何かの参考になるとうれしいかな、と思う。

images: