2020年振り返り

Thomas Land
夏にコロナの第1波と2波の合間に行ったThomas Land

このブログの更新めちゃくちゃ減ってしまったので前回が2月に第2子が生まれた時でその前が2019年の振り返りだった...! 来年はもうちょっとブログを気軽に書いていきたいけど、その分日記的にTwitterで呟いていたような気がする。来年は日記を書くモチベーションを高めるためにシンプルなブログをJekyllみたいなやつで構築して運用してみたい気もする。

前回の振り返り

ainame.hateblo.jp

COVID19

世界中の人が影響を受けたCOVID19だけど自分は幸いにも仕事はリモートワークも出来たし、家族も直接の被害をまだ受けていないので無事生き延びることが出来た。一方でイギリス国内の感染状況はとても良いとは言えないし医療も日本ほど便利ではないので少なからずの不安はあるが、とは言え自分の住んでいるところはあくまでも一地方都市だし不必要にリスクに晒される生活はしてないのでなんとかこのまま生き延びていくしかない。

危機感みたいなものは相対的なものだと思っていて、自分の住む都市のBristol(人口約50万人)のそのうちの中心部のエリアだけで1日あたり最大400人ぐらい新規の陽性者が出てた。この400人というのは、自分が日本のニュースをみていた限り人口1000万人の東京だけでその数値が出た時は当時そこそこ騒がれていた数値だと思うけど、人口10万人単位とか比較したらでみたら桁違いの数値がこちらでは出てるけどみんなまぁ普通に暮らしていたように感じた。イギリス国内を省みると他のエリアの方が状況が悪いし、きっと大丈夫だろうみたいな謎の安心感があるのかもしれない。

coronavirus.data.gov.uk

とりあえず最近の生活状況をシェアすると

  • Four tier alert level によって生活が制限されていて現在 BristolはTier 3 (Londonは4)
  • Tier 3でもスーパーはもちろん生活必需品以外の店も開けるがレストラン・パブは閉まる
  • 店以外でも娯楽施設とか子供向けのイベントはほぼ壊滅的なので雨の多い冬場に子供たちを連れていくところに困っている
  • イギリスに住むメリットの一つのヨーロッパ各国への旅行が無になって残念

冬場の閉塞感はすごいあるけど、家に籠っている間は特にそこまで生活に苦労はしていないという感じ。短期的にはまぁ良いけどこれが2、3年続いたら心がどんどんすり減っていくと思うので少しでも状況の改善を期待したい...

業務

最近の業務はiOSエンジニアというよりはiOSチーム内でのなんでも屋さんみたいになってきていて以下のようなことをした。

  • iOS13までApp Store自身が対応してなかったせいで生まれたアラビア語向けバイナリとそれ以外の国向けのバイナリを統一して単一のアプリとして移行する
  • App Store Connectのmetadataを外部の翻訳サービスと連携してエンジニア以外でもfastlane/deliver経由で更新できるようにした
  • アプリの自動化したリリース作業を呼び出すSlack BotをSwift + Vaporでリニューアルしてshortcutsからボタンぽちぽちでリリースできるようにしたり機能を追加したりした(各種コマンドを思い出すのがだるい)
  • アプリのApp Store向けのスクリーンショットを完全自動化して多言語化対応してデザイナーを介さずに定期更新できるようにした(主にRTL対応の都合からfastlane/snapshotとframeitは未使用でフルスクラッチで同等のものを全部Swiftで実装した)
  • fastlane/deliverでスクリーンショットのアップロードが遅い+安定しないため激しく書き直して直した
  • 開発しやすさの向上のためにframeworkベースでの開発に移行するための準備として既存モジュールの依存とかをひたすらひっぺがしてリファクタリングしまくってる(未完)
  • その他アドホックで短期的な実験的な機能の実装をしたりアプリのデザインシステム対応プロジェクトに参加したり

fastlaneを直した話は会社のブログに上げているので英語だけどよかったら読んでみて欲しい。スクショ自動化の話もブログ化する予定ではある。 

sourcediving.com

ほとどんのタスクはチーム開発というより1人で作業し続けていて必要に応じて人に声かけていってやり切ったという感じでリモートワーク環境の中では結構やりやすかったと思うけどその分孤独感も少しあった。例えば、スクショ自動化のプロジェクトは本当に0から10まで自分1人で試行錯誤しながら苦労して実装したので結構時間がかかったのだけど、果たしてこんなに時間かけてやって良いもんなの?みたいな葛藤は日々あったけど、2週に1回の1on1とかで進捗について冷静に話したり、コロナ禍だし仕方がないみたいなことを心に言い聞かせてやり切ることができた。何事も気持ちを強く維持するのは大切だと思う(精神論)。こういった働き方もありだと思うけど、コロナ禍だからこそチームでスクラム的な開発をする方が各個人の心理的安全性とか働きやすさを担保する上で良いと思った。

業務内容以外で会社の環境面では今までスタートアップみたいな状態だったのがついに給与・評価面での人事制度が整ってきて、↑の自分の業務が評価されることがあってなんか報われた感じがした。今までは闇雲にアプリに実験的な機能を追加しては消しの繰り返しだったけど、業務を機能開発から基盤よりの仕事に切り替えて自分のペースで自分なりに価値があると思うことをやることが出来てそれが評価にもつながったので働くモチベーションにつながった(給与もちゃんと上がる予定)。

リモートワーク

弊社は3月ぐらいからずっとリモートワークに切り替えていて物理出社は基本無し(家から働くのが難しい人向けのみ)。とりあえず来年3月までやることも決まっているけどこれはワクチンが普及して少なくともイギリス国内の状況が変わるまできっと継続していくんだろうと思っている。

リモートワークとインターネット

