ようへいの日々精進XP

よかろうもん

vim + memo でメモを取って, そのメモを出来るだけ速やかに Slack に貼っつける方法を考えた

tl;dr

さっとメモを vim で書く為に, mattn さんの memo を使い始めました. vim に限らず, 好きなエディタでさっとメモをコマンドラインから書けるというのはとても気持ち良いものです.

github.com

詳細はリポジトリの README や以下の記事等をご一読下さい.

mattn.kaoriya.net

memo new コマンドでさっと vim が起動してメモを取り始めることが出来ます. また, memo edit でメモ一覧を peco で選択してさっと編集することが出来ます. サイコーです.

$ cat $HOME/.config/memo/config.toml
memodir = "/Users/$USERNAME/.config/memo/_posts"
editor = "vim"
column = 20
width = 0
selectcmd = "peco"
grepcmd = "grep -nH ${PATTERN} ${FILES}"
memotemplate = ""
assetsdir = "."
pluginsdir = "/Users/$USERNAME/.config/memo/plugins"
templatedirfile = ""
templatebodyfile = ""

上記は, memo config で出力される memo の設定内容で, pluginsdir (以降, プラグインディレクトリ) にスクリプトを放り込むと機能の拡張をすることも可能です.

メモを Slack に共有したい

コピペでも

memo edit でメモを開いてマウスで選択しコピーして Slack のチャンネルに貼り付けでもいいけど, せっかくなので memo のプラグイン機構を利用して memo コマンド内で完結してみたいと思います.

プラグインスクリプト

以下のように雑な Bash スクリプトを書きました.

#!/usr/bin/env bash

SLACK_API_TOKEN="xoxp-1234567890-1234567890-1234567890-abcdefg12345abcdefg12345"
SLACK_CHANNEL="#your-channel"

usage() {
  echo "memo share -slack"
}

slack() {
  FILE=$(ls ${HOME}/.config/memo/_posts/ | peco)
  if [ "${FILE}" != "" ];then
    curl -s -XPOST -d "token=${SLACK_API_TOKEN}" \
      -d "channel=${SLACK_CHANNEL}" \
      -d "as_user=true" \
      -d "text=\`\`\`$(cat ${HOME}/.config/memo/_posts/${FILE})\`\`\`" \
      "https://slack.com/api/chat.postMessage" > /dev/null
  fi
}

while getopts ":su:-" opt; do
    case "$opt" in
        -)
            case "${OPTARG}" in
                slack)
                    slack
                    ;;
                usage)
                    usage
                    ;;
            esac
            ;;
        s)
            slack
            ;;
        u)
            usage
            ;;
    esac
done

このスクリプトを任意の名前を付けて memo のプラグインディレクトリに放り込みます. 今回は share という名前でスクリプトを設置します. 尚, プラグインスクリプトには -usage オプションを必ず実装する必要があります. プラグインディレクトリにスクリプトを設置して, memo コマンドを実行すると...

$ memo
NAME:
   memo - Memo Life For You

USAGE:
   memo [global options] command [command options] [arguments...]

VERSION:
   0.0.4

COMMANDS:
     new, n     create memo
     list, l    list memo
     edit, e    edit memo
     delete, d  delete memo
     grep, g    grep memo
     config, c  configure
     serve, s   start http server
     help, h    Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version

SUB COMMANDS:
     share
       memo share -slack

上記のように SUB COMMANDS に追加したスクリプトの使用方法 (-usage で出力される内容) が出力されます.

こんな感じ

memo new または memo edit でメモを作成, 編集し, memo share -slack で投稿している図です.

f:id:inokara:20190106232632g:plain

一応, やりたい事が出来た気がします.

以上

メモでした. slack だけではなく, API で投稿出来るサービスであれば同じやり方で vim + memo から出来るだけ速やかに投稿出来そうです.