GitHub上のnpmパッケージ名をリンクに変えるChrome拡張GitHub Linkerで捗る
GitHub上のソースコードでrequire('morgan')
とか書いてあって、このパッケージってなんだっけ?って "npm + morgan" でググってnpmのサイトかGitHubリポジトリを探すことってよくある。
ありすぎるので、自動リンク化するChrome拡張書こうかなと思って先行実装が無いかググったら、見事にあった。日本語でほとんど紹介されてなかったので紹介するのでNoderは今すぐインストールすべし。
これをインストールすると、GitHub上のファイル(.js, .jsx, .coffee, .md)内のパッケージ名部分が該当パッケージのGitHubリポジトリへのリンクになる*1。
対応しているパッケージシステムは以下。
- npm
- bower
- Duo
- Node.js標準ライブラリ (https://iojs.org/api/ にリンクされる)
- Composer (PHP)
対応しているリンク形式は github-linker/core に詳しく書いてあるけど、
に加えて、
なんかも解決してくれてさらに捗る。
OSSなのでさらに良い
Chrome拡張のソースコードもOSS化されてGitHubに公開されている。
実装はいくつかのnpmモジュールに分割 & browserifyビルドされていて、Chrome拡張にありがちなごった煮コードではないのが良い。また最近もアクティブに開発されているのでプルリクやissueを投げてみると反応はありそう。とりあえずGitHub Enterprise対応はする予定っぽい。Rubyの人たちもGem対応をプルリク投げたりすると捗るかも(すでにそういうのあるのかな?)。
あとGitHub本家にこの機能を取り込んでくれ!っていう場合はこのissueにvoteしときましょう。
最後に簡単に各内部モジュールの説明。それぞれ個別にnpmで公開されてる。
- github-linker/chrome-extension: browserifyでcoreをChrome拡張としてビルド
- core: GitHub上の文字列をリンクに置き換えるメインロジック
- resolver:
user/repo@branch
等の文字列をGitHub URLに変換するロジック - cache: npm, bower等のパッケージ名とGitHub URLのマップのキャッシュ
- injection: GitHubでシングルページ的な画面遷移が発生したイベントでコードを注入するライブラリ
resolverやinjectionはこの拡張と独立してるので、GitHub関連でChrome拡張を書くときに使うと便利かも。