スタメンのエンジニアが作っている『TUNAG』の技術的な解説

こんにちは、スタメンCTOの小林です。

最近、面接や勉強会などで社外のエンジニアの方と話した際に、スタメンのエンジニアチームの詳細について、思ったより面白そう、まともそう、やりがいがありそうとの感想をいただくことが続き、スタメンの中の人たちの詳細が外の人たちに伝わっていないと感じることがありました。

ちょうど先月の1/29、株式会社スタメンは、設立3周年を迎えて4年目に入ったこともあり、4年目を迎えたスタメン開発チームの現在を紹介する記事を書いてみます。

まずは、創業以来スタメンのエンジニアチームが作り続けている TUNAG について、技術的な側面から解説します。 スタメンのエンジニアチームの VISION (目指している姿) と VALUE (価値観や行動指針) と合わせて読んでいただけると、スタメン開発チームをより理解していただけると思っています。

興味をもってくださった方は、 こちら からご連絡いただき、気軽にスタメンのオフィスに遊びにきてください。詳細をお伝えさせていただきます!

TUNAG について

スタメンは、TUNAG(ツナグ) という、エンゲージメント経営を推進する社内SNSを運営しており、私を含めてエンジニアが在籍しているプロダクト部は、TUNAG の 企画、開発 を担当しています。

TUNAG が生まれた背景

TUNAG ミッションは、エンゲージメントの向上によって、明るく強い組織作りの支援を通じて、クライアントの成長を牽引することです。

スポーツにおいてメンバーが相互に信頼しあっているチームは強いのと同じように、ビジネスにおいても経営陣と従業員、従業員間で信頼関係を築けているチームは強く、様々な業界において競合他社に勝り、継続的な成長を遂げている企業があります。

この、企業においての経営陣と従業員、従業員間で信頼関係の度合いを「エンゲージメント」と呼び、スタメンは「エンゲージメント」を重視した経営を行っている企業に対し、TUNAG による社内制度を軸としたコミュニケーションによって、エンゲージメントの醸成を支援しています。

TUNAG が生まれた背景の詳細や思いについて、代表の加藤が ビジョン に書いています。また、導入事例 にて TUNAG を導入いただいている企業様を紹介しています。スタメンのエンジニアたちが、世の中にどのように影響しているかを知ることができます。ぜひ読んでいただけないでしょうか。

TUNAG の主な機能

TUNAG は、Ruby on Rails で実装され、Amazon Web Services で運用された SaaS(サース、Software as a Service) です。また、iOS/Android 向け アプリ と Chrome などの PC のブラウザで利用でき、導入頂いている各企業の社内コミュニケーションを担っています。

TUNAG は、規模や業界の異なる様々な企業の社内制度の運営に対応できるように、非常に多くの機能を備えていますが、各機能は4つのグループに大別されます。

SNS

SNS については、Facebook に代表されるような、タイムライン、プロフィール、効果的なコミュニケーションに必要な 絵文字、スタンプ、画像・動画の投稿に加え、ビジネスで利用できるチャットを備え、フル機能をもつ社内SNSサービスになっています。

社内制度の作成と利用

社内制度の作成と運用については、Google Form や SurveyMonkey に代表されるような 任意のフォーム を作成できます。制度は、特定の部署や役職のみに利用を制限したい場合がありますし、書籍の購入補助など利用回数に制限(例:月に3回)を設けるなど、利用に際して様々な条件を設定することができます。

書籍の購入補助など管理部門による確認が必要な制度もありますし、投稿前に上長の確認が必要な制度もあります。よって、TUNAGでは、承認経路の設定や承認状態の管理といったワークフロー機能を備えています。

さらに、ワークフローを提供するためには各ユーザーの所属や上長といった組織及び役職の情報が必要となります。TUNAG では、会社全体の各部門の組織図、各ユーザの所属と役職といった、人事マスターを管理することができ、制度の利用設定や、投稿の公開範囲、チャットのルーム設定などを組織単位で設定することができるようになっています。

共通基盤

TUNAG の目的は、エンゲージメント経営の推進です。よって、各企業の運営担当者にとって、それぞれの社内制度の利用状況や、各部署やユーザのログイン状況など、TUNAG の利用状況を把握することは非常に大切で、管理者画面には、グラフ等のダッシュボード機能や、各種CSVエクスポート機能が提供されています。

また、TUNAG 全体を横断的に検索できる 全文検索機能を Elasticsearch を用いて構築しています。

外部連携

他要素認証などの強固なセキュリティ や アカウントの一元管理などを目的に、Google G-Suite や Microsoft Azure Active Directory のアカウントを用いた Single Sign-on を希望されるお客様もいます。よって、TUNAG では、SAML 2.0 に対応しています。

また、PCにダウンロードすることなく、データをエクスポートできるように Google SpredSheet と連携していたり、 ネイティブアプリへPUSH通知を送るために、ニフクラ mobile backend と連携したりと、様々な外部サービスを連携する機能を実装しています。

TUNAG の テクノロジースタック

前述したように多くの機能を実装した TUNAG は、コード量も多く、また、日々データが蓄積されサイト規模が拡大しているため、開発効率、保守性、運用性を重視して技術選定しています。

創業時こそ、CTOの小林がまとめて技術選定しましたが、チームが大きくなった現在では、各分野で専門的な知見を持ったエンジニアが存在し、各々が新しい技術やライブラリをチームに提案して、TUNAG に取り入れています。

技術選定の考えとしては、各分野/技術のベストプラクティスを積極的に導入することで開発/運用を効率化し、確保した時間でTUNAGのコア部分の実装に注力する方針をとっています。

