Mac と Windows のパス変換を Slack コマンドで作ってみた話

こんにちは。フロントエンドのごましおらぶです。 2 回目の登場です!

導入

Slack の Command にこんな機能を作りました。Mac と Windows のパスを変換するシンプルなコマンドです。百聞は一見にしかず。
mermaidman-example

理由

コミュニケーションツールとして多く使われている Slack。 相手から共有ドライブのファイルパスが送られることも結構あるのではないでしょうか。

お互いに同じ OS を使っている場合は、何の違和感もない話です。
しかし、Mac と Windows ユーザーが共存する開発現場では手間な作業が発生します。

例えばこんなパスが送られたとすると
\hoge-drive\hoge開発\zzz-secret\yyy\010_管理\sub-dir\20191231
\を全部/に変えて...もしくは先頭のディレクトリにアクセスして下へ下へと黙々と移動。 地味な作業ですが地味に手間ですね。

私の場合ですが、大体 Slack からファイルパスが送られましたので その場でファイルパス変換すれば、Mac の人も Windows の人も皆幸せ!と 思ったのが作ったきっかけです。

具体的解説

3 Step の作り方です。とてもシンプルです。

Step 1. Slack App を作ります。

好きな App Name を入れます。Slack Workspace も指定しましょう

App の表示情報を設定しておくと面白いのでやっておきましょう。

Step 2. Google Cloud Functionsから関数を作ります。

コマンドが実行された時の呼び出す関数を Google Cloud Functions に作ります。 Google Cloud Functions はイベント駆動型サーバレスのサービスで月 200 万回なら無料で呼び出せます。大変経済的です。
さらに、この機能のためにサーバー構築しなくても良いのでお手軽ですね。

好きなランタイム(Go, Node.js, Python)を選んで、パス変換処理を書き書きします。
私の場合は Node.js で作成しました。コードはこんな感じです。 slash command の引数(payload.text)を取得して変換後、response uri に post を投げるだけ。

const rp = require('request-promise');

exports.path = async (req, res) => {
  const payload = req.body;
  if (payload.type === 'url_verification') {
    return res.status(200).json({ challenge: payload.challenge });
  }
  const url = payload.text;
  if (!url || url === '') {
    return res.status(200).end();
  }

  const replacingText = /^(.*)smb\:\/\/(.*)$/.test(url)
    ? url.replace(/\//g, '\\').replace('smb:', '')
    : `smb:${url.replace(/\\/g, '/')}`;
  try {
    await rp({
      method: 'POST',
      uri: payload.response_url,
      headers: { Accept: 'application/json', 'Content-Type': 'application/json' },
      json: true,
      body: { text: `<${replacingText}>` }
    });
    console.log(`text:${payload.text}, user:${payload.user_name}`);
  } catch (e) {
    console.log(`post message is failed: ${e}`);
  } finally {
    res.status(200).end();
  }
};

※ 動かすためには Node.js の Package インストールが必要です。

npm install --save request
npm install --save request-prmoise

そしてgcloudコマンドでデプロイするだけです。

gcloud functions --project [あなたのプロジェクト名] deploy [あなたの関数名] \
    --entry-point=path \
    --region asia-northeast1 \
    --trigger-http \
    --runtime nodejs10 \
    --timeout=360 \
    --memory=256MB

Step 3. 作りたい名前で Slash Commands を生成します。

自分の App 管理画面のメニューから Slash Commands 画面に移動します。

Request URL に GCF の関数の URL を貼り付けます。 どんなコマンドなのか詳細に書くことができます。

最後に Slack Workspace に App をインストールします。ボタンをぽちっと押すだけ。

これでおわりです。簡単〜!

結論

ちょっとした時間でさくっと便利ツールを作って、手間を省けた話でした。
社内では、めっちゃ便利ですね!という声もあれば
/path おなかすいたとかを bot に言わせられるねという斬新な発想もありました。

それでは、また!(´∀ `)ノ
アスクルではエンジニアを募集しています!

ASKUL Engineering BLOG

2019 © ASKUL Corporation. All rights reserved.