技術コミュニティの活動を通して人生に整合性がとれた ─ 未経験30代がRubyのコア実装に挑むようになるまで

高校を卒業した後、コールセンターでの派遣業務や非正規の事務職といった経歴から、33歳でまったく異なるソフトウェア開発の世界に飛び込んだ塩井美咲@coe401_さん。短期間でプログラミングのスキルを学び職業プログラマーへの転身を果たしただけではなく、プログラミング言語Ruby自体の開発をテーマとする国際カンファレンスRubyKaigiでも4年続けて発表するほどになっています。

キャリアチェンジの経緯やプログラマーとしての歩みについて塩井さんに伺うと、むしろ技術コミュニティとの出会いと積極的な参加があったからこそ、エンジニアとして多くの成長があったことが分かります。その熱意のベースには、何のためにソフトウェア開発者を志すかという思いがありました。

▲ 松本市で開催されたRubyKaigi 2023に登壇する塩井美咲さん

ソケットライブラリの改善にRubyの開発助成で取り組む

── RubyKaigiにはオンライン開催だった2021年から毎年登壇されているそうですが、この5月に沖縄で開催されたRubyKaigi 2024ではどういった発表をされたのか紹介いただけますか。

塩井 今年のRubyKaigiでは「Rubyのソケットライブラリに、IPv4とIPv6を両方利用できる環境においてネットワーク接続速度を改善するHappy Eyeballs Version 2アルゴリズム(RFC8305)を導入し、クライアントソケットの接続性を改善する」という活動についてお話ししてきました。

▲ RubyKaigi 2024における塩井さんの発表「An adventure of Happy Eyeballs」の資料

この活動自体は一般財団法人Ruby Associttionが主催する開発助成に応募して採択されたもので、2023年11月から今年の3月まで取り組んでいました。

2023年度Rubyアソシエーション開発助成金 公募結果発表

── ソケットライブラリは多くのアプリケーションを支えるRubyのコアライブラリであり、恩恵をうけるユーザーも多いですよね。このテーマに取り組むきっかけは何だったのでしょうか?

塩井 ソケットライブラリにHappy Eyeballsアルゴリズムを取り込むというテーマ自体は、2020年度のRuby Association開発助成でも取り組んだ方がいらっしゃったんですが、そのときは「最終報告時点でPull Requestのマージまで至らず」という状況だったんですね。

