自己紹介

小野理絵(以下、小野):こんにちは、小野理絵です。ペイメントソリューションチームでエンジニアをしています。今日は、Woven Cityの決済システムについてお話しします。

まず、自己紹介をさせてください。私はこれまでエンジニアとしてキャリアを積んできました。このチームに参加したのは、2021年12月です。その前は、主に日本のウェブ検索会社や、Eコマース企業で働いていました。バックエンドサービスのテックリード、フロントエンド・バックエンド開発者、ネイティブアプリケーションのプロダクトマネージャーの経験があります。

決済システムの提供を通じて、街の価値を高めるために取り組んでいること

小野:では、今日の本題に入りましょう。私たちのチームのミッションステートメントは、「決済システムの提供を通じて、街の価値を高める」です。このミッションの実現のために、私たちが取り組んでいることをお話しします。

まず、Woven Cityで使用する決済インフラを構築します。経済活動は街の根幹です。ですから、使いやすくて、安全で、持続可能な決済インフラが求められます。

次に、買い手と売り手とインベンターをつなぐインターフェイスが必要です。買い手と売り手は想像がつくと思いますが、インベンターとは誰でしょうか。将来、多くの人が「Woven City」に住み始めるでしょう。この街には、他の都市とのおもしろい違いがあります。その1つが、インベンターの存在です。インベンターには、科学者や研究者、スタートアップ、芸術家などが含まれます。彼らは、私たちの決済システムを使って、製品やサービスを簡単に販売できるようになります。

システムアーキテクチャにマイクロサービスを選んだ理由

小野:システムアーキテクチャは、マイクロサービスのアーキテクチャを採用しています。マイクロサービスを選んだ理由はいくつかあります。決済システムは、お客様がいつでもどこでも利用できるものなので、可用性の高いシステムを構築する必要があります。

例えば、決済システムがダウンしても、アグリゲーションシステムが一緒にダウンしないようにしたいわけです。次に、スケーラブルな未来に対応すること。Woven Cityはまだ市場に出ていないので、ビジネスやシステムの要件は今後大きく変化していくことが見込まれます。マイクロサービスアーキテクチャを採用することで、変化に対応できるシステムにしたいと考えています。

マイクロサービス、データモデル設計にイベントストーミングを使うメリットとデメリット

小野:では、どのようにマイクロサービスやデータモデルを設計しているのでしょうか。まず、決済ノートを定義します。この図は、Woven Cityが各テナントに対して発行する架空の決済ノートです。このメモから、店舗ID、取引ID、取引日時、支払金額など、必要となるデータフィールドが想像できます。

次に、イベントストーミングを使って、マイクロサービスやデータモデルを設計します。まだ学習段階ですが、イベントストーミングを使って、基本的なアーキテクチャのデータモデルを構築できます。

イベントストーミングの活用ですが、長所と短所があります。長所は、業務の専門家を交えて業務フローを明確にできること。私以外のメンバーは、決済システムの開発経験が豊富です。業務フローを明確にすることで、初心者の私でも決済に関する業務フローを理解できました。複数の参加者と一度に知識を共有できるのも、イベントストーミングのメリットです。短所は、時間がかかることです。設計のタイミングごとにイベントストーミングを行うのは難しいかもしれません。今は在宅で仕事をしていますが、対面のほうが使いやすいと感じました。

サーバーサイドのプログラミングにKotlinを使うメリット

小野:次に、私たちのチームが使っている技術を紹介します。使っている技術は、Kotlin、Ktor、Cassandraなどです。実は、どのデータストアを使うのかはまだ決まっていません。KotlinはAndroid開発によく使われる言語ですが、私たちはサーバーサイドのプログラミングに使っています。Kotlinを開発言語に選んだ理由はいくつかあります。

ひとつは、特にJavaエンジニアにとってKotlinは学習しやすい言語だからです。チームは全員Javaコーディングの経験者ですが、Kotlinを使うのは初めてでした。

私の場合、数年のJavaでの開発経験がありますが、Kotlinでの開発は4ヶ月前に始めました。それでも勉強しながらKotlinでの開発環境をセットアップし、プロダクトコードを書くことができています。

また、Woven Cityは新たなことに取り組む“挑戦の街”なので、開発メンバーにとって新しい技術にチャレンジしたいという思いもありました。

Kotlinの開発には、いくつかのメリットがあります。チームメンバーのほとんどが、開発にIntellijを使っていますが、IntellijもKotlinも、とても良い開発体験を提供してくれます。サーバーアプリケーションのフレームワークにも、それらと同じ会社で開発されているKtorを利用しているので親和性があります。また、Kotlin開発にはJavaのリソースと経験が活かせます。例えば、パッケージ管理にはGradle、ユニットテストとカバレッジの測定にはJUnit5とJaCoCoを使っています。データオブジェクトの作成には、OpenAPIジェネレータを使用しています。

