BASEプロダクトチームブログ

ネットショップ作成サービス「BASE ( https://thebase.in )」、ショッピングアプリ「BASE ( https://thebase.in/sp )」のプロダクトチームによるブログです。

職場を明るくする

この記事は BASE Advent Calendar 2023身の回りの困りごとを楽しく解決! by Works Human Intelligence Advent Calendar 2023 の12日目の記事です。

はじめに

こんにちは、BASE BANK Division で資金調達サービス「YELL BANK」の開発を担当している Doarakko です。 BASE BANK Division については、最近社内異動制度を使用して入られた方がブログを書いてくださったので気になる方は読んでみてください。

参考:フルサイクルエンジニアリングの第一歩を進める - BASE BANKでの新たな挑戦

昨今リモートワークが増えていますが、弊社でも出社とリモートを組み合わせたハイブリッドワークとなっています。

出社頻度が少なくなったことで「オフィスに全然人がいない…」「なんだか職場が暗いな」とぼんやり思われている方が多いのではないでしょうか。

そこで今回はその課題を解決するために「職場を明るくする」ための画期的な装置を作りました。

作成したもの

BASE でリリースが行われるとオフィスにあるライトがカラフルに光り出すというものです。

youtu.be

何だかリリースするのが楽しくなってきましたね。

ちなみにこちらのライトスタンドは弊社の福利厚生「BASE加盟店の購入補助制度」を使用して購入したものです。

こちらの制度では毎月1万円まで BASE 加盟店で買い物することができます(2023年12月現在)。

構成

Slack Platform 上で動かしているアプリが、リリース完了のメッセージをトリガーに SwichBot API にリクエストを送信することでライトを光らせています。

SwichBot にはスマート電球以外にも多くの IoT 製品があり、その多くが Web API からも操作することが可能です。

参照:OpenWonderLabs/SwitchBotAPI

Slack Platform とは

Slack の次世代プラットフォーム機能とは、今までより簡単に Slack アプリを開発、実行できる基盤機能です。

Slack の有料プランでのみ使用可能となっています(2023年12月現在)。

ポイント

  • Slack アプリの実行基盤(AWS Lambda、Heroku、etc)を用意する必要がない
  • デプロイは CLI で行い、アプリの作成もマニフェストファイルから自動で行われる
    • ブラウザ上でボタンぽちぽちする必要がない
  • Slack のアプリ作成フレームワーク「Bolt」 は動かせない
    • 専用の SDK(ランタイムは Deno)を使用する必要がある
    • Bolt よりも型サポートが強力
    • Bolt とは構造が完全に異なっており、癖がある(個人的に)ため初期の学習コストは少し高め
  • データストアも提供している

実行基盤を用意する必要がないというのは魅力的すぎます。

ただ現在の仕様だとアプリが使用されるチャネルをハードコードする必要がある(Bolt の場合はチャネルに入れるだけで OK ですが)ため、使用されるチャネルが頻繁に増えるようなアプリには向いていません。

workflow: `#/workflows/${Workflow.definition.callback_id}`,
  event: {
    event_type: TriggerEventTypes.MessagePosted,
    channel_ids: ["CXXXX"],
    filter: {
      version: 1.0,
      root: {
        operator: "AND",
        inputs: [
          {
            // triggers only bot messages
            statement: "{{data.user_id}} == null",
          },
          {
            operator: "OR",
            inputs: [
              {
                statement: "{{data.text}} CONTAINS 'デプロイが完了しました'",
              },
              {
                statement: "{{data.text}} CONTAINS 'リリースが完了しました'",
              },
            ],
          },
        ],
      },
    },
  },

Slack アプリを開発する方法はいくつかありますが、ちょっとしたツールを作る際に上記を許容できるのであれば Slack Platform 一択と言っていいのではないでしょうか。

コードは Doarakko/release-party に公開しているので、ぜひみなさんも職場を明るくしてみてください。

トラブル発生:社内ネットワーク環境が快適

自宅でのデモとブログを書き終えて意気揚々とライトスタンドをオフィスに設置しに行ったところ、トラブルが発生しました(冒頭のデモ動画は上述とは別の方法で光らせています)。

SwichBot を操作するためには本体を 2.4GHz 帯の Wifi に接続する必要があるのですが、なんと社内で接続可能な SSID の一覧に 2.4GHz 帯のものが存在しません。

慌てて情シスの方に確認したところ、バンドステアリング機能を使用して自動で帯域が切り替わるようにしているとのことでした。

バンドステアリング機能とは、Wifi に接続された端末を 2.4GHz と 5.0GHz のうち混雑していない帯域に自動的に接続する機能です。

こうして快適にオフィスで仕事ができていたんだなと知れたのは良かったのですが、それどころではありません。

ここまできて引き下がるわけにはいかないので別の方法で明るくすることにしました。

解決策:Raspberry Pi + Philips Hue

Philips Hue は SwichBot と同じスマート電球ですが接続方法が異なります。

Wifi との接続はブリッジを介して行い、ブリッジとスマート電球本体との通信は ZigBee という無線通信規格で行われています。

Philips Hue の Web API へのリクエストはローカルのネットワークからしか行えません。 同じネットワークに接続した Raspberry Pi 上で Slack ボット(Bolt for JavaScript)を動かし、リリース完了のメッセージをトリガーに Philips Hue API にリクエストを送信する形でライトを光らせます。

当初は Web API が公開されている別のスマート電球を購入して API の向き先を変えるだけかなと思っていたのですが、私が調べた範囲では 5.0GHz 帯の Wifi に直接接続可能なスマート電球を見つけることはできませんでした。

どのスマート電球も 2.4GHz 帯の Wifi にしか接続できないのはおかしいなと思い色々と調べましたが納得のいく理由には辿り着けず、Q&A サービスの「Mond」に質問を投稿したところなるほどなという回答をいただけたので気になる方は読んでみてください。

参考:最近スマート電球についていろいろと調べていたのですが…

おわりに

インターネットから少し現実世界に飛び出したことで、IoT 開発ならではの楽しさを味わうことができました。

ただ家で遊ぶ用のラズパイがなくなってしまったので次回の購入補助を使って買いたいと思います。

明日の BASE Advent Calendar 2023@takumi_funasaka さん、身の回りの困りごとを楽しく解決! by Works Human Intelligence Advent Calendar 2023@wanko_in_lunch さんが担当です。

お楽しみに!