はじめましての方ははじめまして。そうじゃない方はこんにちはかふぇいんぱわぁです。先日「CaffeBruncher」というTwitterとMisskeyに同時投稿をするためのツールをリリースしました。今回はその開発経緯等ついて書いていきたいと思います。Misskeyについてはこちら。
開発経緯
あれは6月の中旬、私がMisskeyインスタンスSubmarin.onlineに登録して少し立った頃でした。TwitterとMisskeyのどちらもに同じ内容の投稿をする際にそれぞれのクライアントを行ったり来たりして投稿していて、かなり面倒だなと思い始めていました。そこでTwitterとMisskeyに同時に投稿するためのツールがないか調べたところ、Misskeyと同じ分散型SNSであるMastodonとTwitterに同時投稿するアプリケーションは存在しましたが、Misskeyとの同時投稿を実現するアプリケーションは見当たりませんでした。そこで私は「無いなら作ってしまおう!」という非常に安易な気持ちで開発を始めました。(このときはリリースまで4ヶ月もかかるとは思っておらず、まさかここまでかかるとは…)
開発の壁
ということで安易な気持ちで突発的に始めた同時投稿ツールの開発ですが、当時の私は「仕様書?なにそれ?」の状態だったので実装する機能やUI等の設計を全くやらずに開発を始めました。ちゃんと設計しないからグダグダ開発になるんですよ。何も考えずに開発を始めたので、案の定壁にブチ当たりました。当たり前ですね。さて、ここではCaffeBruncher開発の中でブチ当たった壁をいくつか紹介したいと思います。
Twitterに対する長文投稿と文字数カウント
Twitterは1つの投稿につき、半角だと280文字、全角だと140文字までしか書くことができません。対してMisskeyでは1つの投稿につき、3000文字まで書くことができます。これでは普段Misskeyを使用しているユーザはTwitterの文字数制限に苦しめられてしまいます。そこで、Twitterの文字数制限を超過した分はツリー投稿する機能を実装することにしました。
ここで1つ目の壁にぶつかりました。Twitterの文字数カウント方法が謎でした。というのも、先ほどちらっと書いた
Twitterは1つの投稿につき、半角だと280文字、全角だと140文字までしか書くことができません。
という表現は正確ではありません。正確には「文字数の上限は280文字で一部の文字は2文字としてカウントする。なお、URLは常に23文字としてカウントする」になります。(詳しくはTwitter Developer Platformに書いてあるので気になる方は読んでみてください)
ここまでできてしまえばあとは280文字ごとに文字列を分割してツリー投稿するだけなので簡単(?)でした。無限ループが多発してデバッグが地獄でしたけどね
画像投稿機能
もう一つの壁は画像付きの同時投稿でした。Twitterの機能をプログラム上で使用するために必要なTwitterAPIにはv1.1とv2があるのですが、何の申請も無しで使用できるTwitterAPI v2の機能では画像のアップロードができません。(APIリファレンスにはComing soonと書いてある。はよ作れ)そのため、v1.1の機能が利用できるElevateライセンスにアップグレードすべく、英語でちょっとした文章を書いて申請したらすんなりと通りました。割と申請が却下されてる人もいるみたいで心配でしたが難なく通ってよかったです。
さて、これで画像付き投稿機能を開発する準備が整いました。ここで一旦画像付き投稿の流れについて考えてみましょう。普段私を含むユーザは画像と本文を一緒に投稿していますが、実際の内部処理的には画像をアップロード→画像のIDを取得→IDを紐づけて投稿という流れになります。今回、Elevatedライセンスを申請したのは最初の画像アップロードを行なうためですね。
これで晴れて画像アップロードができるようになって、画像付き投稿が可能になりました!とはいかないんですね。画像を投稿する際には事前にファイルサイズを指定する必要があり、そのためには一旦サーバにファイルを保存しないといけません。しかし、ファイルを保存するとサーバのストレージを圧迫してしまいます。そのため、どうにかファイルを保存せずに事を済ませたかったのですが、ここだけはどうにもならず、ファイルを一時的に保存することにしました。妙案が思いついたらどうにかしたいと思ってます。
おわりに
さて、こんな感じで開発をやってきて一応リリースまで漕ぎ着けたわけですが、TwitterとMisskeyに同時に投稿したいことがそんなにないってことに気づいてしまったんですね。開発を始めたときの私は一体何を投稿したかったんでしょうね。私はそんなことを思っていますが、実際は割と需要がある[独自調査][要出典]ようです。
さて、最後にこれは単なる自慢なのですが、Misskeyで行なったCaffeBruncherリリースの投稿が割と拡散されて大人気ユーザ™になりました。自分の作ったものがたくさんの人に見てもらえると嬉しいですね。割とバグを見つけているので直さないといけませんが…

今回は長くなりましたがここまで。さらだばー