mastodonでキャンペーンをやってみませんか？

## はじめに

現在、様々なSNSがあります。それらのSNSでは単に何かを表示する広告だけではなく、参加型のキャンペーンというものが存在します(どんなものがあるかは https://www.uniquevision.co.jp/case をご覧ください)。

mastodonでは今のところ、このような事例は私が観測する限り、存在しません(もちろん、私の観測範囲はそれ程広くないので、あるかもしれません)。ならばどこかの企業さん、あるいは個人さん、是非やってみませんか?という趣旨でこの記事を書いています。



## 実際にキャンペーンをつくってみた

ものはためしです。もしmastodonのアカウントをお持ちならば(他、ActivityPubを実装しているサービスならば大丈夫なはずです)、以下の記事のブーストしてみて下さい。

https://mastodon.snthtns.jp/@hhh/111575925345534408

それが参加方法です。今日の占いが私のアカウントから返信されます。

実装は、完全に手抜きです。以下に示すシェルスクリプトをcronで1分毎に動かしています。1分間に40件より多い参加はない想定です。また、参加者データはテキストファイルに返信した内容を保存する、というものです。けれども、どのおみくじが当たったかもこれで十分、後からでも分かります。

```bash
#!/bin/bash

ACCESS_TOKEN=*******
CAMPAIGN_POST_ID=dummy
TAB=$(printf '\t')
SINCE_ID=$(cat since_id_file)

omikuji_0() {
    echo -n "こんにちは、$1 さん。キャンペーンに参加して下さり、ありがとうございます。あなたの今日の運勢は大吉です。きっといいことがあるでしょう!"
}

omikuji_1() {
    echo -n "こんにちは、$1 さん。キャンペーンに参加して下さり、ありがとうございます。あなたの今日の運勢は中吉です。きっと悪くない一日ですよ！"
}

omikuji_2() {
    echo -n "こんにちは、$1 さん。キャンペーンに参加して下さり、ありがとうございます。あなたの今日の運勢は小吉です。小春日和のような、ほんわりいい日になりますように！"
}



user() {
    echo -n $1 | sed 's%https://\([^/][^/]*\)/\(@..*\)$%\2@\1%'
}

curl --header "Authorization: Bearer $ACCESS_TOKEN" -sS 'https://mastodon.snthtns.jp/api/v1/notifications?types[]=reblog&limit=80&since_id='$SINCE_ID |\
    jq 'map(select( .type == "reblog" and .status.id == "'$CAMPAIGN_POST_ID'" ))' |\
    jq -r '.[] | [.id, .created_at, .account.id, .account.username, .account.url] | @tsv' |\
    {
        while IFS="$TAB" read -r id created_at account_id username account_url; do
            printf "%s %s %s %s \n" "$id" "$created_at" "$account_id" "$username" >> log_messages
            if [ $id -gt $(cat since_id_file) ]; then
                echo "$id" > since_id_file
            fi

            MESSAGE=$(omikuji_$((RANDOM % 3)) $(user $account_url))
            curl -X POST -d "status=$MESSAGE" -d "visibility=direct" --header "Authorization: Bearer $ACCESS_TOKEN" -sS https://mastodon.snthtns.jp/api/v1/statuses 2>>log_messages 1>>success_messages
            echo done >> log_messages
        done
    }
```

## メリット

ここでは暗黙的に、自社、自分でmastodonインスタンスを立てることを前提に書いています。当然のことながら、どこかのmastodonインスタンスにアカウント作成してキャンペーンを実施することも(そのインスタンスの負荷をかけない範囲であるならば)、可能です。

その上で、mastodon界隈で流れている記事の中でよく語られていることなので、特に引用はしませんが、受け売りだということを断わりつつ、それらをキャンペーンの実施ということに当てはめて挙げてみますと、

* 自社、自分でインスタンスを立てる前提ならば、当然のことながら、ドメインを自社、自分のものにできる。つまり、キャンペーンで発生するページの遷移を自社、自分のドメインが権威を持つ領域で完結させることができる。
* 外的な要因にまきこまれて自社、自分のブランドイメージを毀損しない、真の意味でのSNS機能を持つOwned Media上でキャンペーンが実施できる
* キャンペーン等を行いたいとき、他社、他人のサービスだと利用のためにAPIのrate limitや規約等によって制限されるが、自社、自分でmastodonインスタンスを立てていれば、それらの制限がなくなる(もちろん、他の制限、例えばmastodonインスタンスのサーバのスペック等による制限が発生します)

といったところです。



## とはいっても

mastodonのユーザ数は、定期的にポストされるこのアカウント https://mastodon.social/@mastodonusercount によると、まだ2千万人に到達していません。他のSNSで何か問題が発生すると、引越し(をしようとする人、結局は元に戻る)が発生し、ぐんとユーザが増えますが、しばらくするとそれは落ちつきます。ですので、既存のXやInstagram、LINE等でキャンペーンを実施する程の効果は今のところはないでしょう。こういったキャンペーンは目だってなんぼでしょうし。人がいないところでがんばっても(広告的には)あまり意味はありません(とはいえ、ある日マイナーなものが突然メジャーになりうる世の中なので、広く浅く種をまいておくことにも価値があるかもしれません。宝くじを買うような感じですが)。

また、自社でインスタンスを立てた場合、自由度は増えるが、それとトレードオフになる点、例えばそもそも自分でインスタンスを運用するのが手間である等、いくばくかの不自由さを抱え込む必要があります。

なによりも、直接フォローをしてくれているユーザ以外への拡散は、分散されているという仕組み上、劇的には望めないでしょう。冒頭のおみくじキャンペーンでは、ブーストをしてくれることをキャンペーンの参加条件としています。ブーストによって、そのブーストをしてくれたユーザのフォロワーを通じ、他のインスタンスへと投稿が流れていくのを期待するだけしか、拡散については期待できません。



# その上で

mastodonはActivityPubというプロトコルを受け入れています。このことによって、他のmastodonではない、ActivityPubを実装しているSNSサービスとの間ならば、やり取りができます。つまり、冒頭のおみくじキャンペーンは、拡散される保証こそないものの、他の(ActivityPubを実装している)SNSサービスのユーザによってブーストされれば、mastodonではないサービスのユーザにまで到達することができます。

一時期急激な盛り上がりを見せたMetaのサービス、Threadsですが、このサービスもActivityPubを受け入れる、という噂はちらほらあります。それが実現するならば、自社が持っている、Owned Mediaであるところのmastodonのアカウントを起点に、Threadsのユーザにまでキャンペーンの効果が到達するかの可能性がある、ということになります。

また、サービスには流行り廃りがありますが、ActivityPubというプロトコルが生き残れば、将来的にmastodon以外の魅力的なサービスが誕生したとしても、そのサービスがActivityPubを実装している限り、そのまま乗り換える必要がありません。プロトコルの方がアプリケーションよりも寿命が長いケースの例をみつけることができますが(たとえばSMTPやHTTP)、今後mastodon(や各SNSサービス)を通じて自社の情報を配信する、というのではなく、ActivityPubを利用して配信する、という意識が一般的になれば、数あるSNSアカウントを一本化することも可能でしょう。

(ただ、各SNSサービスは箱庭化を加速させる施策をとっている https://www.nikkei.com/article/DGKKZO76632230T01C23A2MM8000/ という報道もあるため、ThreadsがActivityPubを実装するという可能性は低いのではないか、と個人的には思っています。ユーザが既にたくさんいるのであれば、「ActivityPubを利用して配信する、という意識が一般的」というような状況があたりまえにならない限り、Metaにとってのメリットは低く、結果的に実現のための優先度は下がるでしょうし。)

(2023年12月14日9時48分追記

と、上のように書いた矢先にこんな投稿が。 

https://www.threads.net/@zuck/post/C0zXcQmxO77

すごいですね。
)



## 最後に、これを書いている人について

私は、ユニークビジョンという、TwitterやLINE上でキャンペーンを行う会社に所属していますが、実はあまりSNSを利用しているとは到底言えない者です。TwitterのAPIはかれこれ10年くらい叩いてきましたが、結局Twitter自体をそれ程利用しないまま、いつの間にかXに変わっていたりしました(半分冗談です)。まぁ、SNSにそれほどは夢中にならない人間です。

とはいえあんまり興味がないのもどんなものだろうと思い、2022年12月10日にmastodonサーバを立ててみたの去年の話です。そのお話は去年のアドベントカレンダーで書きました 。https://qiita.com/hhh_snthtns/items/08eca842bfb14380811c 別にたいそうなことはしておらず、さくらのスタートアップスクリプトでお手軽に動かしているだけですが。

この記事の本文で、「一年後、飽きずにまだつぶやき続けていたら、「Mastodonで1年間つぶやいた感想」、でもアドベントカレンダーに書こうと思います。」と書きました。そしてあれから一年が経ちました。飽きずに定期的に記事は投稿していますが、会社の近くにある新宿御苑の、お昼休みにする散歩の途中で撮影した写真を、ただ、アップロードしているだけです。SNSにそれほどは夢中にならない、と書きましたが、それでもアップロードした記事がお気に入りされたり、ブーストされると、ほっこり嬉しくなります。そのため、飽きずに1年、あまりつぶやきはしなかったけれど、写真のアップロードは続けたのでしょう。

ので、この記事がきっかけで、もうちょっといいねが付くと嬉しいなぁ、と思いたち、今年はこんな記事を書いてみました。さて、効果はあるでしょうか?



よいお年を。