コベリン発の OSS ライブラリ "NeetAssertionKit" の紹介

こんにちは。合同会社コベリンの柾本 (マサモト) です。

コベリンの社内オープンソースプロジェクトである The Neet House Project (Github) から、Objective-C 用ライブラリ "NeetAssertionKit" を公開したので紹介したいと思います。

インストール方法

CocoaPods からインストールできます。

まだ本家には取り込まれていないので、pod repo add コマンドで NeetHouse リポジトリを追加します。
一度追加すれば他のプロジェクトでも使えるようになります。

pod repo add neethouse https://github.com/neethouse/Specs

Podfile に NeetAssertionKit を追加して

# Podfile
pod 'NeetAssertionKit'

pod install して完了です。

pod install

使い方の一例

NeetAssertionKit には今のところ10種類のマクロが存在します。

そのうちのいくつかをご紹介します。

NSArray の型チェック (NAKAssertArrayType)

Objective-Cジェネリクスのような機能がないので、NSArray などの型をコンパイル時にチェックすることができません。

コメントで型を明記しておくのは当然ですが、コード上でも型チェックをしておくとより安心です。

- (void)setNames:(NSArray *)names {
    // NSArray に NSString 以外が含まれるとエラー
    NAKAssertArrayType(names, NSString, @"文字列の配列を指定すること!");

    _names = names;
}

スレッドチェック (NAKAssertMainThread)

iPhone アプリで使う UIKit フレームワークのクラスやメソッドはメインスレッドからしか操作できません。

しかしメインスレッド以外から操作したとしても Android のように即座にエラーが起きたりはしないため、バグの発見が遅れがちです。

外部から呼ばれそうな場所に NAKAssertMainThread を入れておくと、そのような問題を早期に発見できます。

/// ビューの表示を更新する。メインスレッドから呼ぶこと!
- (void)updateAppearance {
    // メインスレッド以外から呼ばれるとエラー
    NAKAssertMainThread(@"おかしい!");
    ...
}

C の関数でもアサーション (NAKWrap)

標準の NSAssert は Objective-C のメソッド内でしか使用できません。

NAKWrap マクロでアサーションを囲むと C の関数内でも使えるようになります。

NSString *joinStringArray(NSArray *strings, NSString *separator) {
    // これはコンパイルできない!
    NAKAssertArrayType(strings, NSString, @"文字列の配列を指定すること!");

    // NAKWrap で囲むと使える
    NAKWrap(NAKAssertArrayType(strings, NSString, @"文字列の配列を指定すること!"));

    // ...
}

その他のマクロの説明は NeetAssertionKit の README に書いてあります。

おわりに

NeetAssertionKit はコベリンの別のプロダクトを開発する過程で誕生したライブラリです。

開発過程で生まれた汎用的に使えそうな部品は、今後も積極的に OSS として公開していきたいなーと思っています。

これからも合同会社コベリンThe Neet House Project をよろしくお願いいたします。