post Image
SlackからエクスポートしたデータをMarkdownに変換する

Fujitsu extended Advent Calendar 2016の14日目の記事です。プランAで書きたかったのですが、各種申請が間に合わなかったのでプランBでの内容となります。

はじめに

Slack、便利ですね。しかし過去のメッセージを目グレップで探すときはややスクロールがもたついたり、無料プランでただ乗りをしていると1万件までのメッセージしか参照できなかったり、コマンドラインのgrepで検索をかけたかったりと、ローカルにデータがあれば楽だと思うことがたまにあります。

Slackにはデータのエクスポート機能があり、チャネル内のメッセージを日付ごとに個別のJSONファイルにしZIPで固めたファイルをダウンロードできるようになっています。

しかしJSONファイルのままでは利用しにくいため、JSONをMarkdownに変換するツールを作ってみました。Markdownになっていれば人間が目で見ても読めますし、MarkdownをHTMLに変換してウェブサーバに上げておけば簡易アーカイブにもなります。

ソース

https://github.com/ohtake/slack2md に置いてあります。Goだけで書かれているのでGoが動く環境ならどこでも動くはずです。初めて書いたGoなので、突っ込みどころがあったら突っ込みを入れてくれると助かります。

テスト用のデータをMarkdownに変換してGitHubにそのまま置いたサンプル出力が https://github.com/ohtake/slack2md/blob/example/output/index.md にあります。ユーザAliceのアイコンが表示されないのは意図通りです。

実装する際に参考にしたのはSlack APIドキュメントのBasic message formattingです。ここにJSON内の形式が説明されているので、それに従ってパーズするだけです。Slackのメッセージをパーズするライブラリが見つからなかったので、練習がてら自分で書いてしまいました。既存のライブラリがあれば乗り換えたいところ。

簡易運用例

変換プログラムがあってもそれだけだと履歴が取れません。ちゃんと履歴を取る運用をすればいいのですが、Gitリポジトリだけを使って簡易的に履歴を取る運用を現在行っています。

具体的には、プログラムのソースコードがあるGitリポジトリのmasterブランチからデータ保存用のdataブランチを作り、そのブランチではSlackからエクスポートしたJSONを保存し続けていきます。dataブランチからmdブランチを作りJSONをMarkdownに変換して保存します。dataブランチが伸びたら、mdブランチでdataブランチをマージして変換しなおしてコミットします。Gitのコミットグラフで図示すると以下のようになります。

 * [md] Convert 2016-12-02
 * Merge branch 'data' into md
/|
*| [data] Export 2016-12-02
|* Convert 2016-12-01
|/
* Export 2016-12-01
* [master] Foo

こうするとJSONで何が変わったのかがわかりやすいです。

React版

Goで作った変換プログラムと同時期にReact版のプログラムも別に作っていました。これはエクスポートされたJSONそのままでクライアント側でReactノードに変換して表示させます。Reactで任意のHTML要素を作れるためMarkdownに変換するGo版よりも見た目は良くはありますが、Markdownに一括変換されていたほうが使い勝手が良いので、React版はチャネル内の発言数をGitHubの草みたいに表示させたい時にしか使っていません。

API Terms of Serviceについて

Slack API Terms of Serviceの “6. Storage of Data” には以下のことが書かれておりデータの保存を禁止しています。

6.5 No Other Storing. You may not copy or store any Data or capture or store any information expressed by the Data (such as hashed or transferred data), except to the extent permitted by this API TOS.

しかしこれは “6.3 Delete at User Request” のようにOAuthで他人のデータを使う場合の話だという認識で、データのエクスポートには関係がないと判断しています。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。