Findy Engineer Lab

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

夢中になった技術が「打ち込める仕事」になるまで ─ OSS検索エンジンの開発にコミットし事業にも貢献する

大好きな技術が仕事になった話

はじめまして、 @mocobetaと申します。 パッケージソフトウェアベンダー、コンサルティング会社、Webサービス企業などを経て、現在は株式会社LegalForceというスタートアップの研究開発セクションでソフトウェアエンジニアをしています。

個人としては、Python形態素解析ライブラリjanomeを開発するとともに、OSS検索エンジンライブラリApache Luceneのコミッターをしています。ちなみに本記事のアイキャッチ画像は、絵師さんに描いてもらったjanomeのキャラクターです。とてもかわいく描いていただいて、お気に入りの1枚です。

この記事では、進路とエンジニアとしての力不足に悩んでいた私の若手時代から、10年(以上)の模索期間を経て、ライフワークにしたいと思える技術に出会い、なんとか好きな仕事で食べていけるようになるまでを振り返ります。アップダウンの激しいIT業界において、キャリアに悩みながらも「打ち込める仕事」を諦めたくない若い人の参考になれば幸いです。

「自分が何者なのか?」を模索していた若手のころ

私は、大学と大学院で情報工学を学び、新卒でIT企業に就職しました。高校まではコンピューターにほとんど触れたことがなく、インターネットもプログラミングも大学入学後にほぼ初めて触りました。幸いにも向いていたようで、授業や課題は楽しかったです。

しかし、同期や年次が近い先輩後輩には、中学高校からコンピューターに親しんでいた人もたくさんいました。自分よりずっと先を走っている彼らの背中を見て、焦ったり、コンピューターサイエンスという分野の広さと深さに圧倒されたことを覚えています。そんなに萎縮せず、学生時代にもっと気軽にいろいろチャレンジしておけばよかったということは、今になって思います。

システムエンジニアとして就職してからも、プログラミングやソフトウェア開発は好きだったものの、学ばなければいけないことが多過ぎて、どれだけ勉強しても自分のスキルに自信が持てませんでした。そのため「好き」よりも、将来への不安の方が大きかったのです。

わりと早い段階でマネジメント職は向いていないと見切りをつけて、若手のころはとにかく「プログラマとして生き延びるため」に、いくつものプログラミング言語やWeb技術やソフトウェア開発技法を、ひたすら独学しました。もう少し肩の力を抜いていてよかったのかもしれませんが、このとき必死に身に付けた知識は、今でも役に立っています。

こうした模索期間は4、5年続きました。

検索技術、そしてオープンソースとの出会いから転機へ

最初の転職で、大手ECサイトを運営している企業に、アプリケーションエンジニアとして拾ってもらいました。検索システムやログ分析基盤を運用している部署に配属され、自社サービスの開発と検索システムのイロハを学びました。これが、私のキャリアにおける最初の転機となりました。

この検索システムでは、バックエンドにApache Solrが使われていて、そのコア検索ライブラリがApache Luceneでした。アプリケーション開発も楽しかったのですが、この出会いで検索エンジンそのものに対する興味が湧いてきました。

もともと学生時代にテキストマイニングを研究していたこともあり、その背景知識も相まって、この分野をもっと極めたいと思うようになりました。とても仕事だけでは物足りなくなり、余暇の時間に趣味のアプリを作ってみたり、検索エンジンについて調べたことをブログで情報発信したりしはじめました1

Apache Luceneへの貢献からコミッターになり、生きた知識を教わる

このブログがきっかけで、Lucene/Solrのコンサルティングをしている会社に転職し、2年ほどコンサルタントとして働きました。Lucene/Solrというソフトウェア、そしてオープンソースコミュニティとの関わりを持ちはじめたのがこのころです。

本業でお客さんの検索システム開発や運用のお手伝いをする傍ら、LuceneのGUIツールであるLukeのメンテナンスに携わったり、Apache Solrの本を執筆(共著)したり、個人活動としてjanomeを作って公開したりしました。

