= Treefitのパッケージング
: author
須藤功平
: institution
株式会社クリアコード
: content-source
Bio"Pack"athon 2022 #4
: date
2022-04-13
: allotted-time
20m
: start-time
2022-04-13T16:30:00+09:00
: end-time
2022-04-13T16:50:00+09:00
: theme
clear-code
= 自己紹介
* 須藤功平
* 株式会社クリアコード代表取締役
* フリーソフトウェア開発者
* TreefitのR版・Python版パッケージの\n
開発者・メンテナー
# image
# src = images/github-public-contributions-ranking-kou-2022-03.png
# relative-width = 50
# align = right
# vertical-align = top
# relative-margin-right = -10
# relative-margin-bottom = 0.5
# caption = https://github.com/gayanvoice/top-github-users/blob/main/markdown/public_contributions/japan.md
# caption-font-size = 1
= バックグラウンド
* バイオ関連のバックグラウンドはない
* PythonとRは日常使いしていない
* Pythonのパッケージを作ったことはあった
* Rのパッケージは作ったことがなかった
* C・C++・Rubyをよく使うしパッケージも作っている
* データ関連ではApache Arrowの現PMC chair
= 今日の話
* Python・Rのパッケージングの実例紹介
* どんなツールを使っているか
* どうメンテナンスしているか
* よさそう!と思ったところは参考にしてね
= Treefitの立ち位置
* 応用ではなく基盤となる機能を提供
* 細胞分化の軌跡推定という応用を想定しているが\n
木っぽさの指標を与えるというのは汎用的
* 細胞分化の軌跡推定に限らず使って欲しい
= Treefitのパッケージの方針
* できるだけ依存関係を少なく
* 依存関係が多いほど他のパッケージと競合しやすい
* 導入の障壁を減らしてユーザーを増やしたい
* メンテナンスコストも上がる
* 依存するパッケージはデファクトのものを
* 著名パッケージと統合されていると使いやすい\n
例:PythonでのNumPy
= Treefitの研究プロセス
(1) アイディアを実験する
(2) 実験結果を元にディスカッション\n
(('note:よい成果がでるまで1., 2.を繰り返す'))
(3) よい成果がでたアイディアをリリース\n
(('note:この1年で次のリリースをできるかも?'))
= Treefitの研究チーム
* 早水先生・鈴木さん・石井さん
* 生物・数学などに詳しい人たち
* 担当:アルゴリズム考案(1.と2.)
* 須藤
* プログラミングとかパッケージング一般に詳しい人
* 担当:パッケージング(3.)
= コードベース
(1) 実験用コードベース
* 非公開:Jupyter Notebookベース
* 必要なら便利なものはバンバン使う
* Haskellを使っていたこともある
(2) リリース用コードベース
* 公開:(())
* 前述の方針で1.を元に実装
= Treefitパッケージの実装
* アルゴリズムが洗練されているので\n
実装は非常にコンパクト\n
(('note:(コメントを抜くと500行程度)'))
* R版の依存パッケージ
* 演算:igraph, pracma
* 可視化:ggplot2, patchwork
= Treefitのドキュメント
* ユーザー獲得のために重視!
* 全体のデザイン:今どきっぽく
* チュートリアル:
* 図とサンプルコードをたっぷり
* リファレンス:網羅
= ドキュメントのデザイン:R版
# image
# src = images/treefit-r-pkgdown.png
# relative-width = 30
# align = right
# vertical-align = top
# relative-margin-right = -10
(('tag:center'))
((*pkgdown*))
* なんかシュッとしていてキレイ
* いろんなRのパッケージで使われている
* vignetteやRoxygenも含めて\n
サイト一式を生成できる
= ドキュメントのデザイン:Python版
# image
# src = images/treefit-python-sphinx.png
# relative-width = 30
# align = right
# vertical-align = top
# relative-margin-right = -10
(('tag:center'))
((*Sphinx*))
* Read the Docsテーマ
* よく見るやつ
* 今ならPyData Sphinxテーマを使う
* 追加文書やdocstringも含めて\n
サイト一式を生成できる
= チュートリアル
# image
# src = images/treefit-r-tutorial.png
# relative-width = 30
# align = right
# vertical-align = top
# relative-margin-right = -10
* 図をたっぷり
* 研究者が論文を読むときは\n
まずざっと図を眺める
* サンプルコードをたっぷり
* リファレンスを見なくても使えるくらい
= リファレンス
# image
# src = images/treefit-r-reference.png
# relative-width = 30
# align = right
# vertical-align = top
# relative-margin-right = -10
* 最低限:網羅する
* どんな公開APIがあるかわかる
* 使用例と実行結果をつける
* 文章での説明よりピンとくる
= ドキュメントのデプロイ
* GitHub Pages
* 各プロジェクトごとにWebページを管理できる
* github.com/hayamizu-lab/treefit-r/ →\n
hayamizu-lab.github.io/treefit-r/
* github.com/hayamizu-lab/treefit-python/ →\n
hayamizu-lab.github.io/treefit-python/
* タグを打ったらCIでデプロイ
* 未設定\n
(('note:難しくないのでメンテナンスコストを減らすためにやったほうがよい'))
= Treefitのテスト
* CIを整備する
* GitHub Actionsを使用
* Linux/macOS/Windowsでテストできるのがうれしい
* CRANへのsubmitには複数環境でのテストが必須!
* Winbuilder/R-hubとの使い分け
* CRANへのsubmit前のチェックだけ
* 通常はGitHub ActionsのCIでチェック
= Treefitのパッケージ登録
* Rは難しい
* CRANへのsubmit後にレビューがあるから
* Pythonは難しくない
* (({twine upload}))ですぐにPyPIに反映
= CRANへのパッケージ登録・更新
* (('note:(())'))か\n
(('note:(())'))を読む
* 忘れるので毎回読んでいる
* devtools::release()とかdevtools::*()を\n
使ってsubmit
* ↑も忘れるのでRakefileに書いてある\n
(('note:Rで書くべきなんだろうけど。。。'))
= Treefitのメンテナンス
* CRANでのパッケージの維持
* GitHubでのフィードバック対応
= CRANでのパッケージの維持
* パッケージが削除されることがある!
* 公開してから2年で2回あった
* 原因:関連ライブラリーの非互換な更新
* 原因:CRANのテスト環境の更新
* 削除される前にCRANから連絡がある
* 少なくとも1回目はあった
* 2回目は気づかなかった\n
(('note:もしかしたら連絡がなかったのかも。。。'))
= CRANでパッケージが削除されたら
* 問題を修正してバージョンアップ
* 1回目のsubmitよりは早く処理してもらえる\n
(('note:気がする'))
* 2回目以降は差分を中心にレビューしているから?
* CIがあるとマジ助かる!
* 数ヶ月単位で実装を触らない期間があるから
= GitHubでのフィードバック対応
* (('note:(())'))
* 露崎さんが問題を報告してくれた!
* pull requestへの誘導とレビュー・マージ
* CRANへのsubmit
* みんなも使って気になることがあったら\n
報告してね!
= 今日の話
* Python・Rのパッケージングの実例紹介
* どんなツールを使っているか
* どうメンテナンスしているか
* よさそう!と思ったところは参考にしてね
* 経験を積みたいならTreefitの研究・開発に\n
参加するといいかも!