年内いっぱいでRepro株式会社を退職します

次は決まってます。

はじめに

前回の自分の退職エントリーを読んでみたのですが、何が言いたいのかさっぱりでビックリしました。

最終出社日です - スペクトラム

さて、そんな話は置いといて。

おもいで

ちょうど4年間、Repro株式会社でお世話になりました。 4年間、本当にいろんなことがありました。 正直、自分でも「あれ?Repro辞めるの?待って、マジで?あんな良い所を?なんで???」という気持ちがよく現れて混乱しています。 引っ越しすると決めたのは自分なのに、いざ今くつろいでいる部屋とお別れとなると思うと急に寂しくなるアレです。

会社には本当にお世話になりました。入社時から週4のリモートワークも認めてもらっていてずっと続けていました。(コロナ禍で2020年2月中旬くらいからは一度も出社できていません) 報酬も高く、面白い仕事がどんどん舞い込んできて、大変優秀な方々と一緒にお仕事しながらエンジニアとして成長でき、かつ超過労働もほとんどなく家族の時間も充分持てました。

担当は主にバックエンド側の機能開発が多く、Ruby on Railsな環境が多かったです。

初期はメッセージ機能といって、お客様のアプリを起動するとポップアップが出てくるやつのサーバー側での効率化や、A/Bテスト機能の追加、webへの進出などに参加させていただきました。 効率化についての知見をまとめた記事は、今でもこのブログのトップヒットになっています。(いうても微々たるものですが……。)

Redisで1000万件のデータを圧縮しつつ定期的に洗い替えする - スペクトラム

中期にやったのは、FirebaseでいうRemoteConfigみたいな機能の実装です。私は、要望とサービスの根本的な思想とをすり合わせて、技術的な仕様を決めていきました。メンバーもすごく優秀で、全員の力がフルに発揮されていました。よくあれだけのことを期間内に出来たなあ。これまでで最高のチームでした。

https://docs.repro.io/ja/dashboard/campaign/ux-optimizer.html

「いま***人がこのページを見ています」機能も楽しかったです。実際のデプロイエンジニアリング的なことは他のチームにお願いしたのですが、フロントから集計系のバックエンドまで、まるっとシステムデザインしました。

https://docs.repro.io/ja/dashboard/campaign/social-proof.html

もちろん全て完ぺきにできたわけではありません。未来に遺恨もいくつか残してしまったと思います。その度に悔しい思いをしましたが、この経験を糧にこれからも精進していきたいと思います。

後期は、 JavaScriptにも挑戦させていただきました。結果的にリリースこそ出来ませんでしたが、異なるパラダイムに戸惑いつつも、JSの考え方に触れることができ大変勉強になりました。

後期は実はあんまり働いていません。というのも、半年の育児休業を取らせていただいたからです。「育児休業直後に転職するんかい」という厳しいご指摘には、「おっしゃる通り」と言う他ありません。甘んじて受けいれます。それでも何の障害もなく、すんなりと半年の育児休業を取らせていただいたこと。また、その直後にも関わらず離職をお許しいただいたこと、会社には心から感謝いたします。

後悔があるとすれば、後期は特にコロナもあって、折角ご一緒させていただいた同僚とあまり話せなかったことが悔やまれます。 また、もう少しマーケティングという事業ドメインについて学んでおけばよかったなと思いました。 というのも、次は別の業界ですが、マーケティングの考え方と大変相性が良さそうなのです。 僅かではありますが、これまで経験してきたことを次に生かしていきたいと思います。

もう社内からプロダクトが成長していく様を見られないのかと思うと、寂しく思います。 また、次は知り合いも全くいませんし、自分の選択が本当に正しかったのか、正直不安でいっぱいです。 それでも自分が決めたこと。もちろん並ならぬ想いで悩み抜き、覚悟を持って決めました。決めた自分を信じて、前に進もうと思います。


私は去ってしまうので大変恐縮ですが、Reproは本当に素晴らしい所です。 エンジニアを始め、様々な職種で大募集しておりますので、是非ご応募ください。

https://culture.repro.io/jobs/


さいごに

西新宿のオフィス近くで食べた、もうやんカレー

都庁展望台で食べたランチ。

「この人アイコン見たことある!」って人がどんどん入社してくるワクワク感。

大企業とのミーティングで緊張したこと。

会社の人とスプラチーム組んで、大会に向けて特訓したこと。

OKRやらスクラムやらを導入していくゴタゴタ感。

CTOの圧倒的手腕。

マーガーバーガーの店員さんとの雑談。

