Noratetsu Lab

動じないために。

タグの定義・詳細

Dynalist API

Dynalistの自分のデータを取得・操作できるAPI。
General – Dynalist API v1 Documentation

secret tokenを取得すれば自分のデータにアクセスできる。
データを取得することも変更することもできるので扱いには十分に注意が必要。

https://apidocs.dynalist.io/#document-level-api を使う例

const token = 'hoge'; // secret tokenをここに入れる(うっかり公開しないように注意)  
const fileId = 'fuga'; // ファイルのURL(https://dynalist.io/d/fuga)のfugaの部分を入れる   
fetch('https://dynalist.io/api/v1/doc/read', {  
    method: 'POST',  
    body: JSON.stringify({  
        token: token,  
        'file_id': fileId,  
    }),  
})  
    .then(response => response.json())  
    .then(data => {  
        console.log(data);  
        // dataを使って任意の処理  
    })  

返ってくるデータの例(Get content of a document – Dynalist API v1 Documentationより)

// code:example.json  
{  
  "_code": "OK",  
  "_msg": "",  
  "file_id": "",  
  "title": "Todo list",  
  "version": 15,  
  "nodes": [  
    {  
      "id": "",  
      "content": "Buy milk",  
      "note": "2L whole milk",  
      "created": 1552959309804, // timestamp in milliseconds of the creation time  
      "modified": 1552959335182, // timestamp in milliseconds of the last modified time  
      "children": []  
    },  
    {  
      "id": "",  
      "content": "Send Jason photos",  
      "note": "",  
      "checked": true,  
      "checkbox": true, // whether this item has checkbox  
      "color": 4, // color label, 0~6  
      "heading": 3, // heading level, 0~3  
      "created": 1552959309804,  
      "modified": 1552959335182,  
      "collapsed": true,  
      "children": [  
        "",  
      ]  
    },  
    {  
      "id": "",  
      "content": "Picnic photos",  
      "note": "",  
      "created": 1552959309904,  
      "modified": 1552959359783  
      "children": []  
    }  
  ]  
}  

Backlinks

他の「Programming」カテゴリの語句

「Dynalist API」タグの記事一覧

2025/02/26

アウトライン型データベースとしてのDynalist

 Dynalistはアウトライナーだが、私にとってはデータベースである。アウトライナーとして使えるデータベース、くらいの言い方をしてもいいかもしれない。


 もちろん普通にWebブラウザやスマホアプリで操作する分にはただの(と言うのもおかしいが)アウトライナーである。Dynalistがデータベースであるというのは、アウトラインの形をトップダウンできちっと整備してデータベースとして使うというような意味ではない。発想としてはむしろ全く逆である。

APIで取得できるデータはアウトライン構造に縛られない

 DynalistはAPIを提供しており、プログラムを通じて自分のデータを参照したり編集したりすることができる。あるファイルのノード情報を取得する場合、そのファイルに含まれるノードがフラットな配列として取り出される。以下の型のオブジェクトがひとつの容れ物にわっと入っている状態である。

