{ "version": "https://jsonfeed.org/version/1.1", "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL -- https://matoken.org/blog/tag/activitypub/feed/json -- and add it your reader.", "home_page_url": "https://matoken.org/blog/tag/activitypub", "feed_url": "https://matoken.org/blog/tag/activitypub/feed/json", "language": "ja", "title": "ActivityPub – matoken's blog", "description": "Is there no plan B?", "icon": "https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9.jpeg", "items": [ { "id": "https://matoken.org/blog/?p=5332", "url": "https://matoken.org/blog/2026/03/13/firefox-extension-snapwer/", "title": "Web\u4e0a\u306eActivityPub\u6295\u7a3f\u3092snac\u3067\u4f7f\u3044\u3084\u3059\u304f\u3059\u308bFirefox\u62e1\u5f35\u6a5f\u80fd\u306eSnacWer", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u8efd\u91cfActivityPub server \u306esnac\u7528Firefox addon \u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u3053\u306eAddOn\u4f5c\u8005\u306e\u65b9\u306etoot\u3092snac\u306e\u4f5c\u8005\u304cboost\u3057\u3066\u3044\u305f\u306e\u3067\u77e5\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

Hello #snac users. If you enjoy exploring the Fediverse via the web, you might find this #FirefoxExtension I created helpful. It lets you interact with almost any post more easily. It also works, of course, on Firefox derivates.

\n
\n
\n

Feel free to take a look.

\n
\n\n\n
\n\n
\n
\n

Web\u3067snac\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4fbf\u5229\u306b\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u306e\u3088\u3046\u3067\u3059\uff0e
\n\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

\u4ee5\u4e0b\u304b\u3089Firefox\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u767b\u9332\u3057\u307e\u3059\uff0e

\n
\n\n
\n

\u62e1\u5f35\u6a5f\u80fd\u306e\u8a2d\u5b9a\u304b\u3089\u81ea\u5206\u306esnac\u30a2\u30c9\u30ec\u30b9\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\u3053\u308c\u3067\u6e96\u5099\u5b8c\u4e86\u3067\u3059\uff0e

\n
\n
\n

\"snacwer00\"

\n
\n
\n

\u8a66\u3057\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\uff0eMastodon\u306a\u3069\u306eActivityPub\u306e\u516c\u958b\u6295\u7a3f\u3092\u958b\u304d\u307e\u3059\uff0e\u3059\u308b\u3068\uff0c\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306e\u53f3\u5074\u306bsnac\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

\"snacwer01\"

\n
\n
\n

snac\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u8a2d\u5b9a\u3057\u305f\u81ea\u5206\u306esnac\u3067\u305d\u306e\u6295\u7a3f\u304c\u958b\u304b\u308c\u307e\u3059\uff0e\u3053\u3053\u3067Like\u3084Boost\u306a\u3069\u306e\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0eURL\u3092\u30b3\u30d4\u30fc\u3057\u3066snac\u306b\u6301\u3063\u3066\u3044\u3063\u305f\u308a\u3059\u308b\u3088\u308a\u4fbf\u5229\u3067\u3059 :)

\n
\n
\n

\"snacwer02\"

\n
\n
\n
\u74b0\u5883
\n
\n
\n

SnacWer \u30d0\u30fc\u30b8\u30e7\u30f3 1.0.1

\n
\n
\n
\n
\n
\n
$ dpkg-query -W firefox\nfirefox 148.0.2-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n\n
\n
\n", "content_text": "\u8efd\u91cfActivityPub server \u306esnac\u7528Firefox addon \u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\u3053\u306eAddOn\u4f5c\u8005\u306e\u65b9\u306etoot\u3092snac\u306e\u4f5c\u8005\u304cboost\u3057\u3066\u3044\u305f\u306e\u3067\u77e5\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\nHello #snac users. If you enjoy exploring the Fediverse via the web, you might find this #FirefoxExtension I created helpful. It lets you interact with almost any post more easily. It also works, of course, on Firefox derivates.\n\n\nFeel free to take a look.\n\n\nhttps://addons.mozilla.org/addon/snacwer/\n\n\nSource code:\nhttps://codeberg.org/fidiben/SnacWer\n\n\n\n— unlogged (@unlogged@snac.unlogged.it)\n\n\n\nWeb\u3067snac\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4fbf\u5229\u306b\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u306e\u3088\u3046\u3067\u3059\uff0e\n\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\u4ee5\u4e0b\u304b\u3089Firefox\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\n\n\n\n\nSnacWer \u2013 Firefox (ja) \u5411\u3051\u62e1\u5f35\u6a5f\u80fd\u3092\u5165\u624b\n\n\n\n\n\u62e1\u5f35\u6a5f\u80fd\u306e\u8a2d\u5b9a\u304b\u3089\u81ea\u5206\u306esnac\u30a2\u30c9\u30ec\u30b9\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\u3053\u308c\u3067\u6e96\u5099\u5b8c\u4e86\u3067\u3059\uff0e\n\n\n\n\n\n\u8a66\u3057\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\uff0eMastodon\u306a\u3069\u306eActivityPub\u306e\u516c\u958b\u6295\u7a3f\u3092\u958b\u304d\u307e\u3059\uff0e\u3059\u308b\u3068\uff0c\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306e\u53f3\u5074\u306bsnac\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n\nsnac\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u8a2d\u5b9a\u3057\u305f\u81ea\u5206\u306esnac\u3067\u305d\u306e\u6295\u7a3f\u304c\u958b\u304b\u308c\u307e\u3059\uff0e\u3053\u3053\u3067Like\u3084Boost\u306a\u3069\u306e\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0eURL\u3092\u30b3\u30d4\u30fc\u3057\u3066snac\u306b\u6301\u3063\u3066\u3044\u3063\u305f\u308a\u3059\u308b\u3088\u308a\u4fbf\u5229\u3067\u3059 :)\n\n\n\n\n\n\u74b0\u5883\n\n\nSnacWer \u30d0\u30fc\u30b8\u30e7\u30f3 1.0.1\n\n\n\n\n\n$ dpkg-query -W firefox\nfirefox 148.0.2-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\ntoot\n\n\nunlogged (@unlogged@snac.unlogged.it)\n\n\nmatoken:susie: (@matoken@snac.matoken.org)", "date_published": "2026-03-13T06:45:02+09:00", "date_modified": "2026-03-13T06:45:05+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Firefox", "snac", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5251", "url": "https://matoken.org/blog/2026/02/19/snac-static/", "title": "snac\u306e\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306estatic\u30c7\u30a3\u30ec\u30af\u30c8\u30ea", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

snac\u306e\u305f\u3081\u306e\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092apache2 httpd \u3067\u8a2d\u5b9a\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u8a2d\u7f6e\u5834\u6240\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n\n
\n

\u5b9f\u306f\u8a2d\u5b9a\u305b\u305a\u3068\u3082\u30e6\u30fc\u30b6\u3054\u3068\u306b\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u304d\u3063\u304b\u3051\u306f\u3053\u3061\u3089\uff0e

\n
\n
\n
\n
\n

Use https://snac.rohrmoser.name/social/marcus/s/readme.txt (i.e. add a /s/ between your account id and the file).

\n
\n
\n\n
\n
\n

${SNAC-URL}/${USER}/s/ \u306e\u4e0b\u304c\u4f7f\u3048\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u5b9f\u969b\u306b\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

$ cd ${SNAC-DATA}/user/${USER}/static <.>
\n$ echo test > test <.>
\n$ w3m -dump_extra https://snac.matoken.org/matoken/s/test | grep ^HTTP/ -A99 <.>
\nHTTP/1.1 200 OK
\nDate: Wed, 18 Feb 2026 20:50:37 GMT
\nServer: Apache/2.4.66 (Debian)
\ncontent-type: application/octet-stream
\nx-creator: snac/2.90
\netag: W/”snac-1771444525″
\naccess-control-allow-origin: *
\naccess-control-allow-headers: *
\naccess-control-expose-headers: Link
\nContent-Security-Policy: script-src ;
\ncontent-length: 5
\nConnection: close

\n
\n
\n

test

\n
\n
\n
\n
\n
    \n
  1. \n

    \u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e static \u306b\u79fb\u52d5

    \n
  2. \n
  3. \n

    \u30c6\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210

    \n
  4. \n
  5. \n

    \u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e s \u4ee5\u4e0b\u306e\u8a72\u5f53\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d

    \n
  6. \n
\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067snac server \u306e ${SNAC-DATA}/user/${USER}/static \u4ee5\u4e0b\u306b\u7f6e\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u304c ${SNAC-URL}/${USER}/s/ \u4ee5\u4e0b\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
\ntheme \u3067\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5229\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u304c\uff0ctheme \u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u3082ok \u306a\u3093\u3067\u3059\u306d\uff0e

\n
\n\n
\n
\u74b0\u5883
\n
\n
$ sudo -u snac ~snac/snac2/snac state ~snac/snac-data\nserver: snac.matoken.org (snac/2.90)\nuptime: 1:11:46:03\njob fifo size (cur): 0\njob fifo size (peak): 11\nthread #0 state: waiting\nthread #1 state: waiting\nthread #2 state: waiting\nthread #3 state: waiting\n$ lsb_release -dr\nNo LSB modules are available.\nDescription:    Debian GNU/Linux 12 (bookworm)\nRelease:        12\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "snac\u306e\u305f\u3081\u306e\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092apache2 httpd \u3067\u8a2d\u5b9a\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u8a2d\u7f6e\u5834\u6240\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nsnac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528 \u2013 matoken’s blog\n\n\n\n\n\u5b9f\u306f\u8a2d\u5b9a\u305b\u305a\u3068\u3082\u30e6\u30fc\u30b6\u3054\u3068\u306b\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e\n\n\n\n\u304d\u3063\u304b\u3051\u306f\u3053\u3061\u3089\uff0e\n\n\n\n\nUse https://snac.rohrmoser.name/social/marcus/s/readme.txt (i.e. add a /s/ between your account id and the file).\n\n\n\n— https://comam.es/snac/grunfink/p/1771335084.798855\n\n\n\n${SNAC-URL}/${USER}/s/ \u306e\u4e0b\u304c\u4f7f\u3048\u308b\u3088\u3046\u3067\u3059\uff0e\n\u5b9f\u969b\u306b\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\n$ cd ${SNAC-DATA}/user/${USER}/static <.>\n$ echo test > test <.>\n$ w3m -dump_extra https://snac.matoken.org/matoken/s/test | grep ^HTTP/ -A99 <.>\nHTTP/1.1 200 OK\nDate: Wed, 18 Feb 2026 20:50:37 GMT\nServer: Apache/2.4.66 (Debian)\ncontent-type: application/octet-stream\nx-creator: snac/2.90\netag: W/”snac-1771444525″\naccess-control-allow-origin: *\naccess-control-allow-headers: *\naccess-control-expose-headers: Link\nContent-Security-Policy: script-src ;\ncontent-length: 5\nConnection: close\n\n\ntest\n\n\n\n\n\n\n\u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e static \u306b\u79fb\u52d5\n\n\n\u30c6\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\n\n\n\u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e s \u4ee5\u4e0b\u306e\u8a72\u5f53\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d\n\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067snac server \u306e ${SNAC-DATA}/user/${USER}/static \u4ee5\u4e0b\u306b\u7f6e\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u304c ${SNAC-URL}/${USER}/s/ \u4ee5\u4e0b\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\ntheme \u3067\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5229\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u304c\uff0ctheme \u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u3082ok \u306a\u3093\u3067\u3059\u306d\uff0e\n\n\n\n\nsnac\u306etheme\u3092\u8a2d\u5b9a \u2013 matoken’s blog\n\n\n\n\n\u74b0\u5883\n\n$ sudo -u snac ~snac/snac2/snac state ~snac/snac-data\nserver: snac.matoken.org (snac/2.90)\nuptime: 1:11:46:03\njob fifo size (cur): 0\njob fifo size (peak): 11\nthread #0 state: waiting\nthread #1 state: waiting\nthread #2 state: waiting\nthread #3 state: waiting\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Debian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\nx86_64", "date_published": "2026-02-19T05:51:26+09:00", "date_modified": "2026-02-19T05:51:26+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "bookworm", "Debian", "Linux" ] }, { "id": "https://matoken.org/blog/?p=5181", "url": "https://matoken.org/blog/2026/01/25/snac-2-89/", "title": "\u8efd\u91cfActivityPub Server\u306esnac 2.89\u30ea\u30ea\u30fc\u30b9", "content_html": "
\n
\n
\n

\"susie64

\n
\n
\n

\u8efd\u91cfActivityPub Server \u306esnac 2.89 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n

\n
\n
\n

RELEASE NOTES

\n
\n
\n
\n
\n

## 2.89

\n
\n
\n

Fixed crash in pronouns processing (contributed by byte).

\n
\n
\n

Added counters in the people page (contributed by byte).

\n
\n
\n

New command-line option refresh, to refresh all follower and following Actor objects, marking them as broken if they are.

\n
\n
\n\n
\n\n
\n

\u4eca\u56de\u306e\u65b0\u6a5f\u80fd\u306f2\u3064\uff0e

\n
\n
\n
    \n
  • \n

    people \u30da\u30fc\u30b8\u306b\u30ab\u30a6\u30f3\u30bf\u30fc\u3092\u8ffd\u52a0

    \n
  • \n
\n
\n
\n

\"snac

\n
\n
\n
    \n
  • \n

    \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u30d5\u30a9\u30ed\u30ef\u30fc\u3068\u30d5\u30a9\u30ed\u30fc\u4e2d\u306e\u30a2\u30af\u30bf\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b refresh \u3092\u8ffd\u52a0\uff0e

    \n
  • \n
\n
\n
\n
\n
$ snac | grep refresh\nrefresh {basedir} {uid}              Refreshes all actors\n$ snac snac-data matoken
\n
\n
\n
\n

\u7279\u306b\u554f\u984c\u304c\u306a\u304b\u3063\u305f\u306e\u304b\u4f55\u3082\u51fa\u529b\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n

Debian package \u306f\u307e\u30602.88 \u3067\u3059\uff0e

\n
\n
\n
\n
$ rmadison snac2\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2      | 2.75-2         | stable                    | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1~bpo13+1 | stable-backports          | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1~bpo13+1 | stable-backports-debug    | source\nsnac2      | 2.88-1         | testing                   | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1         | unstable                  | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2      | 2.88-1         | unstable-debug            | source
\n
\n
\n\n
\n
\n", "content_text": "\u8efd\u91cfActivityPub Server \u306esnac 2.89 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink@comam.es) \u4f5c\u8005\u306etoot\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\ngrunfink/snac2: A simple, minimalistic ActivityPub instance written in portable C – Codeberg.org tag 2.89\n\n\n\n\n\n\n\nRELEASE NOTES\n\n\n\n\n## 2.89\n\n\nFixed crash in pronouns processing (contributed by byte).\n\n\nAdded counters in the people page (contributed by byte).\n\n\nNew command-line option refresh, to refresh all follower and following Actor objects, marking them as broken if they are.\n\n\n\n— snac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\nMerge pull request ‘segfault fix’ (#521) from byte/snac2:fix_segfault into master \u00b7 3e95d9639d – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘simple cosmetic counters’ (#519) from byte/snac2:counters into master \u00b7 33b066733e – grunfink/snac2 – Codeberg.org\n\n\nNew command-line option ‘refresh’. \u00b7 d8d40acfd1 – grunfink/snac2 – Codeberg.org\n\n\n\n\n\u4eca\u56de\u306e\u65b0\u6a5f\u80fd\u306f2\u3064\uff0e\n\n\n\n\npeople \u30da\u30fc\u30b8\u306b\u30ab\u30a6\u30f3\u30bf\u30fc\u3092\u8ffd\u52a0\n\n\n\n\n\n\n\n\n\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u30d5\u30a9\u30ed\u30ef\u30fc\u3068\u30d5\u30a9\u30ed\u30fc\u4e2d\u306e\u30a2\u30af\u30bf\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b refresh \u3092\u8ffd\u52a0\uff0e\n\n\n\n\n\n$ snac | grep refresh\nrefresh {basedir} {uid} Refreshes all actors\n$ snac snac-data matoken\n\n\n\n\u7279\u306b\u554f\u984c\u304c\u306a\u304b\u3063\u305f\u306e\u304b\u4f55\u3082\u51fa\u529b\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\nDebian package \u306f\u307e\u30602.88 \u3067\u3059\uff0e\n\n\n\n$ rmadison snac2\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2 | 2.75-2 | stable | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1~bpo13+1 | stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1~bpo13+1 | stable-backports-debug | source\nsnac2 | 2.88-1 | testing | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1 | unstable | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2 | 2.88-1 | unstable-debug | source\n\n\n\n\n\nsnac2 – Debian Package Tracker", "date_published": "2026-01-25T19:16:05+09:00", "date_modified": "2026-01-25T19:16:10+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5160", "url": "https://matoken.org/blog/2026/01/20/snac-2-88-muted_words-strip_metadata/", "title": "\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u3067\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u3084\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u6a5f\u80fd\u8ffd\u52a0", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n
\n
\n
\n

2.88

\n
\n
\n

If disable_emojireact is set to true in server.json, EmojiReacts (incoming and outgoing) are totally disabled.

\n
\n
\n

New command-line option top_ten, that returns the top ten most popular posts by a user (ordered by the sum of likes and boosts) (contributed by aov).

\n
\n
\n

Added a new set of per-user muted words; if a post contains any of them, it’s hidden behind a dropdown (contributed by byte).

\n
\n
\n

If an account has a metadata named pronouns, it’s shown by the name (contributed by violette).

\n
\n
\n

Mastodon API: children of a post are returned recursively, not just the first level (contributed by violette).

\n
\n
\n

Implemented optional metadata stripping for images and videos using external tools (contributed by Stefano Marinelli).

\n
\n
\n
\n— https://codeberg.org/grunfink/snac2/src/branch/master/RELEASE_NOTES.md#2-88\n
\n
\n
\n

\u305d\u308c\u305e\u308c\u306ecommit \u306f\u3053\u306e\u3042\u305f\u308a\u3067\u3057\u3087\u3046\u304b

\n
\n\n
\n
\n
\n

\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u7121\u52b9\u8a2d\u5b9a

\n
\n
\n

\u4eca\u56de\u306e\u66f4\u65b0\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u306e\u4e2d\u306b disable_emojireact \u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u3053\u308c\u3092 true \u306b\u3059\u308b\u3053\u3068\u3067\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u9001\u53d7\u4fe1\u304c\u7121\u52b9\u5316\u3067\u304d\u307e\u3059\uff0e
\n\u81ea\u5206\u306f\u6709\u52b9\u306b\u3057\u305f\u3044\u306e\u3067\u3053\u306e\u8a2d\u5b9a\u306f\u30b9\u30eb\u30fc\uff0e

\n
\n
\n
\n
$ man doc/snac.8 | grep -A1 disable_emojireact\n       disable_emojireact\n                   If set to true, all EmojiReact support (for input and output) is disabled.
\n
\n
\n
\n
\n
\n

top_ten \u30b3\u30de\u30f3\u30c9

\n
\n
\n

top_ten \u3068\u3044\u3046\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\uff0e\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc\u306e\u3044\u3044\u306d\u3068\u30d6\u30fc\u30b9\u30c8\u6570\u304b\u3089\u6700\u3082\u4eba\u6c17\u306e\u3042\u3063\u305f\u6295\u7a3f\u306e\u30c8\u30c3\u30d710\u304c\u8868\u793a\u3067\u304d\u307e\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u4ef6\u6570\u306b\u3082\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ ./snac2/snac top_ten\nsnac 2.88 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n\ntop_ten {basedir} {uid} [{N}]        Prints the most popular posts\n$ ./snac2/snac top_ten snac-data matoken 5\nhttps://snac.matoken.org/matoken/p/1768641700.668031 1\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768600460.460220 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690681.713879 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690814.893464 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690913.716133 0\u2605 0\u21ba
\n
\n
\n
\n
man doc/snac.1 | grep -A1 top_ten
\n
\n
             top_ten basedir uid [N]\n                     Returns the ids of the top ten (or top N) most popular posts (considering the sum of likes and boosts).
\n
\n
\n
\n
\n
\n

\u30e6\u30fc\u30b6\u30fc\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9

\n
\n
\n

\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u6295\u7a3f\u306b\u8a2d\u5b9a\u30ef\u30fc\u30c9\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u5834\u5408\u96a0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e
\n\u8a2d\u5b9a\u306f\uff0c\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u300cprivate\u300d → \u300cMuted words…​\u300d\u306b\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n
$ man doc/snac.5 | grep muted
\n
\n
       muted/      This directory contains files which names are hashes of muted actors. The content is a line containing the actor URL.  Messages from these actors will be ignored on input and not shown in any timeline.
\n
\n
\n
\n
\n
\n

\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb

\n
\n
\n

\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u5229\u7528\u3057\u3066\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u9664\u53bb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\n\u65e2\u5b9a\u5024\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\uff0cserver.json \u3067 \"strip_exif\": true, \u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff0e
\n\u753b\u50cf\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fImageMagick\u306emogrify \u3092\uff0c\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fffmpeg \u3092\u5229\u7528\u3057\u307e\u3059\uff0e\u5c0e\u5165\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5c0e\u5165\u304c\u5fc5\u8981\u3067\u3059\uff0e
\n\u5916\u90e8\u30c4\u30fc\u30eb\u304c\u30d1\u30b9\u306e\u901a\u3063\u3066\u3044\u306a\u3044\u5834\u6240\u306b\u3042\u308b\u5834\u5408\u306f\uff0cmogrify_path, ffmpeg_path \u3067\u6307\u5b9a\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
server.json \u8a2d\u5b9a\u4f8b
\n
\n
    \"strip_exif\": true,\n    \"mogrify_path\": \"/usr/local/bin/mogrify\",\n    \"ffmpeg_path\": \"/usr/local/bin/ffmpeg\",
\n
\n
\n
\n

\u5b9f\u969b\u306bexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u306e\u5165\u624b\u3068\u78ba\u8a8d
\n
\n
$ wget https://raw.githubusercontent.com/ianare/exif-samples/refs/heads/master/jpg/Pentax_K10D.jpg\n$ exif Pentax_K10D.jpg\nEXIF tags in '/home/matoken/Downloads/Pentax_K10D.jpg' ('Intel' byte order):\n--------------------+----------------------------------------------------------\nTag                 |Value\n--------------------+----------------------------------------------------------\nManufacturer        |PENTAX Corporation\nModel               |PENTAX K10D\nOrientation         |Top-left\nX-Resolution        |350\nY-Resolution        |350\nResolution Unit     |Inch\nSoftware            |GIMP 2.4.5\nDate and Time       |2008:07:31 15:56:49\nCopyright           |Laitche (This file is in the public domain.) (Photographer\nXP Author           |www.laitche.com\nCompression         |JPEG compression\nX-Resolution        |72\nY-Resolution        |72\nResolution Unit     |Inch\nExposure Time       |1/180 sec.\nF-Number            |f/11.0\nExposure Program    |Aperture priority\nISO Speed Ratings   |200\nExif Version        |Exif Version 2.21\nDate and Time (Origi|2008:05:04 16:47:24\nDate and Time (Digit|2008:05:04 16:47:24\nExposure Bias       |0.00 EV\nMetering Mode       |Pattern\nFlash               |Flash did not fire, compulsory flash mode\nFocal Length        |90.0 mm\nFlashPixVersion     |FlashPix Version 1.0\nColor Space         |sRGB\nPixel X Dimension   |100\nPixel Y Dimension   |72\nSensing Method      |One-chip color area sensor\n--------------------+----------------------------------------------------------\nEXIF data contains a thumbnail (1349 bytes).
\n
\n
\n
\n

exif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u6295\u7a3f\u3055\u308c\u305f\u753b\u50cf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u78ba\u8a8d\u3059\u308b\u3068exif \u306f\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ wget http://127.0.0.1:8001/test/s/post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\n$ exif ./post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\nCorrupt data\nThe data provided does not follow the specification.\nExifLoader: The data supplied does not seem to contain EXIF data.
\n
\n
\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
mogrify
\n
\n
            xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -auto-orient -strip \\\"%s\\\" 2>/dev/null\", srv_basedir, mp, r_fn);
\n
\n
\n
\n
ffmpeg
\n
\n
 \t            /* -map_metadata -1 strips all global metadata */\n\t            /* -c copy copies input streams without re-encoding */\n\t            /* we don't silence stderr so we can debug issues */\n\t            /* we explicitly cd to srv_basedir to ensure relative paths work */\n\t            xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -y -i \\\"%s\\\" -map_metadata -1 -c copy \\\"%s\\\"\", srv_basedir, fp, r_fn, tmp_fn);
\n
\n
\n
\n
man doc/snac.8 | grep -A1 metadata
\n
\n
$ man doc/snac.8 | grep strip_exif -A7\n       strip_exif  If  set  to  true,  EXIF and other metadata will be stripped from uploaded images (jpg, png, webp, heic, avif, tiff, gif, bmp) and videos (mp4, m4v, mov, webm, mkv, avi). This requires the mogrify (from ImageMagick) and\n                   ffmpeg tools to be installed. If snac cannot find or execute these tools at startup, it will refuse to run.\n\n       mogrify_path\n                   Overrides the default \"mogrify\" command name or path. Use this if the tool is not in the system PATH or has a different name.\n\n       ffmpeg_path\n                   Overrides the default \"ffmpeg\" command name or path. Use this if the tool is not in the system PATH or has a different name.
\n
\n
\n
\n
\n", "content_text": "\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink@comam.es)\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\n2.88\n\n\nIf disable_emojireact is set to true in server.json, EmojiReacts (incoming and outgoing) are totally disabled.\n\n\nNew command-line option top_ten, that returns the top ten most popular posts by a user (ordered by the sum of likes and boosts) (contributed by aov).\n\n\nAdded a new set of per-user muted words; if a post contains any of them, it’s hidden behind a dropdown (contributed by byte).\n\n\nIf an account has a metadata named pronouns, it’s shown by the name (contributed by violette).\n\n\nMastodon API: children of a post are returned recursively, not just the first level (contributed by violette).\n\n\nImplemented optional metadata stripping for images and videos using external tools (contributed by Stefano Marinelli).\n\n\n\n— https://codeberg.org/grunfink/snac2/src/branch/master/RELEASE_NOTES.md#2-88\n\n\n\n\u305d\u308c\u305e\u308c\u306ecommit \u306f\u3053\u306e\u3042\u305f\u308a\u3067\u3057\u3087\u3046\u304b\n\n\n\n\nAdded emoji categories. \u00b7 de9d546d70 – grunfink/snac2 – Codeberg.org\n\n\nNew command-line option top_ten. \u00b7 99375a7b66 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘user-specified word mutes and matching’ (#518) from byte/snac2:user_mutes into master \u00b7 4a2a05c6a0 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘simple cosmetic counters’ (#519) from byte/snac2:counters into master \u00b7 33b066733e – grunfink/snac2 – Codeberg.org\n\n\nmastoapi: also return children of children. \u00b7 54bb1626d2 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘Implement metadata stripping for uploaded photos and videos’ (#515) from draga79/snac2:master into master \u00b7 3ffdf91a4c – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u7121\u52b9\u8a2d\u5b9a\n\n\n\u4eca\u56de\u306e\u66f4\u65b0\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u306e\u4e2d\u306b disable_emojireact \u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u3053\u308c\u3092 true \u306b\u3059\u308b\u3053\u3068\u3067\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u9001\u53d7\u4fe1\u304c\u7121\u52b9\u5316\u3067\u304d\u307e\u3059\uff0e\n\u81ea\u5206\u306f\u6709\u52b9\u306b\u3057\u305f\u3044\u306e\u3067\u3053\u306e\u8a2d\u5b9a\u306f\u30b9\u30eb\u30fc\uff0e\n\n\n\n$ man doc/snac.8 | grep -A1 disable_emojireact\n disable_emojireact\n If set to true, all EmojiReact support (for input and output) is disabled.\n\n\n\n\n\ntop_ten \u30b3\u30de\u30f3\u30c9\n\n\ntop_ten \u3068\u3044\u3046\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\uff0e\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc\u306e\u3044\u3044\u306d\u3068\u30d6\u30fc\u30b9\u30c8\u6570\u304b\u3089\u6700\u3082\u4eba\u6c17\u306e\u3042\u3063\u305f\u6295\u7a3f\u306e\u30c8\u30c3\u30d710\u304c\u8868\u793a\u3067\u304d\u307e\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u4ef6\u6570\u306b\u3082\u3067\u304d\u307e\u3059\uff0e\n\n\n\n$ ./snac2/snac top_ten\nsnac 2.88 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n\ntop_ten {basedir} {uid} [{N}] Prints the most popular posts\n$ ./snac2/snac top_ten snac-data matoken 5\nhttps://snac.matoken.org/matoken/p/1768641700.668031 1\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768600460.460220 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690681.713879 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690814.893464 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690913.716133 0\u2605 0\u21ba\n\n\n\nman doc/snac.1 | grep -A1 top_ten\n\n top_ten basedir uid [N]\n Returns the ids of the top ten (or top N) most popular posts (considering the sum of likes and boosts).\n\n\n\n\n\n\u30e6\u30fc\u30b6\u30fc\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\n\n\n\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u6295\u7a3f\u306b\u8a2d\u5b9a\u30ef\u30fc\u30c9\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u5834\u5408\u96a0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\u8a2d\u5b9a\u306f\uff0c\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u300cprivate\u300d → \u300cMuted words…​\u300d\u306b\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\n\n$ man doc/snac.5 | grep muted\n\n muted/ This directory contains files which names are hashes of muted actors. The content is a line containing the actor URL. Messages from these actors will be ignored on input and not shown in any timeline.\n\n\n\n\n\n\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\n\n\n\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u5229\u7528\u3057\u3066\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u9664\u53bb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\u65e2\u5b9a\u5024\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\uff0cserver.json \u3067 \"strip_exif\": true, \u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff0e\n\u753b\u50cf\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fImageMagick\u306emogrify \u3092\uff0c\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fffmpeg \u3092\u5229\u7528\u3057\u307e\u3059\uff0e\u5c0e\u5165\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5c0e\u5165\u304c\u5fc5\u8981\u3067\u3059\uff0e\n\u5916\u90e8\u30c4\u30fc\u30eb\u304c\u30d1\u30b9\u306e\u901a\u3063\u3066\u3044\u306a\u3044\u5834\u6240\u306b\u3042\u308b\u5834\u5408\u306f\uff0cmogrify_path, ffmpeg_path \u3067\u6307\u5b9a\u53ef\u80fd\u3067\u3059\uff0e\n\n\nserver.json \u8a2d\u5b9a\u4f8b\n\n \"strip_exif\": true,\n \"mogrify_path\": \"/usr/local/bin/mogrify\",\n \"ffmpeg_path\": \"/usr/local/bin/ffmpeg\",\n\n\n\n\u5b9f\u969b\u306bexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u306e\u5165\u624b\u3068\u78ba\u8a8d\n\n$ wget https://raw.githubusercontent.com/ianare/exif-samples/refs/heads/master/jpg/Pentax_K10D.jpg\n$ exif Pentax_K10D.jpg\nEXIF tags in '/home/matoken/Downloads/Pentax_K10D.jpg' ('Intel' byte order):\n--------------------+----------------------------------------------------------\nTag |Value\n--------------------+----------------------------------------------------------\nManufacturer |PENTAX Corporation\nModel |PENTAX K10D\nOrientation |Top-left\nX-Resolution |350\nY-Resolution |350\nResolution Unit |Inch\nSoftware |GIMP 2.4.5\nDate and Time |2008:07:31 15:56:49\nCopyright |Laitche (This file is in the public domain.) (Photographer\nXP Author |www.laitche.com\nCompression |JPEG compression\nX-Resolution |72\nY-Resolution |72\nResolution Unit |Inch\nExposure Time |1/180 sec.\nF-Number |f/11.0\nExposure Program |Aperture priority\nISO Speed Ratings |200\nExif Version |Exif Version 2.21\nDate and Time (Origi|2008:05:04 16:47:24\nDate and Time (Digit|2008:05:04 16:47:24\nExposure Bias |0.00 EV\nMetering Mode |Pattern\nFlash |Flash did not fire, compulsory flash mode\nFocal Length |90.0 mm\nFlashPixVersion |FlashPix Version 1.0\nColor Space |sRGB\nPixel X Dimension |100\nPixel Y Dimension |72\nSensing Method |One-chip color area sensor\n--------------------+----------------------------------------------------------\nEXIF data contains a thumbnail (1349 bytes).\n\n\n\nexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u307e\u3059\uff0e\n\n\n\n\n\n\u6295\u7a3f\u3055\u308c\u305f\u753b\u50cf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u78ba\u8a8d\u3059\u308b\u3068exif \u306f\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n$ wget http://127.0.0.1:8001/test/s/post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\n$ exif ./post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\nCorrupt data\nThe data provided does not follow the specification.\nExifLoader: The data supplied does not seem to contain EXIF data.\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\nmogrify\n\n xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -auto-orient -strip \\\"%s\\\" 2>/dev/null\", srv_basedir, mp, r_fn);\n\n\n\nffmpeg\n\n \t /* -map_metadata -1 strips all global metadata */\n\t /* -c copy copies input streams without re-encoding */\n\t /* we don't silence stderr so we can debug issues */\n\t /* we explicitly cd to srv_basedir to ensure relative paths work */\n\t xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -y -i \\\"%s\\\" -map_metadata -1 -c copy \\\"%s\\\"\", srv_basedir, fp, r_fn, tmp_fn);\n\n\n\nman doc/snac.8 | grep -A1 metadata\n\n$ man doc/snac.8 | grep strip_exif -A7\n strip_exif If set to true, EXIF and other metadata will be stripped from uploaded images (jpg, png, webp, heic, avif, tiff, gif, bmp) and videos (mp4, m4v, mov, webm, mkv, avi). This requires the mogrify (from ImageMagick) and\n ffmpeg tools to be installed. If snac cannot find or execute these tools at startup, it will refuse to run.\n\n mogrify_path\n Overrides the default \"mogrify\" command name or path. Use this if the tool is not in the system PATH or has a different name.\n\n ffmpeg_path\n Overrides the default \"ffmpeg\" command name or path. Use this if the tool is not in the system PATH or has a different name.", "date_published": "2026-01-20T07:29:13+09:00", "date_modified": "2026-01-20T07:29:18+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5140", "url": "https://matoken.org/blog/2026/01/12/snac-2-86-2-87/", "title": "\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u306a\u3069\u304c\u8ffd\u52a0\u3055\u308c\u305fsnac 2.86, 2.87", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.86, 2.87 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n

