カリフォルニア州の運転免許を取得するまでのツライ道のり
前回までのあらすじ
カリフォルニア州の運転免許を取得した。端的に言って非常に苦労した。
この物語はゴールデンステートカリフォルニアと、彼を取り巻くDMVの、愛と絶望とUnprotected Left Turnが満載のアニメであーるぅ(CV若本規夫)
Social Security Number取得までの道のり
入国
僕はE2ビザで米国就労している。
入国審査で「ビジネス目的での滞在」と答えるのは初めてだった。
職業はプログラマでありこの国でもソフトウェア開発をすると伝えたが、職員に平衡二分探索木の実装を求められることはなかった。この日が3/19日。
I-94入国記録
入国した直後から、I-94というウェブサイトから入国記録を参照することができる。できるだけ迅速にこれを印刷してソーシャルセキュリティーナンバー(以下SSN)という社会保障番号の取得に備える。
SSN申請
SSNは米国で暮らす上で必要不可欠だ。携帯電話の契約、アパートの契約、ガスや電気(PG&E)の開通、運転免許証の取得など。そう、免許を取るための重要な依存関係である。
申請にはパスポートと前出のI-94入国記録を印刷してSocial Security Administrationのオフィスに持参する必要がある。いくつか選択肢があるが、僕はサンフランシスコのチャイナタウンにあるオフィスに出向いた。ここは職員が親切で仕事が早いと有名だが事実であった。およそアメリカの公的な機関でこれほど気持ちのよい対応を受けることはまずない。
住所は会社の住所で良いのでとにかく早くSSNの申請を済ませること。なんせこれがないと何にもできない。2週間ほどで無事到着。この日が4/2日。
筆記試験とINSTRUCTION PERMIT
アパートの契約
2016年7月1日より、カリフォルニア州の免許を申請する者は居住を証明する書類の提出が必要になった。例えば、
- アパートの契約書
- 銀行やComcast(ネット)の郵送の文書
- PG&E(電気やガス)の郵送の文書
が必要だが、郵送の文書はアパートを契約したはるか後にしか手に入らないのでアパートの契約書が最も難易度が低い。
SSNを取得するとアパートが借りられるようになるので、まずは一刻も早くアパートを契約する。本来は居住を証明できないといけないのだが、DMVの人もそこまで細かくは見ていないので、契約書にサインしてまだ入居してなくても受理されるかも知れない。推奨しているわけではまったくない。
筆記試験対策
SSNカードの到着を待ちつつアパートを探しつつ、この間に並行して運転免許の筆記試験の対策をする。先にカリフォルニア州の免許システムについて説明すると、
- 筆記試験に合格するとINSTRUCTION PERMITと呼ばれる仮免が発行される
- Behind-the-Wheel Drive Testという実地試験を合格すると晴れて免許が発行される
という仕組みになっている。民間の教習所は存在するが、これらに実技試験の合格を与える能力はなく、単に練習と実技試験の車を貸してくれたりするのみである。
実技はすべてDepartment of Motor Vehicles(自動車両局。以下DMV)で受ける一発試験のみである。
話が逸れた。試験対策でオススメの教材はズバリ、DMV Handbook(PDF注意!)という公式PDFである。日本語版(PDF注意!)もある。
なんでこれがオススメかというと、結局法律は時々刻々と変わるので最新の公式情報にあたるのが最も正確だからだ。技術者はこの辺の感覚は痛いほど分かるだろう。
あとDMVが出している公式アプリもオススメである。模擬試験が受けられ、ほとんど同じまたはまったく同じ問題が本番でも出題されたので当日朝にやればより盤石だろう。
筆記試験
筆記試験はDMVでしか受けられない。公式サイトからOffice Visit Appointmentで予約する。ただ予約は随分先まで取れない。僕の知っている範囲で、San Jose DMVはwalk-inつまり予約なしでも朝イチで並べば筆記試験を受けられる。過去2回程walk-inで行ったが、7時半に現地に到着するように行くとほとんど待つことなくあらゆるサービスを受けられた。DMVの中では比較的職員の対応も良いのでオススメのDMVのひとつである。
DMVに着いて新規に免許を申請しに来たと伝えると、申請用紙を渡されるので記入する。頭髪や目の色、身長をフィート・体重をポンドで書かされたりする。かなり慌てるので自分の身長が何フィート何インチなのか事前に調べておくと良い。
試験は日本語でも受けられる(紙らしい)が、英語で受ける場合は備え付けのタブレット端末で受けることになる。試験対策をちゃんと英語でやっておかないと交通の専門用語のオンパレードで厳しいが、タブレットで受けた場合は自信のない問題を3回までパスできる(不正解にならない)ので少し有利になる。
ただ僕はパスした2問が2問とも再出題された(再出題はパスできない)うえに両方果たして間違えたのでかなり納得いってない。ただ30/36問正解すれば良いので比較的楽勝。僕は4問も間違えてしまったが一発で合格。この日が4/3日。
合格するとINSTRUCTION PERMITという仮免許に相当する紙切れがその場で発行される。これは助手席にカリフォルニア州の正規の免許保持者が乗っている場合にのみ公道を走れるという許可証である。あとはひたすら友人や同僚に協力してもらって運転の練習をするしかない。
2015年までは日本の免許証を持っていれば筆記試験のあとTEMPORARY LICENSEが発行されて1年間は自分ひとりで運転の練習ができたらしいが、法律が変わって厳しくなっている。単身で来ている場合には非常に厳しい足かせとなる。
国際免許証
ちなみに日本の免許証を持っていれば国際免許証を発行できて1年間は米国で合法的に運転できるのでは?と考える人もいるだろう。これは間違いだ。
DMVハンドブックにあるカリフォルニア州法の説明を引用する。
カリフォルニア居住者となりカリフォルニア州内で車両を運転する場合には、10日以内にカリフォルニア州免許(DL)の申請を行わなければなりません。居住は以下を含むさまざまな形態で立証されます:
(中略)
・その他の非居住者は対象とならない権限/恩恵を受ける。
この、「非居住者は対象とならない権限/恩恵」にVISAを取得して就労している者が含まれるとの見解が一般的だ。つまり国際免許証は短期滞在者にしか適用されない可能性が高い。
Behind-the-Wheel Drive Test
予約
まず、実技試験の最大の難関は「予約」である。Behind-the-Wheelテストは事前に予約をした上でしか受けられない。walk-inは一切できない。この予約がとにかく取れない。
DMVの公式サイトの「Behind-the-Wheel Drive Test」から好きなDMVを選んで予約する。
実技試験はそのDMVの周りのコースを使って行われる。DMVの存在する街の人口、道幅、試験官等々、合否を左右する要素は多分にある。次のDMVは、複数の知人によって難易度が低いと言われているDMVである。
- LOS GATOS
- SANTA CLARA
- SAN JOSE
しかしながら、僕はこれらのいずれでも試験を受けていないので真偽についてはノーコメント。
必要書類の準備
試験を受けるには次のすべてが必要
- INSTRUCTION PERMIT(仮免)
- 有効な車両とそのREGISTRATION登録証
- 有効な保険
そもそもBehind-the-Wheelテストでは車両を自分で用意する必要がある。
僕は友人に車を売ってもらってそれを自分で名義変更(Title Transfer*1)してそれで試験を受けたが、自分の車がない場合は友人やレンタカーで借りる必要がある。
また車両には任意保険が必須となっている。仮免の状態では通常自分の名義で保険を掛けることができないので、僕は保険屋に直接電話をして国際免許証でも掛けられる非常に割高な保険に入った。免許を早く取れば取るほど差額を多く返金してもらえる。
出発前の対策
DMVにはカリフォルニア州の免許保持者と一緒に向かう。窓口でアポイントで来たと伝える際にちゃんと同行者の免許証をチェックされるのでテキトーな替え玉ではダメ。受け付けが終わると実技試験用の通路に行くように指示されて試験官が来るのを待つ。
試験官が来ると、先ずは車両そのものの保安部品のチェックをされる。
- 左ウィンカー、右ウィンカー。ライトは前後とも点くこと。
- ブレーキを踏んでブレーキ灯が点くこと。
- クラクションを鳴らせること。
ライトがひとつでも切れていたらその時点で不合格で試験終了。非常に時間の無駄なので事前にチェックしておくこと。
なおこの時の指示は当然英語なので知っておかねばならない。ウィンカーは英語ではblinker, signalなどと指示がある。ブレーキはfoot brake。クラクションはhorn*2
次に、各保安部品を知っているか聞かれる。
- ワイパーを動かすレバーはどれか。
- ヘッドライトを点ける部品はどれか
- くもり取りはどれか
- ハザードはどれか
- サイドブレーキはどれで、どのように使うか
- 手信号で左折、右折、ストップ(減速)を示せ
保安部品がまた、和製英語だらけで日本人殺しの罠になってしまっている。フロントガラス(和製英語)ワイパーはWindshield wyper, くもり取りはDefroster, ハザードはemergency flasher, サイドブレーキはemergency brake / hand brakeなど。余談だけどバックミラーも和製英語で本当はrear view mirror
手信号(Hand Signals)はYouTubeを確認して欲しい。
実技の対策
出発前チェックがOKならば、いよいよ道路に出て走ることになる。道路では主に次のことが問われる。
- 正しく右折(Right Turn)できる
- 正しく左折(Left Turn)できる
- 車線変更(Lane Change)が正しくできる
- 道路標識(制限速度、STOP他)に正しく従える
- 路肩に駐車(Pull Over)とバック(Pull Back)が正しくできる
基本的にはこれだけ!なんだそんなことかと思われるかも知れない。ただ日本と違う部分で注意する必要がある。
赤信号で右折できることがある
アメリカでは特に禁止されていない限り赤信号でも右折(日本でいう左折)できるケースがある。一時停止して左からくる車も対向から左折/Uターンしてくる車もいなければ曲がれちゃうのだ。ただしNO TURN ON REDと書かれていると違法。これが非常に分かりづらい交差点が存在したりして罠になっている。
Left / Right Arrow
赤矢印信号の場合はどんな場合も右左折禁止。
4 Way Stop
信号のない交差点は全方向STOPサインが出ており、これは停まった順に動きはじめる。同時の場合は右優先。
Center Left Turn Lanes
初めて見た時は衝撃だったけど、道路の真ん中に左折のために両方向から入れる道路が存在することがある。FREMONTのDMVだとこれを実際に試験で走らされたので心の準備が必要。
School Bus
スクールバスが赤ランプを灯しているときは反対車線の車も*3一時停止して絶対に追い越してはいけない。試験でも違反するともちろん一発アウト。
他にも山ほどあるんだけど全部は書ききれない。オススメの動画を貼っておくので見て欲しい。
合否判定
試験官は減点方式で候補者を採点する。15個までのMinor Errorは許される。
その他に、それを犯すと1発アウトのCritical Errorが用意されている。代表的なものをいくつか書くと、
- 右左折前にウィンカーを出し、ミラーを確認し、最後に肩越しに死角(Blind Spot)確認をしなかった
- 著しいスピード違反
- 一時停止をしっかりしない
- バック時に肩越しに後方確認しなかった
- バック時に路肩に乗り上げる
- 左折時に指定されたレーンから外れる
- その他試験官が危険だと判断した場合
等々。
試験1回目
初めての試験はFREMONT DMVで4/10に行われた。結果は不合格。
曰く、左折時に前方から車が来ているにも関わらず強引に左折(Illegal Unprotected Left Turn)した危険運転(Dangerous Maneuver)。Critical Error1発アウト。ペーパーを見ても分かるように、全コースを回りきったあとDMVに入る最後の左折であった。
ここから左前方のDMVへの左折。
この時の状況はよく覚えていて、前方の車は明らかに200フィートは離れていたので抗議したのだが実らず。これはわざわざ日付が近いからとFREMONTまで遠征したので最初から落とすつもりだったのではと今でも胸くそが悪い。
試験2回目
奇跡的に同じくFREMONT DMVが4/19に取れたので2回目の挑戦。結果はまたも不合格…
これもコースを全部回りきってDMVに帰ってくる手前の左折。
この位置で左折するように言われてそのまま点線に沿って曲がったのだが、DMVに帰ってきてからホントは居ちゃいけないところから線をまたいで車線をズレたと言われてこれもCritical Error一発アウト。
これも何度Mapを見返しても納得できなくて、2連続の仕打ちにFREMONT DMVの試験官にむちゃくちゃ悪いイメージを持ってしまった。
試験3回目
まさか3回目までもつれ込むとは思ってもみなかった。大体1回ぐらいはみんな落とされても不思議じゃないと励まされるんだけど、2回も落ちてる人は周りにほとんどいなくて、この歳になっても何かに2回連続で落ちるという事実に単純にもの凄いヘコんだ。
ちなみに3回連続で落ちると筆記試験からやり直しで、これまでかかった手間と費用がまたそのままかかる。これだけは絶対に避けたい。
この辺りで「すごい簡単だという噂のLOS GATOSにDMVを変更しようか…」などと悩んだが、LOS GATOSは人気で7月まで予約が取れない。妻が再来週渡米するので彼女の免許は僕がサポートする必要があり、7月まで待っていては生活がままならない。ということで、DMVにしつこく予約確認をして、4/26に最難関と言われるSAN FRANCISCO DMVを予約した。
結果はようやく合格。
SAN FRANCISCO DMVはめちゃくちゃ酷い坂道がいっぱいあるし、人も自転車も信じられないほどいるし、違法な2重路駐とかが平気でしてあるし、間違いなくこれまでのFREMONTとはコース的な難易度では比べ物にならないぐらい大変だった。なので初めて受ける人には全然オススメできない。
SAN FRANCISCO DMVで興味深かったのは、市内はあまりにも路駐が多いので公道で路肩に駐車&バックの試験が事実上不可能なので、DMVの敷地内であらかじめこの試験をしてから公道に出るスタイルだった。
それからひとつ事件が起こって、僕の試験官が直前に担当した16歳ぐらいの少年が速攻で不合格になってたぽかったんだけど、そのお母さんが試験官にクレームを言いに来たのだ。
母「ちょっといい?息子がどうして落ちたか説明してもらえる?」
試「試験中に起きたことは守秘義務があるのです(極めて紳士的に)息子さんには車中でしっかり説明し納得してもらえました。特にあなたにお話しすることはありません」
母「守秘義務だと、Bullshit!! 彼が素晴らしいドライバーなのはよく知っている。彼が落ちたのはお前がレイシストだからだ」
試「レイシストだとBitch!! 俺はメキシカンだ。差別してるのはお前らWhiteじゃないのか」(ここで同僚が止めに入る)
ぼくはもうホント勘弁してください俺の試験どうなるの…と干し芋みたいに縮こまって運転席に座ってたんだけど、帰ってきた試験官はもう陽気なお兄ちゃんに戻っており、朗らかに試験をしてくれたのでした。
これがTEMPORARY LICENSE。2週間から2ヶ月で本物が届くそうな。楽しみだね。
結論
DMVは地獄
35歳
ついに35歳になってしまいました。
35歳というともう少しちゃんとした大人を想像していたけど、結局のところ人間というのは突如成熟したりなどせず、過去の自分の積み重ねの写像でしかないのであります。
この2年ぐらいは自分の貯め込んだ知識をすべて会社のプロダクトと若手の成長のために注ぎ込んで参りました。ただもうちょっと僕自身も成長できるのではないかと考え、色々画策した結果幸運にも恵まれ、今こうしてアメリカ合衆国の大地を踏みしめております。
率直に言って老いは悲しいです。僕自身は正直500歳ぐらいまで生きたいです。たかだか80年というのは、僕がやりたいことを全て叶えるにはあまりにも短い。自分の人生が巡回セールスマン問題というのは中々皮肉なものです。しかしまあ、時というのは誰にも平等でありますから、定められた枠の間でベストを尽くすしかありません。
そういった中で、子供の存在というのはやはりかけがえのないものだなぁと感じます。僕が35になるのは悲しいですが、子供がその分ちゃんと5歳になるのだからまあ良かろうと思えるのであります。
子供とつなぐその手のひらが、小川をとびこえるその足が、パパにしがみつくその腕が毎日少しずつ少しずつ大きくなるたび、君の存在はこの世界の中にたしかに広がってゆき、僕はその分少しずつ小さくなりながらやがて大地に還って、そのまま風となって流れてゆくのだろう。千の風n…おっとJASRACがくる。
子供たちに会えてよかった。そして妻に会えてよかった。少し前は高校生ぐらいに戻って勉強をやり直したいと思っていたけど、妻と会ってやがて子供たちと出会うという、この書き換え不可能なコミットを見てしまった以上、そこに至らない歴史になんの興味もない。
35歳というかこれから2年ぐらいの抱負はやはり米国に来なければなし得なかった達成を遂げることです。この国と向き合い、この国の人々と向き合い、この国の問題に向き合って情報科学の力でこの世を少しでも良くしたい。我々プログラマはその力を持ってこの世に降り立った。幸運なことです。頑張ろう。
最後に、誕生日プレゼントはカリフォルニア州の免許が欲しいです…
というのは冗談で、本を書きます。Androidのテストの本です。とても良い本になる確信があるので是非買って下さい!ほいじゃあの!
言葉が持つ呪いにとらわれず生きたい
言葉は呪いを持つ。
趙の武霊王は紀元前310年、野台に立ち中山と斉を「望んだ」とある。
望むとは呪いを込めて見るということだそうだ(宮城谷昌光『楽毅』より)
すなわち攻め取るということだ。
時に僕は自分の望んだ自分になろうとする余り自分自身の言葉にがんじがらめになって動けなくなることがある。たとえば「アメリカでプログラマとして職を得るにはコンピュータサイエンスのマスターの学位が必要だ」といった思い込みだ。これは僕自身に対する呪いとなっている。
これは実際に自分がかつてビザの問題で就職に頓挫しその時色々調べた結果、これが最も確度の高い方法らしいと学んだ結果なのであるが、現役高校生ではあるまいし、冷静に考えると僕がこの方法に執着するのはまったく馬鹿馬鹿しいのである。
見渡すと、学位などなくても右腕一本でこちらの会社に乗り込んで行って職を得ている人などゴマンといる。僕もそうすれば良いのだ。
ここまでは僕の話で、ここからは僕自身が放った言葉の呪いが思いがけず他人を縛るかも知れないということ。特に若い人がたまたまアメリカでプログラマとしてやっていきたいという夢を持っていて、たまたま僕のエントリを読んで「あゝ自分は文学部卒だから所詮叶わぬ夢…」などと思わせてしまったら遣る瀬ない。そんなことを思う必要はない。学位を持たぬおじさんの学歴コンプ爆発と鼻で笑って自分の夢を追いかけて欲しい。その呪いを断ち切るためにこのエントリを書いた。エーンガチョ!これで君も僕も自由である。
ところで冒頭の武霊王は胡服騎射と言って、かつての中国における貴族的な戦車による戦いから、戦士が直接騎馬に乗って戦場を蹂躙するという"野蛮な北方民族"の戦術を採り入れて趙を一大大国に押し上げた。
僕も学位はなくとも10年の実務経験があるのだ。胡服騎射して攻め入るのみ!
本当はビザ面接、ソーシャルセキュリティーナンバーの取得から免許の取得までをエントリにまとめようと思ったのにカリフォルニア州の運転免許試験に落ちたので訳の分からんエントリになってしまった…じゃあの。
基礎教養というのは人生の打率を上げるためのものかも知らん
なまじあり物のライブラリやなんかを組み合わせてそれなりのソフトウェアが作れてしまうし、10年もやってりゃそれなりに哲学のあるコード(良いコードとは言ってない)が書けるようになったので、ともすれば自分をいっぱしのシニアエンジニアだと勘違いしてしまうときがある。
ただそういったものがないフィールドで戦う必要が出たとして、僕は急に戦うすべを持たなくなってしまう。
たとえば難関大学の数学や物理を出たソフトウェア技術者が周りにゴロゴロいるわけだけど、こと2010年代後半のAndroidアプリ開発(フレームワークより上のレイヤ)に限っていえば僕もそれなりに彼らと比肩できる自負があるが、彼らはこの世から急にAndroidが消えても次の何かにジャンプしてまた活躍する基礎がある。僕はそれが非常に恐怖だし羨ましい。
とかく自分は低レイヤに信仰にも似た崇拝感情をもっており、お釈迦様の手の上で楽しく踊っているとつい「この下はどうやって出来てるんだ」と不安を覚えてしまう。そして下に掘っていけば行くほどむき身の数学と対峙する必要がある。
ただこれは無意味な前提である。Androidは今日突然なくなりはしないし、低レイヤを突き詰めるとしてじゃあどこまでおりて行くんだ?半導体に電気ながしゃ気が済むんか?ということになるし、若干ノイローゼ気味なのかも知れない。
で、思うに、基礎教養っつーのは人生の打率を上げる以上の意味はないのかも知らんなぁというのが最近の気付きだ。
基礎教養はあるに超したことはない。そんなもんは僕だって分かりきっているが、さりとて高校のときにサボって10年寝かしちまったもんはもうしょうがないわけで、いまたまたま「上のレイヤ」でメシが食えてるんならそれでまあ良いじゃないと思うのが身の丈に合った幸せってもんなのかなぁと。
で、これも思うに、じゃあ基礎教養のないまま諦めるかっつーとこれはまあ僕の過去のエントリを見てもらうとお分かりのとおり僕は非常~~~に諦めの悪いおとこで、いまもチマチマやっとるわけである。ある日突然ハシゴが外されたときに僕も生き残る打率を上げたいんよ。
最後にツイートにも書いたけど僕はマジで普段エラそうに「技術者の待遇をあげよ!」とか喚いてるわりに高校数学もおぼつかない有様なんだけど、その僕が移動時間や夜眠れないときの睡眠薬に使ってる数学の参考サイトがこれである。
これは秘密にしておきたかったんですが、僕みたいに数学が本当に本当にできなくてプログラマになってから泣きながら復習してる人にこの「数学ハイパーテキスト」をおすすめします。僕はここよりわかりやすいサイトをみたことがない。こういうコンテンツに感謝の投げ銭したい。https://t.co/iJIQ5W45G6
— 父 (@fushiroyama) 2018年3月15日
「数学ハイパーテキスト」がいかに素晴らしいかはこのページを見ればわかる。https://t.co/5W7KBMkTdU
— 父 (@fushiroyama) 2018年3月15日
不登校等で数学を学べなかった人が「独習」できるように予備校講師の方が善意ではじめられたコンテンツなのだ。このページを読むだけでもう最高のコンテンツと確信できる。実際素晴らしいし。
これほど素晴らしいコンテンツが原初インターネットから存在しているのはこの世の救いである。なんとかして御本人にお礼を伝えたい。僕は数学が苦手だが数学が好きな生徒(34歳)です。ありがとう。
Macで貧弱なネットワーク回線を再現してスマホアプリをテストするTips
QAさんに口頭で伝えるのが大変そうだったのでブログエントリにする。
iPhone/AndroidアプリのQA時に貧弱なネットワーク回線を再現したいことがままある。そういうときは「Network Link Conditioner」と「インターネット共有」を使うと便利だよという話。
1. Network Link Conditioner
https://developer.apple.com/download/more/
から「Additional Tools for Xcode」をダウンロード。その時々で最新のものを選ぶと良さそう。今日時点でmacOS High Sierra (10.13.3) + Xcode 9.3用のAdditional Toolsで動作を確認。
古いNetwork Link ConditionerはHigh Sierraで正しく動かないので注意。
展開。Hardware > Network Link Conditioner.prefPane をダブルクリック。
こんな感じでSystem Preferencesに入る。
任意のProfileを選んでONにするだけ。Profilesは帯域やパケットロスも含めて細かくカスタマイズ可能。
2. インターネット共有
「共有する接続経路」に有線インターネットのデバイスを選択する。ここではUSBイーサネットアダプタを選択しているが環境によって読み替えて欲しい。
「相手のコンピュータでのポート」に「Wi-Fi」を選択して「インターネット共有」を有効にするとアクセスポイントができる。
右下の「Wi-Fiのオプション」からSSIDとかパスフレーズとかを設定できる。
3. つなぐ
AndroidでもiPhoneでもなんでもつないでください。低速回線が再現されます。
Androidも使える方法でもっと楽なのがあったら教えて。
DroidKaigi 2018で登壇してきたので振り返りとか補足とか
DroidKaigi 2018で登壇してきたよ!
Unit Test Hands On is underway! #DroidKaigi #DroidKaigi_room4 pic.twitter.com/jBfAxYQwyN
— DroidKaigi (@DroidKaigi) 2018年2月8日
資料はこれ。
ハンズオンのサンプルプロジェクトと課題はこれ。
良かった点
前日こんなツイートしてかつDroidKaigi公式アカウントがそれをRTしてくれたせいか、ハンズオンなのに立ち見/地べた座り参加者が出るほどの盛況だった。
アプリで登壇者に自分がおるのめっちゃ嬉しいな。DBもRESTもDomain層もPresenterも全部テスト書けるようになるぞ君たち。Presenterとか感動するよ。絶対おいでよ。 pic.twitter.com/nOiUSfrSM3
— 父 (@fushiroyama) 2018年2月7日
それから参加者の半分はUnit Testが初めてかそれに近い状況で、資料もハンズオン課題(の前半部分)もまさにそういった方に向けて一生懸命作ったのでそれに関しては満足している。
反省点
いっぱいある…
- Robolectricが初回実行時にダウンロードするライブラリの差分が会場ネットワークの詰まりで進まず、ハンズオンがストップした。これは運営さんやインフラを責めているのでまったくなく、そのような可能性に思い至らなかった自分が悔しい。
- GitHub APIが同一IPからの単位時間あたりの接続数上限に達してしまい会場でサンプルアプリが動かなくなった。これも事前の調査不足というか、実際にそういう目に遭ってみないと考えつきもしなかった。
- サンプルアプリをAndroid-CleanArchitecture風に設計し、その各レイヤごとにUnit Testを書けるようになるとめちゃくちゃ有意義なのでは?という想定のもとすべてを準備したが、会場の参加者がそれを求めていたように感じられなかった。完全に自分の独りよがりになった。
- ハンズオンとして参加者に書いてもらう部分の調整の甘さ。僕はUnit Testを書くことそのものは大好きだが、ハンズオンをそれほど主催したことがなく、課題として空欄にして埋めてもらう部分の難易度設定に難があったように思う。
- ハンズオン課題を英語対応しなかった。会場には日本語を解さない海外からの参加者の方もいて、その方には個別に対応したが、そもそもこれだけの規模のイベントでそういう参加者が当然に来てくださることをもっと真剣に考慮すべきだった。
とまあこれらはすべてもし次回があったときの糧としたい。まだ初日が終わったところで、2日目の早朝にぐずる赤ん坊を抱っこしながらこのエントリを書いているので、最終的なフィードバックの集計を待ちたいところだ。
サンプルアプリに関する補足
今回はスライドで座学をしたあと、前述のハンズオン課題をもくもく解いてもらった。
これはGitHubアカウントを入力したらその人のレポジトリ一覧を表示するという人類が一体どれだけ同じものを作ったのか想像もつかないほどありふれたアプリだが、設計には慎重な考慮を重ねてUnit Testもできるだけ「明日から仕事で使える感」を目指した。
個人的に課した縛りは次の2点。
理由は単純で、それぞれこのライブラリのことを説明するだけで50分のセッションができるほど習熟が大変だからだ。RxやDaggerが出てくることで今回の設計やUnit Testの本質がブレてしまうことを避けたかったのだ。
したがって非同期処理基盤には古き良きThreadPoolExecutorを用いDIはシンプルなコンストラクタインジェクションとFactoryパターンという古典に則った。
しかしながらシンプルで理解しやすさを求めて敢えてこれらの込み入ったライブラリを用いなかったことで却ってこれらのライブラリの恩恵でスマートに解決できている問題を自分で処理せねばならないという皮肉な結果となった。
誰にでも分かってもらいやすくするために特定のライブラリやパラダイム(例えばRx)に依存せずユースケースやレポジトリを書こうとすると、結局「特定のライブラリやパラダイムのお陰でキレイに解決できてた問題」が首をもたげてくるので、却って何がしたかったか分かりにくくなるな…(伝われ🙏)
— 父 (@fushiroyama) 2018年1月25日
このときには資料づくりは佳境でなかなか方向転換もままならなかった。参加者のみなさんの感想が楽しみでもあり怖くもあるが、なんとかこれらのライブラリを使わずありふれたJavaのコンポーネントだけで書いたことによる可読性の方がわずかでも勝っていると信じたい🙏
で、サンプルアプリで特に注目して欲しいのはやはり各レイヤのテストコードだ。
前述のレポジトリはハンズオン向けにcloneしたらデフォルトでtasksというブランチがチェックアウトされるようになっている。こちらはUnit Testが空欄になっている。これをmasterブランチに切り替えると僕が普段書いているようなUnit Testをひととおり書いてある。興味のあるひとは是非見てみて欲しい。
Repositoryより下のビジネスロジックの部分はみんなも関心が高いしテストコードも結構書いてると思うんだけど、ちょうど同期と非同期が混じり合うUseCaseの部分はどうやってテスト書いていいか苦慮すると思うし、Presenterなんかもテスト書きづらいんじゃないかな。Presenterはちゃんと書くとViewとのインタラクションを検証できるので是非プロジェクトをcloneしてみてフィードバックが欲しい。
DroidKaigiの感想
とにかく最高のひと言。
After Partyでスピーカーには風船を付けさせるアイディアは最高で、これのお陰もあって「白山さんですよね?」と数え切れないほどの人に話しかけてもらって本当に光栄だった。
スピーカー風船つけて飲んでるのでUnit Testの相談しにきてください #DroidKaigi pic.twitter.com/wsbwW1uPlm
— 父 (@fushiroyama) 2018年2月8日
それからAndroid 設計パターン入門という本の著者陣がほとんど居るという豪華な状況が嬉しくて子供のようにサインを求めて回った。
そういえば「Android 設計パターン入門」の著者陣がいらっしゃったのでサインを貰って回った。ここにあとSFの今井さんのサインが加わったら巨大な龍が現れてどんな願いも叶えてくれるはず https://t.co/CCON01SVN2 pic.twitter.com/P5hTqeaC5J
— 父 (@fushiroyama) 2018年2月8日
返す返す、これほど素晴らしいAndroid関連イベントは世界でも早々ないであろう。代表の日高さん、スタッフのみなさん、登壇者のみなさん、そして参加者のみなさん全員に深く感謝したい。
まだ2日目が控えているが、こういうのは早ければ早いほどその時の熱気が文章に乗ると思ったので赤ん坊に3回目の授乳をして抱っこしたまま早朝の暗い部屋の片隅でこれを書いている。
今日もまたみなさん楽しみましょう。じゃあの。
DroidKaigi2018「はじめてのUnit Test」の資料事前共有とフィードバックのお願い
2/8の DroidKaigi 2018 にて「はじめてのUnit Test」というハンズオンを担当します。
で、setohさんのこのツイートにシビレたので僕も資料を事前共有することにします。
DroidKaigi、順調に行けば週末に資料公開すると思います。見てもらえればある程度のレベル感と内容が伝わって、CfP読んだイメージと内容が違ったという事故は減るかと。逆に資料だけ見て満足する勢が来なくなるリスクはあるけど、それは僕以外の人にはプラスになるので全く問題ないです。
— setoh (@seto_hi) 2018年1月31日
資料はこちら。
念のため確認ですが、僕のセッションはあくまでハンズオンであって、
- 座学パートでこの資料をみながらUnit Testの書き方を解説する
- その後はチューターとしてサポートしながら各自ハンズオン形式でUnit Testを書いていく
ことを予定しています。ここで共有したのは前者の参考資料です。
本当はハンズオンのコードを共有したかったのですが、もうちょっと作り込みたいのでちょっと待って下さい。
一応、
- 初心者向け課題として、この資料にでてくるサンプルコード片のテストコードをひととおり用意しているので好きなように書いてもらいます。まったく初めての方はこれが達成できたら万々歳です。
- 中級者向け課題として、完全に動くシンプルなAndroidアプリを用意しており、これはいわゆるClean Architectureに範をとった構成になっています。これの各レイヤーのよくあるテストコードを書いてもらいます。かなり実践的な内容が詰まっていて、僕も共有するのが楽しみです。
という感じです。
で、これを見てくださったみなさんは資料でもうえに書いたハンズオン課題(構成案ですが)でもいいので、何でもコメントください。Twitterで @fushiroyama にリプライでもDMでもください。
とにかく参加者のみなさんに「有益だった!」と言ってもらえる時間にしたい。そのためには一時的に恥をかいてもなんら構わない。なんでもコメントください。それではよい週末を。