リモートワーク一番のハードルとしてはやはり自宅のインターネット環境で、元々市街地中心部に住んでるのにアパートのビルの中まで回線を引く工事が出来ない問題があって、今年の春まで最大12MbpsのADSLの回線しか使えず、平均2〜3Mbpsという感じだった。3月にようやく1年の契約縛りが終わるタイミングが来たので違約金なしで解約して(こちらの違約金は残り月分を払うのと変わらないぐらい高い...)、4GのSIMを刺して使えるルーターを運用し始めた。一時的な速度は確保できるものの日中本当に安定しなくてMVNOのSIMを複数試して11月にようやく今のVodafoneのサブブランドのVOXIのSIMに落ち着いた。無制限プランが月£35から使えていつでも簡単に契約を止められる。自宅のエリアはギリギリエリアから外れているけど5G readyなSIM。

家の周りの大学生が10月からリモート授業を受けているせいか秋になってから午後3時とかのミーティングに合わせて急に不安定になり、社内のZoomミーティングを何回か逃したこともあった... ルーターについても知識がないまま最初に雑にDWR-953を買ってしまったけど失敗して、4G+, LTE advanced or LTE cat 6 に対応しているルーターを買い直すことでモバイル回線ながらも安定性と速度が向上してまともになった。

リモートワークと子育て

1月に第2子が生まれてから3月初旬まで義理の母が手伝いに来てくれていたけど、それも終わり完全に夫婦2人きりでの子育てになったタイミングでリモートワークが始まった。これはある意味ラッキーで自分が24時間家にいるので、仕事は若干おざなりになるかもしれないけど、家で何かトラブルがあればすぐに助けに行けるし、平日昼に2人の子供にお昼ご飯を食べさせる作業を夫婦2人で並列に乗り越えることができる。2人の子供が朝から💩しまくっておむつの交換がしんどくなったらいつでも交代することも出来る(1日1人で12回以上💩おむつを交換するのを想像してみて...)。定時後即子供を風呂に入れる。などが出来て便利ではあった。

一方で平日に日中の間に子供を遊ばせるのには非常に苦労していて(妻が)、元々プレイグループという教会でボランティアベースで開催されている子供を連れて遊ばせられるイベントがコロナで消えて、最寄りの動物園・博物館・科学館・図書館などの各種施設も閉鎖したので、もっぱら公園に連れていくしかなかった。子供2人を公園へ連れていくのも疲れるので最寄りのスーパーに買い物に連れていくだけの日もあったり、冬になって毎日雨が降っているのでそれも難しくなり最近はNetflixに頼りがち。家でクッキーを一緒に作ったり、料理を手伝ってもらうとか、ハサミの練習をしたりとなんとかいろいろな刺激を与えられるように日々苦心している...

リモートワークとガジェット

しばらくの間MacBook Proのカメラとマイクだけを使っていたけど流石にだるくなってきて、インターネットが改善してきた秋以降にYeti nanoとLogitech Streaming WebCamを買って便利になった。いろんな人が使っているだけあって使い勝手もコスパも良さそう。

リモートワークと運動

朝起きてから夜8-9時ぐらいに子供たちが寝付くまで常に子供とつきっきりなため、平日に自由に家の外に出ることが本当に少なくて火曜木曜に保育園に子供を迎えに行く以外の外出が無だった。かなり運動不足になったと思う。元々持ってたリングフィット アドベンチャーをごく稀に起動して遊ぶぐらいだった(その間に妻はクリアまでしていてえらい...)。その分土日は息子を公園に連れていったり外に散歩に連れ出して積極的に歩いたり運動したりを心がけた。一方で食欲は年齢のせいか運動不足のせいか心なしか若干控えめになって体重が理想体重ぐらいまでに勝手にじわじわ減ってくれて便利ではあった。

iPhone

手持ちのiPhoneがXのまま3年間経ってしまったけど、コロナで外出しないし12に買い換えるのもそんなに嬉しくないなぁと思ったけど、ボーナスが出たので勢いで先日12 Pro Maxを買った。画面の大きさとカメラの性能とバッテリーの持ちにはとても満足している。あとTwitterのFleetのUIがヌルヌル動くようになって嬉しい。でも画面が大きいのが嬉しくない人にとっては完全にコスパは悪いと思う。

ゲーム

今年クリア/プレイしたのは

  • Assassins' Creed Origins - ようやくクリア
  • Uncharted 4 - クリア
  • The Last of Us (Remastered) - クリア
  • Death Stranding - 未クリアだけど今現在プレイ中
  • The Last of Us 2 - 年末のセールで購入してダウンロードだけした
  • スーパーマリオ3Dコレクション - サンシャインを少しだけ遊んだ
  • Hades - UKのストアで買って遊んだ。一度ラスボスのところまで到達したけど未クリア。
  • ポケットモンスター シールド追加DLC 鎧の孤島/冠の雪原 - ランクマッチにハマって650時間ぐらい遊んでしまった

今年はひたすらポケモンをずっと遊んでいたと思う。DLCによる過去のポケモン追加とか、新特製・技の解禁によって毎月のように対戦環境が移り変わっていてかなり楽しかったと思う。若干燃え尽きつつあるけど目標のシングルバトルで最終4桁達成がいまだに出来ていない。プレイ人口的には日本人の割合が多かった上にネット環境が悪くてマッチングしづらいor回線切れまけなどが続いてしまってそんなに快適ではなく萎えてしまうこともあったけど、それを差し引いても将棋で対局するかの如く読み合いとか研究のしがいがあって弱いながら楽しかった。あとは同僚の @giginet 先輩との対戦会を月一でやっていてそれでモチベーションも結構継続していた。

