自作で作ったiOSフレームワーク「ChatQueueKit」の紹介

私は最近、iOS向けのフレームワーク「ChatQueueKit」を開発しました。このフレームワークは、リアルタイムチャットのように頻繁に追加されるデータを効率的に管理し、テーブル表示に反映させるための強力なツールです。今回は、具体的なソースコードとサンプルアプリケーションを用いて、このフレームワークの特徴と使い方を紹介します。

GitHub - aragig/ChatQueueKit

ChatQueueKitの特徴

ChatQueueKitは、データをキューに一時的に保持し、指定された閾値に達したときにメインデータへ移動する仕組みを提供します。これにより、頻繁なデータの追加が行われる環境での効率的なデータ管理を可能にしています。例えば、チャットアプリではメッセージがリアルタイムに追加されますが、このフレームワークを使えば、その処理を最適化することができます。

動画

少しわかりづらいかもしれませんが、動画のようにデータを一つずつ追加した場合と、一度に大量に追加された場合とで、テーブル挿入時の挙動を変えることができます。

主な機能

  • 一定時間毎に、キューに貯まったデータをメインデータへ移動します。
  • キューにデータが大量に貯まった(閾値を超えた)場合は、メインデータへ即座に移動させます。
  • デリゲートを使ったテーブルのリロードが可能で、キューからメインデータに移動したタイミングでデリゲートが呼び出されます。
  • メインデータにデータを追加する際に、上または下に挿入する昇降順を選べるオプションを提供します。
  • データのソート、フィルタリング、置換など、メインデータとキューデータを外部から操作可能です。

GitHub - aragig/ChatQueueKit

ソースコードの詳細

以下に、ChatQueueKitのメインコードと、それを利用したサンプルアプリケーションのコードを紹介します。

フレームワークのメインコード

DataManagerクラスは、データの管理を行います。このクラスでは、キューデータとメインデータを管理し、指定された閾値に達したらキューデータをメインデータに移動します。また、デリゲートを使ってテーブルのリロードを行います。

swift
public protocol DataManagerDelegate: AnyObject {
    func doReloadTable<T>(isQueueFull: Bool, movedData: [T])
}

public class DataManager<T> {
    
    public enum DataContainerType {
        case QueueData
        case MainData
    }
    
    private var mainData = CoreDatas<T>()
    private var queueData = CoreDatas<T>()
    
    public weak var delegate: DataManagerDelegate?
    
    private var timer: Timer?
    private let queueThreshold: Int
    private let reloadTableTimeInterval: TimeInterval
    private let insertAtTop: Bool

    public init(queueThreshold: Int = 50, reloadTableTimeInterval: TimeInterval = 1.0, insertAtTop: Bool = false) {
        self.queueThreshold = queueThreshold
        self.reloadTableTimeInterval = reloadTableTimeInterval
        self.insertAtTop = insertAtTop
    }
    
    public func append(_ data: T) {
        queueData.append(data)
        checkQueueLimit()
    }

    // キューが満杯になったらデータを移動
    private func moveQueueToMain(isQueueFull: Bool) {
        let allQueueData = queueData.getDatas()
        guard !allQueueData.isEmpty else { return }

        for item in allQueueData {
            if insertAtTop {
                mainData.insert(item, at: 0)
            } else {
                mainData.append(item)
            }
        }
        queueData.clear()

        delegate?.doReloadTable(isQueueFull: isQueueFull, movedData: allQueueData)
    }
    
    // 他の機能は省略...
}

ChatQueueKitの導入方法

ChatQueueKitは、CocoaPodsを使って簡単にインストールすることができます。以下の手順に従って、プロジェクトに導入してください。

Podfileの設定

まず、プロジェクトのPodfileにChatQueueKitのリポジトリを指定します。以下のように設定を追加してください。

Podfile
target 'YourAppTargetName' do
  use_frameworks!

  pod 'ChatQueueKit', :git => 'https://github.com/aragig/ChatQueueKit.git'

end

YourAppTargetNameを実際のプロジェクトのターゲット名に置き換えてください。use_frameworks!は、Swiftベースのフレームワークを使用するために必要です。Podfile内にこの行がない場合は追加してください。

CocoaPodsのインストール

次に、以下のコマンドを実行してPodをインストールします。

zsh
$ pod install

CocoaPodsがChatQueueKitをダウンロードし、プロジェクトに統合します。

プロジェクトでの利用

インストールが完了したら、プロジェクトでimport ChatQueueKitを記述して、ChatQueueKitを使用できるようになります。準備が整ったら、次のサンプルコードや自身のプロジェクトでChatQueueKitを活用して、効率的なデータ管理を実現しましょう。

サンプルアプリケーション

次に、ChatQueueKitを利用したサンプルアプリケーションを紹介します。このアプリケーションでは、ボタンを押すことでチャットデータを追加し、キューデータが一定数を超えると、自動的にテーブルに反映される仕組みを実装しています。

swift
class ViewController: UIViewController {
    
    @IBOutlet weak var tableView: UITableView!
    
    var chatData = DataManager<Comment>(queueThreshold: 5, reloadTableTimeInterval: 1.0, insertAtTop: true)
    var lastNo = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        
        chatData.delegate = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }

    @IBAction func onTappedAddButton(_ sender: UIButton) {
        let nextNo = lastNo + 1
        chatData.append(Comment(no: nextNo, content: "New message \(nextNo)"))
        lastNo = nextNo
    }
}

extension ViewController: DataManagerDelegate {
    func doReloadTable<T>(isQueueFull: Bool, movedData: [T]) {
        self.tableView.reloadData()
    }
}

▼ サンプルコードの詳しくは、こちらのリポジトリをご参考ください。 GitHub - aragig/ChatQueueKit

まとめ

ChatQueueKitは、頻繁に追加されるデータを効率的に管理し、テーブル表示をスムーズに行うための便利なフレームワークです。このフレームワークを活用することで、チャットアプリやリアルタイムで更新されるリストビューのパフォーマンスを向上させることができます。ぜひ試してみてください!

GitHub - aragig/ChatQueueKit

\自作Frameworkの作り方の記事も書いてます/

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

関連記事