新卒ぺーぺーのエンジニアが配属一ヶ月で学んだことを振り返る

はじめに

本記事では、配属から1ヶ月間(5月末〜6月末)で社内ツール改善を通して学んだことを書きます。 主に内容としては次のとおりです。

  • SlackとDocbaseの通知設定を行うための連携部分の実装
  • 開発の流れを学びながらの実装
  • 成果物に対するフィードバック
  • 今後の課題

自己紹介

はじめまして。18新卒の北陸出身の人です。 生魚苦手なので、北陸の方から東京へ出て来ました。 学生時代はGo書いたりScala書いたりしてました。社会人になってからはJS書いてます。

使用ツールの説明

Slack

Slackの特徴として、外部ツールとの連携や、公開されているAPIの豊富さからエンジニアに人気のツールとなっています。最近では、日本語対応もしており、エンジニア以外のユーザも導入コスト下がったのではないか、と思います。

Docbase

Docbaseとは、KRAY Inc.が運営しているドキュメント共有サービスです。Kibelaや、Qiita:teamなどと比較してコストが安く、使いやすいことが特徴となっています。

実際に取り組んだこと

前提として、既に一部SlackとDocbaseの連携が行われていました。

なぜ連携したのか

Docbaseの導入や、Slackとの連携の背景などに関しては、 こちらの村本さんの記事にて、詳しく書かれています。

tech.leverages.jp

改善したこと

僕が初めての業務で担当したのは、Docbaseで設定されている通知状況をSlackから変更できるように改善することでした。 ↓↓完成品↓↓ f:id:y-ito-lvgs:20180820131301g:plain

/docbase notify onで、通知をonにすることができ、/docbase notify offで通知をoffにできるコマンドです。 onの後ろに個別に設定したい項目がある場合は指定することができます。たとえば、/docbase notify on commentとすることで、投稿にコメントが付いたときの通知をonに変更可能です。

なお、今回の開発にあたって利用したものは次のとおりです。

構成(簡易)

f:id:tech-leverages:20181107172642j:plain

取り組んだ背景

弊社では、Webhookを用いてDocbaseで記事が投稿・更新などされたら、Slackの対応しているチャネルに通知が飛ぶ設定を行っています。導入以前は、通知の設定の追加・変更を行うたびに、Docbase上で通知設定可能な権限を持っている人にお願いをする必要がありました。通知設定の追加・変更のたびに、管理者にお願いして変更してもらうのも無駄なので、誰でも変更できるようにしようというのが背景です。

経験したこと

改善を通して

  • 使用してもらった人からリアクション、フィードバックを貰えた
    • 「便利になった」、という感想から、「現在の通知設定の状態がみたい」、といったような改善点のご指摘等までいただけた
  • プロダクトとは違うツールの開発の流れを実際に実行した
    • 新卒でこのような社内のツールの改善を行うことで開発の流れを学びながら取り組めて非常に良かった
    • スプリントごとにタスクを割り振って、Zenhubを用いて割り振られたタスクを実装していくというフローを少しずつ順を追っていくことができた

その他

  • 手厚いコードレビューを受けた(今までコードレビューを頂く機会があまり無かった)

同期も別記事で述べていることですが、コードレビューが非常に手厚く、ロジックのみならず、フォーマットの部分まで含めてレビューしてくださります。レビューを受けて学んだことに関しては同期とほとんど同じです。

例えば、コーディング規約に則っていないコードとして、 f:id:y-ito-lvgs:20180820131721p:plain

こういうもの(elseの後ろにスペースを入れる必要あり)です。チェックしたつもりでしたが、漏れがありました…。(この数日後Linterの導入を決意する)

他にも、ロジックに関しては、このように冗長だったコードが、

const current_notify_setting = notifySettingInfo.receive_notification_settings
const types = {
  'publish'   : current_notify_setting[0].value,
  'update'  : current_notify_setting[1].value,
  'share'   : current_notify_setting[2].value,
  'comment' : current_notify_setting[3].value,
  'star'    : current_notify_setting[4].value,
  'goodjob' : current_notify_setting[5].value,
  'join'    : current_notify_setting[6].value
}

const body = {
  id: id,
  notificatable_type: 'Group',
  notificatable_id: group_id,
  receive_notification_settings: {
    receive_publish_post_notification: types['publish'],
    receive_update_post_notification: types['update'],
    receive_sharing_post_notification: types['share'],
    receive_comment_notification: types['comment'],
    receive_star_notification: types['star'],
    receive_goodjob_notification: types['goodjob'],
    receive_join_user_notification: types['join']
  },
  group_id: group_id,
  type: 'slack',
  webhook_url: notifySettingInfo.webhook_url
}

レビューを経て、次のようにスマートになりました。

let notifySettings = notifySettingInfo.receive_notification_settings.reduce((settings, setting) => {
  settings[setting.name] = setting.value
  return settings
}, {})

const body = {
  id: id,
  notificatable_type: 'Group',
  notificatable_id: group_id,
  receive_notification_settings: notifySettings,
  group_id: group_id,
  type: 'slack',
  webhook_url: notifySettingInfo.webhook_url
}

デプロイ後の修正に関するフィードバックの内容

フィードバックの内容としては、

- コマンドを忘れてしまう
- 現在設定されている通知設定を確認するコマンドがほしい
- Privateチャネルの方で実行してみたところ動かなかった

です。公開してから早くも様々なフィードバックを頂きました! 使っていただけている証拠なので感謝です。

今後の課題

  • docbase notify helpを作るか、docbase helpを作るかどうか
  • docbase notify statusの実装を行い、現在の通知設定を確認できるようにするかどうか
  • Privateチャネルの方はSlackの運用方針と逆なので対応しない予定ですが、あまりにも要望が多い場合は対応する予定です

おわりに

社内で使用しているツールの改善を通して、「改善に終わりはなく、どこかの誰かが、改善点を見つけて報告してくれる」という構造を体験することができ、エンジニアとはなんたるや、の初歩的なところを学ぶことができました。

実際に社外の人に使われているサービスではないため、考えることは少なかったのですが、その少ない中でもたくさんのフィードバックをいただけました。次の業務ではご指摘いただいた点を再度指摘されないようにしていきます。

以上、配属1ヶ月で学んだことでした。