Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Discussion: jamstack word treatment #279

Closed
philhawksworth opened this issue Mar 11, 2020 · 31 comments
Closed

Discussion: jamstack word treatment #279

philhawksworth opened this issue Mar 11, 2020 · 31 comments
Assignees
Labels
discussion A request for input from the community

Comments

@philhawksworth
Copy link
Member

philhawksworth commented Mar 11, 2020

Discussion: jamstack word treatment

Note to the reader:

This issue discusses how we write "JAMSTACK". I'm going to have to write the word itself a number of times in the issue as a result... which is bound to result in LOLs. So I'll normalise on jamstack for a while. This is not a statement of intent!

Goals of this issue

  • Gather thoughts from the community about the best way to present the word jamstack when written
  • Minimize confusion, maximize clarity
  • Seek consensus on the best way to avoid confusion when communicating what jamstack is
  • It would be useful to be able to be consistent ourselves, and offer a place to find the "generally accepted" word written as a reference.

Current challenges and observations

  • Naming things is hard!
  • The word was derived from JavaScript, APIs and Markup, but you don't have to use all 3 when adopting this architectureal model. So right away, by writing "JAMstack", we introduce confusion when explaining what this is.
  • Most people using the term regularly tends to be using the form "JAMstack"
  • The wider community currently use various ways of presenting the word, and we would like to be consistent
  • I (Phil 👋) quietly experimented with a revised treatment on jamstack.org without discussing it or announcing it first. This created more confusion and discussion than I anticipated! My bad. Apologies!
  • Chris Coyier observered and commented on our flux nicely: https://css-tricks.com/jamstack-vs-jamstack/
  • If we feel it appropriate to follow the lead of things like "LAMP", then we might note that this is generally referred to as "LAMP stack"
  • If we would take inspiration from things like "AJAX", then we might note that this is generally referred to as "Ajax" (see below)
  • Naming things is hard!

Proposal and justification

My opinion is that we should adopt "Jamstack" as our norm.

  • It avoids the common first question of "what does that stand for?", more often instead prompting, "what is that?"
  • It's easier to avoid well-intentioned consistencies than are common with "JAMstack" (JAM Stack, JAM stack, JAMStack)
  • and as I mentioned on the jamstack slack:

I'd just offer this one comparison: Ajax.

When I first started using Ajax, it was always called "AJAX" and stood for Async JavaScript And XML. Over time, JSON became more popular than XML with this pattern, but we still called it the same thing. And these days we'd refer to it as "Ajax" (if at all, lol) because what it stands for is more than what the acronym consists of.

Over the last 5 years since the term was coined, the ecosystem which enables the jamstack has evolved and matured so much. The term needs to not divert attention away from that fact, and towards the original acronym. — I believe that jamstack stands for so much more than using JavaScript, APIs and Markup. I think it stands more for:

  • Pre-rendering as much as possible
  • Serving a site with static assets, without the need for a webserver executing logic to create responses on demand
  • Enhancing with JavaScript and leveraging browser APIs where appropriate
  • Feasting on the flourishing API economy, and decoupling our own services into APIs which our UIs can consume.

...but I'm keen on wider perspectives about the word.

For discussion

So... how should we normalise how we write this word?

@philhawksworth philhawksworth added the discussion A request for input from the community label Mar 11, 2020
@philhawksworth philhawksworth self-assigned this Mar 11, 2020
@jakeherp
Copy link

I believe JAMstack is most correct since it's an acronym just like MERN stack or LAMP stack vs. Mern and Lamp.

@philhawksworth
Copy link
Member Author

That's true @jakeherp. That was its inception.

Any thoughts on when you use this architecture but you are not using APIs or JavaScript? That's where some confusion creeps in.

Ajax started as an acronym too, but the meaning became refined.

@jakeherp
Copy link

@philhawksworth is it truly a Jamstack site if it isn't using APIs or JS? Just like a React site without Express and MongoDB wouldn't be a MERN site, but simply a React site.
I get your point that a Hugo site is considered Jamstack even though it's based on other technologies, but perhaps that's where the distinction should be different?

@michrome
Copy link

Did AJAX become Ajax because we send data other than XML, or is that just a coincidence? Are there other examples of acronyms moving from UPPERCASE to Titlecase?

@philhawksworth
Copy link
Member Author

@philhawksworth is it truly a Jamstack site if it isn't using APIs or JS?

Yes it absolutely is.

This is one of the main pieces of confusion that I'm trying to address. Many people are pushing back on jamstack because they believe that it dictates that they MUST use client-side rendering and call out to APIs.

That is a powerful option, and often useful and appropriate. But certainly not a requirement. And often not needed.

The strap-line on jamstack.org is:

Fast and secure sites and apps delivered by pre-rendering files and serving them directly from a CDN, removing the requirement to manage or run web servers.

And the way I personally elaborate on that is as I did above:

  • Pre-rendering as much as possible
  • Serving a site with static assets, without the need for a webserver executing logic to create responses on demand
  • Enhancing with JavaScript and leveraging browser APIs where appropriate
  • Feasting on the flourishing API economy, and decoupling our own services into APIs which our UIs can consume.

@StarfallProjects
Copy link

@jakeherp I've always understood the "JavaScript" in JAM to be frontend JS, not the tech the static site generator is built with (given you can have SSGs in Go, Python, Java, Bash etc.)

@michrome
Copy link

  • Pre-rendering as much as possible
  • Serving a site with static assets, without the need for a webserver executing logic to create responses on demand
  • Enhancing with JavaScript and leveraging browser APIs where appropriate
  • Feasting on the flourishing API economy, and decoupling our own services into APIs which our UIs can consume.

Psefstack's got a nice ring to it! 🤡

@philhawksworth
Copy link
Member Author

Did AJAX become Ajax because we send data other than XML, or is that just a coincidence? Are there other examples of acronyms moving from UPPERCASE to Titlecase?

I'm honestly not sure. But we didn't change the Acronym to AJAJ so much as shift towards accepting the term as a description of the model rather than as a strict acronym.

@StarfallProjects
Copy link

