Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

「できること」よりも「やりたいこと」「なりたい姿」を追求した。DB未経験からPostgreSQLのコミッタになるまで

こんにちは。澤田雅彦(@masahiko_sawada)と申します。オープンソースのデータベース PostgreSQLのコミッタをしています。2022年からは、Amazon Web Services Japan(以下、AWSジャパン)でソフトウェアエンジニアとしてPostgreSQLの開発をしています。

2013年に業務の一部として始めたPostgreSQLの開発はかれこれ10年以上続き、今ではフルタイムの業務となっています。「わたしの選択」というテーマで寄稿の機会をいただいたので、本記事では、私がどのようにPostgreSQL開発者のキャリアを選択したのか、なぜ10年以上もの長い間PostgreSQLの開発を続けているのか、などを紹介したいと思います。

データベースを始めるきっかけ

大学生の時は元々教員志望だったのですが、講義で初めてプログラミングを学び、その面白さからエンジニアを目指すようになりました。大学卒業後はNTTデータ(現NTTデータグループ)に入社しました。

配属されたのはオープンソースソフトウェア(以下、OSS)を専門とする部署で、私はその中でもPostgreSQLを専門としてシステムの業務支援や研究開発を行うチームに配属されました。チーム内で新入社員は私だけで、他のメンバーはすでにPostgreSQLの本体開発をしている人もいて、PostgreSQL以外のデータベースにも詳しい、データベースの専門家ばかりです。一方、私は大学でデータベースの授業を取っておらず、データベースに触れるのはこれが初めて。「データベースはなぜ必要なのか?Excelではだめなのか?」というかなり初歩的な質問からしていました。もちろん、PostgreSQLを知ったのもこれが初めてでした。

全くの未経験で右も左もわからない状態でしたが、「エンジニアとして何か武器となるような技術を身に付けたい」と入社時に意気込んていた私は、各々が専門領域を持つ先輩エンジニアに憧れを抱き、無我夢中でPostgreSQLを勉強しました。この頃は、データベースを面白いと思えるほどデータベースのことをわかっておらず、「先輩エンジニアたちのようになりたい」という“憧れ”だけがモチベーションでした。

PostgreSQL開発コミュニティへの挑戦

入社当初、私はPostgreSQLの全文検索用の拡張機能であるpg_bigmの開発・テストに従事しました。PostgreSQLは拡張性の高いデータベースで、世の中にはさまざまな拡張機能が存在します。その一方で、PostgreSQL本体の開発はPostgreSQL開発コミュニティ(以下、開発コミュニティ)にて行われており、世界中から集まった数百人のエンジニアが開発に携わっています。

私の当時のトレーナー(育成指導者)、かつ最も尊敬するエンジニアの一人である藤井雅雄(@fujii_masao)さんも、開発コミュニティで活躍するエンジニアでした。藤井さんはPostgreSQL 9.0で導入された、ストリーミングレプリケーション機能の開発をリードした「PostgreSQLにおけるレプリケーション機能の生みの親」で、2013年にコミッタに就任しています。

OSSプロジェクトで、コミッタはソースコードの修正や新機能の追加権限を持つ人を表します。PostgreSQLコミュニティでは、リリースごとに数百人の開発者が携わって大量の機能が提案・開発されていますが、最終的にはコミッタが判断してPostgreSQLのソースコードを変更します。数百人の開発者の中でも、PostgreSQLのコミッタは世界中に31人(本稿執筆時点)しかいません。開発コミュニティの第一線で活躍するコミッタの姿を間近で見て、私も開発コミュニティでPostgreSQL本体の開発をしたい、コミッタになりたい、と思うようになりました。

そして、入社2年目に本体開発に挑戦するチャンスがやってきます。当時、レプリケーション構成のプライマリとスタンバイの切り替え後は、2つのデータベース間にデータの不整合がある可能性があるため、旧プライマリを新スタンバイとして直接組み込むことができず、新プライマリからのバックアップを取得する必要がありました。フルバックアップの取得には、データベースのサイズ次第で長い時間がかかる可能性があります。その不整合を解決して、バックアップなしで旧プライマリサーバを直接組み込めるようにする機能の開発に取り組みました。

開発コミュニティでのPostgreSQL本体の開発は、自分の予想よりもはるかに大変でした。開発コミュニティでの議論はメールが基本です。開発コミュニティにいるエンジニアに新機能の必要性を訴求したり、機能設計の議論をリードし、時には議論をまとめたりしなくてはなりません。しかし英語は大の苦手*だったので、メールに書いてある内容が全くわからず、自分の言いたいこともうまく書けませんでした。また、100万行以上あるPostgreSQLコードベースは、深追いするとすぐに迷子になります。ですが、PostgreSQLのソースコードはコメントが丁寧に書いてあり比較的読みやすかったため、時間をかけて少しずつ理解できるようになりました。そして、理解できてくると面白くなり、休日もコードを読んだり、PostgreSQLに没頭したりするようになりました。