その話自体は以前から聞いていましたが、Rubyコミッターの柴田(博志、@hsbtさんが「こういうの興味ありませんか?」と私に声をかけてくれたのが2022年の秋に。そのときはまだ覚悟ができていなくて着手できなかったのですが、翌年のRubyKaigi 2023でもSeñor Organizerの角谷(信太郎、@kakutaniさんから「本業のネットワークのほうはどうですか」と本件について声をかけていただいて、じゃあがんばろうかなと。私の本業はネットワークではないんですけど(笑)。

▲ 2023年12月のRuby 3.3リリースパーティでHappy Eyeballsの実装について相談する塩井さん(後ろ姿)、田中哲AKRさん、成瀬ゆい@nalshさん

── 発表資料や整理のために用意された疑似コード拝見するかぎり、さまざまな条件を考慮する必要があって実装はたいへんそうですね

塩井 状態遷移を用いることで解決できそうだ、ということは先行プロジェクトでの成果から分かっていました。それを実装できるものに落とし込むためにシナリオを整理したところ、実装に必要な要素がだんだん分かってきたので、そのまま頑張った感じです。

ただ、実際にこれを完成させるには、もう少し時間がかかりそうなんです。ターゲットになるメソッドが2つあって、そのうちRubyで実装されているSocket.tcpのほうはRuby 3.4のmasterにマージされた後で実装に問題がある部分が分かって、やり直しているところです。それが一段落したら、もう1つのCで実装されているTCPSocket.newにも対応する必要がありますし、引き続き頑張ります。

▲ Happy Eyeballs version 2の状態遷移図からシナリオを整理する

世の中をよくするためにプログラマーに転身

── 理科系の勉強をされてきたわけでもなく、事務職からプログラマーに転身して6年でそういった実績を挙げられることに驚きますが、そもそもなぜプログラミングを勉強しはじめたのでしょうか?

塩井 前職は事務職で、その前はコールセンター勤務でしたが、働く中で「自分が働いた分だけ少しでも世の中がよくなるような仕事がしたい」と思ったのがきっかけです。当時、社会にとって一番の課題ではないかと自分が感じていた分野や、それまでの人生を振り返って「こんなふうだったらよかったのでは」と考えた分野で、新しいサービス提供に関わりたいなと。

ただ、それまでの職務経歴や年齢を考えたとき、転職した先に提供できるスキルが必要だと考えて、Webプログラミングを学ぶために、いわゆるプログラミングスクールに通いはじめました。

── プログラミングを学びはじめた当初、どのように勉強されていましたか?

塩井 半年のコースだったので、最初の3カ月は仕事が終わった後にカリキュラムを進める形でしたが、途中で退社してしまったので、残り3カ月は朝から晩までずっと机に向かっていました。カリキュラムを進めて、それと並行してRailsチュートリアルをやって、一息つくタイミングでソフトウェア開発にまつわる本を読んで、という感じです。

そんなに要領のよいほうではないので、「とにかくこれをやりたい、やらないと」と思うことにすごく時間を使っている気がします。これは今も変わりません。逆に言うとそれぐらい集中してやるものが今も自分にあってありがたいなと思います。たいへんなことも多い気がするのですが、でも、やってしまう。「理解したい」と思っちゃうんでしょうね。

── これまでプログラミング以外にそういった対象はありましたか?

もともと1つのことに集中しやすい、何かを始めるとそれが頭から離れなくなってしまって、その他には何もできなくなってしまう人間ではあるので、仕事でも何でもそういう感じではあるんです。ただプログラミングやコンピュータに関しては、自分が知らないことがずっと無限に広がっているので、何か1つ理解できて作れるものが増えたとしても、まだ分からないことがたくさんあって、ずっと続けられる感じがありますね。

── 先ほどお話にあった「理解したい」という気持ちが、学びつづけるモチベーションにつながっているということでしょうか?

塩井 コンピューターの世界はすごく広いですが、それって現実世界も一緒かも、と思います。現実世界で自分が一生の間に知ることができることは、ほんの一部でしかないですよね。それでも、生きていると知っていることがどんどん増えて、分かることも増えて、自分なりにいろんな物事に対する解釈が少しずつできてくるようになりますよね。

コンピューターの世界も同じかなと。自分なりに見識を広めて、全体像が少しでも見えるようになりたいなっていう。全部理解するのは無理ですが、この世界が一体どういうものなのかを自分なりに理解したい気持ちがあるかなと感じます。

── プログラミングでつまずいたときは、どのように克服されていますか?

塩井 正直に言うと、つまずいたときにちゃんと克服したいものとそうでもないものには、自分の中でわりと濃淡があるように思います。「このテーマにはきちんと向き合ったほうがよい」と感じるものには、時間をかけて取り組みます。

例えば『Rubyのしくみ』という本は何度読んでも分からなかったけど、ここから逃げてはいけないような気がして5回くらい読みました。ここでもとにかく「時間をかける」をやっていますね。

https://www.ohmsha.co.jp/book/9784274050657/

Rubyコミュニティと出会ってすぐその「良さ」を直感

── Rubyコミュニティとの出会いはいつごろですか?

塩井 プログラミングを学びはじめてすぐ、当時住んでいた福岡でたまたまRubyのイベントを見つけて、それが地域RubyコミュニティFukuoka.rb主催の「福岡Ruby会議02」でした。参加しても多分何も理解できないだろうなとは思いつつ、Rubyのことをもっと知る機会になるかもしれないと思って参加しました。

── そのときの印象はいかがでしたか?

塩井 まずオープニングから、日本Rubyの会理事である島田浩二さん@snoozer05のトークに感銘を受けました。「A Ruby Programming Episode: Ruby is my glasses, my stationery, and my language」と題した発表で、島田さんにとってRubyがどういった存在であるか、それは「世界への視座を与える眼鏡であり、思考をスケッチするためのペンであり、思考のための言語である」というお話でした。

そのときの私にはその意味自体は十分には理解できなかったのですが、「プログラミング言語ってそんな存在として捉えられるものなんだ、自分もそんなふうにRubyを捉えられるようになりたい」という気持ちになりました。何か自分の感性に響くものを感じ、「自分の感性に響くということは多分自分にとって良いものに違いない」と思って、ぜひ自分もその良さを理解したいと。

── コミュニティで最初に発表されたのはいつごろですか?

塩井 最初に人前で喋ったのは2018年の9月のFukuoka.rbでのLT会でした。当時はプログラマーとしての職が決まり、福岡から上京してプログラマーとして働きはじめたばかりの頃です。「イベントの発表者を増やしたいのでオンラインで喋りませんか?」ってFukuoka.rbのUdzura(近藤宇智朗、@udzuraさんから声をかけていただき、そのときちょうど仕事でやっていて全然分からなかったテーマについて「全然分かりません」という話をしたのが登壇デビューです。

── その後もコミュニティでの活動を積極的に行われていますね

塩井 上京後、東京の老舗地域RubyコミュニティであるAsakusa.rbに顔を出すようになり、Rubyコミュニティの内外で活躍される本物のハッカーの人々と出会い、刺激を受けてきました。Asakusa.rbの人たちはすごい人たちなので、すごいコードを書いて、大きな舞台で登壇をされていて、何というかそういう人々の姿を見て「すごくかっこいいな、こういうことができるようになりたいな」と思った気がします。そして、今もそう思っています。

自分が本当にやりたい仕事かどうかがキャリア選択の軸

── 2022年に転職されたとのことですが、現在のお仕事について教えていただけますか?

塩井 株式会社エス・エム・エスにて介護職向け求人情報「カイゴジョブ」の開発に携わっています。プログラマーだけではなくデザイナーやQAメンバー、事業メンバーが揃ってチーム全体で、「求職者の方と介護事業者にとってのよい出会いを支えることで介護業界全体がよくなっていく」という未来を目指してそれをソフトウェアとして表現する、という仕事です。社内には他にもたくさんのプロダクトがありますが、カイゴジョブの場合はRuby on RailsとReactで開発しています。

── 転職活動の際に選択の軸としたことは何でしょうか?

塩井 転職を考えたとき、もともとプログラマーを目指したきっかけであった「自分が働いた分だけ少しでも世の中がよくなるような仕事がしたい」という気持ちのほかに、「技術で解決できることを増やしたい」「Rubyが好きな人たちと一緒に働きたい」という思いがありました。条件を満たす職場は多分たくさんあると思うのですが、その中でもエス・エム・エスは高齢社会という社会課題に真正面から取り組んでいて、最初から志望度は高かったです。

また技術部長の田辺(順、@sunaotや、今の私の直属の上司である諸橋(恭介、@moroなど、Rubyコミュニティでおなじみの人々がわりと長いこと働いている、というところもエス・エム・エスが気になっていた理由です。それぞれのメンバーがいろいろな知見を持って集まっている組織なので、いつも勉強させてもらっています。

── キャリアを選択する上で大切にしていることはありましたか?

塩井 私の場合は、志望動機で嘘をつかないようにしたいなと思っていて、そのためには自分が本当にやりたい仕事かどうかというのが重要なポイントでした。

例えばこの会社で働くとすごい技術力が身に付くかもしれないとか、もしかするとすごく待遇がよいかもしれない、みたいな恩恵があっても、それが自分にとって本当にやりたいことではなかったら、働いていてつらくなってしまうかもしれないので。

当たり前かもしれませんが、皆それぞれ大事にするものがあると思うので、自分のプライオリティは何かを考えてキャリアを選択することが大事だと思います。

選択して学んだことが自分に返ってくる初めての経験

── 塩井さんがプログラマーになって6年がたちました。それまでのキャリアと比べると仕事の内容も働き方も大きく変わってきたかと思いますがどのように感じますか?

塩井 実はプログラマーとして働きはじめて3年が過ぎた頃、急に不安になってきたことがあります。

私の場合は自分がプログラマーになったことで、それ以前とは住む場所も、日常で接するものも、もちろん仕事も、付き合う人々も、余暇の時間の使い方も、自分を取り巻く全てが何もかも変わりました。その一方で自分の内面は変わっていないことに気づいて、そうすると何だか自分が全然違う人の人生を生きているような気持ちになって、プログラマーとしての3年間とその前の33年間の整合性が自分の中で取れなくなってしまって。

プログラミングとかRubyコミュニティといったものが突然人生にやってきて、それまでの33年間にはありえないようなとんとん拍子で自分を取り巻く状況がどんどん良くなっているのですが、「これは突然やってきたものだから突然なくなってしまうのでは」と怖くなってしまいました。コミュニティでの活動を評価いただいても、それは「自分には見合わない過大な評価なんじゃないか、私は皆を騙しているんじゃないか」と不安に感じていました。

このことについてずっと考え続けていたとき、ふと「そういった周囲の声って、形のないものに対する評価ではなくて実際に自分がこれまでやったものに対する評価だな」と気づきました。「自分で選択して自分で取り組んだものがちゃんと自分に返ってくる」という経験が、プログラミングを通して自分の人生の中で初めて起こっていたんです。そして、それによって世の中にとって意味のあることができている、今はそのことにびっくりしてます。

── コミュニティとのつながりも大きそうですね。

塩井 Rubyコミュニティとの関係でいうと、RubyKaigi 2022での登壇の真っ最中、通信事業者のネットワークトラブルのためにオンライン配信が止まってしまって、発表途中で中断を余儀なくされたことがありました。そのとき、壇上でどうしたらよいのか分からず内心慌てていたところ、自然発生的に客席側にいた人々がいろんな質問を投げかけてくれて、皆で場をつないでくれたんですね。発表に関するものだけでなく「一番好きなRFCは何ですか?」みたいな質問もあって。それで不安と緊張がとけて、発表の再開後もスムーズに発表できました。

それはもちろん会場の人々がnice1だったおかげなのですが、同時に自分自身も「人生の中で会場のRubyコミュニティの人たちとの関係性を築いてこれたんだな」、それも含めて「プログラミングが人生の一部になっているんだな」と感じることができました。ようやく人生の整合性が取れたといいますか、自分の中でプログラマーとしての自分を納得してちゃんと受け入れることができたのは、そういう出来事があったからだなと思います。

今年のRubyKaigiのキーノートで「Rubyをもっとよいプログラミング言語にするためには、コミュニティの力が必要」とRubyの生みの親であるまつもとゆきひろ@yukihiro_matzさんがおっしゃっていました。そのためにできることはたくさんありますが、そんなふうに「自分に何ができるかを探したくなる存在が自分の中にあること」そのものがありがたいことだと思っています。

取材・構成:畑 明恵、勝野 久美子(トップスタジオ)
編集・制作:はてな編集部


  1. Rubyコミュニティでは「Matz is nice and so we are nice」の頭文字を取った「MINASWAN(みなさん)」という表現があり、「Ruby作者のまつもとさんがナイスな人なので、Rubyに関わるメンバーも、そういう感じでナイスにやりましょう」というニュアンスで使用されている。