\n
\n
\n

RELEASE NOTES

\n
\n
\n

RELEASE_NOTES.md \u3092\u898b\u308b\u3068\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
\n

2.87

\n
\n
\n

Hide EmojiReacts from muted actors and blocked instances.

\n
\n
\n

2.86

\n
\n
\n

Truncate RSS titles at UTF-8 character boundaries (contributed by lxo).

\n
\n
\n

Link contacts to single-user people pages. Also, user’s posts are shown (contributed by lxo).

\n
\n
\n

Added emoji reactions (contributed by violette).

\n
\n
\n

Mastodon API: Fix for some client notifications (contributed by violette), fix for a status visibility error (contributed by fruye).

\n
\n
\n

If the query variable terse of a public post page is set to anything, no header is shown.

\n
\n
\n

Fixed search failures when the query string has any leading blank.

\n
\n
\n\n
\n
\n
\n
\n

\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3

\n
\n
\n

\u8208\u5473\u6df1\u3044\u65b0\u6a5f\u80fd\u3068\u3057\u3066\u306f\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5bfe\u5fdc\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u306b\u3088\u308aMastodon \u3084Misskey \u306a\u3069\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3068\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u3084\u308a\u53d6\u308a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306fsnac \u3068Misskey \u3067\u305d\u308c\u305e\u308c\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u884c\u3063\u305f\u3068\u304d\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u3059\uff0esnac \u304b\u3089\u306e\u9001\u4fe1\u6642\u306f\u7d75\u6587\u5b57\u306e\u6587\u5b57\u5217\u3092\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n

\"snac\u304b\u3089\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u9001\u4fe1\"
\n\"Misskey\u3078\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u9001\u4fe1\"
\n\"\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u53d7\u4fe1\"

\n
\n
\n

\u4ee5\u4e0b\u306f\u5b9f\u969b\u306e\u6295\u7a3f\uff0e

\n
\n\n
\n

\u3069\u3046\u3082\u3053\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u305f\u5acc\u304c\u3089\u305b\u304c\u767a\u751f\u3057\u305f\u3088\u3046\u3067\u305d\u308c\u306e\u5bfe\u7b56\u3068\u3057\u3066\u30df\u30e5\u30fc\u30c8\u3057\u305f\u30a2\u30af\u30bf\u30fc\u3068\u30d6\u30ed\u30c3\u30af\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u6a5f\u80fd\u304c 2.87 \u3068\u3057\u3066\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n

\u3082\u3057\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u4f7f\u3044\u305f\u304f\u306a\u3044\u5834\u5408\u306f 2.86, 2.87 \u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3067\u7121\u52b9\u306b\u3067\u304d\u308b\u5909\u66f4\u3092\u542b\u3093\u3060\u30ea\u30ea\u30fc\u30b9\u3092\u5f85\u3064\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n\n
\n

\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u767b\u9332\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e

\n
\n\n
\n
\n
\n

RRS \u30bf\u30a4\u30c8\u30eb\u3092UTF-8 \u306e\u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b

\n
\n
\n

RSS \u306etitle \u3092UTF-8 \u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\u306e\u306f\u65e5\u672c\u8a9e\u3067\u6587\u5b57\u5316\u3051\u3059\u308b\u3053\u3068\u304c\u7121\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u4ee5\u4e0b\u3088\u3046\u306b\u3057\u3066\u78ba\u8a8d\u3067\u304d\u305d\u3046\u3067\u3059\u304c\u4fee\u6b63\u524d\u306e2.85 \u3067\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u4e01\u5ea6\u554f\u984c\u306e\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3060\u3063\u305f\u3088\u3046\u3067\u3053\u306e\u3068\u304d\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n
\n
$ curl -s https://snac.kagolug.org/matoken.rss | nkf | xmllint --format - | grep title | head
\n
\n
\n\n
\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9

\n
\n
\n

\u7279\u306b\u554f\u984c\u306a\u304f\u3044\u3064\u3082\u306e\u624b\u9806\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(source)

\n
\n
\n
$ cd $SNAC-SRC\n$ git pull\n$ git checkout 2.87\nPrevious HEAD position was b84b92d Version 2.86 RELEASED.\nHEAD is now at c2b050c Version 2.87 RELEASED.\n$ make\n$ ./snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u snac tar cvf snac2-`date +%F_%T-$$`.tar ~snac/snac-data\n$ sudo -u snac /home/snac/snac2/snac upgrade ~snac/snac-data\n05:52:38 OK\n$ sudo service snac2 start
\n
\n
\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(Debian package)

\n
\n
\n
$ snac | head -2\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n$ sudo apt update\n$ sudo apt upgrade\n$ snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u debian-snac tar cvf snac2-`date +%F_%T-$$`.tar /var/lib/snac2\n$ sudo -u debian-snac snac upgrade /var/lib/snac2\n18:56:22 Linux sandbox not compiled in\n18:56:22 OK\n$ sudo service snac2 start
\n
\n
\n
\n
\n
\n", "content_text": "\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.86, 2.87 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink\\@comam.es) 2.86\n\n\nThe Real Grunfink (@grunfink\\@comam.es) 2.87\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\nRELEASE NOTES\n\n\nRELEASE_NOTES.md \u3092\u898b\u308b\u3068\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n2.87\n\n\nHide EmojiReacts from muted actors and blocked instances.\n\n\n2.86\n\n\nTruncate RSS titles at UTF-8 character boundaries (contributed by lxo).\n\n\nLink contacts to single-user people pages. Also, user’s posts are shown (contributed by lxo).\n\n\nAdded emoji reactions (contributed by violette).\n\n\nMastodon API: Fix for some client notifications (contributed by violette), fix for a status visibility error (contributed by fruye).\n\n\nIf the query variable terse of a public post page is set to anything, no header is shown.\n\n\nFixed search failures when the query string has any leading blank.\n\n\n\n— snac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\n\n\n\u8208\u5473\u6df1\u3044\u65b0\u6a5f\u80fd\u3068\u3057\u3066\u306f\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5bfe\u5fdc\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u306b\u3088\u308aMastodon \u3084Misskey \u306a\u3069\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3068\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u3084\u308a\u53d6\u308a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\u4ee5\u4e0b\u306fsnac \u3068Misskey \u3067\u305d\u308c\u305e\u308c\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u884c\u3063\u305f\u3068\u304d\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u3059\uff0esnac \u304b\u3089\u306e\u9001\u4fe1\u6642\u306f\u7d75\u6587\u5b57\u306e\u6587\u5b57\u5217\u3092\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\n\u4ee5\u4e0b\u306f\u5b9f\u969b\u306e\u6295\u7a3f\uff0e\n\n\n\n\nmatoken (@matoken\\@snac.matoken.org)\n\n\n\u30ce\u30fc\u30c8 | Misskey.io\n\n\n\n\n\u3069\u3046\u3082\u3053\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u305f\u5acc\u304c\u3089\u305b\u304c\u767a\u751f\u3057\u305f\u3088\u3046\u3067\u305d\u308c\u306e\u5bfe\u7b56\u3068\u3057\u3066\u30df\u30e5\u30fc\u30c8\u3057\u305f\u30a2\u30af\u30bf\u30fc\u3068\u30d6\u30ed\u30c3\u30af\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u6a5f\u80fd\u304c 2.87 \u3068\u3057\u3066\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\u3082\u3057\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u4f7f\u3044\u305f\u304f\u306a\u3044\u5834\u5408\u306f 2.86, 2.87 \u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3067\u7121\u52b9\u306b\u3067\u304d\u308b\u5909\u66f4\u3092\u542b\u3093\u3060\u30ea\u30ea\u30fc\u30b9\u3092\u5f85\u3064\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n\n#516 – FR: add a toggle to users’ settings to hide emoji reactions (and the ability to emoji react)? – grunfink/snac2 – Codeberg.org\n\n\n\n\n\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u767b\u9332\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e\n\n\n\n\nsnac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528 \u2013 matoken’s blog\n\n\n\n\n\n\nRRS \u30bf\u30a4\u30c8\u30eb\u3092UTF-8 \u306e\u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\n\n\nRSS \u306etitle \u3092UTF-8 \u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\u306e\u306f\u65e5\u672c\u8a9e\u3067\u6587\u5b57\u5316\u3051\u3059\u308b\u3053\u3068\u304c\u7121\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u4ee5\u4e0b\u3088\u3046\u306b\u3057\u3066\u78ba\u8a8d\u3067\u304d\u305d\u3046\u3067\u3059\u304c\u4fee\u6b63\u524d\u306e2.85 \u3067\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u4e01\u5ea6\u554f\u984c\u306e\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3060\u3063\u305f\u3088\u3046\u3067\u3053\u306e\u3068\u304d\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\n\n$ curl -s https://snac.kagolug.org/matoken.rss | nkf | xmllint --format - | grep title | head\n\n\n\n\n\n#514 – rss.c (rss_from_timeliine) cuts multi-byte characters from item titles – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\n\n\n\u7279\u306b\u554f\u984c\u306a\u304f\u3044\u3064\u3082\u306e\u624b\u9806\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(source)\n\n\n$ cd $SNAC-SRC\n$ git pull\n$ git checkout 2.87\nPrevious HEAD position was b84b92d Version 2.86 RELEASED.\nHEAD is now at c2b050c Version 2.87 RELEASED.\n$ make\n$ ./snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u snac tar cvf snac2-`date +%F_%T-$$`.tar ~snac/snac-data\n$ sudo -u snac /home/snac/snac2/snac upgrade ~snac/snac-data\n05:52:38 OK\n$ sudo service snac2 start\n\n\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(Debian package)\n\n\n$ snac | head -2\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n$ sudo apt update\n$ sudo apt upgrade\n$ snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u debian-snac tar cvf snac2-`date +%F_%T-$$`.tar /var/lib/snac2\n$ sudo -u debian-snac snac upgrade /var/lib/snac2\n18:56:22 Linux sandbox not compiled in\n18:56:22 OK\n$ sudo service snac2 start", "date_published": "2026-01-12T19:42:13+09:00", "date_modified": "2026-01-12T19:43:05+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "bookworm", "Debian", "Linux" ] }, { "id": "https://matoken.org/blog/?p=5033", "url": "https://matoken.org/blog/2025/12/20/snac-bluesky-bridge/", "title": "snac\u3068Bluesky\u9023\u643a", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3068Bluesky \u9023\u643a\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

Bluesky \u306f\u30dd\u30b9\u30c8Twitter \u306e\u4e00\u3064\u3067AT Protocol \u3092\u5229\u7528\u3057\u305f\u5206\u6563\u578bSNS \u3067\u3059\uff0e\u3068\u306f\u3044\u3048\u73fe\u6642\u70b9\u3067\u306fActivityPub \u307b\u3069\u5206\u6563\u3057\u3066\u3044\u308b\u611f\u3058\u306f\u3057\u307e\u305b\u3093\uff0e
\n\u3053\u306eBluesky \u3068fediverse (snac \u306eActivityPub \u3082\u542b\u3080)\u3068Web \u3092\u9023\u643a\u3055\u305b\u308b\u30d6\u30ea\u30c3\u30b8\u3068\u3057\u3066Bridgy Fed \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e
\nBridgy Fed \u3092\u4f7f\u3063\u3066snac \u3068Bluesky \u3092\u9023\u643a\u3057\u3066\u307f\u307e\u3059\uff0c

\n
\n
\n\n
\n
\n

