{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/what-about-hothouse/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"5a551b4c-bc80-50f2-9fca-f55fe400bdea","excerpt":"hothouseというツールを作成しました。 package.json とロックファイルを更新して GitHub に pull request を作成する CLI ツールです。 npm か Yarn をパッケージマネージャとして使用できます。 普通のリポジトリだけではなく、Lerna や Yarn workspaces…","html":"<p><a href=\"https://github.com/Leko/hothouse\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">hothouse</a>というツールを作成しました。<br>\npackage.json とロックファイルを更新して GitHub に pull request を作成する CLI ツールです。</p>\n<p>npm か Yarn をパッケージマネージャとして使用できます。<br>\n普通のリポジトリだけではなく、Lerna や Yarn workspaces など monorepo の構成にも対応しています。</p>\n<!--more-->\n<h2 id=\"概要\" style=\"position:relative;\"><a href=\"#%E6%A6%82%E8%A6%81\" aria-label=\"概要 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>概要</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 668px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/f248db553b8f2007e63b6f953a2be233/2a08f/thumbnail.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.706586826347305%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'187\\'%20viewBox=\\'0%200%20400%20187\\'%20preserveAspectRatio=\\'none\\'/%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/f248db553b8f2007e63b6f953a2be233/5251b/thumbnail.webp 167w,\n/static/f248db553b8f2007e63b6f953a2be233/7390e/thumbnail.webp 334w,\n/static/f248db553b8f2007e63b6f953a2be233/7c056/thumbnail.webp 668w,\n/static/f248db553b8f2007e63b6f953a2be233/0a92e/thumbnail.webp 1002w,\n/static/f248db553b8f2007e63b6f953a2be233/7fa3c/thumbnail.webp 1336w,\n/static/f248db553b8f2007e63b6f953a2be233/bdb03/thumbnail.webp 1422w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/f248db553b8f2007e63b6f953a2be233/21521/thumbnail.png 167w,\n/static/f248db553b8f2007e63b6f953a2be233/86d36/thumbnail.png 334w,\n/static/f248db553b8f2007e63b6f953a2be233/74866/thumbnail.png 668w,\n/static/f248db553b8f2007e63b6f953a2be233/d69c4/thumbnail.png 1002w,\n/static/f248db553b8f2007e63b6f953a2be233/9685e/thumbnail.png 1336w,\n/static/f248db553b8f2007e63b6f953a2be233/2a08f/thumbnail.png 1422w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/f248db553b8f2007e63b6f953a2be233/74866/thumbnail.png\"\n            alt=\"Example\"\n            title=\"Example\"\n            loading=\"lazy\"\n            decoding=\"async\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>こんな感じの PR が作成されます。<br>\n文言のベースは Greenkeeper をリスペクトしていますが、微妙にアレンジしています。</p>\n<p>実際に hothouse で出してみた PR の例をいくつか挙げると、</p>\n<ul>\n<li><a href=\"https://github.com/Leko/IDDFS/pull/20\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">単一パッケージ＋リリースノートあり(eslint@5.0.1)</a></li>\n<li><a href=\"https://github.com/Leko/IDDFS/pull/21\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">単一パッケージ＋リリースノートなし(nyc@12.0.2)</a></li>\n<li><a href=\"https://github.com/Leko/zapshot/pull/25\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">lerna ＋リリースノートなし(sinon@6.1.0)</a></li>\n</ul>\n<p>こんな感じです。</p>\n<h3 id=\"主な強み\" style=\"position:relative;\"><a href=\"#%E4%B8%BB%E3%81%AA%E5%BC%B7%E3%81%BF\" aria-label=\"主な強み permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>主な強み</h3>\n<ul>\n<li>npm/Yarn をサポート\n<ul>\n<li>プラグインを作ればその他のパッケージマネージャにも対応できます</li>\n</ul>\n</li>\n<li>monorepo(lerna/yarn workspaces)をサポート\n<ul>\n<li>プラグインを作ればその他の monorepo ツールにも対応できます</li>\n</ul>\n</li>\n<li>１つのパッケージごとに PR を作成し、マージの心理的コストを下げます\n<ul>\n<li>オプション指定すればひとまとめにできます</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"用途\" style=\"position:relative;\"><a href=\"#%E7%94%A8%E9%80%94\" aria-label=\"用途 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>用途</h2>\n<p>「<a href=\"https://greenkeeper.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Greenkeeper</a>でいいやん」感があるのは認めます。<br>\nただしこのツールは Greenkeeper の障壁が上がる private repo での使用を主な用途にしています。</p>\n<p>たった数ドルお金払うだけなんですが、そこが障壁になって</p>\n<ul>\n<li>自動アップデートしてない</li>\n<li>人力で苦労してアップデートに追従している</li>\n<li>自作のオレオレツールを維持運用する手間</li>\n</ul>\n<p>とかとかの話が身の回りにあるなーと思い、OSS の Greenkeeper 的なものを作りたいなと思いました。<br>\nあと純粋に技術的にどう作るのか気になったので、検証のために作ってみました。</p>\n<p>いちいち手動で実行するのではなく、CI の定期実行（cron）の仕組みに乗っけて使っていただきたいので、ガイドを<del>整備中です。</del><a href=\"https://github.com/Leko/hothouse#run-hothouse-regularly\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">しました</a></p>\n<h2 id=\"使い方\" style=\"position:relative;\"><a href=\"#%E4%BD%BF%E3%81%84%E6%96%B9\" aria-label=\"使い方 permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>使い方</h2>\n<p><a href=\"https://github.com/settings/tokens/new\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://github.com/settings/tokens/new</a><br>\nから新しい Github の Personal access token を<code>repo</code>スコープで取得しておきます。<br>\nもし public なリポジトリなら<code>public_repo</code>だけあれば足ります。プライベートリポジトリなら<code>repo</code>が必要です。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">npm i -g hothouse</code></pre></div>\n<p>して、アップデートしたいリポジトリに移動して、<code>hothouse -t {取得したトークン}</code>コマンドを実行すると PR が送られます。<br>\nもし Git の config が設定されて入ればそれを使います。もし未設定なら<code>hothouse</code>という名前で commit します。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">git config user.name hothouse\ngit config user.email hothouse@example.com</code></pre></div>\n<p>必要であれば、これらを設定してコミッターの名前を変更してください。<br>\nnpm の private scoped package を使っている場合には、事前に<code>npm login</code>してから実行してください。</p>\n<h2 id=\"お試し\" style=\"position:relative;\"><a href=\"#%E3%81%8A%E8%A9%A6%E3%81%97\" aria-label=\"お試し permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>お試し</h2>\n<p>いきなり PR 作られるの怖いって場合は、<code>--dry-run</code>オプションをつけると副作用は起こらなくなります。<br>\n合わせて<code>DEBUG</code>環境変数を使用すると、より詳細な出力が出るので、何が起こるのか、なんとなく掴めるかなと思います。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">DEBUG=hothouse* hothouse --dry-run -t {取得したトークン}</code></pre></div>\n<h2 id=\"特定のパッケージのアップデートは無視したい\" style=\"position:relative;\"><a href=\"#%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%AF%E7%84%A1%E8%A6%96%E3%81%97%E3%81%9F%E3%81%84\" aria-label=\"特定のパッケージのアップデートは無視したい permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>特定のパッケージのアップデートは無視したい</h2>\n<p>アップデートのマイグレーション・心理的コストが大きかったり、package.json 上げるだけではダメなもの（<a href=\"https://www.npmjs.com/package/react-native\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">react-native</a>とか）は、hothouse の監視下から外す方が良いと思います。</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">hothouse -t {取得したトークン} --ignore react-native*</code></pre></div>\n<h2 id=\"仕組み\" style=\"position:relative;\"><a href=\"#%E4%BB%95%E7%B5%84%E3%81%BF\" aria-label=\"仕組み permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>仕組み</h2>\n<ol>\n<li>カレントディレクトリの構成を検出</li>\n<li>ローカルパッケージ一覧を取得</li>\n<li>npm|yarn outdated からアップデート可能なパッケージ一覧を取得</li>\n<li>package.json に書かれている semver の範囲から外れているものだけにフィルタ</li>\n<li>パッケージ名ごとにグルーピング</li>\n<li>package.json のバージョンをいじり、プロジェクト構成ごとにコミットすべきファイルをコミット</li>\n<li>パッケージのバージョンから GitHub のタグ・リリースノートを取得して PR の文言を作成<br>\nタグやリリースノートは取得できないこともあるので、ないことも許容</li>\n<li>GitHub に PR 作成</li>\n</ol>\n<p>ざっくりこんな流れで動いてます。</p>\n<p>publish された npm パッケージを Git(Hub)と紐付けたり、さらに tag やリリースノートを取得するところを地味に工夫しています。<br>\n命名規則に頼るなどのヒューリスティックなやり方しかできないと思っていたのですが、<br>\nnpm 公式で package.json の正規化などのユーティリティを提供していたり、<code>gitHead</code>というプロパティがあることを知り、これをベースにヒューリスティックでない方法も模索できるようになっていました。<br>\nこの辺りは長くなるので、別途記事を書くと思います。</p>\n<h2 id=\"マージビリティの高いプルリク\" style=\"position:relative;\"><a href=\"#%E3%83%9E%E3%83%BC%E3%82%B8%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AE%E9%AB%98%E3%81%84%E3%83%97%E3%83%AB%E3%83%AA%E3%82%AF\" aria-label=\"マージビリティの高いプルリク permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>マージビリティの高いプルリク</h2>\n<p>マージビリティ＝マージするための心理的・レビューコストの低いオーナーに優しい PR</p>\n<p>Greenkeeper と、類似系の OSS を比べてて思ったマージビリティの違いが、<br>\n「PR が全パッケージのアップデート入りになっているか、パッケージ別に分かれているか」でした。</p>\n<p>例えば開発系のツール（webpack、Babel、ESLint、sinon etc）がアップデートされた場合、テストが書かれていて、CI が通ればほぼ確実にマージして良いと言えるでしょう。<br>\n一方、製品に使用しているライブラリは、いろいろごちゃまぜになっている場合、<br>\n<strong>いざアップデートしたら何が起こるか読み切れず、なかなかマージに至らない</strong>というケースがあると思います。<br>\n全てのパッケージの受入テストを書くのはかなり維持コストがかかるので、よほど体力があるプロジェクトでないとやりきれないかなと思います。</p>\n<p>なので、1 パッケージごとに PR を出すことで、マージするための心理的コスト、検証コストを下げ、<strong>このパッケージは merge するけど、このパッケージは close</strong>という緩さを許容したいと思います。<br>\nその緩さが、可能な限り多くのライブラリが新しいバージョンになっている状態を作るんじゃないかなーと仮説を立てています。<br>\n（代わりに、しばらくアプデをサボっていたリポジトリで hothouse を実行すると、かなりの数の PR が飛びます）</p>\n<h2 id=\"今後の動き\" style=\"position:relative;\"><a href=\"#%E4%BB%8A%E5%BE%8C%E3%81%AE%E5%8B%95%E3%81%8D\" aria-label=\"今後の動き permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>今後の動き</h2>\n<p>方針は「心地よいデフォルト挙動」なので、マージビリティについて探求していきたいです。<br>\nあとは脆弱性の文脈で、npm@6 から追加されている<a href=\"https://docs.npmjs.com/cli/audit\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">npm audit</a>を取り入れたいなと思っています。</p>\n<p>他には、日本語だとこれくらい思いを書けるのですが README が弱いので、この記事に書いたことを README に反映していきたい。\nあと想定よりも複雑なものになったのでリファクタしたり、ドキュメント整備したりもぼちぼちやっていきます。</p>\n<p>npm パッケージたくさん抱えている CureApp に少しずつ導入してって、バグの洗い出しや使い心地の検証・改善を進めていきたいと思います。</p>\n<p>個人的によく見る構成・パッケージマネージャはサポートしたつもりなので、プロジェクト構成やパッケージマネージャの拡充はあまり考えていません。メンテコストかかるし。</p>\n<h2 id=\"最後に\" style=\"position:relative;\"><a href=\"#%E6%9C%80%E5%BE%8C%E3%81%AB\" aria-label=\"最後に permalink\" class=\"autolink-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>最後に</h2>\n<p>ぜひ使ってみてください！<br>\n動かなかったり気に食わないところあれば、ぜひ Issue や Pull request 送っていただけると喜びます。</p>\n<p>あと、スターください</p>\n<blockquote>\n<p>— <a href=\"https://github.com/Leko/hothouse\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Leko/hothouse: Continuous dependency update for Node.js project</a></p>\n</blockquote>","timeToRead":8,"frontmatter":{"title":"package.jsonを更新してPRを作成できるCLIツールhothouseを作った","tags":["npm","JavaScript"],"date":"July 06, 2018","featuredImage":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='187'%20viewBox='0%200%20400%20187'%20preserveAspectRatio='none'/%3e","aspectRatio":2.141025641025641,"src":"/static/f248db553b8f2007e63b6f953a2be233/8eab8/featured-image.png","srcSet":"/static/f248db553b8f2007e63b6f953a2be233/1ec58/featured-image.png 334w,\n/static/f248db553b8f2007e63b6f953a2be233/ccb4a/featured-image.png 668w,\n/static/f248db553b8f2007e63b6f953a2be233/8eab8/featured-image.png 1336w,\n/static/f248db553b8f2007e63b6f953a2be233/b73ad/featured-image.png 1422w","srcWebp":"/static/f248db553b8f2007e63b6f953a2be233/f7e47/featured-image.webp","srcSetWebp":"/static/f248db553b8f2007e63b6f953a2be233/cd98f/featured-image.webp 334w,\n/static/f248db553b8f2007e63b6f953a2be233/7535d/featured-image.webp 668w,\n/static/f248db553b8f2007e63b6f953a2be233/f7e47/featured-image.webp 1336w,\n/static/f248db553b8f2007e63b6f953a2be233/d060b/featured-image.webp 1422w","sizes":"(max-width: 1336px) 100vw, 1336px"}}}}}},"pageContext":{"slug":"/what-about-hothouse/","previous":{"fields":{"slug":"/how-to-publish-npm-public-scoped-package-with-lerna/"},"frontmatter":{"title":"lernaでnpmにpublicなscoped packageをpublishする方法","tags":["JavaScript","npm"]}},"next":{"fields":{"slug":"/lets-start-lerna-changelog-to-easy-publish/"},"frontmatter":{"title":"lerna-changelogで始める頑張りすぎないリリースノート自動生成","tags":["npm","JavaScript","monorepo","Lerna"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}