Skip to content

Repository files navigation

Karoha for Android

Karohaは、SNS「Karotter」をAndroidから利用するための非公式クライアントです。

Karotterの投稿、ストーリー、コミュニティ、掲示板、DMなどを一つのアプリにまとめ、Material Components / Compose Materialに依存しない独自UIで実装しています。Paper、Snow、Mistのカラーテーマと、それぞれのライト・ダーク表示に対応しています。

Important

KarohaはNamiCodeが提供する非公式アプリです。Karotterの公式アプリではなく、Karotter運営との提携・承認を示すものではありません。サービス側の仕様変更などにより、一部機能が利用できなくなる場合があります。

最新版

現在の最新版は Karoha v0.1.10(versionCode 12)です。

アプリ起動時にもGitHub Releasesを確認し、新しいバージョンがある場合は更新内容、ダウンロード進捗、インストール操作をアプリ内に表示します。更新後の初回起動時には、インストールしたバージョンのリリースノートを表示します。

対応環境

項目 内容
対応OS Android 8.0(API 26)以上
コンパイルSDK Android SDK 35
ターゲットSDK Android SDK 35
Java JDK 17
UI Jetpack Compose Foundationベース
表示方向 縦画面
API https://api.karotter.com/api/

主な機能

ホーム

  • 「みんな」「フォロー中」「トレンド」と、ホームへ追加したコミュニティのタイムライン
  • 「最新」「おすすめ」の表示切り替え
  • ストーリー一覧とストーリービューアー
  • 15秒間隔の差分更新と手動更新
  • 現在位置を維持した新着投稿の追加
  • ページングによる無限スクロール
  • タブのタップ・左右スワイプ切り替え

投稿

  • 通常投稿、返信、引用、リカロート
  • いいね、ブックマーク、絵文字リアクション
  • リアクションの分類、日本語検索、利用履歴に基づく「よく使う」の自動追加
  • Karotter公式カタログから取得する絵文字と、画像型のProリアクション
  • 画像、動画、音声、GIFの表示
  • 画面内の動画・GIFの自動再生と動画のミュート切り替え
  • 画像の全画面表示、ピンチ拡大、複数画像の左右スワイプ、長押しメニューからの保存
  • 画像スポイラーと「センシティブなメディア」表示
  • 投票の表示・投票
  • Markdown、Markdown画像・画像リンク、KaTeX、ルビ、URL、@ユーザー名#ハッシュタグ
  • ||文字||形式の文字スポイラー
  • URLのリンクプレビュー
  • 長文の折りたたみ表示
  • 投稿詳細、返信元・返信一覧、引用元
  • 表示数、ブックマーク数、反応したユーザー・引用投稿の一覧
  • 引用数と共有メニュー
  • 投稿の編集、削除、固定
  • 他ユーザーのミュート・ブロック

投稿作成

  • プランに応じた文字数制限(FREE: 200文字、PLUS: 500文字、PRO: 1000文字)
  • 本文なしのメディア投稿
  • 画像、動画、音声、投票の添付
  • 添付画像ごとのスポイラー設定
  • 投稿先の指定(通常、コミュニティ、サークル)
  • 公開範囲の設定画面からのサークル作成
  • 公開範囲、返信可能ユーザーの指定
  • 最低年齢・最高年齢のプリセットおよびカスタム入力
  • AI生成、プロモーション、成人向けの指定
  • 予約投稿、自動削除日時
  • 折りたたみ式Markdown入力補助と投稿プレビュー
  • 入力中のハッシュタグ・ユーザー名の色分け
  • 編集中に閉じる場合の確認

ストーリー

  • 画像・動画ストーリーの作成
  • キャプションの文字色、背景、サイズ、位置調整
  • 閲覧、いいね、コメント、投稿者プロフィールへの移動
  • 閲覧数の表示
  • 自分のストーリーの削除
  • 上下スワイプとアニメーションによる移動

検索

  • 投稿・ユーザー検索
  • 投稿の「人気」「最新」「古い」「メディア」切り替え
  • メディアのギャラリー表示
  • 高度な検索ビルダー
  • ハッシュタグ検索
  • 検索履歴を最大12件保存し、候補には直近3件を表示
  • 検索結果の無限スクロール
  • 15秒間隔の差分更新と手動更新
  • 投稿・プロフィールとその先のページから検索条件、タブ、スクロール位置を保って戻れる画面スタック
  • 通知一覧と統一したスライド・フェードによる画面遷移

