json_canvas は JSONCanvasは形式のファイルを Ruby で簡単に読み書きできるライブラリです。すでにいくつかの言語のライブラリはあったのですが Ruby 用が無かったので作りました。
インストール方法
json_canvas を使い始めるには、まずアプリケーションのGemfileに以下の行を追加してください。
gem 'json_canvas'
その後、ターミナルで以下のコマンドを実行します。
$ bundle install
もしくは、直接以下のコマンドを使ってインストールすることも可能です。
$ gem install json_canvas
基本的な使い方
JsonCanvasを使用するには、Rubyスクリプト内で以下のようにgemを読み込んでください。
require 'json_canvas'
キャンバスの作成
新しいキャンバスを作成するには、次のコードを使用します。
jc = JsonCanvas.create
テキストノードの追加
キャンバスにテキストノードを追加する方法は以下の通りです。
text_node = jc.add_text(text: "Hi")
テキストノードには、id, 位置, サイズ, 内容, 色などのパラメータをカスタマイズして設定することができます。
custom_text = jc.add_text(id: "unique_id", x: 50, y: 100, width: 200, height: 50, text: "Hello World!", color: "2")
このテキストを後述の save
メソッドを使ってファイルに保存してから Obsidian などの対応するアプリケーションで開くと以下のように表示されます。
その他のノードタイプ
ファイルノードやリンクノード、グループノードを特定の属性で追加することもできます。
file_node = jc.add_file(file: "path/to/file") link_node = jc.add_link(url: "https://example.com") group_node = jc.add_group(label: "Test Group")
エッジの追加
ノード間をエッジで接続することができます。
jc = JsonCanvas.create start = jc.add_text(id: "START", text: "start") goal = jc.add_text(id: "GOAL", x: 400, text: "goal") jc.add_edge(id: "edge1", fromNode: start.id, toNode: goal.id) jc.add_edge(id: "edge2", fromNode: start.id, fromSide: "top", fromEnd: "arrow", toNode: goal.id, toSide: "bottom", toEnd: "arrow", color: "2", label: "HELLO")
JSON文字列への変換
作成したキャンバスインスタンスをJSON文字列に変換する場合は、to_json
メソッドを使用します。
jc.to_json #=> '{"nodes":[{"id":"START","x":0,"y":0,"width":250,"height":60,"type":"text","text":"start"},{"id":"GOAL","x":400,"y":0,"width":250,"height":60,"type":"text","text":"goal"}],"edges":[{"id":"edge1","fromNode":"START","toNode":"GOAL","fromSide":"right","toSide":"left"},{"id":"edge2","fromNode":"START","toNode":"GOAL","fromSide":"top","fromEnd":"arrow","toSide":"bottom","toEnd":"arrow","color":"2","label":"HELLO"}]}'
保存と読み込み
キャンバスをファイルに保存することや、ファイルからキャンバスオブジェクトを読み込むことができます。
# "sample.canvas"ファイルに保存。 jc.save("sample.canvas") # キャンバスオブジェクトを読み込み。 loaded_canvas = JsonCanvas.parse(File.read("sample.canvas"))
まとめ
Ruby コードからクラス構造を出力したり、複雑なルールに沿ったグラフを自動生成したいときなどはスクリプトから作るのが便利かもしれません。もしくは Obsidian で生成したグラフを読み込んで特定のルールに沿ってノードを整形するなどもよさそうです。是非色々な使い方を考えてみてください。