# プロジェクト紹介
個人制作のプロジェクトで、様々な SNS (Social Media) を透過的に単一のアプリで扱うことができるアプリを提供します。具体的には、Twitter, Mastodon, Misskey, Slack, Tumblr が同じインターフェースで閲覧・投稿が可能です。これらの機能により、日々の SNS 閲覧・投稿をより効率的に行えるのが特徴です。iOS 向けの Twitter のクライアントアプリである [TheWorld for Twitter](https://apps.apple.com/jp/app/theworld-for-twitter/id548994749) の後継作として作成を開始しました。プロジェクト名は SocialHub で、2020年2月に iOS 向けアプリをリリース ([AppStore](https://apps.apple.com/us/app/socialhub-socialmedia-client/id1474451582))しました!また、アプリを紹介する [Webページ](https://uakihir0.github.io/socialhub/) も作成しました。
## 使用技術
iOS Android 共通で使用するライブラリを Java で作成しており、Google のプロジェクトである [J2ObjC](https://developers.google.com/j2objc) を用いて Objective-C に変換し使用しています。iOS 及び Android では各々 Swift 及び Kotlin を使用して実装しています。Android 版の制作については鋭意制作中です。また、変な技術枠で、iOSDC2020 にてこの技術についての[解説](https://fortee.jp/iosdc-japan-2020/proposal/a94bc318-9ba2-4c22-8e32-6be8fdcb8716)を行いました。
## 役割
個人開発なので役割としては企画から実装、マーケティングまで全て自身が行っています。マーケティングは Twitter 上のみで行っており、TheWorld for Twitter でのアカウント (@TheWorld_JP) を経由して、(@SocialHub_JP) を運用しています。
## 工夫点
アプリはユーザー体験が優れているからこそ使ってもらえるもの、という意識の元、ユーザーインターフェースを極力妥協しない方針で、技術等の選定を行いました。Flutter 等を用いて iOS, Android の実装を同時に行う案を考慮したのですが、サンプルを実装した際に想像以上に不自由が多く、ネイティブで実装したときの快適さに遠く及ばないことが分かったため、ユーザーインターフェースはネイティブで実装することに決めました。その際、iOS, Android で共通して使用するロジックを切り出して実装したいため、採用したのが J2ObjC という Java のコードを Objective-C コードに変換するプロジェクトでした。日本ではほぼ活用事例が無く、世界を通してみても、大規模にコード変換を行っている事例は見当たらず、非常に導入は苦難の道程でした。J2ObjC は Java JRE のサブセットしか対応しておらず、変換不可能なライブラリが多く、使用したいライブラリを純 Java に書き換えたり、リフレクションで実装する部分を書き換えたり、ネットワークの挙動の違いを吸収したりと、変換できるようになるのに時間を要しましたが、導入後は GitHub に Push 後に自動で CI/CD を行い CocoaPod プロジェクトまで変換するようにして、快適な開発環境が整備できました。 [レポジトリ](https://github.com/uakihir0/SocialHub)
また、アプリのデザインの面でも非常に工夫を凝らしています。自身の生活を見直し、普段使いしている iOS アプリを眺めてみると、 OS デフォルトで提供しているデザインを利用しているアプリは少数派で、基本的にはそれに類似したデザインで1から作り直されたものが多数派です。TheWorld for Twitter でもその独特なデザインが評価された背景もあり、本プロジェクトでも、既存の UI コンポーネントはほぼ利用せずに、1から再設計することにしました。その際に、他のアプリとの差別化を図るために印象に残り使いやすい UI を目指し、ピクセル単位での細かいサイズ調整を行いました。
## 参考
[参考ブログ記事](http://urushi.hatenablog.jp/entry/2019/07/27/184351)