サイバーパンク2077の登場とかでにわかにゲーミングPCブームが起きていると思うけど、子供2人育てながらゲーミングPCに投資し続ける金銭的余裕 or 家のスペースがあまりないので2021年は早めにPS5を手に入れてサイバーパンクを遊んでみたい。

音楽

今年はライブに一切行けていない。Apple Music経由で新規にJ-Popを開拓して、仕事中とか仕事後によく聞いたりしていた。J-Popだと家で雑にリビングのスピーカーで流しやすくて良い。逆にSquarepusherみたいなのは家族が常にいる中では流しづらい。

特に↑などをよく聴いた。Haken Anisongというプレイリストも結構聞いてた気がする。あと電気グルーヴが活動再開してとても嬉しい。

子育て

すでにいろいろ書いてるけど、子供を遊ばせることについては苦労したけど、それ以外はとても順調で特に第2子が生まれた時の体重はかなり少なかったもののその後それなりに成長してくれて、生後10ヶ月でテキパキとバランスよく歩き出してしまって驚いた。(長男は1歳3ヶ月になるまで正しいハイハイすら出来なかったのに... )夜も割としっかり寝てくれてだいぶ安定していたと思う。去年は若干心配だった長男の会話能力も2歳3、4ヶ月ぐらいの時から急激に伸びてきて多分年相応には喋れるようになってきたと思う。リモートワークで父が常に家にいるせいか(?)長男のお昼寝がなくなってしまったのが残念...

旅行

第1波が収まった夏頃に1泊2日でBirminghamにある本場のトーマスランドに旅行した。当時、長男がトーマスが好きだったため。屋外ではあったけど、遊びに来ている人たちみんなほとんどマスクを付けていなく当時はすごい開放的に遊んでいたともうけど今思うとちょっと怖い環境ではあった。本当は有給も余っているしもっとどこかに行きたかったけど、気付いたら夏のバケーションシーズンを逃してしまったために他にはたいしたところに行ってない。日帰りでバスとかタクシーで行ける距離のAerospace Bristol(コンコルドが展示してあるやつ)とかHelicopter Museum(有志で作った自称世界一のヘリコプターオンリーのミュージアム)などに行った程度。

あと厳密には旅行ではないけど、3月末に祖父が亡くなったけど、もうその頃にはコロナで帰国どころではないし、子供産まれたばかりというのもありお葬式に参加できなかったのでいつか日本に帰国する際にはお墓参りはしたい。

日本のGOTOキャンペーンはイギリスでロックダウンを喰らってる身からするととても羨ましかったし、リスクはあるものの良い施策だと思った。

去年は第2子を妊娠しながら大学院に通っていた妻だけど、無事に卒業用の論文を提出してDistinctionという成績優秀者として卒業していった。とてもめでたい。去年は卒業前からPhDへの進学用の奨学金を応募していたけど結局ダメだったので今年は進学できなかった(コロナもあったのでよかったと思う)けど、今年はBristol大学からのオファーとmasterの成績とオンラインカンファレンスでの対外発表を実績としてもう一度各種奨学金に応募しているので来年こそ進学出来ることを期待したい🤞子育てしながらも各種奨学金・大学への応募のために研究計画を立てたりmasterの論文の要旨を作ったりと結構忙しそうにしていた。

OSS活動

第2子の子育てとか日々のポケモン育成・対戦が落ちついてきたりして、余暇でfastlaneに業務外でもPRを送るようになってきた。元々は仕事でいじる機会があったからなのだけど、触っているうちに普段自分が仕事で使っているツールでもあるので、何とかしていきたいという気持ちが湧いてきた。fastlane自身は初期と比べると保守フェーズてきなタイミングになってきていてApp Storeの新しいAPIに対応したりっていうぐらいしか目玉の変更みたいな物はないのだけど、それでも既存の機能はいくらでも改善しようがあるし(特にエラーハンドリングとか曖昧な挙動など)、大規模RubyOSSプロジェクトとしての課題もそれなりにあるように見える(最新バージョンのRubyへの追従が完璧にはできてないなど)。特にfastlaneはモバイル開発畑の人たちがRubyを書いて開発していたりするので、本職でRuby書いている(た)人からすると、〇〇を使えばもっとシンプルに書けるのに!みたいな野暮ったいコードも多かったりするし、そのせいで可読性が厳しい箇所も結構ある。ということで自分が仕事でお世話になっているfastlane/deliverへリファクタリングたりユーザーフレンドリーなエラー表示など実装していったりした。エッジケースとかでのリグレッションとか起こしつつも速攻で直して何とか少しづつ良くしていっている。

Pull requests · fastlane/fastlane · GitHub

今まで個人的にOSSへのコントリビュートをここまでやる機会はなかったけど、今の自分の仕事環境・内容とスキルセット(Rubyを過去にたくさん書いてた+モバイル開発している)がマッチしている分野を見つけたという感じなので本腰を入れて2021年もしばらく取り組んでいこうと思う。継続は力なり。

個人Discordサーバー

discord.gg

(サムネは家から徒歩1分のところの美術・博物館にあるBanksyの作品)

仕事でも仕事外でも人と話すことが本当に減ったので、雑談が恋しくなって個人のDiscordサーバーを立ててみた。Twitterで雑に宣伝して久しぶりに話すじゃんみたいな人たちと話せたりもしてとてもよかったので、いつ抜けても全然問題ないので何となく雑談しに来てほしい。月1ぐらいの定期的な感じで雑談会みたいなのできたら嬉しい。イギリスの生活の話から仕事、子育て、投資(ISAをやり始めた)とか何でも話す。

総括

2020年大変だったけど、自分なりにモチベーションを見出しながらそれなりに無事生き抜くことができてよかった。2021年はコロナ禍前提の年なので、今までコロナがあるから・・・みたいな気持ちで甘えていた部分を見直しつつ時代にあった生き方をしていきたい。あとこういうストレス環境の中で子供たちを健康的に育てていくためには自分自身も精神的に肉体的に健康である必要を感じた。