ActivityPub \u304b\u3089\u9023\u643a\u3059\u308b\u306b\u306f https://fed.brid.gy/login \u3067\u8a8d\u8a3c\u5f8c\uff0c\u300cEnable\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3082\u30dc\u30bf\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eMastodon \u3068\u3057\u3066snac \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a8d\u8a3c\u3057\u305f\u306e\u3067\u306a\u306b\u304bAPI \u306e\u9055\u3044\u3084\u4e0d\u8db3\u304c\u3042\u308b\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u308b\u3068\u5225\u306e\u65b9\u6cd5\u3082\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n
\n
\n
\n
if login isn't supported for your fediverse server, search for and follow @bsky.brid.gy@bsky.brid.gy in the fediverse. That account will then follow you back. Accept its follow to make sure your fediverse posts get sent the bridge and make it into Bluesky. You can unfollow it afterward if you want, you'll still stay bridged. (Here's how to disable.)
\n
\n
\n
\n
\n— How do I get started?\n
\n
\n
\n

snac \u306e\u8a72\u5f53\u30a2\u30ab\u30a6\u30f3\u30c8\u3067 @bsky.brid.gy@bsky.brid.gy \u3092follow \u3057\u307e\u3059\uff0e\u3059\u308b\u3068\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089follow \u304c\u8fd4\u3055\u308c\u308b\u306e\u3067\u627f\u8a8d\u3059\u308b\u3068\u9023\u643a\u5b8c\u4e86\u3067\u3059\uff0e\u3053\u306e\u5f8c\u306f unfollow \u3057\u3066\u3082\u9023\u643a\u306f\u7dad\u6301\u3055\u308c\u308b\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u3053\u306e\u3068\u304d\u306e\u9023\u643a\u5143\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\uff0c @[user]@[instance] \u306e\u5834\u5408Bluesky \u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30cf\u30f3\u30c9\u30eb\u306f [user].[instance].ap.brid.gy \u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n

\u306a\u306b\u304b\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n

\"snac

\n
\n
\n

Bridgy Fed \u306f\u5358\u306b\u6295\u7a3f\u3092\u8ee2\u9001\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u8fd4\u4fe1\u3084likes, (\u5143\u306e\u6295\u7a3f\u304c\u30d6\u30ea\u30c3\u30b8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f)repost \u306a\u3069\u3082\u9023\u643a\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u5143\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3082\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Which stuff of mine from the fediverse will get bridged?

\n
\n
\n

Once you’ve enabled the bridge, anything that’s fully public and interacts with Bluesky users. This includes your posts, replies, likes, and reposts if the original post was bridged. Posts on Bluesky are limited to 300 characters, so longer posts from the fediverse are truncated and ellipsized. Hashtags, links, link previews, images, videos, and even alt text are also included.

\n
\n
\n
\n— Which stuff of mine from the fediverse will get bridged?\n
\n
\n
\n

\u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306f\uff0cBridgy Fed\u30dc\u30c3\u30c8\u30e6\u30fc\u30b6\u30fc( @bsky.brid.gy@bsky.brid.gy )\u3092\u30d6\u30ed\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

If you’re on the fediverse or Bluesky, and you’ve opted in but now want to opt out, block the Bridgy Fed bot user for the network you want to opt out of. For example, on the fediverse, block @bsky.brid.gy@bsky.brid.gy. On Bluesky, block @ap.brid.gy.

\n
\n
\n

(However, if you’re on a Pixelfed instance, DM the word stop to @bsky.brid.gy@bsky.brid.gy instead. Pixelfed doesn’t yet send the ActivityPub Block activity, so blocking won’t work. Hopefully they’ll fix that soon!)

\n
\n
\n

If you’re on the web, email us from an address at your web site’s domain to show that you own it, or you can put the text #nobridge in the profile on your home page and then update your profile on your user page.

\n
\n
\n

Once you’ve done this, Bridgy Fed will deactivate your bridged profile in that network, and it will no longer bridge any of your posts or interactions there.

\n
\n
\n

You can undo this later and reactivate bridging for your account, but depending on the network, not everything will be perfectly restored. For example, when you disable bridging into the fediverse, the bridged fediverse account is deleted and all followers are disconnected. If you later re-enable it, fediverse users will have to search for your account by address manually to find and follow it again.

\n
\n
\n
\n— How do I opt out and remove my site or account?\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3068Bluesky \u9023\u643a\u306b\u3064\u3044\u3066\uff0e\n\n\n\nBluesky \u306f\u30dd\u30b9\u30c8Twitter \u306e\u4e00\u3064\u3067AT Protocol \u3092\u5229\u7528\u3057\u305f\u5206\u6563\u578bSNS \u3067\u3059\uff0e\u3068\u306f\u3044\u3048\u73fe\u6642\u70b9\u3067\u306fActivityPub \u307b\u3069\u5206\u6563\u3057\u3066\u3044\u308b\u611f\u3058\u306f\u3057\u307e\u305b\u3093\uff0e\n\u3053\u306eBluesky \u3068fediverse (snac \u306eActivityPub \u3082\u542b\u3080)\u3068Web \u3092\u9023\u643a\u3055\u305b\u308b\u30d6\u30ea\u30c3\u30b8\u3068\u3057\u3066Bridgy Fed \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\nBridgy Fed \u3092\u4f7f\u3063\u3066snac \u3068Bluesky \u3092\u9023\u643a\u3057\u3066\u307f\u307e\u3059\uff0c\n\n\n\n\nBridgy Fed\n\n\nBridgy Fed for the fediverse (@ap.brid.gy) \u2014 Bluesky (Bluesky \u30a2\u30ab\u30a6\u30f3\u30c8)\n\n\n\n\nActivityPub \u304b\u3089\u9023\u643a\u3059\u308b\u306b\u306f https://fed.brid.gy/login \u3067\u8a8d\u8a3c\u5f8c\uff0c\u300cEnable\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3082\u30dc\u30bf\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eMastodon \u3068\u3057\u3066snac \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a8d\u8a3c\u3057\u305f\u306e\u3067\u306a\u306b\u304bAPI \u306e\u9055\u3044\u3084\u4e0d\u8db3\u304c\u3042\u308b\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e\n\n\n\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u308b\u3068\u5225\u306e\u65b9\u6cd5\u3082\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nHow do I get started?\n\n\n\n\n\n\n\nif login isn't supported for your fediverse server, search for and follow @bsky.brid.gy@bsky.brid.gy in the fediverse. That account will then follow you back. Accept its follow to make sure your fediverse posts get sent the bridge and make it into Bluesky. You can unfollow it afterward if you want, you'll still stay bridged. (Here's how to disable.)\n\n\n\n\n— How do I get started?\n\n\n\nsnac \u306e\u8a72\u5f53\u30a2\u30ab\u30a6\u30f3\u30c8\u3067 @bsky.brid.gy@bsky.brid.gy \u3092follow \u3057\u307e\u3059\uff0e\u3059\u308b\u3068\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089follow \u304c\u8fd4\u3055\u308c\u308b\u306e\u3067\u627f\u8a8d\u3059\u308b\u3068\u9023\u643a\u5b8c\u4e86\u3067\u3059\uff0e\u3053\u306e\u5f8c\u306f unfollow \u3057\u3066\u3082\u9023\u643a\u306f\u7dad\u6301\u3055\u308c\u308b\u305d\u3046\u3067\u3059\uff0e\n\n\n\u3053\u306e\u3068\u304d\u306e\u9023\u643a\u5143\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\uff0c @[user]@[instance] \u306e\u5834\u5408Bluesky \u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30cf\u30f3\u30c9\u30eb\u306f [user].[instance].ap.brid.gy \u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\u306a\u306b\u304b\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff0e\n\n\n\n\n\nBridgy Fed \u306f\u5358\u306b\u6295\u7a3f\u3092\u8ee2\u9001\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u8fd4\u4fe1\u3084likes, (\u5143\u306e\u6295\u7a3f\u304c\u30d6\u30ea\u30c3\u30b8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f)repost \u306a\u3069\u3082\u9023\u643a\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u5143\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3082\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\nWhich stuff of mine from the fediverse will get bridged?\n\n\nOnce you’ve enabled the bridge, anything that’s fully public and interacts with Bluesky users. This includes your posts, replies, likes, and reposts if the original post was bridged. Posts on Bluesky are limited to 300 characters, so longer posts from the fediverse are truncated and ellipsized. Hashtags, links, link previews, images, videos, and even alt text are also included.\n\n\n\n— Which stuff of mine from the fediverse will get bridged?\n\n\n\n\u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306f\uff0cBridgy Fed\u30dc\u30c3\u30c8\u30e6\u30fc\u30b6\u30fc( @bsky.brid.gy@bsky.brid.gy )\u3092\u30d6\u30ed\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nIf you’re on the fediverse or Bluesky, and you’ve opted in but now want to opt out, block the Bridgy Fed bot user for the network you want to opt out of. For example, on the fediverse, block @bsky.brid.gy@bsky.brid.gy. On Bluesky, block @ap.brid.gy.\n\n\n(However, if you’re on a Pixelfed instance, DM the word stop to @bsky.brid.gy@bsky.brid.gy instead. Pixelfed doesn’t yet send the ActivityPub Block activity, so blocking won’t work. Hopefully they’ll fix that soon!)\n\n\nIf you’re on the web, email us from an address at your web site’s domain to show that you own it, or you can put the text #nobridge in the profile on your home page and then update your profile on your user page.\n\n\nOnce you’ve done this, Bridgy Fed will deactivate your bridged profile in that network, and it will no longer bridge any of your posts or interactions there.\n\n\nYou can undo this later and reactivate bridging for your account, but depending on the network, not everything will be perfectly restored. For example, when you disable bridging into the fediverse, the bridged fediverse account is deleted and all followers are disconnected. If you later re-enable it, fediverse users will have to search for your account by address manually to find and follow it again.\n\n\n\n— How do I opt out and remove my site or account?", "date_published": "2025-12-20T21:53:53+09:00", "date_modified": "2025-12-20T21:53:59+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Bluesky", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5024", "url": "https://matoken.org/blog/2025/12/19/implementing-post-bots/", "title": "snac\u306e\u81ea\u52d5\u6295\u7a3f\u6a5f\u80fd", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306ebot \u5411\u3051\u6295\u7a3f\u6a5f\u80fd\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

bot \u3084\u30a2\u30ca\u30a6\u30f3\u30b9\u306a\u3069\u5411\u3051\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u81ea\u52d5\u6295\u7a3f\u3092\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u4f8b\u3048\u3070\u3044\u307e\u8003\u3048\u3066\u3044\u308b\u306e\u306fCalDav \u304b\u3089\u4eca\u65e5\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u6295\u7a3f\u3059\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\uff0e\u73fe\u5728\u306fWebhook \u7d4c\u7531\u3067Discord \u306bpost \u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3059\uff0e
\nsnac \u3067\u3082\u3044\u304f\u3064\u304b\u81ea\u52d5\u6295\u7a3f\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Implementing post bots

\n
\n
\n

snac makes very easy to post messages in a non-interactive manner. This example posts a string:

\n
\n
\n

uptime | snac note $SNAC_BASEDIR $SNAC_USER –

\n
\n
\n

You can setup a line like this from a crontab(5) or similar. Take note that you need a) command-line access to the same machine that hosts the snac instance, and b) write permissions to the storage directories and files.

\n
\n
\n

You can also post non-interactively using the Mastodon API and a command-line http tool like curl(1) or similar. This has the advantage that you can do it remotely from any host, anywhere; the only thing you need is an API Token. This is an example:

\n
\n
\n

curl -X POST https://$SNAC_HOST/api/v1/statuses \\
\n–header “Authorization: Bearer ${TOKEN}” -d “status=$(uptime)”

\n
\n
\n

You can obtain an API Token by connecting to the following URL:

\n
\n\n
\n
\n— man(1) \u3088\u308a\n
\n
\n
\n
\n
\n
\n
note basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Enqueues a Create + Note message to all followers. If the text argument is -e, the external editor defined by  the  EDITOR  environment  variable\n        will  be invoked to prepare a message; if it's - (a lonely hyphen), the post content will be read from stdin.  The rest of command line arguments\n        are treated as media files to be attached to the post. The LANG environment variable (if defined) is used as the post language. An  optional  URL\n        to  a  Fediverse post, prefixed by -r, can be specified for this note to be a reply to. If a date in YYYYmmddHHMMSS format is followed by -d, the\n        note is scheduled for that moment instead of immediately posted (this date must be in the same timezone the user has configured in the web UI).
\n
\n
\n
\n
\n
note_unlisted basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Like the previous one, but creates an \"unlisted\" (or \"quiet public\") post.
\n
\n
\n
\n
\n
note_mention basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Like the previous one, but creates a post only for accounts mentioned in the post body.
\n
\n
\n
\n
\n
block basedir instance_url
\n
\n
\n
\n
\n— man(1) \u3088\u308a\n
\n
\n
\n
\n
\n

snac note \u30b3\u30de\u30f3\u30c9\u3067\u306e\u6295\u7a3f

\n
\n
\n

snac \u306e\u52d5\u4f5c\u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u3067\u3042\u308c\u3070\u304a\u624b\u8efd\u306asnac \u306enote \u30b3\u30de\u30f3\u30c9\u304c\u3042\u308a\u307e\u3059\uff0e
\nman(1) \u306b\u3042\u308b\u4f8b\u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

uptime | snac note $SNAC_BASEDIR $SNAC_USER –

\n
\n
\n
\n
\n
\n
$ uptime | pee \"./snac note snac-test test -\" cat\n 23:32:36 up 4 days, 10:17,  1 user,  load average: 1.56, 1.90, 1.69\n23:32:36 [test] enqueue_message http://127.0.0.1:8001/test/p/1766154756.511450/Create\n8       /\ufffd
\n
\n
\n
\n

\u6295\u7a3f\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u65e5\u672c\u8a9e\u3082\u305d\u306e\u307e\u307e\u3067ok \u3067\u3057\u305f\uff0e

\n
\n
\n

\"snac

\n
\n
\n

pfetch \u3092\u6d41\u3057\u8fbc\u3093\u3067\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u6574\u5f62\u3092\u8003\u3048\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\uff0e

\n
\n
\n

\"snac

\n
\n
\n
\n
\n

curl \u3092\u4f7f\u3063\u3066API \u7d4c\u7531\u3067\u6295\u7a3f

\n
\n
\n

\u3053\u3061\u3089\u306f\u4e00\u822c\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u3067\u6295\u7a3f\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u3059\uff0etoken \u3092\u5165\u624b\u3057\u3066curl \u30b3\u30de\u30f3\u30c9\u3067\u6295\u7a3f\u3057\u307e\u3059\uff0e

\n
\n
\n

\u307e\u305a\u4ee5\u4e0b\u306e\u3088\u3046\u306aURL \u3067token \u3092\u53d6\u5f97\u3057\u307e\u3059\uff0e

\n
\n\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u753b\u9762\u306b\u306a\u308b\u306e\u3067\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u60c5\u5831\u3092\u5165\u624b\u3057\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c8\u30fc\u30af\u30f3\u304c\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u30e1\u30e2\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
\n

1f3ea50e9ab7cc85f5ff01b8f43fb1ae

\n
\n
\n
\n
\n

\u5f8c\u306fcurl \u306a\u3069\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306bPOST\uff0e
\njson \u3067\u8fd4\u308a\u5024\u304c\u5e30\u3063\u3066\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ curl -X POST http://127.0.0.1:8001/api/v1/statuses --header \"Authorization: Bearer 1f3ea50e9ab7cc85f5ff01b8f43fb1ae\" -d \"status=$(uptime)\"\n{\n    \"id\": \"1766155742b0f5ed692a273ff5b6ef59b696ddde76\",\n    \"uri\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n    \"url\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n    \"account\": {\n        \"id\": \"488d5ffe15e31aa0be5002853e8006f7\",\n        \"username\": \"test\",\n        \"display_name\": \"test\",\n        \"discoverable\": true,\n        \"group\": false,\n        \"hide_collections\": false,\n        \"indexable\": true,\n        \"noindex\": false,\n        \"roles\": [\n        ],\n        \"acct\": \"test@127.0.0.1:8001\",\n        \"created_at\": \"2025-11-14T19:38:38Z\",\n        \"last_status_at\": \"2025-12-19\",\n        \"bot\": false,\n        \"note\": \"<br>\",\n        \"url\": \"http://127.0.0.1:8001/test\",\n        \"uri\": \"http://127.0.0.1:8001/test\",\n        \"avatar\": \"http://127.0.0.1:8001/susie.png\",\n        \"avatar_static\": \"http://127.0.0.1:8001/susie.png\",\n        \"header\": \"\",\n        \"header_static\": \"\",\n        \"emojis\": [\n        ],\n        \"locked\": false,\n        \"followers_count\": 0,\n        \"following_count\": 0,\n        \"statuses_count\": 0,\n        \"fields\": [\n        ]\n    },\n    \"created_at\": \"2025-12-19T14:49:02.000Z\",\n    \"content\": \"23:49:02 up 4 days, 10:34,  1 user,  load average: 1.48, 1.57, 1.68<br>\",\n    \"visibility\": \"public\",\n    \"sensitive\": false,\n    \"spoiler_text\": \"\",\n    \"media_attachments\": [\n    ],\n    \"mentions\": [\n    ],\n    \"tags\": [\n    ],\n    \"emojis\": [\n    ],\n    \"favourites_count\": 0,\n    \"favourited\": false,\n    \"reblogs_count\": 0,\n    \"reblogged\": false,\n    \"replies_count\": 0,\n    \"in_reply_to_id\": null,\n    \"in_reply_to_account_id\": null,\n    \"reblog\": null,\n    \"card\": null,\n    \"language\": \"en\",\n    \"filtered\": [\n    ],\n    \"muted\": false,\n    \"text\": \" 23:49:02 up 4 days, 10:34,  1 user,  load average: 1.48, 1.57, 1.68\",\n    \"edited_at\": null,\n    \"poll\": null,\n    \"bookmarked\": false,\n    \"pinned\": false\n}
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306ebot \u5411\u3051\u6295\u7a3f\u6a5f\u80fd\u306b\u3064\u3044\u3066\uff0e\n\n\n\nbot \u3084\u30a2\u30ca\u30a6\u30f3\u30b9\u306a\u3069\u5411\u3051\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u81ea\u52d5\u6295\u7a3f\u3092\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff0e\n\u4f8b\u3048\u3070\u3044\u307e\u8003\u3048\u3066\u3044\u308b\u306e\u306fCalDav \u304b\u3089\u4eca\u65e5\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u6295\u7a3f\u3059\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\uff0e\u73fe\u5728\u306fWebhook \u7d4c\u7531\u3067Discord \u306bpost \u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3059\uff0e\nsnac \u3067\u3082\u3044\u304f\u3064\u304b\u81ea\u52d5\u6295\u7a3f\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nImplementing post bots\n\n\nsnac makes very easy to post messages in a non-interactive manner. This example posts a string:\n\n\nuptime | snac note $SNAC_BASEDIR $SNAC_USER –\n\n\nYou can setup a line like this from a crontab(5) or similar. Take note that you need a) command-line access to the same machine that hosts the snac instance, and b) write permissions to the storage directories and files.\n\n\nYou can also post non-interactively using the Mastodon API and a command-line http tool like curl(1) or similar. This has the advantage that you can do it remotely from any host, anywhere; the only thing you need is an API Token. This is an example:\n\n\ncurl -X POST https://$SNAC_HOST/api/v1/statuses \\\n–header “Authorization: Bearer ${TOKEN}” -d “status=$(uptime)”\n\n\nYou can obtain an API Token by connecting to the following URL:\n\n\nhttps://$SNAC_HOST/oauth/x-snac-get-token\n\n\n\n— man(1) \u3088\u308a\n\n\n\n\n\n\nnote basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Enqueues a Create + Note message to all followers. If the text argument is -e, the external editor defined by the EDITOR environment variable\n will be invoked to prepare a message; if it's - (a lonely hyphen), the post content will be read from stdin. The rest of command line arguments\n are treated as media files to be attached to the post. The LANG environment variable (if defined) is used as the post language. An optional URL\n to a Fediverse post, prefixed by -r, can be specified for this note to be a reply to. If a date in YYYYmmddHHMMSS format is followed by -d, the\n note is scheduled for that moment instead of immediately posted (this date must be in the same timezone the user has configured in the web UI).\n\n\n\n\nnote_unlisted basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Like the previous one, but creates an \"unlisted\" (or \"quiet public\") post.\n\n\n\n\nnote_mention basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Like the previous one, but creates a post only for accounts mentioned in the post body.\n\n\n\n\nblock basedir instance_url\n\n\n\n\n— man(1) \u3088\u308a\n\n\n\n\n\nsnac note \u30b3\u30de\u30f3\u30c9\u3067\u306e\u6295\u7a3f\n\n\nsnac \u306e\u52d5\u4f5c\u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u3067\u3042\u308c\u3070\u304a\u624b\u8efd\u306asnac \u306enote \u30b3\u30de\u30f3\u30c9\u304c\u3042\u308a\u307e\u3059\uff0e\nman(1) \u306b\u3042\u308b\u4f8b\u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\nuptime | snac note $SNAC_BASEDIR $SNAC_USER –\n\n\n\n\n\n$ uptime | pee \"./snac note snac-test test -\" cat\n 23:32:36 up 4 days, 10:17, 1 user, load average: 1.56, 1.90, 1.69\n23:32:36 [test] enqueue_message http://127.0.0.1:8001/test/p/1766154756.511450/Create\n8 /\ufffd\n\n\n\n\u6295\u7a3f\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e\n\n\n\n\n\n\u65e5\u672c\u8a9e\u3082\u305d\u306e\u307e\u307e\u3067ok \u3067\u3057\u305f\uff0e\n\n\n\n\n\npfetch \u3092\u6d41\u3057\u8fbc\u3093\u3067\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u6574\u5f62\u3092\u8003\u3048\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\uff0e\n\n\n\n\n\n\n\ncurl \u3092\u4f7f\u3063\u3066API \u7d4c\u7531\u3067\u6295\u7a3f\n\n\n\u3053\u3061\u3089\u306f\u4e00\u822c\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u3067\u6295\u7a3f\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u3059\uff0etoken \u3092\u5165\u624b\u3057\u3066curl \u30b3\u30de\u30f3\u30c9\u3067\u6295\u7a3f\u3057\u307e\u3059\uff0e\n\n\n\u307e\u305a\u4ee5\u4e0b\u306e\u3088\u3046\u306aURL \u3067token \u3092\u53d6\u5f97\u3057\u307e\u3059\uff0e\n\n\n\n\nhttps://$SNAC_HOST/oauth/x-snac-get-token\n\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u753b\u9762\u306b\u306a\u308b\u306e\u3067\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u60c5\u5831\u3092\u5165\u624b\u3057\u307e\u3059\uff0e\n\n\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c8\u30fc\u30af\u30f3\u304c\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u30e1\u30e2\u3057\u307e\u3059\uff0e\n\n\n\n\n1f3ea50e9ab7cc85f5ff01b8f43fb1ae\n\n\n\n\n\u5f8c\u306fcurl \u306a\u3069\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306bPOST\uff0e\njson \u3067\u8fd4\u308a\u5024\u304c\u5e30\u3063\u3066\u304d\u307e\u3059\uff0e\n\n\n\n$ curl -X POST http://127.0.0.1:8001/api/v1/statuses --header \"Authorization: Bearer 1f3ea50e9ab7cc85f5ff01b8f43fb1ae\" -d \"status=$(uptime)\"\n{\n \"id\": \"1766155742b0f5ed692a273ff5b6ef59b696ddde76\",\n \"uri\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n \"url\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n \"account\": {\n \"id\": \"488d5ffe15e31aa0be5002853e8006f7\",\n \"username\": \"test\",\n \"display_name\": \"test\",\n \"discoverable\": true,\n \"group\": false,\n \"hide_collections\": false,\n \"indexable\": true,\n \"noindex\": false,\n \"roles\": [\n ],\n \"acct\": \"test@127.0.0.1:8001\",\n \"created_at\": \"2025-11-14T19:38:38Z\",\n \"last_status_at\": \"2025-12-19\",\n \"bot\": false,\n \"note\": \"<br>\",\n \"url\": \"http://127.0.0.1:8001/test\",\n \"uri\": \"http://127.0.0.1:8001/test\",\n \"avatar\": \"http://127.0.0.1:8001/susie.png\",\n \"avatar_static\": \"http://127.0.0.1:8001/susie.png\",\n \"header\": \"\",\n \"header_static\": \"\",\n \"emojis\": [\n ],\n \"locked\": false,\n \"followers_count\": 0,\n \"following_count\": 0,\n \"statuses_count\": 0,\n \"fields\": [\n ]\n },\n \"created_at\": \"2025-12-19T14:49:02.000Z\",\n \"content\": \"23:49:02 up 4 days, 10:34, 1 user, load average: 1.48, 1.57, 1.68<br>\",\n \"visibility\": \"public\",\n \"sensitive\": false,\n \"spoiler_text\": \"\",\n \"media_attachments\": [\n ],\n \"mentions\": [\n ],\n \"tags\": [\n ],\n \"emojis\": [\n ],\n \"favourites_count\": 0,\n \"favourited\": false,\n \"reblogs_count\": 0,\n \"reblogged\": false,\n \"replies_count\": 0,\n \"in_reply_to_id\": null,\n \"in_reply_to_account_id\": null,\n \"reblog\": null,\n \"card\": null,\n \"language\": \"en\",\n \"filtered\": [\n ],\n \"muted\": false,\n \"text\": \" 23:49:02 up 4 days, 10:34, 1 user, load average: 1.48, 1.57, 1.68\",\n \"edited_at\": null,\n \"poll\": null,\n \"bookmarked\": false,\n \"pinned\": false\n}", "date_published": "2025-12-19T23:57:13+09:00", "date_modified": "2025-12-19T23:57:14+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5007", "url": "https://matoken.org/blog/2025/12/18/snac-notifigcations/", "title": "snac\u306e\u901a\u77e5\u306b\u3064\u3044\u3066", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306e\u901a\u77e5\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

snac \u306e\u901a\u77e5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u300cnotifications\u300d\u306e\u6a2a\u306b\u6570\u5b57\u3067\u901a\u77e5\u3055\u308c\u307e\u3059\uff0e\u300cnotifications\u300d\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8a73\u7d30\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u3057\u304b\u3057\u3053\u306e\u901a\u77e5\u306fsnac \u306e\u30da\u30fc\u30b8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u306a\u3089\u306a\u3044\u3068\u901a\u77e5\u304c\u308f\u304b\u308a\u307e\u305b\u3093\uff0e
\n\u3057\u304b\u3057\u4ee3\u66ff\u306e\u901a\u77e5\u304c\u3044\u304f\u3064\u304b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u3089\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u307b\u307c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306a\u901a\u77e5\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

e-mail

\n
\n
\n

\u4e00\u822c\u7684\u306ae-mail \u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8a2d\u5b9a\u6e08\u3067\u3042\u308c\u3070\u30e6\u30fc\u30b6\u30fc\u306e\u300cUser Settings…​\u300d\u304b\u3089\u300cEmail address for notifications:\u300d\u306b\u5b9b\u5148\u306ee-main address \u3092\u5165\u529b\u3059\u308b\u308b\u3053\u3068\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e
\n\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u5b9a\u304c\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u308a\uff0c\u5916\u90e8\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408 server.json \u306e\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3082\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n
\n
Email address for notifications\n        If this field is not empty, an email message will be sent to this address whenever a post written by you is liked, boosted or replied to.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n
\n
\n
\n
smtp_url    Since version 2.76, email notifications can be sent via direct connection to an SMTP server instead of the traditional behaviour of piping the mes\u2010\n            sage to /usr/sbin/sendmail.  Set this value to the SMTP url to be used for sending email notifications (for example, smtp://localhost). It may  in\u2010\n            clude a port number if it's not running on the usual one, like in smtp://mail.example.com:587.
\n
\n
\n
\n
\n
smtp_user
\n
\n
\n
\n
\n
smtp_password\n            To be filled if the SMTP server defined by the previous directive needs credentials.
\n
\n
\n
\n
\n— snac(8)\u3088\u308a\n
\n
\n
\n

\"snac

\n
\n
\n
\n
\n

Telegram \u3067\u901a\u77e5

\n
\n
\n

\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eTelegram \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305f\u3060\uff0cTelegram bot \u3092\u4f5c\u6210\u3057\u3066\u5229\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u671f\u8a2d\u5b9a\u304c\u5c11\u3057\u521d\u9762\u5012\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
Telegram notifications\n        To  enable  notifications  via Telegram, fill the two provided fields (Bot API key and Chat id). You need to create both a Telegram channel and a\n        bot for this; the process is rather cumbersome but it's documented everywhere. The Bot API key is a long string of  alphanumeric  characters  and\n        the chat id is a big, negative number.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u4ee5\u524dTelegram bot \u3092Nextcloud \u306eTOTP \u306e\u901a\u77e5\u8a2d\u5b9a\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u66f8\u3044\u305f\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n\n
\n

Telegram bot \u304c\u4f5c\u6210\u3067\u304d\u305f\u3089\u5404\u30e6\u30fc\u30b6\u306e\u300cUser Settings…​\u300d\u306e\u300cTelegram notifications (bot key and chat id):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n

ntfy \u3067\u901a\u77e5

\n
\n
\n

OSS \u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306b\u901a\u77e5\u304c\u3067\u304d\u308bntfy \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066snac \u306e\u901a\u77e5\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff0e

\n
\n\n
\n
\n
\n
\n
ntfy notifications\n        To  enable  notifications  via  ntfy  (both self-hosted or standard ntfy.sh server), fill the two provided fields (ntfy server/topic and, if pro\u2010\n        tected, the token).  You need to refer to the https://ntfy.sh web site for more information on this process.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u3059\u304c\uff0c\u3068\u308a\u3042\u3048\u305antfy.sh \u3092\u5229\u7528\u3057\u3066\u8a66\u3059\u3068\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u300cUser Settings…​\u300d\u306e\u300cntfy notifications (ntfy server and token):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Webhook \u3067\u901a\u77e5

\n
\n
\n

\u8272\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u308bWebhook \u3082\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
Notify webhook\n        If this is set to an URL, an HTTP POST will be sent to it whenever a new notification happens (see the 'Webhook for notifications' section  below\n        for more information).
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u4f8b\u3048\u3070Discord \u3067\u3042\u308c\u3070\uff0c\u300c\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u7de8\u96c6\u300d→\u300c\u9023\u643a\u30b5\u30fc\u30d3\u30b9\u300d→\u300c\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u300d\u3067\u751f\u6210\u3055\u308c\u308bURL \u3092\u5229\u7528\u3057\u3066\u901a\u77e5\u3067\u304d\u307e\u3059\uff0e
\n\u3053\u308c\u3092\u300cUser Settings…​\u300d\u306e\u300cNotify webhook:\u300d\u306b\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n
\n

mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u901a\u77e5

\n
\n
\n

snac \u306fmastodon API \u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305d\u306e\u305f\u3081mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e
\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901a\u77e5\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u901a\u77e5\u3092\u53d7\u3051\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306e\u901a\u77e5\u306b\u3064\u3044\u3066\uff0e\n\n\n\nsnac \u306e\u901a\u77e5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u300cnotifications\u300d\u306e\u6a2a\u306b\u6570\u5b57\u3067\u901a\u77e5\u3055\u308c\u307e\u3059\uff0e\u300cnotifications\u300d\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8a73\u7d30\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n\n\u3057\u304b\u3057\u3053\u306e\u901a\u77e5\u306fsnac \u306e\u30da\u30fc\u30b8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u306a\u3089\u306a\u3044\u3068\u901a\u77e5\u304c\u308f\u304b\u308a\u307e\u305b\u3093\uff0e\n\u3057\u304b\u3057\u4ee3\u66ff\u306e\u901a\u77e5\u304c\u3044\u304f\u3064\u304b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u3089\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u307b\u307c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306a\u901a\u77e5\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\uff0e\n\n\n\n\ne-mail\n\n\n\u4e00\u822c\u7684\u306ae-mail \u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8a2d\u5b9a\u6e08\u3067\u3042\u308c\u3070\u30e6\u30fc\u30b6\u30fc\u306e\u300cUser Settings…​\u300d\u304b\u3089\u300cEmail address for notifications:\u300d\u306b\u5b9b\u5148\u306ee-main address \u3092\u5165\u529b\u3059\u308b\u308b\u3053\u3068\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\n\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u5b9a\u304c\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u308a\uff0c\u5916\u90e8\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408 server.json \u306e\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3082\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\nEmail address for notifications\n If this field is not empty, an email message will be sent to this address whenever a post written by you is liked, boosted or replied to.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\n\n\nsmtp_url Since version 2.76, email notifications can be sent via direct connection to an SMTP server instead of the traditional behaviour of piping the mes\u2010\n sage to /usr/sbin/sendmail. Set this value to the SMTP url to be used for sending email notifications (for example, smtp://localhost). It may in\u2010\n clude a port number if it's not running on the usual one, like in smtp://mail.example.com:587.\n\n\n\n\nsmtp_user\n\n\n\n\nsmtp_password\n To be filled if the SMTP server defined by the previous directive needs credentials.\n\n\n\n\n— snac(8)\u3088\u308a\n\n\n\n\n\n\n\n\nTelegram \u3067\u901a\u77e5\n\n\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eTelegram \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305f\u3060\uff0cTelegram bot \u3092\u4f5c\u6210\u3057\u3066\u5229\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u671f\u8a2d\u5b9a\u304c\u5c11\u3057\u521d\u9762\u5012\u3067\u3059\uff0e\n\n\n\n\n\nTelegram notifications\n To enable notifications via Telegram, fill the two provided fields (Bot API key and Chat id). You need to create both a Telegram channel and a\n bot for this; the process is rather cumbersome but it's documented everywhere. The Bot API key is a long string of alphanumeric characters and\n the chat id is a big, negative number.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u4ee5\u524dTelegram bot \u3092Nextcloud \u306eTOTP \u306e\u901a\u77e5\u8a2d\u5b9a\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u66f8\u3044\u305f\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nNextcloud 14 \u306e Telegram \u3092\u4f7f\u3063\u305f2\u8981\u7d20\u8a8d\u8a3c \u2013 matoken’s blog\n\n\n\n\nTelegram bot \u304c\u4f5c\u6210\u3067\u304d\u305f\u3089\u5404\u30e6\u30fc\u30b6\u306e\u300cUser Settings…​\u300d\u306e\u300cTelegram notifications (bot key and chat id):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\nntfy \u3067\u901a\u77e5\n\n\nOSS \u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306b\u901a\u77e5\u304c\u3067\u304d\u308bntfy \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066snac \u306e\u901a\u77e5\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\nntfy.sh | Send push notifications to your phone via PUT/POST\n\n\n\n\n\n\n\nntfy notifications\n To enable notifications via ntfy (both self-hosted or standard ntfy.sh server), fill the two provided fields (ntfy server/topic and, if pro\u2010\n tected, the token). You need to refer to the https://ntfy.sh web site for more information on this process.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u3059\u304c\uff0c\u3068\u308a\u3042\u3048\u305antfy.sh \u3092\u5229\u7528\u3057\u3066\u8a66\u3059\u3068\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\u300cUser Settings…​\u300d\u306e\u300cntfy notifications (ntfy server and token):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\n\nWebhook \u3067\u901a\u77e5\n\n\n\u8272\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u308bWebhook \u3082\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\n\nNotify webhook\n If this is set to an URL, an HTTP POST will be sent to it whenever a new notification happens (see the 'Webhook for notifications' section below\n for more information).\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u4f8b\u3048\u3070Discord \u3067\u3042\u308c\u3070\uff0c\u300c\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u7de8\u96c6\u300d→\u300c\u9023\u643a\u30b5\u30fc\u30d3\u30b9\u300d→\u300c\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u300d\u3067\u751f\u6210\u3055\u308c\u308bURL \u3092\u5229\u7528\u3057\u3066\u901a\u77e5\u3067\u304d\u307e\u3059\uff0e\n\u3053\u308c\u3092\u300cUser Settings…​\u300d\u306e\u300cNotify webhook:\u300d\u306b\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u901a\u77e5\n\n\nsnac \u306fmastodon API \u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305d\u306e\u305f\u3081mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901a\u77e5\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u901a\u77e5\u3092\u53d7\u3051\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff0e", "date_published": "2025-12-18T20:28:14+09:00", "date_modified": "2025-12-18T20:28:15+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "notification", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4987", "url": "https://matoken.org/blog/2025/12/17/snac-theme/", "title": "snac\u306etheme\u3092\u8a2d\u5b9a", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306etheme \u5909\u66f4\uff0e

\n
\n

\n
\n

snac \u306fCSS \u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30c6\u30fc\u30de\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e
\nCSS \u30d5\u30a1\u30a4\u30eb\u306f2\u7a2e\u985e\u3042\u308a\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5168\u4f53\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\uff0c {basedir}/style.css \u3068\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306e {basedir}/user/{\u30e6\u30fc\u30b6\u30fc\u540d}/static/style.css \u3067\u3059\uff0e

\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

\u624b\u5143\u306esnac 2.8.5 \u3067\u8a66\u3057\u305f\u3068\u3053\u308d\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\u306a\u3044\u3068\u52b9\u304b\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\n\u3064\u307e\u308a\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u516c\u958b\u30da\u30fc\u30b8\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e
\n\u305d\u3057\u3066\uff0c\u8a2d\u5b9a\u306b\u306ftheme \u30d5\u30a1\u30a4\u30eb\u3092\u8a72\u5f53\u5834\u6240\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u30a6\u30a7\u30d6\u4e0a\u304b\u3089\u306f\u51fa\u6765\u306a\u3044\u306e\u3067\u7ba1\u7406\u8005\u306b\u304a\u9858\u3044\u3059\u308b\u306a\u3069\u306e\u624b\u9593\u304c\u304b\u304b\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

\u81ea\u5206\u3067\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\uff0c README.md \u306e Incredibly awesome CSS themes for snac \u90e8\u5206\u306b\u3044\u304f\u3064\u304b\u306etheme \u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3053\u308c\u3092\u4f7f\u308f\u305b\u3066\u3082\u3089\u3063\u305f\u308a\u305d\u308c\u3092\u5143\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u306e\u3067\u3082\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ grep -A5 'Incredibly awesome CSS themes for snac' README.md\n## Incredibly awesome CSS themes for snac\n\n- [A compilation of themes for snac (by \u0412\u043e )](https://codeberg.org/voron/snac-style).\n- [A cool, elegant theme (by Haijo7)](https://codeberg.org/Haijo7/snac-custom-css).\n- [A terminal-like theme (by Tetra)](https://codeberg.org/ERROR404NULLNOTFOUND/snac-terminal-theme).
\n
\n
\n
\n

\u4ee5\u4e0b\u306f Pika \u3068\u3044\u3046theme \u3092\u8a2d\u5b9a\u3057\u305f\u4f8b\u3067\u3059\uff0e3\u30da\u30a4\u30f3\u306b\u306a\u308a\uff0cPC\u7b49\u306e\u6a2a\u9577\u753b\u9762\u3067\u306e\u64cd\u4f5c\u6027\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\"snac

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306etheme \u5909\u66f4\uff0e\n\n\n\nsnac \u306fCSS \u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30c6\u30fc\u30de\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\nCSS \u30d5\u30a1\u30a4\u30eb\u306f2\u7a2e\u985e\u3042\u308a\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5168\u4f53\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\uff0c {basedir}/style.css \u3068\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306e {basedir}/user/{\u30e6\u30fc\u30b6\u30fc\u540d}/static/style.css \u3067\u3059\uff0e\n\n\n\n\n\nTip\n\n\n\n\u624b\u5143\u306esnac 2.8.5 \u3067\u8a66\u3057\u305f\u3068\u3053\u308d\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\u306a\u3044\u3068\u52b9\u304b\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\u3064\u307e\u308a\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u516c\u958b\u30da\u30fc\u30b8\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\u305d\u3057\u3066\uff0c\u8a2d\u5b9a\u306b\u306ftheme \u30d5\u30a1\u30a4\u30eb\u3092\u8a72\u5f53\u5834\u6240\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u30a6\u30a7\u30d6\u4e0a\u304b\u3089\u306f\u51fa\u6765\u306a\u3044\u306e\u3067\u7ba1\u7406\u8005\u306b\u304a\u9858\u3044\u3059\u308b\u306a\u3069\u306e\u624b\u9593\u304c\u304b\u304b\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\u81ea\u5206\u3067\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\uff0c README.md \u306e Incredibly awesome CSS themes for snac \u90e8\u5206\u306b\u3044\u304f\u3064\u304b\u306etheme \u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3053\u308c\u3092\u4f7f\u308f\u305b\u3066\u3082\u3089\u3063\u305f\u308a\u305d\u308c\u3092\u5143\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u306e\u3067\u3082\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n$ grep -A5 'Incredibly awesome CSS themes for snac' README.md\n## Incredibly awesome CSS themes for snac\n\n- [A compilation of themes for snac (by \u0412\u043e )](https://codeberg.org/voron/snac-style).\n- [A cool, elegant theme (by Haijo7)](https://codeberg.org/Haijo7/snac-custom-css).\n- [A terminal-like theme (by Tetra)](https://codeberg.org/ERROR404NULLNOTFOUND/snac-terminal-theme).\n\n\n\n\u4ee5\u4e0b\u306f Pika \u3068\u3044\u3046theme \u3092\u8a2d\u5b9a\u3057\u305f\u4f8b\u3067\u3059\uff0e3\u30da\u30a4\u30f3\u306b\u306a\u308a\uff0cPC\u7b49\u306e\u6a2a\u9577\u753b\u9762\u3067\u306e\u64cd\u4f5c\u6027\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e", "date_published": "2025-12-17T21:04:10+09:00", "date_modified": "2026-02-19T05:24:17+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "theme", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4973", "url": "https://matoken.org/blog/2025/12/16/snac-welcome-page-costomsetting/", "title": "snac\u306eWelcome page\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\u305d\u306e2\uff0e
\n\u4ee5\u524d\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u306fhtml \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u63db\u3048\u3092\u884c\u3044\u307e\u3057\u305f\u304c\u4eca\u56de\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u66f8\u304d\u63db\u3048\u3067\u3059\uff0e

\n
\n
\n\n
\n

\n
\n

snac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e greeting.html \u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u51fa\u6765\u307e\u3059\u304c\uff0c\u4ed6\u306b\u3082\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u3082\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

show_instance_timeline \u3053\u308c\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068Welcome page \u306b\u6700\u65b0\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u6295\u7a3f\u3057\u305f\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e
\n\u307e\u305f\uff0c\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u9805\u76ee\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u305f\u5834\u5408\u305d\u308c\u3082\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

admin_email
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9

\n
\n
\n

admin_account
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u30a2\u30ab\u30a6\u30f3\u30c8

\n
\n
\n

title
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30bf\u30a4\u30c8\u30eb

\n
\n
\n

short_description
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5bfe\u3059\u308b\u77ed\u3044\u8aac\u660e

\n
\n
\n

short_description_raw
\nshort_description \u3092\u751f\u306e\u6587\u5b57\u5217\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u304b\uff0cHTML \u306b\u5909\u63db\u3059\u308b\u304b

\n
\n
\n

\u4f8b\u3048\u3070\u3053\u306e\u69d8\u306b\u8a2d\u5b9a\u3059\u308b\u3068\uff0c

\n
\n
\n
\n
$ grep -A5 show_instance_timeline snac-data/server.json\n    \"show_instance_timeline\": true,\n    \"admin_email\": \"\",\n    \"admin_account\": \"matoken\",\n    \"title\": \"🐈🐈🐈\",\n    \"short_description\": \"matoken\u306e\u500b\u4ebaActivityPub \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\",\n    \"short_description_raw\": false,
\n
\n
\n
\n

\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u6ce8\u610f\u70b9\u3068\u3057\u3066\uff0cshow_instance_timeline \u3092 true \u306b\u3059\u308b\u3068 greeting.html \u306f\u7121\u8996\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u7528\u9014\u3084\u597d\u307f\u306b\u5408\u308f\u305b\u3066\u3069\u3061\u3089\u304b\u3092\u5229\u7528\u3059\u308b\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\u305d\u306e2\uff0e\n\u4ee5\u524d\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u306fhtml \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u63db\u3048\u3092\u884c\u3044\u307e\u3057\u305f\u304c\u4eca\u56de\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u66f8\u304d\u63db\u3048\u3067\u3059\uff0e\n\n\n\n\nsnac\u306eWelcome page\u306ehtml\u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba \u2013 matoken’s blog\n\n\n\n\n\nsnac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e greeting.html \u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u51fa\u6765\u307e\u3059\u304c\uff0c\u4ed6\u306b\u3082\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u3082\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\nshow_instance_timeline \u3053\u308c\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068Welcome page \u306b\u6700\u65b0\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u6295\u7a3f\u3057\u305f\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\u307e\u305f\uff0c\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u9805\u76ee\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u305f\u5834\u5408\u305d\u308c\u3082\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\nadmin_email \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\n\n\nadmin_account \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\n\n\ntitle \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30bf\u30a4\u30c8\u30eb\n\n\nshort_description \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5bfe\u3059\u308b\u77ed\u3044\u8aac\u660e\n\n\nshort_description_raw \nshort_description \u3092\u751f\u306e\u6587\u5b57\u5217\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u304b\uff0cHTML \u306b\u5909\u63db\u3059\u308b\u304b\n\n\n\u4f8b\u3048\u3070\u3053\u306e\u69d8\u306b\u8a2d\u5b9a\u3059\u308b\u3068\uff0c\n\n\n\n$ grep -A5 show_instance_timeline snac-data/server.json\n \"show_instance_timeline\": true,\n \"admin_email\": \"\",\n \"admin_account\": \"matoken\",\n \"title\": \"🐈🐈🐈\",\n \"short_description\": \"matoken\u306e\u500b\u4ebaActivityPub \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\",\n \"short_description_raw\": false,\n\n\n\n\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u6ce8\u610f\u70b9\u3068\u3057\u3066\uff0cshow_instance_timeline \u3092 true \u306b\u3059\u308b\u3068 greeting.html \u306f\u7121\u8996\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u7528\u9014\u3084\u597d\u307f\u306b\u5408\u308f\u305b\u3066\u3069\u3061\u3089\u304b\u3092\u5229\u7528\u3059\u308b\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e", "date_published": "2025-12-16T19:19:40+09:00", "date_modified": "2025-12-16T19:19:43+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4962", "url": "https://matoken.org/blog/2025/12/15/snac-spam-mitigation/", "title": "snac\u3067\u306eSPAM\u5bfe\u7b56", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eSPAM \u5bfe\u7b56\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

SPAM \u304c\u6765\u306a\u3044\u306b\u8d8a\u3057\u305f\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u304cActivityPub \u3067\u3082\u5076\u306b\u898b\u304b\u3051\u307e\u3059\uff0e\u3082\u3057SPAM \u304c\u6765\u308b\u3068\u304d\u306e\u3053\u3068\u3092\u8003\u3048\u3066\u5bfe\u7b56\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\uff0e
\nsnac \u3067\u306f2\u3064\u306e\u5bfe\u7b56\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
SPAM Mitigation\n    There have been some SPAM attacks on the Fediverse and, as too many instances and server implementations out there still allow automatic account creation, it will only get worse.  snac includes some (not very strong) tools for try\u2010\n    ing to survive the SPAM flood that will eventually happen.
\n
\n
\n
\n
\n
The  min_account_age field in the main configuration file allows setting a minimum age (in seconds) to consider too recently created accounts suspicious of being a potential source of SPAM. This is a na\u00efve assumption, because spam\u2010\nmers can create accounts, let them dormant for a while and then start to use them. Also, some ActivityPub implementations don't even bother to return a creation date for their accounts, so this is not very useful.
\n
\n
\n
\n
\n
From version 2.50, post content can be filtered out by regular expressions.  These weapons of mass destruction can be written into the filter_reject.txt file in the server base directory, one per line;  if  this  file  exists,  all\nposts'  content  will  be  matched (after being stripped of HTML tags) against these regexes, one by one, and any match will make the post to be rejected. Use lower case, the regex will be case insensitive by default.  If you don't\nknow about regular expressions, don't use this option (or learn about them inw some tutorial, there are gazillions of them out there), as you and your users may start missing posts. Also, given that every regular expression  imple\u2010\nmentation supports a different set of features, consider reading the documentation about the one implemented in your system.
\n
\n
\n
\n
\n— snac(8) \u3088\u308a\n
\n
\n
\n
\n
\n

\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\u304b\u3089\u65e5\u306e\u6d45\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u62d2\u5426

\n
\n
\n

1\u3064\u76ee\u306f\u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u8a2d\u5b9a\u3067\u304d\u308b min_account_age \u3067\uff0c\u6295\u7a3f\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u304b\u3089\u306e\u6642\u9593\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff0e
\n\u305f\u3060\u3057\uff0cSPAM \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u5bdd\u304b\u305b\u3066\u304b\u3089\u904b\u7528\u3057\u305f\u308a\uff0c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u65e5\u3092\u8fd4\u3055\u306a\u3044\u5b9f\u88c5\u3082\u3042\u308b\u3089\u3057\u3044\u306e\u3067\u3042\u307e\u308a\u5f79\u306b\u7acb\u305f\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\n\u65e2\u5b9a\u5024\u306f 0 \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
$ jq .min_account_age server.json\n0
\n
\n
\n
\n
\n
\n

\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0

\n
\n
\n

2\u3064\u3081\u306f\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0esnac \u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b filter_reject.txt \u3092\u7528\u610f\u3057\u3066\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b1\u884c\u305a\u3064\u8a18\u8ff0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u306b\u3088\u308a\u5168\u3066\u306e\u6295\u7a3f\u3092HTML \u30bf\u30b0\u3092\u53d6\u308a\u9664\u3044\u305f\u5f8c\u6b63\u898f\u8868\u73fe\u30681\u3064\u305a\u3064\u7167\u5408\u3055\u308c\u4e00\u81f4\u3059\u308b\u6295\u7a3f\u306f\u62d2\u5426\u3055\u308c\u307e\u3059\uff0e
\n\u6b63\u898f\u8868\u73fe\u306a\u306e\u3067\u30c6\u30b9\u30c8\u3092\u5341\u5206\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

Reverse proxy \u3084Firewall \u306a\u3069snac \u306e\u5916\u3067\u5bfe\u7b56\u3082\u8003\u3048\u3089\u308c\u307e\u3059\uff0e\u305d\u306e\u4ed6\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0ee-mail \u3082\u3053\u3093\u306a\u611f\u3058\u3067\u591a\u6bb5\u306b\u3057\u305f\u308a\u3057\u307e\u3059\u306d\uff0e\u305d\u3046\u306a\u308b\u3068Received \u306e\u3088\u3046\u306a\u3082\u306e\u304c\u898b\u305f\u3044\u306a\u3068\u601d\u3063\u305f\u308a\u3082\uff0e

\n
\n\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eSPAM \u5bfe\u7b56\u306b\u3064\u3044\u3066\uff0e\n\n\n\nSPAM \u304c\u6765\u306a\u3044\u306b\u8d8a\u3057\u305f\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u304cActivityPub \u3067\u3082\u5076\u306b\u898b\u304b\u3051\u307e\u3059\uff0e\u3082\u3057SPAM \u304c\u6765\u308b\u3068\u304d\u306e\u3053\u3068\u3092\u8003\u3048\u3066\u5bfe\u7b56\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\nsnac \u3067\u306f2\u3064\u306e\u5bfe\u7b56\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\nSPAM Mitigation\n There have been some SPAM attacks on the Fediverse and, as too many instances and server implementations out there still allow automatic account creation, it will only get worse. snac includes some (not very strong) tools for try\u2010\n ing to survive the SPAM flood that will eventually happen.\n\n\n\n\nThe min_account_age field in the main configuration file allows setting a minimum age (in seconds) to consider too recently created accounts suspicious of being a potential source of SPAM. This is a na\u00efve assumption, because spam\u2010\nmers can create accounts, let them dormant for a while and then start to use them. Also, some ActivityPub implementations don't even bother to return a creation date for their accounts, so this is not very useful.\n\n\n\n\nFrom version 2.50, post content can be filtered out by regular expressions. These weapons of mass destruction can be written into the filter_reject.txt file in the server base directory, one per line; if this file exists, all\nposts' content will be matched (after being stripped of HTML tags) against these regexes, one by one, and any match will make the post to be rejected. Use lower case, the regex will be case insensitive by default. If you don't\nknow about regular expressions, don't use this option (or learn about them inw some tutorial, there are gazillions of them out there), as you and your users may start missing posts. Also, given that every regular expression imple\u2010\nmentation supports a different set of features, consider reading the documentation about the one implemented in your system.\n\n\n\n\n— snac(8) \u3088\u308a\n\n\n\n\n\n\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\u304b\u3089\u65e5\u306e\u6d45\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u62d2\u5426\n\n\n1\u3064\u76ee\u306f\u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u8a2d\u5b9a\u3067\u304d\u308b min_account_age \u3067\uff0c\u6295\u7a3f\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u304b\u3089\u306e\u6642\u9593\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff0e\n\u305f\u3060\u3057\uff0cSPAM \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u5bdd\u304b\u305b\u3066\u304b\u3089\u904b\u7528\u3057\u305f\u308a\uff0c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u65e5\u3092\u8fd4\u3055\u306a\u3044\u5b9f\u88c5\u3082\u3042\u308b\u3089\u3057\u3044\u306e\u3067\u3042\u307e\u308a\u5f79\u306b\u7acb\u305f\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\u65e2\u5b9a\u5024\u306f 0 \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n$ jq .min_account_age server.json\n0\n\n\n\n\n\n\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n\n\n2\u3064\u3081\u306f\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0esnac \u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b filter_reject.txt \u3092\u7528\u610f\u3057\u3066\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b1\u884c\u305a\u3064\u8a18\u8ff0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u306b\u3088\u308a\u5168\u3066\u306e\u6295\u7a3f\u3092HTML \u30bf\u30b0\u3092\u53d6\u308a\u9664\u3044\u305f\u5f8c\u6b63\u898f\u8868\u73fe\u30681\u3064\u305a\u3064\u7167\u5408\u3055\u308c\u4e00\u81f4\u3059\u308b\u6295\u7a3f\u306f\u62d2\u5426\u3055\u308c\u307e\u3059\uff0e\n\u6b63\u898f\u8868\u73fe\u306a\u306e\u3067\u30c6\u30b9\u30c8\u3092\u5341\u5206\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\nReverse proxy \u3084Firewall \u306a\u3069snac \u306e\u5916\u3067\u5bfe\u7b56\u3082\u8003\u3048\u3089\u308c\u307e\u3059\uff0e\u305d\u306e\u4ed6\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0ee-mail \u3082\u3053\u3093\u306a\u611f\u3058\u3067\u591a\u6bb5\u306b\u3057\u305f\u308a\u3057\u307e\u3059\u306d\uff0e\u305d\u3046\u306a\u308b\u3068Received \u306e\u3088\u3046\u306a\u3082\u306e\u304c\u898b\u305f\u3044\u306a\u3068\u601d\u3063\u305f\u308a\u3082\uff0e\n\n\n\n\nMastodon\u3068\u304b\u306eActivityPub\u30b5\u30fc\u30d0\u30fc\u3067\u4f7f\u3048\u308b\u30b9\u30d1\u30e0\u5bfe\u7b56\u30d7\u30ed\u30ad\u30b7\u3092\u4f5c\u3063\u305f\u3088 #mastodon – Qiita\n\n\nwebscrubbing/simple-activitypub-spam-filter: Check content and block it", "date_published": "2025-12-15T19:50:27+09:00", "date_modified": "2025-12-15T19:50:28+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "SPAM", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4953", "url": "https://matoken.org/blog/2025/12/14/snac-robots-txt/", "title": "snac\u306erobots.txt", "content_html": "
\n
\n
\n

\"susie64

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306erobots.txt \u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3067\u300csite:snac.kagolug.org\u300d\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u3066\u307f\u308b\u3068\u4f55\u3082\u51fa\u3066\u304d\u307e\u305b\u3093\uff0e\u904b\u7528\u958b\u59cb\u304b\u3089\u305d\u3046\u6642\u9593\u304c\u7d4c\u3063\u3066\u3044\u306a\u3044\u304b\u3089\u304b\u306a?\u3068\u601d\u3044\u3064\u3064\u5ff5\u306e\u70ba robots.txt \u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u5168\u3066\u62d2\u5426\u308b\u3059\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nDisallow: /
\n
\n
\n
\n

source \u3092\u78ba\u8a8d\u3059\u308b\u3068 httpd.c \u306e\u4e2d\u3067\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ grep -n -A5 robots.txt httpd.c\n321:    if (strcmp(q_path, \"/robots.txt\") == 0) {\n322-        status = HTTP_STATUS_OK;\n323-        *ctype = \"text/plain\";\n324-        *body  = xs_str_new(\"User-agent: *\\n\"\n325-                            \"Disallow: /\\n\");\n326-    }
\n
\n
\n
\n

snac \u306e\u8a2d\u5b9a\u3067\u3069\u3046\u306b\u304b\u3067\u304d\u308c\u3070\u3044\u3044\u3067\u3059\u304c\u6050\u3089\u304f\u7121\u7406\uff0eISSUE \u3092\u63a2\u3059\u3068\u4ee5\u4e0b\u306e\u3082\u306e\u304c\uff0e404\u30a8\u30e9\u30fc\u304c\u90aa\u9b54\u306a\u306e\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3044\u4eba\u306f\u524d\u6bb5\u306ehttp proxy \u3067\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u611f\u3058\u306e\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n

ISSUE \u3092\u7acb\u3066\u305f\u65b9\u306fnginx \u3067\u30ab\u30b9\u30bf\u30e0robots.txt \u3092\u8fd4\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

Actually, I am able to work around this by returning a custom robots.txt with nginx:

\n
\n
\n
\n
location = /robots.txt {\n\t\treturn 200 'User-agent: FediFetcher\\nAllow: /\\nUser-agent: *\\nDisallow: /\\n';\n}
\n
\n
\n
\n
\n
\n

\u81ea\u5206\u306e\u74b0\u5883\u306fApache2 httpd \u3067\u3059\u304c\u540c\u3058\u3088\u3046\u306a\u8a2d\u5b9a\u306f\u3067\u304d\u308b\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Apache2 httpd \u306eAlias \u3067robots.txt \u3092\u8a2d\u5b9a

\n
\n
\n

\u4ee5\u524dNitter \u3092\u516c\u958b\u3057\u3066\u3044\u305f\u3068\u304d\u306b\u3082\u3084\u3063\u3066\u3044\u305f\u306e\u3067\u3053\u308c\u3092\u53c2\u8003\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e

\n
\n\n
\n

Apache2 httpd \u306esnac \u90e8\u5206\u306e\u8a2d\u5b9a\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\uff0e\u3053\u308c\u3067Linux \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u5185\u306e /var/lib/snac2/robots.txt \u304c /robots.txt \u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff0e

\n
\n
\n
\n
$ sudo git diff /etc/apache2/sites-available/011-snac.kagolug.org.conf\ndiff --git a/apache2/sites-available/011-snac.kagolug.org.conf b/apache2/sites-available/011-snac.kagolug.org.conf\nindex f5b5c7f..7bb72c1 100644\n--- a/apache2/sites-available/011-snac.kagolug.org.conf\n+++ b/apache2/sites-available/011-snac.kagolug.org.conf\n@@ -58,6 +58,11 @@\n        </Location>\n\n        Alias /static /var/www/static\n+       Alias /robots.txt /var/lib/snac2/robots.txt\n+       <Location \"/robots.txt\">\n+               ProxyPass !\n+               Require all granted\n+       </Location>\n\n        # Possible values include: debug, info, notice, warn, error, crit,\n        # alert, emerg.
\n
\n
\n
\n

\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u53cd\u6620\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo apache2ctl configtest\n$ sudo systemctl reload apache2
\n
\n
\n
\n

\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u304c\uff0c

\n
\n
\n
\n
$ sudo -u www-data cat /var/lib/snac2/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n

/robots.txt \u306b\u53cd\u6620\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n

\u3053\u308c\u3067\u5404\u7a2ebot \u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u304c\u8a31\u53ef\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

source \u66f8\u304d\u63db\u3048

\n
\n
\n

source \u304b\u3089build \u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u306fsource \u66f8\u304d\u63db\u3048\u3067\u3082robots.txt \u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3057\u305f\uff0e\u3067\u3082\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u305f\u3073\u306b\u30d1\u30c3\u30c1\u3092\u5f53\u3066\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u3084\u306f\u308aproxy \u3067\u8a2d\u5b9a\u3059\u308b\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
robots.txt \u3092\u7121\u304f\u3059(404 \u30a8\u30e9\u30fc\u304c\u305f\u304f\u3055\u3093\u306a\u306e\u3067\u3042\u307e\u308a\u826f\u304f\u7121\u3055\u305d\u3046)
\n
\n
$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..976fdd6 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -318,13 +318,6 @@ int server_get_handler(xs_dict *req, const char *q_path,\n         *body  = xs_json_dumps(j, 4);\n     }\n     else\n-    if (strcmp(q_path, \"/robots.txt\") == 0) {\n-        status = HTTP_STATUS_OK;\n-        *ctype = \"text/plain\";\n-        *body  = xs_str_new(\"User-agent: *\\n\"\n-                            \"Disallow: /\\n\");\n-    }\n-    else\n     if (strcmp(q_path, \"/style.css\") == 0) {\n         FILE *f;\n         xs *css_fn = xs_fmt(\"%s/style.css\", srv_basedir);
\n
\n
\n
\n
\n
$ w3m -dump https://snac.matoken.org/robots.txt\n404 Not Found (snac/2.85)
\n
\n
\n
\n
\u5168\u3066\u8a31\u53ef\u306b\u66f8\u304d\u63db\u3048
\n
\n
$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..c0bcaef 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -322,7 +322,7 @@ int server_get_handler(xs_dict *req, const char *q_path,\n         status = HTTP_STATUS_OK;\n         *ctype = \"text/plain\";\n         *body  = xs_str_new(\"User-agent: *\\n\"\n-                            \"Disallow: /\\n\");\n+                            \"Allow: /\\n\");\n     }\n     else\n     if (strcmp(q_path, \"/style.css\") == 0) {
\n
\n
\n
\n
\n
$ w3m -dump https://snac.matoken.org/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306erobots.txt \u306b\u3064\u3044\u3066\uff0e\n\n\n\n\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3067\u300csite:snac.kagolug.org\u300d\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u3066\u307f\u308b\u3068\u4f55\u3082\u51fa\u3066\u304d\u307e\u305b\u3093\uff0e\u904b\u7528\u958b\u59cb\u304b\u3089\u305d\u3046\u6642\u9593\u304c\u7d4c\u3063\u3066\u3044\u306a\u3044\u304b\u3089\u304b\u306a?\u3068\u601d\u3044\u3064\u3064\u5ff5\u306e\u70ba robots.txt \u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u5168\u3066\u62d2\u5426\u308b\u3059\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nDisallow: /\n\n\n\nsource \u3092\u78ba\u8a8d\u3059\u308b\u3068 httpd.c \u306e\u4e2d\u3067\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ grep -n -A5 robots.txt httpd.c\n321: if (strcmp(q_path, \"/robots.txt\") == 0) {\n322- status = HTTP_STATUS_OK;\n323- *ctype = \"text/plain\";\n324- *body = xs_str_new(\"User-agent: *\\n\"\n325- \"Disallow: /\\n\");\n326- }\n\n\n\nsnac \u306e\u8a2d\u5b9a\u3067\u3069\u3046\u306b\u304b\u3067\u304d\u308c\u3070\u3044\u3044\u3067\u3059\u304c\u6050\u3089\u304f\u7121\u7406\uff0eISSUE \u3092\u63a2\u3059\u3068\u4ee5\u4e0b\u306e\u3082\u306e\u304c\uff0e404\u30a8\u30e9\u30fc\u304c\u90aa\u9b54\u306a\u306e\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3044\u4eba\u306f\u524d\u6bb5\u306ehttp proxy \u3067\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u611f\u3058\u306e\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n#223 – default robots.txt breaks integration with fedi-fetcher – grunfink/snac2 – Codeberg.org\n\n\n\n\nISSUE \u3092\u7acb\u3066\u305f\u65b9\u306fnginx \u3067\u30ab\u30b9\u30bf\u30e0robots.txt \u3092\u8fd4\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nActually, I am able to work around this by returning a custom robots.txt with nginx:\n\n\n\nlocation = /robots.txt {\n\t\treturn 200 'User-agent: FediFetcher\\nAllow: /\\nUser-agent: *\\nDisallow: /\\n';\n}\n\n\n\n\n\n\u81ea\u5206\u306e\u74b0\u5883\u306fApache2 httpd \u3067\u3059\u304c\u540c\u3058\u3088\u3046\u306a\u8a2d\u5b9a\u306f\u3067\u304d\u308b\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\nApache2 httpd \u306eAlias \u3067robots.txt \u3092\u8a2d\u5b9a\n\n\n\u4ee5\u524dNitter \u3092\u516c\u958b\u3057\u3066\u3044\u305f\u3068\u304d\u306b\u3082\u3084\u3063\u3066\u3044\u305f\u306e\u3067\u3053\u308c\u3092\u53c2\u8003\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e\n\n\n\n\nNitter\u306brobots.txt\u3092\u8a2d\u5b9a(Apache httpd\u306ereverse proxy\u74b0\u5883\u3067Alias\u8a2d\u5b9a) \u2013 matoken’s blog\n\n\n\n\nApache2 httpd \u306esnac \u90e8\u5206\u306e\u8a2d\u5b9a\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\uff0e\u3053\u308c\u3067Linux \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u5185\u306e /var/lib/snac2/robots.txt \u304c /robots.txt \u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff0e\n\n\n\n$ sudo git diff /etc/apache2/sites-available/011-snac.kagolug.org.conf\ndiff --git a/apache2/sites-available/011-snac.kagolug.org.conf b/apache2/sites-available/011-snac.kagolug.org.conf\nindex f5b5c7f..7bb72c1 100644\n--- a/apache2/sites-available/011-snac.kagolug.org.conf\n+++ b/apache2/sites-available/011-snac.kagolug.org.conf\n@@ -58,6 +58,11 @@\n </Location>\n\n Alias /static /var/www/static\n+ Alias /robots.txt /var/lib/snac2/robots.txt\n+ <Location \"/robots.txt\">\n+ ProxyPass !\n+ Require all granted\n+ </Location>\n\n # Possible values include: debug, info, notice, warn, error, crit,\n # alert, emerg.\n\n\n\n\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u53cd\u6620\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo apache2ctl configtest\n$ sudo systemctl reload apache2\n\n\n\n\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u304c\uff0c\n\n\n\n$ sudo -u www-data cat /var/lib/snac2/robots.txt\nUser-agent: *\nAllow: /\n\n\n\n/robots.txt \u306b\u53cd\u6620\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nAllow: /\n\n\n\n\u3053\u308c\u3067\u5404\u7a2ebot \u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u304c\u8a31\u53ef\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nsource \u66f8\u304d\u63db\u3048\n\n\nsource \u304b\u3089build \u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u306fsource \u66f8\u304d\u63db\u3048\u3067\u3082robots.txt \u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3057\u305f\uff0e\u3067\u3082\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u305f\u3073\u306b\u30d1\u30c3\u30c1\u3092\u5f53\u3066\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u3084\u306f\u308aproxy \u3067\u8a2d\u5b9a\u3059\u308b\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\nrobots.txt \u3092\u7121\u304f\u3059(404 \u30a8\u30e9\u30fc\u304c\u305f\u304f\u3055\u3093\u306a\u306e\u3067\u3042\u307e\u308a\u826f\u304f\u7121\u3055\u305d\u3046)\n\n$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..976fdd6 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -318,13 +318,6 @@ int server_get_handler(xs_dict *req, const char *q_path,\n *body = xs_json_dumps(j, 4);\n }\n else\n- if (strcmp(q_path, \"/robots.txt\") == 0) {\n- status = HTTP_STATUS_OK;\n- *ctype = \"text/plain\";\n- *body = xs_str_new(\"User-agent: *\\n\"\n- \"Disallow: /\\n\");\n- }\n- else\n if (strcmp(q_path, \"/style.css\") == 0) {\n FILE *f;\n xs *css_fn = xs_fmt(\"%s/style.css\", srv_basedir);\n\n\n\n\n$ w3m -dump https://snac.matoken.org/robots.txt\n404 Not Found (snac/2.85)\n\n\n\n\u5168\u3066\u8a31\u53ef\u306b\u66f8\u304d\u63db\u3048\n\n$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..c0bcaef 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -322,7 +322,7 @@ int server_get_handler(xs_dict *req, const char *q_path,\n status = HTTP_STATUS_OK;\n *ctype = \"text/plain\";\n *body = xs_str_new(\"User-agent: *\\n\"\n- \"Disallow: /\\n\");\n+ \"Allow: /\\n\");\n }\n else\n if (strcmp(q_path, \"/style.css\") == 0) {\n\n\n\n\n$ w3m -dump https://snac.matoken.org/robots.txt\nUser-agent: *\nAllow: /", "date_published": "2025-12-14T18:26:00+09:00", "date_modified": "2025-12-14T18:12:04+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Apache2 httpd", "robots.txt", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4937", "url": "https://matoken.org/blog/2025/12/13/snac-welcome-page/", "title": "snac\u306eWelcome page\u306ehtml\u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page \u306ehtml \u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

snac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

\u3053\u306e\u30da\u30fc\u30b8\u306f greeting.html \u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
greeting.html
\n
\n
<!DOCTYPE html>\n<html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"https://%host%/favicon.ico\"/>\n<style>*{color-scheme:light dark}body{margin:auto;max-width:50em}</style>\n<title>Welcome to %host%</title>\n</head>\n<body>\n<p><b>%host%</b> is a <a href=\"https://en.wikipedia.org/wiki/Fediverse\">Fediverse</a> instance that uses the <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.</p>\n<p>This server runs the <a href=\"https://comam.es/what-is-snac\">snac</a> software and there is no automatic sign-up process.</p>\n<p>The following users are part of this community:</p>\n\n%userlist%\n\n<p>This site is powered by <abbr title=\"Social Networks Are Crap\">snac</abbr>.</p>\n</body></html>
\n
\n
\n
\n

\u4f8b\u3048\u3070\u65e5\u672c\u8a9e\u306b\u3057\u305f\u308a\uff0c\u30e6\u30fc\u30b6\u30fc\u30ea\u30b9\u30c8\u3092\u96a0\u3057\u305f\u308a\u3068\u3044\u3063\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u51fa\u6765\u307e\u3059\uff0e\u3053\u306ehtml \u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org\u306fActivityPub\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305fFediverse\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\u3053\n\u306e\u30db\u30b9\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u4e16\u754c\u4e2d\u306eMastodon, Pleroma, Friendica, \u306a\u3069\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\n\u5229\u7528\u3057\u3066\u3044\u308b\u4eba\u3005\u3068\u30b3\u30df\u30cb\u30e5\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\n\n\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306fsnac \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\u81ea\u52d5\u767b\u9332\u30d7\u30ed\u30bb\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\n\n\u4ee5\u4e0b\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3059:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

\u4eca\u56de\u3068\u308a\u3042\u3048\u305a\u65e5\u672c\u8a9e\u306b\u3057\u307e\u3057\u305f\u304c\uff0cLUG \u306e\u8aac\u660e\u306a\u3069\u3082\u5165\u308c\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page \u306ehtml \u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\uff0e\n\n\n\nsnac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\n\u3053\u306e\u30da\u30fc\u30b8\u306f greeting.html \u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\ngreeting.html\n\n<!DOCTYPE html>\n<html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"https://%host%/favicon.ico\"/>\n<style>*{color-scheme:light dark}body{margin:auto;max-width:50em}</style>\n<title>Welcome to %host%</title>\n</head>\n<body>\n<p><b>%host%</b> is a <a href=\"https://en.wikipedia.org/wiki/Fediverse\">Fediverse</a> instance that uses the <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.</p>\n<p>This server runs the <a href=\"https://comam.es/what-is-snac\">snac</a> software and there is no automatic sign-up process.</p>\n<p>The following users are part of this community:</p>\n\n%userlist%\n\n<p>This site is powered by <abbr title=\"Social Networks Are Crap\">snac</abbr>.</p>\n</body></html>\n\n\n\n\u4f8b\u3048\u3070\u65e5\u672c\u8a9e\u306b\u3057\u305f\u308a\uff0c\u30e6\u30fc\u30b6\u30fc\u30ea\u30b9\u30c8\u3092\u96a0\u3057\u305f\u308a\u3068\u3044\u3063\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u51fa\u6765\u307e\u3059\uff0e\u3053\u306ehtml \u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org\u306fActivityPub\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305fFediverse\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\u3053\n\u306e\u30db\u30b9\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u4e16\u754c\u4e2d\u306eMastodon, Pleroma, Friendica, \u306a\u3069\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\n\u5229\u7528\u3057\u3066\u3044\u308b\u4eba\u3005\u3068\u30b3\u30df\u30cb\u30e5\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\n\n\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306fsnac \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\u81ea\u52d5\u767b\u9332\u30d7\u30ed\u30bb\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\n\n\u4ee5\u4e0b\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3059:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\n\u4eca\u56de\u3068\u308a\u3042\u3048\u305a\u65e5\u672c\u8a9e\u306b\u3057\u307e\u3057\u305f\u304c\uff0cLUG \u306e\u8aac\u660e\u306a\u3069\u3082\u5165\u308c\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e", "date_published": "2025-12-13T18:43:34+09:00", "date_modified": "2025-12-16T06:26:44+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4909", "url": "https://matoken.org/blog/2025/12/11/latest-snac-using-debian-backports/", "title": "Debian 13 trixie\u3067backports\u3092\u4f7f\u3044\u6700\u65b0\u306esnac\u3092\u5229\u7528", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fDebian trixie backports \u306esnac \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u3046\u3088\u3046\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n

\n

\n
\n
\n

Debian \u3067\u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3

\n
\n
\n

snac2 \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u3057\u304b\u3057\uff0cstable \u306eDebian 13 trixie \u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f 2.75-2 \u3067\u5c11\u3057\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\uff0e
\nstable-backports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u73fe\u5728\u306e\u4e0a\u6d41\u306e\u6700\u65b0\u3068\u540c\u3058 2.85 \u306a\u306e\u3067\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ rmadison snac2| grep -v debug\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2      | 2.75-2         | stable                    | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.84-3~bpo13+1 | stable-backports          | source, riscv64\nsnac2      | 2.85-1~bpo13+1 | stable-backports          | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2      | 2.85-1         | testing                   | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.85-1         | unstable                  | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
\n
\n
\n\n
\n
\n
\n

Debian 13 trixie \u306b backports \u3092\u8a2d\u5b9a

\n
\n
\n

Debian backports \u306fDebian stable \u3067\u4e00\u90e8\u306etesting \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u8abf\u6574\u3055\u308c\u305f\u3082\u306e\u3067\u5bfe\u5fdc\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3042\u308c\u3070stable \u3088\u308a\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n\n
\n

\u3053\u308c\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306fbackports \u60c5\u5831\u3092 sources.list \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u3053\u3053\u3067\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u540c\u3058 /etc/apt/sources.list.d/debian-backports.sources \u3068\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
/etc/apt/sources.list.d/debian-backports.sources \u3092\u4f5c\u6210
\n
\n
Types: deb deb-src\nURIs: http://deb.debian.org/debian\nSuites: trixie-backports\nComponents: main\nEnabled: yes\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg
\n
\n
\n
\n

\u7d9a\u3044\u3066\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u3092backports \u3092\u542b\u3080\u6700\u65b0\u72b6\u614b\u306b\u3057\u307e\u3059\uff0e

\n
\n
\n
\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u66f4\u65b0
\n
\n
$ sudo apt update
\n
\n
\n
\n

backports \u306e snac \u3092\u5c0e\u5165

\n
\n

backpots \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5c0e\u5165\u3055\u308c\u307e\u305b\u3093\uff0ebackports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3059\u308b\u306b\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306b /trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo apt install snac2/trixie-backports
\n
\n
\n
\n

\u3082\u3057\u304f\u306f -t trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3059\u308b\u3068\u4e0d\u8db3\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5c0e\u5165\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ sudo apt install -t trixie-backports snac2
\n
\n
\n
\n
\n
$ dpkg-query -W snac2\nsnac2   2.85-1~bpo13+1\n$ snac version\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n\nupgrade {basedir}                    Upgrade to a new version
\n
\n
\n
\n

\u5c0e\u5165\u3055\u308c\u305fbackports \u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u3068\u540c\u3058\u512a\u5148\u5ea6100\u306b\u56fa\u5b9a\u3055\u308c\u308b\u306e\u3067\u5c0e\u5165\u5f8c\u306f\u3044\u3064\u3082\u306e apt upgrade \u3067backports \u30d1\u30c3\u30b1\u30fc\u30b8\u3082\u66f4\u65b0\u3055\u308c\u307e\u3059\uff0e\u3064\u307e\u308a\u901a\u5e38\u306e\u904b\u7528\u3067\u5927\u4e08\u592b\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n

snac \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u64cd\u4f5c

\n
\n
\n

snac \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u6642\u306b\u30c7\u30a3\u30b9\u30af\u69cb\u6210\u304c\u5909\u308f\u308b\u3053\u3068\u304c\u3042\u308a\uff0c\u305d\u306e\u5834\u5408snac \u304c\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\u305d\u306e\u5834\u5408snac \u306e upgrade \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u81ea\u5206\u306f\u5ff5\u306e\u70ba\u6bce\u56de\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
snac(8)\u3088\u308a
\n
\n
\n
\n
Upgrading to a new version\n    Sometimes, the data storage disk layout changes between versions. If there is such a change, snac will refuse to run and require an upgrade. Do this by running
\n
\n
\n
\n
\n
snac upgrade $HOME/snac-data
\n
\n
\n
\n
\n
Take special care to execute this upgrade operation without any snac processes serving on the same folder. You can break everything. I know this because Tyler knows this.
\n
\n
\n
\n
\n
\n
\n
$ snac | grep upgrade\nupgrade {basedir}                    Upgrade to a new version
\n
\n
\n
\n

upgrade \u30b3\u30de\u30f3\u30c9\u306f\u30c7\u30fc\u30e2\u30f3\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u4e00\u65e6snac \u3092\u505c\u6b62\u3057\u3066\u304b\u3089\u5b9f\u884c\uff0c\u305d\u306e\u5f8csnac \u3092\u8d77\u52d5\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo service snac2 stop (1)\n$ sudo -u debian-snac snac upgrade /var/lib/snac2/ (2)\n19:45:50 Linux sandbox not compiled in\n19:45:50 OK\n$ sudo service snac2 start (3)\n$ w3m -dump https://snac.kagolug.org/info | tail -1 (4)\nabout this site - powered by snac/2.83
\n
\n
\n
\n
    \n
  1. \n

    snac \u505c\u6b62

    \n
  2. \n
  3. \n

    snac upgrade

    \n
  4. \n
  5. \n

    snac \u8d77\u52d5

    \n
  6. \n
  7. \n

    \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d

    \n
  8. \n
\n
\n
\n

\u3068\u3044\u3046\u611f\u3058\u3067Debian stable \u3067\u3082\u6700\u65b0\u306esnac \u304c\u5229\u7528\u3067\u304d\u3066\u3044\u307e\u3059\uff0e\u4e00\u65e6\u8a2d\u5b9a\u3059\u308b\u3068\u901a\u5e38\u306eDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u66f4\u65b0\u64cd\u4f5c\u3067\u8ffd\u5f93\u3057\u3066\u304f\u308c\u308b\u306e\u3067\u904b\u7528\u3082\u3044\u3064\u3082\u3068\u5909\u308f\u308a\u307e\u305b\u3093\uff0e\u66f4\u65b0\u30bf\u30a4\u30df\u30f3\u30b0\u3082\u516c\u5f0f\u3068\u898b\u6bd4\u3079\u308b\u3068\u7d50\u69cb\u3059\u3050\u5bfe\u5fdc\u3057\u3066\u304f\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fDebian trixie backports \u306esnac \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u3046\u3088\u3046\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\n\nDebian \u3067\u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\n\n\nsnac2 \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u3057\u304b\u3057\uff0cstable \u306eDebian 13 trixie \u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f 2.75-2 \u3067\u5c11\u3057\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\uff0e\nstable-backports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u73fe\u5728\u306e\u4e0a\u6d41\u306e\u6700\u65b0\u3068\u540c\u3058 2.85 \u306a\u306e\u3067\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ rmadison snac2| grep -v debug\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2 | 2.75-2 | stable | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.84-3~bpo13+1 | stable-backports | source, riscv64\nsnac2 | 2.85-1~bpo13+1 | stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2 | 2.85-1 | testing | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.85-1 | unstable | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\n\n\n\n\n\nDebian — \u30d1\u30c3\u30b1\u30fc\u30b8\u691c\u7d22\u7d50\u679c — snac2\n\n\n\n\n\n\nDebian 13 trixie \u306b backports \u3092\u8a2d\u5b9a\n\n\nDebian backports \u306fDebian stable \u3067\u4e00\u90e8\u306etesting \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u8abf\u6574\u3055\u308c\u305f\u3082\u306e\u3067\u5bfe\u5fdc\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3042\u308c\u3070stable \u3088\u308a\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\nDebian Backports\n\n\nInstructions\n\n\n\n\n\u3053\u308c\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306fbackports \u60c5\u5831\u3092 sources.list \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e\n\u3053\u3053\u3067\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u540c\u3058 /etc/apt/sources.list.d/debian-backports.sources \u3068\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\uff0e\n\n\n/etc/apt/sources.list.d/debian-backports.sources \u3092\u4f5c\u6210\n\nTypes: deb deb-src\nURIs: http://deb.debian.org/debian\nSuites: trixie-backports\nComponents: main\nEnabled: yes\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg\n\n\n\n\u7d9a\u3044\u3066\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u3092backports \u3092\u542b\u3080\u6700\u65b0\u72b6\u614b\u306b\u3057\u307e\u3059\uff0e\n\n\n\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u66f4\u65b0\n\n$ sudo apt update\n\n\n\nbackports \u306e snac \u3092\u5c0e\u5165\n\nbackpots \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5c0e\u5165\u3055\u308c\u307e\u305b\u3093\uff0ebackports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3059\u308b\u306b\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306b /trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo apt install snac2/trixie-backports\n\n\n\n\u3082\u3057\u304f\u306f -t trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3059\u308b\u3068\u4e0d\u8db3\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5c0e\u5165\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ sudo apt install -t trixie-backports snac2\n\n\n\n\n$ dpkg-query -W snac2\nsnac2 2.85-1~bpo13+1\n$ snac version\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n\nupgrade {basedir} Upgrade to a new version\n\n\n\n\u5c0e\u5165\u3055\u308c\u305fbackports \u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u3068\u540c\u3058\u512a\u5148\u5ea6100\u306b\u56fa\u5b9a\u3055\u308c\u308b\u306e\u3067\u5c0e\u5165\u5f8c\u306f\u3044\u3064\u3082\u306e apt upgrade \u3067backports \u30d1\u30c3\u30b1\u30fc\u30b8\u3082\u66f4\u65b0\u3055\u308c\u307e\u3059\uff0e\u3064\u307e\u308a\u901a\u5e38\u306e\u904b\u7528\u3067\u5927\u4e08\u592b\u3067\u3059\uff0e\n\n\n\n\n\nsnac \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u64cd\u4f5c\n\n\nsnac \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u6642\u306b\u30c7\u30a3\u30b9\u30af\u69cb\u6210\u304c\u5909\u308f\u308b\u3053\u3068\u304c\u3042\u308a\uff0c\u305d\u306e\u5834\u5408snac \u304c\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\u305d\u306e\u5834\u5408snac \u306e upgrade \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\n\u81ea\u5206\u306f\u5ff5\u306e\u70ba\u6bce\u56de\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\nsnac(8)\u3088\u308a\n\n\n\nUpgrading to a new version\n Sometimes, the data storage disk layout changes between versions. If there is such a change, snac will refuse to run and require an upgrade. Do this by running\n\n\n\n\nsnac upgrade $HOME/snac-data\n\n\n\n\nTake special care to execute this upgrade operation without any snac processes serving on the same folder. You can break everything. I know this because Tyler knows this.\n\n\n\n\n\n\n$ snac | grep upgrade\nupgrade {basedir} Upgrade to a new version\n\n\n\nupgrade \u30b3\u30de\u30f3\u30c9\u306f\u30c7\u30fc\u30e2\u30f3\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u4e00\u65e6snac \u3092\u505c\u6b62\u3057\u3066\u304b\u3089\u5b9f\u884c\uff0c\u305d\u306e\u5f8csnac \u3092\u8d77\u52d5\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo service snac2 stop (1)\n$ sudo -u debian-snac snac upgrade /var/lib/snac2/ (2)\n19:45:50 Linux sandbox not compiled in\n19:45:50 OK\n$ sudo service snac2 start (3)\n$ w3m -dump https://snac.kagolug.org/info | tail -1 (4)\nabout this site - powered by snac/2.83\n\n\n\n\n\nsnac \u505c\u6b62\n\n\nsnac upgrade\n\n\nsnac \u8d77\u52d5\n\n\n\u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\n\n\n\n\n\u3068\u3044\u3046\u611f\u3058\u3067Debian stable \u3067\u3082\u6700\u65b0\u306esnac \u304c\u5229\u7528\u3067\u304d\u3066\u3044\u307e\u3059\uff0e\u4e00\u65e6\u8a2d\u5b9a\u3059\u308b\u3068\u901a\u5e38\u306eDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u66f4\u65b0\u64cd\u4f5c\u3067\u8ffd\u5f93\u3057\u3066\u304f\u308c\u308b\u306e\u3067\u904b\u7528\u3082\u3044\u3064\u3082\u3068\u5909\u308f\u308a\u307e\u305b\u3093\uff0e\u66f4\u65b0\u30bf\u30a4\u30df\u30f3\u30b0\u3082\u516c\u5f0f\u3068\u898b\u6bd4\u3079\u308b\u3068\u7d50\u69cb\u3059\u3050\u5bfe\u5fdc\u3057\u3066\u304f\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\u30bf\u30b0 – grunfink/snac2 – Codeberg.org\n\n\nDebian Package Tracker", "date_published": "2025-12-11T18:35:57+09:00", "date_modified": "2025-12-11T18:35:58+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Debian", "snac", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4889", "url": "https://matoken.org/blog/2025/12/10/snac-emoji/", "title": "snac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306f\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

ActivityPub \u5404\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308b\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff0emisskey.io \u306a\u3093\u304b\u3067\u306f\u7279\u306b\u591a\u7528\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e
\nsnac \u3082\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u65e2\u5b9a\u5024\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u3066\u4f8b\u3048\u3070toot \u672c\u6587\u4e2d\u306b :-) \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🙂\u300d\u304c\uff0c :beer: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🍺\u300d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u4ed6\u306b :shrug2: \u3067\u300c¯\\_(ツ)_/¯\u300d\u306a\u3093\u3067\u3082\u306e\u3082\uff0e\u3067\u3082\u3053\u306e\u3042\u305f\u308a\u306eUnicode\u7d75\u6587\u5b57\u306a\u3069\u306f\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u304c\u3042\u308b\u3068\u3042\u307e\u308a\u6709\u308a\u96e3\u307f\u306f\u611f\u3058\u306a\u305d\u3046\u3067\u3059\uff0e\u3067\u3082\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

\u81ea\u5206\u3067\u7528\u610f\u3057\u305f\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n

\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306fsnac \u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b emojis.json \u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

emojis.json \u306e\u65e2\u5b9a\u5024\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e
\ntoot \u672c\u6587\u4e2d\u306b\u8a18\u8ff0\u3059\u308bkey \u3068\uff0c\u5b9f\u969b\u306b\u8a55\u3055\u308c\u308b\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\uff0ekey \u306f\u4fdd\u7ba1\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b : \u3067\u56f2\u3080\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u5024\u306f\u4ee5\u4e0b\u3067\u306f\u6570\u5024\u6587\u5b57\u53c2\u7167\u53ca\u3073\u6587\u5b57\u5217\u3067\u3059\u304c\uff0cURL \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e

\n
\n
\n
\n
{\n    \":-)\": \"&#128578;\",\n    \":-D\": \"&#128512;\",\n    \"X-D\": \"&#128518;\",\n    \";-)\": \"&#128521;\",\n    \"B-)\": \"&#128526;\",\n    \">:-(\": \"&#128545;\",\n    \":-(\": \"&#128542;\",\n    \":-*\": \"&#128536;\",\n    \":-/\": \"&#128533;\",\n    \"8-o\": \"&#128562;\",\n    \"%-)\": \"&#129322;\",\n    \":_(\": \"&#128546;\",\n    \":-|\": \"&#128528;\",\n    \"<3\": \"&#10084;&#65039;\",\n    \":facepalm:\": \"&#129318;\",\n    \":shrug:\": \"&#129335;\",\n    \":shrug2:\": \"&#175;\\\\_(&#12484;)_/&#175;\",\n    \":eyeroll:\": \"&#128580;\",\n    \":beer:\": \"&#127866;\",\n    \":beers:\": \"&#127867;\",\n    \":munch:\": \"&#128561;\",\n    \":thumb:\": \"&#128077;\"\n}
\n
\n
\n
\n

\u3053\u3053\u306bsnac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0esnac \u306e\u30d9\u30fc\u30b9url \u306e\u4e0b\u306e /susie.png (kagolug \u3067\u306f https://snac.kagolug.org/susie.png )\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068snac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u306esusie \u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

emojis.json \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\uff0e

\n
\n
\n
\n
     \":beer:\": \"&#127866;\",\n     \":beers:\": \"&#127867;\",\n     \":munch:\": \"&#128561;\",\n-    \":thumb:\": \"&#128077;\"\n+    \":thumb:\": \"&#128077;\",\n+    \":susie:\": \"https://snac.kagolug.org/susie.png\"\n }
\n
\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

emojis.json \u306f\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u5185\u5bb9\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\u4e2d\u9014\u534a\u7aef\u306a\u72b6\u614b\u3067\u4fdd\u5b58\u3059\u308b\u3068\u5168\u3066\u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u305f\u308a\u3059\u308b\u306e\u3067\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n
\n
\n

\u3053\u308c\u3067 :susie: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067 \"snac \u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n

\u66f4\u306b\u30da\u30f3\u30ae\u30f3\u306eTux \u3068\u30bf\u30b9\u30de\u30cb\u30a2\u30c7\u30d3\u30eb\u306eTuz \u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0e
\n\u30a2\u30a4\u30b3\u30f3\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u9759\u7684\u74b0\u5883\u306b\u8a2d\u7f6e\uff0c\u305d\u306eurl \u3092emojis.json \u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u307e\u3059\uff0e
\n\u4eca\u56de\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
     \":beer:\": \"&#127866;\",\n     \":beers:\": \"&#127867;\",\n     \":munch:\": \"&#128561;\",\n-    \":thumb:\": \"&#128077;\"\n+    \":thumb:\": \"&#128077;\",\n+    \":susie:\": \"https://snac.kagolug.org/susie.png\",\n+    \":tux:\": \"https://www.kagolug.org/snac-emoji/Tux.png\",\n+    \":tuz:\": \"https://www.kagolug.org/snac-emoji/Tuz.png\"\n }
\n
\n
\n
\n

\u3053\u308c\u3067 :susie:, :tux:, :tuz: \u306e3\u3064\u306e\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\ntoot \u3057\u3066\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
\n\u3082\u3057\u304f\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b5\u30a4\u30c8\u3067Mastodon \u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57API\u7d4c\u7531\u3067\u7d75\u6587\u5b57\u4e00\u89a7\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\"snac]

\n
\n
\n

snac \u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fsnac(8) \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e

\n
\n
\n
\n
\n
\n
Custom Emojis\n    From version 2.51, support for customized Emojis in posts is available (previously, they were hardcoded). Emojis are read from the emojis.json file in the instance base directory, as a JSON object of key / value pairs (if this file\n    does not exist, it will be created with the predefined set). Each key in the object contains the text to be found (e.g., the :-) for a smiling face), and its associated value, the text string that will replace it (in  this  example\n    case, the HTML entity for the Unicode codepoint for the smiley or the Emoji itself as text).
\n
\n
\n
\n
\n
Emoji values can also be URLs to image files; in this case, they will not be substituted in the post content, but added to the 'tag' array as an ActivityPub standard 'Emoji' object (it's recommendable that the Emoji key be enclosed\nin colons for maximum compatibility with other ActivityPub implementations, like e.g. :happydoggo:). These images can be served from an external source or from the static directory of the instance admin.
\n
\n
\n
\n
\n
If you want to disable any Emoji substitution, change the file to contain just an empty JSON object ({}).
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306f\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\uff0e\n\n\n\nActivityPub \u5404\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308b\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff0emisskey.io \u306a\u3093\u304b\u3067\u306f\u7279\u306b\u591a\u7528\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\nsnac \u3082\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\u65e2\u5b9a\u5024\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u3066\u4f8b\u3048\u3070toot \u672c\u6587\u4e2d\u306b :-) \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🙂\u300d\u304c\uff0c :beer: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🍺\u300d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u4ed6\u306b :shrug2: \u3067\u300c¯\\_(ツ)_/¯\u300d\u306a\u3093\u3067\u3082\u306e\u3082\uff0e\u3067\u3082\u3053\u306e\u3042\u305f\u308a\u306eUnicode\u7d75\u6587\u5b57\u306a\u3069\u306f\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u304c\u3042\u308b\u3068\u3042\u307e\u308a\u6709\u308a\u96e3\u307f\u306f\u611f\u3058\u306a\u305d\u3046\u3067\u3059\uff0e\u3067\u3082\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\u81ea\u5206\u3067\u7528\u610f\u3057\u305f\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e\n\n\n\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306fsnac \u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b emojis.json \u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\uff0e\n\n\nemojis.json \u306e\u65e2\u5b9a\u5024\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e\ntoot \u672c\u6587\u4e2d\u306b\u8a18\u8ff0\u3059\u308bkey \u3068\uff0c\u5b9f\u969b\u306b\u8a55\u3055\u308c\u308b\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\uff0ekey \u306f\u4fdd\u7ba1\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b : \u3067\u56f2\u3080\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u5024\u306f\u4ee5\u4e0b\u3067\u306f\u6570\u5024\u6587\u5b57\u53c2\u7167\u53ca\u3073\u6587\u5b57\u5217\u3067\u3059\u304c\uff0cURL \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e\n\n\n\n{\n \":-)\": \"&#128578;\",\n \":-D\": \"&#128512;\",\n \"X-D\": \"&#128518;\",\n \";-)\": \"&#128521;\",\n \"B-)\": \"&#128526;\",\n \">:-(\": \"&#128545;\",\n \":-(\": \"&#128542;\",\n \":-*\": \"&#128536;\",\n \":-/\": \"&#128533;\",\n \"8-o\": \"&#128562;\",\n \"%-)\": \"&#129322;\",\n \":_(\": \"&#128546;\",\n \":-|\": \"&#128528;\",\n \"<3\": \"&#10084;&#65039;\",\n \":facepalm:\": \"&#129318;\",\n \":shrug:\": \"&#129335;\",\n \":shrug2:\": \"&#175;\\\\_(&#12484;)_/&#175;\",\n \":eyeroll:\": \"&#128580;\",\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n \":thumb:\": \"&#128077;\"\n}\n\n\n\n\u3053\u3053\u306bsnac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0esnac \u306e\u30d9\u30fc\u30b9url \u306e\u4e0b\u306e /susie.png (kagolug \u3067\u306f https://snac.kagolug.org/susie.png )\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068snac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u306esusie \u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\nemojis.json \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\uff0e\n\n\n\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n- \":thumb:\": \"&#128077;\"\n+ \":thumb:\": \"&#128077;\",\n+ \":susie:\": \"https://snac.kagolug.org/susie.png\"\n }\n\n\n\n\n\n\nTip\n\n\n\nemojis.json \u306f\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u5185\u5bb9\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\u4e2d\u9014\u534a\u7aef\u306a\u72b6\u614b\u3067\u4fdd\u5b58\u3059\u308b\u3068\u5168\u3066\u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u305f\u308a\u3059\u308b\u306e\u3067\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\uff0e\n\n\n\n\n\n\n\u3053\u308c\u3067 :susie: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067 \u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\u66f4\u306b\u30da\u30f3\u30ae\u30f3\u306eTux \u3068\u30bf\u30b9\u30de\u30cb\u30a2\u30c7\u30d3\u30eb\u306eTuz \u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0e\n\u30a2\u30a4\u30b3\u30f3\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u9759\u7684\u74b0\u5883\u306b\u8a2d\u7f6e\uff0c\u305d\u306eurl \u3092emojis.json \u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u307e\u3059\uff0e\n\u4eca\u56de\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n- \":thumb:\": \"&#128077;\"\n+ \":thumb:\": \"&#128077;\",\n+ \":susie:\": \"https://snac.kagolug.org/susie.png\",\n+ \":tux:\": \"https://www.kagolug.org/snac-emoji/Tux.png\",\n+ \":tuz:\": \"https://www.kagolug.org/snac-emoji/Tuz.png\"\n }\n\n\n\n\u3053\u308c\u3067 :susie:, :tux:, :tuz: \u306e3\u3064\u306e\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\ntoot \u3057\u3066\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n\u3082\u3057\u304f\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b5\u30a4\u30c8\u3067Mastodon \u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57API\u7d4c\u7531\u3067\u7d75\u6587\u5b57\u4e00\u89a7\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e\n\n\n\n\nMastodon instance custom emoji listz\n\n\n\n\n]\n\n\nsnac \u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fsnac(8) \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e\n\n\n\n\n\nCustom Emojis\n From version 2.51, support for customized Emojis in posts is available (previously, they were hardcoded). Emojis are read from the emojis.json file in the instance base directory, as a JSON object of key / value pairs (if this file\n does not exist, it will be created with the predefined set). Each key in the object contains the text to be found (e.g., the :-) for a smiling face), and its associated value, the text string that will replace it (in this example\n case, the HTML entity for the Unicode codepoint for the smiley or the Emoji itself as text).\n\n\n\n\nEmoji values can also be URLs to image files; in this case, they will not be substituted in the post content, but added to the 'tag' array as an ActivityPub standard 'Emoji' object (it's recommendable that the Emoji key be enclosed\nin colons for maximum compatibility with other ActivityPub implementations, like e.g. :happydoggo:). These images can be served from an external source or from the static directory of the instance admin.\n\n\n\n\nIf you want to disable any Emoji substitution, change the file to contain just an empty JSON object ({}).", "date_published": "2025-12-10T19:09:41+09:00", "date_modified": "2025-12-10T19:09:43+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "emoji", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4863", "url": "https://matoken.org/blog/2025/12/09/sakura-knowledge/", "title": "\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f", "content_html": "
\n

\"5

\n
\n
\n

\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n

\n
\n

\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group\u306eVPS\u3092\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3055\u3093\u306b\u30b3\u30df\u30cb\u30e5\u30c6\u30a3\u652f\u63f4\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3044\u307e\u3059\uff0e\u3053\u306e\u7e01\u3067\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\n\u4eca\u56de\u306e\u5185\u5bb9\u306f\u8efd\u91cf\u306aActivityPub Server \u306esnac \u3092\u8a2d\u5b9a\u3057\u305f\u3068\u304d\u306e\u8a18\u9332\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\uff0e
\n\u5143\u306f\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10 \u3067\u767a\u8868\u3057\u305f\u3082\u306e\u3092\u5143\u306b\u3057\u305f\u3082\u306e\u3067\u3059\uff0e

\n
\n
\n

\u8208\u5473\u304c\u3042\u308c\u3070\u8aad\u3093\u3067\u3082\u3089\u3048\u308b\u3068\u5b09\u3057\u3044\u3067\u3059\uff0e

\n
\n
\n\n
\n", "content_text": "\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u306eVPS\u3067\u8a66\u3059\u3001\u8efd\u91cfActivityPub\u5b9f\u88c5\u300csnac\u300d\u306b\u3088\u308b\u30bb\u30eb\u30d5\u30db\u30b9\u30c8SNS\u69cb\u7bc9 | \u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\n\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group\u306eVPS\u3092\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3055\u3093\u306b\u30b3\u30df\u30cb\u30e5\u30c6\u30a3\u652f\u63f4\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3044\u307e\u3059\uff0e\u3053\u306e\u7e01\u3067\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\u4eca\u56de\u306e\u5185\u5bb9\u306f\u8efd\u91cf\u306aActivityPub Server \u306esnac \u3092\u8a2d\u5b9a\u3057\u305f\u3068\u304d\u306e\u8a18\u9332\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\uff0e\n\u5143\u306f\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10 \u3067\u767a\u8868\u3057\u305f\u3082\u306e\u3092\u5143\u306b\u3057\u305f\u3082\u306e\u3067\u3059\uff0e\n\n\n\u8208\u5473\u304c\u3042\u308c\u3070\u8aad\u3093\u3067\u3082\u3089\u3048\u308b\u3068\u5b09\u3057\u3044\u3067\u3059\uff0e\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050(Linux User’s Group)\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac) – connpass\n\n\n\n\u30a2\u30ca\u30a6\u30f3\u30b9\u5411\u3051\u306b\u30df\u30cb\u30de\u30ea\u30b9\u30c8\u5411\u3051 ActivityPub Server \u306e snac \u3092\u5229\u7528\n\n\n\n\n\ninfo (@info@snac.kagolug.org)", "date_published": "2025-12-09T19:49:03+09:00", "date_modified": "2025-12-09T19:49:05+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "blog", "sakura internet", "snac", "\u52c9\u5f37\u4f1a" ] }, { "id": "https://matoken.org/blog/?p=4002", "url": "https://matoken.org/blog/2024/03/27/read-and-write-misskey-with-misskey-cli/", "title": "misskey-cli \u3067 Misskey \u3092\u8aad\u307f\u66f8\u304d", "content_html": "
\n

Misskey \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e sayaka \u3061\u3083\u3093\u306f sixel \u3067\u753b\u50cf\u304c\u8868\u793a\u3067\u304d\u3068\u3066\u3082\u4fbf\u5229\u3067\u3059\u304c\uff0c\u6295\u7a3f\u304c\u3067\u304d\u307e\u305b\u3093\uff0e

\n
\n
\n\n
\n
\n

Terminal \u304b\u3089\u6295\u7a3f\u3082\u3057\u305f\u3044\u306e\u3067\u4ed6\u306e cli \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e misskey-cli \u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n

\n
\n

\u65e9\u901f\u5c0e\u5165\u3057\u307e\u3059\uff0e
\n\u4eca\u56de go install \u3067\u5c0e\u5165\u3057\u307e\u3057\u305f\u304c\uff0c Releases \u306b\u5404\u7a2e\u74b0\u5883\u5411\u3051\u306e\u30d0\u30a4\u30ca\u30ea\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u81ea\u5206\u306e\u74b0\u5883\u306b\u3042\u3063\u305f\u30d0\u30a4\u30ca\u30ea\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5b9f\u884c\u6a29\u3092\u4ed8\u4e0e\u3057\u3066\u3042\u3052\u308c\u3070\u7c21\u5358\u306b\u5229\u7528\u3067\u304d\u307e\u3059\uff0ehash \u3084 \u7f72\u540d\u306f\u7121\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
install
\n
\n
$ go install github.com/mikuta0407/misskey-cli@latest\n$ ~/go/bin/misskey-cli\nmisskey-cli  Misskey CLI Client\n\nUsage:\n  misskey-cli [command]\n\nAvailable Commands:\n  help        Help about any command\n  note        Create/Reply/Delete note\n  renote      Renote note by noteId\n  stream      streaming timeline\n  tl          Show timelime (local/home/global)\n  version     Show version and build revision.\n\nFlags:\n      --config string     config file (default \"/home/matoken/.config/misskey-cli.toml\")\n  -h, --help              help for misskey-cli\n  -i, --instance string   connect instance name(not host name)\n  -t, --toggle            Help message for toggle\n\nUse \"misskey-cli [command] --help\" for more information about a command.\n$ misskey-cli version\nmisskey-cli  version:
\n
\n
\n
\n

\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\u307e\u3059\uff0e
\n~/.config/misskey-cli.toml \u3092\u4f5c\u6210\u3057\u307e\u3059\uff0ehost \u306f Misskey \u306e url \uff0cname \u306f\u4efb\u610f\u306e\u540d\u524d\uff0ctoken \u306f Misskey \u306e\u300c\u8a2d\u5b9a\u300d\u2192\u300cAPI\u300d\u2192\u300c\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u306e\u767a\u884c\u300d\u304b\u3089\u767a\u884c\u3057\u305f\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\uff0e
\n\u8907\u6570\u306e Misskey \u3092\u767b\u9332\u3067\u304d\u307e\u3059\uff0e\u4ee5\u4e0b\u306f2\u3064\u306e Misskey \u3092\u767b\u9332\u3057\u307e\u3057\u305f\uff0e\u5b9f\u884c\u6642\u306b\u4e00\u756a\u4e0a\u306e\u8a2d\u5b9a\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u306a\u308b\u306e\u3067\u3088\u304f\u4f7f\u3046 Misskey \u3092\u4e00\u756a\u4e0a\u306b\u3059\u308b\u3068\u3044\u3044\u3067\u3059\uff0e

\n
\n
\n
\n
$ vi ~/.config/misskey-cli.toml\n$ cat ~/.config/misskey-cli.toml\n[[Instance]]\n  host = \"https://msky.ospn.jp/\"\n  name = \"OSPN\"\n  token = \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n[[Instance]]\n  host = \"https://misskey.io/\"\n  name = \"misskey.io\"\n  token = \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"
\n
\n
\n
\n

\u65e9\u901f\u4f7f\u3063\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
misskey-cli \u3092\u3067 note \u3084 \u95b2\u89a7
\n
\n
$ misskey-cli note 'misskey-cli \u304b\u3089 note\nhttps://github.com/mikuta0407/misskey-cli'\nmisskey-cli  Create Note: @ (https://msky.ospn.jp/)\n===============================================================================================================================================================================================================================================\nNote Success! id : 9rcgksz5uzfb00f6\n\"misskey-cli \u304b\u3089 note\nhttps://github.com/mikuta0407/misskey-cli\"\n$ misskey-cli tl -l1\nmisskey-cli  Timeline: local  @ (https://msky.ospn.jp/)\n===============================================================================================================================================================================================================================================\n2024/03/27 06:33:58 matoken(@matoken)    misskey-cli \u304b\u3089 note\nhttps://github.com/mikuta0407/misskey-cli (9rcgksz5uzfb00f6)
\n
\n
\n
\n

\u8907\u6570\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u767b\u9332\u3057\u3066\u3044\u308b\u5834\u5408\u306f -i name (name \u306f\u8a2d\u5b9a\u306e tolm \u306e name )\u3067\u4efb\u610f\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ misskey-cli -i misskey.io stream\nmisskey-cli  Stream: local  @ (https://misskey.io/)\n===============================================================================================================================================================================================================================================\n2024/03/27 06:59:02 Connected to server\n  :
\n
\n
\n
\n

\u305d\u306e\u4ed6\u8a73\u7d30\u306f README.md \u306b\u65e5\u672c\u8a9e\u3067\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u3068\u308a\u3042\u3048\u305a\u4e00\u901a\u308a\u306e\u3053\u3068\u306f\u3067\u304d\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\u74b0\u5883
\n
\n
$ misskey-cli version\nmisskey-cli  version:\n$ ls ~/go/pkg/mod/github.com/mikuta0407/\nmisskey-cli@v0.0.0-20230730142608-ab80e8e6583c\n$ dpkg-query -W golang\ngolang:armhf    2:1.19~1\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Raspbian\nDescription:    Raspbian GNU/Linux 12 (bookworm)\nRelease:        12\nCodename:       bookworm\n$ arch\naarch64
\n
\n
\n", "content_text": "Misskey \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e sayaka \u3061\u3083\u3093\u306f sixel \u3067\u753b\u50cf\u304c\u8868\u793a\u3067\u304d\u3068\u3066\u3082\u4fbf\u5229\u3067\u3059\u304c\uff0c\u6295\u7a3f\u304c\u3067\u304d\u307e\u305b\u3093\uff0e\n\n\n\nmisskey \u30af\u30e9\u30a4\u30a2\u30f3\u30c8 sayaka \u3061\u3083\u3093 \u2013 matoken\u2019s meme\n\n\n\nTerminal \u304b\u3089\u6295\u7a3f\u3082\u3057\u305f\u3044\u306e\u3067\u4ed6\u306e cli \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e misskey-cli \u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\nmikuta0407/misskey-cli\n\n\n\n\n\u65e9\u901f\u5c0e\u5165\u3057\u307e\u3059\uff0e\n\u4eca\u56de go install \u3067\u5c0e\u5165\u3057\u307e\u3057\u305f\u304c\uff0c Releases \u306b\u5404\u7a2e\u74b0\u5883\u5411\u3051\u306e\u30d0\u30a4\u30ca\u30ea\u3082\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u81ea\u5206\u306e\u74b0\u5883\u306b\u3042\u3063\u305f\u30d0\u30a4\u30ca\u30ea\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5b9f\u884c\u6a29\u3092\u4ed8\u4e0e\u3057\u3066\u3042\u3052\u308c\u3070\u7c21\u5358\u306b\u5229\u7528\u3067\u304d\u307e\u3059\uff0ehash \u3084 \u7f72\u540d\u306f\u7121\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\ninstall\n\n$ go install github.com/mikuta0407/misskey-cli@latest\n$ ~/go/bin/misskey-cli\nmisskey-cli Misskey CLI Client\n\nUsage:\n misskey-cli [command]\n\nAvailable Commands:\n help Help about any command\n note Create/Reply/Delete note\n renote Renote note by noteId\n stream streaming timeline\n tl Show timelime (local/home/global)\n version Show version and build revision.\n\nFlags:\n --config string config file (default \"/home/matoken/.config/misskey-cli.toml\")\n -h, --help help for misskey-cli\n -i, --instance string connect instance name(not host name)\n -t, --toggle Help message for toggle\n\nUse \"misskey-cli [command] --help\" for more information about a command.\n$ misskey-cli version\nmisskey-cli version:\n\n\n\n\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\u307e\u3059\uff0e\n~/.config/misskey-cli.toml \u3092\u4f5c\u6210\u3057\u307e\u3059\uff0ehost \u306f Misskey \u306e url \uff0cname \u306f\u4efb\u610f\u306e\u540d\u524d\uff0ctoken \u306f Misskey \u306e\u300c\u8a2d\u5b9a\u300d\u2192\u300cAPI\u300d\u2192\u300c\u30a2\u30af\u30bb\u30b9\u30c8\u30fc\u30af\u30f3\u306e\u767a\u884c\u300d\u304b\u3089\u767a\u884c\u3057\u305f\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\uff0e\n\u8907\u6570\u306e Misskey \u3092\u767b\u9332\u3067\u304d\u307e\u3059\uff0e\u4ee5\u4e0b\u306f2\u3064\u306e Misskey \u3092\u767b\u9332\u3057\u307e\u3057\u305f\uff0e\u5b9f\u884c\u6642\u306b\u4e00\u756a\u4e0a\u306e\u8a2d\u5b9a\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u306a\u308b\u306e\u3067\u3088\u304f\u4f7f\u3046 Misskey \u3092\u4e00\u756a\u4e0a\u306b\u3059\u308b\u3068\u3044\u3044\u3067\u3059\uff0e\n\n\n\n$ vi ~/.config/misskey-cli.toml\n$ cat ~/.config/misskey-cli.toml\n[[Instance]]\n host = \"https://msky.ospn.jp/\"\n name = \"OSPN\"\n token = \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n[[Instance]]\n host = \"https://misskey.io/\"\n name = \"misskey.io\"\n token = \"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n\n\n\n\u65e9\u901f\u4f7f\u3063\u3066\u307f\u307e\u3059\uff0e\n\n\nmisskey-cli \u3092\u3067 note \u3084 \u95b2\u89a7\n\n$ misskey-cli note 'misskey-cli \u304b\u3089 note\nhttps://github.com/mikuta0407/misskey-cli'\nmisskey-cli Create Note: @ (https://msky.ospn.jp/)\n===============================================================================================================================================================================================================================================\nNote Success! id : 9rcgksz5uzfb00f6\n\"misskey-cli \u304b\u3089 note\nhttps://github.com/mikuta0407/misskey-cli\"\n$ misskey-cli tl -l1\nmisskey-cli Timeline: local @ (https://msky.ospn.jp/)\n===============================================================================================================================================================================================================================================\n2024/03/27 06:33:58 matoken(@matoken) misskey-cli \u304b\u3089 note\nhttps://github.com/mikuta0407/misskey-cli (9rcgksz5uzfb00f6)\n\n\n\n\u8907\u6570\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u767b\u9332\u3057\u3066\u3044\u308b\u5834\u5408\u306f -i name (name \u306f\u8a2d\u5b9a\u306e tolm \u306e name )\u3067\u4efb\u610f\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\uff0e\n\n\n\n$ misskey-cli -i misskey.io stream\nmisskey-cli Stream: local @ (https://misskey.io/)\n===============================================================================================================================================================================================================================================\n2024/03/27 06:59:02 Connected to server\n :\n\n\n\n\u305d\u306e\u4ed6\u8a73\u7d30\u306f README.md \u306b\u65e5\u672c\u8a9e\u3067\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\uff0e\n\n\n\u3068\u308a\u3042\u3048\u305a\u4e00\u901a\u308a\u306e\u3053\u3068\u306f\u3067\u304d\u305d\u3046\u3067\u3059\uff0e\n\n\n\u74b0\u5883\n\n$ misskey-cli version\nmisskey-cli version:\n$ ls ~/go/pkg/mod/github.com/mikuta0407/\nmisskey-cli@v0.0.0-20230730142608-ab80e8e6583c\n$ dpkg-query -W golang\ngolang:armhf 2:1.19~1\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Raspbian\nDescription: Raspbian GNU/Linux 12 (bookworm)\nRelease: 12\nCodename: bookworm\n$ arch\naarch64", "date_published": "2024-03-27T07:17:40+09:00", "date_modified": "2024-03-27T07:17:42+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "CLI", "misskey", "bookworm", "Linux", "Raspberry Pi OS" ] }, { "id": "https://matoken.org/blog/?p=3994", "url": "https://matoken.org/blog/2024/03/20/try-writefreely/", "title": "ActivityPub\u5bfe\u5fdcblog\u30b7\u30b9\u30c6\u30e0\u306eWriteFreely\u3092\u8a66\u3059", "content_html": "
\n
\n
\n

\"writefreely\"/

\n
\n
\n

\u8efd\u91cf\u306a micro blog \u3092\u63a2\u3057\u3066\u3044\u307e\u3059\uff0c\u4eca\u56de ActivityPub \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u308b WriteFreely \u3092\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\n\u4eca\u56de\u306f ActivityPub \u306b\u3088\u308b Federation \u306f\u672a\u691c\u8a3c\u3067\u3059\uff0e

\n
\n
\n\n
\n

\n
\n

\u5148\u305a\u306f https://github.com/writefreely/writefreely/releases/latest \u304b\u3089\u81ea\u5206\u306e\u74b0\u5883\u306b\u3042\u3063\u305f\u30d0\u30a4\u30ca\u30ea\u3092\u5165\u624b\u3057\u307e\u3059\uff0e\u4eca\u56de\u8a66\u3057\u305f v0.15.0 \u3067\u306f Linux amd64, Linux arm6, Linux arm7, Linux arm64, macOS amd64, Windows amd64 \u304c\u3042\u308a\u307e\u3057\u305f\uff0e
\n\u3053\u3053\u3067\u306f Raspberry Pi OS bookworm armhf \u3078 Linux arm7 \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3068\u5c55\u958b

\n
\n
\n
\n
$ wget https://github.com/writefreely/writefreely/releases/download/v0.15.0/writefreely_0.15.0_linux_arm7.tar.gz (1)\n$ tar tvf ./writefreely_0.15.0_linux_arm7.tar.gz (2)\n$ cd ./writefreely\n$ ./writefreely --help (3)\nNAME:\n   WriteFreely - A beautifully pared-down blogging platform\n\nUSAGE:\n   WriteFreely [global options] command [command options]\n\nVERSION:\n   WriteFreely 0.15.0\n\nCOMMANDS:\n   user        user management tools\n   db          db management tools\n   config      config management tools\n   keys        key management tools\n   serve, web  Run web application\n   help, h     Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n   -c FILE        Load configuration from FILE (default: \"config.ini\")\n   --debug        Enables debug logging (default: false)\n   --help, -h     show help\n   --version, -v  print the version
\n
\n
\n
\n
    \n
  1. \u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
  2. \n
  3. \u5c55\u958b
  4. \n
  5. help
  6. \n
\n
\n
\n
\n
\n

\u521d\u671f\u8a2d\u5b9a\u3068\u8d77\u52d5

\n
\n
\n

WriteFreely \u306e\u521d\u671f\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\uff0e\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u53c2\u8003\u306b\uff0e

\n
\n\n
\n
\n
$ ./writefreely config start (1)\nNo config.ini configuration yet. Creating new.\n\n  ✍ WriteFreely Configuration ✍\n\n  This quick configuration process will generate the application's config\nfile, config.ini.\n\n  It validates your input along the way, so you can be sure any future\nerrors aren't caused by a bad configuration. If you'd rather configure your\nserver manually, instead run: writefreely --create-config and edit that\nfile.\n\n Server setup\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Environment:\n    Development\n  \u25b8 Production, standalone (2)\n    Production, behind reverse proxy\n\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Web server mode:\n  \u25b8 Insecure (port 80)  (3)\n    Secure (port 443), manual certificate\n    Secure (port 443), auto certificate\n\n Database setup\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Database driver:\n    MySQL\n  \u25b8 SQLite (4)\n\n  SQLite\n✔ Filename: \u2588ritefreely.db  (5)\n\n App setup[server][se[server][server][server][server][server]rver]\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Site type:\n  \u25b8 Single user blog (6)\n    Multi-user instance\n\n✔ Admin username: \u2588ADMINISTRATOR (7)\n✔ Admin password: \u2588STRONGPASSWORD (8)\n✔ Blog name: \u2588est blogo (9)\n✔ Public URL: \u2588ttp://localhost:80 (10)\n\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Federation:\n    Enabled\n  \u25b8 Disabled (11)
\n
\n
\n
\n
    \n
  1. config start \u3067\u554f\u3044\u5408\u308f\u305b\u306b\u7b54\u3048\u3066\u3044\u304f\u3053\u3068\u3067\u8a2d\u5b9a
  2. \n
  3. \u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30fc\u30f3\u74b0\u5883\u3092\u9078\u629e
  4. \n
  5. Web server \u3092 port 80 \u3067\u8d77\u52d5(\u5f8c\u3067\u5909\u66f4\u3057\u305f)
  6. \n
  7. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b SQLite \u3092\u5229\u7528
  8. \n
  9. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u540d\u8a2d\u5b9a
  10. \n
  11. \u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u3067\u5229\u7528
  12. \n
  13. \u30e6\u30fc\u30b6\u30fc\u540d
  14. \n
  15. \u30d1\u30b9\u30ef\u30fc\u30c9
  16. \n
  17. blog\u540d
  18. \n
  19. URL \u6307\u5b9a
  20. \n
  21. Federation \u3092\u7121\u52b9
  22. \n
\n
\n
\n
\u9375\u3092\u751f\u6210\u3057\u307e\u3059\uff0e
\n
\n
$ ./writefreely keys generate
\n
\n
\n
\n

\u65e2\u5b9a\u5024\u3067\u306f\u7279\u6a29\u30dd\u30fc\u30c8\u306e 80 \u3067\u8d77\u52d5\u3057\u3088\u3046\u3068\u3059\u308b\u306e\u3067\uff0c config.ini \u3092\u7de8\u96c6\u3057\u3066\u30dd\u30fc\u30c8\u3092\u5909\u66f4\u3057\u307e\u3059\uff0e
\n[server] \u30bb\u30af\u30b7\u30e7\u30f3\u306e port \u3092 8080 \u306b\u5909\u66f4\u3057\u307e\u3059\uff0e

\n
\n
\n
\u8d77\u52d5
\n
\n
$ ./writefreely
\n
\n
\n
\n
\n
\n

\u5229\u7528

\n
\n
\n

\u4eca\u56de\u306e\u8a2d\u5b9a\u3067\u306f http://localhost:8080/ \u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

\u5148\u305a\u306f\u77ed\u6587\u3092\u6295\u3052\u3066\u307f\u307e\u3059\uff0etitle, body \u304c\u66f8\u3051\u307e\u3059\u304c\uff0cbody \u306e\u307f\u3060\u3068\u65e5\u4ed8\u304ctitle \u306b\u306a\u308b\u611f\u3058\u3067\u3059\u306d\uff0e

\n
\n
\n

\"WriteFreely01\"/

\n
\n
\n

\u753b\u50cf\u6295\u7a3f\u3092\u3057\u305f\u3044\u306e\u3067\u3059\u304c\uff0c\u3069\u3046\u3082\u304c\u305e\u6dfb\u4ed8\u306f\u4e0d\u53ef\u306e\u3088\u3046\u3067\u3059\uff0e\u30ea\u30e2\u30fc\u30c8\u753b\u50cf\u306e\u57cb\u3081\u8fbc\u307f\u306fok\uff0cdata-uri \u306f\u4e0d\u53ef\uff0e

\n
\n
\n

\"WriteFreely03

\n
\n
\n

Markdown \u3067\u88c5\u98fe\u3067\u304d\u307e\u3059\uff0eiframe \u3084\u52d5\u753b\u306e\u57cb\u3081\u8fbc\u307f\u3082OK\uff0e

\n
\n
\n

\"WriteFreely04

\n
\n
\n

\u3066\u3053\u3068\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c\u753b\u50cf\u6dfb\u4ed8\u6a5f\u80fd\u304c\u6b32\u3057\u3044\u306e\u3067\u4eca\u56de\u306f\u898b\u9001\u308a\u304b\u306a\uff0e

\n
\n
\n
\u74b0\u5883
\n
\n
$ ./writefreely --version\nWriteFreely 0.15.0\n$ dpkg-query -W sqlite3\nsqlite3 3.45.1-1\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Debian\nDescription:    Debian GNU/Linux trixie/sid\nRelease:        n/a\nCodename:       trixie\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u8efd\u91cf\u306a micro blog \u3092\u63a2\u3057\u3066\u3044\u307e\u3059\uff0c\u4eca\u56de ActivityPub \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u308b WriteFreely \u3092\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\u4eca\u56de\u306f ActivityPub \u306b\u3088\u308b Federation \u306f\u672a\u691c\u8a3c\u3067\u3059\uff0e\n\n\n\nWriteFreely\n\n\n\n\n\u5148\u305a\u306f https://github.com/writefreely/writefreely/releases/latest \u304b\u3089\u81ea\u5206\u306e\u74b0\u5883\u306b\u3042\u3063\u305f\u30d0\u30a4\u30ca\u30ea\u3092\u5165\u624b\u3057\u307e\u3059\uff0e\u4eca\u56de\u8a66\u3057\u305f v0.15.0 \u3067\u306f Linux amd64, Linux arm6, Linux arm7, Linux arm64, macOS amd64, Windows amd64 \u304c\u3042\u308a\u307e\u3057\u305f\uff0e\n\u3053\u3053\u3067\u306f Raspberry Pi OS bookworm armhf \u3078 Linux arm7 \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3068\u5c55\u958b\n\n\n\n$ wget https://github.com/writefreely/writefreely/releases/download/v0.15.0/writefreely_0.15.0_linux_arm7.tar.gz (1)\n$ tar tvf ./writefreely_0.15.0_linux_arm7.tar.gz (2)\n$ cd ./writefreely\n$ ./writefreely --help (3)\nNAME:\n WriteFreely - A beautifully pared-down blogging platform\n\nUSAGE:\n WriteFreely [global options] command [command options]\n\nVERSION:\n WriteFreely 0.15.0\n\nCOMMANDS:\n user user management tools\n db db management tools\n config config management tools\n keys key management tools\n serve, web Run web application\n help, h Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n -c FILE Load configuration from FILE (default: \"config.ini\")\n --debug Enables debug logging (default: false)\n --help, -h show help\n --version, -v print the version\n\n\n\n\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\u5c55\u958b\nhelp\n\n\n\n\n\n\u521d\u671f\u8a2d\u5b9a\u3068\u8d77\u52d5\n\n\nWriteFreely \u306e\u521d\u671f\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\uff0e\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u53c2\u8003\u306b\uff0e\n\n\n\nGetting Started with WriteFreely\n\n\n\n\n$ ./writefreely config start (1)\nNo config.ini configuration yet. Creating new.\n\n ✍ WriteFreely Configuration ✍\n\n This quick configuration process will generate the application's config\nfile, config.ini.\n\n It validates your input along the way, so you can be sure any future\nerrors aren't caused by a bad configuration. If you'd rather configure your\nserver manually, instead run: writefreely --create-config and edit that\nfile.\n\n Server setup\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Environment:\n Development\n \u25b8 Production, standalone (2)\n Production, behind reverse proxy\n\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Web server mode:\n \u25b8 Insecure (port 80) (3)\n Secure (port 443), manual certificate\n Secure (port 443), auto certificate\n\n Database setup\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Database driver:\n MySQL\n \u25b8 SQLite (4)\n\n SQLite\n✔ Filename: \u2588ritefreely.db (5)\n\n App setup[server][se[server][server][server][server][server]rver]\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Site type:\n \u25b8 Single user blog (6)\n Multi-user instance\n\n✔ Admin username: \u2588ADMINISTRATOR (7)\n✔ Admin password: \u2588STRONGPASSWORD (8)\n✔ Blog name: \u2588est blogo (9)\n✔ Public URL: \u2588ttp://localhost:80 (10)\n\nUse the arrow keys to navigate: \u2193 \u2191 \u2192 \u2190\n? Federation:\n Enabled\n \u25b8 Disabled (11)\n\n\n\n\nconfig start \u3067\u554f\u3044\u5408\u308f\u305b\u306b\u7b54\u3048\u3066\u3044\u304f\u3053\u3068\u3067\u8a2d\u5b9a\n\u30b9\u30bf\u30f3\u30c9\u30a2\u30ed\u30fc\u30f3\u74b0\u5883\u3092\u9078\u629e\nWeb server \u3092 port 80 \u3067\u8d77\u52d5(\u5f8c\u3067\u5909\u66f4\u3057\u305f)\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b SQLite \u3092\u5229\u7528\n\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u540d\u8a2d\u5b9a\n\u30b7\u30f3\u30b0\u30eb\u30e6\u30fc\u30b6\u3067\u5229\u7528\n\u30e6\u30fc\u30b6\u30fc\u540d\n\u30d1\u30b9\u30ef\u30fc\u30c9\nblog\u540d\nURL \u6307\u5b9a\nFederation \u3092\u7121\u52b9\n\n\n\n\u9375\u3092\u751f\u6210\u3057\u307e\u3059\uff0e\n\n$ ./writefreely keys generate\n\n\n\n\u65e2\u5b9a\u5024\u3067\u306f\u7279\u6a29\u30dd\u30fc\u30c8\u306e 80 \u3067\u8d77\u52d5\u3057\u3088\u3046\u3068\u3059\u308b\u306e\u3067\uff0c config.ini \u3092\u7de8\u96c6\u3057\u3066\u30dd\u30fc\u30c8\u3092\u5909\u66f4\u3057\u307e\u3059\uff0e\n[server] \u30bb\u30af\u30b7\u30e7\u30f3\u306e port \u3092 8080 \u306b\u5909\u66f4\u3057\u307e\u3059\uff0e\n\n\n\u8d77\u52d5\n\n$ ./writefreely\n\n\n\n\n\n\u5229\u7528\n\n\n\u4eca\u56de\u306e\u8a2d\u5b9a\u3067\u306f http://localhost:8080/ \u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\u5148\u305a\u306f\u77ed\u6587\u3092\u6295\u3052\u3066\u307f\u307e\u3059\uff0etitle, body \u304c\u66f8\u3051\u307e\u3059\u304c\uff0cbody \u306e\u307f\u3060\u3068\u65e5\u4ed8\u304ctitle \u306b\u306a\u308b\u611f\u3058\u3067\u3059\u306d\uff0e\n\n\n\n\n\n\u753b\u50cf\u6295\u7a3f\u3092\u3057\u305f\u3044\u306e\u3067\u3059\u304c\uff0c\u3069\u3046\u3082\u304c\u305e\u6dfb\u4ed8\u306f\u4e0d\u53ef\u306e\u3088\u3046\u3067\u3059\uff0e\u30ea\u30e2\u30fc\u30c8\u753b\u50cf\u306e\u57cb\u3081\u8fbc\u307f\u306fok\uff0cdata-uri \u306f\u4e0d\u53ef\uff0e\n\n\n\n\n\nMarkdown \u3067\u88c5\u98fe\u3067\u304d\u307e\u3059\uff0eiframe \u3084\u52d5\u753b\u306e\u57cb\u3081\u8fbc\u307f\u3082OK\uff0e\n\n\n\n\n\n\u3066\u3053\u3068\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c\u753b\u50cf\u6dfb\u4ed8\u6a5f\u80fd\u304c\u6b32\u3057\u3044\u306e\u3067\u4eca\u56de\u306f\u898b\u9001\u308a\u304b\u306a\uff0e\n\n\n\u74b0\u5883\n\n$ ./writefreely --version\nWriteFreely 0.15.0\n$ dpkg-query -W sqlite3\nsqlite3 3.45.1-1\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Debian\nDescription: Debian GNU/Linux trixie/sid\nRelease: n/a\nCodename: trixie\n$ arch\nx86_64", "date_published": "2024-03-20T08:18:51+09:00", "date_modified": "2024-03-20T08:18:52+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "blog", "Debian", "Linux", "sid" ] }, { "id": "http://matoken.org/blog/?p=2577", "url": "https://matoken.org/blog/2019/10/18/activitypub-on-nextcloud-16/", "title": "Nextcloud 16\u3067ActivityPub", "content_html": "
\n

Nextcloud\u309216\u306b\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u307e\u3057\u305f\uff0e\u305d\u3046\u3044\u3048\u307016\u306b\u306fActivityPub\u6a5f\u80fd\u304c\u4ed8\u3044\u305f\u306f\u305a\u3068\u63a2\u3057\u3066\u307f\u308b\u3068 social \u3068\u3044\u3046\u30a2\u30d7\u30ea\u304c\u3042\u3063\u305f\u306e\u3067\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

(Nextcloud 16\u304b\u3089\u306e\u5bfe\u5fdc\u3068\u601d\u3063\u3066\u3044\u305f\u3051\u306915\u304b\u3089\u5bfe\u5fdc\u3057\u3066\u3044\u305f)

\n
\n
\n

Alpha\u7248\u3060\u3051\u3042\u3063\u3066\u6a5f\u80fd\u306f\u5c11\u306a\u304f\u30b7\u30f3\u30d7\u30eb\u3067\u3059\uff0e

\n
\n
\n

\"20191017

\n
\n
\n

\u753b\u50cf\u6295\u7a3f\u4f4d\u306f\u3057\u305f\u3044\u306a\u3068\u601d\u3046\u306e\u3067\u3059\u304c\u7121\u3055\u305d\u3046\uff0eNextcloud file\u306eURL\u5171\u6709\u6a5f\u80fd\u3067\u753b\u50cf\u3092\u4e00\u822c\u516c\u958b\u3057\u3066\u305d\u306eURL\u3092\u5f35\u308a\u4ed8\u3051\u305f\u3089\u3069\u3046\u3060\u308d\u3046\u3068\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c\u99c4\u76ee\u3067\u3057\u305f\uff0e\u5c11\u306a\u304f\u3068\u3082Nextcloud social\u3068Mastodon\u3067\u306f\u5c55\u958b\u3055\u308c\u307e\u305b\u3093\uff0e

\n
\n
\n

\"20191017

\n
\n
\n

\u4ed6\u306e\u30b5\u30fc\u30d0\u304b\u3089follow\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3057\u305f\uff0e

\n
\n
\n

\"20191017

\n
\n
\n

occ\u306e\u30b5\u30d6\u30b3\u30de\u30f3\u30c9\u3082\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo -u www-data php ./occ list social\n\n  :\n\nAvailable commands for the \"social\" namespace:\n  social:account:create     Create a new social account\n  social:account:following  Following a new account\n  social:cache:refresh      Update the cache\n  social:check:install      Check the integrity of the installation\n  social:fediverse          Allow or deny access to the fediverse\n  social:note:boost         Boost a note\n  social:note:create        Create a new note\n  social:note:like          Like a note\n  social:queue:process      Process the request queue\n  social:queue:status       Return status on the request queue\n  social:reset              Reset ALL data related to the Social App\n  social:stream             Get stream by timeline and viewer
\n
\n
\n
\n

social:stream \u306f\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3067\u306f\u306a\u304f\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u8aad\u307f\u8fbc\u3080\u3060\u3051\u306e\u3088\u3046\u3067\u3061\u3087\u3063\u3068\u6b8b\u5ff5\uff0e

\n
\n
\n
\n
$ sudo -u www-data php ./occ social:stream matoken local\nAccount: matoken@files.matoken.org\nId: https://files.matoken.org/index.php/apps/social/@matoken\n\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+\n| Id                                                                            | Source                    | Type | Author                    | Content                                                          |\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+\n| Id                                                                            | Source                    | Type | Author                    | Content                                                          |\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+\n| https://files.matoken.org/index.php/apps/social/@matoken/15713026201621139189 | matoken@files.matoken.org | Note | matoken@files.matoken.org | \u753b\u50cf\u306e\u5171\u6709?https://files.matoken.org/index.php/s/pwBt2mrzRgzrCM9 |\n| https://files.matoken.org/index.php/apps/social/@matoken/15712646582663693964 | matoken@files.matoken.org | Note | matoken@files.matoken.org | hello Nextcloud!                                                 |\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+
\n
\n
\n
\n

\u307e\u3060\u3042\u307e\u308a\u6a5f\u80fd\u304c\u306a\u3044\u3067\u3059\u304c\uff0cNextcloud\u9023\u643a\u304c\u51fa\u6765\u308b\u3088\u3046\u306b\u306a\u308b\u3068\u8272\u3005\u3068\u4fbf\u5229\u306b\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\u74b0\u5883
\n
\n
$ sudo -u www-data php ./occ app:list|grep -i social:\n  - social: 0.2.101\n$ sudo -u www-data php ./occ status|grep version:\n  - version: 16.0.5.1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 10 (buster)\nRelease:        10
\n
\n
\n", "content_text": "Nextcloud\u309216\u306b\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u307e\u3057\u305f\uff0e\u305d\u3046\u3044\u3048\u307016\u306b\u306fActivityPub\u6a5f\u80fd\u304c\u4ed8\u3044\u305f\u306f\u305a\u3068\u63a2\u3057\u3066\u307f\u308b\u3068 social \u3068\u3044\u3046\u30a2\u30d7\u30ea\u304c\u3042\u3063\u305f\u306e\u3067\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\nNextcloud\nSocial – \u30a2\u30d7\u30ea – App Store – Nextcloud\n\n\n\n(Nextcloud 16\u304b\u3089\u306e\u5bfe\u5fdc\u3068\u601d\u3063\u3066\u3044\u305f\u3051\u306915\u304b\u3089\u5bfe\u5fdc\u3057\u3066\u3044\u305f)\n\n\nAlpha\u7248\u3060\u3051\u3042\u3063\u3066\u6a5f\u80fd\u306f\u5c11\u306a\u304f\u30b7\u30f3\u30d7\u30eb\u3067\u3059\uff0e\n\n\n\n\n\n\u753b\u50cf\u6295\u7a3f\u4f4d\u306f\u3057\u305f\u3044\u306a\u3068\u601d\u3046\u306e\u3067\u3059\u304c\u7121\u3055\u305d\u3046\uff0eNextcloud file\u306eURL\u5171\u6709\u6a5f\u80fd\u3067\u753b\u50cf\u3092\u4e00\u822c\u516c\u958b\u3057\u3066\u305d\u306eURL\u3092\u5f35\u308a\u4ed8\u3051\u305f\u3089\u3069\u3046\u3060\u308d\u3046\u3068\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c\u99c4\u76ee\u3067\u3057\u305f\uff0e\u5c11\u306a\u304f\u3068\u3082Nextcloud social\u3068Mastodon\u3067\u306f\u5c55\u958b\u3055\u308c\u307e\u305b\u3093\uff0e\n\n\n\n\n\n\u4ed6\u306e\u30b5\u30fc\u30d0\u304b\u3089follow\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3057\u305f\uff0e\n\n\n\n\n\nocc\u306e\u30b5\u30d6\u30b3\u30de\u30f3\u30c9\u3082\u3042\u308a\u307e\u3059\uff0e\n\n\n\n$ sudo -u www-data php ./occ list social\n\n :\n\nAvailable commands for the \"social\" namespace:\n social:account:create Create a new social account\n social:account:following Following a new account\n social:cache:refresh Update the cache\n social:check:install Check the integrity of the installation\n social:fediverse Allow or deny access to the fediverse\n social:note:boost Boost a note\n social:note:create Create a new note\n social:note:like Like a note\n social:queue:process Process the request queue\n social:queue:status Return status on the request queue\n social:reset Reset ALL data related to the Social App\n social:stream Get stream by timeline and viewer\n\n\n\nsocial:stream \u306f\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3067\u306f\u306a\u304f\u30b9\u30c8\u30ea\u30fc\u30e0\u3092\u8aad\u307f\u8fbc\u3080\u3060\u3051\u306e\u3088\u3046\u3067\u3061\u3087\u3063\u3068\u6b8b\u5ff5\uff0e\n\n\n\n$ sudo -u www-data php ./occ social:stream matoken local\nAccount: matoken@files.matoken.org\nId: https://files.matoken.org/index.php/apps/social/@matoken\n\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+\n| Id | Source | Type | Author | Content |\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+\n| Id | Source | Type | Author | Content |\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+\n| https://files.matoken.org/index.php/apps/social/@matoken/15713026201621139189 | matoken@files.matoken.org | Note | matoken@files.matoken.org | \u753b\u50cf\u306e\u5171\u6709?https://files.matoken.org/index.php/s/pwBt2mrzRgzrCM9 |\n| https://files.matoken.org/index.php/apps/social/@matoken/15712646582663693964 | matoken@files.matoken.org | Note | matoken@files.matoken.org | hello Nextcloud! |\n+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+\n\n\n\n\u307e\u3060\u3042\u307e\u308a\u6a5f\u80fd\u304c\u306a\u3044\u3067\u3059\u304c\uff0cNextcloud\u9023\u643a\u304c\u51fa\u6765\u308b\u3088\u3046\u306b\u306a\u308b\u3068\u8272\u3005\u3068\u4fbf\u5229\u306b\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\n\n\n\u74b0\u5883\n\n$ sudo -u www-data php ./occ app:list|grep -i social:\n - social: 0.2.101\n$ sudo -u www-data php ./occ status|grep version:\n - version: 16.0.5.1\n$ lsb_release -dr\nDescription: Debian GNU/Linux 10 (buster)\nRelease: 10", "date_published": "2019-10-18T05:49:17+09:00", "date_modified": "2019-10-18T05:49:17+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "nextcloud", "buster", "Linux" ] } ] }