blog2020-01-20US移住とブートストラップ問題USに移住して4か月経った入社直後から希望していたUS移籍を会社にサポートしていただき、去年の9/21にビザつきの状態で入国して、その後出張で出国は挟みつつもシリコンバレーで生活し始めてかれこれ4か月経った。移住後の最初の2か月は右も左もわからず大変だったが、色々な人に助けられて今では落ちついて暮らせる状態になった。自分用のメモを兼ねつつ、運が良ければ識者から知見が集まるよう、僕がどこで困ったか本記事に書いておく。US移住に興味がある人の参考にもなると思う。2020US生活ブートストラップ問題クレジットヒストリーUSではクレジットカードやローンの利用履歴などに応じてクレジットヒストリーが付き、何かを契約する際そのスコアに応じて審査が行なわれる。クレヒスがないとクレカ、ローン、ネット、携帯、テレビ、家など様々なものの審査が降りない。クレヒスがないとUSで生活することが困難になる。問題は日本のクレカやローンの履歴は一般にUSのクレヒスにカウントされていないのでクレヒスが無の状態からどうにかクレヒスを付けないといけないことなのだが、クレヒスがないとクレカやローンの審査が降りないので一見すると詰んでいる。JALカードを使うことで、どうやらこれは日本にいても申請できる*1クレカなのにUSのクレヒスが貯まるらしい*2*3。発行しておくと楽かも。一度移住を終えて不要になっても解約するとクレジットスコアが下がるので解約しづらい問題もある模様。Cardを作るというのがある。Cardを申請しかけたけど、並行して最初の2種類を再度申請していたのが片方通ったのでSecuredの奴はキャンセルした。この手段はあまりおすすめできない。契約する時にはこの番号がないといけない。SSNの申請する際身元を確認する必要があるためUSの住所が必要なのだが、その住所のために家を借りようとするとSSNが求められる。銀行口座かクレカがないと家は借りられないが、それらを申請しようとしてもSSNが求められる。会社から手配されたコンサルの人にはSSNの申請フォームに会社の住所を書いておけと言われたので僕はそうしてSSNを発行した。Securityのサイトとかを見ると住所は会社のオフィスにしてはならないみたいなのが書いてあるので多分正攻法ではなさそうだし、うっかりホテルなどで仮の住所を設定してそこに到着が遅れたらそこから出れなくなるか、最悪追い出されると身元を他の人に奪われる可能性もあるので、なんとも言えない。これによってマンションを抑える時はSSNを持っていたけど、銀行とクレカの申請の時は、「さっき申請してきたからSSN届いたら提出するよ」で通った。申請する時に申請したレシートが貰えるのでそれで証明もできると思う。運転免許がないとレンタカーは借りられないし車も買うことができないが、運転免許の試験には自分の車を持っていく必要があり、その車の情報が免許に登録される。すればいいというのか。日本の運転免許を既に持っている場合に限るが、これは日本で国際免許を発行しておくことでどうにかできる。日本の運転免許を持ってるなら、神田に行くと数分で国際免許が発行できる。これを持っていると、1年の有効期限の間、旅行で滞在している人はアメリカでも運転して良いことになっている。注意が必要なのは国際免許が基本的には旅行者向けのもので、州によっては居住者はルールが異なる点である。カリフォルニアでは、居住者になって10日以内にカリフォルニア運転免許に申請しなければならないと明記されており、これを最も保守的に読むと、マンションを借りるかSSNに住所を登録した日から10日までしか国際免許が使えないという話になる。シリコンバレー近辺で車なしで生活するのは無理である。いずれにせよ、国際免許でレンタカーは借りられるし、日本人がディーラーをやっているガリバーUSAとかに行くと国際免許でも車が買えるので、それほど問題にならない。車を買う時に保険加入が必須で、その時も免許を求められるが、国際免許の情報で加入できた。医療保険に加入する際、SSNの提出が求められる。就労可能なビザでないと普通はSSNの申請ができないので、家族を医療保険に加入させる時に困ることがある。returnが必要で、移住直後にそんなものはまだ出していないのでSSNもITINもない家族が存在し得ることになる。加入の際に社の福利厚生サポートに電話した結果、適当な番号を埋めるよう言われそれで加入できたのだが、2019年の税金に関するフォームを医療保険の会社が作る際に再びSSNかITINの提出が求められた。ITINの申請について理解している同僚やHRがいなかったため3か月くらい特に解もなく困っていた。returnの際に申請すればよい」といった旨の回答をいただいた。その年のUS滞在が180日以上じゃなければあまり気にする必要はないらしい。ITINは空でフォームを提出してくれと言われて、とりあえず2019年分はそれでどうにかなった。ITINは税金の話なので、HRではなく税金のプロに相談しないと問題が解決しないという学びも得られた。US移住に関する雑多な知見ブートストラップ感のあった問題は上記の通りだけど、その他にも4か月の間で得られた知見がいろいろとあるので適当に放流しておく。日本食もある程度は食べられるアメリカに旅行に来ると大体ステーキとかハンバーガーとかパンケーキを食べがちなのでそういう食事をするイメージがあった。ステーキとハンバーガーは実際結構食べてる気もするけど、毎日それだけというわけにもいかず、やはり普段日本食を食べられるに越したことはないという気持ちになる。こちらで普通に飲食店に入った時の米のクオリティが結構厳しい感じがする。あり、そこに行くとまあ日本で食べられるようなものが調達できる。なくても近所のスーパーに日本食コーナーが割と広めに設置されていたりする。普通の値段で納豆が食べらるし、日本米も売っている。外食だと、寿司とラーメンが無限にあるのは御存じかと思うが、東京でも割とおいしい部類のラーメン屋もあったり、まだ行ってないけど二郎系ラーメンもあったりする。*9の日本のチェーン店もある。2019日本のテレビはあまり見れない番組やってる国に限らずまあそもそもそんなにテレビ見ないんだけど、年末年始にちょっと特番を見たい気分になることもある。Comcastでケーブルテレビを契約しているが、そこに追加でお金を払うとテレビジャパンというのが見れるものの、これはNHKがやっている奴なので基本的にはNHKの番組が中心で、他局のが見たくてもないことの方が多い感じになる。日本のどこかの家にチューナーつきのサーバーを置いてくる人もいるけど、僕はそれが難しい状況だった。あとはネットの動画サービス頼みという感じになる。Videoを使ってたけどこっちではNetflixを見ている。日本っぽいコンテンツでも何故かUSでだけ配信されてたり、USっぽいコンテンツでも何故か日本でだけ配信されているといった不思議な状況がある。シリコンバレーの家賃は想像ほど高くないかもしれない前回の記事にも微妙に書いたけど、僕が懸念していたほど家賃が高くならなかった。あり、それが年に1〜2割上昇しているみたいな情報を目にした。マウンテンビューにいる同僚も大体そのくらいの家賃で住んでいると聞いていたので、自分の家賃もそのくらいすると思っていた。この2つは全然額が違うと思うし、多分今の家賃もそこからめちゃくちゃ乖離しているわけでもない気がする。最近だとこういう話もある。子供がいる同僚と違い、まだ1ベッドルームで問題ない。前の記事の繰り返しだけど、アメリカの1ベッドルームは少なくとも2人なら十分暮らせる面積がある。まあしかし家賃が安いところは大体治安が悪いか学区が良くないので安いというケースが多いので、お金は必要である。病院では通訳がつけられる医療系の用語は難しいし、妻が病院に通う際英語の通訳が必要になったのだけど、話で聞くところによると大体病院が通訳を用意していないといけないことになっているらしく、なんか部屋のスピーカーで通話越しに通訳が入れてもらえるということを学んだ。これは病院に電話する時も使える。英語が得意でない家族が一大事の時でも安心できる。予約さえ取れれば、日本語が喋れるドクターもいる。ビザつき初入国は審査が厳しい重要な書類が入った本棚を航空便で別送しながらビザで初入国しようとしたところ、ビザ申請時に使った書類を見せないと入国を許可しないぞと言われた。普通に移民弁護士にも持ってくようメールで言われてたので不注意だった。SSNの申請を済ませたかった関係上どうしてもビザのステータスで入国したかったので「頼むよ〜」と言っていたら「次は持ってくるんだぞ」みたいな感じで通してもらえた。実際には2回目はビザスタンプだけで通してもらえた...荷物の航空便はすぐ着くとは限らない航空便なら2週間くらいで届くと言われていた荷物が1か月くらい届かなかった。届くだろうと期待していろいろ航空便で送っていたので、それが届くまで元から家具のある仮アパートから自分たちで抑えた部屋への引っ越しがなかなかできず、大分ストレスが貯まった。これから移住する人は、これだけあれば最低限暮らせるだろう、というレベルの荷物は手荷物で持っていくのが良いと思う。永住権の申請は可能なら早めに始めたい普通、ビザは3年くらい経ったら更新手続きが必要になるが、先にグリーンカードの手続きを終わらせてしまえばペーパーワークに使う時間が減って効率的な感じがする。グリーンカードの書類の準備を始めてから受け取れるまでに2〜3年はかかるのが普通なので、入国してからすぐ手続きを始めないとその目論み通りいかない感じになる。直前に移住していた同僚もすぐにプロセスを始めていたと聞いて、僕も申請したい旨をHRの人に伝えたところ割とすぐ手配していただけた。書類集めの最中だけど。他にも以下のようなことを書きたかったけど、記事が長くなりすぎるのでここでは短くまとめ、もし詳細に興味がある方がいればメンションなどしていただきたい。解約は原則退職時なのでUS移住と同時になってしまい、個人型への移管が面倒だったビザ申請者の年収は公開情報になっているシャワーヘッド交換すると便利、あと多分浴槽は自分でカーテンかけるより最初からガラスの仕切りがついてる部屋の方が快適そう車は馬力がないと高速道路の運転に困りそうだと思ったが、割と皆それほど高くない車で生活している。駐車場が狭くて車を早速ぶつけてしまったので、運転が久々という人は一台目はなるべく安い車にしておくのがよさそう何とは言わないけど、VPNサーバーを立てるならIPv4だけじゃなくてIPv6もトンネルを通るようにしないと期待通り動かないことがある。マンションの敷地にはジムとBBQ場とプールがあるっぽくて面白い。うちはテニスコートもある。Wiseで最小限の円を送金した。Securityというサイトを使うが、2度もロックを解除してもらってリトライしたがアカウント作成に失敗した。stubなど、収入を証明する書類が信用の根拠になる。同時に銀行を申請している場合は、最初に銀行にいくら入金したかが見られているように感じたが、後者は気のせいかもしれない。*6:が、Residencyがestablishされる条件は正確にはもっとゆるい可能性があると思う*7:記事投稿時点では無意識に選択肢から外してたけど、仮免はDMVに早朝に並ぶなどするとすぐ取れて、かつ隣に免許持っている人を乗せると運転できるようになる。その同乗者は運転試験の時は必ず必要だけど、それまで生活している間いつも同乗してくれる人を見つけるのはなかなか大変そう。発表RubyのJITの話を伊東で1回、東京で2回、博多で1回、USで1回、ロシアで1回の計6回話した。今年はかなりいろいろ試した割にはなかなか成果が乏しい感じだったので、来年はバーンと成果を出していきたい。年々少しずつながら多少は英語で話をするのに慣れてきた気がする。自分が英語で話してる動画がたまってきたけど、最初に比べるとマシになったと信じたい。2.7去年書いてなかったけど、英語のPodcastにも2回出ていた。US生活2018年は1年間SREチームで主にPythonを書いていたが、2019年は年明けからバックエンドチームというところに移ってKotlinを書いている。バックエンドチームの中ではストレージチームというサブチームにいて、TDで動いているクエリエンジンのストレージに関連したサービスのメンテナンスをしている。クエリの最適化をするために必要なメタデータを提供する下準備として、その基盤となる部分をでかいRailsからKotlinでDropwizardのサービスに切り出すということをやっているが、結合箇所が比較的多く大変なのと他にもいろいろ仕事がある関係でまだそれをやっている。デプロイするように移行したりした。トラフィックも多く移行リスクが高いようなサービスを安全に移行するために使っていて、歴史の長い3つのサービスで使われている。地味に成果物がいくつかオープンソース化されている。入社時から希望していたUS移籍が叶い、妻と一緒にUSに移住した。US移籍が退職のち入社扱いだったので9月に有給を消化しまくり、10月からマウンテンビューオフィスで働いている。Armオフィスがサンノゼにありそちらに近くしようと考え、サンタクララのほぼサンノゼみたいな位置に住んでいる。家賃は月2700ドル弱。東京オフィスにいる時は英語だけ喋る同僚が近くにいて英語で会話する機会が割とあったが、こちらのオフィスで僕が関わるエンジニアが大体日本語を話せるので、仕事中あまり英語を話さなくなった。Zoomで英語を話す機会が週2〜4回あるし、プライベートで外にいる時に英語を使うので英語を話す時間はトータルでは増えていると思う。ブログ書きたいなあと思いつつ書いてないネタがまだ3つくらいあるんだけど、コードを書くのに比べて文章を書くのが大変面倒なのであまり書かなくなってしまった。MediumJVMの奴は本当はOpenJDKのVMやJITの実装がCRubyと同じレベルでスラスラ読めるところまで行きたかったけど、独力ではちょっと大変だったので一旦やめた。ご存じの方がいたらご共有ください。新作は習作のJJVMだけ。https://github.com/ruby/ruby/pull/2064。StudioとSolarisに少し詳しくなった。SVNから移行しつつ周辺をモダン化するのを中心にやった。400コミットくらいしてる。https://bugs.ruby-lang.org/issues/16094。GitHubはミラーなので、つまり本家gitリポジトリと双方向同期を実装した。そのうち記事で紹介するかも。https://bugs.ruby-lang.org/issues/15843。GitHub時代には全く不要なGitリポジトリ運用の知見が貯まった。Actions対応のサポート。orgにベータが来るのがやたら早かったので、Actionsは大体ruby/rubyで覚えた。入力をevalするプラグインを作って使ったりしている。https://github.com/ruby/ruby/pull/2150。pryと違ってデフォルトでインクリメンタルにハイライトするところが便利。https://github.com/ruby/ruby/pull/2226。高速化前の奴も4年前に僕が書いた奴なんだけど、4年経つとより良いコードを書くことができる。スタックに積めばいいじゃんという発想を足したもの。SSEを使った実装も2回くらいやったけど、それと比較しても割と良い性能特性を持ってると思う。https://github.com/k0kubun/hamlit/pull/146。HamlitがRubyのテンプレートエンジン界最速(タイ)に返り咲き。上記のブログでも紹介したのでそちらを。sqldefがブラウザで試せるようになった。足りなかった機能を色々足した。ご利用いただいている皆様にはいつもお世話になっております。itamae-kitchen/mitamae社内でヒットしたマイナーバグ達を色々直した。社内リポジトリ的には3つながら、クラスタが多いサービスで使われる傾向にあるので、今では社の400〜500台のサーバー上で使われている。https://github.com/mrbgems/mruby-yaml/pull/12。社でChefからmitamaeに移行する時に、CRubyのYAMLと挙動を揃えてオペレーションdiffのチェックを楽にするために色々直した。https://github.com/itamae-kitchen/mruby-specinfra/pull/12。Rubyからmrubyのコードへの変換、完璧にやるのは不可能なので要経過観察だけど、mitamaeのspecinfraの改善のキャッチアップが遅れがちだった問題がほぼ解決して良かった。iBTで100点越えたいと思っている。14:362019年にやったことTweet広告を非表示にする2019-09-16Rubyで最速のテンプレートエンジンを作る方法HamlitというRubyで使うテンプレートエンジンをメンテしてて、ちょっと前に思いついたけどこれまで実装してなかった最適化のアイデアを昨日それに実装したので、それについてちょっと書きたい。あると主張されている。2017もう2年も前の話になりつつあるが、今でもこれは最速だと思う。ファイルを裏側でRubyのコードに変換しevalすることで動作している。}...以下のようなRubyのコードを生成する。Interpolationが使えるだけの一つの文字列リテラルになっている。Interpolationに限らない。_erboutにコンパイルされる。Bufferと呼ばれている。Bufferのようなコードを生成することでテンプレート内での分岐を可能にしたりしている。するという方法もある。いくつかのHaml実装*2はこのようなコードを生成している。Interpolationを使ったコードが最速になると思っている。呼ぶ度に文字列のバッファを拡張しないといけないことになる。呼ぶ度に走り得るし、Arrayオブジェクトは他の方法では作っていないので、その分無駄になる。要素数が少ないときは元の実装の方が速いらしく、状況に応じて適切に最適化がスイッチするようになっている。通常のメソッド呼び出し分のオーバーヘッドがかかっている。呼ぶので、文字列がinterpolateされている時高速で、また文字列連結はconcatstringsという単一の命令内で完結するのでとにかく余計なメソッド呼び出しが発生せず速い。HamlitStringTemplateが出るよりもさらに2年前、HamlitというHamlの高速な実装を作り、当時最速のテンプレートエンジンだった。Bufferのコードを生成するようになっており、StringTemplateの方が速くなってしまっていた。v2.9.5では*6以下のような結果になっていた。してもそのまま使うことができる。Haml実装が同様に高速なコードが生成できれば、わざわざStringTemplateな用途に別のgemをインストールしなくてもよくなるはずである。書いたりする必要があるので、それらは互換ではない。なくて分岐とかしたくなった時にすぐできるし、便利なのではなかろうか。Interpolationのコードが生成されるような最適化を導入した。StringTemplateと同等の性能が出るようになった。Interpolationを生成するように変えれば良い、という程度の簡単な話ではない。そんなことをしたら分岐ができなくなるし。HamlitではHamlとの高い互換性を実現するためにHamlのパーサーをそのまま使っている。入力がわざわざ各行で別の文字列リテラルに分解されている。これはテンプレートエンジンが行番号を維持しながらコード生成をする必要があるため、このような挙動にすることによって後続のコンパイラの実装を楽にしているのだと思う。して文字列リテラルを抱えているので、これを受け取ったコンパイラはまずRubyのスクリプトをパースして、それが文字列リテラルだった時のみ、連続した文字列リテラルを結合するということが必要になる。上記の通り行番号を維持する必要があるため、コード生成器で改行するための特別な中間表現を文字列リテラル内の改行と交換する必要があったり、またもしStringTemplateと互換でないテンプレートも最適化したいなら、既にトークンがバラバラの中間表現になった世界で、どの改行は文字列リテラル用のものなのかを適切に判別しないといけない。先ほどのASTをコンパイルしていくつかのフィルタを通すと*9以下のTemple中間表現になる。生成コード上の改行である。