Does not provide fallback content when JavaScript is not available. このサイトを視聴するにはJavaScriptを有効にしてください。React Native製Mastodonクライアント「ikuradon」をgithubで公開しました | blog.potproject.net

React Native製Mastodonクライアント「ikuradon」をgithubで公開しました。

potproject/ikuradon

React Nativeの勉強のためにちまちまと作ってたアプリなのですが、

最近、せっかくなので何かOSSとして公開したいなーと思っていたので公開します。アプリ名も安直です。

React Native、色々言われてる割には国内でのちゃんとしたアプリのソース公開も少ないので、参考になればいいんですけども。

内部のライブラリにReact Redux,React Navigationを使用しています。

Reduxは覚えるのに苦労しつつ、この実装でいいのか今もイマイチな感じがあるのですが、全体のデータを管理出来るので、Reduxか似たようなものが無いと設計段階でやはりキツいです。

まだまだ開発途中で、一部遷移が遅かったり、そもそも動かなかったりしますが、そこはちゃんと整備します。デザインも変えていくので許して。

とりあえず今のところはタイムライン表示機能とfav,boost,普通のTootとまあ本当に最低限の機能という感じ。

開発期間は割と短いし、Androidでは一切検証してなかったけど大体普通に動きます(バグあるけど)。

React Native(というかExpo)開発に関して

とりあえず、Expoが本当にすごい。

コード更新即反映即立ち上げのHot Reload機能、その他役に立つ解析機能やAPIなどかなり開発速度を早くできたのもこのおかげです。

そしてWindowsでも実機でiOSネイティブ開発出来ちゃいます。わざわざ埃被ってるMacBookを出さなくていいです。

ネックなのはデバッグモードがかなり遅いところですねえ。そのせいで本番と挙動が違う部分も出てきたりします。 → この部分はアップデートとProduction Modeが追加されてかなりマシになったと思います。でもネイティブビルドと比べると遅いけどそれはしょうがない。

速度的には充分ネイティブ並みに動いてると感じます。UI自体はネイティブですし、よくあるUI部分を同期的に書いてフリーズする、みたいなことも基本無くてよろしい。 デフォルトでES6とES7の一部分をサポートとしており、JS界隈でありがちな「初期の構築いろいろあり過ぎて辛い」もなく、await/asyncが使えるのは非常に便利です。
開発は楽で楽しいんですけど=簡単に作れるってわけではないと思います。そもそもReactやRedux、ES6の知識が必要ですし。

WebSocketもデフォルトでサポートされていたので、Streaming APIの対応もすんなりいきました。100行程度でいけます。強いです。

動かし方

上でも書いたとおり、Expoというアプリを使用します。このアプリをダウンロードして、このCDNリンクからQRコードを読み込むだけ。

開発なら、cloneした後npm installからnpm startでQRコードが出てきます。これで終わり。後は同じ。

自分もこれで実機のiOSで開発しています。ほぼnpmで事足りるのでホームページからわざわざSDKダウンロードしたりすることも無し。なんともモダンって感じの開発環境です。

公開アプリ

Google Play (Android)

Google Play にて公開しています。通常通りインストールできます。

Expo (iOS/Android)

Expoというアプリをインストールしてもらえれば機能的な制限もなく動作させることができます。 また、iOSに関しては非公式アプリです。

Expo CDN Link

ExpoアプリからここのQRコードを読み取ってもらうとすぐに動くはずです。

プライバシーポリシー

SNSサービスのアクセストークン このアプリは認可されたSNSサービスのアカウントのアクセストークンをアプリ内部に保存しますが、このアプリからSNSサービスへのアクセス・認可以外の用途でアクセストークンを送ることはありません。

カメラ及び保存領域のアクセス このアプリから認可されたSNSサービスのサーバ以外に画像データ等を送信することはありません。

位置情報・ユーザトラッキング・広告 このアプリ上にこれらの情報を取得する機能はありません。また、SNSサービス上に取得した情報などが合致する可能性がありますが、このアプリは一切関与しません。

免責事項 このアプリ等を使用した生じた損害等の一切の責任を負いかねます。