oinume journal

Scratchpad of what I learned

メルカリ/メルペイを退職します

いわゆる退職エントリーというヤツです。表題の通りで、10月をもって4年3ヶ月勤めたメルカリ/メルペイを退職します。思い返せば、退職エントリーというものをブログに書くのは初めてです。少し緊張してます。

だれ?

oinume です。Goが好きなBackend engineerです。

何をやっていたのか?

2016年5月に入社してからやってきたことを書き出すと以下のような感じです。メルカリ→ソウゾウ→メルペイと、気付いたらチームごと会社を異動しており、様々なプロジェクトに携わりました。一つの会社の中でこれだけたくさんのことをやったのは初めてで、様々な経験を積ませてもらい、とても刺激的でした。

  1. ID Platform Teamでメルカリや周辺サービスのアカウントの統合 @メルカリ
    • この記事でID Platform Teamについて詳しく説明されている
  2. メルカリ月イチ払い(現メルペイスマート払い)の立ち上げ @ソウゾウ
  3. メルカリNOWの立ち上げ @ソウゾウ
  4. ID Platform Teamでmicroservice内の認証・認可を司るAuthority Serviceの開発・運用 @メルペイ
    • この記事で軽くAuthority Serviceが説明されてる
  5. メルカリ月イチ払いをメルペイスマート払いにリニューアル @メルペイ
  6. メルペイスマート払いのモノリス→microserviceへの移行 @メルペイ

最も思い入れが強かったプロジェクト

どれもこれもやりがいの多い仕事だったのですが、一番思い入れが強いのはメルカリ月イチ払いの立ち上げです。これはメルカリの中で使える「後払い」の機能だったのですが、当時は後払いというとお金を借りるというイメージがあり、あまり良くないイメージがありました(今でもまだあるかも)。しかし、以下のようなUXの良さがあったため、たくさんの人に使われる機能になりました。

  • クレジットカードが作れなかったりする若い人向けに後払いの機能を提供することで欲しいものがすぐに購入できる
  • コンビニ払いを使っていた人が後払いを使うことで売り手側の入金待ち状態が減らせる

さらに、この後払いの機能がメルペイスマート払いとリニューアルすることで、メルカリ以外の店舗でも使えるようになり、かつ機械学習による与信枠(クレジット)の付与ができるようになりました。