すべての経験が、大切な宝物です。

これまで一緒に仕事をさせていただいたすべての方々に感謝します。これまで本当にありがとうございました。 特に id:joker1007 さんには特別感謝を述べたいと思います。素敵な会社に誘っていただいてありがとうございました。

Webで使えるmrubyシステムプログラミング入門 / 近藤宇智朗

久しぶりの読書感想です。どうやら読書感想はブクログとかも含めて4年ぶりぐらいっぽくて、ここ数年の読書しなさが表れています。

本書はmrubyとシステムプログラミングの発展に大きく貢献する良書であると確信します。

本書ではmrubyを利用していますが、そもそものLinux環境でのエンジニアリングについての基礎知識が多く解説されています。mrubyについて学びたい人にとってもシステムプログラミングは良い題材ですし、システムプログラミングを利用したい人にとってもmrubyが助けになるかもしれません。 特筆すべきは丁寧さです。本書の謝辞にもある通り、ハンズオンのための資料を下地にしているため、まるで筆者が隣についていてくれているかのような錯覚を覚えます。本当に一歩一歩丁寧に解説されているため、mrubyやシステムプログラミングに障壁を感じている方でも、安心して一歩づつ学んでいくことが出来るように配慮されています。私は独学でシステムプログラミングを学びましたが、本書によって知識の解像度がグッと上がりました。

mrubyと私

さて、私はかつてmrubyの開発に参加していたことがあります。内容は小さい重箱の隅をつつくようなものばかりで、数だけは無駄に自身があります。 ここ数年はその情熱のほとんどを家族とスプラトゥーン2に費やしたため、しばらくmrubyからは足が遠のき、せいぜい自身が作ったライブラリのメンテナンスを続けていたぐらいでした。

システムプログラミングと私

私がシステムプログラミングに興味を持ったきっかけは、まさにmrubyからだったのです。mrubyを触ってみて、当時大部分の機能がなかったので早い者勝ちとばかりにksss/mruby-signalksss/mruby-file-statを作り始めました。作ってしまったからには中途半端なことはできないと、Linuxプログラミングインタフェースを読みながらライブラリーを作っていたのを記憶しています。今思うとシステムプログラミング初心者があたかも標準であるかのようなライブラリーを作るのは、周りから見たら大変おこがましかったでしょう。無知ゆえの突っ走りです。そんな突っ走りの甲斐あってか、Linuxプログラミングインタフェースを読み終えた時、プログラマーとして一皮剥けたなと思ったことを覚えています。

著者と私

私が著者のudzuraさんに初めて出会ったのは、故spicelife社時代に著者がオフィスにちらっと遊びに来てくれたときのことでした。私は著者のことは知っていましたが、著者にとっては無名の私のことなぞ知る由もないだろうと、同僚と著者が楽しく談笑しているのを横で眺めていた事を覚えています。 その後は、仙台で行われたRubyKaigi2018で行われた How happy they became with H2O/mruby, and the future of HTTP - RubyKaigi 2018 というセッションの後でも出会いました。セッションの話者@i110さんも著者も私はフォローしていたので、これは顔を覚えてもらいつつスプラトゥーンの話をするチャンスと思っていたら、@i110さんと著者とで真面目なmruby談義が始まったので、ふざけようとしていた自分を猛省し身を引いた次第です。 その後、すごくたまたま著者と4リグマをご一緒させてももらったことがあります。もちろんスプラの話しかしていません。

そんなある日、DMで突然著者から連絡が来ました。「ksss/mruby-file-statを本の中で名前を出してもよいか?」というものでした。私は快諾して、この本の発売をまだかまだかと待ちわびていました。

ようやく本の感想に入るわけですけども

mrubyといえば「組み込み向け」と謳われていますが、では「組み込み」とは何なのか。本書では、組み込みとは、ハードウェア組み込みと、アプリケーション組み込みとで大別されると書かれており、私の中のぼんやりとした理解がくっきり鮮明になりました。本書では特にアプリケーション組み込みについて書かれています。mrubyと聞いてハードウェア組み込みをイメージする方も多いと思われるので、本書タイトルの「Webで使える」にアプリケーション組み込みの本であってハードウェア組み込みの本ではないということを表しているようにも思えます。

"CRubyを書くことができる人は、ほとんど学習なしでmrubyを書き始めることができると考えられます"

