エスペラント語関連npmパッケージ一覧・簡易調査(2018)


electronでエスペラント辞書を作るにあたってウマ味のあるnpmライブラリが無いかなと思い調査。
https://www.npmjs.com/search?q=esperanto


## new-hope
https://www.npmjs.com/package/new-hope

### 概要
Esperantoのトークナイザ(単語区切り)。
またサンプルサイトの挙動によると、単語の語根と種類(品詞)を返す模様。

トークナイズ自体は単語区切りに限らない場合もあるようだが、本パッケージの場合はサンプルサイトの挙動を見る限り、単語区切り機能の提供という意味で良い模様。
トークナイズの種類
形態素解析    単語ごとに区切る        自然言語処理に用いる
N-gram        文字数ごとに区切る        検索インデックスの作成に用いる

とはいえ。
エスペラントにおいては、英語のように空白区切りするだけで単語区切りできる。
語根もエスペラント語のルールは単純で単語毎に固有だったり例外は無いため簡単に生成出来る。
(日本語などの場合はデータから辞書を生成しておくなど高度な処理が必要。)
中身はとても単純であることが予想される。

言語 ts
テストフレームワーク jasmine (`spec/`以下)
ビルド webpack
ライセンス MIT

https://webtopi.biz/archives/350
https://qiita.com/mogulla3/items/23aaffbe29c4e600876d
http://groonga.org/ja/docs/reference/tokenizers.html

#### ソースコード

とても単純な`splitter.ts`。
```js
export const split = (text: string) => {
  return text.split(/[" " | . | , | ; | : | ? | ! | ( | )]/)
    .map((w) => w.toLowerCase().trim())
    .filter((w) => w !== "")
};
```
https://github.com/maroun-baydoun/new-hope/blob/master/src/splitter.ts

`tokenizer.ts`も100行に満たない。主語(ex.mi)などいくつかを単語リストとのマッチで判定して、あと末尾の変化を見るだけ。

# Najtingalo
brainf*ckインタプリタ。エスペラントと関係ないのでパス。

# dictionary-eo
https://www.npmjs.com/package/dictionary-eo

Hunspellスペルチェッカ経由でLibre OfficeやFirefox等のMozilla製品で使える、と書いてあるっぽい。
辞書データのソース:
http://www.esperantilo.org/index_en.html
エスペラントと複数国語間の単語の対応表である模様。日本語は含まれていない。

これ自体を何かに組み込んで使うものではなさそう。

テストフレームワーク tape?(きいたことないやつっぽい)
ビルド 独自スクリプト
ライセンス 辞書と辞書のキャシュがGPL-2.0、コード等はMIT

### ソースコード
各言語まとめてのリポジトリになっている。
辞書ファイルがママでGitHubに上がっている。
本体コードというか機能に相当するものは、エスペラント語部分には辞書データ以外に何もない模様。
見るものはない。

## ng-datefns-pipes-all-locales
https://www.npmjs.com/package/ng-datefns-pipes-all-locales

日時文字列関数ライブラリ。
日時のロケール毎の文字列表現を、足し引き比較するなどの機能を提供しており、エスペラントも対象に含まれるということの模様。

あっ、ぱっと興味がわかなかったからスルーしてしまったけれど対応sistemoの数とかツッコミどころだったかもしれないのを読んでおけばよかった(もう面倒だからいいやの気持ち)。

## mimosa-esperanto-es6-modules
mimosaなるWeb系ビルドサービスのコメントかなにかをエスペラント語で使えるようになるらしい。
リンク先の使用ライブラリのGitHubリポジトリが消えていないか?

これ単体で使うものではなさそう。

### ソースコード
2項目程度の設定しかない。
見るものはない。

テスト chai
ビルド なし
ライセンス MIT

## stopwords-eo
https://www.npmjs.com/package/stopwords-eo

ストップワードは自然言語処理(検索)を行うにあたって一般的すぎて意味がないため除外する単語(のリスト)。
https://kotobank.jp/word/%E3%82%B9%E3%83%88%E3%83%83%E3%83%97%E3%83%AF%E3%83%BC%E3%83%89-1703083

