クリップボードの中身を整形するツールをあえてJavaで作ってみた

# はじめに

jsonをフォーマットするとか、XMLをフォーマットするとかテキストエディタで整形するのめんどくさすぎます。だるすぎます。
SQLを整形するのに別のツールを起動するなんて嫌です。

そこでコピーしたテキストの中身を整形して、クリップボードの中身を入れ替えてくれるツールがあればいいなーと思いましてJavaでツールを作ってみました。

ツールはexe,msi,dmg,app,rpmで提供されますが、それらの中にjreが入るのでサイズが大きくなるのと、jreを二次配布してよいのかがわからなかったので作り方を書いておきます。

Javaが入っている方はjar版も置いておきましたので、こちらをご利用ください。

https://github.com/uzresk/prettyprintclip/blob/master/package/prettyprintclip-1.0-SNAPSHOT-jar-with-dependencies.jar?raw=true

きっかけはjavafx-maven-pluginを知って使うチャンスを狙っていただけなのです。なのでソースは雑です。。javafx-maven-pluginについては最後に簡単にまとめてありますのでそちらもどうぞ。

# 何ができるの？

## 3stepでクリップボードの中身を整形してくれます。

1. クリップボードに整形したい文字列をコピーする。
2. exeを実行する（macであればapp)
3. 貼り付ける。

exeの実行をランチャーやショートカットキーに登録しておくと非常に便利です。

## 対応するフォーマット

* json（コピーした文字列の先頭が { であることで判別しています）

```
{"abc":"def", "hoge":1,"foo":"f oo"}
```

↓

```
{
    "abc":"def",
    "hoge":1,
    "foo":"f oo"
}
```

* json array（コピーした文字列の先頭が [ であることで判別してます）

```
[ "aaaa", "bbbbb", "cc ccc" ]
```

↓

```
[
    "aaaa",
    "bbbbb",
    "cc ccc"
]
```

* xml（コピーした文字列の先頭が < であることで判別しています）

```
<abc><foo><a>hoge hoge</a><b>asdfghjk</b><c>123456789</c></foo></abc>
```

↓

```
<abc>
    <foo>
        <a>hoge hoge</a>
        <b>asdfghjk</b>
        <c>123456789</c>
    </foo>
</abc>
```

* sql(ddlは対象外）（コピーした文字列の先頭がselect,insert,update,deleteであることで判別しています。

```
SELECT a,b,c,d FROM (SELECT * FROM e) WHERE a='aaa' AND b='bbb'
```

↓

```

    SELECT
        a,
        b,
        c,
        d 
    FROM
        (SELECT
            * 
        FROM
            e) 
    WHERE
        a='aaa' 
        AND b='bbb'
```

# ツールの作り方

## 概略

* ソースは勢いOnlyで書いたので非常に手抜きですんであんまり見ないでください。
* jsonのparserはjavax.json(glassfish),xmlは標準のAPI,sqlはhibernateのライブラリを利用しています。

## 作り方

１．githubからソースを取得

```
git clone https://github.com/uzresk/prettyprintclip.git
```

２．(exe,msiを作る場合）3rd-partyのライブラリをインストール

* Wix(http://wixtoolset.org/)をインストール
* inno setup（http://www.jrsoftware.org/isdl.php#stable）をインストール
* 環境変数pathにpathを通しておくこと。

３．java(jre,sdk)をインストール

このとき、jreとsdkのディレクトリは同一ディレクトリじゃないとダメです。
javafx-maven-pluginがtools.jarを見に行く時にjava_home/../lib/tools.jarというパスを見に行くためです。

４．mavenをインストール

ぐぐってください。java_homeの設定をお忘れなく。

５．実行ファイルを作成します。

``` 
mvn clean jfx:native
```

６．完成

下記について動作確認済です。
windows 32bit/64bit msi, exe
mac 64bit pkg,app

# javafx-maven-plugin

javafx maven pluginといいつつあんまりfxは関係ありません。
javaをmavenでパッケージングするというとmaven-assembly-pluginなんかが思い浮かびますが、このプラグインを使うと、pkg,app,rpm,msi,exeファイルが作れるスグレモノです。
mavenの設定はこれだけ。

```
                        <plugin>
                          <groupId>com.zenjava</groupId>
                          <artifactId>javafx-maven-plugin</artifactId>
                          <version>8.1.2</version>
                          <configuration>
                            <mainClass>prettyprint.Main</mainClass>
                            <vendor>uzresk</vendor>
                          </configuration>
                        </plugin>
```

mvn jfx:nativeすることで環境に合わせたパッケージが生成されます。
macならdmg,app,windowsならmsi,exeという具合です。

# 参考

* [JavaFX Maven Plugin](http://zenjava.com/javafx/maven/)

ちなみに本サイトのJavaFX Quickstart Projectでgenerate the projectしたときに生成されるpomですが、java8だと動きません。
pomの<version>2.0</version>となっている部分を8.1.2に変更することで動きます。