あとは今は特に転職のモチベーションはないけどイギリスからのリモートでもOKな仕事の話があれば聞いてみたいのでこのブログ読んだ人でもし何か良い話があればご連絡ください。

イギリスで育休を取得した(2回目)

どうも。ついにイギリスもついにEUを離脱しましたね。とりあえず現状は何も影響感じてないです。 先日、第2子が誕生して、先週1月30日まで育休を取得してたのでその時の感想とか知見とかをメモしとく。

2018年3月に第1子の息子がイギリスで誕生して現在1歳10ヶ月ですくすく育ってる。前回は両親の助けなしで産後直後は何とかしのいだけど、今回は子供も2人いる状態なのでさすがに大変ということで義母が出産後に手伝いに来てくれている。とはいえ予定日よりも8日早い出産+元々予定日後の到着予定だったので最初の10日間は完全に夫婦2人のみでの育児だった。

まず第1子の時との大きな違いは当たり前だけど同時に2人の子供・赤ちゃんを面倒見る必要があるということ。つまり、一応大人の妻は家にいるものの新生児の母乳をあげたりすること以外はほとんど期待できないので、実質大人1人で2歳弱の子と大人1人+α必要に応じて新生児のオムツ替えをしたりボトルのミルクをあげたり沐浴をさせてあげたりということだと思う。2歳差以内の年子での育児というのもまた少し大変で、第1子はまだ言葉も喋らず(大人の喋ることは理解はするしボディランゲージで意思疎通が軽く出来る)、イヤイヤ期(何でも自分でやりたがったり拒否したり)の最中だったり、何と言っても大人の目を離して放置しておくのがほぼ無理という制約が大きい。(とはいえこれ自体は子が1人の時でも同じだったけど。)

そんな中でこんな感じで過ごした。以下今回の育休中の方針と簡単な日記みたいなやつ。

  • 妻は産後1ヶ月は家事放棄する
  • 自分は息子をメインで担当、妻は新生児担当メイン
  • 息子の保育園は火・木の週2日で、家にいる日は午前中に可能な限りお出かけする
  • 息子が赤ちゃん返りをしても怒らない、息子を第一に気にかける
  • ご飯はとりあえず何かしら食べて生きてればOK

1日目(木曜日)

深夜午前2時ぐらいから妻の陣痛が始まり、3時半ごろにおにぎりとか息子のおやつとかを準備してから寝ている息子も無理やり病院に連れて行き、分娩室で一緒に待機。彼は深夜なのに誰よりも元気だったけどそこそこ良い子に大人しくててくれたので無事息子も自分も立ち合いまで出来、早朝に誕生した。8時半になったら息子を保育園に送り出して一日妻に付き添い。その間初のオムツ替えとかをしたり。夕方保育園へ息子も迎えに行ってまた病院に戻り息子の晩ごはんもその場で適当に済まして7時ごろに2人だけで家に帰宅。さすがに徹夜で疲弊したので息子のお風呂はskipして寝かしつけて自分も即寝る。

写真は出産後に息子を保育園へ送ったあとの朝焼け(朝8時半ごろ)。左側の建物が病院。

f:id:ainame:20200116083600j:plain

2日目(金曜日)

朝はゆっくり8時半ごろ起きて10時ぐらいに病院に息子と2人で行く。諸々の検査とか済ませて退院予定だけど何時になるか分からないので適当にだらだら過ごす。午前中に退院手続きは1時間半で終わると言われたけど結局夕方まで終わらなかったため待合室の子供用のおもちゃなどで息子を遊ばせたりして頑張って時間を潰し、夜にタクシーでみんなで帰宅。

3日目(土曜日)

ついに4人で家で朝を迎えた。イギリスは無料医療の代償として病院には余裕がないため出産直後でも1泊したら大体追い出される。その代わり最初の1週間前後は助産師とか保健師とかが定期的に家に訪問してくれる。我が家では午前中は息子を可能な限り外に連れ出すようにしているので、この日は助産師が家で体重を測ったのを見届けて、土曜日恒例の近所の公園を散歩してその後図書館でBaby Bouncing(歌を歌ったり絵本読んでくれたりする)に参加して帰宅。お昼はご飯が余っていたのでチャーハンを作っていたっぽい。午後はほぼ息子は昼寝してくれるためその間にたまった洗濯をしたりまだ準備が出来てなかったミルク準備用マシンの洗浄とかしてみたり。

4日目(日曜日)

この日も息子のお出かけは、イギリスにしては外の天気がしばらくぶりに良かったので最寄りの公園の遊具で遊んだり手を繋いで一緒に散歩する練習したり。数ヶ月前と比べてだいぶ一緒に歩いてられる時間が長くなったし手を引いたらついてきてくれるようにはなったけど、犬を見かけたら向かって行きたくなってしまったり、突然の抱っこ要求は普通にある。(重いので抱っこは出来る限りしたくない。)この日は手抜くためにUber Eatsとかでお昼済ませた気がする。晩ごはんは魚介類好きの妻のリクエストでシャケのフィレを買ってきてソテーした。(こちらはまともな魚介類が入手しづらくて辛い)

cookpad.com

5日目(月曜日)