機能的にはストップワード文字列の入ったarrayを返すだけ。
本体側(stopwordsパッケージ)によると文字列arrayから実際に取り除くメソッドが生えているオブジェクトを提供しているようなのだが。

ところでこのストップワードのソースって何?
と思ったが、リンク先にソース一覧が一応ある。(見てわからないから追ってないけれど。)
https://github.com/stopwords-iso/stopwords-iso/blob/master/CREDITS.md

### ソースコード
ストップワードの列挙されたテキストファイルがあるのみ。
生成コードは本体側(stopwordsリポジトリ)にあるそうだがまあこれもJSON生成するだけと思われる。
見るものはない。

## write-int
https://www.npmjs.com/package/write-int

int型の数字を言語毎の文字列表現にして返す。

### ソースコード
親側で以下の引数3つを用意して、言語固有のwrite()に渡される。
第一引数、親側で整数を絶対値にしてから、下の桁から格納していくarrayを生成。
第二引数、プラマイを渡す。
第三引数、オプションがあるが、英語とエスペラント語では使っていない。性別で変化する語とかで使うのではないかと思う。
また数値がゼロであれば単にzero()を呼ぶ。

エスペラント対応部分はたぶんこれ。
https://github.com/Costava/write-int/blob/master/src/languages/eo.js

マイナスには対応していない模様。(MINが-1なのは「より上」ということか。)
ちょっと読み解くのに時間がかかった。単純な数字表現とはいえコードに起こすとそれなりに複雑ということか。
上位桁から3桁毎に処理して、その3桁毎は変数triで数えて3(つまり9桁)以上はbase配列に入った桁名で共通処理できる。そこから下(tri==2や1)はルールが異なる。

## gulp-esperanto-rocks
https://www.npmjs.com/package/gulp-esperanto-rocks
https://www.npmjs.com/package/grunt-esperanto
https://www.npmjs.com/package/generator-esperanto
https://www.npmjs.com/package/gobble-esperanto
https://www.npmjs.com/package/gulp-esperanto

またビルドシステムか。よくわからないからパス。

## smart-plurals
https://www.npmjs.com/package/smart-plurals

数字を入れると指定の言語により単数・複数(あればその他)の種類が分類されて返る。

### ソースコード
エスペラントは英語と一緒になっている。
https://github.com/scottrippey/Smart-Plurals/blob/master/src/Smart.Plurals/Smart.Plurals.languages-english.js

## karma-esperanto-preprocessor
anglarのプリプロセサに関係するらしい。よくわからないしどうでも良いのでパス。
https://www.npmjs.com/package/karma-esperanto-preprocessor


## bildo
https://github.com/underr/bildo

ピーマン(等?)とリチャード・ストールマンやゲイツの写真のページが出てくるらしい。
エスペラントで名前を付けたジョークアプリなのでは。

## esperanto-bundle-stream
https://www.npmjs.com/package/esperanto-bundle-stream
https://www.npmjs.com/package/gobble-esperanto-bundle

ビルドツール。パス。

## multi-stopwords
https://www.npmjs.com/package/multi-stopwords

またストップワード。こちらは複数言語を同時指定できるということ?


エスペラント辞書を作るにあたってウマ味のありそうなものが少なくてほとんどパスした気がする。
特にビルド関係。そもそもjsのビルドエコシステムあまり使ってないし、まだ英語で書いていたい。

vscode で使っているnpm packageの一覧(2018/10)

次のプロダクトとしてelectron製アプリケーションを作ろうと考えていて、アプリケーション構成を改善するための下調べの一環。

##
npmパッケージの表面を舐めていく。まずは`  "dependencies": {`
興味のないものとかは適当に説明文の単語を舐めて終わりにしてます。

    "applicationinsights": "1.0.5",
Microsoftによるnodejsアプリケーションのパフォーマンス測定パッケージ
https://www.npmjs.com/package/applicationinsights
https://docs.microsoft.com/ja-jp/azure/application-insights/app-insights-nodejs
    "fast-plist": "0.1.2",
