以前ツイートした通り、 メルペイの認証基盤チームに興味を持ってもらうためにこの記事を書きました。
メルペイには"メルカリ、メルペイにおける認証認可の仕組みを構築すること"を目的にした認証基盤というチームがあります。高負荷でありながら高い可用性を要求され、システム仕様も複雑です。難易度の高いタスクがたくさんあるチームなんですが、興味ある人いますかね・・・?
— pospome (@pospome) 2019年6月6日
この記事を読んで興味をもった方は是非応募してみてください。
応募方法とpospomeへの連絡方法は最後に記載しています。
メルペイ認証基盤チームとは?
メルペイ認証基盤チームは"メルカリ、メルペイにおける認証認可の仕組みを構築すること"を目的とするチームです。
認証基盤チームが立ち上がった理由は"認証認可の仕組みが必要になった"からです。 2017年11月20日にメルペイが設立しました。 メルペイは決済プラットフォームなので外部企業向けのAPIを提供します。 これらの外部通信には認証と認可が必要です。 また、メルカリ、メルペイではマイクロサービスにて開発を進めています。 マイクロサービスでは当然ながら多くの内部通信が発生します。 これらの内部通信にも最低限の認証が必要です。 外部通信、内部通信に対する認証認可の仕組みは簡単に実現できるものではないので、中長期的に取り組む専任のチームとして認証基盤チームが立ち上がりました。 pospomeは認証基盤チームでテックリード兼プロジェクトオーナーを務めています。
すでにリリースされている以下のプロダクトもどこかしらで認証基盤チームが提供する認証認可の仕組みを利用しています。
認証基盤チームは比較的歴史が浅いチームなので、何をどこまでやるのかが決まりきっていない部分があります。 そのため、この記事に記載している内容は将来的に変わる可能性があります。
認証基盤チームで経験できること
認証基盤チームで経験できることを簡単に説明します。
認証認可
具体的には書けないのですが、外部通信と内部通信の認証認可の仕組みを初期フェーズから設計・実装できるというのはあまりできない経験ではないでしょうか? 認証認可はとても奥が深く、複雑で、楽しい領域です。 pospomeは元々認証認可に興味を持っていなかったのですが、今では認証認可に興味を持っています。
高負荷
認証基盤チームは外部通信と内部通信の認証認可を管理するので、メルカリ、メルペイの中でも多くのリクエストをさばくチームです。 それらのリクエストの中にはビジネスロジック、データストレージへのアクセス、外部APIへのアクセスが発生するものも存在します。 単なるプロキシとして動作するマイクロサービスではないので、高負荷ながらそれらの特性に合った負荷対策が必要です。 "リクエストをさばくための設計","想定負荷の算出","負荷試験"など、高負荷に耐えられる仕組みづくりを経験することができます。
高可用性
メルカリ、メルペイのマイクロサービスは認証基盤チームが運用する仕組みに依存しています。 そのため、その仕組みがダウンしてしまうとメルカリ、メルペイが提供するサービスに影響が出てしまいます。 認証基盤チームははメルカリ、メルペイの中でも高い可用性を保証しなければいけません。 当然ながら仕組みがダウンすることを100%保証することは難しいので、異常を検知する監視設定、障害対応、再発防止対策にも力を入れていく必要があります。
セキュリティ
認証認可とセキュリティは切っても切れない関係です。 設計、実装レベルの不具合から決済プラットフォームとしての方針まで、安全な仕組みを考える必要があります。 当然ながら、認証基盤チームだけで対策できる問題ではないので、セキュリティチームと協力しながら開発を進めます。
複雑な仕様
認証認可はそれ自体が複雑な技術領域ですが、それらの技術はメルカリ、メルペイのサービス要件を満たす形で提供しなければいけません。 そのため認証認可の仕組み作りでは、認証認可の技術的な複雑さにビジネス要件の複雑さが加わります。 そのような仕様をどう解決し、コードに落とし込むのか?を考えるのはとても楽しいです(もちろん同じくらい苦しいです)。
コミュニケーション
認証基盤チームはメルペイ内のチームです。 しかし、外部通信と内部通信を管理するという性質上、メルカリ、メルペイ関係なく様々なチームとコミュニケーションを取らざるを得ません。 複数チームに対するタスク調整や全チームに対する特定の対応の周知などのコミュニケーションスキルが必要です。
ドキュメント
認証基盤チームが提供する認証認可の仕組みはメルカリ、メルペイのほぼ全チームが利用するので、 "認証基盤の使い方を知りたい", "今後xxxのような機能を提供する予定はあるのか?", "認証基盤のxxxの仕様を知りたい"といった問い合わせが多くあります。 それらのチームと毎回直接コミュニケーションを取ってしまうと、それなりに時間を取られてしまいます。 そのため認証基盤では問い合わせの多い内容についてドキュメントを書く必要があります。 ドキュメントのメンテも必要になるので、いかにメンテせずにドキュメントを運用するかという点も考えなければいけません。
技術的負債の返済
認証基盤チームは歴史の浅いチームなので新規開発が多いと思うかもしれませんが、意外とそうでもありません。 メルカリには認証基盤チームができる前に開発された認証認可の仕組みが存在するので、 認証基盤チームはそれらを引き続き開発・運用する必要があります。 当然ながら今のメルペイのことを考慮した仕組みではなかったり、今の基準で優れている仕組みとは言えないものもあります。 そのため認証基盤チームでは新規開発と同程度の工数を技術的負債の返済に費やしています。 継続的に負債を返済し、段階的に良いものを作るという経験ができると思います。
英語
認証基盤チームはドキュメントやSlackでのやりとりで英語を利用します。
*会話は日本語です 認証基盤チームは多国籍なチームでみんな英語ができるので、pospomeが英語を話せないために会話だけ日本語にしてもらっています。 pospomeは今英語を勉強中です。 会話も英語でできるようにがんばります。
これはメルカリ、メルペイ内には日本語が苦手な方がいるので、その人たちとちゃんとコミュニケーションを取れるようにするためです。 チームメンバーの中には香港出身で英語がネイティブなPMがいるので、pospomeは英語に関する質問をしたり、たまに英語で話しかけたりしています。 pospomeがPMから英語を学ぶだけのslackチャンネルも存在します。 認証認可と英語が学べる環境はお得です。
アプリケーションアーキテクチャ
認証基盤チームはpospomeがテックリードを務めているので、コードの品質を重視しています。 基本的にチーム内の設計、実装はほぼすべてpospomeがレビューします。 レビューして良くないと感じた設計には実際にコードを書いて修正案を提示しますし、口頭で議論することもあります。 アプリケーションアーキテクチャに興味がある方は認証基盤チームとの相性が良いと思います。 pospomeと実際のコードベースで設計、実装について議論しましょう。
認証基盤チームで経験しづらいこと
認証基盤チームは認証認可を扱うので、技術特化なチームです。 特化している分、経験しづらいこともあります。
アウトプット
認証認可はセキュリティが重要です。 そのため、業務で得たノウハウや実装した仕組みは外部にアウトプットしづらいなーと個人的に感じています。 アウトプットがセキュリティリスクになる可能性があるからです。 アウトプットできると感じるものは大体RFCで定義されている部分(誰でも知っている部分)だったりします。 pospomeはテックリードとして認証基盤チームのアウトプットを増やしていきたいと考えていますが、 どこまでできるかは各方面と相談してみないと分からないというのが現状です。
プロダクト開発
認証基盤チームはメルカリ、メルペイの認証認可を支えるチームなので、 メルカリアプリやメルペイの特定機能を開発をすることはありません。 各プロジェクトに対して認証認可の文脈でサポートするだけです。 そのためプロダクト開発が好きな人にとってはあまり面白いとは思えないかもしれません。 反面、pospomeのように技術が好きなエンジニアは楽しいと思います。 pospome以外のメンバーも技術が好きです。
決済
メルペイは決済プラットフォームを運用するので、決済に関する技術や知識を得られます。 しかし、認証基盤チームはあくまで認証認可に特化するので、それらの技術や知識は得られません。 他チームに質問することは可能なので、それである程度情報を得られるかもしれませんが、 実際に開発することはないので得られる情報も限定的になるでしょう。
実装への集中
認証基盤チームは技術に特化したチームですが、 他チームとのコミュニケーションやドキュメント作成にもある程度の時間を割きます(割かざるを得ません)。 そのため実装タスクのみ担当できるとは限りません。 設計用のドキュメントを書いたり、他チームとコミュニケーションしたり、負荷試験をしたり、実装以外のタスクも担当することになります。 とはいえ、マイクロサービスでの開発では他チームとのコミュニケーションやドキュメント提供が重要になるので、 個人的にはこのへんのスキルを伸ばすことができる良い環境だと思っています。
なぜ認証基盤チームのエンジニアを募集しているのか?
メルペイ認証基盤チームは"メルカリ、メルペイにおける認証認可の仕組みを構築すること"を目的とするチームなので、担当領域が広いチームです。 そのため、このままのチーム規模だとやらなければいけないこと(やりたいこと)をスピード感を持って実現するのが難しくなってきそうだと感じるようになりました。 新規開発だけではなく、技術的負債を返済する必要もあるので、今のままだと返済できる負債の規模にも限界があります。 新規開発と技術的負債の返済をより早く進めるためにエンジニアを募集しようと思いました。
応募について
認証認可の知識は必須ではない
認証基盤チームは認証認可を扱うチームなので、そういった周辺技術に明るい方は比較的チームが求めるスキルセットとマッチすると思います。 しかし、認証認可チームではバックエンドエンジニアとしての基礎的なスキルも同じくらい重視していますし、 認証認可のスキルは業務を通じてキャッチアップしていくことが可能です。 そのため認証認可のスキルを持っていなくても、他の部分で高いスキルを持っていれば問題ありません。
注意事項
- pospomeは人事権を持たないので選考には関与しませんし、応募はあくまで一般応募になります。応募していただいた結果、書類選考で落ちる可能性も当然あります。
- 認証基盤チームへの配属は確定ではありません。配属は内定者の希望を重視するのですが、認証基盤チームが受け入れられるエンジニアの人数には限りがあるので、タイミングによっては配属されないこともあります。
- メルペイには認証基盤チーム以外のチームもあります。選考過程で認証基盤チーム以外のチームに配属を希望することも可能です。(´;ω;`)ウッ
- 今回認証基盤チームで募集する職種は"SoftwareEngineer(Backend)"です。
- 必要となるスキルセットは応募ページに書いてあるので参考にしてください。
認証基盤チーム(pospome)に話を聞いてみたい場合
応募する前に認証基盤チーム(pospome)に話を聞きたいという方は@pospomeのTwitterアカウントにDMでメッセージをください。 面談という形で選考要素のない話し合いの場を設けることもできますし、1つ2つの質問であれば直接TwitterのDMで回答します。
応募方法
応募は以下からお願いします。
https://mercari.workable.com/jobs/1004885
応募フォーム内には以下の質問があります。
Please fill in the blank if you have a referral, or are applying through another service. If not, please input N/A. / 紹介者がいる方、他サービス経由の方はご記載ください。ない場合は「N/A」とご記載ください。
こちらの質問に対して"pospomeのブログを読んで認証基盤チームに興味を持ちました。配属は認証基盤チームを希望したいです。"のように僕のブログ経由であることと認証基盤チーム志望であることを書いてもらえると認証基盤チームへの配属希望者ということが分かります。