この日は早めに娘の日本の戸籍とパスポートを取得するため、息子と2人で朝一の9時前にこちらの役所へ出生届を出しに行った。(出産当日に電話でアポをとった)前回息子の登録のために行った時は英語が壊滅的だったのでちょっと強面のおっさんにため息つかれながら何とか登録したけど、今回は優しいお姉さんと穏やかな雰囲気のなか無事スムーズに登録完了した。その後はこの日は近所の教会で開かれているPlay group(小さい子を遊ばせる場所とちょっとした子供向けおやつ・お茶コーヒーを無償〜2ポンド程度で教会内で提供してくれるやつ)に息子を連れて行った。ローカルママ達とか同僚の奥さんなどと軽く話したりしながら息子が遊んでいるところを見たり、写真撮ってみてねにアップロードしたり。基本イギリス人は共働き多いっぽいので移民組の専業主婦が多い。帰りに同僚の奥さんに差し入れをもらってお昼ご飯にまわしてすごい助かりました!!!ありがとうございました。

帰りにミルク準備マシンの洗浄用にsteriliser solution(ミルトンみたいなやつ)を探し回って薬局に行ったけど結局売ってなくていつも行くスーパーに行ったら普通にあった。晩ごはんはポークステーキの肉で生姜焼き+何かしらスープとかで済ませた記憶。

6日目(火曜日)

ようやく保育園に息子を預けられる!!!!!!!!!!!!!と思いながら息子を預けてようやく一息つけるなど。保育園の送りの帰りにスーパーで買出ししてお昼は焼きそばを作った。日本の業務用の粉末の焼きそばの粉があるため、こちらのスーパーで売ってるegg noodleと組み合わせる(ちょっと太麺)と何と本当に焼きそばになるため、めっちゃ手軽なのに美味しくて日本の味を思い出せるため海外在住の日本人には真似して欲しいと思う。

晩ごはんはレディーミール(オーブンで焼くだけ系)とあまりものの具材で塩ゴマキャベツ+トマトと味噌汁みたいなのを作って食べた記憶。

7日目(水曜日)

また別の教会のPlaygroupでちょっとリッチなところに行った。ここのPlaygroupはいかにもお金がありそうな感じで古い教会の建物をモダンなガラス張りのエリアで拡張している。スペースも広いしおもちゃも多いし出てくるおやつもちょっといい感じ。参加人数も多くて参加者は移民・現地人含めて白人が多い。それぞれスペイン語ポルトガル語、フランス語、ドイツ語ごとにグループが出来ている雰囲気もあった。アジア人・男・初参加という明らかに異端者だったけどそんなに居心地が悪いわけではなかった妻と息子のことを知っているお母さんに認識されて声かけられて軽く挨拶したり近況報告したり。

帰りにちょっとしたお使いを済ませて、スーパーでインドカレーの弁当を買ってお昼をすます。スーパーの出来合いのご飯の中ではインドカレーはトップレベルに美味い気がする。午後は引き続き日々洗濯しつつご飯もクックパッドという便利サービスを使いながら麻婆豆腐などを作ったと思う。豆腐はアジアスーパーで中国製のやつが買える。

cookpad.com

cookpad.com

8日目(木曜日)

待望の保育園の日。自分の朝ごはんも食わずに保育園へ一目散で送って行き、ゆったり帰りつつ買出しを済ませる。お昼は昨日の晩ご飯の残りで麻婆麺みたいなのを作った記憶。来週には義母がやってくるため準備として2つあるシャワーとかトイレの掃除を大々的に行う。他にも掃除機をかける頻度を上げるために安いコードレス掃除機を買ったのが届いた。今まで家の掃除の際に部屋備え付けだった古い旧式の掃除機とクイックルワイパー的なやつで頑張ってきたけどかなり掃除が楽になって良い。部屋の掃除をして満足。

息子のご飯も雑なやつが続いちゃったので野菜が一杯採れるように子供がパクパク食べると謳われていたラタトゥイユを大量に作ってみたが、イヤイヤ期の息子はほとんど食べてくれなくて悲しんだ。

cookpad.com

9日目(金曜日)

平日最後にまた別のPlaygroupで無料なのだけどおやつも出てくるしおもちゃもそこそこあって活気のある良い感じの場所。Playgroup、教会での開催なので少なからずは宗教色はあるのだけどここは特に後半にキリスト教にまつわるお話を聞く時間があった。他のPlaygroupでも会ったお母さんとちょっとだけ話したけどこの日は体調がよくなくて午後からぐったりしていたので風邪薬を飲んで昼寝した。ご飯もレディーミールで手抜きして生き残ることを優先。

10日目(土曜日)

本調子ではなかった+外が雨降っていたので家で絵本読んだりして無理やりだらだら過ごした記憶。息子がお昼寝中に買出しだけ行ってきて適当にやり過ごす。レディーミール+Jacket Potate(イギリス風のじゃがバター。何かしら好きな具材を乗っけて食べる。)をオーブンで作ったような気がする。

cookpad.com

11日目(日曜日)

雨降ってたけど、前日はお出かけ出来なかったので頑張って最寄りの博物館(徒歩2、3分)に行って子供スペースで遊ばせたり一緒に階段登り下りの練習したり歩き回ったり。困った日のお出かけはこんな感じになっている。ご飯も前日食べきれなかった芋とか適当だった気がする。

12日目(月曜日)

この日の夜についに義母がやってきた。日中はまた先週と同じPlay groupに行き、お昼を適当にすませ、2回目の沐浴をさせたりした。(日本だと毎日沐浴させるっぽい?けどこちらだと乾燥しちゃうから数日1回で良いとか言われるのでそれに倣い手抜き) ご飯はもう覚えてないけど先に済ませた。多分鶏肉を使った何かを作った。

ふりかえり