PLISTパーサ(apple製品のzip圧縮テキストフォーマット`.ipa`ファイル)
https://www.npmjs.com/package/fast-plist
    "gc-signals": "^0.0.1",
オブジェクトのGCを監視する。
https://www.npmjs.com/package/gc-signals
    "getmac": "1.4.1",
マシンのMACアドレスを取得する(何に使ってるんだこれ...)
https://www.npmjs.com/package/getmac
    "graceful-fs": "4.1.11",
fsの互換実装。openのちょっとした自動再試行などの機能強化がされているとのこと。
https://www.npmjs.com/package/graceful-fs
    "http-proxy-agent": "^2.1.0",
    "https-proxy-agent": "^2.2.1",
URLに対してプロキシ経由アクセスを提供する。
https://www.npmjs.com/package/http-proxy-agent
    "iconv-lite": "0.4.23",
文字コード変換。ネイティブコードを使わずjsだけで出来ているのがウリとのこと。
https://www.npmjs.com/package/iconv-lite
    "jschardet": "1.6.0",
文字コード種別自動検出。Pythonからの移植らしい。
https://www.npmjs.com/package/jschardet
    "keytar": "4.2.1",
Win/Mac/Linuxのネイティブなパスワード管理システムへのバインディング
https://www.npmjs.com/package/keytar
    "minimist": "1.2.0",
コマンドライン引数パーザ。有名どころ。
https://www.npmjs.com/package/minimist
    "native-is-elevated": "^0.2.1",
管理者権限の有無を返す。
https://www.npmjs.com/package/native-is-elevated
    "native-keymap": "1.2.5",
OS/言語固有のキーマップ(共通キーコードからそれへの変換対応表)を返す。
https://www.npmjs.com/package/native-keymap
    "native-watchdog": "1.0.0",
ウォッチドッグタイマ。
js側がビジーになっていないか監視するのが目的で、C++製の別スレッドによる実装。対象がビジーになっていたら殺す、らしい。
https://www.npmjs.com/package/native-watchdog
    "node-pty": "0.7.8",
疑似端末プロセスをフォークする。ターミナルエミュレータ向け。
https://www.npmjs.com/package/node-pty
    "semver": "^5.5.0",
セマンティックバージョンパーザ。バージョン文字列をいい感じにパースして、前後順を判定する。
https://www.npmjs.com/package/semver
    "spdlog": "0.7.2",
C++製のログ出力ライブラリspdlogのnodeバインディング。
Rotateもついているらしい。
https://www.npmjs.com/package/spdlog
https://github.com/gabime/spdlog
    "sudo-prompt": "8.2.0",
必要に応じて管理者権限のダイアログを出す。
https://www.npmjs.com/package/sudo-prompt
    "v8-inspect-profiler": "^0.0.8",
ChromeDevToolsのプロトコルでV8のパフォーマンス測定を行う。
https://www.npmjs.com/package/v8-inspect-profiler
    "vscode-chokidar": "1.6.4",
    "vscode-debugprotocol": "1.32.0",
    "vscode-nsfw": "1.1.1",
    "vscode-ripgrep": "^1.2.2",
    "vscode-sqlite3": "4.0.2",
    "vscode-textmate": "^4.0.1",
    "vscode-xterm": "3.9.0-beta9",
VSCode固有のあれこれと思われるので、興味はあるがパス。さすがに数が多くて疲れてる。
    "winreg": "^1.2.4",
レジストリコマンドベースのWindowsレジストリ操作。
https://www.npmjs.com/package/winreg
    "yauzl": "^2.9.1",
unzipライブラリ。`yet another unzip library for node. `って書いてある。
https://www.npmjs.com/package/yauzl
    "yazl": "^2.4.3"
zip圧縮ライブラリ。上のやつの仲間。

##
`"devDependencies": {`いってみましょう。
    "7zip": "0.0.6",
