SimplyNote – テキストメモ管理システム –

開発のきっかけ

Simplenoteというサービスをご存知でしょうか

Simplenote
The simplest way to keep notes. Light, clean, and free. Simplenote is now available for iOS, Android, Mac, and the web.

結構前からあるサービスでして、まあなんてことはない無料のオンラインメモのサービスです。
WebUI・Windows・Androidなど多プラットフォームのクライアントがあり、要はどこからでもサーバ上に保存された同じメモ帳が閲覧&編集できるというやつです。類似のサービスはいろいろありますが、凝った機能などはほとんどなく、ワタシ的にシンプル・イズ・ベストなのでたいへんお気に入りです。

ですが、ここ数年は開発陣の活発な動きも見られず(単にやることがないだけかもしれませんが)
数年前にセルフホスティング(自鯖で動かすやつ)が出来るようになるとか何とかう噂に心ときめかしていましたが、結局APIキーの提供も未だにされないみたいだしで、やはり企業や他の方が提供するオンラインサービスはサービス終了に怯えながら利用する運命なのでしょうか。(別にSimplenoteがサービス終了とかいう話は知らないですが)

というわけで、数年前から代替のシステムやメモ管理の仕組みを探していまして、
データ保存はクラウドベースで複数プラットフォームで使用可
自鯖のDockerで動かしたい
WebUI・Androidアプリ・vimプラグインがあること
条件的にこのあたりを優先で絞ると以下の二択くらいになりました。

Joplin
・Evernote的でワタシ的にはオーバースペック&クライアント重すぎ
・vimプラグイン無し
・一応使ってはいますが簡単なテキストベースのメモ書きには….という判断

NextCloud+テキストファイル
・使用要件としては◯
・対象とするテキストをNextCloud上の指定フォルダに保存して各クライアントでフォルダを覗くイメージ
・NextCloudのせいなのかAndroidアプリのせいなのか知らんけどしょっちゅうおかしいw
・vimプラグインはあるっちゃある(vimでローカルのフォルダを覗けばいいだけ)
・NextCloud自体が重たい

他にも
・StandardNote
・Memos
・Obsidian
・ :
などありましたが、希望条件を満たさなかったり・機能的にオーバースペックだったり/足りなかったり….
なんかイマイチしっくりこなかったです。



というわけで、自分で作りました

・Docker コンテナ稼働 → OK
・ホストnginxからのサブディレクトリ指定のproxy_pass → OK
・Web UI → JS Reactで作ったOK(デザインはsimplenoteをできるだけぱくtリスペクト)
・vimプラグイン → 作ったOK(EmacsメーラーMew風をぱくtリスペクト)
・Androidアプリ → 作ったOK(デザインはよくあるメモ帳ぽくシンプルに)
・メモ自体の保存バックエンド → まあ使うの数人でしょってことでDBはsqlite。APIの実装はpython FastAPI。
・simplenoteにあったタグ機能&simplenoteになかった添付ファイル機能。

SimplyNote API & WebUI

GitHub - iz69/SimplyNote
Contribute to iz69/SimplyNote development by creating an account on GitHub.

ホストOS上のnginxは以下のproxy_pass設定で動いています
UI側 JS React は npm run build してません dev のままです

# SimplyNote API
location /simplynote-api/ {

    client_max_body_size 0;

    proxy_pass http://127.0.0.1:18888/;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header X-Forwarded-Prefix /simplynote-api;
}

# SimplyNote WebUI
location /simplynote/ {

    client_max_body_size 50M;

    proxy_pass http://127.0.0.1:15173/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-Prefix /simplynote;

    proxy_buffering off;
    proxy_cache off;
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    add_header Expires 0;
}

# 開発環境Vite用リソース
location ~ ^/(favicon\.png|@vite/|src/|@react-refresh|node_modules/) {
    proxy_pass http://127.0.0.1:15173$request_uri;
    proxy_set_header Host $host;
}

SimplyNote vimプラグイン

常用中
要 python (https通信用)

GitHub - iz69/SimplyNote_vim
Contribute to iz69/SimplyNote_vim development by creating an account on GitHub.
"" .vimrc
"" vimスクリプトからhttps接続のためpython要です

set runtimepath+= [[[ autoload/pluginがあるフォルダ ]]]

let g:simplynote_api_url  = 'https://myhost.example.com/simplynote-api/'
let g:simplynote_username = 'username'
let g:simplynote_password = 'password'

cnoreabbrev sl SimplyNoteList
cnoreabbrev sv SimplyNoteSave

SimplyNote Androidアプリ版

Flutter で作ったものを自分で常用中ですが公開は追々….


自分の気分次第で更新継続。。。