I think one umbrella term for "using a site generator and not worrying about the backend too much" (or Phil's more sophisticated definitions!) is useful.

I agree JAMStack feels "more correct", and jamstack gets on my tech-writery nerves, but I can see why having to explain "oh it stands for this, but you don't HAVE to use JS or APIs" gets tedious and confusing.

With regard to the AJAX example: while I'd probably write ajax casually, when writing an article/tutorial, or proofreading, I would still correct it to AJAX, as it's an acronym. So perhaps we need to think about what we're deciding on here. Are we discussing how we're going to use the term casually, as a community (in which case, jamstack is inevitable - that shift key is hard to reach!), or if we're going to try and govern a "proper" brand name. On which note - is it an official brand name at all?

I'd suggest that whatever happens, we're stuck with some variation on jam. The term is so widely used. That said, if it ever changes completely, switching to "Marmalade" would be my vote.

@philhawksworth
Copy link
Member Author

That said, if it ever changes completely, switching to "Marmalade" would be my vote.

LOLOL!

starts designing a logo containing Paddington Bear

@philhawksworth
Copy link
Member Author

and jamstack gets on my tech-writery nerves...

Just in case there is any confusion or is this was your meaning, I'm advocating for "Jamstack", not "jamstack"

Good points, @StarfallProjects.
I'm not trying to cite Ajax as strict prior art which we should follow to the letter (pun very happily intended)... just think it is an interesting reference.

My hope here is mostly to help us reach agreement on what how we might reasonably expect to see term written consistently on the jamstac.org site, and what conventions we might like to adopt in our wider usage.

jamstack.org is the natural place for people to come to learn "what is this thing?" so at the very least I'd like to have consistent and non-distracting usage here. And like many (I expect) I'd personally adopt what we settle on in my own writings and materials, for the sake of consistency.

@michrome
Copy link

michrome commented Mar 11, 2020

As @StarfallProjects points out: an English, non-technical reader will interpret a sequence of capital letters as an acronym. Acronyms are useful because:

  1. the reader can understand the concept without having to know what the letters stand for. AIDS is an example for many people;
  2. if the reader does know what the letters stand for, they benefit from that additional information: Acquired Immune Deficiency Syndrome (I had to look it up!).

In contrast, we tend to read words starting with one capital letter as proper nouns e.g. "Netlify", "War and Peace" or "Buckingham Palace". Proper nouns are frequently unambiguous in their definition: a legal entity (company), a book with an ISBN or a specific building in London.

JAM stack seems most aligned to non-technical English writing in my opinion.

@colbyfayock
Copy link

colbyfayock commented Mar 11, 2020

i think its a compelling argument that other stacks separate out the word stack from the name, regardless of capitalization. i'm on the JAM camp, but I understand the reasonings here

@philhawksworth do you have any observations from the experiment yet? any "results" i guess?

I'm personally under the impression that you're going to be led to explaining the situation regardless because people are generally curious. "what's jamstack? oh how did you come up with that?"

@colbyfayock
Copy link

colbyfayock commented Mar 11, 2020

Just in case there is any confusion or is this was your meaning, I'm advocating for "Jamstack", not "jamstack"

would the logo conform to this? the updated version has a lowercase j 🤔

@n-ham
Copy link

n-ham commented Mar 11, 2020

I'm on team JAMstack, even for websites that aren't all made with 'jam'.

@philhawksworth
Copy link
Member Author

JAM stack seems most aligned to non-technical English writing in my opinion.

This is a valuable point, @michrome!

I'm personally under the impression that you're going to be led to explaining the situation regardless because people are generally curious. "what's jamstack? oh how did you come up with that?"

Yeah, I think that's true @colbyfayock. Although I currently find myself including 2 extras steps of saying, "It stands for JavaScript, APIs, and Markup"... quickly followed by, "but you don't need to use all 3 of those!"

I've found that adds a little confusion. And to @michrome's point, if it is an acronym, them making that plain to people without (or with!) English as a first language is useful... as long as the acronym doesn't lead us away from true meaning.

These are all great points, and food for thought!

@philhawksworth
Copy link
Member Author

@philhawksworth do you have any observations from the experiment yet? any "results" i guess?

Only anecdotal. And not at all scientific. I've not been pushing it hard in public channels as I rather wanted to have this conversation first.

but it seems to land well when I've gone straight to the architectural model, and not put the J, A and M up front.

I suppose a better test is in how people comprehend it when reading about it, rather than being walked through an explanation.

@remotesynth
Copy link

I am for keeping it JAMstack for now for several reasons.

  1. I think the acronym is still useful. Part of why AJAX became Ajax was because the X became less relevant. However, when teaching people what the JAMstack is, the JAM part is still very useful in explaining the parts, even if what it represents is perhaps too vague and the M stands for way too many pieces...but still relevant.
  2. I think we're getting too deep into trying to brand this. Afaik, Ajax didn't change because of a branding effort. It just kind of happened. Meanwhile LAMP never became Lamp. We're only about 3 years into introducing the concept and it's only been in the past year that it has really taken hold. That being said, most devs are still new to it or don't even know about it. Shifting branding at that point can cause confusion.

While I agree that the acronym can cause confusion at times, I think we just need to do a better job of clarifying what the acronym is about. I see too many people confused into thinking the J for JavaScript is about JavaScript frameworks - I don't think it is beneficial for the ecosystem for folks to think it requires using React. I see too many people think M is for Markdown rather than markup. Despite these issues, I still find the acronym useful in explaining what the concept is. It adds tangible tools and technologies to an otherwise amorphous concept.

@chriscoyier
Copy link

I kinda prefer "Jamstack", as this make a lot of sense to me:

It avoids the common first question of "what does that stand for?", more often instead prompting, "what is that?"

Absolutely non-scientifically, I bet some double-digit % of people think the M stands for Markdown. J and A are like the same thing to me, and I don't really need some architectures permission to use JavaScript to hit an API on my website.

I just don't think the acronym is all that meaningful and it's more interesting to wonder what is that? and find out.

@DigitalHodgePodge
Copy link

I just don't think the acronym is all that meaningful...

While this statement seems pretty accurate seeing as jamstack doesn't need JavaScript or APIs, I do feel that there is some benefit in emphasizing the acronym. One such benefit is the implication that JavaScript and APIs are key technologies for the stack that should be used (when applicable).

If we are instead reducing their importance in the stack, it seems something like "Flatstack" would be a much more appropriate name. Worse still would be going the MV* route and winding up with **Mstack. 😅

All that said, I am mostly playing devil's advocate here, and I kind of like "Jamstack" just for the sake of helping people remain consistent and the ease of typing it out on mobile devices... but I do wonder if it should officially remain "JAMstack" and allow natural progression through usage.

@philhawksworth
Copy link
Member Author

Lots of excellent points in this thread! Some which resonate with me more than others, but all very well stated. Thanks everyone!

It looks to me like there is a little more leaning from this group towards "JAMstack" than to "Jamstack" at this point.

I'll leave this discussion open for a while longer and will take all these things into consideration as we work on an iteration to the jamstack.org site.

@jlengstorf
Copy link
Contributor

I'll weigh in here. I'm pretty aligned with @chriscoyier on this front:

I don't really need some architectures permission to use JavaScript to hit an API on my website.

This gets at the core of my issue with "JAM" as an acronym: it’s a meaningless acronym.

MEAN and MERN apps are also using JavaScript, APIs, and Markup — are they Jamstack sites? A PHP site that calls an API and renders markup that includes JavaScript — is that Jamstack?

If we're calling JAM an actual tech stack, these examples use the "stack". but they're definitely not what we mean when we say "Jamstack".

The Jamstack is not a stack; it's a software architecture (like microservices). It's unfortunate that it's phrased as one, but I think we're only making our lives harder if we treat "Jamstack" the same way we treat MEAN or MERN or LAMP, which are actual, opinionated stacks.

I think it's impractical to completely rebrand, but I think moving away from an ambiguous acronym and toward a general label that describes an architecture would be a Good Thing™. 💜

@philhawksworth
Copy link
Member Author

That's my personal leaning too, @jlengstorf. But I think currently the majority of voices are tending the other way.

We'll keep this thread going a little while longer before we formalise our language on the v2 of the site.

Ultimately, the wider community will do what the wider community does, but we'll at least try to be consistent here :)

@delster
Copy link

delster commented Mar 25, 2020

Just wanted to drop by and +1 the Jamstack as being clearer to introduce than JAMstack, especially in the context of sites/apps that don't check all the JAM boxes, where you have to circle around and explain "Jamstack" (little jam) and why it's the same thing.

My head canon is that we started with JAMstack referring to things with JAM; an actual stack, and now we have the Jamstack which has outgrown having JAM as a constraint.

We could just collectively agree all JAMstacks are Jamstacks but not all Jamstacks are JAMstacks.

@bnb
Copy link

bnb commented Apr 1, 2020

The Jamstack is not a stack;

if this is the case then it probably should not include stack in the name.

I think it's impractical to completely rebrand, but I think moving away from an ambiguous acronym and toward a general label that describes an architecture would be a Good Thing™. 💜

The problem here is that changing from JAM to Jam only serves to introduce further confusion.

DEVELOPER: "So it's not a stack?"
JAMSTACK-Y DEVELOPER: "No, it's an architecture."

This is some galaxy-brain level indirection that amplifies confusion and introduces a further need for explanation of an already confusing concept, which ends up pushing people away rather than bringing them in.

Additionally, any jam (as in the thing you put on bread) branding becomes relatively meaningless since it's just a mush of letters rather than the JAM being a separate entity.

@bnb
Copy link

bnb commented Apr 1, 2020

For context, how would y'all describe the architecture in 1-3 sentences? I see the bullets in the OP but curious how you'd explain it simply to a human.

As an example, I would say this is a pretty good way of explaining Microservices:

In short, the microservice architectural style [1] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API.

ref: https://martinfowler.com/articles/microservices.html

@philhawksworth
Copy link
Member Author

Yeah you highlight some clear challenges with the name, @bnb. But we're not talking about changing that name. Especially now, as 5 years after being coined, it is starting to get some real purchase.

Naming stuff is hard. But this is the label we've been using.

On the site try to summarise concisely with:

Fast and secure sites and apps delivered by pre-rendering files and serving them directly from a CDN, removing the requirement to manage or run web servers.

@bnb
Copy link

bnb commented Apr 1, 2020

But we're not talking about changing that name.

I definitely understand this and where you're coming from, despite fundamentally disagreeing with it ❤️

@philhawksworth
Copy link
Member Author

Ok... this discussion has been open for 3 weeks now, and there has been some really helpful conversation. Thanks to all for weighing in!

It was probably a little optimistic to hope that we would all arrive at the exact same conclusion and be 100% decisive and aligned. As different perspectives joined I've personally swayed in both directions. 🙂


But let's wrap this up. It looks like just a little more support for those advocating for "Jamstack".


So, this is the path we will take on the jamstack.org site. And we'll work to do that consistently in the content we add, and in the design.

My hope is, that even if some opinions differ, the site will be consistent and clear, and all the people arriving fresh to the term and the concept, will have a less confused experience. And that it feels more natural to people when writing the word in materials.

Many thanks again.

@emaildano
Copy link

Great read! it was interesting to see a variety of perspective. 🍻 👍

@benatkin
Copy link

benatkin commented Jun 24, 2020

Good call. Jamstack is the way going forward to bring a wide audience and make it easy to fit into any style guide. JAMstack is our roots. JAMStack (s capitalized) and JamStack are incorrect.

th1988 added a commit to th1988/create-nuxt-app that referenced this issue Mar 7, 2021
th1988 added a commit to th1988/create-nuxt-app that referenced this issue Mar 9, 2021
kawamataryo added a commit to kawamataryo/zenn-articles that referenced this issue Mar 20, 2021
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict
index 8623550..80fecc7 100644
--- a/.cache/kvs-node-localstorage/proofdict
+++ b/.cache/kvs-node-localstorage/proofdict
@@ -1 +1 @@
-[{"id":"01BQ92YWWJ1XF356X492WM4GB3","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"かかわらず","patterns":["/関わ?らず/"],"specs":[{"from":"関わらず","to":"かかわらず"},{"from":"関らず","to":"かかわらず"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWT86VKCFD2GCM3KWV4","description":"(動詞の場合)漢字を使う","expected":"$1付く","patterns":["/(気が|利子が)つく/"],"specs":[{"from":"気がつく。","to":"気が付く。"},{"from":"利子がつく。","to":"利子が付く。"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
+[{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YWWKN8RQSJ5QS25W0VGE","description":"","expected":"およそ","patterns":["凡そ"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWJW5M546Z0VEDHG0RZ","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1あとで","patterns":["/(して|した|、)後で/"],"specs":[{"from":"して後で","to":"してあとで"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated
index 9f14393..7bf3569 100644
--- a/.cache/kvs-node-localstorage/proofdict-lastUpdated
+++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated
@@ -1 +1 @@
-1615464514507
\ No newline at end of file
+1616276741870
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index bc775b2..acfdb6e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -22,18 +22,31 @@
     long "^4.0.0"

 "@apollographql/apollo-tools@^0.4.3":
-  version "0.4.8"
-  resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.8.tgz#d81da89ee880c2345eb86bddb92b35291f6135ed"
-  integrity sha512-W2+HB8Y7ifowcf3YyPHgDI05izyRtOeZ4MqIr7LbTArtmJ0ZHULWpn84SGMW7NAvTV1tFExpHlveHhnXuJfuGA==
+  version "0.4.9"
+  resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.4.9.tgz#6abeef4c4586aec8208f71254b329e48ab50c07e"
+  integrity sha512-M50pk8oo3CGTu4waGOklIX3YtTZoPfWG9K/G9WB8NpyQGA1OwYTiBFv94XqUtKElTDoFwoMXpMQd3Wy5dINvxA==
   dependencies:
-    apollo-env "^0.6.5"
+    apollo-env "^0.6.6"

-"@apollographql/graphql-playground-html@1.6.26":
-  version "1.6.26"
-  resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.26.tgz#2f7b610392e2a872722912fc342b43cf8d641cb3"
-  integrity sha512-XAwXOIab51QyhBxnxySdK3nuMEUohhDsHQ5Rbco/V1vjlP75zZ0ZLHD9dTpXTN8uxKxopb2lUvJTq+M4g2Q0HQ==
+"@apollographql/graphql-playground-html@1.6.27":
+  version "1.6.27"
+  resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz#bc9ab60e9445aa2a8813b4e94f152fa72b756335"
+  integrity sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==
   dependencies:
-    xss "^1.0.6"
+    xss "^1.0.8"
+
+"@apollographql/graphql-upload-8-fork@^8.1.3":
+  version "8.1.3"
+  resolved "https://registry.yarnpkg.com/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz#a0d4e0d5cec8e126d78bd915c264d6b90f5784bc"
+  integrity sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==
+  dependencies:
+    "@types/express" "*"
+    "@types/fs-capacitor" "*"
+    "@types/koa" "*"
+    busboy "^0.3.1"
+    fs-capacitor "^2.0.4"
+    http-errors "^1.7.3"
+    object-path "^0.11.4"

 "@azu/format-text@^1.0.1":
   version "1.0.1"
@@ -48,9 +61,9 @@
     "@azu/format-text" "^1.0.1"

 "@babel/parser@^7.7.5":
-  version "7.12.5"
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0"
-  integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==
+  version "7.13.10"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409"
+  integrity sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ==

 "@bahmutov/data-driven@1.0.0":
   version "1.0.0"
@@ -201,13 +214,13 @@
   integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=

 "@textlint-ja/textlint-rule-no-insert-dropping-sa@^1.0.1":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/@textlint-ja/textlint-rule-no-insert-dropping-sa/-/textlint-rule-no-insert-dropping-sa-1.0.1.tgz#ef36819be8301998a764a87bd8ecca2a8e004849"
-  integrity sha1-7zaBm+gwGZinZKh72OzKKo4ASEk=
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@textlint-ja/textlint-rule-no-insert-dropping-sa/-/textlint-rule-no-insert-dropping-sa-1.0.2.tgz#8bfa0407b65dbfb04d2f47544407358aa2dc9feb"
+  integrity sha512-znlllxSyAeBWhyNBCJaZLvVDyQgFQp159LKU0EKN69qMxLiXy8ZDEjOEAWqPV36a9JXgL6msg5D87110k5PKGg==
   dependencies:
     array-find-index "^1.0.2"
-    kuromojin "^1.3.2"
-    morpheme-match-all "^1.1.0"
+    kuromojin "^2.1.1"
+    morpheme-match-all "^2.0.5"

 "@textlint-rule/textlint-rule-no-invalid-control-character@^1.2.0":
   version "1.2.0"
@@ -216,44 +229,44 @@
   dependencies:
     execall "^1.0.0"

-"@textlint/ast-node-types@^4.0.2", "@textlint/ast-node-types@^4.2.1", "@textlint/ast-node-types@^4.2.4", "@textlint/ast-node-types@^4.2.5", "@textlint/ast-node-types@^4.3.4":
-  version "4.3.4"
-  resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz#f6596c45c32c85dc06915c3077bb7686033efd32"
-  integrity sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg==
+"@textlint/ast-node-types@^4.0.2", "@textlint/ast-node-types@^4.2.1", "@textlint/ast-node-types@^4.2.4", "@textlint/ast-node-types@^4.2.5", "@textlint/ast-node-types@^4.4.1":
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.4.1.tgz#715dd42b3ec7ff02729fa81cdc9557fe2cdd4f10"
+  integrity sha512-2QBwlqi2SU83vTHibfdTxGiLdIqR0btNyMGfVl0bwA6FI85HnSYoGFLrdCnq2V0nxpbhuvwzcm2Ja81w0VkMGA==

-"@textlint/ast-tester@^2.2.4":
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/@textlint/ast-tester/-/ast-tester-2.2.4.tgz#f6700b151026eb4d4fa8f00ac76f27c876207639"
-  integrity sha512-676xpY3/+Xa+tPaiUPaD4sl//+p3xsnSPYLrQjSmHWXX78F3MwAWd/Lek+SCn4wwvf1tCIx0SPtjfOCa6ru8qw==
+"@textlint/ast-tester@^2.3.2":
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/ast-tester/-/ast-tester-2.3.2.tgz#f0a951956db0d5a0d444210bcabc8fb334684438"
+  integrity sha512-4e1kyqsHks5POcQmuh7ITVrU/dbYyRUfQarQbeVRPP271n2HnlgnoYyZ10yV2Sb/Ksw+lQf7DPSnwNewXdCWww==
   dependencies:
-    "@textlint/ast-node-types" "^4.3.4"
+    "@textlint/ast-node-types" "^4.4.1"

-"@textlint/ast-traverse@^2.2.5":
-  version "2.2.5"
-  resolved "https://registry.yarnpkg.com/@textlint/ast-traverse/-/ast-traverse-2.2.5.tgz#2e4b8e7cfa2d7adfc190f9adc29e7337f893a21e"
-  integrity sha512-YduGVn7iaUYOfo7TwHO4b0K/qQpj61Ol/M884ck3vetNd0zBxpHO3GpQKW87SZGGtlsBa9v5Suz/yypnlPo3Og==
+"@textlint/ast-traverse@^2.3.2":
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/ast-traverse/-/ast-traverse-2.3.2.tgz#733bd6b8527c5254d3eae672076d3869e18bd31f"
+  integrity sha512-Dt1s/6x0XWhUNFH2rAa9gL6ODtq232BZuBHuHiOg+SrVwzl+VjOfa3fMQ0LoYixGSyDtwqAlksWcC0KyLz0eSw==
   dependencies:
-    "@textlint/ast-node-types" "^4.3.4"
+    "@textlint/ast-node-types" "^4.4.1"

-"@textlint/feature-flag@^3.2.4":
-  version "3.2.4"
-  resolved "https://registry.yarnpkg.com/@textlint/feature-flag/-/feature-flag-3.2.4.tgz#e1e5bc1077ebae6637d95ee9bba153a4ed889eeb"
-  integrity sha512-ABhbZ5rfkwa/kTBFxVmeMzE1flcnUjLJ5LTZvOaxH/pElfLLN1J4FEmAZTRCvXGAB498II6nkM2CqcikbKzh6A==
+"@textlint/feature-flag@^3.3.2":
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/feature-flag/-/feature-flag-3.3.2.tgz#b6dfe7229249e6684c0b99efecbe44becdab3d43"
+  integrity sha512-7ErQ/UF0IBAd+PkQNBD7yYCDqL2o6leErMDENSWAgUHWLy5TcHr3Orn7qswtBMW5gIyXW9lh+EpllwLJ5qv35w==
   dependencies:
     map-like "^2.0.0"

-"@textlint/fixer-formatter@^3.2.5":
-  version "3.2.5"
-  resolved "https://registry.yarnpkg.com/@textlint/fixer-formatter/-/fixer-formatter-3.2.5.tgz#32afce76ae53ffcf6ec83ea4a8b2bfc7b94212dd"
-  integrity sha512-fh6XiLbX9WF8+79g20qb1I85k/Yc9+h7LRccmaLzTBjVQDNYxX5BtfvGsY0Vf5tBZKT2xFZH4eSLH/EWoL3weg==
+"@textlint/fixer-formatter@^3.3.2":
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/fixer-formatter/-/fixer-formatter-3.3.2.tgz#3d85b4b64d8d124485b42cee54aa2f9c84ccaa90"
+  integrity sha512-aTEyH/rHSzxRLrluSjNhDnMSgIYK60J5AAgprKJCkb9h3dDRuNoiJ+BXh5FXVSSm1tGF0d8pu+Ph8OFBgQOchQ==
   dependencies:
-    "@textlint/module-interop" "^1.1.4"
-    "@textlint/types" "^1.4.5"
+    "@textlint/module-interop" "^1.2.2"
+    "@textlint/types" "^1.5.2"
     chalk "^1.1.3"
-    debug "^4.1.1"
-    diff "^4.0.1"
+    debug "^4.3.1"
+    diff "^4.0.2"
     is-file "^1.0.0"
-    string-width "^1.0.1"
+    string-width "^1.0.2"
     strip-ansi "^6.0.0"
     text-table "^0.2.0"
     try-resolve "^1.0.1"
@@ -263,62 +276,63 @@
   resolved "https://registry.yarnpkg.com/@textlint/get-config-base-dir/-/get-config-base-dir-2.0.0.tgz#3d0e862e1dd67cf8286ca52f8bd911e10dca2941"
   integrity sha512-J3cG1pl2llYD4ZaZMe0qVgVaHT8RvT+/SW1FHQ8HRceNalMM9O0Y8iIgtl4GGOx4vMghoIPKFVLASw8P8bJ3ZA==

-"@textlint/kernel@^3.3.6":
-  version "3.3.6"
-  resolved "https://registry.yarnpkg.com/@textlint/kernel/-/kernel-3.3.6.tgz#aeebf70862bf3369a9d7e62e8956c73717f4f587"
-  integrity sha512-M2ciQDAo5W6rpRADzGnMXyxhvJ+lnqYG9iHrqmfDQ2MA0VcolWuA37H67/UstqTs3NYaGC7RZkq9FAV//pl30w==
-  dependencies:
-    "@textlint/ast-node-types" "^4.3.4"
-    "@textlint/ast-tester" "^2.2.4"
-    "@textlint/ast-traverse" "^2.2.5"
-    "@textlint/feature-flag" "^3.2.4"
-    "@textlint/types" "^1.4.5"
-    "@textlint/utils" "^1.1.4"
-    debug "^4.1.1"
+"@textlint/kernel@^3.3.6", "@textlint/kernel@^3.4.2":
+  version "3.4.2"
+  resolved "https://registry.yarnpkg.com/@textlint/kernel/-/kernel-3.4.2.tgz#2d2ad545548594c1adeab30d1e410e8116e5fdd9"
+  integrity sha512-PpxAtvLGI9ewn+Dbt4j0KMfmMM39/AY3cikmZffu59nyTdIymXMeVMEVkpVZTEUk5OlL27RAON9FF+2u+0fshg==
+  dependencies:
+    "@textlint/ast-node-types" "^4.4.1"
+    "@textlint/ast-tester" "^2.3.2"
+    "@textlint/ast-traverse" "^2.3.2"
+    "@textlint/feature-flag" "^3.3.2"
+    "@textlint/source-code-fixer" "^3.4.2"
+    "@textlint/types" "^1.5.2"
+    "@textlint/utils" "^1.2.2"
+    debug "^4.3.1"
     deep-equal "^1.1.1"
     map-like "^2.0.0"
     structured-source "^3.0.2"

-"@textlint/linter-formatter@^3.2.5":
-  version "3.2.5"
-  resolved "https://registry.yarnpkg.com/@textlint/linter-formatter/-/linter-formatter-3.2.5.tgz#0af6da2e75334d0d6a78e03ea6c06c074faf0fd2"
-  integrity sha512-oy5RcBWrC2d7r0Mjw/FBH8cvQuOaCB5PeOPG0Pp44Yr5JbIGLXfh84umHQOTCmxfRxw3ccnUfA9wjbxuL8rWOQ==
+"@textlint/linter-formatter@^3.3.2":
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/linter-formatter/-/linter-formatter-3.3.2.tgz#b296b095a5026c1bba5da47530a0034c61e7a22c"
+  integrity sha512-MRa8D1/x6pWycKTwb1QLjtY7GyjgcsYRfV0Gu0Aze5szCa3UDwZSewHycpcAGlIqr8AkqPRfyXi653M47eJ0rA==
   dependencies:
     "@azu/format-text" "^1.0.1"
     "@azu/style-format" "^1.0.0"
-    "@textlint/module-interop" "^1.1.4"
-    "@textlint/types" "^1.4.5"
-    chalk "^1.0.0"
-    concat-stream "^1.5.1"
-    debug "^4.1.1"
+    "@textlint/module-interop" "^1.2.2"
+    "@textlint/types" "^1.5.2"
+    chalk "^1.1.3"
+    concat-stream "^1.6.2"
+    debug "^4.3.1"
     is-file "^1.0.0"
-    js-yaml "^3.2.4"
-    optionator "^0.8.1"
+    js-yaml "^3.14.1"
+    optionator "^0.9.1"
     pluralize "^2.0.0"
-    string-width "^1.0.1"
+    string-width "^1.0.2"
     strip-ansi "^6.0.0"
-    table "^3.7.8"
+    table "^3.8.3"
     text-table "^0.2.0"
     try-resolve "^1.0.1"
-    xml-escape "^1.0.0"
+    xml-escape "^1.1.0"

-"@textlint/markdown-to-ast@^6.2.5":
-  version "6.2.5"
-  resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.2.5.tgz#b39d806520ff6507440c3e1d4242b9ec2a6086d0"
-  integrity sha512-9vlQbylGjnnRGev3yt9ntNy6I9FQH3p+MkbijybKnwobK/msoAX9sThDHOMbGM24PsUHxcDjktDlj2vHN/pwDA==
+"@textlint/markdown-to-ast@^6.3.2":
+  version "6.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.3.2.tgz#ae69c8475073eb2631958b108497d4fea4e0255a"
+  integrity sha512-uwndF3PRJ48wTVAEDSy0IAEVJg/scxpdZ1r+QKeGuFfdtaGSrtcgROI6qiVU1g/WNyNfQw+DAA7F8HfM+pmleg==
   dependencies:
-    "@textlint/ast-node-types" "^4.3.4"
-    debug "^4.1.1"
-    remark-frontmatter "^1.2.0"
+    "@textlint/ast-node-types" "^4.4.1"
+    debug "^4.3.1"
+    remark-frontmatter "^1.3.3"
     remark-parse "^5.0.0"
     structured-source "^3.0.2"
     traverse "^0.6.6"
-    unified "^6.1.6"
+    unified "^6.2.0"

-"@textlint/module-interop@^1.0.1", "@textlint/module-interop@^1.1.4":
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/@textlint/module-interop/-/module-interop-1.1.4.tgz#d8cb10e5bd1d4d31998c95fb0a52ad8100d6e18a"
-  integrity sha512-9M3kYG5nBoD2lhp05sqi6fieNU6rBcf+A8Trp+4d8o5uJ4RRsWeRtAQMWM7Tv15onqIITRq7fm3la7xovVB9KA==
+"@textlint/module-interop@^1.0.1", "@textlint/module-interop@^1.2.2":
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/@textlint/module-interop/-/module-interop-1.2.2.tgz#4f550c592439ec548eed1f90f127005ad339e5ad"
+  integrity sha512-B8HPS129lOqzEpRcafYl/OJ2TDxfBw1jGfEhebzwt3kGoMd5pQVih+hUIOl+SfAmLWqCDEniaKn0gw1s+hjSXA==

 "@textlint/regexp-string-matcher@^1.0.2", "@textlint/regexp-string-matcher@^1.1.0":
   version "1.1.0"
@@ -332,38 +346,46 @@
     lodash.uniqwith "^4.5.0"
     to-regex "^3.0.2"

-"@textlint/text-to-ast@^3.2.4":
-  version "3.2.4"
-  resolved "https://registry.yarnpkg.com/@textlint/text-to-ast/-/text-to-ast-3.2.4.tgz#a1ccb1ad2a561d93291c9f73d9c2376ddb701a5b"
-  integrity sha512-uIiNg52OdQ3Fn8aOYaV7BLW2QakNsmf4doypIwrW4q+gHYQ3jxdPHHkq6RxuYoO112vO40M3zmAoEZmM1qmPhw==
+"@textlint/source-code-fixer@^3.4.2":
+  version "3.4.2"
+  resolved "https://registry.yarnpkg.com/@textlint/source-code-fixer/-/source-code-fixer-3.4.2.tgz#ff6cb8fe616a51aa16c302bad1fe515a50289738"
+  integrity sha512-mSGQNO8is21KcHgDh4S8Cx88r7uU+7xpzHLuEuzhgEZfgwz3+tnpk22TrEjNYe1V1+aseU9iCQegVQQr1wroKQ==
   dependencies:
-    "@textlint/ast-node-types" "^4.3.4"
+    "@textlint/types" "^1.5.2"
+    debug "^4.3.1"

-"@textlint/textlint-plugin-markdown@^5.2.6":
-  version "5.2.6"
-  resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.2.6.tgz#93ffc86ee85aa4a48e9f5029bb193a9d1142c231"
-  integrity sha512-S65wy2npaBLT7pwPPlrN9Pw40hOJsxiW+T6peMJOFEMLRem5qlCIlT+02Wlf0Rrtr6/gKDckpphTUiZT1+xRnQ==
+"@textlint/text-to-ast@^3.3.2":
+  version "3.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/text-to-ast/-/text-to-ast-3.3.2.tgz#7e511620e46a41097bbd0b2b7c4954b3cf8175e5"
+  integrity sha512-+DKAP62ho21KID8IcKy1kP6K+kUZk+Z0MwvS9u2l39J0cK+vX523KI+sA6AXxEhOMDA8zhdIsBf3onGvrAtyhA==
   dependencies:
-    "@textlint/markdown-to-ast" "^6.2.5"
+    "@textlint/ast-node-types" "^4.4.1"

-"@textlint/textlint-plugin-text@^4.2.6":
-  version "4.2.6"
-  resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.2.6.tgz#4c4679e756d120bb30526f0fcdb8248b9a9989b0"
-  integrity sha512-KCgb5GVjoEDIi37UpQN6kFciiouyATNYrj/JufCeLNJEcVcxSm12EoFRKjpXpXmTOVqZUyGnIDU797z1usAZDw==
+"@textlint/textlint-plugin-markdown@^5.3.2":
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-5.3.2.tgz#d94a8f339bb2cf00e024f526c39d04d9e25f18bc"
+  integrity sha512-6Ph7ESKR48tEz5Pnog3PpvF84LU3jkADvr4iBkkVz9vLQt3KbqGnmk8EV94Y0hLEX+UrZKWmH3cJfh6O1Zy/eA==
   dependencies:
-    "@textlint/text-to-ast" "^3.2.4"
+    "@textlint/markdown-to-ast" "^6.3.2"

-"@textlint/types@^1.1.2", "@textlint/types@^1.4.5":
-  version "1.4.5"
-  resolved "https://registry.yarnpkg.com/@textlint/types/-/types-1.4.5.tgz#11c8e0140256e0ead8014a701a05f267d1132d4e"
-  integrity sha512-7pA1rdiw1jsDNGwxupMC6fPlRNAHY6fKZ3s+jAY53o6RroOSR+5qO0sAjJ26lsSOhveH8imZzyyD08dk58IVJQ==
+"@textlint/textlint-plugin-text@^4.3.2":
+  version "4.3.2"
+  resolved "https://registry.yarnpkg.com/@textlint/textlint-plugin-text/-/textlint-plugin-text-4.3.2.tgz#eee6c24f3671167dba7d526ff1f95bfc3255f4b0"
+  integrity sha512-xnjad0bXaM6ZtgffuFKogHYkzXymUK3VTLP5MGA00kLitADlNUtwXQk82TebkXFcSPRhePU9+2XFipXNQDsg7g==
   dependencies:
-    "@textlint/ast-node-types" "^4.3.4"
+    "@textlint/text-to-ast" "^3.3.2"

-"@textlint/utils@^1.1.4":
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/@textlint/utils/-/utils-1.1.4.tgz#c91fbac2fb302f31b4b8a97f3277e818f219d6a2"
-  integrity sha512-KmU+kGi7vG5toUhNdLHHPxyVN1mNGcjMVe1tNDEXT1wU/3oqA96bunElrROWHYw5iNt1QVRaIAtNeMVyzyAdVA==
+"@textlint/types@^1.1.2", "@textlint/types@^1.4.5", "@textlint/types@^1.5.2":
+  version "1.5.2"
+  resolved "https://registry.yarnpkg.com/@textlint/types/-/types-1.5.2.tgz#957f7d8e890b5401cf35e6784c9e331990c20d7c"
+  integrity sha512-IdS0h2MCzdY+wjM0+qvl8IW/IxhmVFAVrGu5TmIBpJkihIV7WMa3ITFXIVb0oqwnePUmyLBRIVsCtC66E3QbfQ==
+  dependencies:
+    "@textlint/ast-node-types" "^4.4.1"
+
+"@textlint/utils@^1.2.2":
+  version "1.2.2"
+  resolved "https://registry.yarnpkg.com/@textlint/utils/-/utils-1.2.2.tgz#c2166c2433542aa299bb76a6da1a8b21e6a3a7a6"
+  integrity sha512-7Mqcl9G9YYrPBv5d/tZ2NlWC66hTUpQEQxZEHDMTdF3gPmQUSNRNGjqUR9mhw00Wy8Wo6i3LUWuxwMT6heHNBQ==

 "@types/accepts@*":
   version "1.3.5"
@@ -441,16 +463,6 @@
     "@types/minimatch" "*"
     "@types/node" "*"

-"@types/graphql-upload@^8.0.0":
-  version "8.0.4"
-  resolved "https://registry.yarnpkg.com/@types/graphql-upload/-/graphql-upload-8.0.4.tgz#23a8ffb3d2fe6e0ee07e6f16ee9d9d5e995a2f4f"
-  integrity sha512-0TRyJD2o8vbkmJF8InppFcPVcXKk+Rvlg/xvpHBIndSJYpmDWfmtx/ZAtl4f3jR2vfarpTqYgj8MZuJssSoU7Q==
-  dependencies:
-    "@types/express" "*"
-    "@types/fs-capacitor" "*"
-    "@types/koa" "*"
-    graphql "^15.3.0"
-
 "@types/http-assert@*":
   version "1.5.1"
   resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.1.tgz#d775e93630c2469c2f980fc27e3143240335db3b"
@@ -474,9 +486,9 @@
     "@types/koa" "*"

 "@types/koa@*":
-  version "2.11.7"
-  resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.11.7.tgz#3b38f3b9faa66315a84890a771d166fb36463100"
-  integrity sha512-1iXJZZWCePoMe9LGSIPWsu5k5RI4ooXijW78c+nljMn3YbUts8PXoEESu1OeFmrazLPl1l97vTxzwvmH32TWVQ==
+  version "2.13.1"
+  resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.13.1.tgz#e29877a6b5ad3744ab1024f6ec75b8cbf6ec45db"
+  integrity sha512-Qbno7FWom9nNqu0yHZ6A0+RWt4mrYBhw3wpBAQ3+IuzGcLlfeYkzZrnMq5wsxulN2np8M4KKeUpTodsOsSad5Q==
   dependencies:
     "@types/accepts" "*"
     "@types/content-disposition" "*"
@@ -511,19 +523,19 @@
     form-data "^3.0.0"

 "@types/node@*":
-  version "14.14.22"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18"
-  integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==
+  version "14.14.33"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.33.tgz#9e4f8c64345522e4e8ce77b334a8aaa64e2b6c78"
+  integrity sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g==

 "@types/node@^10.1.0":
-  version "10.17.51"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.51.tgz#639538575befbcf3d3861f95c41de8e47124d674"
-  integrity sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg==
+  version "10.17.55"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.55.tgz#a147f282edec679b894d4694edb5abeb595fecbd"
+  integrity sha512-koZJ89uLZufDvToeWO5BrC4CR4OUfHnUz2qoPs/daQH6qq3IN62QFxCTZ+bKaCE0xaoCAJYE4AXre8AbghCrhg==

 "@types/qs@*":
-  version "6.9.5"
-  resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b"
-  integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==
+  version "6.9.6"
+  resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1"
+  integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==

 "@types/range-parser@*":
   version "1.2.3"
@@ -651,16 +663,28 @@ ansi-regex@^3.0.0:
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
   integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=

+ansi-regex@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
+  integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
+
 ansi-regex@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
   integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==

-ansi-styles@^2.0.1, ansi-styles@^2.2.1:
+ansi-styles@^2.2.1:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
   integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=

+ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
 apollo-cache-control@^0.11.6:
   version "0.11.6"
   resolved "https://registry.yarnpkg.com/apollo-cache-control/-/apollo-cache-control-0.11.6.tgz#f7bdf924272af47ac474cf3f3f35cfc038cc9485"
@@ -677,10 +701,10 @@ apollo-datasource@^0.7.3:
     apollo-server-caching "^0.5.3"
     apollo-server-env "^3.0.0"

-apollo-env@^0.6.5:
-  version "0.6.5"
-  resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.6.5.tgz#5a36e699d39e2356381f7203493187260fded9f3"
-  integrity sha512-jeBUVsGymeTHYWp3me0R2CZRZrFeuSZeICZHCeRflHTfnQtlmbSXdy5E0pOyRM9CU4JfQkKDC98S1YglQj7Bzg==
+apollo-env@^0.6.6:
+  version "0.6.6"
+  resolved "https://registry.yarnpkg.com/apollo-env/-/apollo-env-0.6.6.tgz#d7880805c4e96ee3d4142900a405176a04779438"
+  integrity sha512-hXI9PjJtzmD34XviBU+4sPMOxnifYrHVmxpjykqI/dUD2G3yTiuRaiQqwRwB2RCdwC1Ug/jBfoQ/NHDTnnjndQ==
   dependencies:
     "@types/node-fetch" "2.5.7"
     core-js "^3.0.1"
@@ -688,11 +712,11 @@ apollo-env@^0.6.5:
     sha.js "^2.4.11"

 apollo-graphql@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.6.0.tgz#37bee7dc853213269137f4c60bfdf2ee28658669"
-  integrity sha512-BxTf5LOQe649e9BNTPdyCGItVv4Ll8wZ2BKnmiYpRAocYEXAVrQPWuSr3dO4iipqAU8X0gvle/Xu9mSqg5b7Qg==
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/apollo-graphql/-/apollo-graphql-0.6.1.tgz#d0bf0aff76f445de3da10e08f6974f1bf65f5753"
+  integrity sha512-ZRXAV+k+hboCVS+FW86FW/QgnDR7gm/xMUwJPGXEbV53OLGuQQdIT0NCYK7AzzVkCfsbb7NJ3mmEclkZY9uuxQ==
   dependencies:
-    apollo-env "^0.6.5"
+    apollo-env "^0.6.6"
     lodash.sortby "^4.7.0"

 apollo-link@^1.2.14:
@@ -719,14 +743,14 @@ apollo-server-caching@^0.5.3:
   dependencies:
     lru-cache "^6.0.0"

-apollo-server-core@^2.19.2:
-  version "2.19.2"
-  resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.19.2.tgz#9a5651be233aceab6b062e82eef4c8072f6ac230"
-  integrity sha512-liLgLhTIGWZtdQbxuxo3/Yv8j+faKQcI60kOL+uwfByGhoKLZEQp5nqi2IdMK6JXt1VuyKwKu7lTzj02a9S3jA==
+apollo-server-core@^2.21.1:
+  version "2.21.1"
+  resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.21.1.tgz#5494e558e51a64cdd63b00a762ed600c4c73ee10"
+  integrity sha512-aI+soLaqKMkWxH6l9xvPP1fCuZgD053SK09D79LQfMbJAHHvs3MI90UpydiY/W61K5l8ELl0YsKdqkQg8262nw==
   dependencies:
     "@apollographql/apollo-tools" "^0.4.3"
-    "@apollographql/graphql-playground-html" "1.6.26"
-    "@types/graphql-upload" "^8.0.0"
+    "@apollographql/graphql-playground-html" "1.6.27"
+    "@apollographql/graphql-upload-8-fork" "^8.1.3"
     "@types/ws" "^7.0.0"
     apollo-cache-control "^0.11.6"
     apollo-datasource "^0.7.3"
@@ -742,8 +766,7 @@ apollo-server-core@^2.19.2:
     fast-json-stable-stringify "^2.0.0"
     graphql-extensions "^0.12.8"
     graphql-tag "^2.11.0"
-    graphql-tools "^4.0.0"
-    graphql-upload "^8.0.2"
+    graphql-tools "^4.0.8"
     loglevel "^1.6.7"
     lru-cache "^6.0.0"
     sha.js "^2.4.11"
@@ -765,13 +788,13 @@ apollo-server-errors@^2.4.2:
   integrity sha512-FeGxW3Batn6sUtX3OVVUm7o56EgjxDlmgpTLNyWcLb0j6P8mw9oLNyAm3B+deHA4KNdNHO5BmHS2g1SJYjqPCQ==

 apollo-server-micro@^2.19.2:
-  version "2.19.2"
-  resolved "https://registry.yarnpkg.com/apollo-server-micro/-/apollo-server-micro-2.19.2.tgz#3c47eb3199d55977d88746fa075ff248247bedf8"
-  integrity sha512-tLFdqonWtgLJLa/KCOYvST7ktOVHMhhkmPQ2PLUROxBzvLjY4rF56bwOMkQLGZCljnUagAKYGtMFw6bpgHFRhQ==
+  version "2.21.1"
+  resolved "https://registry.yarnpkg.com/apollo-server-micro/-/apollo-server-micro-2.21.1.tgz#1ff4e5e6634f3101c6c1b9ecef3acd6ccf6ba770"
+  integrity sha512-qLeMjf1hZOpAFRtycRyMUlMsOI9ykZo0Awno693SHlfFYIXCxxcX4e4EtQUrXKJ5P45IxyWs7swue7wSRS5gOA==
   dependencies:
-    "@apollographql/graphql-playground-html" "1.6.26"
+    "@apollographql/graphql-playground-html" "1.6.27"
     accept "^3.0.2"
-    apollo-server-core "^2.19.2"
+    apollo-server-core "^2.21.1"
     apollo-server-types "^0.6.3"
     micro "^9.3.2"

@@ -819,6 +842,11 @@ arg@4.1.0:
   resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0"
   integrity sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==

+arg@4.1.3:
+  version "4.1.3"
+  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
 argparse@^1.0.7:
   version "1.0.10"
   resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -878,14 +906,6 @@ asynckit@^0.4.0:
   resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
   integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=

-babel-runtime@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
-  integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
-  dependencies:
-    core-js "^2.4.0"
-    regenerator-runtime "^0.11.0"
-
 backo2@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
@@ -945,13 +965,13 @@ bytes@3.0.0:
   resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
   integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=

-call-bind@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce"
-  integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==
+call-bind@^1.0.0, call-bind@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
   dependencies:
     function-bind "^1.1.1"
-    get-intrinsic "^1.0.0"
+    get-intrinsic "^1.0.2"

 ccount@^1.0.3:
   version "1.1.0"
@@ -1003,10 +1023,10 @@ check-more-types@2.24.0:
   resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
   integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=

-ci-info@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
-  integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
+ci-info@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+  integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==

 clone-regexp@^1.0.0:
   version "1.0.1"
@@ -1036,6 +1056,18 @@ collapse-white-space@^1.0.2:
   resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287"
   integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==

+color-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
+color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
 combined-stream@^1.0.8:
   version "1.0.8"
   resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -1058,19 +1090,17 @@ commandpost@^1.0.1, commandpost@^1.2.1:
   resolved "https://registry.yarnpkg.com/commandpost/-/commandpost-1.4.0.tgz#89218012089dfc9b67a337ba162f15c88e0f1048"
   integrity sha512-aE2Y4MTFJ870NuB/+2z1cXBhSBBzRydVVjzhFC4gtenEhpnj15yu0qptWGJsO9YGrcPZ3ezX8AWb1VA391MKpQ==

-common-tags@1.7.2:
-  version "1.7.2"
-  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.2.tgz#24d9768c63d253a56ecff93845b44b4df1d52771"
-  integrity sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==
-  dependencies:
-    babel-runtime "^6.26.0"
+common-tags@1.8.0:
+  version "1.8.0"
+  resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937"
+  integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==

 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
   integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=

-concat-stream@^1.5.1, concat-stream@^1.5.2:
+concat-stream@^1.5.2, concat-stream@^1.6.2:
   version "1.6.2"
   resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
   integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@@ -1095,15 +1125,10 @@ content-type@1.0.4:
   resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
   integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==

-core-js@^2.4.0:
-  version "2.6.11"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
-  integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
-
 core-js@^3.0.1:
-  version "3.8.3"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0"
-  integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==
+  version "3.9.1"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.9.1.tgz#cec8de593db8eb2a85ffb0dbdeb312cb6e5460ae"
+  integrity sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==

 core-util-is@~1.0.0:
   version "1.0.2"
@@ -1120,28 +1145,28 @@ cssfilter@0.0.10:
   resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae"
   integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=

-debug@3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
-  integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
-  dependencies:
-    ms "2.0.0"
-
-debug@^3.1.0:
-  version "3.2.6"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
-  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+debug@4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
   dependencies:
     ms "^2.1.1"

-debug@^4.1.1:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
-  integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==
+debug@4.3.1, debug@^4.1.1, debug@^4.3.1:
+  version "4.3.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
+  integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
   dependencies:
     ms "2.1.2"

-deep-equal@^1.1.0, deep-equal@^1.1.1:
+debug@^3.1.0:
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+  integrity sha512-CFjz…
kawamataryo added a commit to kawamataryo/zenn-articles that referenced this issue May 5, 2021
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict
index 80fecc7..f97aa1f 100644
--- a/.cache/kvs-node-localstorage/proofdict
+++ b/.cache/kvs-node-localstorage/proofdict
@@ -1 +1 @@
-[{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YWWKN8RQSJ5QS25W0VGE","description":"","expected":"およそ","patterns":["凡そ"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWJW5M546Z0VEDHG0RZ","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1あとで","patterns":["/(して|した|、)後で/"],"specs":[{"from":"して後で","to":"してあとで"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された jamstack/jamstack.org#279 is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
+[{"id":"01BQ92YWWMY2YZNGG7Q70EZTFE","description":"","expected":"たびたび","patterns":["度々"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された jamstack/jamstack.org#279 is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YWJF8WXN0M9FE0S4QYW5","description":"","expected":"$1発売","patterns":["/(\\d+年\\d+月\\d+日)\\s発売/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated
index 8f44b28..cbcfcae 100644
--- a/.cache/kvs-node-localstorage/proofdict-lastUpdated
+++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated
@@ -1 +1 @@
-1620083148275
\ No newline at end of file
+1620218342649
\ No newline at end of file
kawamataryo added a commit to kawamataryo/zenn-articles that referenced this issue Jul 23, 2021
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict
index f97aa1f..e0a1b0f 100644
--- a/.cache/kvs-node-localstorage/proofdict
+++ b/.cache/kvs-node-localstorage/proofdict
@@ -1 +1 @@
-[{"id":"01BQ92YWWMY2YZNGG7Q70EZTFE","description":"","expected":"たびたび","patterns":["度々"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された jamstack/jamstack.org#279 is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YWJF8WXN0M9FE0S4QYW5","description":"","expected":"$1発売","patterns":["/(\\d+年\\d+月\\d+日)\\s発売/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
+[{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YWJHZ5T3JBSQCTZHPV86","description":"","expected":"などが追加","patterns":["など追加"],"specs":[{"from":"Class expressionやGeneratorのサポートなど追加されています。","to":"Class expressionやGeneratorのサポートなどが追加されています。"}],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YWWJ9EM0EEGVP0CRKC73","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1とき","patterns":["/(の)時(?!点|代|々|間|期)/"],"specs":[{"from":"その時","to":"そのとき"},{"from":"その時点","to":"その時点"},{"from":"その時代","to":"その時代"},{"from":"それまでの時間","to":"それまでの時間"},{"from":"同時","to":"同時"},{"from":"実行時","to":"実行時"},{"from":"利用時","to":"利用時"},{"from":"開発時","to":"開発時"},{"from":"執筆時","to":"執筆時"},{"from":"時点","to":"時点"},{"from":"時代","to":"時代"},{"from":"時間","to":"時間"}],"tags":["opinion","表記統一"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された jamstack/jamstack.org#279 is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated
index eb46ae7..b4e361f 100644
--- a/.cache/kvs-node-localstorage/proofdict-lastUpdated
+++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated
@@ -1 +1 @@
-1626641939288
\ No newline at end of file
+1627016035046
\ No newline at end of file
diff --git a/articles/4bf52f97165058.md b/articles/4bf52f97165058.md
index 067fff1..59fc510 100644
--- a/articles/4bf52f97165058.md
+++ b/articles/4bf52f97165058.md
@@ -14,8 +14,6 @@ esa を CMS に VuePress v2 でドキュメントサイトを作る機会があ

 社内のドキュメント管理ツールとして esa を使っていて、esa に社内文書がまとまっていた & ドキュメント執筆のメインとなるビジネスサイドのメンバーが esa での MarkDown 執筆に慣れていたからです。

-また、esa の GitHub Webhook 機能がとても便利で、下書き
-
 # 基本構成

 # 工夫ポイント
kawamataryo added a commit to kawamataryo/zenn-articles that referenced this issue Aug 13, 2021
diff --git a/.cache/kvs-node-localstorage/proofdict b/.cache/kvs-node-localstorage/proofdict
index e0a1b0f..efec0d7 100644
--- a/.cache/kvs-node-localstorage/proofdict
+++ b/.cache/kvs-node-localstorage/proofdict
@@ -1 +1 @@
-[{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YWJHZ5T3JBSQCTZHPV86","description":"","expected":"などが追加","patterns":["など追加"],"specs":[{"from":"Class expressionやGeneratorのサポートなど追加されています。","to":"Class expressionやGeneratorのサポートなどが追加されています。"}],"tags":["opinion","jser.info"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YWWJ9EM0EEGVP0CRKC73","description":"漢字で書かず、ひらがなで書くと読みやすくなります","expected":"$1とき","patterns":["/(の)時(?!点|代|々|間|期)/"],"specs":[{"from":"その時","to":"そのとき"},{"from":"その時点","to":"その時点"},{"from":"その時代","to":"その時代"},{"from":"それまでの時間","to":"それまでの時間"},{"from":"同時","to":"同時"},{"from":"実行時","to":"実行時"},{"from":"利用時","to":"利用時"},{"from":"開発時","to":"開発時"},{"from":"執筆時","to":"執筆時"},{"from":"時点","to":"時点"},{"from":"時代","to":"時代"},{"from":"時間","to":"時間"}],"tags":["opinion","表記統一"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
+[{"id":"01BQ92YWWKFGQT7012C26Z9PDK","description":"","expected":"かもしれない","patterns":["かも知れない"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBGZPBHMB3DMMXMJ0CJ","description":"","expected":"ES.next","patterns":["ES next"],"specs":[{"from":"ES nextでは","to":"ES.nextでは"}],"tags":["JavaScript"]},{"id":"01D1SNYB7AA69NTAEBT1X651RB","description":"Brotliはbr","expected":"$1rotli","patterns":["/\\b(b)rottli\\b/i"],"allows":[],"specs":[{"from":"brottli compression","to":"brotli compression"},{"from":"brottli圧縮","to":"brotli圧縮"},{"from":"BrotliはbrotliでOK","to":"BrotliはbrotliでOK"}],"tags":["noun"]},{"id":"01BQ92YZ6QCTPXGPWWJ5NWT6NC","description":"","expected":"Virtual Machine","patterns":["Virtual machine"],"specs":[{"from":"MSEdgeが使えるWindows 10のVirtual machine(VM)が公開された","to":"MSEdgeが使えるWindows 10のVirtual Machine(VM)が公開された"}],"tags":["noun","opinion"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWFVPNRGMBZ3RZNN1RD","description":"","expected":"Foundation","patterns":["Fundation"],"specs":[{"from":"Fundation","to":"Foundation"}],"tags":["typo"]},{"id":"01EKP3RFQ18K47EYH1ZKB5E4R5","description":"https://github.com/GoogleChrome/lighthouse","expected":"Lighthouse","patterns":["/\\bLighthouse\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":" lighthouse","to":" Lighthouse"},{"from":"lighthouse-cli","to":"lighthouse-cli"},{"from":"Lighthouse analyzes web apps","to":"Lighthouse analyzes web apps"}],"tags":["noun"]},{"id":"01BQ92YXWVT5PGRGQCH1ZZ6S7V","description":"","expected":"operator","patterns":["oeprator"],"specs":[],"tags":["typo"]},{"id":"01F4VMKJAEKHMANZVFFR9D6DJA","description":"AWS CloudFront https://aws.amazon.com/jp/cloudfront/","expected":"CloudFront","patterns":["/\\bCloudFront\\b/i"],"allows":["{{COMBINATION_WORD}}"],"specs":[{"from":"Cloudront","to":"Cloudront"},{"from":"Cloudfront","to":"CloudFront"},{"from":"awscloudfront","to":"awscloudfront"}],"tags":["noun"]},{"id":"01BQ92YYSF66CHGRP4MX5X6P0Q","description":"O'reilly is OK. But oreilly is not OK","expected":"Oreilly","patterns":["/Oreilly/i"],"specs":[{"from":"oreilly","to":"Oreilly"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWV1AKBHZDQ6D9GA3ZQ","description":"(数詞に付く場合)は漢字を使う","expected":"$1通り","patterns":["/(\\d)とおり/"],"specs":[{"from":"(例)2とおりの方法","to":"(例)2通りの方法"}],"tags":["opinion","表記統一"]},{"id":"01BQ92YYBHA4FM6A82V2ZT0V91","description":"Reference https://www.w3.org/TR/html-imports/","expected":"HTML Imports","patterns":["/HTML Import/i"],"specs":[{"from":"HTML import","to":"HTML Imports"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBEFBXEHH8T8HC8RCRD","description":"Reference https://www.ecma-international.org/publications/standards/Ecma-262.htm","expected":"ECMAScript $1","patterns":["/ECMAScript([0-9]+)/i","/ECMA Script([0-9]+)/i"],"specs":[{"from":"ECMASCRIPT5","to":"ECMAScript 5"},{"from":"ecmascript2015","to":"ECMAScript 2015"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BW0P1BD0VKQQMZ4E947WVMJ1","description":"See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/What_are_WebExtensions","expected":"WebExtension$1","patterns":["/Web Extension(s)?/"],"specs":[{"from":"Web Extension","to":"WebExtension"},{"from":"Extensions for Firefox are built using WebExtensions APIs","to":"Extensions for Firefox are built using WebExtensions APIs"},{"from":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions","to":"WebExtension APIs are designed to be compatible with Chrome and Opera extensions"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJP9EDR7KS993CMQAR","description":"","expected":"Virtual DOM","patterns":["/VirtualDOM/i"],"specs":[{"from":"VirtualDOM is virtual dom object","to":"Virtual DOM is virtual dom object"}],"tags":["noun","opinion","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHMN57CX27SAJQT2W0","description":"","expected":"Sauce Labs","patterns":["SauceLabs"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHGYFTTDANV4RNC3CJ","description":"Should have a space between words. Reference https://github.com/w3c/ServiceWorker","expected":"$1 $2","patterns":["/(service)(worker)/i"],"specs":[{"from":"This is serviceworker?","to":"This is service worker?"},{"from":"ServiceWorker","to":"Service Worker"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGQBRYXEZK5ZRRK1WW","description":"","expected":"Ecma標準","patterns":["ECMA標準"],"specs":[],"tags":["JavaScript"]},{"id":"01BQ92YYSD9K713DCXTFGNDENS","description":"Reference https://leanpub.com/","expected":"Leanpub","patterns":["/leanpub/i"],"specs":[{"from":"leanpub","to":"Leanpub"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQMSTDZCWH8P81E7PBG9BMQS","description":"importのtypoです","expected":"Import","patterns":["Impport"],"specs":[{"from":"Dynamic Impport","to":"Dynamic Import"},{"from":"Impporter","to":"Importer"}],"tags":["typo"]},{"id":"01BQ92YYBH2EZP1E4KVNDMXYV9","description":"Pointer Eventsに統一","expected":"Pointer Events","patterns":["/pointer event/i","/pointer events/i"],"specs":[{"from":"Pointer Events","to":"Pointer Events"},{"from":"MSEdgeの対応、pointer eventsなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"MSEdgeの対応、pointer eventなど対応、","to":"MSEdgeの対応、Pointer Eventsなど対応、"},{"from":"pointer-events","to":"pointer-events"}],"tags":["JavaScript","noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVJ7HG4TDWA45RH297","description":"","expected":"webpack","patterns":["/\\bwebpac(?!k)\\b/"],"specs":[{"from":"webpacのビルド速度改善についてのスライド","to":"webpackのビルド速度改善についてのスライド"}],"tags":["typo"]},{"id":"01BQ92YYBJTDA6WF56ZE9PKP8F","description":"Reference http://underscorejs.org/","expected":"Underscore.js","patterns":["/underscore.js/i"],"specs":[],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWVY5EFQNE4ZV8K0HS5","description":"","expected":"package.json","patterns":["packge.json"],"specs":[],"tags":["typo"]},{"id":"01DTET96387SQ3VYTXHYSX5BYS","description":"WebAssembly (abbreviated Wasm) https://webassembly.org/","expected":"Wasm","patterns":["/wasm/i"],"allows":[],"specs":[{"from":"wasm","to":"Wasm"},{"from":"WAsm","to":"Wasm"},{"from":"WebAssembly (abbreviated Wasm) ","to":"WebAssembly (abbreviated Wasm) "}],"tags":["noun"]},{"id":"01BQ92YXWQDKGCA9W74SKW7VST","description":"","expected":"Arrow Function","patterns":["Array Function"],"specs":[],"tags":["typo"]},{"id":"01BQ92YXWTV260J4A7W8TSWEXH","description":"","expected":"Workaround","patterns":["Workaound"],"specs":[{"from":"iOS7と8のquerySelectorバグの対処(Workaound)","to":"iOS7と8のquerySelectorバグの対処(Workaround)"}],"tags":["typo"]},{"id":"01BQ92YZ6R35HCYAZGN18RB35E","description":"Reference https://www.microsoft.com/windows","expected":"Windows $1","patterns":["/Windows (\\d+)/i"],"specs":[{"from":"OK windows","to":"OK windows"},{"from":"windows 10","to":"Windows 10"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01C1VCJNDQW7RN25S24KNP9V4M","description":"A typo Chromium","expected":"$1hromium","patterns":["/(C)hronium/i"],"specs":[{"from":"Chrome is Chronium","to":"Chrome is Chromium"},{"from":"Chrome is chronium","to":"Chrome is chromium"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01EKJAAAXCZR005PDSTRVT24QZ","description":"Jamstackに統一された https://github.com/jamstack/jamstack.org/issues/279","expected":"Jamstack","patterns":["/\\bJAMStack\\b/i"],"allows":[],"specs":[{"from":"Jamstack","to":"Jamstack"},{"from":"JAMStack is old word","to":"Jamstack is old word"},{"from":"jamjasmstack","to":"jamjasmstack"}],"tags":["noun"]},{"id":"01BQ92YW70P4BSGE4ZBMKECATV","description":"","expected":"PostCSS","patterns":["/PostCSS/i"],"specs":[{"from":"postcss","to":"PostCSS"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGSXM66TN1ZSJH177M","description":"","expected":"ES6 Classes","patterns":["/\\bES6 classes\\b/i"],"specs":[{"from":"ES6 classes","to":"ES6 Classes"}],"tags":["JavaScript"]},{"id":"01BQ92YW6Y5KA9YRC4HRPWZTVV","description":"","expected":"Flexbox","patterns":["Fluxbox"],"specs":[{"from":"CSS Fluxboxでは","to":"CSS Flexboxでは"}],"tags":["noun","CSS"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6QR8RJKA5Y8W2F9NMY","description":"Reference https://webkit.org/","expected":"WebKit","patterns":["/webkit/i"],"specs":[{"from":"これはwebkitです","to":"これはWebKitです"},{"from":"XXXwebkit","to":"XXXwebkit"},{"from":"node-webkit","to":"node-webkit"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJENZB6M480KCJ0J99","description":"Reference http://jquery.com/","expected":"jQuery","patterns":["/jquery/i"],"specs":[{"from":"Jquery","to":"jQuery"},{"from":"jquery","to":"jQuery"},{"from":"jquery-ui","to":"jquery-ui"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01CF6NR1Q7XWC035B9XJXNB852","description":"typo","expected":"$1nimation","patterns":["/(a)nimation/i"],"specs":[{"from":"Animation","to":"Animation"},{"from":"CSS Animation","to":"CSS Animation"},{"from":"CSS animations","to":"CSS animations"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWJG32Z679PF9CHJJD5R","description":"","expected":"$1デフォルトで有効$2","patterns":["/(?:(が)デフォルト有効)|(?:デフォルト有効(に))/"],"specs":[],"tags":["opinion","jser.info"]},{"id":"01EF8QSDGRB63DFJ54B68AKN7J","description":"webpack is lower-case https://webpack.js.org/","expected":"webpack","patterns":["/\\bwebpack\\b/i"],"allows":[],"specs":[{"from":"webpack","to":"webpack"},{"from":"WebPack","to":"webpack"},{"from":"BuildWebPack is OK","to":"BuildWebPack is OK"}],"tags":["noun"]},{"id":"01BQ92YYBJDYYAR7DFH7M57G1P","description":"AngularJS(1.x)はJSを付けます","expected":"AngularJS","patterns":["/Angular\\.js/i","/angularjs/i"],"specs":[{"from":"Angular.js","to":"AngularJS"}],"tags":["JavaScript"]},{"id":"01DSDJ2ZNSB644ZB0SD53C62X5","description":"","expected":"Archive","patterns":["Archieve"],"allows":[],"specs":[{"from":"HTTP Archieve","to":"HTTP Archive"}],"tags":["noun"]},{"id":"01BQ92YYBGWJZC59XKSNA53X2C","description":"Reference https://www.w3.org/TR/webstorage/","expected":"localStorage","patterns":["localstorage","local storage"],"specs":[{"from":"localstorage is a parts of webstorage","to":"localStorage is a parts of webstorage"},{"from":"local storage is a parts of webstorage","to":"localStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWTM3A3CG10MT3FCD55","description":"","expected":"Performance","patterns":["/peformance/i"],"specs":[{"from":"ブラウザ上でどうやって計測するかやPeformance Timelineなどの仕様について","to":"ブラウザ上でどうやって計測するかやPerformance Timelineなどの仕様について"}],"tags":["typo"]},{"id":"01BQ92YZ6QD58PVYY3FE7QD2S5","description":"Reference http://www.seleniumhq.org/projects/webdriver/","expected":"WebDriver","patterns":["/WebDriver/i","/Web Driver/i"],"specs":[{"from":"Web Driver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"webdriver is designed in a simpler and more concise programming interface","to":"WebDriver is designed in a simpler and more concise programming interface"},{"from":"WebdriverIO is OK.","to":"WebdriverIO is OK."}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJXRCA80R6BCA4SS7K","description":"Angular(2.0~)","expected":"Angular","patterns":["/angular/i"],"specs":[{"from":"angular","to":"Angular"},{"from":"angulardart","to":"angulardart"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YZ6Q0Y22BVKAVFC4VV1N","description":"Reference http://ocaml.org/","expected":"OCaml","patterns":["/OCaml/i"],"specs":[{"from":"ocaml","to":"OCaml"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YWWH8TVT2N8FT61TTDNH","description":"ひらがなで書かず、漢字で書くと読みやすくなります","expected":"$1中","patterns":["/(その)なか/","/(世界|日)じゅう/"],"specs":[],"tags":["opinion","表記統一"]},{"id":"01BQ92YZ6NT1NACB4X0DC8XHFH","description":"","expected":"$1 EAP","patterns":["/([0-9\\.]+)EAP/"],"specs":[],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJK6WW9Y09W7TF1YTT","description":"See http://todomvc.com/","expected":"TodoMVC","patterns":["/todomvc/i"],"specs":[{"from":"todomvc is todo app.","to":"TodoMVC is todo app."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYSHHRNMZPY2VG4991B7","description":"","expected":"Travis CI","patterns":["/TravisCI/i"],"specs":[{"from":"TravisCI is a service","to":"Travis CI is a service"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Z","description":"https://github.com/sveltejs","expected":"$1velte","patterns":["/(s)velete/i"],"allows":[],"specs":[{"from":"svelete","to":"svelte"},{"from":"Svelete","to":"Svelte"}],"tags":["noun"]},{"id":"01BQ92YYBGNT2ZA7SCBGZP4XW8","description":"Reference https://www.w3.org/TR/webstorage/","expected":"sessionStorage","patterns":["sessionstorage","session storage"],"specs":[{"from":"sessionstorage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"},{"from":"session storage is a parts of webstorage","to":"sessionStorage is a parts of webstorage"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBHB83ZNFWK5WBA58B7","description":"JavaScript is not Java Script","expected":"JavaScript","patterns":["/javascript/i","/Java Script/i"],"specs":[{"from":"javascript","to":"JavaScript"},{"from":"java script","to":"JavaScript"},{"from":"Java script","to":"JavaScript"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH2H42AT29Y4BP84FA","description":"Reference https://www.w3.org/TR/touch-events/","expected":"Touch Events","patterns":["/Touch Event/i","/Touch Events/i"],"specs":[{"from":"Touch Event、Fullscreen APIなどのサポートなど","to":"Touch Events、Fullscreen APIなどのサポートなど"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBH4NNWB305Y1TD7B6N","description":"Reference https://www.w3.org/TR/webaudio/","expected":"Web Audio API","patterns":["/WebAudio API/i","/Web AudioAPI/i","/Web Audio API/i"],"specs":[{"from":"All scheduled times in the WebAudio API are relative to the value of currentTime.","to":"All scheduled times in the Web Audio API are relative to the value of currentTime."}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBGNAKFHY1TFA9Z3KTC","description":"Reference https://w3c.github.io/webcomponents/explainer/","expected":"Web Components","patterns":["/WebComponents/i","/web components/i"],"specs":[{"from":"WebComponentsについてのWeeklyメールマガジン","to":"Web ComponentsについてのWeeklyメールマガジン"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BSADQQDT7DEBJT25555YCQ14","description":"Reference https://www.mysql.com/","expected":"MySQL","patterns":["/mysql/i"],"specs":[{"from":"mysql is a database.","to":"MySQL is a database."},{"from":"Oracle mysql","to":"Oracle MySQL"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01F0W5YS57VWFW3DAP3EC92D6Y","description":"https://github.com/sveltejs/kit","expected":"SvelteKit","patterns":["/SveleteKit/i"],"allows":[],"specs":[{"from":"SveleteKit","to":"SvelteKit"},{"from":"SvelteKit","to":"SvelteKit"}],"tags":["noun"]},{"id":"01BQ92YYSHHTGFD78FF7NB4RX9","description":"","expected":"HTML5 Rocks","patterns":["/HTML5Rocks/i","/HTML5Rock/i"],"specs":[{"from":"HTML5Rockに現在公開されている翻訳記事のまとめ","to":"HTML5 Rocksに現在公開されている翻訳記事のまとめ"}],"tags":["noun"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YYBJCY50GECA6CQH874F","description":"Reference https://www.emberjs.com/","expected":"Ember.js","patterns":["/Ember\\.js/i"],"specs":[{"from":"ember.js","to":"Ember.js"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]},{"id":"01BQ92YXWR8T1QBP2JSKFH74RK","description":"","expected":"CoffeeScript","patterns":["CoffeScript"],"specs":[{"from":"CoffeScriptからES6","to":"CoffeeScriptからES6"}],"tags":["typo"]},{"id":"01BQ92YXWVMAMKQ3VK2DNYNCCP","description":"Customのtypoです","expected":"Custom","patterns":["/Custome\\b/i"],"specs":[{"from":"WebVRをCustome Elementのタグで書く","to":"WebVRをCustom Elementのタグで書く"}],"tags":["typo"]},{"id":"01FB0ZGJEK2GEKX4AM7KCT1E8Y","description":"WHAWG typo","expected":"WHATWG","patterns":["/\\bWHAWG\\b/","/\\bWHATWGT\\b/"],"allows":[],"specs":[{"from":"WHATWG","to":"WHATWG"},{"from":"WHAWG","to":"WHATWG"},{"from":"WHATWG","to":"WHATWG"}],"tags":["noun"]},{"id":"01BQ92YXWQ02R8SE1ZZHCG89P5","description":"","expected":"Property","patterns":["/propety/i"],"specs":[{"from":"propety","to":"Property"}],"tags":["typo"]},{"id":"01BQ92YYBJBBNRPR2WYHMDYPPG","description":"Reference http://source-map.github.io/","expected":"Source Map","patterns":["/Source Map/i","/SourceMap/i"],"specs":[{"from":"多段SourceMapに対応","to":"多段Source Mapに対応"},{"from":"SourceMap","to":"Source Map"}],"tags":["noun","JavaScript"],"allows":["{{COMBINATION_WORD}}"]}]
\ No newline at end of file
diff --git a/.cache/kvs-node-localstorage/proofdict-lastUpdated b/.cache/kvs-node-localstorage/proofdict-lastUpdated
index 6a7341f..c5cba75 100644
--- a/.cache/kvs-node-localstorage/proofdict-lastUpdated
+++ b/.cache/kvs-node-localstorage/proofdict-lastUpdated
@@ -1 +1 @@
-1627271542737
\ No newline at end of file
+1628843702837
\ No newline at end of file
diff --git a/articles/38f7a866799414.md b/articles/38f7a866799414.md
new file mode 100644
index 0000000..d559339
--- /dev/null
+++ b/articles/38f7a866799414.md
@@ -0,0 +1,197 @@
+---
+title: "[個人開発] Vue3 で「動く」Slack絵文字ジェネレーターを作った話"
+emoji: "👨‍🎨"
+type: "tech" # tech: 技術記事 / idea: アイデア
+topics: ["個人開発", "Vue3", "TypeScript", "Vercel", "Slack"]
+published: true
+---
+
+先日リリースした個人開発のアプリについて感想や技術スタックなど色々書きます。
+
+# どんなアプリを公開した?
+以下ツイートで紹介している、 Slack の絵文字スタンプ用のアニ GIF を簡単につくれるアプリを公開しました。
+
+https://twitter.com/KawamataRyo/status/1425292135356682248
+
+タイミングが良かったのか数多く Retweet してもらえ、 Twitter を初めて初のバズの波動を感じました。アプリ自体はこちらです。とても簡単に試せるのでぜひ使ってもらえると嬉しいです。
+
+https://www.animated-emoji-gen.com/
+
+
+# 技術スタック
+
+- 言語: TypeScript
+- フレームワーク: Vue.js 3
+- ビルドツール: Vite
+- インフラ: Vercel
+
+
+Vue3 の SPA を Vite でビルドし、Vercel にデプロイしています。そして絵文字の描画・アニメーション部分は SVG を利用。サーバーは持たず、SVG から GIF の変換も全てフロントエンドで行っています。
+
+あまり見せられたものでは無いですが、コードは全て GitHub に公開しています。
+
+https://github.com/kawamataryo/animated-emoji-gen
+
+# 開発いろいろ
+
+## 開発期間
+[Wakka Time](https://wakatime.com/)をエディタに導入していたので、開発期間のデータが取れました。
+
+![](https://i.gyazo.com/07de4ce328f150888cf94695ffe94a65.png)
+
+:::message
+プロジェクト名が svg-sample になっているのは当初「SVG の練習でもするかー」と軽い気持ちで始めた名残です。
+:::
+
+8 月 7 日に開発をスタートして、11 日のリリース日までで合計約 39 時間コードを書いていたようです。
+
+3 連休で外出出来ないことを良いことに 1 日 10 時間書いている日もあります。 3 連休最終日に妻に「PC やりすぎ💢」とめちゃ怒られたのも納得です。。
+
+SVG 操作を初めて触るところから開発をスタートしていることを考慮すると、割と早く形になったのかなと思います。個人開発は勢いが大事だと実感しました。
+
+
+## 運用費用
+
+Vercel の無料プランでホストしているので今のところサーバー代は 0 円です。サーバー実装を持たず、SVG から GIF の変換もフロント側で全て完結したことが維持費用にも貢献しました。
+ただ、一応 [animated-emoji-gen.com](https://www.animated-emoji-gen.com/) のドメインを取得したので、その料金(年間 900 円程)が別途かかっています。
+
+## アクセス数の推移
+
+初日に公開ツイートがバズったおかげで 1300 ユーザーとかなりのアクセスがありました。しかし、その後は劇的な低下具合・・。
+まだオーガニック検索での流入は期待できないのでしょうがないかなとは思いますが、今後検索からも使ってもらえるようにしていきたいです。
+
+また、後述する vue-i18n-next を使って多言語対応したおかげか、海外からのアクセスも数件あります。需要あるのかまだ分からないのですが、今後に期待。
+
+![](https://i.gyazo.com/f7905230a73bcf8a6ee020412877c188.png)
+
+
+# 技術的なポイント
+実装するうえでの技術的なポイントを簡単に紹介します。
+
+## テキストのSVG Pathへの変換
+絵文字の要素としてテキストを柔軟に扱うために、SVG の`<text>`タグは利用せず、テキストを一度 SVG Path に変換しています。
+
+変換には ttf ファイルや otf ファイルを Parse して SVG Path を出力できる [opentype.js](https://github.com/opentypejs)を利用しています。
+
+https://github.com/opentypejs/opentype.js
+
+以下のように Font ファイルをロードして、任意の文字列を渡すことで SVG Path Data を取得できます。
+
+```ts
+import { load } from "opentype.js";
+
+const textToPathData = async (text: string): string => {
+  const font = await load('使用したいFontファイルへのPath')
+  return font.getPath(text, 0, 0, 128).toPathData(2)
+}
+```
+
+実際のコードでは、アプリ初期化時と言語変更時に、Noto フォントの各言語ファイルをロードして利用しています。
+
+https://github.com/kawamataryo/animated-emoji-gen/blob/main/src/composables/useGenerateFontPath.ts#L95-L116
+
+
+## SVG PathのViewBoxへのフィット
+
+128×128 の枠内を GIF として出力する都合上、どのような文字数・改行でも 128×128 の SVG の ViewBox の枠にフィットさせる必要があります。
+
+![](https://i.gyazo.com/499f5aecfd6666db55977426e85449f0.gif)
+
+このフィットは自動では出来ないので、SVG Path の transform scale のを使って、枠サイズに合わせて文字列の SVG Path を拡大縮小することで対応しています。
+
+実装箇所はこちらです。
+
+https://github.com/kawamataryo/animated-emoji-gen/blob/main/src/composables/useGenerateFontPath.ts#L64-L91
+
+```ts
+  const textSize = computed(() => {
+    return rows.value.map((t) => {
+      if (!font.value) {
+        return {
+          height: 0,
+          width: 0,
+        };
+      }
+      const { x1, y1, x2, y2 } = font!.value
+        .getPath(t, 0, 0, viewSize)
+        .getBoundingBox();
+      return {
+        width: x2 - x1 + 20.8,
+        height: y2 - y1 + 20.8,
+      };
+    });
+  });
+
+  const transforms = computed(() => {
+    if (!font.value || !text.value.length) {
+      return ["scale(1,1)"];
+    }
+    return rows.value.map((t, i) => {
+      const xScale = viewSize / (textSize.value[i].width + 8);
+      const yScale = viewSize / textSize.value[i].height / rows.value.length;
+      return `scale(${xScale}, ${yScale})`;
+    });
+  });
+```
+
+opentype.js の`getBoundingBox`を使って描画前に文字のサイズを取得して、それをviewBox の大きさから割ることで、拡大率を出しています。そしてそれを SVG タグの transform にわたすことで、文字数・行に応じてリアクティブにサイズを変更しています。
+
+:::message
+`+ 8`とか`+ 20.8`などのマジックWordは、良い感じに Fit させるための微調整です。おそらくもっと良い計算方法があるはずですが、思いつかなかった。。
+:::
+
+## SVG Filter
+文字の動き・加工は、SVG Filter に SVG の`<animate>`タグでアニメーションを設定することで実現しています。
+
+Filter 自体のコーディングは、[SVG Filters](https://yoksel.github.io/svg-filters/#/)という SVG Filter を GUI で生成できるサイトで作ったものの流用です。とても便利。
+
+https://yoksel.github.io/svg-filters/#/
+
+## SVGのGIFへの変換
+
+ブラウザ上での SVG から GIF への変換は、一番苦労したところです。当初、SVG を Canvas に変換し、そこから GIF にするなど色々試したのですが全く上手くいきませんでした。
+
+結局[@yueco](https://twitter.com/yuneco)さんの神記事で紹介されていた方法で対応しました。詳細は記事をご欄ください。
+
+https://qiita.com/yuneco/items/e9c21cbb0cf767368b27
+
+一部 UI の都合上で処理を調整しているのですが、ほぼほぼ記事で掲載されている`svg2gif.ts`の実装をそのまま利用しています。感謝🙏
+
+https://github.com/kawamataryo/animated-emoji-gen/blob/main/src/core/svg2gif.ts
+
+
+## 他言語対応
+
+利用ユーザーを増やすため英語圏のユーザーにもアクセスしてもらいたいと思い、[vue-i18n-next](https://github.com/intlify/vue-i18n-next)を使い多言語対応を実装しました。vue-i18n-next はとても直感的な API で多言語化を実現できるのでとてもおすすめです。
+
+https://github.com/intlify/vue-i18n-next
+
+他、今回 vue-i18n-next の開発者である[kazupon](https://twitter.com/kazu_pon?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor)さんにもツイートを拾っていただき、性能改善 PR を送ってもらうという奇跡も起こりました。
+
+https://github.com/kawamataryo/animated-emoji-gen/pull/2
+
+GA 上でも海外からのアクセスが数件確認できているので、多言語対応の意味はあったのかなと思います。今後伸ばしていきたいです。
+
+## デザイン
+
+デザインは CSS フレームワークの[bulma](https://bulma.io/)を利用しています。直感的な class 名でスタイルを調整できるのが好きです。
+
+https://bulma.io/
+
+他、サイドバーに入力フォーム、中央にタイル状にフォントを描画するというレイアウトについては[@corocon](https://twitter.com/corocn)さんの[Slack Emoji Generator](https://slackemojigen.com/)の神がかったレイアウトをまるっと参考にさせていただきました 🙏
+
+自分自身、今までずっとこちらのアプリで絵文字を作っていました。シンプルな UI でとても使いやすいです。
+
+https://slackemojigen.com/
+
+その他 OG Image や全体のカラーテイストは愚直に Figma と CSS を色々いじりながら、調整しました。結果的に自分なりにはシンプルで見やすい感じになって良かったかなと思います。
+
+
+# おわりに
+
+初めて皆に使ってもらえるアプリを個人開発で作ったのですが、様々な方に感想をもらえてとても嬉しかったです。
+また、初日の一時ですが、個人開発アプリの GA を眺めながらニヤニヤするという自分には縁のないと思っていたら楽しみも体験できました。開発自体とても楽しかったので今後も animated-emoji-gen.com を継続して維持・改善していきたいです。
+
+他、性能改善やFilter追加のプルリクエストはいつでも歓迎なので気軽に送ってください。
+
+https://github.com/kawamataryo/animated-emoji-gen
\ No newline at end of file
diff --git a/articles/b6f679bfe11261.md b/articles/b6f679bfe11261.md
new file mode 100644
index 0000000..1ab398c
--- /dev/null
+++ b/articles/b6f679bfe11261.md
@@ -0,0 +1,93 @@
+---
+title: "真面目にOSSを公開する際にやってみたこと・意識したこと"
+emoji: "📦"
+type: "tech" # tech: 技術記事 / idea: アイデア
+topics: ["vue", "github", "githubActions", "oss"]
+published: false
+---
+初めて真面目に自分のコードを OSS として公開するうえで、色々試行錯誤したことを書きます。
+
+:::message
+「真面目に」の基準は過去の自分が公開したリポジトリに比べてです 🙏 まだまだ至らないところ多いと思うので、気軽にコメント頂けると嬉しいです。
+:::
+
+# 何を公開した?
+[Vue Word Highlighter](https://github.com/kawamataryo/vue-word-highlighter) という Vue.js のコンポーネントライブラリを公開しました。
+機能はとても単純で、文字列と検索クエリを渡すと、検索クエリに合致した文字列の一部をハイライト(`<mark>`タグ又は任意のタグ囲む)するというものです。
+
+https://github.com/kawamataryo/vue-word-highlighter
+
+業務で検索ハイライトの実装を試していた際に良さそうな実装方法を見つけ、せっかくだから汎用的な機能にして OSS として公開してみようと思い立ちました。
+そして公開するなら真面目に環境整備して皆に使ってもらえるものにしたいと思いました。
+
+
+# 公開までにやってみたこと
+
+公開までにやってみたことを書きます。
+
+## READMEをちゃんと書く
+人は見た目が 9 割ではないですが、OSS の顔と言ったら README なので、ひと目でちゃんとしてそうな OSS 感を出すために README は自分なりに色々工夫してみました。
+
+### ロゴを作る
+使われている OSS にはほぼロゴがある気がします。なので、Google Font で良さそうな書体を適当に探しハイライトしただけの単純なものですが、ロゴを作成しました。ロゴの完成度はともかく、あるのとないのでは大分印象が変わると思います。
+
+![](https://i.gyazo.com/eed30a7a5c6d5885f00a8e1326561005.png =400x)
+
+### Shields.ioでバッジを作る
+Shields.io の API で CI の状況や npm の download 数などのバッジを作りました。最新バージョンがなんなのか、どれくらい利用者がいるのかひと目で分かって良いです。
+
+![](https://i.gyazo.com/f2b732186b0f016b11c598d597fff467.png =500x)
+
+https://shields.io/
+
+
+### サンプルコードを多めに丁寧に使い方を書く
+当たり前ですが、初めて見た人が使いやすいように、Install から簡単な使い方、オプショナルな設定まで自分なりに丁寧に書いてみました。英語は、DeepL 翻訳全開なので、あまりあっているか自信がないですが、サンプルコードを多めに書くことで、なんとか雰囲気は伝わるのではと思います。
+
+
+## CI環境を整備する
+- テストの話
+- ESLint の話
+- husky
+- GitHub Actions の話
+
+## CD環境を整備する
+- commit-lint
+- Semantic-release の話
+- GitHub Actions の話
+
+
+## すぐ使えるデモサイトを作る
+何か機能を試す際にいちいちローカルに落とす必要なくサクッと試せると便利です。
+なので今回の vue-word-highlighter でも機能をライトに試せるデモサイトをしっかり目に作りました。
+
+https://kawamataryo.github.io/vue-word-highlighter/
+
+デモサイト自体も同リポジトリで管理して、GitHub Actions で GitHub Pages にデプロイしているので低コストです。
+
+また、デモサイト以外にも実際にコードを書き換えながら試せる場所があると便利かなと思い Code Sandbox も用意しました。
+
+@[codesandbox](https://codesandbox.io/embed/vue3-word-highlighter-example-u2bhe?autoresize=1&fontsize=14&hidenavigation=1&module=%2Fsrc%2FApp.vue&theme=dark)
+
+## 既存OSSとの差別化を考える
+機能はとても単純で、割とよくある UI で使われるものなので類似ライブラリは色々ありました。それらと同じものを公開しても、使ってもらえる可能性は少ないと思います。
+なので今回の差別化として、Vue3 でも Vu2 でも使えるというのを差別化ポイントにしました。
+おそらく今は Vue2 から Vue3 への移行期で、新規に追加する Plugin については移行時に障害にならないかを検討するのかなと思い、その際に障害にならないものがよいと考えたのがきっかけです。
+
+機能的には Vue2、Vue3 両方に対応したライブラリを作れる [Vue-demi](https://github.com/vueuse/vue-demi) を内部的に使って実現しています。
+
+https://github.com/vueuse/vue-demi
+
+
+## ディレクトリ構成をきれいにする
+- mono レポにした話
+
+
+## 依存モジュールの更新環境
+- renovate の導入
+
+## 広報を頑張る
+- Twitter での告知、英語での告知、&この記事
+- madewith vue への登録
+
+# 終わりに
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..6c8088d
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,12739 @@
+{
+  "name": "zen-articles",
+  "version": "1.0.0",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "version": "1.0.0",
+      "license": "ISC",
+      "dependencies": {
+        "@proofdict/textlint-rule-proofdict": "^3.1.1",
+        "@textlint-ja/textlint-rule-no-insert-dropping-sa": "^1.0.1",
+        "apollo-server-micro": "^2.19.2",
+        "textlint": "^11.6.3",
+        "textlint-filter-rule-comments": "^1.2.2",
+        "textlint-filter-rule-whitelist": "^2.0.0",
+        "textlint-rule-abbr-within-parentheses": "^1.0.2",
+        "textlint-rule-footnote-order": "^1.0.3",
+        "textlint-rule-general-novel-style-ja": "^1.3.0",
+        "textlint-rule-ja-hiragana-fukushi": "^1.2.0",
+        "textlint-rule-ja-hiragana-hojodoushi": "^1.0.4",
+        "textlint-rule-ja-hiragana-keishikimeishi": "^1.0.2",
+        "textlint-rule-ja-unnatural-alphabet": "^2.0.1",
+        "textlint-rule-ng-word": "^1.0.0",
+        "textlint-rule-no-mixed-zenkaku-and-hankaku-alphabet": "^1.0.1",
+        "textlint-rule-period-in-list-item": "^0.3.2",
+        "textlint-rule-prefer-tari-tari": "^1.0.3",
+        "textlint-rule-preset-ja-spacing": "^2.0.2",
+        "textlint-rule-preset-ja-technical-writing": "^3.1.3",
+        "textlint-rule-preset-jtf-style": "^2.3.4",
+        "textlint-rule-prh": "^5.3.0",
+        "textlint-rule-spellcheck-tech-word": "^5.0.0",
+        "zenn-cli": "^0.1.93"
+      }
+    },
+    "node_modules/@apollo/protobufjs": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.0.5.tgz",
+      "integrity": "sha512-ZtyaBH1icCgqwIGb3zrtopV2D5Q8yxibkJzlaViM08eOhTQc7rACdYu0pfORFfhllvdMZ3aq69vifYHszY4gNA==",
+      "hasInstallScript": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/long": "^4.0.0",
+        "@types/node": "^10.1.0",
+        "long": "^4.0.0"
+      },
+      "bin": {
+        "apollo-pbjs": "bin/pbjs",
+        "apollo-pbts": "bin/pbts"
+      }
+    },
+    "node_modules/@apollo/protobufjs/node_modules/@types/node": {
+      "version": "10.17.55",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.55.tgz",
+      "integrity": "sha512-koZJ89uLZufDvToeWO5BrC4CR4OUfHnUz2qoPs/daQH6qq3IN62QFxCTZ+bKaCE0xaoCAJYE4AXre8AbghCrhg==",
+      "license": "MIT"
+    },
+    "node_modules/@apollographql/apollo-tools": {
+      "version": "0.4.9",
+      "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.4.9.tgz",
+      "integrity": "sha512-M50pk8oo3CGTu4waGOklIX3YtTZoPfWG9K/G9WB8NpyQGA1OwYTiBFv94XqUtKElTDoFwoMXpMQd3Wy5dINvxA==",
+      "license": "MIT",
+      "dependencies": {
+        "apollo-env": "^0.6.6"
+      },
+      "engines": {
+        "node": ">=8",
+        "npm": ">=6"
+      }
+    },
+    "node_modules/@apollographql/graphql-playground-html": {
+      "version": "1.6.27",
+      "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz",
+      "integrity": "sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==",
+      "license": "MIT",
+      "dependencies": {
+        "xss": "^1.0.8"
+      }
+    },
+    "node_modules/@apollographql/graphql-upload-8-fork": {
+      "version": "8.1.3",
+      "resolved": "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz",
+      "integrity": "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/express": "*",
+        "@types/fs-capacitor": "*",
+        "@types/koa": "*",
+        "busboy": "^0.3.1",
+        "fs-capacitor": "^2.0.4",
+        "http-errors": "^1.7.3",
+        "object-path": "^0.11.4"
+      },
+      "engines": {
+        "node": ">=8.5"
+      },
+      "peerDependencies": {
+        "graphql": "0.13.1 - 15"
+      }
+    },
+    "node_modules/@apollographql/graphql-upload-8-fork/node_modules/http-errors": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz",
+      "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==",
+      "license": "MIT",
+      "dependencies": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/@apollographql/graphql-upload-8-fork/node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "license": "ISC"
+    },
+    "node_modules/@azu/format-text": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.1.tgz",
+      "integrity": "sha1-aWc1CpRkD2sChVFpvYl85U1s6+I=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@azu/style-format": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.0.tgz",
+      "integrity": "sha1-5wGH+Khi4ZGxvObAJo8TrNOlayA=",
+      "license": "WTFPL",
+      "dependencies": {
+        "@azu/format-text": "^1.0.1"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.14.8",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz",
+      "integrity": "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==",
+      "dependencies": {
+        "regenerator-runtime": "^0.13.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@bahmutov/data-driven": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@bahmutov/data-driven/-/data-driven-1.0.0.tgz",
+      "integrity": "sha512-YqW3hPS0RXriqjcCrLOTJj+LWe3c8JpwlL83k1ka1Q8U05ZjAKbGQZYeTzUd0NFEnnfPtsUiKGpFEBJG6kFuvg==",
+      "license": "MIT",
+      "dependencies": {
+        "check-more-types": "2.24.0",
+        "lazy-ass": "1.6.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/@kvs/env": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@kvs/env/-/env-0.2.1.tgz",
+      "integrity": "sha512-6dZlDtRjSRX3ubC+Rt5BdX+z3XTe92IgSG7wPu5a+qFPgKLqjlf+quY+J5JfY3WO8qZEdsMGk3PYTawJUnfrOQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@kvs/indexeddb": "^0.2.1",
+        "@kvs/node-localstorage": "^0.2.1"
+      }
+    },
+    "node_modules/@kvs/indexeddb": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@kvs/indexeddb/-/indexeddb-0.2.1.tgz",
+      "integrity": "sha512-kRFlWxSVS8HDReInHErYho7QfVttSaSD0eeeeQvvFFfC2U9YSR95L70ielgWd6hfUXNa7uzVwAzF8xvgyCCYLQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@kvs/types": "^0.2.1"
+      }
+    },
+    "node_modules/@kvs/node-localstorage": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@kvs/node-localstorage/-/node-localstorage-0.2.1.tgz",
+      "integrity": "sha512-10HDKOb/Oi2dGt7CV4UmIeTHQRFMErMjK3q/v/+s0d5YZukr7Er+SqaEJ9e5VFfJxEpaJ8pxRrkT+OLLX67jyw==",
+      "license": "MIT",
+      "dependencies": {
+        "@kvs/storage": "^0.2.1",
+        "app-root-path": "^3.0.0",
+        "mkdirp": "^1.0.4",
+        "node-localstorage": "^2.1.6"
+      }
+    },
+    "node_modules/@kvs/node-localstorage/node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@kvs/storage": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@kvs/storage/-/storage-0.2.1.tgz",
+      "integrity": "sha512-Grepnd44Dr2RC+UxdcCe1SdRgIJBTeVihSdX6eRaMKCA2vHr5H63AftakG2rK1wo9pPItBsxFY5YQb64+j+LkQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@kvs/types": "^0.2.1"
+      }
+    },
+    "node_modules/@kvs/types": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/@kvs/types/-/types-0.2.1.tgz",
+      "integrity": "sha512-tBJjUVCHOR8kk7ez9S4XTI+Qil0xgsRfdW3tAH3DfdoEsLDxANfsM9ZWhj2FWzvBMlQQAvbrENyggMTlw6IHfg==",
+      "license": "MIT"
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
+      "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.4",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz",
+      "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz",
+      "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.4",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@proofdict/tester": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@proofdict/tester/-/tester-3.1.0.tgz",
+      "integrity": "sha512-qzeYjOfNwpt4WF6rN9YHLUsGF3OEGD+Zt3ZfJ1KDw2tKH8e2lr9bVsEIbq7v3KBgoGo43zgx3bNsPM/CuE027w==",
+      "license": "MIT",
+      "dependencies": {
+        "@proofdict/types": "^3.1.0",
+        "prh": "5.4.4"
+      }
+    },
+    "node_modules/@proofdict/textlint-rule-proofdict": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@proofdict/textlint-rule-proofdict/-/textlint-rule-proofdict-3.1.1.tgz",
+      "integrity": "sha512-e3ZCbCVSuwrczNOuTvQPiHn9xOYIwMDJuWZH5tnHMXuh78JGzm2XtSvPuvrMZ0s8kPmK02HNDVo5aTQ8AnvLJw==",
+      "license": "MIT",
+      "dependencies": {
+        "@kvs/env": "^0.2.0",
+        "@proofdict/tester": "^3.1.0",
+        "@textlint/kernel": "^3.3.6",
+        "@textlint/types": "^1.4.5",
+        "debug": "^4.1.1",
+        "fetch-ponyfill": "^6.1.0",
+        "globby": "^10.0.1",
+        "js-yaml": "^3.13.1",
+        "textlint-rule-helper": "^2.1.1",
+        "url-join": "^4.0.1"
+      }
+    },
+    "node_modules/@proofdict/types": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@proofdict/types/-/types-3.1.0.tgz",
+      "integrity": "sha512-f8cxZ35ylr4n8TW/eUJ9KynEc484Tiocgl4a/ZZNS1dAH5G4vkJ+1AFw2ob/4dCiafy5tcue6TiZuWBFAmsS5g==",
+      "license": "MIT"
+    },
+    "node_modules/@protobufjs/aspromise": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+      "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/base64": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+      "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/codegen": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+      "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/eventemitter": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+      "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/fetch": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+      "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.1",
+        "@protobufjs/inquire": "^1.1.0"
+      }
+    },
+    "node_modules/@protobufjs/float": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+      "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/inquire": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+      "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/path": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+      "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/pool": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+      "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@protobufjs/utf8": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+      "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@steelydylan/markdown-it-imsize": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@steelydylan/markdown-it-imsize/-/markdown-it-imsize-1.0.2.tgz",
+      "integrity": "sha512-3tfhRLlv8w3GSNzjEx3y1JIyHpCuBhqXN6tILRTR4IhZcrJb6WJJo12jZ/lKiT9VITg9kHHHg6yVsDwO5nnZqw=="
+    },
+    "node_modules/@steelydylan/prism-diff-highlight": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@steelydylan/prism-diff-highlight/-/prism-diff-highlight-1.0.4.tgz",
+      "integrity": "sha512-1M16pY3PvWVScLrYj9nENZm1yQ+V/w2YoB6NMZkv+/O/nAHoRg6qS1BX8FNnCKSbIk52QIwj+NUi/sUK2EMuew=="
+    },
+    "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@textlint-ja/textlint-rule-no-insert-dropping-sa/-/textlint-rule-no-insert-dropping-sa-1.0.2.tgz",
+      "integrity": "sha512-znlllxSyAeBWhyNBCJaZLvVDyQgFQp159LKU0EKN69qMxLiXy8ZDEjOEAWqPV36a9JXgL6msg5D87110k5PKGg==",
+      "license": "MIT",
+      "dependencies": {
+        "array-find-index": "^1.0.2",
+        "kuromojin": "^2.1.1",
+        "morpheme-match-all": "^2.0.5"
+      }
+    },
+    "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa/node_modules/morpheme-match": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/morpheme-match/-/morpheme-match-2.0.4.tgz",
+      "integrity": "sha512-C3U5g2h47dpztGVePLA8w2O1aQEvuJORwIcahWaCG91YPrq+0u7qcPsF9Nqqe8noFvHwgO7b2EEk3iPnYuGTew==",
+      "license": "MIT"
+    },
+    "node_modules/@textlint-ja/textlint-rule-no-insert-dropping-sa/node_modules/morpheme-match-all": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/morpheme-match-all/-/morpheme-match-all-2.0.5.tgz",
+      "integrity": "sha512-a6B6Nh4AhjMoEzVz8NOT5M9f3XwFVPM395gqnFNUXG/KTqQFTb9qM5JJFHJe+SvWfRVXTZSejyXNt+h+jmHUuQ==",
+      "license": "MIT",
+      "dependencies": {
+        "morpheme-match": "^2.0.4"
+      }
+    },
+    "node_modules/@textlint-rule/textlint-rule-no-invalid-control-character": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@textlint-rule/textlint-rule-no-invalid-control-character/-/textlint-rule-no-invalid-control-character-1.2.0.tgz",
+      "integrity": "sha512-FgkOQr14H8D/LQVAEOR2cGWhzItb9MXCAvaBwKkysIfP9Ngwam+8NRmbphQ/GrA