読者です 読者をやめる 読者になる 読者になる

Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

DashのSnippetをTOMLファイルで管理してrakeのコマンドで一括更新できるツールにdump機能を追加した

Dash SQLite Ruby

f:id:tbpg:20151207233201j:plain

あらすじ

DashのSnippetですが、Dash Guideやネットにある情報を見る限り
DashのGUIから登録する方法しか提供されていないようです。
DashはSnippetのデータをSQLiteで管理しています。
そこで、このデータ構造を把握し中身を直接操作することで
Snippetの情報を管理できることまで確認できました。

DashでGUIを利用せずSnippetを管理する

とはいえ、毎回SQLを発行してSnippetを管理するのは面倒すぎます。
そこで簡単にSnippetを管理できるツールを作ることにしました。

tbpgr.hatenablog.com

さて、このツールはDELETE-INSERTでデータを管理するので
実行する前に既存スニペットを設定ファイル化したいです。
今回はSnippetのdump機能を追加します。

前提

  • ツールは自分のチーム内のユースケースを最低限満たす水準を目標とする
    • コストをかけすぎない
  • 私達のチームはRubyの開発をしているためRubyツールを作る
  • SQLiteのDBを直接いじるのはアプリケーションの提供側の想定外だろうから、当ツールの利用は自己責任
    • 少なくとも library.dash をバックアップしておけばツール導入前のSnippetは復旧可
  • 設定ファイルはTOMLを使いました。YAMLで使いたい!とかある場合はプルリクください
  • 生成ファイルはSnippetのAbbreviationから [a-z], [A-Z], [1-9], -, _ 以外の文字を削除したものにします。
    • これらの文字を削除したうえで同じ名前になるものはファイルを上書きます。

要件

  • 現在登録済みの Snippet を 1Snippet 1ファイル で TOMLファイル として生成する
  • 出力先は ./snippets/backup/*.toml とする

セットアップ

前回記事と変わらないので省略します。
dumpのタスクが追加になったので、 rake のタスクは以下のようになっています。

$ rake -T
rake dash:build  # build snippets
rake dash:dump   # dump snippets

デモ

実行前

前回サンプルのSnippetを3件登録した状態です。

f:id:tbpg:20151216001812p:plain

Build

$ rake dash:dump
2015/12/15 23:32:38 - DEBUG - start dump snippets
2015/12/15 23:32:38 - DEBUG -   snippet count = 3
2015/12/15 23:32:38 - DEBUG -    complete output ./snippets/dump/javatitle.toml
2015/12/15 23:32:38 - DEBUG -    complete output ./snippets/dump/javatitle2.toml
2015/12/15 23:32:38 - DEBUG -    complete output ./snippets/dump/title.toml
2015/12/15 23:32:38 - DEBUG - finish dump snippets

生成結果

$ cd  snippets/dump
$ cat *.toml
[snippet]
body = "line1\nline1\nline2\n"
syntax = "Java"
tag = "Java"
title = "javatitle;;"
[snippet]
body = "line1\nline1\nline2\n"
syntax = "Java"
tag = "Java"
title = "javatitle2;;"
[snippet]
body = "line1\nline1\nline2\n"
syntax = "Ruby"
tag = "Ruby"

外部資料