TeFWikiとは、ローカルのプレーンテキストのテキストファイルに、マークダウンとWikiLinkを使ったWikiです。名前の由来はTExt File WIKIから。

特徴

  • 単一フォルダ内のプレーンテキストのみ、メタデータ無し
  • markdown + 大かっこによるWikiLink (ex. [[何かのリンク]])
  • モダンなCSSによるレンダリング (bulma.css)
  • スマホとPCのアプリ
    • PC版webサーバー要らずの単独のアプリ(ElectronでMacとWindowsで動作確認済み)
    • Android版はネイティブアプリ
  • 共有手段は特に用意しないので、クラウドストレージのフォルダsyncのアプリを別途使う(自分はAutoSync for Google Driveを使っている)

スクリーンショット

PC版

Mac版スクリーンショット

Mac版、Edit、スクリーンショット

Android版

Android版スクリーンショット

Android版Recentsスクリーンショット

Android版Editスクリーンショット

ダウンロード

今の所、PC版(Mac, Windows)とAndroid版がある。

ソースコードは以下。

WikiLinkの仕様

大かっこ2つでくくった文字列をファイルのbasenameとして、そこに.mdの拡張子をつけたものをファイル名として、そこへのリンクとみなす。 だからリンクにスラッシュとかパスとして使えない文字列は使えない。

例えば [[何かのメモ]]というリンクは、何かのメモ.mdという名前のファイルへのリンクとして扱われる。

その他は基本的にはGithub Flavored Markdownとして処理している。(が自分が使う物しかテストしていない)

セットアップ

最初にTeFWikiのマークダウンを保存していくフォルダを選んでください。 一番最初に使う時は空のフォルダを作って指定してください。 他の端末で作ったデータがある場合はそのフォルダを指定してください。

コンセプト

プレーンテキストのテキストファイルにマークダウンとWikiLinkをPCとスマホで使えるようにする、 で全てなのだけれど、どうしてそんな事を今やっているのか、という話を少ししておきたい。

スマホとPCでメモを共有したい

大前提として、PCとスマホでメモを共有したい。 ローカルのテキストファイル前提のメモというのはいろいろあるけれど、 どうもスマホの扱いがいまいち真剣で無い。

PCで書いたローカルのメモをスマホから見たい。これが一番最初のTeFWiki開発の動機だった。

データ(テキストファイル)が主役、アプリは脇役

メモはサービスやPCやスマホよりも寿命が長い。 今回私が作ったアプリも含めて、それらが動かなくなるよりもきっと長い事メモは残る。

スマホやノートPCの次に人々が何を使っているかは分からないけれど、たぶんテキストファイルは見る事が出来るし、ファイルという単位も有効と思われる。 だからテキストファイルにマークダウン、というのは、メモを蓄積するのに耐えうる保存形態だと思う。

メモのアプリはテキストファイルを生み出していくためのツールであって、 メモを内部に保持するものでは無い。 生み出されたテキストファイルはメモのアプリを超えて価値を持ち続ける。

サービスの寿命の都度エクスポートとかをするのも面倒なので、最初からテキストデータがGoogleDriveとか普段使っているクラウドストレージに残ってほしい。

PCやスマホを買い替えた時にすぐに使える

ローカルにサーバーをインストールして使うタイプのものは、PCを買い替えた時などに面倒になって失われたりしがち。 独自データベースのものは、そのままでは乗り換えが難しい。

PC版は、バイナリ一つ入れれば使えるスタンドアローンのアプリの方が環境構築が楽なので、webサーバーにはせずにElectronで作った。 Electronなら別のマシンに乗り換える時にもバイナリを入れ直すだけで済むし、 新しいOSに乗り換える時でもそこでビルドすれば大した手間無くバイナリを作れるだろう。 プログラム言語の環境やDB、サーバーなどの環境構築は必要無い。

スマホもマスターのデータをGoogleDriveに持っておいてdata下のプライベートな領域にほとんど何も保存しない(ルートとして使うディレクトリのUriだけ保存している)ので、フォルダシンクの設定をしてwikiのディレクトリを設定するだけですぐ使い始められる。 パスワードを入れるのはGoogle Driveだけで、これはどうせ設定するし、フォルダシンクはアカウントマネージャー経由で許可を出すだけなので何かのアカウントのログインの設定とかを別途する必要は無い。

