2025年のオープンソース活動の振り返りとGitHub Sponsorsでの収入をまとめた記事です。

今年はtextlintJSer.infoにMCPサーバーを実装しました。 また、JavaScript PrimerをES2025に対応し、secretlintに新しい検出ルールを追加しました。 AI連携とECMAScript最新仕様への対応が中心の年でした。 TSKaigi 2025とYAPC::Fukuoka 2025では、継続的なメンテナンスについて発表しました。

サプライチェーン攻撃対策についてはZennに記事をまとめました。

今までの振り返り

オープンソース活動の種類

自分のオープンソース活動の種類として、次のようなものがあります。

オープンソース関係の収入の種類

自分のオープンソース関係の収入は、ほぼGitHub Sponsors経由となっています。

GitHub SponsorsではMonthlyとOne-Timeでのサポートができます。 自分の場合は、GitHub SponsorsのMonthlyでの支援がベースとなっています。

また、JavaScript PrimerのOpen Collectiveからの収入もあります。

今年のjsprimer Contributorへの支払いもOpen Collectiveの予算から行なっています。

オープンソース関係の収入の合計金額

2025年のGitHub Sponsorsの収入は約229万円となりました。

2025年のオープンソース関係の収入

月毎のGitHub Sponsorsの収入は次のようになります。

Date 金額(円)
2025/01 365,934
2025/02 194,231
2025/03 165,227
2025/04 164,772
2025/05 175,487
2025/06 160,140
2025/07 176,382
2025/08 172,587
2025/09 162,930
2025/10 164,611
2025/11 169,251
2025/12 216,958

1月が多いのは、Thanks OSS Award presented by Toyokumoの2024年度(7月〜12月)分が入っているためです。 12月が多いのはスポンサーのアカウント移行に伴う一時的な重複によるものです。

継続的なサポートをしてくれている人の数

GitHub Sponsorsで継続的にサポートしてくれている人の推移は次のとおりです。

GitHub Sponsors Count

この人数は現在も継続している人数だけを出しています。

Monthly Estimated Income(単位は$)は次のようになっています。

GitHub Sponsors Monthly Estimated Income

GitHub Sponsorsは、2019年10月から始めています。 今までのGitHub Sponsorsでの収入の推移は、次のとおりです。

GitHub Sponsorsでの収入の推移

GitHub Sponsorsを始めた経緯については、次の記事にまとめてあります。

GitHub Sponsorsに感謝

GitHub Sponsors でご支援いただきありがとうございます!

Sponsor @azu on GitHub Sponsors

Contributions/Issues/PR

  • Contributions: 11082
  • 作成したリポジトリ: 40
  • 作成したIssue: 99
  • 作成したPull Request: 371

今年は検証用のリポジトリをたくさん作りました。 pnpmやPanda CSS、Next.js、React Ariaなどのバグ再現リポジトリを作成して、Issueを報告していました。

textlint

今年のtextlintは結構大きな変更がありました。

textlint v15

6月にtextlint v15.0.0をリリースしました。

v14で非推奨にしていたTextLintEngineなどの古いAPIを削除して、createLinter() への移行を完了しました。 Node.js 20以上が必須となり、コードベースがかなり整理されました。

MCPサーバー

MCP(Model Context Protocol)サーバーをサポートしました。 v14.8.0で --mcp フラグを追加して、textlintをMCPサーバーとして起動できるようにしました。

AI Agentから直接textlintを呼び出せるようになりました。 テキストのチェックと修正を自動実行できるので、かなり便利になりました。

textlint-rule-preset-ai-writing

新しいプリセット@textlint-ja/textlint-rule-preset-ai-writingも作りました。

AI生成テキスト特有のパターンを検出するルール集で、機械的なリスト形式、誇張表現、コロン継続などを検出します。 AIがAI生成文章をチェックするというフィードバックループが実現できて面白いです。

インフラ改善

パッケージマネージャーをnpmからpnpmに移行して、テストフレームワークもMochaからVitestに変更しました。 CI時間が21分5秒から7分20秒に短縮されました。

npm Trusted Publishing(OIDC)対応も完了して、トークンレスでnpmへのリリースができるようになりました。

JavaScript Primer

今年のJavaScript Primerは、ES2025の対応がメインでした。

v7.0.0

8月にv7.0.0をリリースして、ECMAScript 2025に完全対応しました。

新章「イテレータとジェネレータ」を追加して、Iterator Helpersを詳細に解説しています。

  • Iterator.from()
  • .map().filter().take().drop().flatMap()

Set Methodsの解説も追加しました。intersection()union()difference()など7つのメソッドが使えるようになったので、Setの章を更新しています。

他にも RegExp.escape() やImport Attributesの解説を追加しました。

Contributing Expenses Policy

今年はContributing Expenses Policyを本格的に運用し始めました。

ES2025対応でコントリビュートしてくれた人には、Open Collective経由で報酬を支払うか、別のOSSプロジェクトへ寄付する仕組みにしています。 年間更新費用は約68万円と試算していて、これをどう継続的に回していくかが課題です。

secretlint

今年のsecretlintは、新しい検出ルールの追加とメジャーアップデートが中心でした。

v10とv11

6月にv10.0.0、8月にv11.0.0をリリースしました。