誰にも伝わらないとは思いますが、私は本書のこの記述にひどく感銘を受けました。なぜなら、こう言われることこそが、私がmrubyで活動していた原動力だったからです。重箱の隅をつつくようなPRをmrubyや周辺ライブラリーに送らせていただいたものの多くは、このCRubyとの互換性を意識したものでした。「CRubyとmrubyは同じように書けば同じように動く。なんならドキュメントはCRubyを参照すればいい。」こういう世界を目指していたので、もちろん私が行った活動なんて微々たるものですけども、こう言ってもらえれるようにmrubyがなって嬉しい気持ちでいっぱいです。

解説の丁寧さ

本書のウリはこの解説の丁寧さにあると私は考えます。例えば、mrubyをbuildするだけのステップであっても、build中に何が起こっているのか、何が実行されて何が生成されて何に使われるのかまで丁寧に解説されています。私なら「rakeしたらbuildできますね」ぐらいで終わってしまうところを数ページ使って、このログはmgemをダウンロードしていて、このログはbuildしていて、このログはアーカイブを作成していて……と細かく解説しています。そしてこのbuild工程は見かけは地味ですがmrubyを理解する上で大変重要になってくる部分なのです。 このように、本当に大切なことを飛ばさず丁寧に一歩一歩読者の隣に立って解説してくれるのが、本書最大の魅力です。 また、ワザとバグを仕込んで、このバグを修正していく過程で知識を学んでいくスタイルも見られます。この方が知識は小出しで覚えられるし、なにより実際にコードを書きながら知識を得ていくステップに即しており現実的です。

「なぜ」の深堀り

本書のもう一つの魅力は「なぜmrubyなのか」「なぜシステムプログラミングなのか」といった「なぜ」にもしっかりと解説が入っている点です。この「なぜ」に答えがあるので、学習する上で重要な納得感が補われており、学習効率を高めています。ここまでしっかりケアしているのは、著者の豊富な経験のなせる技でしょう。 勝手ながら著者について調べさせていただいたところ、パーフェクトRubyとパーフェクトRuby on Railsの著者の内の一人でもありますし、 「GMOペパボは、憧れの会社だったんです」近藤宇智朗(GMOペパボ株式会社)~Forkwellエンジニア成分研究所 - Forkwell Press によると研修の経験も豊富でいらっしゃいます。

さらに、「なぜ」だけでなく「もし」にもケアが入っています。「もしここがうまく行かなかったら、これが原因かもしれないので調べてみてください」のような記述も多数みられ、著者の学ぼうとする人への配慮がみられて素敵です。

ksss/mruby-file-stat

本書ではCRubyのFile::Statclassを実装していく過程をハンズオンで学べる章がありますが、File::Statclassの先行事例としてksss/mruby-file-statを紹介いただいています(アピール)。本プロダクトのGitHubのTraficページによりますと、一日に100〜200回cloneされているので、私が作ったものにしては過ぎたプロダクトとなっております。 本書ではmtimeにusecまで対応している記述があり、「そういえばksss/mruby-file-statはどうしてたっけな?」と思って見てみるとusecに対応しておらず、秒単位までしか取得できていないことに気がつきました。その後、あわててusec対応を済ませました。本書のおかげでksss/mruby-file-statもクオリティが上がり、早速mruby界隈への影響を与えていると言っていいでしょう。本当にありがとうございます。

レビュー

本当に細かなところですが、僭越ながら若干の指摘をさせていただきます。もちろん深い理由があったり、話を簡単にするためにわざと現在のように記述しているのかもしれませんが御容赦ください。

  • __main__ methodを呼ぶ仕様が、mrubyの仕様なのかmruby-templateの仕様なのかが分かりにくかったです。
  • mruby-dir-globは一応あります。
  • File.open(...).readより、File.read(...)の方がfd的に良いのでは。
  • Apacheの問題なので難しいところですが、Requestオブジェクトにap_set_content_typeするとResponseのcontent_typeが変わるので、Requestの話なんだかResponseの話なんだかで混乱しました。

読んだだけじゃ、まだ半分

本書はハンズオン形式になっています。つまりこの本は、実際に手を動かして自分の経験として身につけることで、本の真の知識が読者の血肉として身につくようになっています。 私もまだ一通り読んだだけなので、実際に手を動かしながら本書の内容を学んでいこうと思います。

不安はありません。本書には常に著者が隣に立って教えてくれるのですから。

人間関係コンビネーション

これまでの3人家族では、人間関係は
3C3(家族全員)+3C2(夫婦、父と子、母と子の2人ずつ)=4パターンだった。


4人家族だと4C4+4C3+4C2=11パターンにもなる。結構増えるな。
数学は不勉強なのでもっと一般化した式もある気がするけどわかんない…。