どんな時でも使える

メモは突然見たくなったり書く必要が出てきたりする。その瞬間にサービスが不安定になったりアプリがバグったりしていると凄く困る。 そういった時にも、最悪テキストエディタで開ける、というフォールバック手段があれば、ほぼいつでも最低限使う事は出来る。

別のアプリを組み合わせられるオープンな仕組み

ローカルDBに変なメタデータを管理したりもしない。PCでvimやVS Codeで外部から編集しても壊れないような物にしたい。 何をしても平気なのかを、プログラマならちゃんと分かるようなオープンな構造にしたかった。 例えば別のフォルダにあるgithub pagesのjekyllマークダウンをハードリンクしてホームからWikiLinkを貼る、 みたいな事で書きかけのブログ記事をスマホから推敲したり出来る。 投稿が終わったらハードリンクを削除してWikiLinkを消して問題が無い、という事が明らかなシステムにしたかった。

目的に応じて、markdownをバックエンドにしたアプリを組み合わせられるようにしたかった。 例えば音声認識でテキストとしてメモを入力していくアプリとか、twitterのようなUIでメモを追記していくアプリとか、 markdownを用いたToDoアプリとか、ブックマークの共有アプリなどのような物を、同じデータの上に作っていけるような物にしたかった。

だからデータはローカルのプレーンテキストファイルで、ネットワーク周りは切り離す事にした。 syncの一手間が掛かるが、その分アプリとしては通常のStorage Access Frameworkにさえ対応すれば、特別な処理は必要無い。 TeFWikiにはbetしなくても、プレーンテキストのmarkdownを使う、という選択くらいならしても良い気になる人は居るだろう。

あまり独自な拡張を入れず、なるべくプレーンな構造だけで頑張る、というのもそのような背景から。

アプリとしても、あまり一つで多くはしすぎずに、なるべく複数のアプリを組み合わせて使えるようにしたかった。 syncを外部アプリに任せるのもよりUnix的に組み合わせて使っていきたいという思いから。 嬉しい副作用として、TeFWikiのAndroid版は、凄く権限少なく動く。必要なpermissiionはなんと無し。 インターネットアクセスもストレージ読み書きの権限も必要無し(Storage Access Frameworkでユーザーが付与する権限だけで動く)。

とはいっても最初にいろんなアプリを入れて設定していくのは大変なので、 まずはTeFWikiアプリとフォルダsyncだけ設定すればスマホとPCでメモを共有して使って行ける、という物を提供しようと考えた。

その上でPCだけ何か他のアプリを導入したり書いたり、またはスマホだけ何かのアプリを導入したり書いたりして、 部分部分で機能をちょっとずつ足していけるような形にしたかった。

マークダウンのエディタもスマホ向きな物など欲しい所だけれど、そういった物はTeFWikiアプリに組み込むのでは無く、 外部アプリとして作っていきたいと思っている。

今風の見た目、今風の作り

テキストファイルが良い、と思う人は世の中にそれなりに居ると思うのだけど、そういう人のスマホアプリは見た目を頑張らない傾向がある。 自分もその一人という自覚はある。

だが、日々使っていくならもうちょっと今っぽい見た目になっていて欲しい。 h1とか綺麗に表示されて欲しいし、ブロックとかも綺麗に出て欲しい。この辺TeFWikiはBulma: the modern CSS framework that just works.を使ってうまく実現出来ていると思っている。その辺の判断はスクリーンショットを見て皆様にしてもらいたい所だが。

リンクを辿ったらブラウザのタブで開いて欲しい。 PCやスマホで見る時も、キーボードじゃなくてコーヒー片手にタッチパッドとかタッチでブラウズしていけるような物になっていて欲しい。

見た目だけじゃなくて、アプリの作りとしてもイマドキであって欲しい。 Androidとしては、UIはマテリアルデザインで普通の物であって欲しいし、 ちゃんとStorage Access Frameworkに対応してファイルを読み書き出来て欲しい。 今後サポートが打ち切られそうなレガシーな読み書きの仕組みじゃなくて、2021年現在で普通のやり方であって欲しい。 次の機種に乗り換える時には使えなくなってそうなアプリを今から使っていくのは嫌だ。

プレーンテキストである、という事と、アプリとして今風である事は両立出来ると思っている。