これからの計画とタスク

小野:今後、直面する大きなタスクをいくつか紹介します。Woven Cityでテストするために、いくつかのPoC(概念実証)の機能を実装する予定です。技術面では、Kubernetes上でアプリケーションを動作させることを計画しています。私からは以上です。ご清聴ありがとうございました。

「GRPC活用の可能性は?」「グローバル展開の予定は?」 参加者からの質問とエンジニアの回答

ハンター・チェン氏(以下、チェン):決済システムは、Felicaのように日本独自のハードウェアに依存しますか。それとも海外のスマートフォンにも対応する予定ですか。

亀井浩明氏(以下、亀井):特定のデバイスを使うと決めているわけではないので、どのデバイスでも大丈夫です。QRコードやFelica、NFCなど、私たちのシステムは、どんなデバイスでも使えるようにオープンです。Woven Cityの決済システムには、柔軟性があります。

チェン:すでに存在しているシステムを使うのではなく、自分で作ろうと思ったのは、現在の決済システムに欠点や限界を感じたからですか?

小野:Woven City内で行われる各サービスの実証に際し、決済に関わる機能の提供やそのデータの適切な管理を行うためです。

チェン:原則として、私たちが支払データを管理します。前回のテックミートアップでは、人間行動の理解と、人間行動をモデル化するための機械学習モデルについてプレゼンしました。これらは、そのパイプラインにも組み込まれます。

チェン:決済システムは、訪問者も利用できますか?

小野:はい。Woven Cityのゲストアカウントを作成することで、独自の決済システムを使えるようにする予定です。

チェン:今後、例えば暗号通貨などの決済サービスを考えていますか?

小野:今のところ、暗号通貨は考えていません。

参加者:JavaからKotlinへの移行時に苦労した点があれば教えてください。

チェン:私は、CI/CDパイプラインと、ビルドの開発とツーリングに携わっています。現在、ビルドシステムではJavaとKotlinをサポートしています。

MavenやGradleなどのビルドツールでは、依存関係を自動的に解決します。Javaは、そのシステムの成熟度をアノテーションや裏側で起こる動作に頼っています。ただ逆に、管理したりコントロールしたりするのは難しいですね。裏側でどのように管理されているのかには注意を払う必要があるでしょう。

小野:KotlinはAndroid開発によく使われるので、サーバーサイドのKotlinを学ぶための教材が少ないのも難点ですね。ドキュメントもぐんと少ないです。

チェン:決済はグローバルな利用を想定して設計していますか。その場合、国境を越えた税金や通貨のルールにはどのように対応する予定ですか?

小野:もちろん、グローバルでの活用も考えていますが、日本での導入が先決です。

チェン:先ほども言いましたが、エンジニアとしてスコープを大きくしすぎないことを心掛けています。最初のスコープは日本国内ですが、グローバルに展開できるような柔軟性を持たせています。

チェン:OpenAPI、RESTful APIはパフォーマンスが高くありませんが、GRPCのような高速な転送プロトコルは検討しないのですか?

小野:GRCPはまだ使っていませんが、内部接続に使う予定です。ただ、使い勝手を優先して、外部のWoven CityにはAPIを提供します。APIユーザーにとっては、GRCPよりもRESTfulAPIのほうが実装しやすいでしょう。

チェン:私の経験からお話しすると、業界の多くはすでにRestfulAPIやHDTPに精通しています。GRCPは、むしろボーナス的な位置づけです。GRCPを追加する計画はありますが、あくまで将来的な話です。

チェン:すべてのチームが、バックエンドにKotlinを使用しているのでしょうか?

チェン:すべてのチームではありません。各チームは基本的に得意なもの、慣れ親しんでいるものを使っています。状況に最も適したものを選んで使えます。KotlinでMLパイプラインを組まない理由は、言うまでもありません。

小野:ちなみに、Woven City内ではどの言語が人気なんでしょうか?

チェン:Woven Cityで今最も人気のある言語は、Golang、Java、Kotlinです。少数ですが、NodeとRustを使う人もいます。

41のエンジニアリングポジションを募集中 初のインターンシップも実施予定

チェン:採用についてお話しします。現在、100以上のポジションとその40%以上を占めるエンジニアリングのポジションを募集しています。シャム氏のチームの、ライフサービスプロダクトチームでは、思いつく限りのすべての職種を募集しています。フロントエンドエンジニア、機械学習エンジニア、データエンジニア、機械学習パイプラインエンジニア、バックエンドエンジニア、テスト/オートメーションエンジニア。決済チームは、決済サービスのバックエンド、ソフトウェアエンジニアを募集中です。

最後に、今回、初めてインターンシップを実施することになりました。今回のセッションの参加者に学生は少ないですが、インターンシップの情報は、Woven Careerのページに掲載する予定なので、興味のある方はぜひご覧ください。