2019年2月時点の主なテクノロジースタックとしては、下記の図のようになります。順に解説させてください。

言語・フレームワーク

TUNAGの サーバーサイドは、Ruby on Rails で実装されたモノリシックなWebアプリケーションとなっています。TUNAG のコード量がさらに大きくなり、開発チームも複数になった場合は、機能単位でマイクロサービス化をするかもしれませんが、現時点では開発効率を重視してモノリシックに作っています。

また、タイムライン や チャット など 複雑なUI は React を用いて実装しています。ネイティブアプリは、iOS は Swift で実装されており、Android は Java から Kotlin へ移行中です。

開発支援

エンジニアの日々は、コーディング、デバッグ、テストが大部分を占めます。よって、日々の開発効率は非常に重要です。そのため、スタメンのエンジニアは、全員 RubyMine を用いて開発しており、快適に Rails や React を書いています。

また、GitHub Flow で開発を行っており、GitHub で PullRequest を作成し、リリースに際しては、チームメンバーがレビューを必須にしています。リリース前に必ずレビューを行うことで、バグを未然に防ぐことはもちろん、設計方針やコーディングテクニックなどの知識の共有なども積極的に行っています。

自動化も積極的に行っており、テスト や PullRequest がマージされた際の Deploy などは、CircleCI により自動化されています。Sider は、rubocop によるコーディング規約のチェックや Rails Best Practices による自動レビューに用いています。

なお、開発に用いているハードウェアは、MacBook Pro 15-inch, Apple Magic Keyboard, Magic Trackpad もしくは Magic Mouse に、27インチ 4Kモニターとなっています。スタメンのオフィスは机が広く、肩こり対策でキーボードを2台並べているエンジニアが多く、やたらキーボードがたくさんあるオフィスになっています(笑

プロジェクト管理

ベストプラクティスを積極採用するスタメンですが、社内コミュニケーションにおいては少し違います。

スタメンでは、多くのITベンチャーが利用している Slack を利用しておらず、TUNAG の チャット機能で日々のコミュニケーションを行っています。

プロジェクト管理は、Trello によるカンバン方式を2週間単位のスクラムで行っており、 DocBase に仕様やマイルストーンなどを記載して社内共有と知識の蓄積を行っています。

Amazon Web Services (AWS)

AWS の使い方は、Webアプリケーションのテンプレート的な構成となっています。EC2 上の Amazon Linux で nginx + puma の上で rails を動かしていますが、より効率的な運用を目指して夏にかけて AWS ECS を用いた構成に変更する予定です。

最近は、ログの蓄積と分析の基盤を準備中で、Kinesis Firehose、Glue、Athena といったサービスを用いて構築中です。これらのデータは、BI Tool の Metabase で分析したり、機械学習を用いたタイムライン等の最適化などに用いる予定です。

その他のサービス

TUNAG では、主要な部分は AWS で運営されていますが、いくつかの分野ではより高機能なクラウドサービスを利用しています。

アプリケーションの監視とパフォーマンス・チューニングは CloudWatch に加えて、NewRelic を用いています。

Bugsnag も多様しています。Rails や JavaScript で 例外が発生した場合は、Bugsnag によって通知されますが、例外発生時 の 環境変数 や Stacktrace などの実行環境が保存されるため効率的なデバッグに欠かせないツールとなっています。

また、メールの配信には SendGrid、画像の配信には imgix を用いています。これらのサービスは、メールのバウンス処理や、画像のリアルタイム変換など便利な機能備え、開発リソースの節約につながるだけでなく、費用面でも効率が良く助かっています。

最後に Cloud Firestore ですが、TUNAG のチャット機能のネイティブアプリ向けのバックエンドとして利用しています。チャットは、利用頻度も高くスケーラビリティ及びパフォーマンスが非常に大切となります。FireStore を用いることで、AWS の S3 のように パフォーマンスとスケーラビリティをすぐに獲得でき、また、Cloud Firestore のネイティブ向けSDKに含まれるローカルキャッシュ機能により、データ通信量の削減やレスポンス向上にも寄与しており、今後 Cloud Firestore の利用頻度は向上しそうです。

まとめ

ここまで読んでくださってありがとうございます! 今回、スタメンのエンジニアたちが作っている TUNAG について、技術的な側面からご紹介させていただきました。

TUNAG は、SNS、チャット、ワークフロー、制度管理(フォームビルダー) といった機能を備えた 大規模 Webアプリケーションで、Rails の他にも、React を用いたフロントエンド開発、Swift/Kotlinでの 向けネイティブアプリに加え、AWSを中心とした SRE にも取り組んでいます。 UI/UX、パフォーマンス、安定性、スケーラビリティ と 課題は山盛りで、当面飽きそうにありません。

また、TUNAG の導入社数は増え続けており、利用いただいているユーザ企業様からは多くの要望と期待を頂いています。ユーザーの皆さんの会社を良くすることに貢献できるのは、やりがいも社会的意義も感じます。

このように、スタメンの開発現場は、頼もしい仲間と、歯ごたえのある課題に向き合い、多くのユーザに使われる、大規模なアプリケーション開発に、没頭できる環境です。

これだけでも、それなりに幸せなことなのですが、もっと技術的なチャレンジをしてみたいし、もっと良いサービスにして、もっと多くの人に使っていただきたいと思ってます。何よりも、たくさんの頼もしい仲間を集めて、さらにすばらしい開発チームを作っていきたいと思っています。

ちょっとでも興味をもってくださったら、株式会社スタメンの募集一覧 ご覧いただき、ぜひご応募いただけないでしょうか。