*…新入社員研修で受けたTOEICが300点で自分の英語力に絶望しました。

このように1年を通して開発した機能は、藤井さんをはじめとする、開発コミュニティのメンバーにも助けてもらいながらPostgreSQL本体にコミットされ、初めてのコントリビューションを経験しました。

2014年撮影。初めて開発したレプリケーションの改善機能を解説している筆者。

初めてのキャリアの選択:PostgreSQL開発者を目指す

開発コミュニティでPostgreSQLの開発を3年経験した後、NTT OSSセンタに出向しました。NTT OSSセンタは、大勢のPostgreSQL開発者が在籍する組織です。そこでPostgreSQLのサポート業務と開発業務に従事し、PostgreSQLの開発により多くの時間を使えるようになりました。PostgreSQLにも自分自身にも大きな影響があったのは、その頃開発に携わっていたVacuumの新機能です。

VacuumはPostgreSQLのガベージコレクション機能で、UPDATEやDELETEで不要となった領域を再利用するために必要な機能です。当時は特に問題となっていた、トランザクションIDの周回に伴う性能劣化の改善に取り組んでいました。Vacuumはデータベース全体の信頼性にも関わる機能なので、とても慎重に開発する必要があります。例えば、まだ参照する可能性があるデータを削除してしまうと、データベース損失につながります。また、ほぼすべてのユーザがVacuumを利用するので、一部のユーザにとって恩恵があっても、それ以外のユーザに悪影響がある機能は受け入れられません。機能設計の段階から多くのエンジニアと議論ができ、そして多くのサポートをもらいながら機能を開発し、PostgreSQL 9.6に取り込まれました

開発コミュニティでの活動の比率が高くなると、社内メンバーよりも、開発コミュニティ内のメンバーとより密接に仕事をするようになります。すると、それまで自分のロールモデルは身近にいるエンジニアだけでしたが、開発コミュニティ内でも自分のロールモデルとなるエンジニアと出会うことができました。コミッタをはじめとする開発コミュニティで活躍しているエンジニアの多くは、PostgreSQL本体や関連製品の開発を本業としています。そのような姿を見て、「PostgreSQLの開発にもっと専念できる環境に身を置きたい」と思うようになりました。

2017年撮影。ロシアで開催されたPostgreSQLのカンファレンスで発表。

そして、2ndQuadrantから誘いをもらったことをきっかけに、そのチャンスがやってきます。2ndQuadrantは、PostgreSQLを中心にサービスを展開しており、PostgreSQL開発にも力を入れている企業です。2ndQuadrantは当時最も多くPostgreSQLコミッタを有する企業の一つでした。創業者のSimon Riggsをはじめ、Peter Eisentrautや、Álvaro Herreraら私の尊敬するエンジニアが何人も在籍する企業です。2020年にEDBに買収・合併されました。

PostgreSQL開発者としてはとても理想的な環境です。ですが、チャレンジもたくさんありました。2ndQuadrantには当時100名程度在籍していましたが、日本人は一人しかいませんでした。当然、社内公用語は英語、そして、上司とのコミュニケーションももちろん英語です。さらに、日本支社がないため日本国内では個人事業主として活動する必要があります。PostgreSQLに関わり続けるという点では、NTTデータに在籍していても実現できると考えていたため、NTTデータという日本を代表するような大企業から、海外のスタートアップ企業に転職する勇気がなかなか出ませんでした。

さらに、某クラウドベンダからデータベース関連のサポートエンジニア職のオファーもいただいていました。そのため、転職せずにPostgreSQLに関わり続けながら経験を積んでいくのか、PostgreSQLに特化してPostgreSQLの本体開発の道を極めるのか、それとも、PostgreSQL以外のデータベースも含め経験し自分のスキルの幅を広げるのか、の3つの選択肢で悩みました。

本当にやりたいこと、なりたい姿は何か

決断するまでの1か月間は、それまでの私の人生の中で最も悩んだ期間だったと思います。キャリアの選択にはいろいろな考え方がありますが、私は「自分が本当にやりたいことは何か」「自分がなりたい姿は何か」を考えました。