{  
    id: string,  
    content: string, // 本文  
    note: string, // ノート欄  
    checked?: boolean,  
    checkbox?: boolean,  
    color?: number, // 0~6  
    heading?: number, // 0~3  
    created: number,  
    modified: number,  
    collapsed?: boolean,  
    children: string[], // idの配列  
}  

 アウトライン構造はchildrenプロパティに子ノードのidが列挙されることで表現されている。なのでこのidに一致するデータを探せばそれが子ノードだと分かる。しかしデータ自体はアウトライン構造にはなっていないわけである。ルート直下のノードも10層インデントしているノードもデータ上は隣に並ぶ。
 つまり、そのノードがどこにあろうが関係なく扱えるということになる。例えば色を赤に設定したものに何らかの意味付けをするとしたら、それぞれてんでばらばらな深さに存在していてもcolorプロパティによって同じ種類のデータとしてまとめて取り出せる。色なり見出しなりノート欄なりを使ってそのノードの種類を自分で定義すれば、ノードの種類を示すためにアウトライン構造を使う必要はなくなる。
 アプリケーション上のビューでは全てのノードがアウトライン構造のどこかに位置づけられる必要があっても、それぞれのノードのデータはアウトライン構造とは無関係に活用することが可能なわけである。
 このことにより私の中でDynalistの使用感は大きく変化した。APIが使えなかった頃は分類的な視点でアウトライン構造を用いていたが、そのように形式的なアウトラインを作る必要がないとなれば、完全に「気分」で自由にノードを配置できる。これとこれが近い方が便利だ、その方が気分が良い、そういう理由で配置することに違和感を覚えなくなった。
 もちろんカオスな方が良いということではない。自分が納得する基準で適切に配置させられるのがアウトライナーを使う理由なのだから、自分なりに整えていくことにはなる。そこに自分の気持ちとは無関係な形式的構造を混入させずに済むというのがAPI活用のポイントである。

活用例① サイト記事のデータベース

 ここまでの話だと「データベース」感は薄い気がするので、データベースとしての活用の話をもう少し具体的にする必要があるだろう。単に特定の条件で一度にピックアップできるというだけなら検索機能を使えば済んでしまう。
 このサイトの記事はDynalistに書いてAPIを通じてサイト用のデータを生成している、という話は既に何度か書いている。それはつまり、Dynalistのひとつのファイルが記事のデータベースになっているということだ。
 特定の書式(例えば色が赤でノート欄に日時が書いてあるなど)に従って書いているノードをタイトル行、その子項目を本文と解釈することで、それをひとまとまりの記事データとみなす。

画像

 判定にはアウトライン上の位置は全く関係ないので、書式に従ってさえいればどこにあってもいい。データの並び替えは後で日付順にすればいいのだから、アウトラインの中では時系列がめちゃくちゃでも別に構わない(もちろん敢えて乱す必要はない)
 その記事が、サイトの中で、あるいは私の考えの中でどういう位置づけにあるのか、アウトライン操作によって整理していきたいこともある。そんな時は並べ替えたり階層を上げ下げしたり自由にぐりぐり動かせばよい。どう動かしたって記事のデータベースとしては何も影響を受けない。

活用例② ブックマークのデータベース

 インターネットを使っていると、日々数多のページにアクセスすることになる。有用なものがあればリンクを保存しておきたいと思う。便利なツールのURL、興味深い記事のURL、誰かのサイトのURL、後でチェックしたいもののURL、等々、さまざまな種類や状態の情報を保存しておくことになる。
 全てをブラウザのブックマークに入れるとごちゃつきに耐えられなくなるのだが、これらを如何にもなデータベースで管理するとなると、保存の気軽さや頻度の多さとデータベースというものの仰々しさが大抵見合わない。とても手入れはしていられないし、テーブル形式のぴしっとした感じの割にそれほど見やすいわけでもなかったりする。
 とりあえずDynalistにファイルをひとつ作り、そこに全部突っ込んでしまうことにした。最初は「検索すればいい」というつもりでDynalistを選んだのだが、ある時「ほかにビューワを作ってDynalistをデータベースとして使えばいいのではないか」と思いついた。作ったブックマークのビューワがこれ。(画像の内容はもちろんごく一部。)

画像

 ブックマーク用のファイル内にある色付きのノードをブックマークとして解釈し、その色をそのまま背景色にしている。色は「サイト」「ツール」「記事」のような意味合いを表している。分類はノードのノート欄につけたタグで判別していて、アウトライン上の位置とは関係がない[1]。タグがないものが「未分類」になっている。
 大量に保存したリンクの中でビューワに表示したいノードにちょちょっと色をつけるだけで、あとはプログラムがいい感じにやってくれる。アウトライン上は汚部屋みたいにとっ散らかっていたとしても、ビューワはさも手入れの行き届いたデータベースがあるかのように美しく表示してくれるわけである。
 アウトラインも汚くはない方がいいが、そっちはそっちで別の基準で操作して整えていけばいい。

