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