ActivityPubは自作実装しよう!

タイトル通り、ActivityPubは自作実装がおすすめ、というのが今回のエントリ。
ActivityPubとかフェディバース(Fediverse)とか言うとなんか難しそうだけど、ざっくり言うと2ちゃんねるにちょっと今どきの機能を追加した掲示板みたいなもんだ。
平成の頃のインターネット、レンタルサーバーにフリーの掲示板CGIをFTPでアップロードして設置したことのあるひとなら、何をしてるのかイメージしてもらえると思う。
ネットの記事なんかを見てみると。
ActivityPubを自作するのは大変なだけなのでやめた方がいい、そして、どうしても自分で設置したいならいろんな機能が用意されたパッケージやフレームワークを使うべき、らしい。
言いたいことは理解するけど、届けたい相手の設定を間違ってる。
そもそも、MastodonやMisskeyといったパッケージをインストールして設定できたり、フレームワークを利用してオリジナルなサーバーを立ち上げたりできるスキルを持っているひとなら、ActivityPubを自作する方が早いだろう。
もちろん、いろんなサーバーの機能フルスペックは難しいけど、「ひとりで使う」「欲しい機能を限定する」という前提でいうと、自由度の高い/最低限の仕様だけが決められているActivityPubはハードルが低くて思ってるより簡単。
わたしはperlだけで作ったけど、今どきならrubyやphpだけでもっと簡単に作れると思う。
なんならデータベースも不要だし、メールサーバーやキャシュサーバーも不要。
フロント側もWEBプッシュだの非同期で情報取得なんかも不要。F5で再読み込みするのが昔の掲示板の流儀。
perlやruby、phpといったレンタルサーバーでも利用できる、いわゆる軽量プログラミング言語ひとつで実装できる。ほかに必要なものはない。
そしてなにより、しょっちゅう引用させてもらってる
「Webhook的に ActivityPub に投稿する実装を作った」
オープンな仕様 ActivityPub の力を借りて自前実装で他の実装とつながれる体験は心躍るものがあり、テキストを発信するだけのBOTを動かすだけでも動いたときは感動を覚えた
ほんと、これにつきる。自作すればこの楽しみを全身で享受できる。

ここんとこのエントリで書いているHTTP Signatureが面倒くさいんだけど、ここさえクリアしてしまえば、あとは昔ながらの掲示板CGIと同じようなものだ。
ActivityPubの実装についてホームページにコーナーを作って紹介してます。よろしければどうぞ
これだけのことで、自分だけの掲示板を持てるんだからActivityPubという仕様には大感謝!
[更新]2026-01-22 19:33:54
ポケモンGo:レギュラーとジムトレーナー

あいかわらずポケモンGoのジム戦初心者で、とりあえず他チームのジムを落すことは覚えた。
10階建ての高層タワーにも行ってみたけど、1FのCP2700カビゴンから始まり8体がカビゴンで残り2体がカイリューというガチガチのタワー。さらに立地が川っぺり。寒風吹きすさぶところでちまちまやってられなかった。一回で10体抜けるようなメンバーでもないし、完璧に避けるスキルもないので諦めた。いや、10階建てに行くのはわたしレベルでは無謀だった。
それ以外、レベル3~5ぐらいの低層住宅は砂とコイン目当てで更地にして入居するようにしている。
CP順に並べるとこんな感じ。


