SNS 抽象化クライアントライブラリ SocialHub の紹介 (2)
今回は SNS 抽象化クライアントライブラリである SocialHub の技術的な紹介を行いたいと思います。 SocialHub についての基本的な紹介については、前回の記事を参照してもらえればと思います。
J2ObjC
SocialHub は前回の記事でも記載したように、iOS, Android 向けのアプリを書く人がターゲット であり、 iOS で用いることができるJ2ObjC でのコンパイル可能な範囲でのプリミティブな Java の実装に制限して作られています。
これによって Java のコードから Objective-C に変換して iOS の開発で使うことを可能にしています。 (若干変換後の関数名とかが汚いけど、これは我慢するしかない。。。)
要は Android での Twitter クライアントライブラリの鉄板である Twitter4J を iOS のTwitter クライアント制作でも用いることが出来てしまうのです!!
といっても、一口に既存のソースコードを全て Objective-C に変換できる訳ではなく、 一部の変換がどうしても出来ないライブラリを依存関係から除外する必要があります。 以下に自分が作成してきた J2ObjC 向けのクライアントライブラリを紹介します。
J2ObjC 対応 SNS ライブラリ
GitHub - uakihir0/twitter4j: J2ObjC compileable Twitter4J (a Java Twitter Library)
言わずとしれた @yusuke さんの Twitter4J を fork して作成しました。 Twitter4J は本当に良いライブラリで、 ネットワークライブラリや、JSON のパース等を他のライブラリを用いずに独自実装しています。 そのため、最小限の実装のみされており、非常にJ2ObjC のコンパイル条件に合致していました。 他の SNS ライブラリもこの Twitter4J の実装を一部組み込んで依存の単純化を行っています。
GitHub - uakihir0/mastodon4j: Clang compileable Mastodon4J (a Java Mastosdon Library)
Mastodon ライブラリには既に @sys1yagi さんが実装された mastodon4j が存在するのですが、 Kotlin で実装されている為、J2ObjC では残念ながら用いることはできません。そのため、 @hecateball さんが実装されていた mastodon4j を fork して実装しています。 色々足りない部分もあるのですが、シンプルな作りをしているため追加実装をして SocialHub で用いています。
GitHub - uakihir0/jslack: J2ObjC compilable jSlack (a Java Slack library)
Slack の Java ライブラリとしては一番有望そうな @seratch さんの jslack をフォークして作成しています。 このライブラリも比較的依存が少なかったのですが、冗長コードを削減する lombok を依存関係に加えており、 j2ObjC で扱う際には全てを delombok (冗長コードに戻す) して扱っています。 また、このライブラリは更新頻度が高く、今までに二回ほど master から切り直してライブラリを作成し直しました。
GitHub - uakihir0/jumblr: Tumblr API v2 Java Client
Tumblr の Java ライブラリとしては公式から提供されている jumblr を fork して作成しています。 これについてなんですが、Git にコミットされている形跡はあるもののまともにメンテされておらず、 レスポンスのモデルに足りないフィールドがかなり多く、API を実際に叩いて確認するのが必須になっています。 公式クライアントなんだから、もう少ししっかりして欲しいと思うのは勝手でしょうか?
J2ObjC 使用方法
実際にライブラリを J2ObjC で使えるように変換する作業については、一年半前の記事で紹介しているので、 そちらを確認してください。ここで紹介しているのは Twitter4J についての内容です。 (これもう一年半前のことになるのか。。。時間って経つの早えな。。。)
J2ObjC 使用感
今あらためて J2ObjC の使用感としては、コンパイルが遅い事以外は概ね満足しています。 手元も Macbook でコンパイルをさせると、死ぬほどファンが回ってバッテリーを喰らい尽くすので、 現状適度に確認が済んだら、GitHub に上げて、TravisCI がパラレルでコンパイルして、バイナリを Azure の レポジトリにあげてくれるように設定しています。これで大分快適になりました。
当然、自分はこのライブラリを用いて TheWorld の後に続く iOS 向けの SNS クライアントアプリを作成しているのですが、 (クライアントアプリの紹介については別途記事だします。こっちも気合入ってるので、お楽しみに!) 今の所、この開発環境で満足しています。といっても、 SocialHub のコード直して iOS の方で使えるように なるのに 30分以上間が開くので、決して良い開発環境とも言えませんが。。。
まとめ
色々な SNS 対応するのに、悪戦苦闘しながらも頑張っています! Twitter クライアント作者だからこそ実装できる便利な SocialHub を是非使ってみてください!