2016年のOSS活動振り返りです。

Current Contributions

去年との比較用にGithubOriginalStreakを使って古い形でGitHubのContributionsを出してみた。

Original Contributes Graph

3年ぐらい毎日コミットが続いてる。けど、2016年の後半がだらけててコミット数が少なくなってる。

後、GitHub Full Longest Streakを使うと、GitHubのStreakを取ることができます。 (他のツールみたいに365日制限とかなく、GitHubにアカウントを作ってからの全データが見れます)

以前のまとめ

Issue/PR

作ったもの

textlint

自然言語をLintするtextlint関係のものは相変わらず大量に作ったものがある。

作ったルール

アーキテクチャ周り

JavaScriptプラグインアーキテクチャの本

Almin

Almin.js logo

中規模(3.5万~10万LOC)以上のプロジェクトを想定してalmin/almin: Almin.js provide Flux/CQRS patterns for JavaScript applicationというライブラリを作った。 (中規模の定義はソフトウェア見積りより)

いわゆるReduxとかそういう類のFluxライブラリみたいなものです。 実装自体は大したことないですが、思想的にDDD/CQRS/Fluxを適応することを前提としたドキュメントやサンプル構成になっている感じです。

色々サンプル作っては捨ててまた作ってを繰り返してできたものです。

この一年ぐらいはこれについて色々やっていて、数千万回以上はブラウザで動いてると思いますが、Almin自体が原因のバグは見なかったのである程度安定はしてるのかなと思います。

複雑なJavaScriptアプリケーション作るに当たって考えることや実践したことについては以下のスライドやリポジトリにまとめてあります。

後はfeat(Dispatcher): Introduce DispatcherPayloadMeta by azu · Pull Request #62 · almin/alminこの辺のPRを処理できたら、1.0に向けてのリリース出していきたい感じ。

クライアントサイドのDDDとか色々考えて実践してたけど、ちゃんと考えればできるんだなーという印象。(イベントソーシングはちょっとまだ課題がある)

TypeScriptとかじゃなくてただのJavaScript(jsdoc-to-assertとかは使ってる)でも、ちゃんと設計すれば中規模ぐらいのコードベースはちゃんと読めるように書けることが分かってよかった。(というかコードの読みやすさにおいては、型よりも設計の方が重要そう。両方あると便利だけど、ツールのコストが高くなる。)

jsdoc-to-assert

JSDocをランタイムassertに変換するライブラリとBabelプラグイン。 入れるだけで、JSDocの型チェックが実行時に走るようになる。 productionビルド時は外してやるので、コスパいい感じで結構使ってる。

プロダクションや自分の書いてるライブラリとかには大体入れてドッグフーディングしたので、だいぶ安定したと思う。

チェックも@paramだけではなく@type(デフォルトオフだけど)にも対応してたり、引数は大体チェックできる。

モチベーションとしてJSDocと実装の齟齬を見つけやすくすることがあるので、これを入れてJSDocを書いてると結構適当な書き方してると落とせて便利。

紹介記事

Babel使ってるなら入れるとメリットがあって、デメリット殆どないので、power-assertみたいな感じのツール。(ただしJSDoc書いてないとあんまり意味はない)

documentation

documentationというJSDocが書いてあるJavaScriptから、HTMLやMarkdownのリファレンスを吐くツールがある。

これのデフォルトのMarkdown出力がイケてないのでテーマを作った

reference

例) azu/ui-event-observer: Provide performant way to subscribe to browser UI Events.

--theme for Markdown · Issue #550 · documentationjs/documentationのせいで、あんまり扱いやすくはないけど、結構いい感じの出力が出せる。

JavaScriptの入門本

ES2015+を前提としてたJavaScriptの入門書を書いてる。

この書籍はES2015以降をベースとしたJavaScript入門書となる予定です。 基本的なStableのECMAScriptのバージョンを扱います。

プログラミングをやったことがあるが、今のJavaScriptがよくわからないという人が、 今のJavaScriptアプリケーションを読み書きできるようになることを目標にする内容です。 (プログラミングが初めてという人が対象ではないです) -- [meta] 全体的な設計/ユースケース一覧 · Issue #6 · asciidwango/js-primer

ソースコードなども公開されてるオープンソースなプロジェクトです。 興味がある人はIssueなどで意見とかくれると嬉しいです。

去年の今年のOSS活動振り返り @ 2015で次のような目標を書いてた。

JavaScript/ECMAScriptを改めてどう学べばいいのか考える azu/how-to-learn-es6: How to learn ECMAScript2015 for Beginner?

この目標を行動に移したのが、この本です。 予想したどおり、大きなものを書く場合モチベーションの維持が一番の課題なので、小さく意見を聞きながら進められるようにしたいなー

今年中にはなんとかする。

その他

コスト

ゴミ箱行き

作ってみたけど諦めたもの

来年

  • Almin
    • もう少し使ってもらえるように何かをやるかもしれない
    • ステートソーシングについてはある程度やったのでイベントソーシングをクライアントでやるにはどうするかを考えたい
  • asciidwango/js-primer: JavaScriptの入門書
    • どうにか仕上げたい
  • 週報 Issue
    • 何かいい方法で継続したいなー
    • 基本的に場所と必要性があれば継続できる人なので、何かが足りなかった
  • JSer.infoのような情報サイトについて
    • 中期的なまとめ記事 · Issue #85 · jser/jser.info
    • この辺について何か行動を起こしたい
    • 未知の要素が強くて行動が出しにくいという部分が大きい(できるだけコスト取りたくない)
    • リスクとコストと効果のバランスを決定してから動かすのがいいのかな?

追記: 2017-01-01 今年やりたいこと