・カイリューはほぼ使わない。
・カビゴンはジムに置くため。
これ以外から攻めるメンバーを選ぶことになる。
いまどきのジムに置かれてるのは、カビゴン、カイリュー、サイドン、ギャラドス、シャワーズ。
サイドンには、シャワーズ。
ギャラドスには、サンダース。
シャワーズには、フシギバナ、サンダース。
カイリューには、ヤドラン、ピクシー、ラプラス。
カビゴンには、ブースター、サイドン、シャワーズ、ギャラドス。
サイドン、ギャラドス、カイリュー、シャワーズあたりはいいんだけど、やっぱりカビゴンが面倒くさいし、弱点をついたり考えるところもなく、ただただゴリ押しなのであまり面白みもない。だからこそ防御の大将なんだろう。
なんてもっともらしいこと書いてるけど、避けそこなってしょっちゅう瀕死になっては予定が狂ってすごすご帰ってるんだけどね。
どこかの掲示板で見かけた「避けるにはリズム感が必要で、音ゲーと一緒」てのは説得力あるなぁ。
てなところで遊んでるんだけど、他チームのジムだけじゃなくて自チームのジムでも戦闘(トレーニング)をして、ジムのレベルを上げてポケモンを置こうかと攻略サイトを眺めた。
ジムにいるポケモンのCPよりも低いCPのポケモンで勝つと500点、ジムポケモンのCPの半分以下のCPのポケモンで勝つと1000点、ジムの名声が上がる(レベルアップのためのポイントが貯まる)ということらしい。
ジムにいるポケモンはだいたいCP2500以上なのでCP1200ぐらいのポケモンでトレーニング(戦闘)すればいいということ。
あれもこれも、と強化してきちゃったんで、なかなかちょうどいいのが残ってない。攻略サイトや掲示板で、CP各種揃えてうんぬん、てのはなんのこっちゃと思ってたら、トレーニングのためだったのか。
とりあえず今のところCP的にこのへんか、と言うメンバーの名前の頭にGTとつけて名前でソートできるようにしておいた。

当然のことながら、CPが半分しかない、HPもろくにないので避けそこなったらそこで終了となることばかり。これはけっこう面白い。わたしのスキルだと1on1は無理なので2on1で進めればラッキーぐらいなところ。
サイドンには、ニョロボン(あわ・ハイドロポンプ)、シードラ(みずでっぽう・ハイドロポンプ)
ギャラドスには、ライチュウ(でんきショック・かみなりパンチ)
シャワーズには、フシギバナ(つるのむち・はなふぶき)
カイリューには、パルシェン(こおりのつぶて・ハイドロポンプ、こおりのいぶき・ふぶき)、シードラ(りゅうのいぶき、りゅうのはどう)
カビゴンには、ギャロップ(けたぐり・だいもんじ)、ニョロボン(あわ・ハイドロポンプ)、プクリン(はたく・じゃれつく)
て、ここでもカビゴンがうっとーしくて、高火力のワザを持ったポケモンじゃないとTIME OUTしてしまう。
塩漬になってたポケモンもこうやって試合に出て役割があるって、よくできてる。
カビゴンに「ばつぐん」を取れる格闘ワザのけたぐりと高火力のだいもんじを持ってるギャロップなんてトレーニングのために探さなきゃ埋もれたまんまだったろう。
さすがポケモンってところだなあ。
いまTL32だけど、まだまだ遊べそうだ。
ボケ防止とメタボ対策はこれで万全やね!
創作文芸見本誌会場HappyReadingに書誌情報APIを実装しました

APIといえるかどうかはともかく。
創作文芸同人誌のプレビュー・立ち読みサイトのHappyReadingの作品ページに掲載されている書誌情報をXMLで提供するようにしました。
『創作文芸見本誌会場HappyReading』http://books.doncha.net/happy-reading/
今さらですが、HappyReadingはけっこうな量の入力項目があります。
にも関わらず登録いただいてるので、入力された情報をHappyReading以外(たとえばサークルや個人のサイト)で使えれば、読者さんへの告知の幅も手軽に広げることができるのではないかということでXML。
平たく言っちゃうと、自分のサイトやブログでも紹介したいのにまた同じことを書くのは面倒くさい!ということでXMLでの情報取得のAPIもどきをでっち上げました。
XMLで提供する登録情報は以下

・HappyReadingのページURL
・登録したアカウントID
・本のID
・タイトル
・発売日
・ページ数
・判型
・印刷形式
・頒布価格
・キャッチ
・著者(イラストレーター、編集者、デザイナーなど)
・サークル名
・サイト
・サイトURL
・アマゾンのASIN
・カテゴリ
です。
※表紙画像や立ち読みの情報は提供していません。
http://books.doncha.net/xml.pl?bookid=839
↑このURLにbookidを指定してアクセスすると書誌情報のXMLを返します
(Firefoxなどでアクセスしてもらえるとどんなものか見えます)
http://books.doncha.net/happy-reading/detail.pl?uid=14879977&bookid=839
↑bookidというのはHappyReadingの作品個別ページのURLのbookidのことです。
このXMLを取得してページに合わせて加工することになります。
http://books.doncha.net/happy-reading/detail.pl?uid=14879977&bookid=566
このHappyReadingのページのXMLをperlで取得、アレンジして表示したのが以下です。

http://hino-yutaro.doncha.net/?happyreading=566
※表紙画像と立ち読みは別途用意してます。
phpやperlを使って取得&加工するのが手っ取り早いですが、javascriptが使えればHappyReadingのXMLを取得できます。
はてなやFC2といったブログの場合は「HTML編集」などにしてページの好きな場所に以下のコードをコピー&ペーストすればXMLを取得してページに表示します。
先頭の「data-book="XXX"」の部分にHappyReadingのbookidを記入。
<ul id="happy-reading" data-book="XXX"></ul>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript" src="http://books.doncha.net/happy-reading/xml-happy-reading.js"></script>
<script type="text/javascript">getHappyReading();</script>
「はてなブログ」で確認。
・「編集 見たまま」でアップロードした画像を貼り付けたり、記事を作ります。
・「HTML編集」でHappyReadingの登録情報を掲載したい部分に上記のコードを(bookidを記入して)貼り付けます。

・「プレビュー」

素気ないリストでの表示なので、スタイルシートでデザインします。
・id が #happy-reading のリスト(ul)となっていて。
liに「title」「creator」「size」「printing」「pages」「price」「published」「category」「catch」「circle-name」「site-url」「amazon」「to-happy-reading」というクラスをつけてます。
表示or非表示や文字サイズ、色などをCSSでカスタマイズできます。
(わたしはデザイン力がないのでテンプレートを作る気力が…)
ハマったところがあったんでメモ。
Javascript、ajaxで別ドメインにあるXMLを取得するためにはjQuery側とサーバー側で設定が必要だった。
・jQueryのajaxのパラメータ「crossDomain」を true にする。
・サーバー側(今回の場合xml.pl)スクリプトのHTTPヘッダに
「Access-Control-Allow-Origin:*」
「Access-Control-Allow-Headers:Origin, X-Requested-With, Cotent-Type, Accept」
の2行が必要だった。
(スクリプトに付加したヘッダはなにやらセキュリティ的に不穏な感じなので、formデータのチェックを厳密にしておいた)
[更新]2026-02-21 09:50:45
SigilのEPUB2をEPUB3に仮変換してみた

EPUB2をEPUB3に変換するネタ。
去年から地味に「Sigil EPUB3」とか「EPUB2をEPUB3」とかで検索されていて、去年暮れぐらいからさらに検索ボリュームが上がった感じ(ぼーっとアクセスログを眺めて目についた、という程度だけど)
epub2をepub3に変換したい、というリクエストが増えてんだろうなあ。
EPUB2のファイルをEPUB3のファイルに変換するより、元原稿からEPUB3ファイルを作り直した方が早いと思う。
とはいえ、呆け防止のパズルに途中放置していたepub2からepub3への変換スクリプトをいじってみた。
・epub2ファイルを解凍する。
→ unzip EPUB2ファイル
・解凍したフォルダで、ターミナルあるいはコマンドプロンプトを開いてスクリプトを走らせる。
→ perl sigil2epub3.pl
・epubcheckでエラーのないepub3ファイルができる(_temp.epubという名前のepubファイル)