v10ではデフォルトでシークレットをマスク表示するようにしました。 AIエージェントがstdoutを読むケースが増えてきたため、デフォルトをマスク表示に変更しました(#1067)。

新しい検出ルール

v11で2つの新ルールを推奨プリセットに追加しました。

v11.1.0では @secretlint/secretlint-rule-patternfilePathGlobs オプションを追加しました。 ファイルパスのglob指定とコンテンツ検索を組み合わせられるようになっています。

インフラ改善

textlintと同様に、Yarn BerryからpnpmへのmigrationとMochaからVitestへのテストフレームワーク移行を完了しました。 npm Trusted Publishing対応も完了しています。

JSer.info

JSer.infoは今年で14周年を迎えました。

大体の週刊更新は継続していて、1月9日の#721号から12月末まで約40本の週刊記事を配信しました。(今年は結構ゆっくりペースでした)

来月で15周年です。

MCPサーバー

5月にJSer.info のMCPサーバーを公開しました。

jser_search_itemsjser_search_postsjser_weeksなどのツールを用意して、AIエージェントがJSer.infoのデータへアクセスできるようになりました。 npmパッケージ@jser/mcpとしても配布しています。

これは、JSer.infoの更新フローが結構楽になったので、今後も継続的にメンテナンスしていきたいです。

TSKaigi 2025

5月のTSKaigi 2025で「技術書をソフトウェア開発する - jsprimerの10年から学ぶ継続的メンテナンスの技術」という発表をしました。

jsprimerを10年間メンテナンスし続けてきた方法を話しました。 技術書もソフトウェアと同じように、CIでテストしたり、依存関係を管理したり、リリースサイクルを回したりすることで継続できるという内容です。

YAPC::Fukuoka 2025

11月のYAPC::Fukuoka 2025で「読む技術・書く技術・伝える技術 - 15年続けて分かった持続可能なオープンソース開発」という発表をしました。

JSer.info(14年)、textlint(11年)、JavaScript Primer(9年)という長期プロジェクトを題材に、バーンアウトを防ぐ開発手法を話しました。 メインのテーマは「心理的負荷を技術的依存に転換する」ということです。

作ったリポジトリ

今年作ったリポジトリは40個です。

ツール・ライブラリ

セキュリティ関連

Next.jsのSecurity Issueやサプライチェーン攻撃について調べることが多かったです。

バグ再現・検証リポジトリ

今年は検証用のリポジトリをたくさん作りました。

pnpm関連:

Panda CSS関連:

Next.js関連:

React Aria関連:

その他:

その他の更新

サプライチェーン攻撃対策

今年はサプライチェーン攻撃対策についてZennに記事をまとめました。

2024年後半から2025年にかけてサプライチェーン攻撃が増えてきていて、実際に影響を受けるケースも増えてきました。 自分が実際にやっている対策を紹介します。

利用側での対策

自分は主に次のような対策をしています。

  • GitHub Actionsのfull-length commit SHA Pin: pinactを使ってハッシュ固定し、zizmorでセキュリティチェック
  • pnpm 10でのLifecycle scriptsを無効化: デフォルトでオフになったので、pnpm approve-scriptで必要なパッケージのみ許可。
  • renovatebotのminimumReleaseAge設定: パッケージ公開後すぐにはアップデートしない
  • ni.zshでSocket Firewallと連携: パッケージインストール時に自動でスキャン

tj-actions/changed-filesが侵害された件も調査していました。 SHA Pinをしていれば影響を受けなかったケースなので、SHA Pinは重要です。 git config --global core.hooksPathを使ってコミット時にデフォルトでpinactとzizmorを実行するようにしています。

他にも細かい話は多いですが、細かい個人プロジェクトは更新をしやすくするために設定を冪等にできるようにすることを心がけています。ちゃんとしたプロジェクトはちゃんとした設定をしています。

公開側での対策

textlint、secretlint、HonKitなどのプロジェクトでnpm Trusted Publishing(OIDC)対応を完了しました。 新規パッケージ公開時はazu/setup-npm-trusted-publishでOIDC設定をしています。 既存のnpmパッケージはnpm access set mfa=publishを実行するスクリプトで一括設定してtokenでpublishできないようにしました。そのため、publishできるnpm tokenは全部revokeしました。 ローカルではOIDC設定をほとんど自動化するスクリプトを作って回しています。 やり方が変わっていくので冪等に設定できるという点を意識して作っています。

secretlintでコミット時にシークレットをチェックし、ローカルには生tokenを置かずに1Passwordで管理しています。 GitHub Actionsのセキュリティチェックにはzizmoractionlintを使っています。

2025年を振り返って

振り返ると3つの傾向がありました。

1つ目はAI連携です。 textlintとJSer.infoへのMCPサーバー導入、AI生成テキスト検出ルール、confirm-pamによるAIエージェント安全機構と、複数プロジェクトでAI連携が進みました。 MCPはLSPと異なりエディタ拡張を作る必要がなく、ツール提供側がツールとして実装できるのが良い点です。 YAPCでも話しましたが、利用者にAI Agentが増えたことで、ツール側の責任範囲がシンプルになりました。

2つ目はセキュリティです。 secretlintの新検出ルール、ni.zshのサプライチェーン攻撃対策、npm Trusted Publishing対応などを行いました。 GitHub/npm側もクラシックトークン作成の無効化pull_request_targetのブランチ保護強化などbreaking changeな変更を入れています。 今年はセキュリティの基準が上がった年でした。

3つ目は継続的なメンテナンスです。 JavaScript Primer v7.0.0でES2025に対応し、日本語で最新JavaScript仕様を学べる環境を維持しています。 また、TSKaigi 2025YAPC::Fukuoka 2025で、継続的なメンテナンスについて発表しました。 「持続可能性を意識した設計」が今年もプロジェクト群を支え続けていますし、来年も引き続きやっていきたいです。

YAPCの発表資料を作っているときにも感じましたが、こういった振り返りを書いておくと後で役立つので便利です。書くのは簡単になったけど、その土台になるデータやコンテンツはちゃんとメンテナンスして積み上げておく必要があるなと改めて思いました。