プロフィール

  • アイコン、ヘッダー、自己紹介、Webサイト、場所、参加日
  • オンラインステータスとステータスメッセージ
  • レベルと進行度
  • 公式マーク、課金認証色、Bot・パロディ・非公開・BAN状態
  • Proプロフィール色とカード装飾
  • 複数の固定投稿
  • 「投稿」「返信」「メディア」「いいね」タブ
  • メディアのギャラリー表示
  • フォロー中、フォロワー、知り合いのフォロワー一覧
  • フォロー、フォロー解除、非公開アカウントへのフォローリクエスト
  • 投稿通知、DM、質問箱、ミュート、ブロック
  • プロフィールURLの共有とQRコード表示
  • 自分のプロフィール編集と即時反映

コミュニティ

  • 参加中、管理中、おすすめコミュニティの一覧
  • コミュニティのルール表示
  • 「人気」「最新」「メディア」「メンバー」タブ
  • タブのタップ・左右スワイプ切り替え
  • 各一覧の無限スクロール
  • 参加・退出、コミュニティ内投稿
  • ホームタイムラインへの追加・削除
  • Proユーザーによるコミュニティ作成
  • 15秒間隔の更新と手動更新

掲示板

  • 板一覧、スレッド一覧、スレッド詳細
  • 板とスレッドの作成
  • スレッドへの返信
  • 返信への画像添付
  • 自分が作成した板の削除
  • URLのタップ
  • 15秒間隔の更新、手動更新、スクロール位置の維持

DM

  • 「メッセージ」「リクエスト」のタブ切り替え
  • タブのタップ・左右スワイプ切り替え
  • 1対1の会話開始
  • 複数ユーザーを選択したグループ作成
  • テキスト・画像の送信
  • 未読バッジ
  • 会話一覧と会話画面の5秒間隔更新
  • リクエストの承認・拒否
  • 履歴削除、グループ退出、メンバー表示

通知

  • 通知一覧と種類別フィルター
  • 通知一覧の無限スクロール
  • アプリ使用中は10秒間隔で新着を確認
  • 新着通知のアプリ内ポップアップと未読バッジ
  • DMの新着確認と下部ナビゲーションの未読バッジ
  • 複数投稿へのいいね通知で、対象件数と投稿一覧を表示
  • バックグラウンドでは15秒間隔でシステム通知を確認
  • システム通知から関連投稿・プロフィールを直接表示
  • フォアグラウンドで表示済みの通知をバックグラウンドで重複通知しない制御
  • 認証を復旧できない場合はエラー通知後に監視を一時停止

マイページ

  • プロフィール編集
  • ブックマーク
  • フォローリクエスト
  • 質問箱(未回答・回答済みをタップまたは左右スワイプで切り替え)
  • 質問への回答投稿
  • 予約投稿一覧と削除
  • レベルランキング
  • Pro設定と複数固定投稿の管理
  • 非公開アカウント設定
  • 外観、通知、プライバシー、コンテンツ表示、ストレージ・キャッシュ設定
  • ブロック中のアカウントの確認と解除
  • このアプリについて、サードパーティーライセンス
  • アカウント追加・切り替え・ログアウト

UIとテーマ

  • Compose Materialを使用しない独自コンポーネント
  • Phosphor Iconsで統一したアイコン
  • Paper、Snow、Mistの3種類のカラーテーマ
  • 各テーマのライト・ダーク表示
  • 端末テーマへの自動追従
  • 画面遷移、タブ、ストーリー、メニューの独自アニメーション
  • 下部ナビゲーションの背景ぼかし
  • システムステータスバー、ナビゲーションバー、キーボードのInsets対応
  • Androidの戻る操作に対応した画面スタック
  • Karoha独自の起動アニメーションとアダプティブアイコン
  • 初回起動のウェルカム画面、テーマ・カラーテーマ・通知設定
  • GitHub Releasesを利用したアプリ内アップデーター

認証とデータ保護

  • アクセストークン、Cookie、CSRFトークン、KarotterのセッションIDを端末内に保持します。
  • 保存を選択したログイン情報は、Android Keystoreの非エクスポート鍵を使用したAES-GCMで暗号化します。
  • 通常は記録済みセッションを再利用し、不要なログインセッションの増加を抑えます。
  • 通常ログインと認証アプリの6桁コードを使う二段階認証に対応しています。二段階認証コードは保存しません。
  • 認証に失敗した場合は、セッション延長、記録済みセッションの復帰、自動再ログインの順で復旧を試みます。
  • 自動再ログインには間隔制限があり、一時的な通信エラーだけで新しいセッションを作成し続けないようにしています。
  • ネットワーク接続がない場合はAPIリクエストや自動ログアウトを行わず、再試行画面を表示します。
  • ユーザー名やパスワードをソースコードへ埋め込む必要はありません。認証情報をリポジトリへ追加しないでください。

Android権限