※WINDOWSの場合はactive perl(http://www.activestate.com/activeperl/downloads)とコマンドラインで使えるzipが別途必要(https://github.com/bmatzelle/gow)
やってることは。
・content.opfを書き換える。
・新規にナビゲーション文書を作る。
・各XHTMLのヘッダを書き換える。
・epub3のチェックでエラーになるタグなど除去。
ちなみに、epub3でエラーになるタグを除去するので、レイアウトデザインは保持しない。
元のOEBPSフォルダはOEBPS.origという名前で保存するので、epub3にコンバートされたOEBPSと比較して調整&対応。
やっつけ仕事というか、かなりテキトーなシロモノで、コンバート後にepubcheckのエラーになんなきゃいいや、ぐらい。
サンプルに使わせてもらったepub2のファイルは素直でシンプル。ちょっと複雑なモノだとエラーを吐かないとも限らない。
また、決め打ちしてるところもあって使い回しがきかないだろうと思う。
てな感じのスクリプトはこちら→https://t2aki.doncha.net/tmp/sigil2epub3.zip
(※ 一発芸ネタは直リンクできないようになっておりますので、このリンクからご入場ください)
ぐちゃぐちゃで汚いのは素人芸ということでご勘弁くだされ。
…うーん、やっぱこりゃ、時間の無駄だわ。
kindle本の機は熟しつつある

「kindleで買える創作文芸 同人小説」 http://t2aki.doncha.net/?id=1352623756 というタイトルのまんまのまとめをtogetterで作ったのが去年の11月11日。
半分botのアカウントで告知を回していて、このまとめもそのうちのひとつ。ランダムの設定で、今日の朝にツイートされたところ、なぜか今回RTもFavも伸びていて吃驚。今までのツイートした時の反応とはまるで違っていた。
なんでだろうと。
・田亀源五郎さん( @tagagen )という世界的に評価されているゲイ漫画家、小説家のかたにRetweetいただいた(ありがとうございます)そして、田亀さんのフォロワーさんは電子書籍、Kindleに対する興味が旺盛だった、のかも?
・去年の11月11日時点よりもKDPでの個人ダイレクト出版物が増えてきていて、Kindleストアに関するサイトやブログが立ち上がっていてネットで注目度が上がっていた。
こういう反応は、以前出版社に在籍していた時の、B6版のコミックスの売れ行き・動きに似てる、デジャヴだなあ、と。
底辺エロ本出版社で編集をやってた頃の話だ。コミックスを出しても70%返品の作家。絵は抜群にうまいし、ストーリーも伏線はちゃんと回収するし女の子のキャラも可愛い。これは売れるはずだと、何冊か出しても売れない。返本が70%で大赤字。営業部からも次は出せないとまで言われたんだけど。
その作家さんがたまたま他社からコンビニルートで出したところ、増刷増刷であっという間に確か10万部を超えた。この噂を取次ぎで聞きつけた営業が、ウチで描いてるのにどうして出さないんだ、と(えーっと、お前がそのクチで次は出せないと言ったんだよな、と思いつつ)
70%返本くらってたコミックスをほとんどそっくりそのままコンビニルートに合わせた修正(エロシーンを削る)して出したところ、こちらもあっという間に増刷。(という記事を以前こっそり書いてるけど)
ひらたくいうと、魚のいないところに釣り針を垂らしていた、棚が違っていた。
力があると信じるに足る作品が売れないときは、環境やタイミングを変えるべきということ。作品に力さえあれば売れる、ということでもある。
今回、まとめのページの広報告知が伸びたのはまさにこのパターン。ルートとタイミングがあった、ということだろう。こういうことが今後あちらこちらで起こってきて個人出版が伸びてくるに違いない。
機は熟しつつある、ということだ。
[更新]2026-02-02 07:52:08

