今年のOSS活動振り返り @ 2017
2017年のOSS活動の振り返り記事です。
今までの振り返り。
- 今年のOSS活動振り返り @ 2016 | Web Scratch
- 今年のOSS活動振り返り @ 2015 | Web Scratch
- 今年のOSS活動振り返り @ 2014 | Web Scratch
2017年のGitHubのContributionsは8000~10000ぐらいを推移していました。 (1/3ぐらいはJSer.info関連だと思います。)
今はGitHubに表示されないけど、Current Streakは1507日でした。(1507/365 = 4.128767123年)
- GitHub Full Longest Streak:azu
- GitHubのLongest Streakを出してくれるツール
Issue/PR
大体同じ程度増えている感じらしい
作ったもの
- 今年: 95
- 去年: 108
去年よりも減っているのは、textlint、almin、searchive、immutable-array-prototypeなどmonorepoを結構積極的に使うようになったのでその影響もあるのかも。
順番に何を作ってたのかを見ていく
- azu/web-application-template-2016
- ウェブアプリを書くときこういうテンプレ使ってる的なやつ
- 今はReact + TypeScript (+ Electron)でアプリを書き始めるときにやってること - Qiitaみたいな感じになってる
- 手元では
init*.sh
みたいのがなんこかあってそこから選んでるだけなので変わってない
- negaposi-analyzer-ja
- 形態素解析したテキストからネガティブ/ポジティブ(単語感情極性)を判定したスコアを返すJavaScriptライブラリ
- JSer.info 6周年記念イベントでJSer.infoの作り方の発表のために作った気がする
- JSer.infoの紹介記事は偏りのある言葉を嫌うので、実際に今までのデータを解析するために作った
- 実際にネガ・ポジは0に収束してそうだった的な話をした
- access-limit-http-proxy
- たしか数回リクエストした時の挙動を調べるテストを書くために作った気がする。
- 3回アクセスしたら500返すみたいなプロキシ
- azu/env-development: Set $NODE_ENV to “development” works best with mocha –require=env-development
process.env.NODE_ENV = "development"
するだけmocha --require env-development
したかった
- azu/uni-gitbook-server: [WIP] [Unofficial] Alternative of GitBook server.
- GitBookのビルドがあまりにも遅くて作ってた
- GitBookのwatch buildは変更 -> サーバを止める -> ビルド -> サーバ再開 みたいな結構やばい感じだった
- GitBook 開発チームのレスポンスもあまりにも悪かったりしてちょこちょこ不満がある(PR出しても数ヶ月放置とかがよくある)
- Is GitBook still alive? · Issue #1808 · GitbookIO/gitbook
- 小さな技術書を作るためのツールはやっぱり欲しいので、どうにかしたい
- azu/search-prototype.js: Search usage of prototype.js in your codes.
- コード中にprototype.jsのメソッドがないかを検出するツール
- 公式のAPIレスポンスからメソッドのリストを作ってgraspを使ってASTで検索してる
- コード中にあるprototype.jsの拡張メソッドを使ってる部分を検索するツール | Web Scratch
- さすがにそろそろ亡くなったでしょうみたいな感じではあるけど、prototype拡張という性質上静的検索が難しいので、専用のツールを作った
- azu/path-to-glob-pattern: Convert file/directory path to glob pattern.
src/
=>src/**/*
みたいにglobに変換するライブラリ- textlintで使ってる
- azu/get-github-pr-review-comments: Get PR review comments from command line.
- azu/position-map-text-to-markdown: Map rendered text/html position to Markdown position.
- Markdownのレンダリング済みテキストから、指定した文字列が元のMarkdownでどの位置にあるかを返すライブラリ
- gitbook-plugin-github-issue-feedbackのために作った
- 書いた文章をレビューしてGitHubにIssueを切るためのGitBookプラグイン | Web Scratch
- レンダリング済みのHTMLから元のMarkdownの行数を見つける感じ
- azu/strip-X-Frame-Options-proxy: strip X-Frame-Options header for embedding on iframe.
- GitHubに3段階のiframe埋め込み拒否機能があってそれの検証
- CSP ->
X-Frame-Options
-> 埋め込みJavaScriptでwindow.top
をとかをみてる拒否してくる - 結局は
Webview
とか使わないと埋め込めない
- azu/can-use-webview: Detect if you can use electron’
webview
要素が使えるかどうかの判定
- azu/check-invalid-control-characters: Check invalid control characters like
\u0008
in plain text.- Slack.app 、Electron、Chromeあたりで問題になった制御文字の問題を検出するツール
- 最近textlintでもっと便利な感じのを書いた
- 文中に制御文字が混じっているのを見つけて自動修正するtextlintルール | Web Scratch
- azu/localstorage-ponyfill: Universal LocalStorage for browser and Node.js.
- ブラウザ、Node、Electronで動くみたいな目的の
localstorage
- ブラウザ、Node、Electronで動くみたいな目的の
- azu/video-events-debugger: [WIP] HTML5 Video element events debugging tools.
video
要素とかのイベントをひたすら見られるデバッガー
- azu/faao: Faao is a GitHub issue/pull-request client on Electron.
- Alminの技術ショーケースもかねて作ってたGitHub Issueクライアント
- ドメインモデルとかもしっかり考えて開発してる
- Faao - ドメイン駆動設計で作るGitHub Issue Client -
- 方向がしっかり決まってなかったけど、Redesign Faao · Issue #85 · azu/faaoで方向をちゃんと定め直して開発中
- 単純に言えばGitHub Issueを使ってちゃんとTODO管理したいという話
- azu/immutable-array-prototype: A collection of Immutable Array prototype methods(Per method packages).
Array#push
とかのImmutable版ほしいよねって感じで作った- Array.prototypeのImmutable版メソッドを個別のパッケージで使えるものを作った | Web Scratch
- Faaoでも使ってる
- ドメインモデルもImmutableにしたいときにこういうシンプルで小さいパーツが便利で欲しかった
- azu/node-browser-shim-gap: The gap issue between Node.js and Browser shims.
- azu/text-map-kuromoji: テキストを形態素解析した結果とテキストの関係をビジュアライズするエディタ
- kuromoji.jsで形態素解析した結果とテキストの関係をビジュアライズする | Web Scratch
- ビジュアライズしたくなった
- azu/mp3cat-bin: Binary wrapper for mp3cat - concat mp3 files.
- azu/git-commit-push-via-github-api: Git commit and push by using GitHub API. No depended on Git binary.
- GitHub APIだけでコミットやプッシュするライブラリ
- lambdaからpushしたかった
- azu/pronunciation-lexicon-specification-json: Convert JSON to Pronunciation Lexicon Specification (PLS) XML.
- azu/pronunciation-lexicon-specification-yaml: Convert YAML(YML) to Pronunciation Lexicon Specification(PLS) XML.
- Amazon Polly関係
- JSON or YAMLから発音辞書仕様(PLS)バージョン1.0を再生する
- azu/move-github-repository: Move GitHub repository(Update description && URL && default branch && Archived).
- monorepo化した後のリポジトリの後片付けツール
- GitHubのリポジトリをDeprecatedにするスクリプト | Web Scratch
- GitHubはTransferできないときに、そのリポジトリからリダイレクトとかできないのでその辺をいい感じにするツール
- 最近追加されたArchieveにも対応した
- azu/VideoPlaybackQuality-polyfill: A ponyfill/polyfill for VideoPlaybackQuality.
- getVideoPlaybackQuality()というAPIを知ったけど、Chromeが残念だったのでpolyfillを書いた
- azu/alfred-hantebookmark-mydata: Search My HatenaBookmark in Alfred
- azu/performance-mark-metadata:
performance.mark
with custom meta data.- クライアントサイドのメトリクスを作成するためのライブラリ
performance.mark
with metadata is useful for Real user monitoring- performance.markにメタデータを紐付けできるライブラリを書いた | Web Scratch
- Almin + React/Vue.jsのパフォーマンスプロファイルをタイムライン表示できるように | Web Scratch
- 最近60ページぐらいのウェブアプリのパフォーマンス改善事例集(問題の見つけ方や修正方法、計測方法、動画とか実際のプロファイルみたいなやつ)を書いたけど、そこでも結構使った
- azu/rc-config-loader: Load config from .{product}rc.{json,yml,js} file
.textlintrc
とかみたいによく見る設定ファイルを探して読み込むローダ- textlintで使ってる
- cosmiconfigが昔非同期だけで、同期版が欲しくて作った
- azu/github-label-setup: 📦 Setup GitHub label without configuration.
- 最近リポジトリを作るときはラベルも設定するようにしてる
- そのテンプレラベルを集めたもの
- GitHubのラベルをいい感じにセットアップするツール | Web Scratch
- 知見としてはGitHubは
good first issue
など特定のラベルは優遇(Issueの画面に案内が表示される)されているのでその辺はGitHubに合わせたほうがいい
- azu/avoid-json-stringify-on-react: Deep equal vs. Shallow equal on React’s shouldComponentUpdate
- Reactの
shouldComponentUpdate
でshallow equalとdeep equalの話 - Reactの公式ドキュメントでJSON.stringifyとかで比較するなって話があるのでそれを検証した
- shallow-equal for Object/React props | Web Scratch
- Reactの
- azu/shallow-equal-object: Shallow equal check object that support TypeScript.
- azu/shallow-equal-props: Shallow Equal for React’s props. Help to implement shouldComponentUpdate.
- 上の検証時に作ったshallow equalライブラリ
- デバッグオプションがあって何が違っているのかが確認できるのが特徴
- azu/what-is-this: What value is
this
in Strict, Script, or Module?- いろんなコンテキストで
this
の値を確認するサイト - https://azu.github.io/what-is-this/
- 関数とthis · JavaScriptの入門書 #jsprimerを書くために色々検証する目的で作った
- このツールでV8のモジュールコンテキストでは
this
がバグってるのを見つけて報告した - 791334 -
this
in top level Arrow Function in Module Context should beundefined
- chromium - Monorail
- いろんなコンテキストで
- azu/nlp-pattern-match: Natural Language pattern matching library for JavaScript.
- 自然言語にマッチする正規表現を書いて、形態素解析結果でテストして、置換するライブラリを書いた | Web Scratch
- 言語処理をもっと楽にしたい!みたいな方向で書いてた
- 最近は逆に言語処理をもっと丁寧にしたい!みたいな方向でsentence-splitterを書き直したりした
- 多くの言語処理はただの文字列として扱ってるのが問題でその分いろんな情報がなくなってることに気づいてきた
- textlintでは文章はASTにしてから扱えるので、ASTのまま言語処理してコンテキストを維持して扱いたいみたいな方向を最近やっている
- Core rule utility · Issue #366 · textlint/textlint
Searchive
SearchiveというローカルのPDFを全文検索、串刺し検索するアプリを書いた。
これもmonorepoでリポジトリにアプリ、クライアント、サーバ、CLIなどが全部入ってる。
副産物
- azu/search-query-tester: Test object with search query syntax.
- GitHubみたいな検索演算子をパースしてオブジェクトにしてマッチしてくれる
LDR
残念ながらLDRが閉鎖したのでInoreaderに移行した。 Inoreaderのクライアントは満足できなかったので、irodrを作って使ってる
- azu/ldr-export-opml: Convert exported json from LDR to opml with Rate.
- LDR閉鎖にともなってエクスポートツールを作成した
- LDRのフィードをレート情報付きでエクスポートする | Web Scratch
- azu/irodr: RSS reader client like LDR for Inoreader.
- http://irodr.netlify.com/
NetlifyのおかげてCORSも特に問題なくなった。 ウェブで動くInoreaderのクライアントという感じで、LDRのときと同じぐらい使ってる。
細かいバグとかもあるのでPR歓迎しています。 基本的にまだレート読みしか考えて作ってないのでその辺のオプションが欲しい人もIssueなどどうぞ。
AlminとOffice UI Fabric(React)を使って作った。 (2-3日ぐらいで突貫的に作れてよかった)
Almin
最近AlminのサイトをDocusaurusで作り直した。
Almin自体はあいかわらずアプリを作る際にもっとドメインに集中できるようにすることを目的に作ってる。最近、よそでも使ってくれてる人が増えてきてる。
既にあるAPIを使ってアプリを作るみたいなところにはAlminは結構強い部分はあるし(クライアントに裁量を強く持たせられる)、SearchiveみたいにほぼReduxみたいなこともできるので、その辺はちゃんとドキュメントを整備していきたい。
Alminへのコントビュートはいつでも歓迎しています。
興味がある人はContributing Guideやlabel:"good first issue"
から見てくれると手が出しやすい気がします。
増えたライブラリとかツール
- almin-react-container
- AlminとReactを連携するContainerコンポーネント
- almin/almin-usecase-map-generator: Command line tool that generate UseCase map from almin’s UseCases.
- Alminのユースケースからユースケース図を自動生成するツール
- 例) Faao - UseCase architecture
- almin/almin-devtools: Integrate almin into redux-devtools
- redux-devtools-extensionをAlminを繋ぐ開発者ツール
- ActionとかStateを開発者ツール的に見られる
- almin/migration-tools: Migration scripts for Almin.
- マイグレーションツール
- avajs/ava-codemods: Codemods for AVAがかっこよかったので作った
- 最近jscodeshiftがあんまりアクティブじゃなくてちょっとリスクあるかもと思った
- Babelのメジャーアップデートもあるので
- almin/ddd-base: DDD base class library for JavaScript application.
- DDDには別にベースはいらないんだけど、やっぱり毎回同じような基礎部品がでてきてしまうのでその辺をとりあえず書いてみた
- これ自体が何かできるというわけでもないので、ちょっとだけ便利になるかも的な補助ライブラリ(設計は助けてくれない)
本体もかなり書き換えてTypeScript化したり基盤部分のライフサイクルをしっかりもつようになった。後はどういうユースケースがあるかに基づいて進んでいく段階になっていると思う。
- Almin 0.13リリース - アプリケーションレイヤーのトランザクション | Web Scratch
- JavaScriptのライブラリを徐々にTypeScriptに移行する | Web Scratch
- Inroducing Almin 0.10.0: TypeScript, FlowType, Logger | Web Scratch
textlint
自然言語のLintツールのtextlintはあいかわらず開発してて、色々なルールや本体の改善をした。
この一年で
- TypeScript化
- monorepo化
- メインのコントビューターが2人増えた
- textlint 10.0.0 リリース | Web Scratch
- 人も増えて開発も活発化しています
こちらもContributing Guideや初めてでも手が付けやすいlabel:"good first issue"
がついたIssueがあります。
コントビュートはいつでも歓迎してるので、何かやってみたいという人はお知らせください。
アプリ
- textlint/textlint-app: textlint standalone application top on Electron.
- Nodeのインストールもいらない単独で動くtextlintアプリ
- textlintのElectronアプリを作った | Web Scratch
- メンテしたいなー
ルール
- textlint-ja/textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet: 全角と半角アルファベットを混在をチェックするtextlintルール
- textlint-ja/textlint-rule-ja-unnatural-alphabet: 不自然なアルファベットを検知するtextlintルール
- azu/textlint-rule-period-in-list-item: textlint rule that check with or without period in list item.
- textlint-ja/textlint-rule-no-insert-dropping-sa: サ抜き、サ入れ表現の誤用をチェックするtextlintルール
- azu/textlint-rule-abbr-within-parentheses: textlint rule check if write abbreviations within parentheses.
- textlint-ja/textlint-rule-prefer-tari-tari: 例示・並列・対表現の「〜たり〜たりする」をチェックするtextlintルール
- textlint-rule/textlint-rule-en-capitalization: textlint rule that check capitalization in english text.
- textlint-rule/textlint-rule-preset-google: [WIP] Google Developer Documentation Style Guide for textlint.
- Google開発者ドキュメントガイドのルール化
ライブラリ
- azu/check-ends-with-period: Check the text is ends with period mark.
- azu/english-article-classifier: Classifier english article(a, an).
関連
- textlint-ja/technological-book-corpus-ja: 日本語で書かれた技術書のコーパス
- コーパス
- azu/textlint-reviewdog-example: textlint + reviewdog example project
JavaScript入門本
js-primerというJavaScriptの入門書を書いています。書く部分自体については殆ど決まっていて、書く項目をあと少しになってきました。来年中にはなんとかなるはず。
既にウェブで見られるので、おかしなところは気軽にIssue登録とかPR出してみてください。
その他
SC22 ECMAScript Ad hoc委員会
SC22 ECMAScript Ad hoc委員会の活動としてECMA 404やECMA 414のISO標準化のレビューをした。
- ECMA-414 ECMAScript Specification Suiteについて | Web Scratch
- ECMA 404(JSON) and ECMAScript will be ISO standards
- Node学園 25時限目でECMAScriptの国際標準化の話をした | Web Scratch
JSer.info
今年の初めにJSer.info 6周年記念イベントを開催しました - JSer.infoをやった。来年の1月で7周年だけど、ちょっと時期的に7周年イベントはできなさそう。
jser/podcast: JSer.info podcast creatorとか新しいことにもちゃんと挑戦していきたい。
書けなかった
まとめ
完全に新規で作ってるものがちょっと減っている気がする。 この辺はリソース配分の問題もあるけど、ちゃんと作っていきたい。
後、手をつけようとしてちゃんと終わりまで持っていけてないものがちょこちょこ出てきているので、その辺をどうやれば進められるかを考えていきたい。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。