また、自分が関わっている関係はその内6パターン。つまり、5パターンも自分が関与しない関係性が存在することになる。家族関係の半分ぐらいは、自分が関わっていないのだと思うと不思議な感じだ。
4人目の登場によって、新しく生まれる11-4=7パターンを、家族は学習している最中だ。
新しい命は、こうして家族になっていく。

 

なんかそんなことを考えてた。

第二子が産まれたので半年ROMります

赤ちゃんの画像

第二子が産まれました。

ここに至るまでには波乱万丈の物語があったのですが、ともかく妻子ともに元気です。

感染対策でしばらく妻子には会えないのですが、産まれた日の赤ちゃんを見るのは半ば諦めていたので本当に嬉しかったです。

妻は2月頃から切迫早産の診断を受け、それからというもの入院スレスレの状態をひたすら耐え抜き、出産という大仕事を終えました。 毎日、少ししか歩くことができない状態で、自宅入院状態。痛みや不快感、何より不安と長く戦いました。手術というリスクも乗り越えました。 考えてみれば、妊婦は24時間赤ちゃんの面倒を全てワンオペで行っているようなもの。お疲れ様という他ありません。

上の子も、満足に母親とふれあえず、大きな状況の変化によるストレスもあるはずでした。にもかかわらず、自分の課題にしっかりと取り組み、これまで強く成長してきました。

僕は、半年の育児休暇を取ることにしました。 育児休暇は、最初は「人生で一度やってみたい」という動機だったのですが、このコロナ禍で保育園に行けない上の子をみながら新生児を育てるためには、育児休暇は必要条件に思えました。特に上の子をメインで担当しながら、家族のサポートをしていく予定です。 また、生涯学習として少しづつ医学書を読み始めました。学生用と紹介されているものでも非常に難しく難儀しそうですが、ようは学生時代の理科の授業の延長かなと思って結構楽しめそうです。時間が余ったら勉強していきたいと思います。

社会が大変なときに大変恐縮ではありますが、私は手の届く範囲をしっかりと応援していきたいと思います。

社会が大変なときに物をねだるなど大変大変恐縮ではありますが、もし他人の新生児を応援したいという聖人様がおられましたら、こちらにお願い申し上げます。

https://www.amazon.co.jp/baby-reg/0x0-5-2020/16NJ58GBE0IJK?ref=cm_sw_sm_r_px_MOBILE_M4s1RtHgsnqyp

時短勤務への挑戦

諸事情あって、パートナーがほとんど動けず、家事もできる範囲が制限されているため、先週から僕は5時間の時短勤務を始めた。 大体の生活は以下のような感じだ。

AM7:30〜AM9:00

起床といきたいところだが、めちゃくちゃ眠い。 子供が夜中に3度は起きて呼び出しをうけるのもある。 夜寝るのが11時を過ぎるのもある。 なにより、もともと僕は朝が弱いのだ。 朝食を食べて保育園に行く準備を整える。

AM9:00〜AM10:00

9時が保育園の登園時間だが、9時に登園できた試しがない。遅刻常習犯である。 朝に役場に行ったり、スーパーで買い物をする等、用事があることも多い。 家に帰ったら洗濯機をまわし始める。スナック系のお菓子とコーヒーを準備し業務を開始する。洗濯機がまわり終わったら干す。

AM10:00〜PM16:45

業務時間。45分の休憩を入れても5時間を超えるが、朝の用事が長引くと業務開始が11時ぐらいになってしまい、開始が遅れるのである程度の貯金が必要になる。髪を切ったり歯医者にも行きたい。

PM16:45〜PM17:30

保育園へ迎えに行って帰ってくる。帰りに子供を歯医者に連れて行ったり、一緒に買い物をすることもある。

PM17:30〜PM11:00

晩御飯、お風呂、歯磨き、寝かしつけを順にこなしていく。 晩御飯は僕が作ることもあるが、最近は妻が作ってくれている。が、そんな時はやはり少し無理がきているようで、夕食後は力を使い果たして寝込んでしまうこともある。僕が作る時は、献立を考えることを妻にお願いしている。 子供が早く寝ればいいが、最近は大きくなってきたからか寝付きが悪い。子供が寝たら風呂掃除。皿洗いは妻ができるようになってきたので手伝ってもらっている。 全て片付いたら夫婦での相談事や雑談をする時間が生まれる。

PM11:00〜PM12:00

