「DroidKaigi 2016」 と 「関モバ #11」 で発表しました
「DroidKaigi 2016」 にて 『5 年続く 「はてなブックマーク」 アプリを継続開発する技術』 というタイトルで、また 「関モバ #11」 で 『ComponentsRecyclerAdapter — RecyclerView で複数の view type や複雑なデータ構造を扱う』 というタイトルで、それぞれ発表しました。
DroidKaigi 2016
5 年前に最初のリリースが行われたアプリを継続的に開発しており、そのための取り組みを共有しました。
要点をまとめると以下のようになります。
- テストは Testing Support Library に頼っている。
- CI については、社内の Jenkins サーバー上でテストの実行やリリースパッケージ作成の自動化を行っている。
- 各種タスクを Gradle タスクとして定義し、タスクの実行をシェルスクリプトで記述。
- 最近は Jenkins Workflow plugin への移行を進めている。 (Groovy での DSL が書きやすいとか、リリースパッケージのアップロード処理の前に人の確認を挟みやすいなどの利点のため。)
- Preview 版 (production flavor の
preview
) を定義して、開発中の機能を preview 版で有効に。- 長い期間の開発でも他ブランチとのコンフリクトをしづらく & チーム内配布で確認しやすく。
- Annotations Support Library を活用。
- 必要に応じてライブラリ的なものを作る。
- 例えば 「関モバ #11」 で発表した
ComponentsRecyclerAdapter
など。
- 例えば 「関モバ #11」 で発表した
Preview 版について補足
開発中の機能を Preview 版 (product flavor の preview
) でのみ有効にする、という話がスライド中に出てきます。 これについて、具体的な方法がわからないということで質問いただきました。 (src/preview/java
下に preview
版専用のソースコードを書くとすると面倒くさすぎるのでは? という。)
具体的には、ソースコードは全て src/main/java
下に置いて、
build.gradle
ファイル内でbuildConfigField
を使って preview 版専用の機能を有効にするかどうかの値を持ったフィールドをBuildConfig
に生成し、- Java のコード中で
BuildConfig
のフィールドを見てif
で条件分岐して機能を有効にしたり無効にしたりする
という感じです。
関西モバイルアプリ研究会 #11
ComponentsRecyclerAdapter を用いて複数の view type や複雑なデータ構造を扱う
複数の item view や複数のデータセットによる複雑なデータ構造を扱いやすくする RecyclerView.Adapter
のサブクラス ComponentsRecyclerAdapter
の紹介です。
gif-writer (GifWriter.js) version 0.9.3 をリリースしました
2013 年にリリースした GIF Encoder のライブラリ “GifWriter.js” を npm モジュールにして “gif-writer” としてリリースしました。 バージョンは 0.9.3 です。 *1
変更内容としては以下のとおりです。
- 各ファイルをモジュールに変更。
- パッケージに TypeScript の型定義ファイル (
.d.ts
ファイル) を含めるように。
npm モジュールに型定義を含める話
TypeScript 1.6 からモジュール名解決を npm モジュールから行う機能が入りました。
- Typings for npm packages · Microsoft/TypeScript Wiki · GitHub
- TypeScript 1.6時代の.d.ts管理について意見を述べておく - Qiita
今回のリリースでは、npm モジュールに TypeScript の型定義ファイルを含めています。 よって、TypeScript で書いているプロジェクトで “gif-writer” モジュールを使う場合、単に以下のように import
するだけで型定義が有効になります。
import * as gw from "gif-writer";
これは便利!!
*1:バージョン 0.9.0 と 0.9.1 はパッケージングに失敗したもので、0.9.2 と 0.9.3 の差分は README のみです。