カット・ペーストを可能にして、ダイナミックな移動を可能に〜1Writerカスタマイズ②〜

Obsidianが日々の相棒となってくれており、iPhoneでは「1Writer」というアプリを使ってObsidianで扱っているファイルと同じファイルを編集できるようにしています。

1Writer – Markdown Text Editor
カテゴリ: 仕事効率化, ユーティリティ

そして、リストアプリのようにテキストを扱えるようにするにはなにが必要かを考え、

  • 行ごとの削除
  • 行ごとの移動

の2つが欠かせないということで、

にて、削除と上下の移動は可能にすることができました。が、もっとダイナミックに移動させたいという願望が出てきました。


リストアプリでは、長押しや「編集」ボタンを押すことで、項目のドラッグ&ドロップが可能になるものが多いと思います。で、これが結構大事でして。
タスクを、実行しようと思っている順に並べているのですが、実際はそれ通りにいくことはあんまりありません。時にはリストの項目を大きく移動させたい時が出てきます。そんな時に重宝するのがドラッグ&ドロップの機能なわけです。
でもこれをテキストエディタに求めるのは、つまり1行ごとにドラッグ&ドロップによる移動ができるようにするのは、なかなかに難しい。
でもやっぱり、大きく移動させる機能は欲しい。

ということで、「カット」と「ペースト」を気軽にできるようにすることで、ドラッグ&ドロップのような動きを可能にしよう、と考えました。

  • カーソル(選択)行をカット
  • クリップボードの内容をペースト

という2つの機能があれば、リストの項目を大きく動かしたい時は、動かしたい項目をカットして動かしてきたかった場所でペーストすることができるので、ドラッグ&ドロップ機能の代わりができるだろう、と。
実際に動きを見てみましょう。

移動させたい行にカーソルを持っていく。あるいは、複数行に渡る場合は範囲選択をしておき、カット。するとその行がカットされる。移動したい先にカーソルを持っていって、ペーストボタンを押せばそこに移動完了です。
この機能で、さらにテキストエディタの内容を1行ごとに操作することが、以前よりやりやすくなりました。

カーソル(選択)行をカット

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
if ( e <
    linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = -1;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}
var after = before;
if(before < 0){
    before = 0;
}
for(let i=selects; i < selecte+1;i++){
    after = after + linetexts[i].length + 1;
}
editor.replaceTextInRange(before, after, "")
var cutlines = [];
for(let i = 0; i < selecte-selects+1; i++){
    cutlines.push(linetexts[selects + i])
}
var cuttext = cutlines.join('\n');
app.setClipboard('\n' + cuttext);

クリップボードの内容をペースト

“`
var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];

var cuttext = app.getClipboard();

editor.replaceTextInRange(s,e,cuttext);
“`

テキストエディタ上のテキストを1行ごとに扱うことができるようになることが、iPhone上ではこんなに快適になるものなんだな、と驚いています。
ついでに、カーソル行をコピーするアクションも作りました。

カーソル(選択)行をコピー

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
if ( s <
linecount + linetexts[i].length +1){
selects = i;
selectrange = linecount - 1;
break;
}else{
linecount += linetexts[i].length + 1;
}
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
if ( e <
linecount + linetexts[i].length +1){
selecte = i;
break;
}else{
linecount += linetexts[i].length + 1;
}
}
var cutlines = [];
for(let i = 0; i < selecte-selects+1; i++){
cutlines.push(linetexts[selects + i])
}
var cuttext = cutlines.join('\n');
app.setClipboard('\n' + cuttext);

  • カーソル(選択)行を削除
  • カーソル(選択)行を上へ移動
  • カーソル(選択)行を下へ移動
  • カーソル(選択)行をカット
  • カーソル(選択)行をコピー
  • クリップボードの内容をペースト

以上のアクションをカスタムキーボードに設定し、毎日使っています。

とても快適になったわけですが、1Writerで、たすくまのように「全ての行動を記録する」となると、行ごとの操作に加え、リピートタスクを設定し、それを簡単に呼び出せる仕組みが必要になってきます。全ての行動を記録する際、毎日やっていることに関しては、。毎日入力するよりもテンプレートで引っ張って来る方が明らかに手間が省けます。ましてや、たすくまのタスク数は大体40程度。それらを毎日入力するのは現実的ではありません。