外からデータを編集する

 ここまではDynalist上で書き込んだ情報を取得・解釈して活用することについて記してきた。しかしDynalist APIでできることは情報の取得だけではない。データの編集も可能である。
 不可逆的な操作になるのであまり軽率に試していいものではないが、APIを使えばファイルやフォルダ、ノードの作成・編集・削除ができる。Dynalistを開いていなくてもDynalistのデータにアクセスして弄れるのだ。
 例えば、あるファイルの中のノードについて一括で置換したい何かがあるという時に、普通はひとつひとつ手作業でやるしかない気がするが、APIを使えばプログラムで処理できる。ルールを前もってきっちり決めなくても後で軌道修正できることになり、大規模な何かをやるにしてもあまり構えずにやれるようになる。
 あるいは、何かのページを見ていてリンクを保存したいとなった時に、自作のChrome拡張機能にDynalist APIを使った処理を実装しておけば右クリックメニューから直接Dynalistの特定の場所に送信するみたいなこともできる。私はブックマーク、記事の本文、Twitter(X)のポスト、YouTubeの情報などをそれぞれ然るべき場所に送れるようにしている。
 こうするといよいよDynalistがデータベースらしくなってくる。Dynalist上での操作より外から操作する方が多いファイルというのもあり得るし、アウトラインの形で見たい時だけDynalistを開くという使い方も考えられる。アウトラインの表示を自分で作るのは割と面倒くさいので、データのアウトライン化を簡単に実現してくれる手段としてDynalistを利用するわけである。

見出し、色、ノート欄の存在意義

 このようにしばしばアウトライナーとしての在り方から逸脱した使い方をしているが、もちろんDynalistのファイルおよびノードを全てデータベースとみなして使っているというわけではない。普通のアウトライナーとしてアウトラインを考えることにも使っているし、その方が当たり前に多い。しかしそれらはいつでもデータベースとして解釈して活用することが可能である。
 Dynalistの見出し、色、ノート欄は最初の頃はさっぱり上手く使えなかった。検索での絞り込みにそれらを使うことはできるが、結局のところ当時の自分にとっては見た目の問題でしかなかったからだ。何色をどういう意味で使うかに必然性はないし、6色もあるが6色しかないということも活用を難しくしている。
 しかしながら、プログラムでの判定にそれらを活用できるとなると、急にそれらが便利なものに変身した。全てをノードの本文部分に書かなくてはならないとなれば、私自身には必要のない機械用のデータが場所を取って見ていて嫌になってくる。なのでメタデータを付与できる手段がほかに色々あるのはとてもありがたいことなのだ。
 今となっては色設定とノート欄は必要不可欠である。色付けに必然性が生まれたことによって使うタイミングに迷うことはなくなり、また「使いこなせてない」という気分もなくなった。

 アウトライナーは全ての情報をアウトライン上に位置づける。その特徴は私たちの理解を助けてくれる一方で、情報が位置に縛られるという欠点にもなる。しかしDynalistには別の切り口で情報を扱う手立てがあり、工夫次第でデータを如何ようにも活用することができる。
 その意味で、私はDynalistを単なるアウトライナーではなく「アウトライン型データベース」だなと思って使っている。


  1. プログラミングを始めた頃はアウトラインの位置を基準にしたブックマークビューワを作っていたが、手入れが面倒になってしまった。 ↩︎

2024/01/23

サイトの作り方④取得したデータを加工する

 Noratetsu Houseの作り方の続きです。
 今回はDynalist APIで取得したデータの加工について。

2023/12/12

サイトの作り方③Dynalist APIを理解する

 Noratetsu Houseの作り方の続きです。
 今回はDynalist APIの利用について。

管理人

アイコン画像

のらてつ Noratetsu

キーワード

このブログを検索

検索

ブログ アーカイブ

2025
2024
2023
2022
2021