こんにちは。
クラウドワークス テックのエンジニアをしている瀬目です。
クラウドワークスには、全社員が毎日、その日の業務を通じて感じたこと・考えたことなどをフリーフォーマットで投稿する「日報」という文化があります。
この日報は、「日報プロジェクト」という、社内の有志が集まってできたチームが運用・保守・改善していて、自分はリリースから現在まで開発を担当しています。
今回は、この日報というカルチャーを支えるシステムのアーキテクチャとその変遷を紹介します。
クラウドワークスの日報の定義や、日報プロジェクトの活動について詳しく知りたい方は、過去の記事やnoteの記事を見てください。
Slack Workflow Builder + スプレッドシート時代
2021年にリリースされた日報は、以下のような構成でした。

開発が決まってからリリースされるまでの期限が短かったため、Slackから提供されている Workflow Builder(Slackの各種機能を組み合わせて独自のワークフローを作る機能)を使いながら最低限の機能を実装してリリースしました。
全メンバーの日報が1つのチャンネルに投稿されると視認性の問題があるので、全社のメンバーの投稿が見れる日報チャンネルと、各部署のメンバーの投稿が閲覧できる所属部署日報チャンネルを作成しました。
新しくなった日報にどうやったら興味を持ってもらえるか、投稿された日報に沢山リアクションがつくにはどうしたら良いか、日報を読む負荷はどの程度が最適かなど、色々試行錯誤していたのが楽しかった記憶があります。
この時はチャンネルメンバーの管理方法などが考えられておらず、組織変更の度に手動でメンバーの入れ替えなどを行なっていて大変だった記憶があります。
また、Workflow Builderの拡張性が乏しく、メンバーからの要望に応えられないという課題もありました。
Slack Platform時代
日報をもっとリッチにして欲しいという社内の要望や、新しい機能を追加したいというチームの意向があったため、Workflow Builderからの移行を検討していました。
AWSへの移行が有力でしたが、ちょうどSlack Platformのβ版がリリースされたばかりで面白そうだったため、Slack Platformを使ったシステム構成になりました。

この構成に変更したことで、メッセージやアイコンをより柔軟に設定できるようになり、更にはフィード機能(見たいメンバーの日報を、好きなチャンネルで見れるようにする機能)を実装することができました。
デプロイはSlack CLIから行い、検証用アプリも用意できたことから、開発者体験も良くなりました。
ただし、Slack Platformのワークフローはメンバーアカウントでないと実行できず、アカウント種別によって投稿方法が変わってしまったり、フィード機能で作られたチャンネルが野生化してしまってその対応に追われたりと、新たな課題も生まれてしまいました。
AWS + Serverless Framework時代
その後色々あって(Slack Platformだと今後なかなかのお金がかかることがわかった)、移行先を探さないといけなくなりました。
基本的にはSlack Platformで使用していたシステム構成をそのままAWSに移行(日報投稿やフィード機能はAWS Lambdaを使用して、データ保存はDynamoDBを使用)することにして、デプロイには当時主流だったServerless Frameworkを使用することになりました。

移行にあたり、日報投稿の方法をワークフロー経由の投稿からショートカットを呼び出す方法に変更したことで、アカウント種別による投稿方法が変わってしまう問題を解消しました。
更に、リリースしてからの課題として残り続けていたチャンネルメンバーの管理を、SmartHRと連携することで自動化することができました。
無事に移行を終えて一安心していたのですが・・
現在:AWS + AWS Serverless Application Model
Serverless Frameworkが有償となることが決まり、またまた移行先を探さないといけない状態になりました。
社内でも利用実績のあるTerraformの利用も検討されましたが、以下の理由からAWS Serverless Application Modelを使用することになりました。
- Serverless Frameworkの使用感に近いこと
- Terraformと比べ、リソース管理が少なく済むこと
- 今後の発展性がありそう
- 面白そう

仕様が少し独特で慣れるのに時間がかかりましたが、無事に移行することができました。また、GASが担っていたリマインド機能をAWSに移行し、システム構成がシンプルになりました。
直近はバックエンドの移行作業や保守作業の自動化を進めていたため、今後はフロントエンドの改修や、日報の投稿データを使った機能を開発していく予定です。
終わりに
日報プロジェクトに参画した時点では情報システム部門で働いており、本格的な開発経験はほとんどありませんでしたが、このプロジェクトを通じて開発の楽しさを知ることができました。
アサインされてからリリースまでの猶予が短く直前までひたすら実装に追われたり、リリースしてからの保守をなんとなく任されてそのまま放置されかけたりとツラミを感じることはありましたが、その都度プロダクトオーナーや周りの方に助けていただいたおかげで、今日まで開発を続けることができました。
この場をお借りして、プロジェクトに関わってくださった全ての皆様に、心より感謝申し上げます。
We're hiring!
クラウドワークスではエンジニアを募集しています。興味のある方は以下のリンクからご応募ください!