そんなこんなで何とか夫婦2人だけの年子育児が何とか終了して現在は義母さんにめっちゃご飯作ってもらったり洗濯してもらったりしてすごい助かっている。2週間の育休も終わって自分も仕事にも復帰している。振り返りると、何だか極端に苦労した気持ちは少なくて以下の理由が考えられる。

  • 元々、妻が出産前に大学の勉強/論文書いてた間は、毎週末息子と2人で午前中はお出かけしていた + 夜は平日も含めてお風呂後の歯磨き・寝かしつけまでやっていたのでそのルーチン自体に変化がない
    • ちゃんとした屋内の遊び場で息子を半分ぐらい放置できるPlaygroupの方がむしろ楽だった(平日しかないので行ったことがなかった)
  • ↑が上手くいっていて息子の生活リズムが完璧に確立されていたためほぼ時間通り全ての作業が実行出来てとてもやりやすかった
    • 7時半〜8時に起床、午前中は外で遊ぶ、午後1時半ぐらいから5時までお昼寝(とても長くてえらい)、ご飯の後8時半ぐらいには就寝
  • ネットで見た赤ちゃん返りみたいな現象はそんなに発生してない(年子育児だからか?)
  • 寝室を自分・第1子と妻・第2子で完全に分けてるため少なくとも自分は普通に睡眠できた
  • 第1子の時は母乳の出が悪くてボトルのミルクを主にあげていたけど今回は調子が良いためほとんど母乳をあげていて父としての第2子への出番が少ない

とはいえこんな事をこれ以上毎日続けていたら本当に気が遠くなりそうだなぁという感想をもったので、自分が仮にお母さんだったら保育園に何としてでも子供を預けて共働きしたいし、世の中の2人以上の子を持つお母さん達はマジ超人だなぁと思いました。

第2子に関しては、平均よりちょっと小さめに産まれたというのもありちょっと心配ではあったけど日々母乳・ミルクのあげ方を助産師の人と相談しながら進めて行くことで1日に何回・何時間ごと・どれぐらいの量をあげるかなどの計画を改善していって今はちゃんと体重も増えて肉付きも少しよくなってきたので成長を感じる。体が小さいとミルクを吸う動きだけで本人も疲れ切ってミルクを飲みきれない、もしくはカロリーを摂取したそばから消費しきるみたいな状態になってしまうこともあるらしく最初の数日は体重が減って行く一方だった。あと母乳メインだとうんちが出やすいらしいので前回と比べても異常な回数のおむつ交換が強いられる。ミルクあげる前におむつを交換してもミルクの途中でお腹から凄まじい音がなってうんちがビシャーってなっている。

義母さんは3月には日本に帰ってしまうのでそこからまた夫婦だけで育児になるけど、果たしてどうなって行くのだろうか。また仮に3人目が生まれてくるとなったら一体どうなってしまうんだろうか・・・?想像するととても大変だけど頑張って慣れて行くしかないと思った。

2019年振り返り

久しくブログを書いてなかったけど年末なので簡単に2019年を振り返ってみる。

イギリス生活2年目

2017年12月にイギリスに移住して今月にはもう3年目に入ってる。とりあえず当初懸念した生活が全く合わなくて帰国するみたいなことが今のところなくて普通にこちらの生活に慣れてしまった。ブリストルというイギリスの地方都市に暮らししているので、アメリカの西海岸でもロンドンでもなく華々しい生活というのはないけど、適度に過ごしやすくて良い。特に子育てするのにおいては、東京でするよりはきっとかなりハードルが低くなっているんじゃないかという気がしている(実際に東京で子育てしてないから比較はできないけど)。一番気に入っているのは、家から徒歩10-15分圏内に子供を連れていけるスポットがたくさんあって土日に苦労しないという点。例えば以下のような。 

  • 動物園
  • 水族館
  • 科学館みたいな奴
  • 美術館・博物館
  • 図書館
  • 広大な芝生の公園
  • その他遊具のある小さい公園たち

ブリストル自体は車社会だけど、自分は車をもたずに割と中心地に住んでいるので徒歩でそういう場所にさっと行けるのはとてもありがたい。もちろん各種施設は地方都市の規模・クオリティーという感じなので大人でもめっちゃ楽しいという場所ではないけど子供にはそんなの関係ない。さらに言うと、こちらの冬は小雨が多いので日中に雨が降っていなくても夜のうちに地面や公園の遊具がびしょびしょみたいなことがざらなので屋内で遊べる場所はとても便利。

仕事

相変わらずiOSエンジニアとしての職をやっているけど今年はCI/CD周りなども担当するようになったりしていて、アプリ改修だけではなくいろいろやっている。CI/CD周り(というかFastlane)においてもアラビア語などのRTL対応というのは本当に罠が多くてそう言ったものを踏み抜いたりしている。

英語

英語はそれなりに喋れるようにはなったけど、ヨーロッパ系の移民の人とかと比較すると目にも当てられないような感じだと思う。会社の中でお互い知っている人同士で会話する分には良いけど、街中で急に知らない人に親切にされた時とかにもっと丁寧に返答できるようになってぶっきらぼうな状態を改善していきたい。子供を連れて外歩いているとよく話しかけられるし、助けてもらえたりするけどThank youだけだと間がもたないこともあり、いわゆるsmall talkのような奴が必要になったりもするので鍛えていきたい。

旅行

今年は久々に日本に帰国した際に有給たくさん使ったというのもあるのだけど、それでも少なからずは旅行したと思う。イギリス国内でもスコットランドとかリバプールビートルズ)は観光したという気持ちになるのでおすすめ。

音楽・ライブ

イギリスなので有名なイギリス人アーティストが普通にブリストルにやってきてくれるので結構便利ではあるけど、やはり限られている。ロンドンまで行けばかなりいろんなアーティストのライブ見られるけど子供もいる中ライブ見に行くためだけに平日にロンドンで日帰り・1泊でとするまでの気持ちはなかった。

  • Massive Attack - 20周年凱旋ライブみたいな巨大な奴だった
  • Bloc Party - ファーストアルバムを逆順に演奏していくライブだった
  • Jon Hopkins
  • Battles - 2人体制だったけど相変わらずドラムの人すごい
  • (James Blakes) 行きたかったけどチケット買ったつもりになっていて買い逃していた

