JavaScript Primer(jsprimer)はOpen Collectiveを通じて資金を募っています。 この資金は、jsprimerへContributeしてくれた方々に対して、費用を支払うために使われます。
このガイドでは、jsprimerへのContributeした場合の費用をOpen Collectiveで請求する方法について説明します。
jsprimerへのContributeしたタスクに対してPointを設定し、そのPointに基づいて金額を計算します。
作業量に対する基準としてフィボナッチ数列のPointを設定する。 Pointの決定は、jsprimerのProject Memberが行う。
Point | Description |
---|---|
0 | 些細な変更 |
1 | 2 よりは簡単 |
2 | 大体1日分やると終わる想定 |
3 | 2 よりは難しい |
5 | かなり難しい |
8 | 難易度がとても高いので、できる人は限られる |
Issueが適切に分割されていれば、5や8はほとんど出てこない想定です。 5以降はブレが大きいので、参考程度のPointとして扱います。
📝 元ネタはLinearのEstimates – Linear Docs
Pointはやや主観的になってしまうが、既存のIssueを比較してどの程度のPointになるかをProject Memberが判断する。
- Point 1:
- Point 2:
- feat(ecmascript): Stage 2.7を追加 by azu · Pull Request #1743 · asciidwango/js-primer
- 文章自体はほとんどないが、多少調べる必要がある
- mocha を
node:test
に変更する by windchime-yk · Pull Request #1737 · asciidwango/js-primer- 1 つのセクションを書き直すような変更
- feat(map-and-set):
Map.groupBy
静的メソッドの追加 by azu · Pull Request #1751 · asciidwango/js-primer- 1 つのセクションを追加する変更
- feat: ErrorCause への対応 by himanoa · Pull Request #1732 · asciidwango/js-primer
- 1 つのセクションを追加する変更
- feat(ecmascript): Stage 2.7を追加 by azu · Pull Request #1743 · asciidwango/js-primer
- Point 3:
- Point 5:
- fix(nodecli): commander パッケージ を
node:util
のparseArg
に変更 by azu · Pull Request #1757 · asciidwango/js-primer- 章全体にまたがる変更
- かなり影響範囲が広く、書き直しも多い変更
- fix(nodecli): commander パッケージ を
金額は次のツールで計算できる。
$ node ./tools/calc-contribute-expense.mjs --point <number>
e.g. 合計のPointが2の場合
$ node ./tools/calc-contribute-expense.mjs --point 2
jsprimerの年間更新コストは、だいたい30日分の作業量になるように設定している。
Pointに直すと、年間の作業量のPointは60 Point程度になる。
年間の予算はOpen Collectiveの"推定年間予算(Estimated annual budget)"を参照する
1 Pointあたりの金額は次の計算式で求める。
const yearlyEstimatedBudget = _; // Open Collectiveの推定年間予算($ドル)
const yearlyWorkloadPoints = 60; // 1年間のPoints
const onePointCost = yearlyEstimatedBudget / yearlyWorkloadPoints;
console.log({ onePointCost }); // => 1 Pointあたりの金額($ドル)
const taskPoint = _; /// タスクのPoint
const cost = onePointCost * taskPoint;
console.log({ cost }); // => タスクの金額($ドル)
Example: 推定年間予算が $2,367 で、タスクが 2 Points の場合
const yearlyEstimatedBudget = 2_367; // Open Collectiveの推定年間予算($ドル)
const yearlyWorkloadPoints = 60; // 1年間のPoints
const onePointCost = yearlyEstimatedBudget / yearlyWorkloadPoints;
console.log({ onePointCost }); // => $39.45
const costOfPoint = 2; /// 2 Points
const cost = onePointCost * costOfPoint;
console.log({ cost }); // => $78.9
作業が終わったタイミングで計算して、その月のコストをまとめて申請する。 Open Collectiveからの支払いは2週間ごとに行われるため、月ごとにまとめて請求する。
計算式に基づいた金額をOpen Collectiveで請求する手順
- https://opencollective.com/jsprimer/expenses/new にアクセス
- "Invoice"を選択
- 請求者の情報と支払い先(銀行口座またはPayPal)を入力
- "Next"をクリック
- 請求書の画面で "Expense title" に
Development and maintenance (YYYY-DD)
と入力 - 請求書の画面で "Set invoice details"の "Description" に
Contribute to jsprimer (YYYY-DD)
と入力 - 請求書の画面で "Date" には 今日の日付を入力
- 請求書の画面で "Amount" は USD を選択し、計算した金額を入力
- 自動的にExpense Currencyで選択したJPYに変換された金額が表示されます
- "Next"をクリック
- Add notesに次の内容を入力
Contribute to jsprimer
- Commits: https://github.com/asciidwango/js-primer/commits?author=<GitHubアカウント>&since=月の初めの日&until=月の最終日
例
Contribute to jsprimer
- Commits: https://github.com/asciidwango/js-primer/commits?author=azu&since=2024-08-01&until=2024-08-31
- 確認して "Submit expense"をクリック
あとは管理者がApproveするまで待つと、その後Open Collectiveから支払われます。
Note:
- 入力した個人情報は公開されません
- 公開されるのは、Expense titleとDescriptionとOpen Collectiveのアカウント情報のみです