ここは睡眠時間を削ってでも仕上げなければならない書類を書いたり、このようなブログを書いたりする闇の時間である。 早く寝ないとまた明日が辛い。

AM0:00〜AM7:30

子供が何度か起きてしまうので寝かす。通しで寝れることはほぼない。

休日

勤務時間が、子供を暇にさせず一緒に遊ぶ時間になる。

可処分時間

ない。

挑戦

時短勤務をしたことは、僕は一度もなかった。初めてやるから挑戦だ。 会社とはかなり前から調整していて、できるだけ一人でできそうなタスクをあてがっていただいている。 やってみると結構あっけない。リモートで働いているが、8時間労働が5時間労働になるだけだ。 リモートは週4で家で働くことを、前職も含めると4年以上続けている。週5になってもあまり変わりはない。

コロナ禍

生活を公開してコロナ禍の影響に触れないのは不思議に思うかもしれない。 しかしながら、子供が生まれてからずっと手洗いは徹底しているし、人が集まるところに行く余裕もないし、元からリモートだしで、実際はそこまで生活に影響がない。会社が基本全員リモートで出社を許可制にしたので、週1の出社もする必要がなくなったぐらいだ。 毎日ニュースをチェックして、事態が収束するのを祈るばかりである。

最長勤続記録更新

中学生のときに、「どういう仕事をしたいか?」という事を授業として考えさせられたことがあった。 特にやりたいこともなく、フワッとしていた当時の(今もか)私は、

「色々な仕事をしてみたいです」

と書いた。当時は、新しいことを覚えて新しい世界が開ける感じがなんかいいなと思っていた。 しかし担当教員からは、

「職を転々とするつもりか」

とダメ出しされた事を覚えている。

その後、先生の仰る通り、働き出してから職を転々とすることになる。

3回の転職を経験し、現在のReproで4社目になった。 これまで一度も一つの会社に3年以上勤続したことがなく、どの会社も3年以内に転職してしまう『勤続3年の壁』が個人的に存在していた。 「次の職場ではどうなるだろうな」と他人事のように思っていたが、とうとうこの1月に『勤続3年の壁』を崩壊させることに成功した。

ありがたいことに、職場では次々と面白そうな課題が舞い込み、「もう学ぶ事はないな」と思う事は全くない。 難しそうな課題を任せていただき、脳みそがねじ切れるかと思うくらい頭を捻らせることもある。 入社当時からは思いつきもしなかった考え方や、技術の組み合わせ方も多く学ばせていただいた。 最近もRubyをほぼ書かずに、TypeScriptを使ったフロントエンドプログラミングにも挑戦させてもらっている。tsおもしろいよts。

働き方も柔軟に対応してもらっている。 この3年間はずっと、基本的に週1出社週4リモートで勤務している。通勤すると1日2時間失われるので、リモートは非常に助かっている。おかげで毎日朝夜と子供と接することができるし、風邪などの急なトラブルにも迅速に対処できている。

これまでの3年間、家族を支えてくれた弊社に感謝。 :pray:

「このWebページ何回見てるんだ?」を解決するchrome extention作った

最近、業務でJSをさわることがあり、久しぶりにJSが楽しくなったのでchrome extentionを作ってみた。

ソースはこちら↓

github.com

extention欄にバッジで総閲覧数が、バッチをクリックすると、遷移種別で統計が出る。

ブックマークから多く遷移しているサイトの例↓

image

storeに公開とかはしておらず、「パッケージ化されていない拡張機能を読み込む」からインストールできる。

かねてより社内のesaドキュメントを見ていて、「このWebページ何回見てるんだ?」と思うことがあり、何回も見ているなら重要だしスターを付けたりしたいことが最近あった。

JSを書いていると、「そういえば昔Greasemonkeyとか書いたっけ……。」と昔のことを思い出した。

最初はindexedDBを使いたいがために、indexedDBにurlをkeyにして表示回数を保存していけばいいかなと思ってコードを書き始めたが、途中で「もしかしてブラウザの履歴から探せばいいんじゃね?」と思いついた。

調べてみるとchrome extentionではブラウザの履歴を検索したり、なんと追加もできるらしい。

https://developer.chrome.com/extensions/history

chrome extentionの作り方を調べたりしているうちに、ブラウザの履歴をデータベースにした小さなコードで思ってた機能ができた。

ついでにリンクへのアクセス方法別に集計する機能も盛り込んだ。 「このページでやたらリロードしてる」みたいなことが分かる。

久しぶりにJS書けて楽しかった。

ちなみにhatenaブックマークのchrome extentionのコードがいろいろ参考になった。