Lukeのメンテナンスは、リポジトリのオーナーと一緒に、細々と4年ほど続けていましたが、古くなったコードベースの刷新とあわせて、Lucene本家に寄贈しました。この貢献が契機となり、2019年4月にはApache Luceneのコミッターに就任しました。

コミッターになってからは、kuromojiやAnalyzer周りの小規模な改善、approximate kNN searchの開発、ビルドシステムをAntからGradleへ移行するなど、興味の赴くままにさまざまなイシューやプロジェクトに携わっています。

Luceneに限りませんが、広く使われているOSSに長く携わっている開発者は、スキルの幅も深さも人並み外れています。コードレビューを介して、独学では得られなかったであろう、生きた知識やテクニック、ソフトウェアのデザインに対する哲学といったことを教わっています。

ちなみにオープンソース活動の副産物として、必要にかられて英語のwritten communicationが飛躍的に上達しました。oral communicationはまだ全然ですが……。

OSSを個人開発する楽しさ ── Pythonライブラリjanomeを通して

Luceneのように非常に大きなコミュニティを持ち、広く使われているOSSに参加して、海外のエンジニアと地域・時差を超えてコミュニケーションを取りながら開発することは、とてもよい経験になります。

一方で、janomeのような個人開発OSSを作ることにも、また違った楽しさがあります。マイペースに進めることができますし、ユーザーからのフィードバックを、それが良いものであれ悪いものであれ、ダイレクトに自分ごととして受けることができます。

納期やビジネス要件など、常に外の世界からの要請とバランスを取りながら進める日々の開発業務と違って、個人OSSは趣味であるため(OSSを開発するモチベーションは人によって違うと思いますが、私にとっては趣味のひとつです)、自分が思うようにデザインでき、また時間的制約をあまり気にせず、納得がいくまで試行錯誤が可能です。

「こんなのあったら便利そう」という気軽な気持ちで公開したjanomeですが、自分が思っていた以上に反響があり、得たものはとても大きかったと思います。余暇の時間のみを使って開発しているため、スローペースではあるものの、ゆるく長くメンテナンスを続けています。

最近の様子は、PyConJP2020の招待講演でお話させていただきました。OSSは、使う側もいいけど、作る側へ回ってみると大変なことも多いけど楽しいよ、ということが伝わると嬉しいです。

望んでいた場所に今やっと立てている

こうして振り返ると、10年前に自分がこうなりたいと思っていた場所に、今やっと立てているのかなと思います。もちろん達成できたことや良いことばかりではなく、仕事でも趣味の活動でも、ここには書き切れないたくさんの試行錯誤と失敗を重ねてきています。

プログラマとして才能がある方だとはとても言えないので、若いころに感じていた不安や焦りが消えることはおそらくないでしょう。ですが、これからも小さく失敗しながら、少しずつ前に進んでいきたいと思っています。

コアとなる技術を事業とリンクできてこそのキャリアがある

一口にソフトウェアエンジニアと言っても、さまざまなタイプの人がいます。新しい技術を次々と要領よく習得して幅を広げる人もいますし、一つの分野を深く極める人もいます。

ただし、経験を積んだ優れたエンジニアなら、どちらのタイプであっても、幅と深さの両方を兼ね備えているように思います。 ジェネラリストかスペシャリストかという境目は、経験を積むほどに薄れてくるものです。

スペシャリストとしてのスキルは深く学んで身に付けるしかない

私の場合は、インフラやバックエンドからフロントまで、何でもやるWebエンジニアとしてキャリアをスタートして、だんだんとスペシャリスト的な色合いが付いてきました。

エンジニアとして働きはじめて2年~5年目くらいの方から、「自分のスキルが広く浅いことや、専門性がないことが不安、ないし弱点だ」と聞くことがあります。若手のころの私も、同じように悩んでいた(そして今も悩んでいる)ので、よく分かります。