なりたい姿を想像すると、やはりコミッタをはじめとする開発コミュニティのエンジニアたちの姿が浮かびます。そして、本当に自分がやりたいことは、やはりPostgreSQLの開発でした。当時からPostgreSQLのコミュニティ(開発コミュニティやユーザ会など)自体が好きだったのだと思います。開発コミュニティでは、さまざまなバックグラウンドを持つエンジニアたちからフィードバックをもらいながら機能を開発していくことで、成長することができました。そして、自分が書いたコードが、世界中で稼働しているPostgreSQLの中で動いていることにやりがいを感じました。

悩み抜いた結果、海外の憧れのエンジニアたちと仕事をすることで、PostgreSQLの開発をもっと極めてコミッタに近づきたい、という思いから2ndQuadrantへの転職を決めました。これがPostgreSQL開発者へと自分が踏み出した、はじめの一歩だったと思います。この先一生PostgreSQLだけで生きていけるとは思いませんが、この先5年、10年はPostgreSQLの開発に集中して、まずは自分の目標を達成したいという思いでした。その後のことは、自分も含め社会も大きく変化している可能性があるので、その時に考えようと思いました。英語は依然苦手なままでしたが、幸いにも開発コミュニティでの議論や、PGConなどの海外カンファレンスでの登壇を通して、なんとかコミュニケーションが取れるレベルにはなっていました。

転職後、憧れのエンジニアたちと一緒に働く環境はとても刺激的でした。それまではコミュニティ上でメールでの会話だけでしたが、同じ会社にいることで日常的にコミュニケーションを取るようになります。開発・提案中の機能について相談ができ、彼らの技術力の高さを肌で感じることができました。自分よりシニアなエンジニアが何を考えているのか、同じものを見ていてもどういう視点で見ているかを日々体験し、それを真似していくことが、自分が憧れの存在に近づく最善の方法だと考えています。

念願のコミッタになる

2022年にAWSジャパンに転職し、現在はフルタイムでPostgreSQLの開発をしています。フルタイムのPostgreSQL開発者として転職するのはこれが初めてでした。AWSジャパンでは、PostgreSQLを利用した多くのサービス内で膨大な数のPostgreSQLが稼働しており、PostgreSQLユーザや社内からさまざまなPostgreSQLの課題が見えてきます。そのため、多くのPostgreSQLの課題を改善に直接つなげることができる、PostgreSQL開発者にとっては理想的な環境です。また、AWSはさまざまなレベルのエンジニアが多く在籍しているので、メンターとして若いエンジニアの育成に携わる機会もあります。

そして、2023年4月にPostgreSQLコミッタに就任しました。約10年間にわたって掲げてきた目標を達成でき、とてもうれしく思いました。10年という月日はとても長いですが、諦めずに続けてきて本当に良かったと思います。データベースが全くの未経験からでも著名なOSSのコミッタになれたことは、大きな自信につながりました。

最後に:キャリアを振り返ってみて

私のデータベースやPostgreSQLとの出会いは偶然で、運良くそこから自分のやりたいことを見つけられました。これからもデータベース開発者という立場からデータベースに携わり続けたいと思います。

これまでの自分のキャリアを振り返ってみると、自分ができることよりも、自分がやりたいことや、なりたい姿を追求してきました。そして、自分のモチベーションを大きく支えたのは、ロールモデルとなるエンジニアたちへの「憧れ」でした。ロールモデルとなるエンジニアの仕事ぶりを間近で見ることで、目標とする姿を常に意識するようになり、そこから自分に足りない点を認識することができます。それがもっと成長したい、というモチベーションに繋がります。

2018年撮影。来日したPostgreSQLコミッタとカンファレンスの合間に議論している様子。

ロールモデルをどのように設定するか、どのように見つけるかは人それぞれだと思います。自分の理想に100%合致する人がいない場合でも、さまざまな人が持つスキルや考え方、キャリアなどの一部分を組み合わせて、理想のエンジニア像を作ることができます。

そして、さまざまな人と出会う場所として、技術コミュニティはおすすめです。私は、日本のPostgreSQLコミュティや海外のPostgreSQLコミュニティに参加することで、多くのPostgreSQLユーザや開発者と出会えました。また、PostgreSQL以外のデータベースコミュニティでも、国内外を問わず素晴らしいエンジニアの方々と出会うことができました。そのような方々との出会いがなければここまで楽しくPostgreSQLの開発を続けてこられなかったと思います。

「わたしの選択」というテーマで、私のPostgreSQL一色のキャリアを振り返ってみました。本稿が少しでも、読んでくださった方のキャリア選択の参考やヒントとなれば、これほど嬉しいことはありません。最後まで読んでいただきありがとうございます。