Rabbit Slide Show

Treefitのパッケージング

2022-04-13

Description

細胞分化の軌跡推定に関するソフトウェアTreefitのパッケージまわりについ て紹介します。

Text

Page: 1

Treefitのパッケージング
須藤功平
株式会社クリアコード
Bio"Pack"athon 2022 #4
2022-04-13
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 2

自己紹介
✓ 須藤功平
✓ 株式会社クリアコード代表取締役
https://github.com/gayanvoice/top-github-users/blob/main/markdown/public_contributions/japan.md
✓ フリーソフトウェア開発者
✓ TreefitのR版・Python版パッケージの
開発者・メンテナー
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 3

バックグラウンド
✓ バイオ関連のバックグラウンドはない
✓ PythonとRは日常使いしていない
✓ Pythonのパッケージを作ったことはあった
✓ Rのパッケージは作ったことがなかった
✓ C・C++・Rubyをよく使うしパッケージも作っている
✓ データ関連ではApache Arrowの現PMC chair
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 4

今日の話
✓ Python・Rのパッケージングの実例紹介
✓ どんなツールを使っているか
✓ どうメンテナンスしているか
✓ よさそう!と思ったところは参考にしてね
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 5

Treefitの立ち位置
✓ 応用ではなく基盤となる機能を提供
✓ 細胞分化の軌跡推定という応用を想定しているが
木っぽさの指標を与えるというのは汎用的
✓ 細胞分化の軌跡推定に限らず使って欲しい
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 6

Treefitのパッケージの方針
✓ できるだけ依存関係を少なく
✓ 依存関係が多いほど他のパッケージと競合しやすい
✓ 導入の障壁を減らしてユーザーを増やしたい
✓ メンテナンスコストも上がる
✓ 依存するパッケージはデファクトのものを
✓ 著名パッケージと統合されていると使いやすい
例:PythonでのNumPy
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 7

Treefitの研究プロセス
1. アイディアを実験する
2. 実験結果を元にディスカッション
よい成果がでるまで1., 2.を繰り返す
3. よい成果がでたアイディアをリリース
この1年で次のリリースをできるかも?
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 8

Treefitの研究チーム
✓ 早水先生・鈴木さん・石井さん
✓ 生物・数学などに詳しい人たち
✓ 担当:アルゴリズム考案(1.と2.)
✓ 須藤
✓ プログラミングとかパッケージング一般に詳しい人
✓ 担当:パッケージング(3.)
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 9

コードベース
1. 実験用コードベース
✓ 非公開:Jupyter Notebookベース
✓ 必要なら便利なものはバンバン使う
✓ Haskellを使っていたこともある
2. リリース用コードベース
✓ 公開:https://github.com/hayamizu-lab/
✓ 前述の方針で1.を元に実装
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 10

Treefitパッケージの実装
✓ アルゴリズムが洗練されているので
実装は非常にコンパクト
(コメントを抜くと500行程度)
✓ R版の依存パッケージ
✓ 演算:igraph, pracma
✓ 可視化:ggplot2, patchwork
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 11

Treefitのドキュメント
✓ ユーザー獲得のために重視!
✓ 全体のデザイン:今どきっぽく
✓ チュートリアル:
✓ 図とサンプルコードをたっぷり
✓ リファレンス:網羅
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 12

ドキュメントのデザイン:R版
pkgdown
✓ なんかシュッとしていてキレイ
✓ いろんなRのパッケージで使われている
✓ vignetteやRoxygenも含めて
サイト一式を生成できる
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 13

ドキュメントのデザイン:Python版
Sphinx
✓ Read the Docsテーマ
✓ よく見るやつ
✓ 今ならPyData Sphinxテーマを使う
✓ 追加文書やdocstringも含めて
サイト一式を生成できる
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 14

チュートリアル
✓ 図をたっぷり
✓ 研究者が論文を読むときは
まずざっと図を眺める
✓ サンプルコードをたっぷり
✓ リファレンスを見なくても使えるくらい
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 15

リファレンス
✓ 最低限:網羅する
✓ どんな公開APIがあるかわかる
✓ 使用例と実行結果をつける
✓ 文章での説明よりピンとくる
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 16

ドキュメントのデプロイ
✓ GitHub Pages
✓ 各プロジェクトごとにWebページを管理できる
✓ github.com/hayamizu-lab/treefit-r/ →
hayamizu-lab.github.io/treefit-r/
✓ github.com/hayamizu-lab/treefit-python/ →
hayamizu-lab.github.io/treefit-python/
✓ タグを打ったらCIでデプロイ
✓ 未設定
難しくないのでメンテナンスコストを減らすためにやったほうがよい
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 17

Treefitのテスト
✓ CIを整備する
✓ GitHub Actionsを使用
✓ Linux/macOS/Windowsでテストできるのがうれしい
✓ CRANへのsubmitには複数環境でのテストが必須!
✓ Winbuilder/R-hubとの使い分け
✓ CRANへのsubmit前のチェックだけ
✓ 通常はGitHub ActionsのCIでチェック
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 18

Treefitのパッケージ登録
✓ Rは難しい
✓ CRANへのsubmit後にレビューがあるから
✓ Pythonは難しくない
✓ twine uploadですぐにPyPIに反映
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 19

CRANへのパッケージ登録・更新
✓ https://blog.atusy.net/2019/06/28/cran-submission/ か
https://cran.r-project.org/web/packages/policies.html を読む
✓ 忘れるので毎回読んでいる
✓ devtools::release()とかdevtools::*()を
使ってsubmit
✓ ↑も忘れるのでRakefileに書いてある
Rで書くべきなんだろうけど。。。
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 20

Treefitのメンテナンス
✓ CRANでのパッケージの維持
✓ GitHubでのフィードバック対応
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 21

CRANでのパッケージの維持
✓ パッケージが削除されることがある!
✓ 公開してから2年で2回あった
✓ 原因:関連ライブラリーの非互換な更新
✓ 原因:CRANのテスト環境の更新
✓ 削除される前にCRANから連絡がある
✓ 少なくとも1回目はあった
✓ 2回目は気づかなかった
もしかしたら連絡がなかったのかも。。。
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 22

CRANでパッケージが削除されたら
✓ 問題を修正してバージョンアップ
✓ 1回目のsubmitよりは早く処理してもらえる
気がする
✓ 2回目以降は差分を中心にレビューしているから?
✓ CIがあるとマジ助かる!
✓ 数ヶ月単位で実装を触らない期間があるから
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 23

GitHubでのフィードバック対応
✓ https://github.com/hayamizu-lab/treefit-r/issues/1
✓ 露崎さんが問題を報告してくれた!
✓ pull requestへの誘導とレビュー・マージ
✓ CRANへのsubmit
✓ みんなも使って気になることがあったら
報告してね!
Treefitのパッケージング
Powered by Rabbit 3.0.2

Page: 24

今日の話
✓ Python・Rのパッケージングの実例紹介
✓ どんなツールを使っているか
✓ どうメンテナンスしているか
✓ よさそう!と思ったところは参考にしてね
✓ 経験を積みたいならTreefitの研究・開発に
参加するといいかも!
Treefitのパッケージング
Powered by Rabbit 3.0.2

Other slides

Apache Arrow Apache Arrow
2018-12-08
Apache Arrow Apache Arrow
2018-11-17
Apache Arrow Apache Arrow
2017-06-13
Apache Arrow Apache Arrow
2017-05-28
Mroonga! Mroonga!
2015-10-30