7zipを扱う機能をnodeに提供するライブラリ。
https://www.npmjs.com/package/7zip
    "@types/keytar": "^4.0.1",
    "@types/minimist": "^1.2.0",
    "@types/mocha": "2.2.39",
    "@types/node": "^8.9.1",
    "@types/semver": "^5.5.0",
    "@types/sinon": "^1.16.36",
    "@types/webpack": "^4.4.10",
    "@types/winreg": "^1.2.30",
他で指定しているパッケージの別バージョンなので略。
    "asar": "^0.14.0",
electronアプリケーションパッケージ(asarファイル)のライブラリ。
https://www.npmjs.com/package/asar
    "chromium-pickle-js": "^0.2.0",
ChromiumによるPickleバイナリファイル(Python関係ファイルフォーマット)のパック・アンパック。
    "clean-css": "3.4.6",
cssオプティマイザ・ミニマイザ。
https://www.npmjs.com/package/clean-css
    "copy-webpack-plugin": "^4.5.2",
webpack関連。
https://www.npmjs.com/package/copy-webpack-plugin
    "coveralls": "^2.11.11",
coveralls.io とかいうサービスにカバレッジレポートを上げるらしい。
https://www.npmjs.com/package/coveralls
https://coveralls.io/
    "cson-parser": "^1.3.3",
CSON(CoffeeのJSON)のパーザ。
https://www.npmjs.com/package/cson-parser
    "debounce": "^1.0.0",
本ライブラリで生成した関数は、2回以上呼ばれた場合に前の実行から一定時間が経つまで次の実行を遅延する。
    "documentdb": "^1.5.1",
AzureのDBと繋げるって書いてある。
https://www.npmjs.com/package/documentdb
    "electron-mksnapshot": "~2.0.0",
mksnapshotパッケージに必要なバイナリをダウンロードするためだけのパッケージ。
https://www.npmjs.com/package/electron-mksnapshot
    "eslint": "^3.4.0",
eslint。
    "event-stream": "^3.1.7",
ストリーム(パイプ)志向な処理シーケンスを提供する。
https://www.npmjs.com/package/event-stream
    "express": "^4.13.1",
サンプルを見るにシンプルなWebサーバ的なものが作れる様子。
https://www.npmjs.com/package/express
    "glob": "^5.0.13",
ファイルパスパターンマッチ(glob)。.gitignore的なものらしい。
`*`を使ったシンプルなものだけでなく、正規表現っぽいのもいける模様。
https://www.npmjs.com/package/glob
    "gulp": "^3.8.9",
    "gulp-atom-electron": "^1.19.0",
    "gulp-azure-storage": "^0.7.0",
    "gulp-buffer": "0.0.2",
    "gulp-concat": "^2.6.0",
    "gulp-cssnano": "^2.1.0",
    "gulp-eslint": "^3.0.1",
    "gulp-filter": "^3.0.0",
    "gulp-flatmap": "^1.0.0",
    "gulp-json-editor": "^2.2.1",
    "gulp-mocha": "^2.1.3",
    "gulp-plumber": "^1.2.0",
    "gulp-remote-src": "^0.4.0",
    "gulp-rename": "^1.2.0",
    "gulp-replace": "^0.5.4",
    "gulp-shell": "^0.5.2",
    "gulp-tsb": "2.0.5",
    "gulp-tslint": "^8.1.2",
    "gulp-uglify": "^3.0.0",
    "gulp-util": "^3.0.6",
    "gulp-vinyl-zip": "^1.2.2",
なんかいろいろある。gulp大変なのかVSCodeが大きいから仕方ないのか。

    "husky": "^0.13.1",
git hookって書いてある。package.confか.huskyrcに設定が書いてあると言う風に読める。
https://www.npmjs.com/package/husky
    "innosetup-compiler": "^5.5.60",
windows向けinnoインストーラシステムを提供する。
https://www.npmjs.com/package/innosetup-compiler
    "is": "^3.1.0",
テストライブラリ。オブジェクトの型など判定するメソッド集。
https://www.npmjs.com/package/is
    "istanbul": "^0.3.17",