最後はメルペイスマート払いのBackendのTech Leadをやらせてもらい、VPoEのhidekさんとなぜか腕相撲をするまでになりました(違

メルカリ/メルペイの良いところ

プロダクトの人だけではなく、コーポレートの人もお客様のことを常に考えているプロフェッショナルの人が多かったです。どうしてもプロダクトの部分にフォーカスされることが多いですが、人事・PR・BizDev・CS・プロダクト開発の部署がとにかく一体となっていることがこの会社の強みだと思います。周りの人が頼りがいのある人が多く、「この人だったらやりたいことだけ伝えておけばなんとかしてくれる」ということが多かったです。そんな人達に助けられながらどんな時も仕事を前に進めることができたので、本当に感謝しかありません。

また、技術面では #tech-golang や #tech-gcpなどの技術系のSlack channelが活発で、例えばGCP関連で質問があったら #tech-gcp に軽く質問をすると詳しい人がすぐ回答してくれます。何かしらその道のエキスパートがいるので、これはエンジニアとしては最高の福利厚生だと思います。

なんで辞めるの?

もう少し小さな会社で事業を伸ばすフェーズに立ち会いたい、というのが一番の理由になります。日本には主にDX(Digital Transformation)の面で、たくさんの「未開の地」があり、様々な分野で圧倒的に成長の余地があると思っています。なお、これを書いている時点ではまだ転職先は決まっていませんが、おそらくこの「未開の地」を切り開くスタートアップに行くと思います。

※9/2時点で2社からオファーをもらっているので、どちらかに転職することになると思います。

さいごに

もう40歳を超えて脂の乗りまくった年齢になってきたので、そろそろ真面目に今後のキャリアのことを考えたほうがいいかなと思いつつも、やはりプロダクト開発が好きなので生涯現場でコードを書いていきたいです。

次もGoをメインでやっていきたいと思っているので、私を知っている人は勉強会などで会った時にはぜひ声をかけてもらえればと思います。

go testを並列で動かして速くする

はじめに

アプリケーションが大きくなってくると、テストを並列で実行しないとどんどんgo testの実行時間が長くなってしまい、いわゆる「CI待ち」というものが発生してしまう。この記事は自分用のメモだが、テストを少しでも速くしたいという人のための記事。おそらく会社の誰かがもっと丁寧な説明のブログ記事を書いてくれるはず。

go testを速くする方法

方法としては以下がある。それぞれ細かく説明していく。

  • go test実行時に-pオプションを使う
  • Test関数にt.Parallelを入れる

go testの実行方法

go testコマンドでは大きく分けて以下の2つを行っている。

  1. .go, _test.goをコンパイルしてバイナリを生成
  2. 生成したバイナリの実行(=テストの実行)

この時 go test ./... のように実行するとパッケージごとにバイナリを生成してテストを実行する。-pフラグはこのパッケージごとのコンパイルとテスト実行の並列数を設定するもので、デフォルトではGOMAXPROCSの数になっている。

t.Parallel

上では-pによってパッケージごとのテストの実行を並列にすることができると説明したが、同じパッケージ内のTest関数は直列で実行されている。これを並列で実行したい場合はどうするのかというと、(*T).Parallelを使えば良い。これを入れることで「そのTest関数は並列実行できる」ということを伝えられる。

まとめ

  • パッケージごとのテストのコンパイルと実行を並列にしたい場合は-pを指定する(デフォルトはGOMAXPROCS(
  • t.Parallel()の呼び出しがあると、そのTest関数は並列で実行される

Touch BarありでIntelliJ IDEAのShift + F6などのショートカットキーが効かない場合の対処方法

TL;DR

  • Touch BarありのMacBookProで、IntelliJ IDEAでShift + F6などのFunction Keyと他のキーを組み合わせた場合のショートカットキーが効かないという問題があった
  • Karabinar Elementsを使っている場合は DevicesNo product name (No manufacturer name) にチェックを入れることで解決する
  • スクショ: https://github.com/pqrs-org/Karabiner-Elements/issues/535#issuecomment-350522019

問題の詳細

IntelliJ IDEAをTouch BarありのMacBookProを使っている場合、Shift + F6(Rename)やOpt + F7(Find Usages)のようなFunction Keyと組み合わせたショートカットキーが動作しないという問題に長年苦しめられてきた。特にIntelliJはFunction Keyとなにかを組み合わるショートカットが多くて、これはIntelliJ使いとしては死活問題だった。

この問題のせいで「MacBook ProもTouch Barついてるのか?じゃあ買うのやーめよ」と本気で考えるぐらい困っていた。そして実際Touch BarがないMacBook Airを買う寸前だった。

どうやって解決したのか?

MacBook Airを購入する寸前で「もしかしたら解決方法があるかもしれない」と思い、いろいろとググってみた。しかし検索しても引っかかるのはIntelliJのTouch Bar Supportの記事ばかり... しかし、IntelliJのフォーラムのコメントを熟読していたところ、以下のようなコメントがあった。

Ok, did som further debugging and tracked it down to Karabiner Elements (which I have installed) - quitting it fixed the problem. It seems that they have a number of conflicts with the touchbar

おっ、もしかしてKarabinar Elementsがなにか悪さしているのか?と思い、試しにKarabinar-Elementsを落としてShift + F6を試したところ Renameが動く。動くぞ...!!!

というわけで、 IntelliJ Touch Bar Karabinar Elements function keys というキーワードでググったところ、冒頭で紹介したKarabinar-ElementsのIssueにたどりついた。そして以下のスクショのようにNo product name (No manufacturer name)のチェックを入れて見事Shift + F6が効くようになりましたとさ。

というか、2017年に解決されていたのね、、、ググる力が足りなくて3年も我慢してしまっていた。

まとめ

Touch Bar + IntelliJ のファンクションキーが効くようになり人権を取り戻しました。

使ってみて便利だったGitHub Actions

今年の2月ぐらいからGitHub Actionsを仕事で使うようになったので、実際に使ってみて便利だったものを紹介する。

Slackへの通知を行うaction-slack

github.com

Slackへ通知するActionはいくつかあるけど、これが一番きめ細かく送る内容を設定できてかゆいところに手が届く感じだった。

branchにcommitがあったらSyncするPull requestを作るSync branches

github.com

たとえばmasterとdevelop branchがあるとして、masterにcommitがあった時にmaster -> develop に対して差分のpull requestを自動で作ってくれる。自分たちはそれを確認してマージすればよい。

特定のファイルに更新があった場合にラベルをつけるLabeler

github.com

設定ファイルを書くことで「このディレクトリ配下のファイルが更新されたら」とか「この拡張子のファイルが更新されたら」とかの条件でPull requestにラベルをつけることができる。難点なのは、以下のような時にラベルを自動で削除してくれないこと。

  1. 条件にマッチするファイルが更新される(差分がある)
  2. ラベルがつく
  3. 別のコミットによって1.のファイルの差分がなくなる