でも話はごく単純で、専門性がないことが不安で行き詰まっているなら、夢中になれる分野を見つけて、人より深く学んで身に付けていくしかありません。最新(と世の中で言われる)技術を追いかける時間は、一時的に削らないといけなくなるでしょうし、古臭く見える古典的な知識を根気よく学ぶ必要も出てきます。しかし、そういった「深く潜る」時期をあえて作ることは、即効性はなくても、決して無駄にはなりません。

好奇心を刺激する分野を一つ知ると全体像の理解がはかどる

よく言われることですが、一つの分野を深く知ると、他の分野との共通項を発見して全体像が浮かんでくることがしばしばあります。例えば私は、検索という技術を選びました。これによって、ハードウェアやOSといった低レイヤの知識から、アルゴリズムに関する知識、自然言語処理やデータサイエンスといった関わりの深い周辺分野の知識まで理解がはかどりました。

情報検索(Information Retrieval)には60年くらいの歴史があり、今も依存する周辺技術の発展の影響を強く受けながら、活発に研究と開発が続けられています。今後も廃れることはおそらくないでしょうし、自分の好奇心を刺激し続けてくれる技術分野だと思っています。

最初から「自分はこれが好き/得意」と決められる人は、おそらく少数です。どの分野が自分に合っているかは見付けていくしかありません。打ち込める領域が「まだない」という方は、まずは「何となく面白そう」という好奇心を大事にしてほしいですし、見付けたらできるだけ早く始めてほしいと思います。

技術で生きるために事業貢献できる仕事を能動的に選択する

好きな技術で生きていくには、能動的に仕事を選んでいかないといけません。「こんな仕事がやりたい」を主張することは、ときに選択の幅を狭めることもあります。しかし、自分にフィットするポジションを腰を据えて探すこと、そして相手からも選んでもらえるように努力することは、長期的に見てプラスになると思います。

能動的に仕事を選ぶことに加えて、専門性の高いポジションにおいては、経験を積むに従って(つまりお給料が増えるに従い)事業と技術をリンクさせることが求められます。働く場所を探すときには、専門知識を生かして問題解決できそうかどうか? だけにとどまらず、提案型の事業貢献ができそうか? という視点を持つとよいでしょう。

リーガルテックという新しい事業ドメインで挑戦する現在

私は2019年10月、LegalForceに入社しました。リーガルテックという新しい事業ドメインへの興味に加えて、ここなら面白い仕事ができそうに感じたことが大きな理由です。企業法務という仕事は高い専門性が求められる一方で、デジタル化があまり進んでおらず、業務の属人性も高く非効率な働き方になっている──そうした企業法務の仕事のあり方をLegalForceは根本的に変えていく、という高い目標を入社前の面談で聞き、社会を変えうる仕事にエンジニアとして携わってみたいと感じました。

実際に入社してみると、法人向けかつ専門性が高く、また顧客企業の重要な情報をお預かりするため厳しいセキュリティ要件が求められるなど、想像した以上にチャレンジングな領域であることが分かってきました。入社以来ずっと自社の検索システムの開発に携わっていますが、契約書という比較的特殊なコーパスを扱うがゆえの課題と、BtoBのSaaSというサービス形態に由来する課題があると感じています。

実際のサービス運用を通して見えてきた課題に対するアプローチや今後の展望については、この3月に開催されたDEIM2021(第13回データ工学と情報マネジメントに関するフォーラム)という学会で、技術報告としてお話させていただきました。

他にも具体的な機能開発として、例えばこんな仕事をしています。

マルチテナンシー下での Query Auto Completion 設計・運用戦略 - LegalForce Engineering Blog

たくさんの難しさはありますが、自分の関わる事業がこれから大きく成長する手応えを感じられて、やりがいも大きいです。手つかずの課題もまだまだ多いので、引き続き地道な試行錯誤と改善を続けていきたいと思います。

編集:はてな編集部


  1. このブログはもうありませんが、2012年から2019年まで更新していました。