そこで、1Writerにも、テンプレートを引っ張ってきてエディタ部分に入力し、たくさんのタスク名をいちいち入力しなくて住むようになりました。が、これはまた別の機会に。

テキストを「1行ごとのリスト」ととらえ、削除と移動を可能に〜1Writerカスタマイズ①〜

タスク管理アプリの多くは、長年使っている「たすくま」もそうですが「リスト」の形式をとっています。

1タスク1リスト(1タスク1行)の表示で、タスクがダァーッと並んでいる形式。
確かにこの形式は、タスク管理をする上で扱いやすいなぁと感じます。
リスト形式であれば、

  • 行の削除ができる
  • 行の順番の入れ替えができる

という機能を備えており、それがタスクを扱いやすくしてくれている要因ではないか、ということで、「やったことの記録がすこぶる取りやすいリストアプリ」のように、テキストを扱えるようにしたいな、という思いがわいたわけでした。
「アウトライナー」をタスク管理に利用している方も多くいられると思うのですが、それは、アウトライナーは行の削除と順番の入れ替えが容易であるというのも大いに関係していると感じます。

ぼくは、タスク管理に今はObsidianを使っているのですが、iPhoneでは、「1Writer」というアプリを使っています。

1Writer – Markdown Text Editor
カテゴリ: 仕事効率化, ユーティリティ

1Writerはjavascriptを扱えますので、テキストを加工することができます。そこで、1Writerのjavascript機能を使って、

  • 行の削除ができる
  • 行の順番の入れ替えができる

という機能を実装しようと考えました。
そうして作成したのが、以下の3つのアクション。

  • カーソル(選択)行を削除
  • カーソル(選択)行を上へ移動
  • カーソル(選択)行を下へ移動

カーソル(選択)行を削除

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
    if ( e <
        linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = -1;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}
var after = before;
if(before < 0){
    before = 0;
}
for(let i=selects; i < selecte+1;i++){
    after = after + linetexts[i].length + 1;
}
editor.replaceTextInRange(before, after, "")

カーソル(選択)行を上へ移動

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
    break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
    if ( e <
        linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = 0;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}
var after = before;
if(before < 0){
    before = 0;
}
for(let i=selects; i < selecte+1;i++){
    after = after + linetexts[i].length + 1;
}
editor.replaceTextInRange(before, after, "")
var cutlines = [];
for(let i = 0; i < selecte-selects+1; i++){
    cutlines.push(linetexts[selects + i])
}
var cuttext = cutlines.join('\n');

if ( selects == 0 ){
    editor.replaceTextInRange(0, 0, cuttext + '\n');
    editor.setSelectedRange(cuttext.length,cuttext.length);
}else if( selects == 1 ){
    editor.replaceTextInRange(0, 0, cuttext + '\n');
    editor.setSelectedRange(s - linetexts[0].length-1,e-linetexts[0].length-1);
}else{
    var before = 0;
    for(let i=0; i < selects-1;i++){
        before = before + linetexts[i].length + 1;
    }
    editor.replaceTextInRange(before-1, before-1, '\n'+cuttext)
    editor.setSelectedRange(s - linetexts[selects-1].length-1,e-linetexts[selects-1].length-1);
}

カーソル(選択)行を下へ移動