カバレッジテストツール。
https://www.npmjs.com/package/istanbul
    "jsdom-no-contextify": "^3.1.0",
ブラウザ無しで使えるdomを提供するjsdomの仲間という理解で良いか。
https://www.npmjs.com/package/jsdom-no-contextify
    "lazy.js": "^0.4.2",
 Underscore や Lodash的なもの? 並列実行ライブラリということでいいのか。
 https://www.npmjs.com/package/lazy.js
    "merge-options": "^1.0.1",
plain objectをマージする。
https://www.npmjs.com/package/merge-options
    "mime": "^1.4.1",
MIME type(text/plainとか)を判定したり適した拡張子を返したりする模様。
https://www.npmjs.com/package/mime
    "minimatch": "^3.0.4",
globを提供する。
https://www.npmjs.com/package/minimatch
    "mkdirp": "^0.5.0",
`mkdir -p`を提供する。
https://www.npmjs.com/package/mkdirp
    "mocha": "^2.2.5",
    "mocha-junit-reporter": "^1.17.0",
テストフレームワーク。
    "optimist": "0.3.5",
コマンドライン引数パーザ
https://www.npmjs.com/package/optimist
    "p-all": "^1.0.0",
並行数を制限しつつPromiseベースのasyncを実行する?
https://www.npmjs.com/package/p-all
    "pump": "^1.0.1",
パイプ的なものを提供する。
https://www.npmjs.com/package/pump
    "queue": "3.0.6",
Queueに詰め込んだタスクを非同期並列実行する。
https://www.npmjs.com/package/queue
    "rcedit": "^1.1.0",
Windows実行ファイルのrcリソースを編集する。
https://www.npmjs.com/package/rcedit
    "remap-istanbul": "^0.6.4",
イスタンブールの仲間と思うのでパス。
    "rimraf": "^2.2.8",
`rm -rf`を提供する。
https://www.npmjs.com/package/rimraf
    "sinon": "^1.17.2",
test用のスタブとモック
https://www.npmjs.com/package/sinon
    "source-map": "^0.4.4",
Source Maps(ミニファイやビルドしたjs,cssのためのデバッグシンボル)を作る
https://www.npmjs.com/package/source-map
    "ts-loader": "^4.4.2",
    "tslint": "^5.9.1",
    "typescript": "3.1.1",
    "typescript-formatter": "7.1.0",
    "uglify-es": "^3.0.18",
typescript系。当面使用予定なしにつきパス。
    "underscore": "^1.8.2",
関数プログラミングライブラリ
https://www.npmjs.com/package/underscore
    "vinyl": "^0.4.5",
    "vinyl-fs": "^2.4.3",
(`basename`などの)ファイルパスユーティリティ。
https://www.npmjs.com/package/vinyl
    "vsce": "1.48.0",
VSCode Extension Manage
https://www.npmjs.com/package/vsce
    "vscode-nls-dev": "3.2.2",
https://www.npmjs.com/package/vscode-nls-dev
    "webpack": "^4.16.5",
    "webpack-cli": "^3.1.0",
    "webpack-stream": "^5.1.1"
webpack。
  },
```

```js

  "repository": {
    "type": "git",
    "url": "https://github.com/Microsoft/vscode.git"
  },
  "bugs": {
    "url": "https://github.com/Microsoft/vscode/issues"
  },
```
特に書くことは無い。

```js
  "optionalDependencies": {
    "windows-foreground-love": "0.1.0",
    "windows-mutex": "^0.2.0",
    "windows-process-tree": "0.2.3"
  }
}
```
まあWindowsのことはいいか、ということで。パス。



electronアプリをbrowserifyしてAndroid移植したmemo

現実世界のelectronでnodejsな趣味コードをbrowserifyした際の知見。 ==== 世の中のまともなプロjsエンジニアは最初からボイラープレートでgulpなビルドパイプラインを構築してまっさらなプロジェクトにjsxコードをおもむろに書き始めるとかしているのだと思い...