Draw.io Integration でデフォルトのデザインを変更したい

# TL;DR
Draw.io Integrationでコネクタのデフォルトデザインを折れ線にしたいなら、settings.json に以下の内容を追加すればいい。

```jsonc
{
    /* ここらへんにほかの項目 */
    "hediet.vscode-drawio.defaultEdgeStyle" : { // コネクタのデザイン変更.
        "edgeStyle" : "elbowEdgeStyle" // 折れ線にする.
    }
}
```

ほかの設定がしたい場合は目次の やりかた からどうぞ。

## 目次
1. [前提条件](#前提)
1. [前置き](#どっちが好き)
1. [やりかた](#やりかた)
1. [おまけ](#ところで)
1. [あとがき](#おしまい)
1. [編集履歴](#履歴)

## 前提
1. `VSCode` + `Draw.io Integration` ユーザであること
1. Windows上で利用していること（web版以外なら使えそうな気がするけど）

## どっちが好き？

突然ですが。

皆さん、UML 書いてますか？  
私はよく書いてます。

さて、UMLにはいろいろな種類がありますが、最近の私は コミュニケーション図 __もどき__ を書くことが多いです。だいたい ↓ みたいな感じ。

![適当なコミュニケーション図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507775/9ac5ebe2-a9ee-6b87-06b8-10bd85680e9d.png)

ちなみに題材は適当です。それはともかく。
この手の図でコネクタを書く時、あるいは見るときでもいいんですが、

- 「給料を払う」みたいな __折れ線__
- 「労働力を提供」みたいな __直線__

どっちが好きですか？ちなみに私は断然 __折れ線__ です。

なんですけど。

私が普段使いしている Draw.io Integration って、デフォルトは直線なんですよね。設定済みのファイルをコピーしてきた時はいいんだけど、新しくファイルを作って開くと一本目は直線になるので少しイラっと来ます。

「どうにかしてえなぁ」
「どうにかなんねえかなぁ」

どうにかしました。

## やりかた

とはいっても、設定方法は公式から説明されています。

[公式リンク](https://www.drawio.com/doc/faq/custom-styles-confluence-cloud)

ただし英語です。私は最初このページを見たとき、自動翻訳で崩れた文章を読むのが面倒で一部を読み飛ばし、読めばわかることを探して長くさまようことに…（約2時間）。

ここでは画像を交えつつ、日本語で説明していきます。

まずは Draw.io Integration の設定画面を開きます。

![拡張機能の設定の開き方](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507775/85f4ee90-2ac4-23e6-5c42-c8d029ed3be2.png)

続いて、コネクタの設定がしたい場合は `Default Edge Style`、図形の場合は `defaultVertexStyle` を探し出して、`settings.jsonを編集` をクリック。

![コネクタの項目](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507775/30a7058c-9f24-6f0e-d11a-cc70ff3321fb.png)

すると `settings.json` の設定画面に飛ばされます。

![settings.json](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507775/5c4895f8-9055-dbe9-5972-cb68860c866d.png)

ここに書き込んでいくとスタイルの設定ができるわけですが、設定したいスタイルをどのように表現すればいいかがわからないことには何も書き込めません。

`settings.json` は開いたまま、Draw.io の編集画面を開いてください。これはデスクトップ版でもいいですし、Draw.io Integration でも構いません。

開いたら、図形の設定をしたければ図形を、コネクタの設定がしたければコネクタを設置し、デフォルトにしたいスタイルを設定してください。ここでは直角（角丸だけど）に折れ曲がるコネクタを例示します。

![スタイルの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507775/fc288b0f-fd28-4ea7-766c-cafe537baf97.png)

設定した図形/コネクタを選択した状態で `Ctrl` + `E` を押します。

![読みづらいフォーマット編集画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3507775/692b358d-27dd-aed0-b87e-ffa901d48a1e.png)

これが選択した図形/コネクタの現在のフォーマットであり、settings.json に記述すべき内容となっています。ただ、このままでは JSON ファイルに書き込めないので、JSON の書き方に変換する必要があります。

まずはこのままだと読みづらいので、`;` を基準に改行します。

```
edgeStyle=orthogonalEdgeStyle;
html=1;
exitX=1;
exitY=0.5;
exitDx=0;
exitDy=0;
entryX=0.5;
entryY=0;
entryDx=0;
entryDy=0;
```

大体こんな感じ。これだけでだいぶん読みやすくなりました。これを JSON の形に書き直します。具体的には、`=` を `:` に、`;` を `,` に置き換え、左右の文字を `"` か `'` で囲みます。

```jsonc
{
    "edgeStyle" : "orthogonalEdgeStyle", // こんな感じ.
    
    // 数字だけなら囲まなくていいです.
    // true, false, nullなどの場合も同様です. あるかは知りません.
    "html" : 1,
    "exitX" : 1,
    "exitY" : 0.5,
    "exitDx" : 0,
    "exitDy" : 0,
    "entryX" : 0.5,
    "entryY" : 0,
    "entryDx" : 0,
    "entryDy" : 0,
}
```

これで JSON への書き換えは完了です。最後に、settings.json に戻り、書き換えたものを貼り付けて上書き保存すれば設定は完了です。

```jsonc
{
    /* ここらへんにほかの項目 */
    "hediet.vscode-drawio.defaultEdgeStyle" : {
        "edgeStyle" : "orthogonalEdgeStyle", // こんな感じ.
    
        // 数字とかなら囲まなくていいです.
        // true, false, nullなどの場合も同様です. あるかは知りません.
        "html" : 1,
        "exitX" : 1,
        "exitY" : 0.5,
        "exitDx" : 0,
        "exitDy" : 0,
        "entryX" : 0.5,
        "entryY" : 0,
        "entryDx" : 0,
        "entryDy" : 0,
        // 余談
        // VSCode の json ファイルは JSON with Comments というもので,
        // 最後の , が自動で無視され, C言語と同じ記法でコメントが記述できます.
    }
}
```

## ところで

勘のいい方、あるいは最初のほうから読み進めてくださった方は気づいたかもしれません。

「[TL;DR](#tldr) と[やりかた](#やりかた)で同じことをしてるはずなのに、JSON 別物になってない？」

置き換えを終えた後で申し訳ないのですが、つい先ほどの JSON は無駄があります。というか `"edgeStyle" : "orthogonalEdgeStyle"` 以外はすべて無駄です。

無駄な項目があったからと言っても（おそらく）問題は起こりません。しいていうなら、

- settings.json が汚くなり
- 数行分のストレージとメモリを食い
- マイクロ秒単位で設定の探索が遅れる

かもしれませんがそこまで気にする人はそういないでしょう。

それでも気になるのであれば、ひとつづつ消していってどうなるかを確かめるしかありません。ここでは私が確かめたものだけ残しておきます。

- 残すべきもの
    1. edgeStyle : コネクタの `折れ線/直線` など
- 消していいもの
    1. X, Y, Dx, Dyで終わるもの : （多分）何かしらの座標
    1. html : よくわからないが消しても問題は（多分）起こらなかった

## おしまい

いかかでしたか？

記念すべき人生初の全体公開記事です。半分備忘録、半分実績作りという感じで書き始めましたが、書き終えて読み直してみると「疲れのわりに量すくねえな」という感じです。あまり続かないかも…。

補足・訂正事項などあれば歓迎しますが、修正は期待しないでください。

## 履歴

||内容|
|-|-|
|'24 08/30 23:30|初投稿|
| 〃 09/03 12:30|目次の追加とタグの修正|
| 〃 〃/06 09:30|`,`除去が不要であったため修正|