Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[potatotips #70] license-list-pluginを使ってOSSライセン...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
syarihu
July 10, 2020
Technology
4
5.1k
[potatotips #70] license-list-pluginを使ってOSSライセンス画面を自動生成する / license-list-plugin
オンライン開催されたpotatotips #70で発表した資料です。
https://potatotips.connpass.com/event/178565/
syarihu
July 10, 2020
Tweet
Share
More Decks by syarihu
See All by syarihu
Recap #io25 What's new in Google Play
syarihu
0
99
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
4
4.8k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
100
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
3.5k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
3.9k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
2k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
8.1k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
610
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
3k
Other Decks in Technology
See All in Technology
[2026-03-07]あの日諦めたスクラムの答えを僕達はまだ探している。〜守ることと、諦めることと、それでも前に進むチームの話〜
tosite
0
180
[JAWSDAYS2026]Who is responsible for IAM
mizukibbb
0
420
Google系サービスで文字起こしから勝手にカレンダーを埋めるエージェントを作った話
risatube
0
130
EMからVPoEを経てCTOへ:マネジメントキャリアパスにおける葛藤と成長
kakehashi
PRO
9
1.7k
新職業『オーケストレーター』誕生 — エージェント10体を同時に回すAgentOps
gunta
4
1.8k
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
4.2k
8万デプロイ
iwamot
PRO
2
230
[JAWSDAYS2026][D8]その起票、愛が足りてますか?AWSサポートを味方につける、技術的「ラブレター」の書き方
hirosys_
3
120
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
290
プロジェクトマネジメントをチームに宿す -ゼロからはじめるチームプロジェクトマネジメントは活動1年未満のチームの教科書です- / 20260304 Shigeki Morizane
shift_evolve
PRO
1
250
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
2
350
IBM Bobを使って、PostgreSQLのToDoアプリをDb2へ変換してみよう/202603_Dojo_Bob
mayumihirano
1
310
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
230
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Building an army of robots
kneath
306
46k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
480
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Producing Creativity
orderedlist
PRO
348
40k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
Automating Front-end Workflow
addyosmani
1370
200k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
780
Transcript
license-list-pluginを使って OSSライセンス画面を自動生成する 2020/07/10 (Fri) potatotips #70 @syarihu
Taichi Sato (@syarihu) • Money Forward, Inc. ◦ Android Engineer
• TechBooster
None
OSSライセンス画面を手軽に作るためのツール • oss-licenses-plugin ◦ Google Play Services • LicenseToolsPlugin ◦
cookpad • license-list-plugin ◦ jmatsu
OSSライセンス画面を作るためのツール • oss-licenses-plugin ◦ Google Play Services • LicenseToolsPlugin ◦
cookpad • license-list-plugin ◦ jmatsu
oss-licenses-plugin • Googleが公式で提供している • ライセンスリストを自動生成、特定のActivityを呼び出す だけ ◦ カスタマイズはできない ◦ UIはちょっと微妙
• 一部ライセンスが表示されないなどの問題があった ◦ 依存関係が多い場合に問題に気づきにくい
None
jmatsu/license-list-plugin • ライセンスリストを自動生成し、yamlに定義ファイルを出 力 ◦ 人が読みやすい形なので、ライセンスの追加/変更/削 除も簡単にできる ◦ oss-license-pluginと違いライセンスリストが隠蔽され ていないため、差分も分かりやすい
license-list-plugin • 定義ファイルを元に表示用のhtmlを自動生成したり、カス タマイズした画面を提供するために利用可能なjsonの出 力も可能 • ローカルライブラリにも対応
license-list-plugin • ライセンスリストから除外したいライブラリがある場合 は.artifactignoreに記述することで簡単に除外可能 • cookpad/LicenseToolsPluginを使っている場合は cookpadのプラグインで利用するlicenses.ymlからの移 行も可能
RecyclerView HTML
license-list-pluginへの移行 • oss-licenses-pluginは便利だが、UIが微妙だったり、一 部ライセンスが表示されないなどの問題があったことか ら、ライセンス定義ファイルを自分で管理できたり、機能 が充実しているlicense-list-pluginへ移行することにした
license-list-pluginをどうやって使っているか • 定義ファイルからjsonに吐き出して、jsonを元に RecyclerViewで画面を構築 ◦ 最初作るのは手間だが、アプリのテーマカラーに合わ せられるし、1回作ってしまえばその後は定義ファイル を更新するだけでOK
license-list-pluginをどうやって使っているか • 依存関係の更新時にライセンスリストを更新するのを忘 れてしまう可能性がある ◦ 依存関係を更新したら自動でライセンス定義ファイル を更新するPRを作成
ライセンス定義ファイルを自動で更新するPRを作成 • 依存関係をまとめたファイルDep.ktが変更されたかを Dangerを使って検知 ◦ 検知したらPRに特定のラベルをつける • GitHub Actionsで特定のラベルがついたときに発火する ワークフローを作成
◦ ライセンスリストを更新して自動でPRを立てるジョブを 作る
Dangerfile - 依存関係が更新されている場合はラベルをつける begin target_branch = github.branch_for_base.match(/release|develop/) is_dependencies_updated = git.modified_files.grep(/.*Dep.kt/).empty?
if target_branch && !is_dependencies_updated pr_number = github.pr_json["number"] auto_label.set(pr_number, "Update licenses", "#1d76db") end end
Dangerfile - 依存関係が更新されている場合はラベルをつける begin target_branch = github.branch_for_base.match(/release|develop/) is_dependencies_updated = git.modified_files.grep(/.*Dep.kt/).empty?
if target_branch && !is_dependencies_updated pr_number = github.pr_json["number"] auto_label.set(pr_number, "Update licenses", "#1d76db") end end
Dangerfile - 依存関係が更新されている場合はラベルをつける begin target_branch = github.branch_for_base.match(/release|develop/) is_dependencies_updated = git.modified_files.grep(/.*Dep.kt/).empty?
if target_branch && !is_dependencies_updated pr_number = github.pr_json["number"] auto_label.set(pr_number, "Update licenses", "#1d76db") end end
Dangerfile - 依存関係が更新されている場合はラベルをつける begin target_branch = github.branch_for_base.match(/release|develop/) is_dependencies_updated = git.modified_files.grep(/.*Dep.kt/).empty?
if target_branch && !is_dependencies_updated pr_number = github.pr_json["number"] auto_label.set(pr_number, "Update licenses", "#1d76db") end end
.github/workflow.yml - ラベルがついたら発火する name: Update license list on: pull_request: types:
- labeled
.github/workflow.yml - 特定のラベルのみジョブを実行する jobs: build: runs-on: ubuntu-latest if: github.event.label.name ==
'Update licenses' steps: - uses: actions/checkout@v2 with: ref: ${{ github.head_ref }} - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8
.github/workflow.yml - 特定のラベルのみジョブを実行する jobs: build: runs-on: ubuntu-latest if: github.event.label.name ==
'Update licenses' steps: - uses: actions/checkout@v2 with: ref: ${{ github.head_ref }} - name: set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8
.github/workflow.yml - ライセンス定義ファイルを更新する - name: Update license list run: |
# ライセンス定義ファイルの差分を更新 ./gradlew mergeReleaseLicenseList # 定義ファイルを元にjsonを更新 ./gradlew visualizeReleaseLicenseList
.github/workflow.yml - ライセンス定義ファイルを更新する - name: Update license list run: |
# ライセンス定義ファイルの差分を更新 ./gradlew mergeReleaseLicenseList # 定義ファイルを元にjsonを更新 ./gradlew visualizeReleaseLicenseList
.github/workflow.yml - ライセンス定義ファイルを更新する - name: Update license list run: |
# ライセンス定義ファイルの差分を更新 ./gradlew mergeReleaseLicenseList # 定義ファイルを元にjsonを更新 ./gradlew visualizeReleaseLicenseList
.github/workflow.yml - 自動でPRを作成する - name: Create Pull Request uses: peter-evans/create-pull-request@v2
with: token: ${{ secrets.REPO_ACCESS_TOKEN }} commit-message: Updated license by license-list-plugin committer: syarihu <
[email protected]
> author: syarihu <
[email protected]
> title: Update license body: | This PR has been auto-generated branch: update-license-list branch-suffix: short-commit-hash
.github/workflow.yml - 自動でPRを作成する - name: Create Pull Request uses: peter-evans/create-pull-request@v2
with: token: ${{ secrets.REPO_ACCESS_TOKEN }} commit-message: Updated license by license-list-plugin committer: syarihu <
[email protected]
> author: syarihu <
[email protected]
> title: Update license body: | This PR has been auto-generated branch: update-license-list branch-suffix: short-commit-hash
.github/workflow.yml - 自動でPRを作成する - name: Create Pull Request uses: peter-evans/create-pull-request@v2
with: token: ${{ secrets.REPO_ACCESS_TOKEN }} commit-message: Updated license by license-list-plugin committer: syarihu <
[email protected]
> author: syarihu <
[email protected]
> title: Update license body: | This PR has been auto-generated branch: update-license-list branch-suffix: short-commit-hash
None
None
ライセンス定義ファイルを自動で更新するPRを作成 • これで依存関係を更新したときに自動でPRが作成される ようになったので、ライセンスの更新忘れも無くなり人間 の手間もほとんど無くなった • コミット時に自動でDeployGateにアップロードしてPRに QRコードがコメントされるようにしているので、差分に問題 がない場合はこれで動作確認をするだけでよくなった。最 高!
まとめ • license-list-pluginを使うと定義ファイルの管理が簡単に なる • json出力すればアプリに合ったテーマのOSSライセンス 画面を構築可能 • ライセンス定義ファイルを自動更新、自動PRすれば手間 も更新忘れも無くなる
参考資料 • jmatsu/license-list-plugin: Gradle plugin to manage licenses of your
Android app's dependencies. ◦ https://github.com/jmatsu/license-list-plugin • Including Open Source Notices ◦ https://developers.google.com/android/guides/opensource • cookpad/LicenseToolsPlugin: Gradle plugin to check library licenses and generate license pages for Android ◦ https://github.com/cookpad/LicenseToolsPlugin
ありがとうございました