社員のプロフィールと会社の歴史を共有するためのマイクロサービス Profistory

※この記事は「富士通クラウドテクノロジーズ Advent Calendar 2017」の 21 日目の記事です。
昨日の記事は blue271828 さん の「Mackerel でゆるい Docker 監視」でした。
明日の記事は kzmake さん が「NIFCLOUD 新機能:追加 NIC」について書くようです。

ぼくが所属する富士通クラウドテクノロジーズは社員数が約 250 人おり、比較的社員数が多い会社です。
社内でよく「誰があの技術に詳しいのか分からない」「あのサービスの担当者って誰なんだろう」みたいな声が上がっていたので、
社員のプロフィールと会社の歴史を共有できる Profistory という Web サービスを作ってみました。

特長

  • 共同編集でプロフィール・社史を作成
    • 単に自分のプロフィールを公開するだけでなく、他の人が登録した仕事を自分のプロフィールに追加したりできる
    • みんなが登録した仕事をもとに、年表 (いわゆる社史) を表示
  • OneLogin SAML での SSO 認証に対応
    • 社内システムにありがちな、面倒くさいアカウントたな卸し作業が不要
    • 他の社内システムとのシームレスな利用が可能
  • フル機能が API からも利用可能
    • 画面から行う操作はすべて API からでも利用可能
    • データ解析とか他システムとの連携とかもしやすい

画面イメージ

(※以降のスクショはテスト用のデータを埋め込んだものです。)

トップページ

「仕事の一覧」「社員の一覧」「タグの一覧」がサマリー表示されています。


仕事一覧 (社史)

みんなが登録した仕事の一覧を時系列で閲覧することができます。
「あの機能、誰が担当したんだろうな?」というような局面で役に立つんじゃないかと思います。


仕事詳細

仕事の詳細を開くと、その仕事に参加したメンバー、仕事にひもづけられたタグ、
それから仕事に関連する URL の情報がいい感じに表示されます。
「仕事に参加」をクリックすると、自分のプロフィールページにもその仕事が表示されるようになります。


社員詳細

自分やほかの社員のプロフィールページはこんな感じです。
自分自身につけたタグと、いままで自分が関わってきた仕事が表示されます。


タグ一覧

仕事や社員につけられたすべてのタグの一覧を、タグクラウド形式で表示するようにしています。


タグ詳細 (タグにひもづいた仕事・社員の一覧)

各タグにひもづけられた仕事の一覧と、社員の一覧を表示できます。
たとえば、python タグの情報を見れば、社内の python 製プロダクトと、python に詳しい社員の一覧を取得することができます。


SAML 認証

FJCT では社内の認証基盤として OneLogin という SaaS を導入しています。

今回、OneLogin の SAML 認証に対応したので、Slack / GitLab といった他のサービスにログインしていれば、Profistory にもログインできるという、
シームレスな SSO 連携を行うことができました。

さらに工夫した点としては、ログインするたびに SAML から受け取った情報でユーザー情報 (苗字・名前) を更新するようにしているため、
もし社員一覧のマスターに更新があったとしても、ログインさえすれば自動的に情報が更新されるようになっています。

API 対応

社内システムって API がないものが多く、スクレイピングで自動化しなければならなかったりするのがつらいので、
「せめて自分が作る社内システムは API を公開しよう」という思いで、フル機能な API が使えるようにしてみました。
詳しくはどこか別のところに書きますが、下記のような REST API (JSON 形式) が利用できます。

  • 仕事に関する操作
    • 仕事一覧: GET /api/works.json
    • 仕事詳細: GET /api/works/:title.json
    • 仕事追加・更新: PUT /api/works/:title.json
    • 仕事へ参加: PUT /api/works/:title/join.json
    • 仕事から抜ける: PUT /api/works/:title/leave.json
  • 社員に関する操作
    • 社員一覧: GET /api/users.json
    • 社員詳細: GET /api/users/:user_name.json
    • 社員更新 (自分のタグを更新): PUT /api/users/:user_name.json
  • タグに関する操作
    • タグ一覧: GET /api/tags.json
    • タグ詳細: GET /api/tags/:name.json

技術的な話

ソースはここにあります。

docker-compose up -d でローカル環境上で起動させることができるので、よかったら触ってみてください。

利用技術的には、いったん伝統的な Web アプリケーション (sinatra + haml + mongoid + jquery) として作りました。
社内システムだし、とりあえず動いて、API があればいいっしょという気持ち。

あと、これを作っている間に、ruby-saml gem と config (railsconfig) gem の考慮漏れを見つけて、p-r をマージしてもらったのが楽しかったです。

おわりに

社員のプロフィールと会社の歴史を共有するためのマイクロサービスについて、プロトタイプを作ることができました。
あとはちゃちゃっと API のテスト書いて、社内に試験導入してしまいたいな。
以上、少し早いですが、よいお年を〜。