licensee でOSSライセンスの治安を守る

2021/12/18

cashapp/licensee というAndroid向けのGradleプラグインを試してみたのでご紹介です。

これはなに?

licensee は依存関係グラフに含まれる各ライブラリのライセンスが期待通りのものかどうかを検証してくれるGradleプラグインです。Android界の重要人物、JakeWharton さんの手によるもの。

公式サイトの例示にあるように

  • あるライブラリAを使っている
  • ライブラリAはバージョンアップに伴ってライブラリBに依存するようになった
  • ライブラリBのライセンスが予期せぬ(使いたくない)ものだった

みたいなときに気付けなくない?という問題意識から生まれたプラグインのようです。

使い方

とりあえずは公式サイトの通りに設定しましょう。

buildscript {
  repository {
    mavenCental()
  }
  dependencies {
    classpath 'app.cash.licensee:licensee-gradle-plugin:1.3.1'
  }
}

apply plugin: 'app.cash.licensee'

実行してみます。

E:\example>gradlew licensee

> Task :app:licenseeDebug
androidx.activity:activity:1.2.4
 - ERROR: SPDX identifier 'Apache-2.0' is NOT allowed
androidx.activity:activity-ktx:1.1.0
 - ERROR: SPDX identifier 'Apache-2.0' is NOT allowed
(中略)
org.jsoup:jsoup:1.14.3
 - ERROR: Unknown license URL 'https://jsoup.org/license' is NOT allowed

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:licenseeDebug'.
> Artifacts failed validation. See output above.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 29s
1 actionable task: 1 executed

E:\example>

大量にERRORが出るはず。 というのも、 licensee はどのライセンスを許容するかを自分で明示する形になってるんです。 未設定時は「いかなるライセンスも許容しない」なので、片っ端からエラーになるんですね。

設定はこんな感じ。

licensee {
    allow('Apache-2.0') // 特定のライセンスを許容する
    allow('BSD-3-Clause') // 特定のライセンスを許容する
    allowUrl('https://developer.android.com/studio/terms.html') // 特定のURLを許容する
    allowDependency('com.example.foobar', 'foobar', '1.0.0') // 特定のライブラリ(依存関係)を許容する
}

特定のライセンスを許容する場合はSPDX License ListのIdentifier定義を使います。それ以外にも、URLを指定したりライブラリ自体を指定したりもできます。

ライセンスをどのように定義し、どのようにバイナリに含めているかはOSSごとに違うので柔軟に対応できるようになっている、というわけですね。

もっと凝った設定もできますが、大抵はこの3パターンで事足りるはず。

所感

クローズドソースの開発をしているところにGPL系が混入すると致命的なので、お仕事でAndroidアプリ開発している人にはめっちゃ有用じゃないでしょうか。

開発初期からとりあえず組み込んじゃうのがいいんじゃないかと思います。




関連(するかもしれない)記事


おススメ