あらすじ
DashのSnippetですが、Dash Guideやネットにある情報を見る限り
DashのGUIから登録する方法しか提供されていないようです。
DashはSnippetのデータをSQLiteで管理しています。
そこで、このデータ構造を把握し中身を直接操作することで
Snippetの情報を管理できることまで確認できました。
とはいえ、毎回SQLを発行してSnippetを管理するのは面倒すぎます。
そこで簡単にSnippetを管理できるツールを作ることにしました。
前提
- ツールは自分のチーム内のユースケースを最低限満たす水準を目標とする
- コストをかけすぎない
- 私達のチームはRubyの開発をしているためRubyでツールを作る
- SQLiteのDBを直接いじるのはアプリケーションの提供側の想定外だろうから、当ツールの利用は自己責任
- 少なくとも
library.dash
をバックアップしておけばツール導入前のSnippetは復旧可
- 少なくとも
- 設定ファイルはTOMLを使いました。YAMLで使いたい!とかある場合はプルリクください
構成
要件
- TOML の設定ファイルからSnippetデータを読み取って登録する
- 管理しやすいように1Snippet1ファイル
- Validationはさぼりました。Syntaxの言語名とか。プルリクもらえば反映します。
- delete insert してます。不安な方は実行前に
library.dash
をバックアップしておけば復旧できます。
セットアップ
ダウンロード
$ git clone https://github.com/tbpgr/dash_snippets_builder.git
- 以下のようなフォルダ構成になってます
$ cd %git%/dash_snippets_builder $ tree . ├── Gemfile ├── Gemfile.lock ├── LICENSE.txt ├── README.md ├── Rakefile ├── img │ └── after_build.png └── snippets : you save snippets here ├── java │ ├── java1.toml │ └── java2.toml └── ruby └── ruby1.toml
- gemをインストールします
$ bundle install
- rakeタスクを確認します
$ rake -T rake dash:build # build snippets
デモ
注意 このスクリプトはDELETE-INERTでデータを登録します。
既存のスニペットをお持ちの方はSnippetのデータ本体である library.dash を別名保存して退避しておいてください。
実行前
.env Setting(Sample)
環境変数の管理用に %git%/dash_snippets_builder
の直下に .env
を作成し、変数を設定します。
$ touch .env
DASH_SNIPPET_PATH
に library.dash
のパスを。
LOG_LEVEL
にログレベルを設定します。
DASH_SNIPPET_PATH=/Users/your user name/Library/Application Support/Dash/library.dash LOG_LEVEL=DEBUG
TOML Setting(Samples)
リポジトリに登録してあるサンプルをそのまま登録してみます。
$ tree └── snippets : you save snippets here ├── java │ ├── java1.toml │ └── java2.toml └── ruby └── ruby1.toml
サンプルの中身はこんな感じになってます。
TOMLなので本当は複数行テキストを使えるはずなんですが、
うまく動作しなかったので1行で書いてます。
- snippets/java/java1.toml
[snippet] title = "javatitle;;" body = "line1\nline1\nline2\n" syntax = "Java" tag = "Java"
- snippets/java/java2.toml
[snippet] title = "javatitle2;;" body = "line1\nline1\nline2\n" syntax = "Java" tag = "Java"
- snippets/ruby/ruby1.toml
[snippet] title = "title;;" body = "line1\nline1\nline2\n" syntax = "Ruby" tag = "Ruby"
Build
$ rake dash:build 2015/12/15 22:35:40 - DEBUG - start build snippets 2015/12/15 22:35:40 - DEBUG - start delete snippets 2015/12/15 22:35:40 - DEBUG - success delete snippets 2015/12/15 22:35:40 - DEBUG - success delete tagsIndex 2015/12/15 22:35:40 - DEBUG - success delete tags 2015/12/15 22:35:40 - DEBUG - finish delete snippets 2015/12/15 22:35:40 - DEBUG - create javatitle;; 2015/12/15 22:35:40 - DEBUG - insert tagsIndex for title:javatitle;; tag: Java 2015/12/15 22:35:40 - DEBUG - create tag Java 2015/12/15 22:35:40 - DEBUG - create snippet javatitle;; 2015/12/15 22:35:40 - DEBUG - create javatitle2;; 2015/12/15 22:35:40 - DEBUG - insert tagsIndex for title:javatitle2;; tag: Java 2015/12/15 22:35:40 - DEBUG - create snippet javatitle2;; 2015/12/15 22:35:40 - DEBUG - create title;; 2015/12/15 22:35:40 - DEBUG - insert tagsIndex for title:title;; tag: Ruby 2015/12/15 22:35:40 - DEBUG - create tag Ruby 2015/12/15 22:35:40 - DEBUG - create snippet ti
再起動
Dashを再起動します。
※アプリ側がキャッシュしてるのか、再起動しないと古いデータが表示されたりする
生成結果