var text = editor.getText();
var linetexts = text.split('\n');
const range = editor.getSelectedRange();
var s = range[0];
var e = range[1];
var selects;
var selecte;
var linecount = 0;
var selectrange;
for (let i = 0; i < linetexts.length; i++){
    if ( s <
        linecount + linetexts[i].length +1){
        selects = i;
        selectrange = linecount - 1;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}
linecount = 0;
for (let i = 0; i < linetexts.length; i++){
    if ( e <
        linecount + linetexts[i].length +1){
        selecte = i;
        break;
    }else{
        linecount += linetexts[i].length + 1;
    }
}

var before = 0;
for(let i=0; i < selects;i++){
    before = before + linetexts[i].length + 1;
}

if ( selecte == linetexts.length-1 ){

}else{

    var after = before;
    if(before < 0){
        before = 0;
    }
    for(let i=selects; i < selecte+1;i++){
        after = after + linetexts[i].length + 1;
    }
    editor.replaceTextInRange(before, after, "")
    var cutlines = [];
    for(let i = 0; i < selecte-selects+1; i++){
        cutlines.push(linetexts[selects + i])
    }
    var cuttext = cutlines.join('\n');
    var before = 0;
    for(let i=0; i < selecte+1;i++){
        before = before + linetexts[i].length + 1;
    }
    editor.replaceTextInRange(before-1+linetexts[selecte+1].length-cuttext.length, before-1+linetexts[selecte+1].length-cuttext.length, '\n'+cuttext);
    editor.setSelectedRange(s + linetexts[selecte+1].length+1,e+linetexts[selecte+1].length+1);
}

おそらくあんまりキレイなコードではないと思うのですが、、、便利なのでよかったら使ってみてください。

で、これらによって、テキストを行ごとに削除したり移動したりが簡単になったわけです。でも、だいぶと便利になったのに、さらに欲が出てきまして。
もっとダイナミックに移動させたいようになってきました。

つづく

ObsidianPublishは、今のページを起点としてつながりのある他のページへ

2回の記事を通して、ObsidianのPublish機能をどう使うのか、ブログとどう使い分けていくのかについて書きました。
今回は、Obsidianでpublishしたものについて。


上のリンク先は「choiyakiノート」のトップページにあたるもので、そこにはズラズラとタグが並んでいます。
これは、各ページにつけているタグの一覧。興味があるものをポチッと押していただければ、Obsidianにてpublishしているページの中で、押したタグがつけられているページが一覧で表示されるようになっています。
Obsidianでは、ページ同士をリンクさせることと、それぞれのページにタグをつけることができます。
Scrapboxでは、リンクとタグは表記上の違いだけで、役割としては同じなのですが、Obsidianは違う役割を果たします。

  • タグを押すと、そのタグがつけられているページを一覧できる
  • リンクを押すと、リンク先のページに移動できる

なので、Obsidianでは、リンクとタグを使い分けることができる、ということになります。

Obsidianを使い始めた当初は、というか、publishの機能を使い始める前までは、タグの使い道がわからず、Scrapboxみたいにリンクだけでいいじゃないかということでリンクしか使っていませんでした。けど、publishによって、既存のページを修正して公開していくようになり、タグの必要性を感じるようになりました。

Obsidianのpublishでは、今開いているページに言及しているページ一覧の「Backlink」と、リンクしているページをグラフ化した「Graph」が表示されます。
どちらにおいても、今表示しているページと、リンクでつながっている「一つ先」のページしか表示されません。
例えば、表示ページの文章内に「Obsidian」というリンクがあったとします。
今表示しているページと「Obsidian」とはつながっており、「Obsidian」ページはBacklinkあるいはGraphに表示されます。けれども、Obsidianとつながっている他のページは、どこにも表示されることはありません。
なので、Obsidianとリンクされている他のページがみたければ、Obsidianページへのリンクを踏む必要があります。
ここで問題になるのが、Obsidianというページが存在するか否か。
存在しなければObsidianページには移動することができず、移動できないのでObsidianページとつながっている他のページを見ることができないことになります。
これでは、タグとしてリンクを機能させることができません。タグというのは、同じタグがついているページが一覧で表示される必要があるから。
というわけで、Obsidianのpublish機能においては、タグが必要になるわけです。

(Scrapboxにおいてはリンクとタグが表記の違いだけであるのは、つながっているページの「二つ先」まで一覧できるからであり、そういうところまで考え尽くされているScrapboxはすごいなぁ、と感じます)

  1. 今開いているページに言及しているページは、「Backlink」として下に一覧表示される
  2. 今開いているページが言及している他のページは、文中でリンクになっていて飛ぶことができる
  3. 今開いているページに言及しているページと、今開いているページが言及しているページの両方が、Graphには表示される
  4. 同一テーマについて書かれているページにはそのタグがつけられているので、一覧表示させることができる

他の人が読むことを考えると、上記4つの機能によって、テーマを絞って一覧表示したり、文中のリンクをたどってもらったり、Graphの中の気になるページを訪れてもらったりしてもらえればな、と思います。

Obsidian publishによって公開されるWebページは、ブログのように最新記事が上に並ぶのではなく、記事名による五十音順で並びます。
なので、更新順に次々見ていくということはおそらく想定されておらず、リンクやタグをたどって他のページを見ていくことを基本としているように感じます。
そのページの移動の仕方は、まさに実際にObsidianを使っている人のような移動の仕方を基本としているということだと思います。
publishしているものは、ぼくの個人的な着想メモの数々、読んだ本に対する感想の数々。ただのメモと感想なので、publishする効果はどれくらいあるのかわかりませんが、書かれれていることがちょっとでも思考の刺激になってくれればいいな、と思います。
少なからず、ぼくにとっては興味深い事柄を集めているので。

では、お読みいただきありがとうございました。

ブログに投稿するもの、Obsidianでpublishするもの、ブログに投稿してObsidianでもpublishするもの〜その2〜

にて、今課題としていることとして、

  • ブログとObsidian publishをどう使い分けるのか
  • 過去のブログの下書きがObsidianにはあるけれども、それをpublishするか否か

を挙げました。そのうち、「ブログとObsidian publishをどう使い分けるのか」については、

  • Scrapbox「book scrapbook」で公開していたようなものをpublishしていく
  • 1ページ1テーマで書き、関連するページ同士を直接つなげていく
  • 1ページ1テーマを保つために、ブログ記事の下書きをそのままObsidianでpublishはしない
    • 1ページ1テーマに加工してからpublishする

という方針でいこう、ということになりました。
今回は、過去のブログ記事の下書きはどうするかについて。


「その1」でも述べたように、ブログ記事は、1記事1テーマになっていないか、あるいはテーマそのものを持っていないかのどちらかであるものがほとんどです。ブログの下書きも同じ。
であれば、下書きをそのままpublishするのは、Obsidianのpublishは1ページ1テーマでいく、という方針にはそぐわないことになります。
ただ、いくつかの内容を含むページがあってもいいかも、と考えたり。各メモの、「ハブ」の役割をするようなページになってくれることを期待して。
とはいえ全ての過去記事の下書きがそんな役割を担えるか、というとそうではないので、テーマを持たない雑記のような記事についてはpublishをせず、publishするものに関しては、基本的には1ページ1テーマにバラす。いろいろなものに言及しているようなものに関しては、ハブの役割となることを期待して1ページ複数テーマを持つものもpublishする、という方針でいこうかな、と思います。
とにかく、Obsidianのpublishにおいては、各ページがリンクでつながっており、(基本的には)1ページ1テーマであるが故に、そのページを読むだけでは全容を把握できないとしても、リンクを辿っていくつかのページを読めばだいたいのことはわかる、みたいな状態にしたいな、と考えています。

また、Obsidianでは、リンクとタグの使い分ける方がいいだろう、とも考えています。
リンクは「このページと関連するページはどれか?」を記述するものであり、ページ同士の結びつきを表すので、書き手が、今開いているページと関連する他のページを提案することになります。
タグは「このページは何に関することが書かれているか?」を表すものであり、そのタグに関することが書かれているページを串刺しする役割を担います。
明確に役割が違うのですから、ちゃんと使い分けていく、というのも、Obsidian publishを利用して公開していく上での基本方針となります。


Obsidian上には、ちょっとずつページが増えていってます。その中のプライベートなものを除いた全ては、公開してしまおうと考えています。
各ページが他のページとのいくつものつながりを持ち、書き直したり書き加えたりすることで日々刻々と変化していく。
そういったものにしていければなーと考えています。

では、お読みいただきありがとうございました。

ブログに投稿するもの、Obsidianでpublishするもの、ブログに投稿してObsidianでもpublishするもの〜その1〜

Obsidianのpublishを利用して、これまでのメモをObsidianでどんどん公開していってる。

で、最近考えているのが、ブログとObsidian publishをどう使い分けるのか、というところ。
また、過去のブログの下書きがObsidianにはあるけれども、それをpublishするか否か、というところ。


まず、「ブログとObsidian publishをどう使い分けるのか」について考えたこと。
Obsidianのpubloshで何を公開していくかというと、Scrapbox「book scrapbook」で公開していたようなものをpublishしていこうかな、と考えてる。
Scrapboxでは、

  • 読んだ本について
  • 考えたことをまとめたことについて
  • ブログ記事の下書き

を公開していた。自分が読んだこと、考えたことについて書いたことのほぼ全て。
そのうちのブログの下書き以外はObsidian publishでも同じように公開しようかな、と決めたけど、ブログの下書きについてはどうするか。とりあえず、Scrapboxの時のように下書きをそのまま公開するのはやめようと思った。
じゃあどうするか。
考えたのは、Obsidian publishでObsidianの中のどのページを公開していこうと思っているか、ということ。
デイリーページなどタスク管理に使っている個人的なページは公開する気はないけれども、それ以外の、考えたことややってみたことなんかは積極的に公開していくのがいいのでは、と思っている。
で、それらのページの作成の方法を、Scrapboxで公開してた時とはちょっと変えていこうと思っていて。

Scrapboxでは、単語のリンクを介して繋げていくのが多かった。
例えば、「Obsidian」や「アウトライナー」などをブラケット「[]」で囲んでリンクにし、単語をリンクすることでページ同士をその単語を介してつなげていた。単語のリンクは、タグ的な役割を果たし、同じタグがついているページ一覧が下に表示されるイメージ。
Image

Obsidianではその方法ではなく、ページ同士をつなげていこうかな、と。
1ページ1テーマで書き、関連するものを直接つなげる。しばらくはこれまでのメモを見返し、書き換えつつ、書き足しつつ、関連するページ同士をつなげつつ。
で、これまでScrapboxでタグ的につけていたリンクに関しては、Obsidian上ではリンクという形ではなく、タグをつけよう、と。
Scrapboxではタグとリンクの表記以外の区別はなかったけど、Obdisianでは二つは役割が違う。タグをクリックすればそのタグがつけられているページ一覧を見れるという機能になっているので。Obsidianでは、リンクとタグの使い分ける方針を取り、リンクはページ同士を直接つなぐ。
で、1ページ1テーマを保つために、ブログ記事の下書きをそのままObsidianでpublishはしないでおこうと思う。
ブログの記事は、1記事で完結したものにするために、色々と説明を加えたり、Obsidian publishよりも他の人が読むことをより意識したものになり、1ページ1テーマではなく、いくつも盛り込むことが多い。
また、雑記的なものはテーマを持たないことがほとんど。
なので、ブログ記事は1ページ1テーマではないことか多いので、Obsidianでpublishするときには書き換えたりページを分けたりして、1ページ1テーマに加工してからpublishしようと考え中。ブログとObsidian publishは、全然違ったものにしていく予定。


「過去のブログの下書きがObsidianにはあるけれども、それをpublishするか否か」については、、、長くなってきたのでまた次回ということで。

2021年現在の、日々の記録あれこれの利用の仕方

2021年現在の、日々の記録あれこれにて、現在どういったものを日々の記録として残していっているのかについて述べました。今回は、その残しているものをどうしているのか、についてです。


デイリーページ

日々「デイリーページ」をObsidian上に作成し、そのページを開きっぱなしにして日中過ごして何かあれば書き込んだり、タスクを書き出してそれに倣って行動しているのですが、そのデイリーページのログは、来年の同じ日付の日に見返されることになります。
「連用手帳」という形式をとっており、日々のデイリーページには1年前・2年前の同じ日付の日を埋め込んでおり、プレビューによって毎日見返しているからです(Obsidianにて連用手帳)。
1年や2年前はまだObsidianを使っていませんでしたが、Scrapboxにてデイリーページを作成して過ごしていた時期があるので、それをObsidianにインポートし、毎日見返しています。
なので、今日かいたページは、確実に1年後、見返すこととなります。
去年や一昨年の1日を見返し、今日を過ごす参考にする、という感じです。あるいは、そこに書かれているメモを読み返し、何かしら書き加えたくなることもあったり、です。

たすくまの記録

Obsidian以外に、「たすくま」にて行動を記録していますが、こちらはほぼ見返されません。
ごくごくたまーに、「あの日は何をしていたのだ?」ということを知りたくなることがあるので、そういう時には過去の記録を振り返りますが、その程度。
デイリーページのように確実に見返されることが決まっている、というわけではなく、ごくごくたまーに特定の日の記録を見返すだけです。

日記

日記はEvernoteに連用日記を書いていっており、デイリーページと同様、今日かいた日記は来年の同じ日に見返されることになります。
2015年から書き加え続けているので、今は毎日過去5年分の日記を見返しています。
日記は読み返すだけで楽しいですし、結構「あぁこの時期にこれをやってるんか」と、今年を過ごす上で参考になることも多い。
それもあって、手帳も連用形式にしよう、となったわけですが。
まぁでも、日記は読み返すだけで面白いので、書くのは多少面倒に思いつつも、毎日欠かさず書き続けています。

個別にページを与えてログを取っているものたち

自分の好きなものに関しては個別にページを与え、記録をとっていってるわけですが、これらはあまり見返しません。
お酒の記録であれば、時々「これって飲んだことあるっけ?」と検索をかけてみたり、映画の記録は友達と面白かった映画を共有するときに振り返ってみるくらい。
コーヒー豆焙煎の記録は、同じ豆を焙煎するときに少し振り返り、次の焙煎はどうするか考えるときに。
読んだ本や読書メモも、とってはいるもののさほど見返すことはありません。以前は読んだ本についてブログで書いたりするときに読み返していましたが、今はそれがやりたいのになかなかできていないという現状です。


デイリーページと日記は、1年をサイクルとして必ず見返します。
そのほかはたまに検索をかけて見返したり、といったところでしょうか。

ぼくというものはどうやら「定期的に見返すぞ」と思っても確実にちゃんと見返してはくれないようなので、連用形式で1年後勝手に目に入るようにしています。
意図的に見返して使っていきたいものに関しては、勝手に目に入るような状況を作り出し、活用している、という感じです。

では、お読みいただきありがとうございました。

ページの書き換えを反映したいので、Obsidianのpublishを使い始めた

book scrapbook」をObsidianのpublishに移行しようかな、と考え始めた。

こう思ったきっかけは、Obsidian上のページを見返して書き換えていたとき。

ぼくはあれやこれやをObsidian上の”デイリーページ”に書いており、メモしたことをデイリーから個別ページへの切り出してScrapboxにて公開している。
個別ページに切り出されたものの書き換えをし、他のページとのリンクのさせ方を変えると、Obsidian上では互いのページの結びつきが変化していくけど、それを公開しているScrapboxではObsidianでの書き直しを同期しないと変化していかない。これがなぁ、と。
ObsidianとScrapboxという別々のところに書いているので、いちいち同期するのは現実的ではない。

  • Obsidian上でページを書き換える
  • →コピーする
  • →Scrapboxにて、書き換えたページを検索する
  • →コピーしたものを貼り付ける

という工程を経なければいけない。手間に思って確実に続かないのは明らか。
となると、ページの書き換えまでを公開に含めたいとなると、Obsidianのpublish機能しかないかなぁという結論に至っているところ。

Obsidianには、ページを公開する機能を有料で提供してくれている(Obsidian Publish)。それを使おうかな、と。
静的サイトを作ってやればいけるのかもしれないけど、ObsidianのようなGraphは表示されないし、「リンクされてるページ」の表示も難しいのでは?と思ったり。
あとは、Obsidianには日頃とてもお世話になっているので、課金してもいいかな、という気持ちもあり。
かつ、色々と書き換えていったらそれがすでに公開しているものにも反映してくれるのであれば、今よりももっと書き換えの作業をする気になって、自分のObsidianが充実するかも?という魂胆もあったり。
書き換えることへのアフォーダンスをうむのではないかな、という期待。

早速、Obsidianのpublishをsubscription。publish機能を1年間使えるようになった。
今、ページをどんどん増やしているところ。
もともと「book scrapbook」にあったページは全てObsidianに移行しているので、それらを選んでpublishさえしてしまえば、book scrapbookの移行は完了する。
ただ、結構むやみやたらにページ同士をリンクさせているので、大幅に修正したい気持ちがある。ページを一つ一つ確認して、ぽちぽちと修正してはpublishしていこうかなぁ、と考え中。
一つのページは大抵は別のページとリンクしている。そのリンクを辿りながら、リンクを修正しながら、次々とpublishし、Obsidianのpublishを充実させていければなぁ、と。
ちなみに、Obsidianのpublishは「choiyakiノート」という名前で公開しているので、よろしければチェックしてください。

では、お読みいただきありがとうございました。

読書メモと本の感想、同じページで保存しておき、本の感想の部分だけ切り出してScrapboxへ

本を読むときにメモをとり、読み終わった後は本の情報に簡単な感想を添えて、Scrapboxの公開プロジェクト、「book scrapbook」に保存しています。
読書メモには本文の引用がたくさん書いてあるので、Scrapboxに保存するのは最後に書く感想のみ。Scrapboxは公開していて誰でも見れるため、あまりに本文の引用をたくさんしている読書メモを載せるのはよろしくないからです。

Obsidianを使うようになり、読書メモを書きながら読んだ後、読了後の感想ページを新たに作成して、そちらだけScrapboxで公開する、という形を取っていました。
手元には読書メモページと、読了感想ページがあり、Scrapboxには読了感想ページだけ保存する。
ただ、この手元にある2つのページは、別々である必要はないわけです。手元にあるだけで公開しているわけではないので。
Obsidianなので、2つをリンクで結ぶことは簡単なのですが、読書メモの最後に簡単な感想があった方が自然です。別々よりも、1つのページにまとまっておいてほしい。

Obsidianで扱うファイルと同じものをモバイルでも閲覧・編集するために、1Writerというアプリをつかっています。

このアプリ、javascriptが使えて、テキストの取得や置換をすることができる。なら、手元で読書ページと読了感想ページをそれぞれ作成して片方だけを公開して、、、とかしなくても、1ページに読書メモも読了後の感想も書き込み、javascriptのアクションで感想の部分をScrapboxに切り出せばいいわけです。

流れはこんな感じ。

  • 本を読みながら読書メモを書き書き
    • Image
  • 読了した後、本の情報と感想を書き込むためのテンプレートを呼び出して読書メモページに追記
    • Image
  • Scrapboxに切り出すアクションを発動
    • Image
    • 無事、Scrapboxにページが作成されてる

Scrapboxにページを作成するのに、「Porter」というiPhoneアプリを使っています。URLスキームにて、タイトルと本文をPorterに受け渡し、ページを作成する、という流れで。

この手順を踏むことで、読書メモに本の情報と感想を追記し、本の情報と感想だけを切り出してScrapboxのページを作成することができるようになりました。
手元にあるのは1冊につき1ページになり、収まりがいい。いい感じです。
あとは読書するのみ。
今年もいろいろな出会いがあるといいな。

では、お読みいただきありがとうございました。

Obsidianにて連用手帳

職場のデスクでは、Obsidianを常に開いています。
Obsidian上でタスク管理をおこなっており、毎朝その日の日付をタイトルとした新たな1ページ作成することから1日が始まります。
そこに色々と、その日やることや、思いついたことや、新たに発生したタスクや、実行したことに関するログを書きつけていっています。
デイリーページと呼ぶことにしますが、このデイリーページの作成にはテンプレートを用いています。

去年あたりから「連用形式」で手帳やノートを使うことがいいと感じ、どのノートを使う際にも、連用形式で使うにはどうしようか?と自然と考えています。
「連用形式」とは、「連用日記の形式」のことで、同じ日付のページを数年にわたって使用する、というもの。
例えば、1月17日というページを作成し、今年はその日はそのページを使う。で、来年の1月17日にも、同じページを使う。
こうすることによって、去年書いたことが勝手に目に入る使い方です。

紙のノートを手帳のかわりに使い、それをやり始めました。それからというもの、手帳的な役割を担ってくれているものに関しては、すべて「連用形式」でいくのがいいのでは?と思っておりまして。
Obsidianを手帳的に使っているので、じゃあObsidianも連用形式にしよう、となるのは自然な流れです。
どうしようかあれこれ考え、試した結果、「埋め込み」の機能を使うことにしました。

Obsidianでは、ダブルブラケット「[[]]」でリンクの記述をしている部分の前に「!」をつけると、プレビューした時にリンク先のページをそのまま表示してくれる「埋め込み」機能があります。

これを利用すれば、各デイリーページに去年と一昨年の同じ日付のデイリーページへのリンクを貼り、「!」をつけておけば、プレビューした時のみ、過去の同じ日付のページが表示される、という形にすることができます。
基本的に、デイリーページにあれこれ書き込んでいる時は表示されず、プレビューすれば見える。いい感じです。
という様に、Obsidianにて連用形式でのデイリーページの運用が可能になりました。
しばらくはこれにて、Obsidianを「連用手帳」として使っていこうと思います。

では、お読みいただきありがとうございました。

個別にページを与えてログを取っているものたち

自分が好きなもの・ことのログをとるのが好きです。
Evernoteを使い始めて身についたログをせっせととる習慣は、WorkflowyScrapboxなどのデジタルツールを渡り歩いて、今使っているObsidianになっても続いています。
具体的に何のログをとっているのか?というと、

  • 読書メモ
  • 読了した本
  • 飲んだビール・日本酒
  • 観た映画
  • コーヒー豆焙煎の記録

あたり。これらについては、毎回個別のページを作成し、そこにあれこれ書きつけていってます。
毎日その日のデイリーページを作成し、そこに日中あれこれ書いているので、何かしら書くならそのデイリーページに書いておきさえすればいいっちゃいいのですが、上記については、わざわざ個別ページを新規に作成しています。

読書メモ、読了した本

もう10年以上、本を読んでいるときにはいわゆる「ねぎま式」で読書メモをとっていってます。本文の引用と、それに対して自分が考えたことを書き添えていく、という方式。
で、1冊読み終えたら、また新たにページを作成し、本の画像や本の著者や出版年、出版した会社名、ざっくりまとめた本に対する感想、などの情報を、テンプレートに沿って書いていきます。
読書メモのページと読了した本のページを分けているのは、読了した本については、Scrapboxに公開するから。
Scrapboxの公開プロジェクト、book scrapbookには、いろんなメモが、主に着想を捉えたメモや、ブログの下書きなんかが集まっています。本についての感想を書いてると、そういうメモたちとリンクで繋がることがよくある。だから、book scrapbookにてメモと読了した本のページを一緒くたにしています。
ほんとうなら、読書メモもScrapboxにおきたいところなんですが、というか読書メモページと読了した本ページを分けずに一緒にしたいのですが、読書メモページの方はあまりにも引用箇所が多いので、それを公開するのは憚られるので、分けています。

飲んだビール・日本酒、観た映画

ビールが大好きでして、スーパーやコンビニ、デパートなどで、今まで飲んだことのないビールが売っていれば、ついつい買って見ては飲んでいます。
大好きなものなので、飲んでみた感想を書いて残しておきたい。ということで、テンプレートを作成し、飲んだビールについて書き残していってます。
日本酒も飲むので、ビールに倣っていろいろ飲み試し、そのログを書いていってます。
映画を観るのも好きなので、観たら必ずこれまたテンプレートにのっとってメモを残しています。友だちと映画の話をすることも多く、そんなときは最近観た映画のログを一覧し、おもしろかったものを共有したり。

コーヒー豆焙煎の記録

コーヒーも大好きで、あれこれ試していくうちに、しまいには生豆を手に入れて自分で焙煎するようになりました。
焙煎は温度変化の仕方により仕上がりが大きく変わっていく代物。豆を焙煎機に(コンロに置いて使焙煎するものを使っています)投入してからの温度変化を追いかけ、どのあたりで終了したか、などを記録しています。
で、合わせて、試飲してみた感想もそのページに追記し、果たしてその焙煎で豆の味を引き出せているのか、というのを確認できるようにしています。
同じ豆を使って何度か焙煎するので、うまくいったと感じる温度調整があれば、それを再現するように努め、自分で焙煎した美味しいコーヒーを飲むためにログを取っています。
ちゃんと記録を残しておくことが大切なので。


大抵はデイリーページにメモするだけに留めておきますが、わざわざ新たにページを作成してログをきちんと残していっているモノたちは大体このくらいでしょうか。
加えて、デイリーページに書いている着想メモの中で、1つの項目としてまとめることができそうなものに関しては、ページを作成して書き残し、Scrapboxで公開しています。
ほとんどはデイリーページへのメモで済ませているので、ログとしてちゃんと個別にページを与えているのはこれくらいかな、と思います。

では、お読みいただきありがとうございました。