今年のオープンソース活動振り返り @ 2021
2021年のオープンソース活動の振り返り記事です。
今までの振り返りの一覧です。
- 今年のオープンソース活動振り返り @ 2020 | Web Scratch
- 今年のOSS活動振り返り @ 2019 | Web Scratch
- 今年のOSS活動振り返り @ 2018 | Web Scratch
- 今年のOSS活動振り返り @ 2017 | Web Scratch
- 今年のOSS活動振り返り @ 2016 | Web Scratch
- 今年のOSS活動振り返り @ 2015 | Web Scratch
- 今年のOSS活動振り返り @ 2014 | Web Scratch
2021年のGitHubのPublicなContributionsは8000~9000ぐらいを推移していました。
Privateリポジトリも含めると大体1.5倍ぐらいなので、これは2020年と大体同じ比率なようです。
データの取得には次のツールを使いました。
Issue/PR
ちょっと減少傾向になってる。 Contributions見ても、深い緑が少ないので、新規に何か作り込むケースが少なかったのが要因な気はする。
作ったリポジトリ
- 2021: 85
- 2020: 111
- 2019: 81
- 2018: 69
- 2017: 95
リポジトリの作成数自体はそこまで大きく変わらず。
この記事でも紹介していたように、今まではちょっと違うタイプのプロジェクトをやることが増えたからかも。
作ったもの
何を作っていたのかを振り返る。
- jser/policy: JSer.info Policy notes
- JSer.info 10周年: JavaScript情報の集め方、書き方、まとめ方 - JSer.infoのためにあらためてJSer.infoのポリシーを明文化した
- azu/my-dashbling-example: my Dashbling snapshot
- 電子ペーパを使ったダッシュボードを設置して、そのサンプルコード
- 電子ペーパを使ったダッシュボードを設置した | Web Scratch
- このダッシュボードは普通に使える感じで作っておいて良かった
- 今は、カレンダー、GitHub Project、天気/湿度、JSer.infoの投稿ステータス、Memory Noteのメモを表示してる
- 記憶に残らないものをメモするためにMemory Noteという仕組みを書いた | Web Scratch
後、部屋に電子ペーパーを使った物理的なダッシュボード作ってあるので、
— azu (@azu_re) September 11, 2021
ダッシュボードにも表示してる。
これでだいぶ記憶のInbox置き場がはっきりしてきたhttps://t.co/EQQ4ce1Umo pic.twitter.com/P6mo9GIyEJ
- azu/textlint-ignore-example: .textlintignore example repository.
.textlintignore
が実装されたので、これのサンプルプロジェクト- textlint 11.9.0 .textlintignoreの無視ファイルをサポート | Web Scratch
- azu/server-timing-metadata: add metadata to server-timing and get from browser
- JSなどのリソースのレスポンスにメタデータを仕込みたいという需要があって
- JSファイル自体をレスポンス返す時にビルドするにはCDN Edgeみたいな仕組みが必要で大げさ
- HTTP Response Headerに何か仕込めて、それを実行するJSから参照できればいけるのではと思って実験したサンプル
Sever-Timing
には任意の文字列が仕込めるので、これをResource Timing APIで取得するという実験- https://twitter.com/azu_re/status/1376012655710724097
- azu/New-Year-holidays-jser-releases: 年末年始のリリースのデータ
- https://github.com/azu/New-Year-holidays-jser-releases
- 年末年始はリリースが減るので、JSer.infoの扱う記事数も減るなーと体感的にわかっててそれをデータ化したもの
- azu/express-lazy-router: Lazy loading for express router
- Expressのルーティングで数が多くなると読み込むファイルが増えて起動時間がかかるようになる
- クライアントサイドではLazy Loadingするのが普通なので、サーバサイドでも同じことがするのが良いのではと思って作った
- express + ts-nodev-dev利用時に、遅延ロードをして起動時間を早くするためのライブラリを書いた | Web Scratch
- 実際にかなり起動速度が改善するし、ファイル数でもルーティングはある程度ツリー構造になってるはずなのでスケールする
- azu/express-mongo-sanitize-reporter: Dry-Run mode for express-mongo-sanitize.
- fiznool/express-mongo-sanitize: Sanitize your express payload to prevent MongoDB operator injection.はmongo query injection(NoSQL Injection)のmongo特有の
$ne
などを弾くmiddleware - これのDryRunモードが欲しくて作って
- 作った後に
express-mongo-sanitize
自体にdryRun
モードを実装した - feat: add
onSanitize
anddryRun
option by azu · Pull Request #39 · fiznool/express-mongo-sanitize - その後、mongooseの公式の機能にsanitize filterが入った
- What’s New in Mongoose 6: The
sanitizeFilter
Option | www.thecodebarbarian.com
- fiznool/express-mongo-sanitize: Sanitize your express payload to prevent MongoDB operator injection.はmongo query injection(NoSQL Injection)のmongo特有の
- azu/express-session-cloudflare-kv: A cloudflare workers KV based express session store.
- Cloudlfare Workers KVでセッション管理したら面白いのではと思ってexpress-sessionの実装を書いた
- けど、KVは結果整合性なのでかんたんに壊れるのがわかった
- Durable Objectとかならいい気はする
- azu/shepherd-migration-example
- 大量のリポジトリに対してまとめてPRを出したい時に便利なshepherdのサンプル
- shepherdを使って複数のリポジトリに一括でPRを出してまとめてマイグレーションする | Web Scratch
- いつも自分のプロジェクトはある種のテンプレになってるので、これをまとめてマイグレーションするときとかに使ってる
- textlint-ja/textlint-rule-no-filler: 「ええと」「あの」「まあ」などのフィラー(つなぎ表現)を禁止するtextlintルール
- 「ええと」「あの」「まあ」みたいなつなぎ言葉はフィラーというのを知った
- 書き言葉にはいらない気がしたので、textlintのルールにした
- pkgdeps/update-github-actions-permissions: A CLI that update GitHub Actions’s
permissions
automatically- GitHub Actionsの
permissions
を自動で設定するツールを書いた | Web Scratch - GitHub Actionsに対する攻撃が増えてきたので、GitHub Actionsに対して
permissions
を指定するツールを書いた - 温かみのある手動での
permissions
管理をしている。公式でGitHub Appみたいな定義を提供してほしい - 関連してactionlintにuntrust inputのチェックのIssueを立てて実装してもらった
- Feature Request: checking for Untrusted input · Issue #19 · rhysd/actionlint
- GitHub Actionsの問題は使うユーザー数が圧倒的に増えたので、2022年には表面化すると思う
- GitHub Actionsの
- azu/github-actions-node-versions: Update node_versions to LTS versions in GitHub Actions.
- GitHub ActionsのNode.jsのversion matrixをまとめて更新するツール
- GitHub Actionsのnode-versionをまとめてアップデートするコマンドラインツールを書いた | Web Scratch
- 基本的に自分のプロジェクトはこういったツールを書いて自動的にマイグレーションが可能な状態にしたいので、ツール化してる
- こういう形にしておくと、結構古いプロジェクトをいじったときにも1分ぐらいである程度まともな水準でスタートできる
5年ぐらい前のパッケージいじるといつもこんな感じ
— azu (@azu_re) December 29, 2021
```
npx babel-upgrade --write
npx migrate-travis-ci-to-github-actions
npx @azu/mocha-migrate migrate-opts -file ./test/mocha.opts -type json -rm
```
- azu/delete-tweets: Twitterのアーカイブから削除候補のTweetsを抽出する補助ツールと削除するツール。
- azu/mytweets: Search your all tweets.
- 自分のTweetsをインクリメンタル検索できるサービス作成キット と Tweetsをまとめて削除するツールを書いた | Web Scratch
- Tweetsを検索するサービスとTweetsを削除するツール
- Twilogとか外部のサービス使うのもなんか微妙だなーと思って、自分のデータは自分で管理して検索できるようにした
- S3にデータをおいて、検索にはS3 Selectを使ってる
- 月0円で済むので便利。もうちょっと早く検索できるといいけど、他のに比べて遅いわけでもないので、良い感じ
- azu/puppeteer-block-private-ip-example: puppeteer example that block request to private ip like http://metadata
- Puppeteerとかのヘッドレスブラウザを使うサービスが増えている
- ページのスクショを撮ったり、UIを提供するようなサービスのスクショなど生成するようとの裏側にPuppeteerがいることが多い
- Container自体で分離しておくのはベースとして、任意のURLにリクエストを送れることが多くてSSRF(Server Side Request Forgery)の脆弱性をよく見かける
- スクショサービスだとさらに悪いのは、リクエスト結果をスクショという返しでレスポンスを取得できること
- 例えば、クラウドだと
http://169.254.169.254/latest/api/token
とかにリクエスト送るとインスタンスのCredentialが出てきたりする(ヘッダーが必要とかの緩和は増えてる) - スクショだとこれをCredentialをスクショとして撮れたりする
- これをブロックするのはDNS Redbindingに対応した対処が必要だったりかなり面倒くさい
- #341876 SSRF in Exchange leads to ROOT access in all instances
- #215105 SSRF vulnerability in gitlab.com via project import.
- Node.jsの
http.Agent
が利用できるならrequest-filtering-agentで対処できるようにした - けどPuppeteerは
http.Agent
対応してないので、Proxy使うとか面倒なやり方が必要 - それをどうにかしたくて、書いていたサンプル。READMEに書いてあるようにリクエスト自体は飛んでしまうので若干不完全
- azu/motion-key: A keyboard config app for your motion.
- 体の動きや音声入力でアプリケーションをハンズフリー操作したりプログラミングしたり文章を書いたりしてみる | Web Scratch
- 腕とか以外でアプリを操作するのにハマって、そのとき書いたアプリ
- 記事でも紹介してるけど、Talonはよくできていた
- azu/express-router-dependency-graph: A static code analysis tool that creates a dependency graph for express routing.
- expressのルーティング構造を静的に出力できるツールがなかったので書いた
- expressのルーティングを一覧する静的解析ツールを書いた | Web Scratch
- azu/watch-rss: Subscribe your watched GitHub Repository’s releases as RSS feeds on Inoreader
- GitHubのリリース情報をRSSでチェックしている
- RSSリーダに購読したいリポジトリのRSSを登録する作業は面倒だった
- 代わりにWatchしたリポジトリのリリースRSSを自動的にInoreaderに追加するツールを書いた
- GitHub ActionsでCronで回している。便利
- azu/github-sponsor-report: GitHub Sponsors report generator
- azu/github-sponsor-report-template: GitHub Sponsor Reporting page based GitHub Actions.
- GitHub Sponsorsの募集を始めてから2年が経ったので振り返る | Web Scratchでも紹介したGitHub Sponsorsのレポートページを生成するテンプレート
- 何人にサポートされているかを月毎にグラフ化してくれるツール
- こっちもGitHub Actionsで毎日自動更新されるようになってる
- secretlint/webextension: Detect secrets in your request/response using secretlint.
- 見ているサイト上に露出している機密情報(APIトークン、IPアドレスなど)を見つけるブラウザ拡張を作りました | Web Scratch
- Secretlintをブラウザ拡張にしたら面白そうと思って作ったもの
- 意図しない情報は意図しない形で露出してることが多くて、人間が目視で気づくのは難しいので開発者がよく使う拡張に統合してみたらいいのではというアイデアからきている
- Web Extension自体はManifest V2のまま書いてて、これはFirefoxがV3対応してないから
- ChromeのV3のService Worker実装も不安定だし、ドキュメントもほぼないし、ツールもないので、なんか難しすぎた
- azu/book-rss: Book RSS Feed generator.
- Google BooksのAPIを叩けば新書がわかるらしいということで、GitHub ActionsでRSSを作ってみた
- なんか古い本が何度も出てくる気がする
- GitHub ActionsでRSS生成シリーズ
- textlint/editor-script-template: @textlint/editor script template
- textlint/editor: textlint editor project.がある程度動いて、最終的にはtextlint worker scriptという形のものをインストールして利用できるようにした。
- このtextlint worker scriptを生成するためのテンプレート
- 今textlintでEditor向けの情報をもっと増やす仕組みを実装したり、RFC書いたりしてるので、興味あればコメントください
- RFC: textlint new message format · Discussion #833 · textlint/textlint
- RFC: Improve error location · Issue #835 · textlint/textlint
- azu/memory-note: Fast memory note on CDN edge. Cloudflare Workers KV/GitHub Projects as backend.
- Memory Noteというメモの仕組みを書いた
- モチベーションとか使い方は次の記事で紹介してる
- 記憶に残らないものをメモするためにMemory Noteという仕組みを書いた | Web Scratch
- 簡単なメモは手じゃなくて口で書いてることの方が多い
- メモは簡単にできるようにすればするほど、より安心して忘れることが簡単になる
- 心理的な負担を減らすツールというのが近いかもしれない。でも実際に手で書くよりこっちの方が早い
- VUI(Voice User Interface)はなんかもっと進化が必要だなーと思った
- 入力後に、ありがと みたいな感じでちゃんと終了を扱えるようにしたい
- jser/watch-list: A collection of items that are explained in JSer.info.
- JSer.info Watch List
- JSer.infoで紹介した記事をベースにした、参照してるサイトの一覧リスト
- これは実際に生きているリソースが集まるので、どのサイト見ればいいかがわかって良いと思う
- https://github.com/jser/dataset のユースケース
- azu/markdown-function: Markdown builder functions.
- Markdownのリンクとかを作るUtility,
- 文字列結合で作るとエスケープが必要なのが面倒だなーと思って作った
- azu/book-review: 本を読んだ感想を書くブログです。
- 本は記録自体はmumemoのスクショベースでやってることが多い
- スクリーンショットドリブンのメモアプリ mumemo を作った | Web Scratch
- それとは別に読書の記録を書いて公開する場所、もっと簡単にしたいなーと思った。
- HubMemoみたいにIssueに書いて、それをまとめたものをGitHub Releasesに公開すればブログになるのではと思って作った仕組み
- GitHub 検索できるし、悪くない気がする
- 最初は、JSer.infoみたいなものをGitHubだけで完結する仕組みを作ってみようとして、その題材に読書の記録を選んだ
- 情報サイトみたいなやつはやっぱりフレームワークがあった方がやる人がもっと増えるし、続けやすいと思ってそのフレームを作ってみようとしたやつ
- ある程度はうまくいくけど、ちょっと尖ってるかもなーとか思った
- 興味ある人は、Twitterとかで聞いてください
- textlint-rule/textlint-rule-no-duplicate-abbr: textlint rule that avoid adding duplicated suffix word for Acronyms and Abbreviations.
- 「TCPプロトコル」や「VRリアリティ」などの略語に続く単語の意味が重複してる文章を検知するtextlintルールを書いた | Web Scratch
- 英語の略語の後に同じ意味の日本語を書いてしまうのを検知するルール
- azu/visualize-outline-topics: Visualize outline’s topics.
- サンプル: Visualize Outline Topics
- アウトライン同士の依存関係を可視化するツールを書いた
- 長い文章だと自分が何を書いてるかを把握できなくなる現象が発生するので、それをどうやって可視化するかを考えていた
- 記事を台形に書くというメタファーを考えていて、これを扱うツールかもしれない
- もうちょっと整理して記事に考えをまとめておきたい
- azu/uni-clipboard: Universal Clipboard API
- Cloudflare Workersを使ってクリップボードの共有をするサービス/API
- 共有と追っても、テキストを書き込んで、1分間だけ読み取れるAPIを作ってるだけ
- けど、Cloudflare WorkerとKVのユースケースとしてもハマってる気がする
- PushBulletを使ってたけど、それに代わるものがなかったので作った
- macはショートカット/app/Aflred、iOSはショートカットで読み書きできる
- 単純なAPIだけど、単純にかなり便利ではある
- macでiOSと同じショートカットが使えるようになったので、こういうシンプルなAPIはクロスプラットフォームでも実用性が出てきた
- シンプルなAPIをCloudflare WorkersとかLambdaみたいなもので作って、フロント部分はショートカットとかAflredのノーコードに近い感じで使うというスタイル
- textlint-rule/textlint-rule-gramma: textlint rule for gramma/langulagetools.
- textlintからLanguageToolを使うルール
- ローカルのLanguageToolを動かしてチェックするので、外部にテキストは送らなくていい
- textlint editor - ブラウザでも動くPrivacy Firstの文章校正ツールを作る話
- portとかの依存が若干こなれてないけど、textlint editor + textlint-rule-grammaでだいぶGrammarlyっぽくなる
- azu/github-search-rss: GitHub Search Results as RSS Feeds via GitHub Actions.
- GitHubの検索結果をRSSにするGitHub Actions
- GitHubでRSSを扱うシリーズ
- azu/mic-mutebar: Tiny GUI app that show microphone status
- PC/macOSのマイクがミュート状態か入力中かを表示するアプリを書いた | Web Scratch
- Touchbarがなくなったので、代わりにマイクの状態を常時表示するアプリ
- スリープ復帰とかが不安定なのでPR待ってます
- Swift/ObjCだとやたら難しいframework使う必要があって、Webの技術って便利だなーとか思った
- Swiftの残骸: azu/MuteBar_swift
- azu/github-sponsors-tax: GitHub Sponsorsの確定申告手順
- 大抵の人は、GitHub Sponsorsの収入は雑所得 or 事業所得 になると思うので、確定申告の方法を書いたドキュメント
- 自分もこの方法で申請した
- GitHub Sponsorsの募集を始めてから2年が経ったので振り返る | Web Scratch
- azu/company-introduction-jp: 日本の会社紹介スライドのまとめです。
- 日本の会社紹介スライドのまとめ
- spreadsheet: https://docs.google.com/spreadsheets/d/1y1pqQhBIV_uGCp-AzxSQwLDOV4v_tIPobnQJmFMJVDc/edit#gid=0
- メンテナーも募集しています(と言ってもConflictとかdead linkを消すだけの作業)。こういうデータセットの共同管理方法はもっと良いものが欲しい。
- このサイトに
next/image
使ったら一瞬で制限にかかったので、こういうサイトではnext/image
は使わない方が良さそうだった。
日本の会社紹介スライドをまとめたサイトを作りました。
— azu (@azu_re) October 12, 2021
← と → キーでスライドをまとめてスライドできますhttps://t.co/TpLeUaEWbn
データはSpreadSheetで管理しています。自由に追記してくださいhttps://t.co/jRf9l4bxuG
サイトのソースコードは https://t.co/ndSA1UGMyr にあります pic.twitter.com/cGusZatVKF
- azu/inkdrop-excalidraw: Allows Inkdrop to embed Excalidraw contents to a note.
- Inkdropのプラグイン
- Excalidrawをinkdrop内に埋め込んで扱える
- メモと図を同時に書きたい時はよくあるので、結構使ってる
- azu/create-validator-ts: Create JSON Schema validator from TypeScript.
- TypeScriptの型定義からバリデーションコードを生成するツールを書いた | Web Scratch
- スキーマを手書きしてても楽しくないので、TypeScriptの型定義からJSONスキーマとバリデーションを生成するツール
- 元はtextlintのルールでスキーマを手書きしたくなくて、型からスキーマ生成すれば9割ぐらいは要件満たせるんじゃない?ってところからきている
- textlint/babel-plugin-textlint-scripts: A babel plugin for textlint-script.
philan.net
寄付した金額とか寄付先とかを管理するWebサービス。結果はSpreadSheetに記録される。
philan.netを始めた理由は、寄付とか慈善活動とかについてもっと考えてみようと思ったためです。 実際にやらないとわからないことは多いので、もっと考えるためには何かやってみようというのがスタートです。
- 寄付をするために、寄付の予算と寄付の記録をSpreadSheetベースでつける philan.net というサービスを作った | Web Scratch
- 寄付研究や慈善活動について研究するために色々な書籍や論文を読んだメモ書き | Web Scratch
- 慈善活動や寄付やオープンソースについて発表した | Web Scratch
色々な本とか文献を読んでいて、もっと理解するためにやってみることが早そうだったので、やるための仕組みを作っていた。
philan.netの予算を決めて寄付をするというアイデアは、The Science of Giving: Experimental Approaches to the Study of CharityのPrecommitment to Charityからきている。
philan.net 考えるのに結構時間は使ったけど、実装があんまりできていない。 SpreadSheetにデータを記録するのは正しい(データはユーザー自身のものであることを表現したい)けど、それが結構複雑ではある。
サブスクリプションの実装もGASベースで書いてはあるけど、複雑でGoogleの審査も必要でなんか止まっている(審査があると大体止まる)。 この辺もっといい感じに進めたいなー。VercelをやめてAWS(Serverless Next.js)に移動したいというのもあります。
あと事前に予測されていたように、どこへ寄付していいのかがわからないという状態が発生しやすいので現実かなとは思った。 これは、来年どうにか解決できるようにしていきたい。
philan.netのContributorはいつでも募集しています。
まずはもっとデプロイをもっと気軽にできる状態(コミットしたらされるけど安全性が微妙)にしないといけない感じはする。
JavaScript Primer
毎年のECMAScriptの仕様改訂(6月頃)に合わせて更新しようとしている。
来年はES2022で、Private Fieldなどのかなり大きめな変更が来る予定。 また、Node.jsのECMAScript Modules対応もどうするかという話もあリます。
- ECMAScript 2022対応 · Issue #1337 · asciidwango/js-primer
- Node.js ESMの対応 · Issue #1355 · asciidwango/js-primer
ES2021に対応したJavaScript Primer 3.0を公開しました - JavaScript入門 | Web Scratchでも書いていましたが、 書籍もソフトウェアのようにオープンソースとして扱えるはずなので、参加したい人を募集しています。
jsprimerはコードや文章に対してもテストが用意されているので、文章に対してもソフトウェアのようにContributeできます。 Contribution Guideは次のページを参照してください。
ECMAScript 2022対応として新規トピックの追加というのもあるので、依存関係が強くない部分は新しく参加する人でも書ける可能性があるので、興味あるIssueあったらやってみたいというコメント書いてください!
まだ、Issueは色々あるので、興味ある人は見てみてください!
GitHub Sponsors
GitHub Sponsorsの募集を開始してから2年が経ちました。
GitHub Sponsorの募集ページを公開しました。https://t.co/YpSPfMPxjU#Promise本 や #jsprimer を書いたり、textlintを作ったり色々OSSを作ってます。
— azu (@azu_re) October 23, 2019
後は https://t.co/CXy3hOXJ8q を8年ぐらい毎週更新してたりもします。@jser_info Sponsorとかもあるのでので、興味がある人は見てみてください
GitHub Sponsorsの振り返り記事を書いていて、自分のGitHub Sponsorsに対するスタンスも書いています。
2021年末で100名以上の方にサポートされています。ありがとうございます!
最初に登録したGitHub Sponsorsのゴールは、とりあえずで入れた100でした。 色々な方の支援があってこのゴールに到達したので、ゴールを更新しています(GitHubのゴールは常に上書きかと思っていたけど、ちゃんと履歴が残る作りになっていました)
記事の最後でも書いていますが、GitHub Sponsorsを目にする機会は増えたと思います。 ただこれはベースラインができたという感じで、まだまだ変わっていく可能性が高いです。
オープンソースにおける持続可能性は、続けるだけではなく変化する可能性が含まれていると思います。 変化しない持続は停滞と捉えられる可能性が高く、持続と変化はある種のセットだと考えています(かつてのNode.jsとiojsみたいな話)。 ここでの変化は安定とは対立しない概念な気もします。
そのような変化を見ていくには、やってみないとわからないことは多いです。 GitHub Sponsorsも実際にやってみていいところと微妙なところがわかってきた気がします(よくも悪くもGitHubは場所を提供してる感じで、細かいところはユーザーに任せている感じ)。
2年以上やっていますが、まだGitHub Sponsorsのバランスがきちんと取れている感じはしないです。 (これぐらいの支援がちょうどよくて、それぐらいなら支援される側の負担もちょうど良いみたいなバランス。またこういう支援方法が適切で、それに対するリターンはこういう形が適切みたいなバランス。企業のスポンサーにとって、こういう見返りが明示されていた方がやりやすく、それが誰にとっても納得感がある形など)
これからも変化を見ながら、GitHub Sponsorsなどのオープンソース周りでちょうどいいバランスを見つけられるように活動していきたいです。
textlint
textlintのルール自体は欲しくなった時にちょこちょこ作っています。 今textlint本来の出力する情報を改善しようとしています。
現在のtextlintは、エラーの開始位置しか基本的に含んでいないため、エラーの範囲を出力できるようにしようとしています。
また、エラーメッセージをキーで参照できるようにしてローカライズしやすくしたり、エラーだけではなくサジェスト(修正候補を選んで修正)、エラー時のドキュメントの改善(パターン化)のRFCを出しています。
元々、CLI/CIで動かす目的で始めたの部分があるので、エディタやtextlintを使ったプログラムからもより使いやすくする目的の変更をイメージしています。
こういうのがあるといいみたいな意見がある人は、GitHubやTwitterなどで教えてください。
JSer.info
JSer.infoはそろそろ11周年が近いです。 今年の初めてに10周年の記事を書きました。
JSer.infoは基本的に安定的な更新ペースになっています。
2021年の #jserinfo で紹介した記事数は去年より若干少なめ。
— azu (@azu_re) December 31, 2021
公開した記事の数自体は週一更新が11年弱続いてるので一定のペース。
タグ別ではSvelteとWasmが増えている。
ブログサービス別ではmediumとhttps://t.co/nAzzcStis8が同数になって(カスタムドメインが多いから実際は違う)、zennが増えた。 pic.twitter.com/zTyX474fSx
他の分野でもJSer.infoみたいなサイトが欲しいみたいな話はここ最近よく目にするようになった気がします。 そう言ったWeekly系のサイトは、一人だけだと続けるのは難しいし、個人でやるなら結構フレームワークに則って効率化しないと難しいです。 モチベーションに依存しちゃうと更新が止まりやすい(人には波がある)ので、ある種の更新の流れがあったり、更新が気持ち的に楽な状態を作っておく必要あります。
次の記事で、この辺のJSer.infoの更新の流れをどうやって作っていったかについて書いています。
結構この辺は情報サイトとしてある種パターンはあると思っているので、それを上手くフレームワークに落として、同じようなサイトをやる人がやりやすい状態を作りたいなと思っています。 HubMemoや上の方で書いていたazu/book-reviewもそれの実験材料です。
逆に、そういうサイトをやりたい人にとってどういうものがあると、参加しやすい/続けやすいのかが気になります。 また、一人だけで難しいなら複数人にやりやすい仕組みを作るのが適切だと思っているので、その形も見つけたいです。 JSer.info自体もそういう形を目指したいです。
JSer.infoのような情報サイトは、公開する場所(ブログ)などが重要なのではなく、そのプロセスが重要だと考えています。 公開した結果がモチベーションに繋がること(反応をもらうとか)はあると思いますが、継続的にやる場合には公開した結果ではなく公開することに対してモチベーションを維持する必要があります。 そのため、どちらかという公開する場所や結果より、公開までの過程に摩擦がなかったり公開すること自体が楽しいなどの形の方が継続しやすいと思います。
まとめ
毎年、その時に思ってることをとりあえず書いてるだけなのでまとめはないです。
- 新しく深く面白いと思うものを作りたい
- philan.netとか寄付周りの話はもっと深く見ていきたい
- 引き続きGitHub Sponsorsやオープンソースの持続可能性について考えていきたい
- textlintやJavaScript Primerで結構大規模な変更をやる予定なのでやり切りたい
移動しながらとか時間制限がつくと進みやすい気がするので、意図的にそのような状態をどう作るかを考えていきたい。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。