どうすれば変化するAPIと上手く付き合っていけるのか
これはMastodon Advent Calendar 2017の14日目の記事です。昨日はクラゲ丼鯖缶のぜまさんによる「マストドンで学術インスタンスみたいなものをやろうとしたらわりと異端だった」でした。
はじめに
こんにちは!中の亀と申します。普段はiOSのアプリを作ったりPythonを書き殴ったりしています。
ここでは表題の通り、中の亀が「Tootle」というマストドン向けのiOSアプリの開発をする中で感じた、発展途上のソフトウェアと付き合っていく苦労や試行錯誤について書いていこうと思います。
マストドンのAPIクライアント開発の難しさ
荒ぶるマスターブランチ
マストドンのv1.0タグがついたのは2017/2/6、僅か10ヶ月ほど前です。v1.0から現在までには3500ほどのコミットがなされており、執筆時点でgithub上で約11,500のスターがつくまでになりました。同じくらいのスター数で有名所を探すとcocos2d-xやelixirがいます。すごい。
TootleはiOSアプリとしてマストドンのAPIを利用しているわけですが、これだけの勢いで本体が更新されていくと、
- そもそも機能追加についていくのが大変。把握するだけでも大変。
- ドキュメントには無かったがAPIはあった
- ドキュメントが出たが実装はなかった
- Intだった主キーが気付いたらStringになっていた
など、中々苦労がたえませんでした。
広がるインスタンスの個性
マストドンは分散型なので、各サーバー管理者=鯖缶が自身の管理するインスタンスに自由に拡張を加えることができます。マストドン自身が黎明期ということもあり、マストドン界には荒ぶるマスターブランチをものともしない屈強な鯖缶たちが集っており、日々彼らのインスタンスには拡張が加えられています。下記は一例です。
- メディアタイムライン
- 時間で消える投稿
- プロフィール画像が絵文字として本文に埋め込める
- アンケート
- 文字が回る
- 奈落文字
新たな生命
さらに最近ではPleromaといったマストドンのクライアントAPIに互換するソフトウェアも登場してきました。しかしAPIには微妙に差異があり、現行バージョンのTootleではログインすることができません。。(次バージョンで対応予定)
まとめると「本体の変化が激しく、個別拡張が花開き、微妙に互換しない互換ソフトウェアが生まれる」ということになります。大変ですね。
考えていること
早めに変化に気付く
仕事の片手間で開発をしていると、あっという間に本体の更新に置いていかれることがよくあります。その中でもなんとかキャッチアップするために、情報源を整備していきたい。今のところ下記のような感じです。
- リポジトリ
まずは原典を。リリースから各コミットを追っていくと分かりやすいです。英語では読みづらい場合、こちらでアップデート履歴を日本語に訳して下さっています。
- コミュニティ
フォローしている鯖缶、アプリ開発者経由でかなりの情報が流れてきます。マストドン自身がフロー的なこともあり、キャッチアップできていないことも多いのですが。。
- 問い合わせ
アプリユーザーからの問い合わせもありがたいです。対応しきれてないケースが(最近特に)多くて申し訳ないですが、本当に助かってます!
- エゴサーチ
直接の問い合わせではないけれど、エゴサーチで拾える情報も参考にしています。更新によって不具合が発生するケースでは下2つがメインになることが多いです。
互換性を確かめる
バージョン違いで対応状況が異なる機能が多く出てきます。方針としては
- インスタンスのバージョンなど、メタ情報でチェック
- ダックタイピング、とりあえず叩いてみる
の2種類あると思っており、Tootleでは主に後者のアプローチです。バージョンが低くても該当コミットだけ取り込むなど、機能単位で対応されているケースがありそうだったので。とはいえこれが最適とも思えず、対応機能の詳細が分かるメタ情報が整備されたら、そちらを使っていきたいですね!機能ごとにバージョニングする必要が出てきそうなので、最終的にはnpmのpackage.jsonみたいな見た目の情報になるのかな~と想像しています。
ほどほどに頑張る
とはいえこれだけの更新頻度とインスタンスごとの差異に対して、完全に追従するのは中々難しいのが実情です。完璧を目指して燃え尽きてしまうのはよくある(そして良くない)ことなので、個人的にはとにかく無理のない範囲で、楽しみながら継続的に開発を続けていけたらなーと思っています。
ちなみにTootleというアプリ名はTootとTurtleの組み合わせなのですが、
- 『うさぎとかめ』の亀、細く長くのんびりと開発していきたい
- 分散型SNS=海の上の島々を繋ぐようなアプリを作りたい
みたいな意図がこめられているとかいないとか。
という訳で、活発に開発が行われているマストドンでアプリを作る中で感じたことを時間いっぱいで書き起こしてみました。
おまけ
次バージョン(v1.10.0)
本日リリースするつもりでしたが、リスト周りに不具合が見つかったので出せませんでした汗。。 v1.10.0には以下が含まれ、クリスマスまでにはリリースされる予定です。
- リストAPIに対応
- Pleromaでのログインに対応
- トゥート詳細、メディアTLなどで添付画像全体を表示
- トゥート詳細でURLカードを表示
広告の停止
またTootleではタイムラインに広告を表示してきましたが、次回バージョンから全ての広告を停止します🍺
率直にいって広告というおまけが開発継続に貢献してきた側面は少なからずあるのですが、各インスタンスでNo advertisingって書いといてアプリで出すのもね、という心は常々あったので、今回の判断となりました。
今後のTootleの開発予定
大きなところでは下記を対応していきたいと思っています。
- iPhoneX対応
- 各種Extension系(Force Touch, Shareの拡充, Swipe to Reply)
- iPad対応、マルチカラム化(大変そう。。)
- 検索自前化
緩募
- fantiaはじめました。
- 通知サーバー、検索サーバー(予定)等のインフラを提供してくれるスポンサーを募集します。問い合わせは中の亀まで。
- boothつくってみた。(ステッカー高くない…?)