権限 用途
INTERNET Karotter APIとメディアへの接続
ACCESS_NETWORK_STATE オフライン判定と不要なAPI通信の抑止
POST_NOTIFICATIONS Android 13以降のシステム通知
FOREGROUND_SERVICE バックグラウンド通知確認
FOREGROUND_SERVICE_REMOTE_MESSAGING 通知確認用フォアグラウンドサービス
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS ユーザーが許可した場合の通知監視安定化
RECEIVE_BOOT_COMPLETED 端末再起動後のバックグラウンド通知監視の復帰
REQUEST_INSTALL_PACKAGES GitHub Releasesから取得した更新APKのインストール

バッテリー最適化の除外は任意です。端末メーカーの省電力設定によっては、除外後もバックグラウンド通知が遅延・停止する場合があります。

ビルド

必要なもの

  • Android Studio
  • Android SDK 35
  • JDK 17
  • Android 8.0以上の実機またはエミュレーター

local.propertiesにAndroid SDKの場所を設定します。このファイルはGit管理対象外です。

sdk.dir=C\:\\Users\\your-name\\AppData\\Local\\Android\\Sdk

デバッグAPKを作成します。

.\gradlew.bat assembleDebug

生成先:

app\build\outputs\apk\debug\app-debug.apk

接続中の端末へインストールする場合:

adb install -r app\build\outputs\apk\debug\app-debug.apk

プロジェクト構成

app/src/main/java/social/karotter/client/
├── MainActivity.kt
├── KarotterApplication.kt
├── AppUpdateManager.kt
├── BackgroundNotificationService.kt
├── data/
│   ├── CredentialVault.kt
│   ├── KarotterApi.kt
│   └── NetworkConnectivity.kt
└── ui/
    └── KarotterApp.kt
  • KarotterApp.kt: 画面、独自UIコンポーネント、ナビゲーション、アニメーション
  • AppUpdateManager.kt: GitHub Releasesの確認、APKのダウンロード・検証・インストール
  • KarotterApi.kt: API通信、JSON解析、セッション・Cookie・CSRF管理
  • CredentialVault.kt: 複数アカウントの認証情報をAndroid Keystoreで暗号化
  • NetworkConnectivity.kt: 検証済みインターネット接続の判定
  • BackgroundNotificationService.kt: アプリがバックグラウンドのときの通知確認

主な依存ライブラリ

  • AndroidX / Jetpack Compose Foundation
  • Kotlin
  • Coil
  • Coil GIF
  • Conscrypt
  • Markwon
  • Markwon Image
  • JLatexMath Android
  • Phosphor Icons
  • ZXing Core
  • Haze

著作権表示、バージョン、ライセンス条項は、アプリ内の「マイページ → サードパーティーライセンス」から確認できます。

ライセンス

Karohaのオリジナルソースコードは、Apache License 2.0のもとで公開されています。

Copyright 2026 NamiCode

Licensed under the Apache License, Version 2.0

Apache License 2.0は、ライセンス条件を守る限り、商用・非商用を問わず、利用、複製、変更、再配布を許可します。再配布時はLICENSENOTICEを維持し、変更したファイルには変更した旨を明記してください。

第三者ライブラリ、アイコン、フォントその他の同梱物には、それぞれの権利者が定める別のライセンスが適用されます。Apache License 2.0へ変更されるわけではありません。

注意事項

  • Karotter側の仕様変更や提供状況により、一部またはすべての機能が予告なく利用できなくなる場合があります。
  • Proユーザー向け機能は現在開発中です。NamiCodeがProプランを利用しておらず、実際のPro環境で十分な動作確認を行えていないため、Pro設定、プロフィール装飾、複数固定投稿、コミュニティ作成などで、表示や操作が正しく反映されない場合があります。
  • 非公開アカウント関連機能は現在開発中です。フォローリクエスト、プロフィール・投稿の公開制御、フォロー一覧などで、不具合が発生する可能性があります。
  • 一部の機能は、アカウントの公開範囲、フォロー関係、年齢設定、Pro契約、コミュニティ参加状態などにより表示・実行できません。
  • 自動更新は画面の表示状態とネットワーク接続を考慮して動作します。OSの省電力制御下では正確な間隔が保証されません。

免責事項

本アプリは現状有姿で提供され、完全性、正確性、安全性、継続的な動作および特定目的への適合性を保証しません。本アプリの利用または利用不能に起因して発生した、アカウントの制限・停止、投稿や設定などのデータの消失・破損、通信上の問題、端末の不具合、逸失利益、その他の直接的・間接的・偶発的・特別・結果的な損害について、NamiCodeは、適用法令で認められる最大限の範囲において責任を負いません。本アプリは利用者自身の判断と責任で利用してください。

提供

Karoha is provided by NamiCode.

About

Karotter非公式Androidクライアントアプリ

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages