どうも、国見小道です。今回は、Fediverseに参加するためのさまざまなソフトの1つ、「microblog.pub」を建てて数日運用してみて得られた知識と感想について書いていきます。
microblog.pubというActivityPub実装のOSSがあります。これはMastodonやPleromaやMisskeyと同じカテゴリに属する、マイクロブログ型の分散SNSです。microblog.pubは「おひとりさま」を徹底追求したもので、なんとログインページにはパスワードの入力欄しかありません。
無事productionのbuildが成功した後にこのことを確認して、ド肝を抜かれました。
そのほかの細かい解説についてはHOWにて詳しく書いていきます。
WHYから始めよ、ということで建立動機から書いていきます。
僕としては、マイクロブログ型の分散SNSの理想郷は「ひとりにひとつのサーバーで発信する」のが当たり前となっている状態です。現在のFediverseではサーバーとコミュニティが一心同体になっているケースが多くみられ、コミュニティ的な部分に発言が引っ張られるケースがよくあります。また、管理者が自分ではない点も僕としてはあまり居心地が良くないポイントです。自分の発言はちゃんと自分が責任もって発言していきたいわけです。
そのなかで、徹底的に「おひとりさま」を追求したOSSを試さないわけにはいかないなと考えておりました。ただ、まず日本人で建てている人をこれまで見つけることができずにおり、コピペではうまくいかないことから足踏みをしていました。更に、軽量のマイクロブログとしてすでにPleromaがあり、そちらのほうが高機能である上にこちらも建てている人が少なかった(が、インストール記事は充実していた)ため、まずPleromaから着手し、それなりに長い期間運用して色々な知見を得られました。なので次のステージに進むために、microblog.pubも建ててみました。
Pleromaでのソーシャルグラフは、おひとりさまMastodon時代からの引き継ぎであり、砕けた表現を中心に気楽に過ごして作られたものです。
しかし、この記事を書いているのは2020-04-02
なのですが、世界中の人が存じている通り、コロナ禍のまっただ中にあります。現在日本も東京都を中心に各地で感染者が増加傾向にあり、「ギリギリ踏みとどまっている」と大本営発表が為されている中で各位が必死に踏ん張っている状況にあります。そのため、日本国民のひとりとしてまじめに取り組まざるを得ない状態となり(家族の半分が『不要不急』と表現される領域で働いているため)、ゆるふわな発言は抑えて政治動向に目を光らせる投稿をしていこうと決めました。そうすると、前述のソーシャルグラフには適さない発言内容になるのと、流れてくる投稿からも現在の自分のマインドと合致せず変な影響を受けてしまうので、ここはひとつ技術研鑽とソーシャルグラフ分離をゴールとしてmicroblog.pubを建てようとなりました。
なぜ壁打ちに適しているかというと、実はmicroblog.pubはStreamingしません。Streamというタブはあるのですが、動作としては現在のTwitterのように、更新することでフォローしているアカウントの最新投稿順に表示されるものです。なので、エアリプみたいなStreamingAPIありきの行為にはそれほどおよばなくなるわけです。あと、投稿欄とHTLが別ページになっていることもポイントで、一次ソースを検索した後にその所感を投稿しようというときにフォローしている人の投稿を見てしまって注意が逸れることも防げます。
それでは、microblog.pubを建てていく上で何が必要かをリストアップしていきます。これから書くのは最小構成なので、こだわりたい人は拡張していってください。
今回の主役です。最初にも書きましたが、「おひとりさま」を追求したマイクロブログ型分散SNSソフトウェアです。
APIを持っており、やる気があればクライアントアプリの実装も可能です。ドキュメントを見るとActivityPub上で流れうるcontent types
については対応できるようです。あと、Markdownが標準装備です。MastodonからはMarkdownを見れませんが、Pleroma・Misskeyあたりでは見れるかも。詳細は https://docs.microblog.pub/ でご一読ください。
UIは非常に簡素です。色気のいの字もないです。ぼくのPublicページが利用時も同じようなデザインで出てきます。 メインで使うページを画像付きであげていましょうか。
Notes, Allタブで投稿が表示されて、Followers, Followingタブでフォローフォロワーを確認できます。
Newページでは、投稿するテキストや画像などを入力するフォームがあり、そこからPOSTすることでコンテンツがFediverseへと旅立ちます。Custom Emoji Supportがあるようですが、どこにあるかまだ調査できていません。
Streamページは、Homeタイムラインと同じようなものだと思います。フォローしている人の投稿やブースト(リピート・リブログ)なども流れてきます。 ここで重要なのは、microblog.pubではHomeタイムラインはNot Streamingです。更新ボタンを押さないと新しい投稿が来ません。これはmicroblog.pubはjavascriptを使っていないからではないかと考えております。MastodonなどでガッツリStreaming APIに慣れている人はもどかしいと思います。
Lookupページというのは見慣れない部分だと思います。これはおそらくActorを探し出すページで、リモートフォローを可能にしてくれます。
また、画像付きで紹介しておりませんが通知・DM・Listページも用意されていて、MastodonやTwitterと同じようなブックマークページも用意されています。最低限の機能は揃っていると感じます。できればStreamingしてほしかったけど、多分コンパクトを追求してのことだろうと思うので仕方なし。
すごい質素なUIであることはわかったと思います。ひたすら純粋に投稿していくわけです。Streamページは1投稿が結構画面を占めるので、Mastodonなどでコミュニケーションをとるような使い方だとしんどいと思いますので、Listとリモートフォローを駆使してRSSフィードビューアーみたいに情報を摂取して、投稿はそれに呼応するような形でやっていってもいいかと思います。Markdownサポートをしているので、小さなブログ記事などもここに書いて垂れ流すというのも面白いかもしれません。この文章はListを駆使しない状態で書いています。
ここから先はいつものサーバー作業となります。サーバーはお好みのものを使用してください。僕はAWS EC2のt3a.nano(2CPU, RAM0.5GB)を使用しております。OSはUbuntu 18.04 LTSです。使っていると唐突に重くなる時がありますが、現在の連合の広さでは全然これで使えます。また、コストを抑えるためにスポットインスタンスを利用しています。ロードバランサーは使用していません。単騎です。
今回は、画像はS3などに置くようなことはせず、APPサーバー(EC2)に直で突っ込んでいます。あまり画像を用いる投稿はしない予定なのと、そんなに長く使う予定もないためです。有事が終わったらどこかで畳みます。
EC2つかうならVPCがくっついてきますのでとりあえず挙げておきます。
ドメイン周りはRoute53で管理します。これは普段僕がAWSを利用しているためなので、CloudFlareなどでもOKです。
EC2にSSHで接続して運用するのは正直のところ古いので、SSHを使わずにサーバー運用をしていきます。ブラウザベースでターミナルを開く機能がAWS SystemManagerを使って実現できます。今回はこれを使用していきます。
production環境で動かすためにはHTTP通信を暗号化した(HTTPS)Webサーバーが必要なので、今回はCaddyを使いました。非常にシンプルなCaddyfileを書いて、さらにSSL証明書の自動更新までやってくれるのでお勧めです。ただしCaddy v1の話で、v2は現在draftなのと、だいぶCaddyfileの書き方が変わっているのでv1でWebサーバーを建てている記事を参考にセットアップしました。セットアップ自体は先ほどのEC2と同じAPPサーバーで行っています。
ここから、microblog.pubを建てる時に使用したコマンドや注意点などを挙げていきます。特に画像などを添付せずに淡々とコマンドを書いていくので、普段さわっていない人には何が何だかかもしれないので先に謝っておきます、すみません。
手元に残したログが結構右往左往しているので、整理したものをお送りしていきます。
それでは、microblog.pubを建てていきましょう。
スポットインスタンスを作って、microblog.pubをインストールする土壌を組み立てていきます。よくサーバーいじりをする人は慣れた手順だと思いますので、飛ばしてもOKです。
利用するものを列挙していきます。
- EC2 スポットインスタンス
- OS:Ubuntu18.04LTS
- インスタンスサイズ:t3a.nano($2.9/month)
- new vpc
- new subnet
- EC2キーペア作成、保存
- EBSボリューム:20GB($2.4/month)
- 中断動作:停止(スポットは落札できないと中断するが、インスタンスを残すこともできる)
- 合計ターゲット容量:1
- 『リクエストが切れたら削除』のチェックがデフォルトで入っているので、はずす
- IAMロール、AmazonSSMManagedInstanceCoreをアタッチ。
- SystemManagerを使用可能にするが、まずSSHでパッケージをインストールしないと使えるようにならない。
- セキュリティグループを設定。HTTP, HTTPS, SSHのインバウンドを開く。
- ルートテーブルを設定
- Elastic IPを取得し、アタッチ。パブリックDNSを有効化
EC2・VPCのコンソールでやるのはこれくらいだったかと思います。では、EC2キーペアを使用してEC2サーバーにSSH接続し、セッションマネージャーを利用可能にする準備をします。自分のPCにインストールしたターミナルでSSH接続するのはここまでです。
# bashで作業する
/bin/bash
sudo su - ubuntu
# まずは更新
sudo apt update
sudo apt upgrade
# 参考:https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html
sudo snap install amazon-ssm-agent --classic
snap "amazon-ssm-agent" is already installed, see 'snap help refresh'
sudo snap list amazon-ssm-agent
Name Version Rev Tracking Publisher Notes
amazon-ssm-agent 2.3.714.0 1566 latest/stable/… aws✓ classic
sudo snap start amazon-ssm-agent
sudo snap services amazon-ssm-agent
Service Startup Current Notes
amazon-ssm-agent.amazon-ssm-agent enabled active -
ここまでやると、EC2のコンソールやSystemManagerのセッションマネージャーコンソールからサーバーへ接続できます。
Swapを作らないといろいろオワってしまうので、作りましょう。
sudo dd if=/dev/zero of=/var/swap bs=1M count=2048
> mkswap: /var/swap: insecure permissions 0644, 0600 suggested.
sudo mkswap /var/swap
sudo swapon /var/swap
sudo vim /etc/fstab
# 以下を追記 スペースはタブで。
/var/swap swap swap defaults 0 0
さて、ここからいよいよmicroblog.pubをサーバーへお招きします。Ubuntu18.04だったらGitはデフォルトで入っているはずです。
# /opt下で作業することにしました。
cd /opt
sudo git clone https://github.com/kunimi53chi/microblog.pub
# Cloneしてきたら
git config --global user.email "[email protected]"
git config --global user.name "User Name"
microblog.pubでは現在Docker環境が必要です。 インストールしていきましょう。Dockerとdocker-composeが必要です。
- https://docs.docker.com/install/linux/docker-ce/ubuntu/
- https://docs.docker.com/install/linux/linux-postinstall/
先ほどのURLはUbuntuの場合なので、もしほかのOSを使っている場合は別のマニュアルを参照してください。Dockerのインストールマニュアルはシンプルなので、英語でも落ち着いて読んでいけばきっと大丈夫です。もしあなたがDockerについて未知であった場合、今回においてはDockerの技術詳細を知る必要はありません。
# Dockerをサーバーにインストール後、
# Dockerをsudoなしでやるようにする
sudo groupadd docker # already exists for me
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
sudo systemctl enable docker
Dockerが入ったら、docker-composeをインストールしていきます。 https://docs.docker.com/compose/install/
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version # 1.25.4, ok
Docker環境がインストールされたらmicroblog.pubのインストールが始まります。もしMastodonやPleromaなどを触っているユーザーからしたらあまりにも短い作業と感じるでしょう。ざっくりと言ってしまえば、
make config
make run
これだけです。
では、make config
で環境設定をしていきます。
今回の場合は/opt
配下にmicroblog.pubがcloneされているので、cd /opt
でディレクトリに入り、make config
コマンドを打ちます。以下に編集込みログを記載します。
sudo apt install make
# on /opt/microblog.pub
make config
# === make config log ===
# Build the container for the setup wizard on-the-fly
cd setup_wizard && docker build . -t microblogpub-setup-wizard:latest
Sending build context to Docker daemon 6.144kB
Step 1/7 : FROM python:3.7
3.7: Pulling from library/python
50e431f79093: Pull complete
dd8c6d374ea5: Pull complete
c85513200d84: Pull complete
55769680e827: Pull complete
f5e195d50b88: Pull complete
94cdd3612287: Pull complete
e01b42ee5411: Pull complete
044dee574de1: Pull complete
f6d53d5a5c86: Pull complete
Digest: sha256:******
Status: Downloaded newer image for python:3.7
---> 8e3336637d81
Step 2/7 : WORKDIR /app
---> Running in 4d6de2539293
Removing intermediate container 4d6de2539293
---> 5723d84c8d0d
Step 3/7 : ADD . /app
---> ad2b58ac1976
Step 4/7 : RUN pip install -r requirements.txt
---> Running in 77de11c4fda5
(色々ダウンロード)
Step 5/7 : LABEL maintainer="[email protected]"
---> Running in 70f439eeda79
Removing intermediate container 70f439eeda79
---> 071eb9e56a1a
Step 6/7 : LABEL pub.microblog.oneshot=true
---> Running in 67111c9e01b9
Removing intermediate container 67111c9e01b9
---> bd8712f2fc48
Step 7/7 : CMD ["python", "wizard.py"]
---> Running in ab1aad522f88
Removing intermediate container ab1aad522f88
---> 70cc5ca00b11
Successfully built 70cc5ca00b11
Successfully tagged microblogpub-setup-wizard:latest
# Run and remove instantly
docker run -e MICROBLOGPUB_WIZARD_PROJECT_NAME --rm -it --volume /opt/microblog.pub:/app/out microblogpub-setup-wizard:latest
Welcome to microblog.pub setup wizard #### ★ここからユーザー・サーバー情報の設定を入力
Your identity will be @{username}@{domain}
domain: upub.komittee.net
username: kunimi_komichi
password: ********
name (e.g. John Doe): 国見小道
summary (short description, in markdown, press [ESC] then [ENTER] to submit): ->ここは後で編集します
別荘
will the site be served via https? (y/n): y
icon URL: https://upub.komittee.net/static/nopic.png # ->ここは後で編集します
Done
# Finally, remove the tagged image
docker rmi microblogpub-setup-wizard:latest
Untagged: microblogpub-setup-wizard:latest
Deleted: sha256:******
# === make config log end ===
ね、簡単でしょ?make configして、もうアプリは立ち上がる用意ができました。
Webサーバーを準備します。
Caddy1でお手軽に建てることができます。1ですよ、1!2ではないです。ご注意を。僕はCaddy使うのは今回が初めてなので色々戸惑いました。一気通貫できるようコマンドをまとめていきます。
# Caddy1をダウンロード
cd ~
curl https://getcaddy.com | bash -s personal
=== curl log ===
Downloading Caddy for linux/amd64 (personal license)...
Download verification OK
Extracting...
Putting caddy in /usr/local/bin (may require password)
v1.0.4
Successfully installed
=== curl log end===
sudo mkdir -p {/etc,/etc/ssl,/var/log}/caddy
caddy --version
#-> v1.0.4
# Caddyfileを作る。中身は後述
sudo vim /etc/caddy/Caddyfile
# caddy.serviceを作る。中身は後述
sudo vim /etc/systemd/system/caddy.service
# 権限回りをゴリゴリ。
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
sudo chown -R root:root /etc/caddy
sudo chown -R root:www-data /etc/ssl/caddy
sudo chmod 770 /etc/ssl/caddy
sudo chown root:root /etc/systemd/system/caddy.service
sudo chmod 644 /etc/systemd/system/caddy.service
sudo systemctl daemon-reload
sudo systemctl start caddy.service
sudo systemctl enable caddy.service
sudo systemctl status caddy.service # Active: active (running) であれば完了
=== systemctl status output ===
● caddy.service - Caddy Web Server
Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-03-29 13:14:56 UTC; 5s ago
Docs: https://caddyserver.com/docs/
Main PID: 7670 (caddy)
Tasks: 10 (limit: 525)
CGroup: /system.slice/caddy.service
└─7670 /usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
=== systemctl status output end ===
Caddyfile
https://upub.komittee.net/ {
proxy / localhost:5005 {
transparent
websocket
}
}
caddy.service
[Unit]
Description=Caddy Web Server
Documentation=https://caddyserver.com/docs/
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Restart=on-failure
StartLimitInterval=86400
StartLimitBurst=5
User=www-data
Group=www-data
Environment=CADDYPATH=/etc/ssl/caddy
ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
ReadWriteDirectories=/etc/ssl/caddy
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
僕がハマったのは、現在Caddy2がそろそろ出るタイミングとなっている中でCaddy1を使っていたので、公式リポジトリからcaddy.serviceを引っ張ってきたときにExecStartにcaddy run
が記述されていて、そんなコマンド、1にはねえよって言われてたのに気が付かず何時間か無駄にしました。
Caddyfileはmicroblog.pubのIssueからつまんで取ってきたもので、caddy.serviceは概ね雪餅さんの記述を拝借してきました。権限周りのコマンドはRessさんのPleromaインストール記事から拝借しました。お二方の記事のおかげでとても助かりました、御礼申し上げます。
Webサーバー部分が組みあがったので、いよいよmicroblog.pubのサービスを開始します。
といっても sudo make run
を打つだけです。簡単。
cd /opt/microblog.pub/
sudo make run
# Update microblog.pub
git pull
Already up to date.
# Rebuild the Docker image
docker build . --no-cache -t microblogpub:latest
Sending build context to Docker daemon 10.81MB
Step 1/7 : FROM python:3.7
---> 8e3336637d81
Step 2/7 : COPY requirements.txt /app/requirements.txt
---> 02e856ba1233
Step 3/7 : WORKDIR /app
---> Running in ff92babe8dea
Removing intermediate container ff92babe8dea
---> 0cfaa6d76066
Step 4/7 : RUN pip install -r requirements.txt
---> Running in d0dc95e2f084
# (Pythonのパッケージをインストール)
Successfully built tornado python-u2flib-server timeago feedgen mf2py pyyaml emoji-unicode opengraph little-boxes mdx-linkify
Installing collected packages: cachetools, idna, chardet, certifi, urllib3, requests, itsdangerous, click, MarkupSafe, Jinja2,Werkzeug, Flask, poussetaches, six, python-dateutil, libsass, tornado, gunicorn, piexif, pycparser, cffi, cryptography, python-u2flib-server, WTForms, Flask-WTF, pymongo, timeago, webencodings, bleach, html2text, lxml, feedgen, bcrypt, html5lib, soupsieve, beautifulsoup4, mf2py, passlib, pyyaml, pillow, emoji-unicode, Pygments, opengraph, markdown, pycryptodome, mdx-linkify, regex, little-boxes
Successfully installed Flask-1.1.1 Flask-WTF-0.14.3 Jinja2-2.11.1 MarkupSafe-1.1.1 Pygments-2.6.1 WTForms-2.2.1 Werkzeug-1.0.0bcrypt-3.1.7 beautifulsoup4-4.8.2 bleach-3.1.4 cachetools-4.0.0 certifi-2019.11.28 cffi-1.14.0 chardet-3.0.4 click-7.1.1 cryptography-2.8 emoji-unicode-0.4 feedgen-0.9.0 gunicorn-20.0.4 html2text-2020.1.16 html5lib-1.0.1 idna-2.9 itsdangerous-1.1.0 libsass-0.19.4 little-boxes-0.1.0 lxml-4.5.0 markdown-3.2.1 mdx-linkify-1.4 mf2py-1.1.2 opengraph-0.5 passlib-1.7.2 piexif-1.1.3 pillow-7.0.0 poussetaches-0.2.0 pycparser-2.20 pycryptodome-3.9.7 pymongo-3.10.1 python-dateutil-2.8.1 python-u2flib-server-5.0.0pyyaml-5.3.1 regex-2020.2.20 requests-2.23.0 six-1.14.0 soupsieve-2.0 timeago-1.0.13 tornado-5.1.1 urllib3-1.25.8 webencodings-0.5.1
Removing intermediate container d0dc95e2f084
---> ad39cb21fcf1
Step 5/7 : ADD . /app
---> 78041a50029f
Step 6/7 : ENV FLASK_APP=app.py
---> Running in 20efea6d9103
Removing intermediate container 20efea6d9103
---> 71c36da96aee
Step 7/7 : CMD ["./run.sh"]
---> Running in 83be01ea7c7d
Removing intermediate container 83be01ea7c7d
---> 02e721f2d957
Successfully built 02e721f2d957
Successfully tagged microblogpub:latest
# Download pure.css if needed
if [[ ! -f static/pure.css ]]; then curl https://unpkg.com/[email protected]/build/pure-min.css > static/pure.css; fi
# Download the emojis from twemoji if needded
if [[ ! -d static/twemoji ]]; then wget https://github.com/twitter/twemoji/archive/v12.1.2.tar.gz && tar xvzf v12.1.2.tar.gz && mv twemoji-12.1.2/assets/svg static/twemoji && rm -rf twemoji-12.1.2 && rm -f v12.1.2.tar.gz; fi
# (poussetaches and microblogpub Docker image will updated)
# Update MongoDB
docker pull mongo:3
3: Pulling from library/mongo
Digest: sha256:******
Status: Image is up to date for mongo:3
docker.io/library/mongo:3
docker pull poussetaches/poussetaches
Using default tag: latest
latest: Pulling from poussetaches/poussetaches
Digest: sha256:******
Status: Image is up to date for poussetaches/poussetaches:latest
docker.io/poussetaches/poussetaches:latest
# Restart the project
docker-compose stop
docker-compose up -d --force-recreate --build
Recreating microblogpub_poussetaches_1 ... done
Recreating microblogpub_web_1 ... done
Recreating microblogpub_mongo_1 ... done
### make run 完了
/opt/microblog.pub$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------
microblogpub_mongo_1 docker-entrypoint.sh mongod Up ******/tcp
microblogpub_poussetaches_1 /app/poussetaches Up
microblogpub_web_1 ./run.sh Up 127.0.0.1:5005->5005/tcp
docker-compose ps
コマンドで3つのコンテナが立ち上がっていれば(statusが "up" になっていれば)OKです。取得・設定したドメインにアクセスすれば画面を確認できるはずです。
ここまで技術詳細についてはすっ飛ばして書いてきておりますが、色々と触ってきた人にとってはpoussetaches
という単語は気になったかもしれません。ほとんどの人が初見ではないでしょうか。これは、microblog.pubリードエンジニアのtsileoさんが作っているメッセージキューイングのサービスです。 https://github.com/tsileo/poussetaches Amazon SQSやRabbitHQが役割として類似したものです。
メッセージキューイングサービス、Webサーバー、NoSQL(MongoDB)で動いているというわけです。
非常に簡素なconfigファイルがあり、そこでプロフィールを設定します。ブラウザからの設定は対応していないようです。
僕のファイル(config/me.yml
)を例示します。これはmake config
を実行すれば生成されます。
domain: 'upub.komittee.net'
username: 'kunimi_komichi'
pass: '*******'
name: '国見小道@別荘'
summary: '<p>壁打ちアカウントです。まっすぐに発言するのでフォローに注意してください。</p>'
https: True
icon_url: 'https://upub.komittee.net/media/5e81c18c7aa6ff5d62959b62'
このファイルはもちろん直で編集することができるので、nanoなりvimなりemacsなりで編集してください。編集したものを反映する場合は、make run
しましょう。docker-compose up -d
でも反映された気がしますが、これはDocker知ってる人であればすんなり頷けるかも。詳しくは話しませんが、とりあえずは更新を反映させるならmake run
で良いと思います
更新する箇所は、name
/ summary
/ icon_url
です。summary
については<p>
タグがあるので、もし凝ったアレンジをするならHTMLタグについて知る必要があるでしょう。あるいは、簡単に書くのであればもう一度make config
して、その過程でMarkdownを使ってつらつら書いていくのもよいでしょう。
icon_url
については上手い設定方法が見つかっていません。僕の場合はアイコンになりえる画像をNewタブから投稿して、その投稿のURLをコピペで持ってきて、事なきを得ました。わざわざ投稿せずに画像をサーバー内に入れて反映させる方法もあるのだろうとは思いますが、やり方を見つける前に諦めました。ここくらいはせめてブラウザからできるといいんですけどね。超絶簡素なAPIドキュメントを見る限りではアプリ側で何とかするのも無理そうです。今後に期待ですね。
ふと、make config
を何度もやるとActorどんどん作られるんじゃないかと気づいてしまったのですが、この話はしないでおきます。実装はまだ読んでいません。
これは使っていったら増えると思うので随時更新していこうと思います。
これは僕の限界設定が悪いだけなんですけれども、さすがにRAM0.5GBはきついようです。特に画面遷移が結構待たされます。メインで使うならt3a.microあたりに格上げしてあげたほうが良いでしょう。
やっぱり投稿は滝のように流れてほしいんですよね。ふと疲れた時にブラウザやアプリをみたら最新の投稿が飛んできている。そこに「リフレッシュボタン」を押す手順を挟みたくないなとどうしても思ってしまいます。ただこれは他のサービスでも、ちょっと下に画面をスライドさせてたらStreamingが止まっていることはままあるので、誤差と感じれる人にはこの注意点はないも同然ですね。裏返せば、集中を途切れさせない、とプラスに捉えることもできますね。まあブラウザ閉じろって話なんですけどねーw
これはMastodonやPleromaを使いまくっている人で引っ掛かりがちです。僕ほぼ毎投稿でやらかします。ショートカットキーについてはたぶんJavaScriptでの実装になると思うのですが、さすが "No JavaScript, that's it."と書いているだけあり、ショートカットキーなんぞないです。
microblog.pubのREADMEで太文字が使われているの、先ほどの文節だけです。JavaScriptに対して並々ならぬ思いが眠っているのを感じます。
質問などありましたら、Pleromaにいるワタシや、microblog.pubにいるワタシをつついてください。Keybaseでもいいですよ。