ライブラリの紹介文でよく見かけるけどいまいち意味が分からない英単語

ライブラリの紹介ページや GitHub のリポジトリで登場する「割と見るけど意味はよくわからない単語」をまとめてみました
誤りがあればガンガン指摘してもらえると助かります

## `opinionated`

意味をググると「[形容詞] 自説を固執する」という謎の和訳が出てきて理解を諦める方もいるんじゃないでしょうか
opinionated については色々な記事で紹介されています

- https://qiita.com/baby-degu/items/7dc4548bf7befc2671f4#opinionated%E3%81%A8un-opinionated
- https://stackoverflow.com/questions/802050/what-is-opinionated-software

プログラミングの文脈に落とし込むと「ライブラリやフレームワークが定義したやり方に利用者（プログラマ）を従わせるような◯◯」というようなニュアンスになります
このニュアンスを掴むと、和訳の「自説を固執する」というのもなんとなくしっくりくると思います

独裁的な意味に聞こえますが別に悪いことではなく、ライブラリが用意したやり方に沿ってコーディングすればいい感じになるよ、と言ったポジティブなニュアンスです

## `declarative`

日本語では「宣言的」という意味です。これも Qiita に解説している記事があります

- https://qiita.com/Hiroyuki_OSAKI/items/f3f88ae535550e95389d#declarative-vs-imperative

簡単に言うと「やりたいことをそのまま書けば実現できる・実現したい状態を記述すればライブラリがいい感じにしてくれる」というようなニュアンスになります
まだ抽象的で分かりづらいと思うので、雑で恣意的な例を出します

「Hello world」と書かれたボタンを作りたい場合、 declarative なライブラリであれば

```
<Button>Hello world</Button>
```

とすればボタンが作れます。 declarative の対義語である imperative （命令的）なライブラリであれば

```
// 座標 (0, 0) から (10, 10) に矩形を描く
drawRectangle(0, 0, 10, 10);
// 座標 (0, 5) を始点にして Hello world というテキストを描画する
drawText('Hello world', 0, 5);
// 座標 (0, 0) から (10, 10) をクリック可能な領域に設定する
setClickableArea(0, 0, 10, 10);
```

のように書く必要があります。一長一短あるのでどちらかが圧倒的に優れている、という訳ではないと思うのですが、最近は declarative なものが好まれている傾向にあるようです

## `pluggable`

プラグイン等の拡張機能をユーザー側が自分で作成して、独自にライブラリやツールを拡張できるような場合に使われます

## `out-of-the-box`

初期設定や面倒なセットアップ無しでインストールするだけで使えるような場合に使われます
`ready-to-use` も同義語です

## `-aware`

「何かを理解している」「何かを知っている」という意味になります。これは具体例がないと分かりづらいと思うので「semgrep」というツールを紹介します

https://github.com/returntocorp/semgrep

semgrep は紹介文に「syntax-aware semantic code pattern search for many languages: like grep」と書いてあります。
要約すると「syntax-aware grep」、つまり「構文を理解している grep」です
このツールがどのようなものなのかを知るとニュアンスが掴めるかもしれません

```js
// file.js

function log(msg) {
  var el = document.querySelector(".log");
  el.innerHTML += "<p>" + msg + "</p>";
}

log("msg");
```

例えばこのような JavaScript コードがある場合、

```
semgrep --lang javascript --pattern '$ELEMENT.innerHTML' file.js
```

と実行すると「構文的に `HTMLElement.innerHTML` となっているような箇所」を探してくれます
今回 `document.querySelector` の返り値である `HTMLElement` は `el` という変数に格納されていますが `el.innerHTML` は構文的には `HTMLElement.innerHTML` であるので、semgrep はこの部分を見つけ出してくれます

このように semgrep は構文を理解している grep、つまり syntax-aware grep と言えます

semgrep に興味がある方はここから今回紹介した例と同様のデモを試すことができます
https://semgrep.live/9ze

## `-agnostic`

これも意味をググると詰む単語で上位にランクインすると思います。「agnostic 意味」でググってしまうと「不可知論者」という訳の分からない日本語が出てきます
プログラミングの文脈では「何かに依存しない」という意味になります
例えば `implementation-agnostic` と言えば「実装に依存しない◯◯」、`framework-agnostic` と言えば「フレームワークに依存しない◯◯」となります。他にも `protocol-agnostic` 「プロトコルに依存しない」であるとか `OS-agnostic` 「OS に依存しない」なんかがあります

Stack Overflow に同様の質問があります

- https://stackoverflow.com/questions/10969057/what-does-implementation-agnostic-mean

## おまけ: 使うとかっこいい単語

意味は分かるけどよくでてくるものもおまけで集めてみました。英語でライブラリを公開するときなんかに紹介文でこの単語を使っておけば多分かっこよくなります

### 割と自由に使っても許されそうな単語

#### `powerful` 

作ったものがパワフルなときに使います。明確な基準は多分無いので自分がパワフルだと思ったら積極的に採用しましょう

#### `elegant`

デザインが優雅であるとか、処理が上品であるとか、何かしらエレガントであると思えるポイントがあるときは使えます

#### `pragmatic`

これもよく見ます。「実用的」という意味です。理想論ではなくて現実的に問題を解決している場合に使えそうです

#### `effective`

日本語にすると「効果的」です。何かしら手段が省けたり、少しの手間で大きなことが実現できたりする場合に使えそうです

#### `straightforward`

結構見かけますね。「わかりやすい」とか「単純である」とか、複雑でない場合に使えそうです

### ある程度根拠が必要になる単語

#### `flexible`

設定を自由に変えることができるとか、特定のユースケースに固定されないとか柔軟な感じのときに使えます。その名前とは裏腹に `powerful` `elegant` ほど柔軟には使えなさそうです。理由を持って何が flexible なのか説明できるようになってから名乗ったほうが良さそうです

#### `faster`

既存のツールやライブラリと比較して実行や処理が速い場合に使えます。特に比べるものが無いけど速い場合は `fast` を使いましょう。ただ `faster` のほうがキャッチーな感じがするので仮想敵を見つけて `faster` とした方が良さそうです

#### `lightweight`

サイズが軽量であるとかメモリ使用量が少ないであるとか処理が軽量であるとか、何かしら軽いポイントがある場合に使えます。 `faster` と組み合わせるとかっこいいです

#### `state-of-the-art`

「最先端」という意味です。新しい仕組みや理論を採用したときに使うことで他のライブラリと一線を画すことができます

#### `blazing`

「燃えるような」という意味ですが、ニュアンスとしては強調表現として使われています。「とても速い」と言うときは very fast ではなく blazing fast と言うとかっこよくなります

## おわりに

他にも「よく使われてるけど辞書で調べても意味が分かりにくい単語」や「よく使われていてなんとなくかっこいい単語」をご存知の方いたらぜひコメント欄で教えて下さい

それニュアンス違うんじゃない？って指摘もぜひお願いします