2018年にはなかったグラストンベリーのフェスは今年はあったけど、予約競争に負けて結局行けてない。予約システム、本当に貧弱すぎて毎年500系エラーのなか運よく完了できた人のみがチケット手に入るみたいな古典的な感じなのでWWDCみたいに抽選制にして欲しい。

ゲーム

子供も1歳超えて生活リズムがだいぶ安定したので、夜などの時間でそこそこゲームを遊んだ。今年主に遊んだゲームをあげるとこんな感じ。後述するけど諸事情で今年はPS4を起動する時間がほとんどなくなりSwitchの携帯モードで遊んでる。

  • Horizon Zero Dawn (クリア済み)
  • Marvel's Spider-Man (クリア済み)
  • Assassin Creed Origin (かれこれ足掛け3年ぐらい遊んでるけどまだクリアできてない)
  • Division (PSNのフリープレイで序盤だけ)
  • ヨッシークラフトワールド
  • マリオメーカー2
  • アストラルチェイン(クリア済み)
  • FE風化雪月 (ハードで初めてしまったせいで結構しっかり時間かけて攻略していて第2部入れてないまま積んだ)
  • ポケットモンスターシールド(クリア済み・ハイパーボール級までは来た)
  • リングフィットアドベンチャー (4日目)

アサクリ、良く出来てはいていまだに景色に感動したりするのだけどUBIという感じのゲームなので遊んでるとすぐ飽きてしまう。2020年こそアサクリをクリアして来年の完全新作も良い感じなら遊びたい。

YouTube

テレビを見ない代わりに今年はYouTubeを結構見るようになったと思う。特にここ最近はポケモンの対戦実況動画をひたすら見て勉強している。あとはイヤホン WF-1000XM3とかを買うときなどはYouTuberのレビューをひたすら見たりして買う決心を固めたりした。あとは夜の作業中に中田敦彦YouTube大学とかを作業BGMにしていた。

子育て

2018年3月生まれの息子は現在1歳9ヶ月で元気に育っている。家では基本日本語で喋りかけているけど、現地の保育園にも通っていてそこでは英語なので、多分普通の1言語の環境の子よりも喋るのは遅いっぽい。いまだにちゃんとした単語を喋るわけではない。"トーチャン"、"ブーブ"(車)みたいなのは言えるようになってきたけどたまにしか言わない。さらに家ではテレビも一切流してないので、情報源は少なさそう。同僚のインドネシア人の同い年ぐらいの子供はイギリスの子供向けアニメを毎日見ているせいでイギリス英語的な単語から覚え始めたと言っていた。"Oh dear" など イギリス人がよく使う「Oh dear!」とはどんな意味?|イギリス英語を勉強する為の専門サイト ブリティッシュ英語.COM それはそれで困りそう。

上にも書いたけど、毎週土日は午前中はどこかしら自分が遊びに連れて行くというのを実践していてだいぶ外遊びの子守に慣れてきたし、午後はちゃんとお昼寝してくれるので自分も割と自由時間が取れたりする。生活リズムがかっちり固定されて

  • 7〜8時 起床・朝ごはん
  • 10〜12時 外遊び
  • 12時〜13時半 お昼ご飯・お昼寝準備
  • 13時半〜17時 ガッツリお昼寝
  • 18時〜19時 晩ご飯
  • 19時半〜20時 お風呂
  • 20時半〜21時ぐらい 就寝

という生活をここ半年以上性格に過ごしている!これは親としては自分の時間も夜にある程度取れるしとても助かると思う。ご飯もちゃんと食べているし良く寝るし大分良い子に育っている気がする。次はきっとトイレトレーニングが待っていると思うけど、うまく切り抜けてくれたら嬉しいですね。

ちなみに来年早々に第2子(女の子)が生まれてくるので、海外で親の助けとかなしにどこまで生きていけるかなぁというのが若干心配ではあるけどこれまでの経験もあるしなんとかなるような気がする。

あと、もともとカメラには興味がなかったのですが、日本に帰国して会社に訪れた際に早口で喋るカメラ好きの人たちにRicoh GRⅢをお勧めされたので買ったのですが(ちょうど旅行中に妻の古いデジカメが息子に壊された)、すごく気に入っていて毎日息子の写真を撮っている。第2子の時はちゃんと綺麗な画像で撮り貯めていきたい。

そもそも海外に移住した理由が妻が自分のキャリアを変えるために海外の学校で勉強したいという気持ちが強かったためだった。移住当初は、とりあえずこちらでの生活に慣れた後にどっかのタイミングで行ければという感じだったけど、幸いブリストルにはブリストル大学があってしかも家から徒歩5分ぐらいの距離の場所にあるのでせっかくだから行けばとお勧めしたら、無事大学院に入学できて学校生活が始まったのが去年の10月。今年は第2子の妊娠をしながらなだけど修論の提出期限を延長申請しながら先日なんとか期限までに間に合わせて提出完了した!!!おめでとう。第2子についてはもともと早いうちに産みたかったというのはあるので合意のもとだけど、良くがんばったと思う。大学院に通っている間に博士へ行く気持ちが高まったので、今現在、各種奨学金(給付型)へ申し込みながら博士へ応募するとのことです。たくましい。連続で進学ではないけどその間に第2子出産したり最初の数ヶ月は子育て専念出来るとのことで非常に効率が良い生活していると思う。これからも応援していく。

2020年もよろしくお願い申し上げます。

xargsで並列にコマンドを実行しつつ標準出力・エラーを区別出来るようにする

