Sansan株式会社

Sansan株式会社

名刺管理サービス「Eight」のサービスプラットフォームにRubyを採用

Eightは50万人が使う名刺管理システムだ。 利用者はスマートフォンのアプリを使って名刺を撮影し、Eightにアップロードする。アップロードされた名刺画像はオペレータに渡され、名前や会社名、所在地などが手作業で入力される。人手による入力には一定の時間がかかるが正確で、複雑な形式にも対応できるのが特長の一つだ。

登録された名刺情報は名刺交換をした時期やグループ分けによって整理できる。検索できるのはもちろんだが、名刺を通じて「つながる」ことで、名刺の持ち主自身による更新の通知を受け取ることができる。常に最新の状態となる。

Railsを使ってみたかったのが採用のきっかけの一つ

Eightは主に個人向けの名刺管理システムとして企画された。Eightを運営するSansan株式会社では、主に法人向けの名刺管理システム「Sansan」を運営しているが、ニーズの違いから新たなプロダクトとして開発された。

Eightは大きくわけて二つの部分からなる。一つは利用者がスマートフォンのアプリやPCのブラウザからアクセスするEightそのもの。もう一つは、Eigthを通じてアップロードされる名刺情報の手作業入力を行うシステムだ。これらの両方にRailsを採用している。

「事業スタート時のプロトタイプ開発など試行錯誤するには最適だと思ったのが大きな要因でした」 プロトタイプを作成するなど実際に開発作業を行ってみて、早いペースでの開発や、素早く手軽なリリースが可能だとの実感を得ることができたことで採用が決まった。

優秀な技術者との出会いがあった

SansanはC#で開発されており、Ruby/Railsの業務としての経験はEightが初めてのことだった。もちろん最初は社内の人員が十分ではなく、そのため外部のRuby/Railsエンジニアに参加してもらって開発を始めた。

「会社や業務を越えた技術者同士のつき合いができるコミュニティがあること。開発者同士、理解があってとり組みやすい。これはRubyの特徴の一つだと思うのですが、すごいなと感じます」 手作業入力のためのシステム開発を行った株式会社永和システムマネジメントとの出会いも、もとはといえばコミュニティに参加していたメンバーの一人がきっかけだったそうだ。

早いサイクルの開発・運用になじむRails

Eight本体のソースコードの規模は、機能要求に応じて大きくなってきているが、その都度のリファクタリングなどにより以前よりもコンパクトに、スリムにする努力を重ねてきた。そのため「機能の増え方ほどにはソースコードは増えておらず、増えつつもコントロールできる量」におさめられているそうだ。

手作業入力システムのほうは、求められる機能に大きな変化がないこともあり、ソースコードの規模にはそれほど変化がない。ただし、処理手順の変更に対応するなど、内容は大きく変わってきた。

「開発が集中する機能というのはどうしても出てくるが、そうしたものもソースコードが肥大化してしまわないよう気を付けています。新しい機能を追加するときや、サイズが大きくなってきたサービスについて、分割して別サービスにできないか検討しています」

名刺画像処理のワークフローに対応する複数のサービスで構成しており、現状、ほどよい粒度を維持できている。

「既存のソースコードに追加するのではなく、新たなサービスを立ち上げるハードルがRailsは低い。これはインフラを整備してきた効果もあると思いますがリポジトリを一つ作って完了ということもあります」

データベースの分割やスキーマの最適化など工夫した点はあるが、常に、そしてシビアに応答の良さを求められる手作業入力システムも、メディア露出や年度の替わり目など突発的なアクセスにみまわれることのあるEightも、ともに大きな問題は起きていない。

現在でも週に二〜三回のリリースをともなう開発を継続している。ときには「モジュールまるごと差し替えることもあった」し、サービスを公開する前には「Eightをまるごと作り直したとこともあった」という。 RubyやRailsのほかにも様々な要因はあるが「RubyやRailsに対して満足感を得ている」とふりかえる。

コードレビューは最後の砦

とはいえ不安な点がまったくないというわけでもない。たとえばRubyに型がないこと。

「今も時々考えることがあります。型の間違いといった些細なミスでくずれてしまうのではないか。今の人数なら大丈夫だが、この先、五倍、十倍となったときにはどうだろうか」

コミュニケーションは特に大切にしている。

設計意図を伝え、メンバーがおたがいに認識しあう。「こういう機能を作りたい」「この機能が必要」「このように作ろうと考えている」といった意識を合わせてから開発を始める。その上でコードレビューを実施して担保しつつ、Rubyのよいところを共有していく。

「コードレビューは必ず実施します。基本的には全員で行うことにしていますが、いつもそうするのは難しいので、少なくとも二人のレビューを経た上でマージすることにしています」

Ruby/Railsエンジニアの育成

ときにはコードレビューしやすい書き方に変えていくこともある。また、より分かりやすい書き方や、より一般的な書き方を求めるなかで「これgemあるんじゃないか?」という指摘から実際にgemを見付けてくることもある。

「新しく入ってくる人がRubyやRailsでの開発経験があまりないということも少なくないし、開発経験があってもコードレビューに慣れていない人もいる。そういう人たちには、まずはほかのメンバーのやり方を見てもらいます。どこに着目するのか、なぜ指摘するのか、どのように指摘をするのか。場合によっては、コードレビューに慣れている人と組んでペアコードレビューを行うこともありました」

コードレビューには最後の砦としての役割り、よりよいコードへのブラッシュアップの場としての機能があるが、それ以外の面もある。

RubyやRailsのための教育カリキュラムは特に用意していない。教材となるリソースはコミュニティの中にいくつもある。もちろん書籍もあし、より深く学びたければ勉強会に参加するといった方法もある。いろいろな機会やリソースを活用しながら、メンバー同士のやり取りを重ねることでおたがいにカバーしあう。そして実際のコードを書き、コードレビューに参加する。

コードレビューを含めたコミュニケーションの中で個別の技術を身につけるとともに、育成する、育成されるというよりもこのチームでのやり方そのものになじんでもらう。

「最初の開発の終了から少しずつ引き継ぎを行ってきました。2015年4月にはほとんどの作業を自社でまかなえる体制を確立しました」

EightのこれからとRuby

現在、EightとSansanの両方に手作業入力システムがある。前述した通り、Eight向けのシステムはRailsで実装されているが、それよりも前に実装されたSansan向けのシステムはC#で実装されている。これらは今後、Rails版に合流させる形で一本化が予定されており、今まさに作業を進めている最中だという。

その他にも大量のデータを管理するアーカイブシステムの運用や、RubyとRailsのバージョンアップ、とりわけ変化の早いフロントエンドにおける新しい技術への取り組みなど、いくつかの課題がある。いずれもRailsを中心に進めていくことを予定している。

また、コミュニティ活動の一環として勉強会の開催はこれまでにもSansanとして行ってきている。新しい技術に触れる機会、刺激を得る機会として、RubyやRailsをテーマにした勉強会についても企画している。コミュニティで出会い「短くない期間のつき合いなかでよい関係を築かせていただけた永和さん」とも共同して勉強会を開催することが決まっている。(※2015年5月に実施)

「これまでSansanといえばC#の会社というイメージだったが、これからはRubyやRailsの会社としても知られるよう活動していきたい」

※本事例に記載の内容は取材日時点のものであり、現在変更されている可能性があります。