時記エディタedjikiに至る道
HP100LX HP200LXはもともとniftyのフォーラムログをLEで読むのを主用途に購入しましたが、appointmentsや1-2-3やdatabaseやnotetakerやktxやvzやMEやEBRやperlや…様々な使い方を楽しむことになりました。そして、今でも時折使っている用途が時記です。
時記とは、自動でタイムスタンプが入るだけの日記です。
時記は仕事の日誌やtodoとしても活用できるとは思いますけれど、仕事をやめた今ではそちらの用途には使っていません。
個人の自由な日記としてテキストファイルに書くと、色々楽です。備忘録でもあり、体験の整理でもあり、心のゆらぎをテキストとして言語化したり、記録にすることで記憶から解放したりできます。いつでもどこでも書ければ、鉄道移動中や何かの待ち時間がテキスト作成の時間に変わります。退屈な時間などなくなります。
時記を書くのは、ストレス解消にはもちろん、新しく興味をもったり知ろうとしたり調べたり疑問を持ったり確認したくなったり納得したり気持ちよさを表現できたり、ととても楽しいことです。
もともとはLXを手に取って1秒で書き始められるように、ME.EXMとシステムマクロを組み合わせて、常に一つのテキストファイル冒頭にタイムスタンプ付の行を挿入するようにしていました。システムマクロで標準的に使えるように、
YYYY/MM/DD hh:mm:dd 本文
という形式にしていました。
日記というと、一日の終わりに日記帳を開いてその日一日を思い返して徒然を書くイメージが昔はありました。時記が少し違うのは、常に持っている小箱でリアルタイムで書き起こす点です。今でいうライフログのテキストファイル版になります。
HP100/200LXからWIndowsCE端末やPalm、Linux ZaurusやNokia端末、iPadやAndoridデバイスやiPhoneなど、常に持ち歩く小箱でリアルタイムにテキストを書き起こすという用途はずっと継続しています。もちろんノートPCやデスクトップPCでも同じ書式、一つのテキストファイルに統一するようにしてきました。
Androidスマホでは、Jota+という非常に優れたテキストエディタが使えます。定型文で日付時間を定義できるので、ショートカットとツールバーにファイル先頭ジャンプと定型文1を設定して使っています。
PCでは、テキストエディタのマクロで設定していました。秀丸やemacsやmeryや諸々設定していました。今はVSCodeです。ショートカットでさくっと書き始められるようにするのがPCの初期設定の一部となっていました。
Jota+とVSCodeについては不満なく使っていました。ちょっと問題を感じたのは長らく使っていたDropboxが無料プランでは3端末限定になったことでした。OneDriveに移行しました。またGoogle Driveでの運用もできるようにしてみました。
Chromebookを頻繁に使っていたとき、望むような機能のテキストエディタがなく、Shift-JIS padというchromebook向けアプリを自作しました。プラットホームとしてchrome拡張に移行し、SJIS memoとして開発継続しましたが、最終的にchrome拡張のプラットホームのポリシーアップデートでwebアプリへの移行方針となり、公開は終了となりました。
sjismemoは完全に自分用で仕様も自分用でした。いざ使えなくなると、Jota+への依存が非常に強くなりました。Google PlayがきちんとサポートされたAndroidデバイスではもちろんJota+で問題ないのですけれど、Androidベースでもそうでないデバイスもあります。VSCodeはPC的なデバイスなら割と動きますけれど、もちろんインストールや設定は必要です。やっぱり汎用的に動かせる時記用のアプリ、たとえばWebアプリで作るのがいいのかなと思っていました。
会社を退職して、バイブコーディングなどに時間を振り分けられるようになったので、sjismemoをもとに、Claude sonnet4.6と設計を検討しました。その前にGemini proと設計やデザインをしようとしたのですが、思ったほどうまくいきませんでした。かっこよさげなことは提案してくるのですが、実装の確認力が弱くてすぐにエンバグして動かなくなるので捨てて、Claude Codeで一から設計してプロトタイプを試します。
sjismemo同様、Webブラウザにデータを保存するHTML5の機能であるlocalStrageを使えば、ブラウザを閉じても、書いたテキストはそのデバイスで永続的に保存されすぐに続きを書くことができます。ここまではchrome限定ですがsjismemoで実装したことがあるので、1秒ですぐ書き始められ、書いたテキストを失わないというのは実現できることがわかっていました。
localStrageに自動保存するのは良いのですが、複数デバイスをまたいで時記を書きたいです。スマホは常に2台以上持ち歩いています。手ぶらでランニングするときで2台、ポーチやバッグがあれば3台、家などでは常用デバイスだけで10台以上になります。Dropboxはちょっともうやめておいて、OneDriveかGoogle Driveになりますけれど、OneDriveはとにかく同期が遅くて1秒で書き出すと一つのテキストファイルが端末ごとに別バージョンにフォークしてしまうこともしばしばです。今回はGoogle Drive経由で同期することにします。
以前は、クラウドファイルストレージサービスとは、自作のperlスクリプトで同期していました。その後Pythonで書き直しています。メールで追加原稿を送ってマージしたり、一つのテキストファイルとは別に追加専用の別ファイルをマージするような仕組みも作ったりしていましたけれど、ポケット一つの原則から外れていくとトラブルの原因になりがちです。結局一つのファイルを編集するのがトラブル対応の手間を減らせると感じています。
時記(今でいうライフログテキスト)は、
-1秒以内にリアルタイムにテキストを書き起こせる
-自動でタイムスタンプが入る
-ポケット一つの原則
が大事だと思っていて、
そのために自分の使い方としては、
-スマホでもPCでも、常用デバイスですぐ(遅くとも1-2秒で)書き始められる
-一つのテキストファイルにタイムスタンプ付降順で常に冒頭に自動挿入して書き始められる
-一般的なテキストファイルとして保存しいつでもテキストツールで処理でき、アプリやベンダーロックインされない
-クラウドと安定して連携する
-打ったデータは失わない、同期失敗しても後からマージが簡単にできる
-過去データの年ごとの整理が自動ででき、横断的に(備忘録確認的にも十年日記的にも)検索できる
-自分の日記サイトへ自動アップロードでき、公開したくないエントリはアップロードせずローカルだけで保存する
といった機能が必須だと思っています。
Jota+とVSCodeとPythonスクリプトで回している従来の環境も満足していましたけれど、sjismemoを発展的にWebアプリとして作り直したいとは思っていたので、Claude Codeでnovel_downloaderやepub_viewerを作った後で、時記エディタを開発するのは自然な流れで、自分用の仕様で考えていたので迷うこともあまりなく動き出しました。Google Driveとの同期の仕様は調べながらになるのでそこに一番時間がかかっています。
何台ものデバイスで動かして、それぞれのブラウザのlocalStrageに即時保存され保持されています。クラウドにも正本があります。したがって常にマージで動くことになります。打ったテキストを失うことは決してないようにします。同じエントリのバージョン違いが重複することは許容し、ワンタップでいらない方を人間が見て削除すればいいという動きにします。
Google WorkspaceのDrive認証トークンの期限切れについては自動再認証などしますが、HTMLやブラウザを閉じてしまうことも普通の運用と想定していて、localStrageでは全く問題なく保持して即時復元できている一方で、Google Drive接続は認証上の条件が細かくあるので、ユーザーがアクションを起こして接続するという手間がかかる分、よくわからないセキュリティ上の設定をユーザーに強いることを避けるようにします。具体的には、edjiki.htmlを開いたら、トップバーに自動で表示するdrive接続ボタンをタップすればdrive認証して接続するという形にします。全自動でないのは、クラウドの更新は今はしないでlocalStrageのテキストを確認したいときや、driveに同期しないテキストを推敲したりといった用途にも使えるようにしています。一方driveに接続ボタンをタップしたら設定しておけば自動保存が(100文字打つか10秒手が止まっているかなどの条件で)走るので、ローカルな保存だけでなく、driveへの保存についても最初のタップ以降の手間はなくなります。スマホで打っていてトンネルや山間などの圏外では、保存失敗ボタンを表示して圏内になったらタップすればすぐにクラウド保存できるようにもしています。
テキストファイルの書式については、タイムスタンプ降順というのが仕様です。これは勝手な基本仕様です。
また、非公開エンントリについては、LXのときに個人的にやっていた時刻の前にマイナス記号を挿入しておくという独自の印を互換機能として残しています。一方で、タイムスタンプについてはISO 8601という規格があって、YYYY-MM-DDThh:mm:dd+09:00のような決まった書式があるので、この場合はタイムスタンプ文字列の直後に「*」を挿入することで非公開エントリとする独自拡張としています。非公開エントリ機能を使わない場合は、ISO 8601通りにできますし、非公開エントリ機能を使わないならパスワード設定も不要です。そもそもテキストファイルダウンロードやdrive保存では平文で保存されますから、テキストファイルを読めれば非公開エントリもすべて見え、テキストファイル用ツールは普通に使えるようになっています。ブラウザのlocalStrageでは暗号化して保存していますので、edjiki上ではパスワードがないと非公開エントリは読めません。driveに平文で保存されたテキストファイルは、Google Drive側で公開しないように運用すればいいという考え方になります。
そんなこんなで、 edjiki が動き出しました。
MITライセンスなので、githubからソース(このアプリはHTMLファイル「edjiki.html」ひとつだけです。他は単にドキュメントです)をダウンロードして、たとえばPCのCドライブでも、Androidスマホのダウンロードファルダでも、そのままブラウザで開けばlocalStrageで動きます。
Google Driveとの連携のためには、Googleの規定する方法で設定する必要があり、file://では動かないという制約がありますので、自宅PCでもなんでもいいのでWebサーバー上にedjiki.htmlを置いて動かさないといけませんが、Webサイトの作成経験があれば好きに運用可能で、自分用にカスタマイズしたりもMITライセンスなので自由自在です。
といっても面倒でしょうから、ayati.comにサンプルを設置しました。
https://www.ayati.com/edjiki/edjiki.html
ここに設置したedjikiを使って入力した時記データは、基本的にはユーザーのブラウザのloacalStrageというブラウザが使う保存領域に全自動保存されます。必要な場合は、ローカルにテキストファイルとしてダウンロードしたり、設定画面からGoogle Driveとの連携ができるようになっています。
Google Driveとの連携は、driveのどのフォルダに時記テキストファイルを保存するかをURLで指定し、フォルダ内のどのテキストファイルを編集するかをURLで指定することで可能になります。
drive自動保存ボタンをONにすれば、一々クラウド保存ボタンを押さなくても自動保存が走ります。いや一々クラウドにアップロードボタンを押すのも明瞭で、悪い運用ではないと思います。
ひとつのテキストファイル冒頭に次々追加するので、テキストファイルはだんだん大きくなります。chromeで10MB、safariでは5MBの制限があります。実はテキストファイルで5MB書くのは簡単ではなく、400字詰め原稿用紙4166枚も書いても5MB弱です。とはいえ、10年日記を保存できなさそうですので、年ごとに整理して切りすてる必要があると思います。というか、今までそうやって年ごとのテキストファイルを作成してアーカイブとして運用してきました。
edjikiにも、年単位でテキストファイルのアーカイブを自動で作成する機能を実装しました。drive設定で、アーカイブ(年ごとに切り分けた時記テキストファイルを保存する)フォルダをURLで指定すれば、drive設定画面でアーカイブして切りすてのボタンを押せるようになります。jk2025.txtやjk2024.txtといったテキストファイルが生成されます。
ついでに検索機能も拡張して、このアーカイブフォルダの年ごとのテキストファイルからも検索できる機能をedjikiに追加しました。
手持ちのテキストファイルからの取り込み機能もあるのですが、個人的に必要な機能として、UTF-8だけでなく、取込はシフトJISのテキストファイルも自動で変換して取り込むことができるようにしました。HP200LXで打って、そのファイルを取り込むためです。もちろん、すべてのテキストファイルの処理は(上書きではなく)すべて自動マージで処理しますから、エントリが失われることはありません。
こんな感じで、自分用にとても便利な時記エディタedjikiが作られました。
ついでに、今まで自作のPythonスクリプトをいくつか組み合わせて運用していたのですが、タイムスタンプ降順テキストファイルからはてなブログへの投稿をできるPythonスクリプトも新たに作成しなおしました。以前は過去のエントリを再投稿すると二重に登録されたり順番が前後したりしていましが、日付を指定して更新できるようにしました。昔ははてなダイアリーに結城さんのPerlスクリプトでやっていたようなことをできるようになりました。
この uphatena も公開しています。仕様は本当に自分用になりますが、MITライセンスなので好きにいじってもらえばいいと思います。
自作Perlスクリプトをいくつも作ってつなげて処理していたことが、edjiki(とuphatena)できれいに処理できるようになって、トラブルも減りメンテナンスも楽になりました。
edjikiでいつでもどこでもなんででも書けるようになったので、時記をくだらないどうでもいいことでも書き起こせるようになりました。
完全に自分のためのものですが、なかなか楽しいものです。本当に便利な世の中になったものです。そして、仕事辞めて時間を取れるようにして本当によかったと思います。ぷーたろうになったので収入はゼロですけれど、貯金を溶かしながら楽しく生活できていて、満足です。




























最近のコメント