JavaScriptのプラグインシステムについて書いた小さな電子書籍であるJavaScript Plugin Architecture 2.0をリリースしました。

1.0(初版)公開時の記事は次のページから参照できます。

2.0の詳しい変更点についてはリリースノートを参照してください。

2.0リリース時にGitBookからHonKitに移行しました。 そのため、公開するURLが次の場所に変更されています。

(GitBookの古いやつを消したりする方法がわからなかった…)

2.0はURLの変更とリファクタリングがメインなので、項目としては大きくは変わっていません。

あらためてJavaScript Plugin Architectureで紹介しているプラグインアーキテクチャとしては次のようになっています。


jQuery

jQueryのプラグインについて解説しています。 <script>タグをベースとしたプラグインアーキテクチャについて解説しています。

ESLint

ESLintのルールを拡張する仕組みについて解説しています。 ESLintではJavaScriptのコードをパースして作成されたASTを元にコードのLintを行います。 実際にESLintのルールを解釈できる小さな実装を作りながらプラグインの仕組みについて学びます。

Connect

Connectの middleware と呼ばれるプラグインアーキテクチャについて解説しています。 Node.js以外においても_Rack_などHTTPサーバーでよく見られるプラグインを使った階層構造について学びます。

gulp

タスク自動化ツールとして知られるgulpのプラグインアーキテクチャについて解説しています。 gulpではデータの流れとして既存のNode.js Streamを使い、そこで流すデータとしてvinylオブジェクトを利用します。 実際にgulpプラグインを書きながら、gulpのプラグインの仕組みについて学びます。

Redux

アプリケーションのStateを管理ライブラリのReduxのプラグインアーキテクチャについて解説しています。 Reduxでは middleware と呼ばれる拡張の仕組みを持っていますが、Connectとの類似点や相違点があります。 小さなReduxの実装を作りながら middleware の仕組みについて学びます。


JavaScript Plugin Architectureはライブラリやツールごとに章が独立しています。そのため、新しいプラグインの仕組みについては誰でも追加しやすくなっています。

CONTRIBUTING.md新しいプラグインの仕組みを書く場合の方法が記載されているので、JavaScript Plugin Architectureにこのライブラリやツールのプラグインの仕組みを書きたいという人はまずIssueを作ってみてください!

次のようなテンプレートを使っているので、これを埋めるように書いていくだけです。

# XXXのアーキテクチャ

## どう書ける?

- 実際のコード例

## どういう仕組み?

- prototypeを拡張しているなど具体的な仕組み
- その機構のコードへのリンク
- その仕組みやプラグインについてドキュメントへのリンク

## どういうことに向いている?

- どういう用途で使われてる(ユースケース)
- 変換する毎にファイルとして吐き出さないので、高速に複数の変換をするのに向いている等

## どういうことに向いていない?

- 変換の仕組み上書き換え等を行うプラグインを扱いにくい等

## この仕組みを使っているもの

- XXX以外にも同様の仕組みを使っているものがあるなら

----

## チェックリスト

- [ ] どう書ける?
- [ ] どういう仕組み?
- [ ] どういうことに向いている?
- [ ] どういうことに向いていない?
- [ ] この仕組みを使っているもの
- [ ] 実装してみよう
- [ ] エコシステム

このプロジェクト自体がtextlintの開発を進めるために作られた部分もあります。 そのためクオリティとかはそこまで気にしないで、こういうプラグインの仕組みがあるよというのをテンプレートに沿って書いてく感じで大丈夫だと思います。

IssueやPRを作ってもらえればレビューとか相談にのるので、JavaScriptのプラグインの仕組みを文章化したいときに使ってみてください。

プロジェクトの目的は、最初に紹介した記事でも書いています。

JavaScript Primerでも基本的に同じ形ではありますが、 JavaScript Plugin Architectureはもっとラフな実験的なプロジェクトなので、 普通のライブラリやアプリと同じ感覚で文章をContributingしてください!