クックパッド開発者ブログスマートフォン用の表示で見るクックパッド開発者ブログ2018-02-28良い感じにログを収集するライブラリ、Puree-Swiftをリリースしましたこんにちは。技術部モバイル基盤グループの三木(@giginet)です。クックパッドでは、Pureeと呼ばれるiOS/Android/ReactNative向けのログ収集ライブラリを公開しています。Swiftで書き換え、OSSとして公開しました。この記事では、新しくなったPureeをご紹介します。Redshiftを中心としたデータ活用基盤を構築しています。クックパッド開発者ブログこの仕組みを使い、公開している多くのモバイルアプリからも、1つのログ基盤にさまざまなログを集積させています。モバイルアプリからのログ送信には、さまざまな状態を考慮する必要があります。ログを送りたいタイミングに安定した通信が確保されているとは限らないですし、闇雲に送りすぎてしまうと、ユーザーさんのギガを圧迫してしまうかもしれません。これらを解決するライブラリがPureeです。ログをバッファリングし、まとめて送信したり、送信に失敗したログをキャッシュし、復元時にリトライする機能などを有しています。Puree-Swiftの特徴Puree-Swiftは、以前公開していたObjective-C版と異なり、以下のような特徴があります。Objective-C版の設計思想を踏襲Puree-SwiftはObjective-C版のPureeの置き換えを目指しています。そのため、タグシステムやプラグインの設計など、基本的な仕組みを踏襲しています。詳しく知りたい方は以下の記事をご覧ください。クックパッド開発者ブログよりSwiftらしいインターフェイスObjective-Cで書かれていた物をSwiftに刷新したため、よりSwiftから利用しやすいインターフェイスとなりました。大きく変わったのはFilterやOutputの実装方法で、以前は抽象クラスとして実装していたのですが、protocolを利用することができるようになり、よりSwiftらしいプロトコル指向な設計に生まれ変わりました。依存関係の廃止Objective-C版のPureeでは、未送信のログの永続化のため、YapDatabaseというSQLiteにアクセスするライブラリを利用していました。このライブラリは最近メンテナンスが止まっていたり、Swiftで書かれていなかったりと、Pureeのメンテナンスを難しくする原因となっていました。そのため、Puree-Swiftでは一切の依存関係を廃止して、iOS標準のファイルストレージを使うようにしています。通常はこの利用方法で問題ありませんが、巨大なデータを扱いたい需要が出たときのために、LogStoreを自分でプラグインとして拡張できる設計になりました。必要に応じてRealmやCoreDataなど、使いたいバックエンドを採用することができます。実装例それではさっそくPureeの実装例を見てみましょう。最終的には、以下のようなインターフェイスで任意の場所にログを送れるようになります。ここでは、以下のようにPVログを送るまでの実装を考えてみます。"pv.recipe.detail")Pureeを扱うには以下の3ステップが必要です。ログを加工するFilterを実装する収集されたログを外部に出力するOutputを実装するタグにより、どのFilterやOutputを利用するかルーティングするより詳しい使い方はREADMEをご覧ください。ログを加工するFilterを実装するまず、Filterプロトコルを用いて、Filterを実装します。これは渡ってきた任意のデータをLogEntryに加工する役目を持っています。ここでは単純に渡ってきたペイロードをJSONとしてエンコードして、LogEntryに格納しています。}}このFilter上で、全てのログに共通して付加したいペイロードを載せることもできます。ユーザー情報などが考えられます。収集されたログを外部に出力するOutputを実装する次に、収集されたログを外部に出力するためにOutputを実装します。以下は渡ってきたLogEntryのペイロードを標準出力に出力するだけのOutputです。}}BufferedOutputOutputを用いると、ログが送信され、即座に出力されますが、代わりにBufferedOutputを用いると、一定数のログが溜まるまでバッファリングし、定期的にログを送ることができます。以下のようにAPIリクエストを伴うようなログ送信に適しています。}}クックパッドでは、最初に紹介したログ基盤を利用するための、APIを提供しており、社内ライブラリとして、そのAPIに送信を行うOutputを提供しています。AnalyticsなどのmBaaSに対応することもできるでしょう。タグにより、どのFilterやOutputを利用するかルーティングする最後に、実装したFilterやOutputをどのログに対して適応するかのルーティングを定義しましょう。Pureeは、ログに付加されたタグを元に、どのような処理を行うかを決定します。"pv.top")例えば、上記のような定義ですと、それぞれのタグについて、以下のように処理が行われます。これにより、ログの種類によって加工方法や出力先を変えることもできます。)まとめiOSのログ収集ライブラリ、Puree-Swiftをリリースしましたすでにクックパッドアプリでは使われており、開発中の他のアプリでも利用される予定ですOutputを追加すれば、さまざまなログバックエンドに対応することができますどうぞご利用ください。2018にクックパッドもブースを出展いたします。オリジナルグッズの配布も行いますので、クックパッドでのiOS開発に興味のある方は是非遊びに来てください。私もスピーカーとして登壇します。当日お会いしましたらよろしくおねがいします。はじめるログ管理こんにちは。先日、モバイルアプ...2014-09-24「関連する○○」機能を手軽に実現できる。