今年のOSS活動振り返り @ 2019
2019年のOSS活動の振り返り記事です。
今までの振り返り。
- 今年のOSS活動振り返り @ 2018 | Web Scratch
- 今年のOSS活動振り返り @ 2017 | Web Scratch
- 今年のOSS活動振り返り @ 2016 | Web Scratch
- 今年のOSS活動振り返り @ 2015 | Web Scratch
- 今年のOSS活動振り返り @ 2014 | Web Scratch
2019年のGitHubのContributionsは7000~10000ぐらいを推移していました。 ちょっとプライベートリポジトリのコミット比率が上がって、原因はasocial-bookmarkでのブックマークシステムな気がします。後は、仕事のリポジトリがPrivate比率多い。
GitHubのCurrent Streakは2246日で6.153424658年コミットは続いています。
データの取得には次のツールを使いました。
Issue/PR
基本あまり変わらなかった。 privateも含めると1.5倍ぐらいになるので、GitHubの利用率が上がった感じなのかな。
作成したリポジトリ
- 今年: 81
- 1年前: 69
- 2年前: 95
作ったリポジトリの数はあんまり変わらず。
作ったもの
時期順で何を作っていたのかを振り返る。
- azu/default-browser-handler-app: Scriptable Default Browser by Electron.
- Electronで開くデフォルトブラウザをスクリプトで書けるものを作ってた
- でも起動速度に壁があってChoosyを買った
Electronでhttpとかのスキーマに登録して、デフォルトブラウザの処理を行う例。
— azu (@azu_re) January 5, 2019
どうもopen -aに比べて1-2秒遅くて実用するには何か足りない "azu/default-browser-handler-app: S…" https://t.co/O1JYmBYEIX
- azu/rust-programming-languages-second-edition-sandbox: The Rust Programming Language Traning repo
- まえがき - The Rust Programming Languageを写経してRustを勉強した
- azu/license-generator: A Command line tool that generate
LICENSE
file.- Rustで書いたライセンスジェネレーター
- LICENSEファイルを生成するコマンドラインツールを書いた | Web Scratch
- 今までRubyで書いたものを作ってたけど、起動が遅いので作った
- azu/random-apahotel: Select apahote randomly.
- 次に宿泊するアパホテルをランダムに選ぶツール
- アパホテルはまだ泊まったことない
#ahomu 次に宿泊するアパホテルをランダムに決めるウェブアプリを書きましたhttps://t.co/a0AB6szWwg
— azu (@azu_re) February 7, 2019
- azu/ndjson-to-json-text: Convert ndjson to json without JSON parsing.
- ndjson形式のJSON文字列から、配列のJSON文字列を作成するライブラリ
- ndjsonからjsonの配列を作るのに
JSON.parse
/JSON.stringify
を入れると高コストなので書いた
- azu/performance-mark-snippet: Minimum
performance.mark
snippet for measure a feature with meta data.performance.mark
にデータをもたせるスニペット- 手元のコードのパフォーマンスを計測するperformance.markのスニペット | Web Scratch
パフォーマンス計測と結果収集を楽にするスニペットを書いた
— azu (@azu_re) March 14, 2019
"手元のコードのパフォーマンスを計測するperformance.markのスニペット | Web Scratch"https://t.co/g56TlEOL8a pic.twitter.com/KxtydDhgQR
- azu/security-alert-issues-bot: [Probot] Sync GitHub Security Alerts and GitHub Issues.
- GitHubのSecurity Alertが来たらIssueを作るProbot
- GitHubのAppの仕組みでeventが飛んでコないというバグレポートして放置してる
- azu/batobook: BatoBook is book engine for web.
- Next.jsがAMP対応した
- AMPをTypeScriptで書くには…と思ってた作ってた
- 書き心地がつらすぎて投げた
- azu/security-alert: [GitHub] A Command Line ToolKit for GitHub Security Alert.
- GitHub Security AlertをIssueにするCLIツールとか
- GitHub Security Alertを元にIssueを作成するCLIを書いた | Web Scratch
- azu/random-hikyou: Random 秘境100選
- 日本の秘境100選から次に行く秘境を選んでくれるツール
- https://random-hikyou.netlify.com/
- azu/simple-token-replacement-template: A reference implementation for Simple token replacement template.
- テンプレートエンジンを使った攻撃を解説するために書いたSimple Token Replacementのテンプレートエンジン
- テンプレートエンジンでのセキュリティの話は次のスライドと記事で書いた。
- azu/beer-kentei: ビール検定
- ビール検定を受けるための問題集をスクレイピングした
- 合格した
- azu/rollup-plugin-brfs: Rollup plugin that inliing fs.readFile contents.
- textlintのルールでyamlファイルをインライン化する方法を考えていてrollupのpluginとしてbrfsを書いた
- けど、babel-plugin-static-fsでいいのでは?ってなってtextlint-scriptsではbabelを採用-
- azu/trace-database-response: Assert: Express response raw data from MongoDB
- Mongoから取ったデータをそのままExpressで返してしまうディスクロージャー系の脆弱性を見つけるRuntimeのプラグインセット
- 後でもっといい感じのやつ書いた
- azu/korefile: File System API for Local/GitHub.
- ローカルとGitHubのリポジトリを読み書きするラッパーライブラリ
- write/read/deleteをGitHub APIで直接できるので、Git依存しないでGitHubリポジトリをファイルシステムとして扱える
- 結構便利なので使う
- azu/lodash-template-js-parser: A JavaScript parser for
lodash.template
.- ota-meshi/eslint-plugin-lodash-templateからパーサ部分を取り出したライブラリ
- 元々のやつがLint向けでリッチかつメモリリークしてたので、最小限にした
lodash.template
のパーサ - 次のASTを使った自作ツールの一つ
- JavaScript ASTを使ったツールを実装する話 | Web Scratch
- azu/dive-into-ast: Dive into AST(Abstract Syntax Tree) in JavaScript.
- スライド: Dive into AST
- この辺のASTを使ったツールについての色々書いた
- スライドはcode-surferを使って頑張って書いた
- ASTのスライドはツリーが長くなって見えない問題があるのでフォーカスする部分をイメージした
- azu/welcometo: Welcome message script: Welcome to @organization
- ウェルカムメッセージを出すCLIツール
$ npx welcometo @github pic.twitter.com/GVwBf8PAW4
— azu (@azu_re) December 31, 2019
- SRE サイトリライアビリティエンジニアリングを読んだり作ったもの | Web Scratch
- azu/consistent-hashing-wasm: consistent hashing algorithm written by AssemblyScript.
- SRE本を読んでてconsistent-hashingがでてきたのでAssemblyScriptで実装した
- AssemblyScriptよく分からなかったけどリポジトリ作ったら作者がTipsを書いていった
- azu/exponential-backoff-generator: Exponential backoff generator. Provide robust retry function.
- SRE本でExponential backoffがでてきのでGeneratorを使った実装を書いてみた
- azu/consistent-hashing-wasm: consistent hashing algorithm written by AssemblyScript.
- azu/mu-epub-reader: Epub viewer on Electron that support text translation.
- mu-epub-reader - 翻訳機能が付いた電子書籍リーダー MOONGIFT
- 洋書をいくつか読もうと思って、読むためにepubリーダにGoogle翻訳を載せたものを書いた
英語の本を色々読もうと思ったのでepubビューア作った。
— azu (@azu_re) September 14, 2019
Oreilly MediaのSafari見てたらGoogle翻訳にまかせてしまうのが良さそうと思って、epub.jsを使ったElectronアプリにしてみた。
ざっくり眺めるのに便利な気がする。https://t.co/ZA0Urh2JTj pic.twitter.com/qMtISN5Y64
- azu/requestidleinterval: setInterval + requestIdleCallback function
- setInterval + requestIdleCallback function そのまま
- 画面が表示されてるときに一定間隔でリロードしたい場合に使う
- azu/vue-decorate-html-without-v-html: Vue: Avoid to XSS on decorating for user input.
- ユーザー入力にVueの
v-html
を使うとXSSが起きるよというデモ - https://vue-decorate-html-without-v-html.netlify.com/
- ユーザー入力にVueの
- azu/read-once: read-once objects for sensitive data.
- Secure by Designを読んでいて、パスワードとかを扱うコード上の寿命は短いという話があった
- それをコードで表現する一度readしたら二度目はreadできないオブジェクトというのが元ネタ
- それに派生したものを色々書いてた
- azu/mongoose-serialization-proxy-plugin: Mongoose plugin that hide mongo model fields when JSON.stringify
- mongoのデータが
JSON.stringify
とかシリアライズされたことを検知するmongoose plugin - azu/trace-database-response: Assert: Express response raw data from MongoDBとかよりは良さそうなアプローチとしてProxyを採用した
- ただmongooseのpluginがmixedなobjectとかnestをまともに扱えないので、Proxy以外にも追跡するためのいろいろなハックを行っている
- https://github.com/azu/mongoose-serialization-proxy-plugin/blob/master/docs/DESIGN.md
- mongoのデータが
- azu/restrict-javascript: Define restrict JavaScript syntax and validate it.
- ユーザーに書かせても大丈夫なJavaScriptサブセット(Validator)
- ASTを使ったバリデーション
- めちゃくちゃ厳しいので、変数宣言とか関数呼び出しとかいろんなことを制限してる
- これ通して任意のコード実行できるケースあったらIssue作って欲しい(DoSとかは制限できない)
- azu/mdline: Markdown timeline format and toolkit.
- Markdownで年表的なタイムラインを管理するツール | Web Scratch
- JSer.info 8周年 - JSer.infoでタイムラインを書くためだけに書いた
- 後、こういうツールよく書くのでパーサとジェネレーターを切り離せる作りになってたり無駄に柔軟
- azu/asocial-bookmark: Personal Bookmark System.
- GitHubリポジトリをデータベースにするブックマークシステム
- はてなブックマークAPIがなんかエラーで動かなかったのでサブのシステムとして書いた
- 今ははてなブックマークとこのブックマークシステムでクロスポストしてる
- GitHubで管理する個人向けブックマークシステムを書いた | Web Scratch
- ブックマーク管理システム: 動くアプリをとにかく早く安く作ろう
- そういう意味だとpostemも結構いじってる
- 今、iPadでも使えるようにブラウザ対応してるコードがある
- azu/github-actions-badge: Generate GitHub Actions badge Markdown code.
- GitHub Actionsを使い始めたので、CLIからbadgeを生成するツールを書いた
- azu/travis-badge: Output travis badge as markdown from git/configと似たもの
- azu/action-package-version-to-git-tag: [GitHub Action] Get ${version} from package.json and git tag ${version} for the repository.
- npm private registryからGitHub Package Registryへの移行をやっている
- GitHubリポジトリからGitHub Package Registryへ
npm publish
する仕組みを作ってる中で作られた - publish自体は
npm publish
だけで、そのバージョンで冪等性があるGit tagをはるやつがないので書いた - azu/can-npm-publish: A command line tool that check to see if npm publish is possible.も一緒に使える
- azu/npm-github-package-example: npm registry to GitHub Package Registry example.はサンプル
- azu/require-proxy: [exprimental] require with lazy
require
をlazyにしたいという話をしてたときに試してた
- azu/safe-marked: Markdown to HTML using marked and DOMPurify. Safe by default.
- marked 0.7.0でmarked自体はサニタイズしなくなるという話があった
- https://github.com/markedjs/marked/pull/1519#issuecomment-510062918
- DOMPurifyをNode.jsで使うの簡単ではないし、絶対ミスする人出るでしょ話をしてた
- Universalで簡単に扱うやつが必要だと思ったので書いた
- azu/can-bundle-it: A command line tool that detect JavaScript file can be bundled.
- textlintルールをブラウザで動かせるかを判定するツールを書きたくて、bundleできればブラウザで動くかな?って書いた
- もうちょっとIntegrationが進んでtextlint/browser-run: Run textlint rule on browser for testing.になったので、結局使わなかった
- webpackをAPIとして使うサンプル
GitHub Sponsors
GitHub Sponsorsのページを公開した。
GitHub Sponsorの募集ページを公開しました。https://t.co/YpSPfMPxjU#Promise本 や #jsprimer を書いたり、textlintを作ったり色々OSSを作ってます。
— azu (@azu_re) October 23, 2019
後は https://t.co/CXy3hOXJ8q を8年ぐらい毎週更新してたりもします。@jser_info Sponsorとかもあるのでので、興味がある人は見てみてください
30人を超える人に登録してもらいました。ありがとうございます!
ドメインの更新費用とかACM(Association for Computing Machinery)に登録してO’Reilly Mediaで書籍を読む費用に使ってる。 ネスカフェゴールドブレンド バリスタでコク深めを買って飲むコーヒー代に使ってる。
関連して作ったツール。
- azu/github-funding-yml-updater: Update multiple repositories’s
.github/FUNDING.yml
via GitHub API- 個人アカウントの複数リポジトリの
.github/FUNDING.yml
を更新する方法がなかったのでツールを書いた
- 個人アカウントの複数リポジトリの
GitHub Sponsorsや自分が作ったOSSへのContributionはいつでも歓迎しています!
Contributeしたい人は、label:"good first issue"
から探すのが分かりやすいかもしれません。
- GitHub Sponsors: Sponsor @azu on GitHub Sponsors
- Issue:
label:"good first issue"
textlint
textlint-scripts 3リリース、TypeScriptでtextlintのルールを作成できるようになりました | Web Scratch
textlintのルールをTypeScriptで書けるようにした。 また、babel-plugin-static-fsを使ったファイルのインライン化に対応した。 なので、新しいtextlint-scriptsを使えばブラウザでも動くtextlintルールが書きやすくなった。
- textlint/migrate-textlint-scripts-typescript: Migrate textlint-scripts to TypeScript version.
- textlintのルールをTypeScriptで書けるようにした
- JavaScriptで書いたものをTypeScriptにマイグレーションするスクリプト
- textlint/browser-run: Run textlint rule on browser for testing.
- textlintのルールをブラウザで動かせるかをチェックするツール
書いたtextlintのルールとか
- textlint-rule/textlint-rule-footnote-order: textlint rule that sort footnote identifier(
[^1]
) order. - textlint-ja/textlint-rule-no-insert-re: れ足す言葉をチェックするtextlintルール
Sudachi 同義語辞書というのが公開された、これをNode.jsで扱うものを書いた。
- azu/sudachi-synonyms-parser: Sudachi’s synonyms dictionary parser
- azu/sudachi-synonyms-dictionary: Sudachi’s synonyms dictionary
これを使ってルールを作ってる。 Sudachi 同義語辞書を使うと、カタカナから英単語の対応を拾えたりするので、ルールの幅が広がる。
- textlint-ja/textlint-rule-no-synonyms: 同義語を表記ゆれをチェックするtextlintルール
- textlint-ja/textlint-rule-preset-foreign-language-writing: [WIP] 外来語(カタカナ)の書き方を扱うtextlintルールプリセット
JSer.info
来年で9周年で、アンケートしたけど来年の1月は特にイベントしないかも。 適当な言い訳で回数記念でやるか10年待つかかな。
こっちも9年近く、毎週更新をしている。 今は大体火曜日の朝に更新してる。火曜にランチで読んでいる人たちがいるので、そこにあわせてって感じ。
postemのウェブ版とkorefileで、APIだけ(ブラウザだけ)で更新できる仕組みもできそうな気がする。
GitHub Pages、GitHubリポジトリテンプレート、GitHub Actionsを組み合わせれば、ボタンひとつで同じ更新の仕組みが作れるような気がしてきた。 この辺に需要とか興味がある人は適当に連絡ください。
今のJSer.infoの仕組みは次のような感じになってます。
js-primer
JavaScriptの入門書。
ウェブでの認知度は上がってきたようにも見えるけど、この書籍がターゲットにしてるJavaScriptを学ぶ人にどう届けるかという課題もある。
今は2020年3月の出版に向けて調整中。
後は物理書籍/電子書籍向けの特典は書きたいなー
まとめ
今年は旅行とか登山とかに結構行ってたので、あんまり時間を使えてなかった。 旅行中にMacを持っていかないで、iPadで簡単な開発とかJSer.infoの更新ができそうな気配がでてきたので、その辺は作ってみたい。
後、ウェブセキュリティ系の仕事をメインでやってたので、色々本を読んでた。 日本の書籍だとセキュリティエンジニア的な書籍だとなんかやりたいことと違った(根本は同じだけどやり方がレイヤーに寄りやすい?)。 DevOpsとかSRE寄りの話が今のセキュリティのやり方の流れだと思うので、そっち系を扱うものを読もうと思った。 そうすると必然的に訳されてない洋書になるので、Oreillyは結構読んだ。
GitHub Sponsors登録助かってます!
次の書籍は結構面白くてよかった。
- Agile Application Security
- セキュリティは技術だけの問題ではなく、人や文化に関わる問題
- 今は開発のプロセスが早くなってるのもあり、セキュリティがそれをブロックするのが目的ではなく、組織が適切なリスクを取れるようにセキュリティを有効化するのが目的
- セキュリティ対策は魔法じゃないので、セキュリティバグはバグとして修正する
- 設計的なバグ(欠陥)をなくすためには設計からセキュリティが関わるような形を取れるのがいい
- Practical Cloud Security
- クラウドでの責任共有モデルにおいて、どのようなセキュリティ対策を取れるか
- Azure, GCP, AWSなどそれぞれのクラウドごとにどのようなセキュリティプロダクトや対策があるか
- 無限にリソースが必要になるのでやることの優先度付けが必要で、そのためのアセットマネジメントパイプラインの考え方
- アセットの把握、脅威モデリング、使ってるクラウドの把握(Procurement Leaks)、何をしてるかの把握(Processing Leaks)、ツールの検知(Tooling Leaks)、過剰検知のレポート無視の問題(Findings Leaks)
- この辺はやり方が違うだけで、昔からやってるセキュリティ対策と流れはそんな変わらない気がした
- Secure by Design
- セキュリティ対策に魔法はないのでちゃんとコードで設計しよう
- 普通の開発者はセキュリティ考えながら実装するのは難しい場面あるし、セキュリティの専門家でも全部を知ってるわけじゃない
- ちゃんとドメインを設計すれば必然的にセキュリティ対策となる(不用意な入力が入りにくくなる)
- セキュリティ的なバグはあるかもしれないけど、セキュリティ的な欠陥(設定の問題)は減るだろうと
- DDDやろうという話
- 実質DDD本
- DDDを導入する目的としてこういうアプローチがあるんだという感じで面白かった
- The DevOps ハンドブック 理論・原則・実践のすべて | ジーン・キム, ジェズ・ハンブル, パトリック・ボア, ジョン・ウィリス, 長尾 高弘 | 工学 | Kindleストア | Amazon
- リードタイムの話とか
- セキュリティの話はDevOpsが数年前に通ったことを通る感じ
アプリケーション開発もするし、ウェブセキュリティもやるという感じの人があんまりいない感じはするので、この辺興味ある人を探してる。 完全な分業モデルだと設計にある問題は解決しない可能性が高そうなので、Secure by Design的なアプローチが正しいのかとかその辺よくわからないこと多い感じ。
いろんなジャンルの本読んでもやりたいことの根本はそんなに変わらないので、やり方が違うだけってイメージはある。
その他として、Twitterのbotが投稿数が多いとsuspendされるようになったので、代替え方法を実装しないといけないのを思い出した。 GitHub Notificationが止まってるので、faaoを完成させるかslackベースの何かを考えたい。
- azu/faao: Faao is a GitHub issue/pull-request client on Electron.
- GitHubのメール通知とGmailのフィルター設定 | Web Scratch
- 通知メールはフィルタしてる
Twitterのようにいつでも見られる場所にある通知場所が欲しい(一日、数千飛ばしても大丈夫な感じのが欲しい。Slackは大量に流しにくい)。
追記(2020-01-01): github-to-twitter-lambdaにDiscord対応の通知システムを実装した。Slackはチームの切り替えが面倒だったので…(独立した通知システムにしたい or 普段見るやつと完全に統合したい)
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。