たまにシェル上での処理を並列実行したくなりますよね?単にバックグラウンドで実行するだけなら&だけでいいんですが、定期的に実行するような時間のかかるスクリプトを複数CPU使って速く終わらせたい場合はとてもあると思います。そういう時に便利なのがxargs(macOSに最初から入っているので良い)。

find . -name *.txt -print0 | xargs -0 -L1 -P4 ./script.sh

こんな感じで自分でfor-loopとか使って頑張らなくても勝手に標準入力から入力内容を読み取ってくれて、入力に応じて並列に処理を進めてくれる。(ちなみにfindの-print0とxargs -0は組み合わせて使うことを意図されていて、入力の分割を改行・空白ごとではなく\0 null文字でしてくれるようになるのでfindで見つけたファイル名に空白が含まれていても処理がおかしくなることがない。) -Pオプションがプロセス数の指定で最大4並列で指定したコマンドを実行できる。ただ、この時にエラーが発生した時にどの入力に対して怒ったのか分からないと困る時がありますよね。スクリプトの中で独自にエラーをログに残す処理を書いたりしても良いけど、既存のコマンドを単に組み合わせているだけの場合はラッパーなどを書くのは面倒臭い。

その場合は、こんな感じでxargsの"-I"オプションとsh -cで別のシェルでコマンドを起動することで標準エラー出力にprefixを付けることができる。

find . -name *.txt -print0 | \
xargs -0 -L1 -P4 -I{} sh -c "./script.sh {} 2>&1 | while read -r line; do echo \"{}:\$line:\"; done"
  1. xargs-Iオプションを使って処理する入力値を置換文字列(?)として定義しておく。そうすると実際に実行するコマンド部分の好きな箇所で入力値が扱えるようになる。(上の例では {} を置換文字列にしておいた)
  2. sh -cで並列化したいコマンドを実行する。コマンドの標準エラーを標準出力にリダイレクトしてパイプで渡せるようにする。
  3. 並列化したコマンドの出力をwhile readで行ごと読み込んでechoで再度出力する。その際に、xargsの置換文字列をprefixとして足せばエラーが発生した入力がなんだったのか区別がつく。whiile readのあたりは何使っても良いので ruby -e 'STDIN.each {|x| puts "{}:#{x}" }' みたいなのでも問題ない。

そんな感じでxcodebuildのimportLocalizationsを実行するfastlaneのpluginの並列化してみた。17言語ぐらいを逐次で実行すると3〜4分ぐらいかかるのが、全部同時に実行すると20秒前後で終わるようになる。ただし言語ファイルごとにこけることがあるのでエラーログが区別出来ないと運用上心許ない。

# Join file paths with null sequence to use "xargs -0" options
# so that 'xargs' can ensure that 'xargs' processes a given filename including even whitespaces
source_paths = params[:source_paths].map { |x| Shellwords.escape(x) }.join('\0')
project = Shellwords.escape(params[:project])
concurrency = Shellwords.escape(params[:concurrency])

# This value is used to pass a variable coming from xargs to the command executed.
xargs_param = "{}"

# xcodebuild command to import localizations
xcodebuild = %(xcodebuild -importLocalizations -project #{project} -localizationPath #{xargs_param})

# In order to distinguish error messages, this script append a filename as perfix to each line of output
error_logger = %(while read -r error; do echo \\"#{xargs_param}: \\$error\\"; done)

# 1. List xliff files that you want to import
# 2. xargs run sub shells that execute xcodebuild in prallel
sh "echo \"#{source_paths}\" | xargs -0 -L1 -P#{concurrency} -I#{xargs_param} sh -c \"#{xcodebuild} 2>&1 | #{error_logger}\""

https://github.com/ainame/fastlane-plugin-localization/blob/9c81565c5e15247e1ce83f382b380de90f9007b3/lib/fastlane/plugin/localization/actions/import_localizations_parallel_action.rb#L26

趣味で書いてるSwift

最近、引き続き趣味でCベースのライブラリのSwiftバインディングを書いている。Swift使ってポインタの気持ちになるのは難しい。

今試しているのが intel/hyperscan というintelが作っているめちゃくちゃ速い正規表現のライブラリで、一部のユースケースに特化してパフォーマンスあげているらしい。最近はGitHubもアクセストークンを検知する処理の中で使っているとか

github.com

こんなことし始めたのもこのページを見てからで、NSRegularExpressionめっちゃ遅いじゃんって思ってなんとなくこのベンチマーク早く出来たら面白そうというところから試してみている。

Swift vs Go - Which programs are faster? | Computer Language Benchmarks Game

とりあえず同期的にパターンとマッチングするコードは書けるようになった。

import Hyperscan

let scanner = Hyperscan()
print("かえるぴょこぴょこみぴょこぴょこ")
print(scanner.scan("かえるぴょこぴょこみぴょこぴょこ", for: "ぴょこ")?.matches)
// => Optional([Hyperscan.Match(from: 0, to: 18), Hyperscan.Match(from: 0, to: 27), Hyperscan.Match(from: 0, to: 39), Hyperscan.Match(from: 0, to: 48)])

print("123456789")
print(scanner.scan("123456789", for: "123")?.matches)
//=> Optional([Hyperscan.Match(from: 0, to: 3)])

print("abcdfabacbabac")
print(scanner.scan("abcdfabacbabac", for: "aba")?.matches)
// => Optional([Hyperscan.Match(from: 0, to: 8), Hyperscan.Match(from: 0, to: 13)])

パフォーマンスの都合上、マッチ開始位置はデフォルトでは保持されないようになっていて、返すためにはオプションを渡す必要があるとのこと。まだ返り値がbytes数換算でのoffsetしかまだ対応していない。とりあえず動く程度なので実用的ではない。streamの入力にも対応できたらカッコ良さそう。

github.com