Buku について
Buku は強力なブックマークマネージャーで、全文検索、タグ組織化、インポート/エクスポート機能を備えています。すべてのブックマークはローカルデータベースに保存され、コマンドラインから高速アクセスできます。
主な機能
- 01ブックマークを追加・検索・取得する
- 02タグを使用してブックマークを整理・分類する
- 03ブラウザからブックマークをインポートまたはリストにエクスポートする
活用シーン
- 01技術ドキュメントと参照資料を整理する開発者
- 02ワークフロー関連のリソースリンクを保存・検索するコーディングエージェント
インストール
OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。
インストール後にbuku --versionを実行して確認します。
コマンド例
よく使うコマンドを使う順に並べています。
詳細
buku
bukuの動作画面!
はじめに
bukuは、高機能なブックマークマネージャーであり、個人用のテキストベースのミニウェブです。
GUIを好む方には、bukuserverがローカルのウェブホストサーバー上で閲覧可能なフロントエンドを提供します。設定とスクリーンショットについては、bukuserverのページをご覧ください。
開発を始めたとき、プライベートでポータブル、マージ可能なデータベースと、シームレスなGUI統合を備えた柔軟なコマンドラインソリューションが見つかりませんでした。そこで、bukuを作りました。
bukuでは、ブラウザーからブックマークをインポートしたり、ウェブからURLのタイトル、タグ、説明を取得したりできます。お好みのエディターを使って、ブックマークの追加、作成、更新ができます。正規表現やディープスキャンモード(URLに便利です)など、複数の検索オプションでブックマークをすばやく検索できます。
Wayback Machineでリンク切れを調べることもできます。ランダムなブックマークを再訪するイースターエッグもあります。
トラッキング、隠れた履歴、古いレコード、利用状況の分析、ホームへの送信はありません。
すぐに使い始めるには、クイックスタートセクションをご覧ください。bukuには、非常に充実したドキュメントが用意されています。manページには例が掲載されています。内部の詳細については、運用メモをご覧ください。
bukuはライブラリとしても使えます!ブラウザープラグインを含む、関連プロジェクトがいくつかあります。
目次
特長
- タイトル、タグ、説明を自動取得してブックマークを保存
- Firefox、Google Chrome、Chromium、Vivaldi、Vivaldi Beta (Internal)、Brave、MS Edge から自動インポート
- ブックマークと検索結果をブラウザーで開く
- Wayback Machine からキャッシュされたページを閲覧
- テキストエディターとの連携
- 軽量で見やすいインターフェース、色のカスタマイズ
- 強力な検索オプション(正規表現、部分文字列など)
- 検索中にモードを切り替えられる継続検索
- システム間の同期に使える、ポータブルでマージ可能なデータベース
- HTML、XBEL、Markdown、RSS/Atom、Orgfile から/へのブックマークのインポート/エクスポート
- リダイレクト(>>, >, <<)を使ったスマートなタグ管理
- マルチスレッドによる全 DB の更新
- 手動暗号化に対応
- シェル補完スクリプト、便利な例を掲載した man ページ
- プライバシーに配慮(確認なしにユーザーデータを収集しません)
- Python ライブラリとしても使用可能(API ドキュメント)
- HTTP ベースの API を備えたコンパニオン Web アプリケーション(Bukuserver)を搭載(個人利用のみ)
インストール
依存関係
| 機能 | 依存関係 |
|---|---|
| 言語、SQLite | Python 3.10+ |
| HTTPS | certifi, urllib3 |
| 暗号化 | cryptography |
| HTML | beautifulsoup4, html5lib |
URL をクリップボードにコピーする際、buku は Linux では xsel(または xclip)、OS X では pbcopy(デフォルトでインストール済み)、Windows では clip(デフォルトでインストール済み)、Termux(Android 用のターミナルエミュレーション)では termux-clipboard、Wayland では wl-copy を使用します。X11 がない場合は、GNU Screen または tmux のコピー&ペーストバッファーが認識されます。
パッケージマネージャーから
PyPI からすべての依存関係とともに buku をインストールするには、次を実行します。
# pip3 install buku
パッケージマネージャーから buku をインストールすることもできます。利用可能なバージョンが古い場合は、別のインストール方法をお試しください。
リリースパッケージ
Arch Linux、CentOS、Debian、Fedora、openSUSE Leap、Ubuntu 向けの自動生成パッケージ(CLI コンポーネントのみ)は、最新の安定版リリースから入手できます。
注意:CentOS のリポジトリには python3-beautifulsoup4 パッケージがない場合があります。pip3 を使ってインストールしてください。
ソースから
git がインストールされている場合は、このリポジトリをクローンしてください。そうでない場合は、最新の安定版リリースまたは開発版をダウンロードしてください(不安定です)。
依存関係をインストールします。たとえば Ubuntu では、次のようにします。
$ apt-get install ca-certificates python3-urllib3 python3-cryptography python3-bs4
CLI コンポーネントをデフォルトの場所(/usr/local)にインストールします。
$ sudo make install
削除するには、次を実行します。
$ sudo make uninstall
別の場所にインストールする場合は、PREFIX を指定できます。
スタンドアロンで実行
buku はスタンドアロンのユーティリティです。格納されているディレクトリから、次を実行します。
$ chmod +x buku.py
$ ./buku.py
シェル補完
Bash、Fish、Zsh 用のシェル補完スクリプトは、auto-completion/ の各サブディレクトリにあります。インストール方法については、お使いのシェルのマニュアルを参照してください。
使い方
コマンドラインオプション
usage: buku [OPTIONS] [KEYWORD [KEYWORD ...]]
Bookmark manager like a text-based mini-web.
POSITIONAL ARGUMENTS:
KEYWORD search keywords
GENERAL OPTIONS:
-a, --add URL [+|-] [tag, ...]
bookmark URL with comma-separated tags
(prepend tags with '+' or '-' to use fetched tags)
-u, --update [...] update fields of an existing bookmark
accepts indices and ranges
refresh title and desc if no edit options
if no arguments:
- update results when used with search
- otherwise refresh all titles and desc
-w, --write [editor|index]
edit and add a new bookmark in editor
else, edit bookmark at index in EDITOR
edit last bookmark, if index=-1
if no args, edit new bookmark in EDITOR
-d, --delete [...] remove bookmarks from DB
accepts indices or a single range
if no arguments:
- delete results when used with search
- otherwise delete all bookmarks
--retain-order prevents reordering after deleting a bookmark
-h, --help show this information and exit
-v, --version show the program version and exit
EDIT OPTIONS:
--url keyword bookmark link
--tag [+|-] [...] comma-separated tags
clear bookmark tagset, if no arguments
'+' appends to, '-' removes from tagset
--title [...] bookmark title; if no arguments:
-a: do not set title, -u: clear title
-c, --comment [...] notes or description of the bookmark
clears description, if no arguments
--immutable N disable web-fetch during auto-refresh
N=0: mutable (default), N=1: immutable
--swap N M swap two records at specified indices
SEARCH OPTIONS:
-s, --sany [...] find records with ANY matching keyword
this is the default search option
-S, --sall [...] find records matching ALL the keywords
special keywords -
"blank": entries with empty title/tag
"immutable": entries with locked title
--deep match substrings ('pen' matches 'opens')
--markers search for keywords in specific fields
based on (optional) prefix markers:
'.' - title, '>' - description, ':' - URL,
'#' - tags (comma-separated, PARTIAL matches)
'#,' - tags (comma-separated, EXACT matches)
'*' - any field (same as no prefix)
-r, --sreg expr run a regex search
-t, --stag [tag [,|+] ...] [- tag, ...]
search bookmarks by tags
use ',' to find entries matching ANY tag
use '+' to find entries matching ALL tags
excludes entries with tags after ' - '
list all tags, if no search keywords
-x, --exclude [...] omit records matching specified keywords
--random [N] output random bookmarks out of the selection (default 1)
--order fields [...] comma-separated list of fields to order the output by
(prepend with '+'/'-' to choose sort direction)
ENCRYPTION OPTIONS:
-l, --lock [N] encrypt DB in N (default 8) # iterations
-k, --unlock [N] decrypt DB in N (default 8) # iterations
POWER TOYS:
--ai auto-import bookmarks from web browsers
Firefox, Chrome, Chromium, Vivaldi, Vivaldi
Internal, Brave, Edge
(Firefox profile can be specified using
environment variable FIREFOX_PROFILE;
Firefox profiles directory can be specified using
environment variable FIREFOX_PROFILES_DIR)
-e, --export file export bookmarks to Firefox format HTML
export XBEL, if file ends with '.xbel'
export Markdown, if file ends with '.md'
format: [title](url)
export Orgfile, if file ends with '.org'
format: *[[url][title]] :tags:
export rss feed if file ends with '.rss'/'.atom'
export buku DB, if file ends with '.db'
combines with search results, if opted
-i, --import file import bookmarks from file
supports .html .xbel .json .md .org .rss .atom .db
(.json = Firefox backup; .db = another Buku DB)
-p, --print [...] show record details by indices, ranges
print all bookmarks, if no arguments
-n shows the last n results (like tail)
-f, --format N limit fields in -p or JSON search output
N=1: URL; N=2: URL, tag; N=3: title;
N=4: URL, title, tag; N=5: title, tag;
N0 (10, 20, 30, 40, 50) omits DB index
-j, --json [file] JSON formatted output for -p and search.
prints to stdout if argument missing.
otherwise writes to given file
--colors COLORS set output colors in five-letter string
--nc disable color output
-n, --count N show N results per page (default 10)
--np do not show the subprompt, run and exit
-o, --open [...] browse bookmarks by indices and ranges
open a random bookmark, if no arguments
--oa browse all search results immediately
--default-scheme S if scheme is missing from uri, assume S
when opening in browser (default http)
--replace old new replace old tag with new tag everywhere
delete old tag, if new tag not specified
--url-redirect when fetching an URL, use the resulting
URL from following *permanent* redirects
(when combined with --export, the old URL
is included as additional metadata)
--tag-redirect [tag] when fetching an URL that causes permanent
redirect, add a tag in specified pattern
(using 'http:{}' if not specified)
--tag-error [tag] when fetching an URL that causes an HTTP
error, add a tag in specified pattern
(using 'http:{}' if not specified)
--del-error [...] when fetching an URL causes any (given)
HTTP error, delete/do not add it
--export-on [...] export records affected by the above
options, including removed info
(requires --update and --export; specific
HTTP response filter can be provided)
--reorder order... update DB indices to match specified order
--cached index|URL browse a cached page from Wayback Machine
--offline add a bookmark without connecting to web
--suggest show similar tags when adding bookmarks
--tacit reduce verbosity, skip some confirmations
--nostdin do not wait for input (must be first arg)
--threads N max network connections in full refresh
default N=4, min N=1, max N=10
-V check latest upstream version available
-g, --debug show debug information and verbose logs
SYMBOLS:
> url
+ comment
# tags
PROMPT KEYS:
1-N browse search result indices and/or ranges
R [N] print out N random search results
(or random bookmarks if negative or N/A)
^ id1 id2 swap two records at specified indices
O [id|range [...]] open search results/indices in GUI browser
toggle try GUI browser if no arguments
a open all results in browser
s keyword [...] search for records with ANY keyword
S keyword [...] search for records with ALL keywords
d match substrings ('pen' matches 'opened')
m search with markers - search string is split
into keywords by prefix markers, which determine
what field the keywords is searched in:
'.', '>' or ':' - title, description or URL
'#'/'#,' - tags (comma-separated, partial/full match)
'*' - all fields (can be omitted in the 1st keyword)
note: tag marker is not affected by 'd' (deep search)
v fields change sorting order (default is '+index')
multiple comma/space separated fields can be specified
v! fields update indices in DB to match specified order
r expression run a regex search
t [tag, ...] search by tags; show taglist, if no args
g taglist id|range [...] [>>|>|<<] [record id|range ...]
append, set, remove (all or specific) tags
search by taglist id(s) if records are omitted
n show next page of search results
N show previous page of search results
o id|range [...] browse bookmarks by indices and/or ranges
p id|range [...] print bookmarks by indices and/or ranges
w [editor|id] edit and add or update a bookmark
c id copy URL at search result index to clipboard
DB [name] check existing DB list or switch to another DB
(use full/dir path to switch folders)
'~.' can be used as shortcut for default DB
? show this help
q, ^D, double Enter exit buku
色
buku は色のカスタマイズに対応しています。詳しくは、色のカスタマイズ方法を説明した Wiki ページをご覧ください。
クイックスタート
-
VISUALまたはEDITORを、お好みのエディターを指定するように設定します。VISUALはEDITORより優先されます。 -
便利な機能を付けて、より使いやすいショートカットを作成します。
alias b='buku --suggest' -
ブラウザーからブックマークを自動インポートします。データベースがロックされないよう、事前に該当するブラウザーを終了してください。
b --aiChrome、Chromium、Vivaldi(Internal を含む)、Brave では、自動インポート時に、利用可能な場合はプレーンテキストの
BookmarksファイルとAccountBookmarksファイルの両方を読み込みます。暗号化されたブックマークファイルには対応していません。ブラウザーからブックマークを HTML としてエクスポートし、代わりにエクスポートしたファイルをbuku -i bookmarks.htmlでインポートしてください。 -
ブックマークを手動で追加します(使ってみる場合)。
b -w -
DB インデックス付きでブックマークを一覧表示します。
b -p -
GUI やブラウザーとの連携(またはお好みのブックマーク管理サービスとの同期)については、システム連携に関する Wiki ページを参照してください。
-
fzf でファジー検索し、選択した項目を Firefox で開くための簡単な(bash/zsh)コマンド:
firefox $(buku -p -f 10 | fzf) firefox $(buku -p -f 40 | fzf | cut -f1)ブックマークのプレビューも表示する POSIX スクリプト:
#!/usr/bin/env sh url=$(buku -p -f4 | fzf -m --reverse --preview "buku -p {1}" --preview-window=wrap | cut -f2) if [ -n "$url" ]; then echo "$url" | xargs firefox fi
使用例
-
エディターでブックマークを編集して追加します。
$ buku -w $ buku -w 'gedit -w' $ buku -w 'macvim -f' -a https://ddg.gg search engine, privacy1 つ目のコマンドでは、環境変数
EDITORで指定されたエディターが選択されます。2 つ目のコマンドでは、gedit がブロッキングモードで開きます。3 つ目のコマンドでは、オプション -f を指定した macvim が開き、テンプレートには URL とタグが入力されます。 -
シンプルなブックマークを追加します。
$ buku --nostdin -a https://github.com/ 2648. GitHub: Let’s build from here · GitHub > https://github.com/ + GitHub is where over 94 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and features, power your CI/CD and DevOps workflows, and secure code before you commit it. $ buku --nostdin -a https://github.com/ [ERROR] URL [https://github.com/] already exists at index 2648>:URL、+:コメント、#:タグタイトル、説明、タグはサイトから取得されます。Buku は一意の URL のみを保存するため、URL がデータベースにすでに存在する場合はエラーになります。
-
タグ
search engineとprivacy、コメントSearch engine with perksを付け、ウェブからページタイトルを取得してブックマークを追加します。$ buku -a https://ddg.gg search engine, privacy -c Search engine with perks 336. DuckDuckGo > https://ddg.gg + Alternative search engine with perks # privacy,search engineここで、
>:URL、+:コメント、#:タグです。 -
タグ
search engineとprivacy、変更不可のカスタムタイトルDDGを付けてブックマークを追加します。$ buku -a https://ddg.gg search engine, privacy --title 'DDG' --immutable 1 336. DDG (L) > https://ddg.gg # privacy,search engineURL はタグより前に指定する必要があります。
-
タイトルなしでブックマークを追加します(更新にも使用できます)。
$ buku -a https://ddg.gg search engine, privacy --title -
エディターでブックマークを編集して更新します。
$ buku -w 15012014既存のブックマークの詳細がエディターで開き、編集できるようになります。環境変数
EDITORを設定しておく必要があります。 -
インデックス 15012014 の既存のブックマークについて、新しい URL、タグ、コメントを設定して更新し、ウェブからタイトルを取得します。
$ buku -u 15012014 --url http://ddg.gg/ --tag web search, utilities -c Private search engine -
インデックス 15012014 のブックマークについて、タイトルのみを取得して更新します。
$ buku -u 15012014 -
インデックス 15012014 のブックマークについて、コメントのみを更新します。
$ buku -u 15012014 -c this is a new comment--url、--title、--tag にも適用されます。
-
タグ
tag 1またはtag 2が付いたブックマークを、HTML、XBEL、Markdown、Orgfile、または新しいデータベースにエクスポートします。 $ buku -e bookmarks.html --stag tag 1, tag 2 $ buku -e bookmarks.xbel --stag tag 1, tag 2 $ buku -e bookmarks.md --stag tag 1, tag 2 $ buku -e bookmarks.org --stag tag 1, tag 2 $ buku -e bookmarks.db --stag tag 1, tag 2 検索を指定しない場合、すべてのブックマークがエクスポートされます。 -
HTML、XBEL、Markdown、または Orgfile からブックマークをインポートします:
$ buku -i bookmarks.html $ buku -i bookmarks.xbel $ buku -i bookmarks.md $ buku -i bookmarks.org $ buku -i bookmarks.db -
15012014 のブックマークのコメントのみを削除します:
$ buku -u 15012014 -c--titleと--tagにも適用されます。ブックマークを削除せずに URL だけを削除することはできません。 -
Web からページタイトルを取得してデータベース全体を更新またはリフレッシュします:
$ buku -u $ buku -u --tacit (失敗と例外のみを表示)この操作では、取得したページを解析して、不変でないブックマークのタイトルまたは説明フィールドを更新できます。フィールドは、取得したフィールドが空でない場合にのみ更新されます。タグは変更されません。
-
インデックス 15012014 のブックマークを削除します:
$ buku -d 15012014 Index 15012020 moved to 15012014データベースをコンパクトに保つため、最後のインデックスが削除されたインデックスに移動されます。確認なしで削除するには
--tacitを追加します。 -
すべてのブックマークを削除します:
$ buku -d -
範囲またはリストでブックマークを削除します:
$ buku -d 100-200 $ buku -d 100 15 200 -
URL、タイトル、またはタグにキーワード
kernelとdebuggingのいずれかを含むブックマークを検索します:$ buku kernel debugging $ buku -s kernel debugging -
URL、タイトル、またはタグにキーワード
kernelとdebuggingのすべてを含むブックマークを検索します:$ buku -S kernel debugging -
general kernel conceptsがタグ付けされたブックマークを検索します:$ buku --stag general kernel concepts -
タグ
kernel、debugging、general kernel conceptsのいずれかに一致するブックマークを検索します:$ buku --stag kernel, debugging, general kernel concepts -
タグ
kernel、debugging、general kernel conceptsのすべてに一致するブックマークを検索します:$ buku --stag kernel + debugging + general kernel concepts -
キーワード
helloまたはworldのいずれかに一致し、キーワードrealとlifeを除外し、タグkernelとdebuggingの両方に一致するが、タグgeneral kernel conceptsとbooksを除外するブックマークを検索します:$ buku hello world --exclude real life --stag 'kernel + debugging - general kernel concepts, books' -
フィールドごとに異なるトークンでブックマークを検索し、タグ (昇順) と URL (降順) でソートして出力します
$ buku --order +tags,-url --markers --sall 'global substring' '.title substring' ':url substring' :https '> description substring' '#partial,tags:' '#,exact,tags' '*another global substring' -
すべての一意のタグをアルファベット順に一覧表示します:
$ buku --stag -
検索を実行して結果を更新します:
$ buku -s kernel debugging -u --tag + linux kernel -
検索を実行して結果を削除します:
$ buku -s kernel debugging -d -
キーを生成するためのカスタム反復回数 (15) でデータベースを暗号化または復号します:
$ buku -l 15 $ buku -k 15ロックとロック解除の各インスタンスで同じ反復回数を指定する必要があります。省略した場合のデフォルトは 8 です。
-
インデックス 15012014 と範囲 20-30、40-50 のブックマークの詳細を表示します:
$ buku -p 20-30 15012014 40-50 -
最後の 10 件のブックマークの詳細を表示します:
$ buku -p -10 -
データベース内の実際のインデックスを持つすべてのブックマークを表示します:
$ buku -p $ buku -p | more -
タグ 'old tag' を 'new tag' に置換します:
$ buku --replace 'old tag' 'new tag' -
データベースからタグ 'old tag' を削除します:
$ buku --replace 'old tag' -
インデックス 15012014 のブックマークの既存のタグにタグ 'tag 1'、'tag 2' を追加 (または削除) します: $ buku -u 15012014 --tag + tag 1, tag 2 $ buku -u 15012014 --tag - tag 1, tag 2
-
インデックス 15012014 の URL をブラウザで開きます:
$ buku -o 15012014 -
タイトルもタグもないブックマークを整理用に一覧表示します:
$ buku -S blank -
変更不可のタイトルを持つブックマークを一覧表示します:
$ buku -S immutable -
プロンプトでタグを追加・削除します (タグリストのインデックスが左、ブックマークのインデックスが右):
// append tags at taglist indices 4 and 6-9 to existing tags in bookmarks at indices 5 and 2-3 buku (? for help) g 4 9-6 >> 5 3-2 // set tags at taglist indices 4 and 6-9 as tags in bookmarks at indices 5 and 2-3 buku (? for help) g 4 9-6 > 5 3-2 // remove all tags from bookmarks at indices 5 and 2-3 buku (? for help) g > 5 3-2 // remove tags at taglist indices 4 and 6-9 from tags in bookmarks at indices 5 and 2-3 buku (? for help) g 4 9-6 << 5 3-2 -
色付き出力でブックマークを一覧表示します:
$ buku --colors oKlxm -p -
すべての永続リダイレクトをたどった後にブックマークを追加しますが、サーバーがエラーを返さない (かつネットワーク障害がない) 場合に限ります
$ buku --add http://wikipedia.net --url-redirect --del-error 2. Wikipedia > https://www.wikipedia.org/ + Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation. -
サーバーが永続リダイレクトを返した場合は
http redirectというタグを、エラー応答の場合はhttp 404のような形式のタグを付けてブックマークを追加します:$ buku --add http://wikipedia.net/notfound --tag-redirect 'http redirect' --tag-error 'http {}' [ERROR] [404] Not Found 3. Not Found > http://wikipedia.net/notfound # http 404,http redirect -
検索に一致するすべてのブックマークを更新します。サーバーが永続リダイレクトを返した場合は URL を更新し、サーバーが HTTP エラー 400、401、402、403、404 または 500 を返した場合はブックマークを削除し、その他の HTTP エラーの場合は
http:{}のような形式のタグを追加します。その後、そのような変更の影響を受けたものを HTML ファイルにエクスポートし、削除されたレコードおよびリダイレクトによって置き換えられた古い URL をマークします。$ buku -S ://wikipedia.net -u --url-redirect --tag-error --del-error 400-404,500 --export-on --export backup.html -
ランダムなブックマークを 1 件出力します:
$ buku --random --print -
ランダムなブックマークを 3 件、netloc (降順)、タイトル、url で並べ替えて出力します:
$ buku --random 3 --order ,-netloc,title,+url --print -
検索条件に一致するランダムなブックマークを 1 件出力し、Markdown ファイルにエクスポートします (DB の順序):
$ buku --random -S kernel debugging --export random.md -
レコード #4 と #5 の位置を入れ替えます:
$ buku --swap 4 5 -
すべてのブックマークのインデックスを指定された順序に一致するように更新します:
$ buku --reorder ,-netloc,title,+url -
さらにヘルプ:
$ buku -h $ man buku
自動化
対話的なワークフローは expect を使って自動化できます。Issue #368 に自動インポートを自動化する実例があります。
トラブルシューティング
エディタ連携
デフォルトで 1 つのインスタンスのみを保持し、他のインスタンスからはすぐに戻ってしまう GUI エディタでは問題が発生することがあります。新しいドキュメントを開くときに呼び出し元をブロックするには、適切なエディタオプションを使用してください。gedit については Issue #210 を参照してください。
協力者
Copyright © 2015-2026 Arun Prakash Jana
貢献
必要な機能がありませんか?特定されたタスクをまとめた、随時更新されるToDo リストがあります。貢献を歓迎します!PR ガイドラインに従ってください。
関連プロジェクト
- bukubrow、ブラウザー連携用の WebExtension
- oil、入力と同時に検索できる CLI フロントエンド
- buku_run、rofi フロントエンド
- pinku、Pinboard から buku へのインポートツール
- buku-dmenu、シンプルな bash dmenu ラッパー
- poku、Pocket と buku の間で同期
- Ebuku、buku 用 Emacs インターフェース
- diigoku、Diigo 用 buku インポーター
- BukuBot、拡張ビジュアルインターフェースを備えた XMPP 用チャットボット