{
    "componentChunkName": "component---src-templates-blog-post-jsx",
    "path": "/post/setup-alone-developing-environment-with-github-slack-circleci-codeclimate-and-ci-bundle-update/",
    "result": {"data":{"site":{"siteMetadata":{"title":"WEB EGG","author":"Leko - CTO at Yuimedi"}},"markdownRemark":{"id":"75d46420-cc25-5b31-a2dd-f782412d6a09","excerpt":"先日公開した日本語解析 API(+α)を使用して日本語の文書校正を効率化してみるにて、 Slack CircleCI Code Climate ci-bundle-update と色々なツールを試してみたので、そのまとめを残したいと思います。 完成図  雑ですがアイキャッチ画像に書き足してみました。 Slack…","html":"<p>先日公開した<a href=\"/post/how-to-improve-proofreading-of-sentence-in-japanese/\">日本語解析 API(+α)を使用して日本語の文書校正を効率化してみる</a>にて、</p>\n<ul>\n<li><a href=\"https://slack.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Slack</a></li>\n<li><a href=\"https://circleci.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">CircleCI</a></li>\n<li><a href=\"https://codeclimate.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Code Climate</a></li>\n<li><a href=\"https://github.com/masutaka/ci-bundle-update\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ci-bundle-update</a></li>\n</ul>\n<p>と色々なツールを試してみたので、そのまとめを残したいと思います。</p>\n<!--more-->\n<h2 id=\"完成図\" style=\"position:relative;\"><a href=\"#%E5%AE%8C%E6%88%90%E5%9B%B3\" 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/0c2b05b2622051cabe2426b4026e56c6/2cefc/d8885565b3dd45e3fbc0abc752d159d8.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: 35.92814371257485%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'143\\'%20viewBox=\\'0%200%20400%20143\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M120%2013l-1%2013v12h5V25c0-10-1-13-2-13l-2%201m42%2012c0%2012%200%2013%202%2013l2-2c0-5%202-5%205-2%202%204%205%205%206%203%201%200%200-3-2-5l-3-4%202-3c3-3%203-5%201-5l-5%204-4%203v-7c0-7%200-8-2-8s-2%201-2%2013m-94-7c-1%201%200%206%202%2013%201%203%201%203-1%205-4%203-3%205%201%205l5%202c2%203%204%202%204-2%200-2%200-2%207-5%207-2%2010-4%208-6%200-2-6-1-11%201l-7%202c-2%200-2%200-1-1%201%200%200-6-3-11-1-4-2-4-4-3m37%204c-3%203-2%206%202%208%207%203%207%206%201%204-4-1-5-1-5%201s2%203%207%203c8%200%2010-7%202-10-5-2-6-4-1-4%205%201%207-1%204-3-2-2-8-1-10%201m23-1c-2%202-1%204%204%204l5%201c0%201-1%202-3%201-4%200-8%202-8%206s2%205%209%205h7v-7c-1-6-1-8-3-9-3-2-8-3-11-1m21%200c-6%203-7%2010-3%2015%203%202%2011%203%2013%201%201-2-1-4-3-3-6%202-10-3-6-8%201-2%202-2%205-2%202%201%203%200%204-1%201-3-6-4-10-2m57%208c-33%206-49%2043-33%2071%204%206%2014%2015%2020%2018%208%204%209%203%209-3v-5h-5c-5%200-11-4-11-7l-3-4c-4-4-4-6%200-4%202%201%203%201%202%203l1%201h3l-1%201%202%202%203%203h1l4-1c4%200%204-1%206-4v-3l-6-2c-12-3-18-19-12-30%202-3%202-6%202-9%200-9%201-10%209-6%205%203%206%203%2011%202h12c5%201%206%201%2011-2%207-3%208-3%209%205l2%2010c3%205%202%2017-1%2022-3%204-11%209-15%209-3%200-3%201-1%204l1%2011c0%2011%201%2011%209%208a47%2047%200%2000-29-90m90%209l-3%204c0%202%204%201%207-1s3-2%205-1c3%202%204%206%201%208-2%202-5%202-7%201-1-2-6-3-6-1%200%203%206%207%2011%207%203%200%209-6%209-9%200-10-11-15-17-8M26%2057l-1%2023v22h71V57l-35-1-35%201m267%2032c-6%203-6%204-6%208%200%205%200%205%206%208l7%204%206-4c6-3%206-3%206-8%200-4%200-5-6-8-6-4-6-4-13%200m1%202c-5%203-6%204-6%206%200%203%201%204%206%207l5%203%206-3c5-2%206-3%206-6%200-4%200-4-7-8l-5-3-5%204\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/0c2b05b2622051cabe2426b4026e56c6/5251b/d8885565b3dd45e3fbc0abc752d159d8.webp 167w,\n/static/0c2b05b2622051cabe2426b4026e56c6/7390e/d8885565b3dd45e3fbc0abc752d159d8.webp 334w,\n/static/0c2b05b2622051cabe2426b4026e56c6/7c056/d8885565b3dd45e3fbc0abc752d159d8.webp 668w,\n/static/0c2b05b2622051cabe2426b4026e56c6/0a92e/d8885565b3dd45e3fbc0abc752d159d8.webp 1002w,\n/static/0c2b05b2622051cabe2426b4026e56c6/7fa3c/d8885565b3dd45e3fbc0abc752d159d8.webp 1336w,\n/static/0c2b05b2622051cabe2426b4026e56c6/7f403/d8885565b3dd45e3fbc0abc752d159d8.webp 1400w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/0c2b05b2622051cabe2426b4026e56c6/21521/d8885565b3dd45e3fbc0abc752d159d8.png 167w,\n/static/0c2b05b2622051cabe2426b4026e56c6/86d36/d8885565b3dd45e3fbc0abc752d159d8.png 334w,\n/static/0c2b05b2622051cabe2426b4026e56c6/74866/d8885565b3dd45e3fbc0abc752d159d8.png 668w,\n/static/0c2b05b2622051cabe2426b4026e56c6/d69c4/d8885565b3dd45e3fbc0abc752d159d8.png 1002w,\n/static/0c2b05b2622051cabe2426b4026e56c6/9685e/d8885565b3dd45e3fbc0abc752d159d8.png 1336w,\n/static/0c2b05b2622051cabe2426b4026e56c6/2cefc/d8885565b3dd45e3fbc0abc752d159d8.png 1400w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/0c2b05b2622051cabe2426b4026e56c6/74866/d8885565b3dd45e3fbc0abc752d159d8.png\"\n            alt=\"完成図\"\n            title=\"完成図\"\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>雑ですがアイキャッチ画像に書き足してみました。<br>\nSlack に通知を飛ばすのは書くまでもなく、矢印が煩雑になるだけなので割愛しました。</p>\n<p>やりたいことは目次に分割しているので、１つずつお話したいと思います。</p>\n<h2 id=\"リポジトリを作る\" style=\"position:relative;\"><a href=\"#%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8B\" 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リポジトリの作成には<a href=\"https://github.com/github/hub\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">hub</a>コマンドを使用しています。</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token builtin class-name\">cd</span> /path/to/work\n<span class=\"token function\">mkdir</span> repo-name <span class=\"token operator\">&amp;&amp;</span> <span class=\"token builtin class-name\">cd</span> repo-name\n<span class=\"token builtin class-name\">echo</span> <span class=\"token string\">'# Repo name'</span> <span class=\"token operator\">></span> README.md\n<span class=\"token function\">git</span> init\n<span class=\"token function\">git</span> <span class=\"token function\">add</span> README.md\n<span class=\"token function\">git</span> commit -m <span class=\"token string\">'initial commit'</span>\nhub create\n<span class=\"token function\">git</span> push origin master\nhub browse</code></pre></div>\n<p>ついでに連携する各サービスのアカウントも作成しておきます。</p>\n<h2 id=\"github-の通知を-slack-に送る\" style=\"position:relative;\"><a href=\"#github-%E3%81%AE%E9%80%9A%E7%9F%A5%E3%82%92-slack-%E3%81%AB%E9%80%81%E3%82%8B\" aria-label=\"github の通知を slack に送る 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>Github の通知を Slack に送る</h2>\n<p><code>https://{slackのチーム名}.slack.com/services/new</code><br>\nを開くと、各種サービスとの連携ができます。</p>\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/652fa442a580de29fd8b63c11089a139/f6f7a/a375213d384a7b683e3b9f4704cbe945.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: 45.50898203592815%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'183\\'%20viewBox=\\'0%200%20400%20183\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M43%2011c-1%201-2%202-4%201-3%200-3%200-3%203l1%204%201-2%201-3%201%203c0%203%202%203%202-1v-3l1%202c0%203%204%205%204%203h1l3%201c1-1%202%200%202%201%202%203%209%200%209-4l1-2%201-1-9-1-10-1h-2m-5%20116c-3%201-6%206-6%2010%200%203%205%2010%207%209s1-3-1-3v-1c3%200%202-1%200-3-2-1-2-2-2-5%201-2%201-2%205-2%205%200%206%200%206%204l-2%204c-2%200-2%201-1%203%201%203%200%203%204%200%208-6%200-20-10-16m313%209l1%208h24v-15h-25v7\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/652fa442a580de29fd8b63c11089a139/5251b/a375213d384a7b683e3b9f4704cbe945.webp 167w,\n/static/652fa442a580de29fd8b63c11089a139/7390e/a375213d384a7b683e3b9f4704cbe945.webp 334w,\n/static/652fa442a580de29fd8b63c11089a139/7c056/a375213d384a7b683e3b9f4704cbe945.webp 668w,\n/static/652fa442a580de29fd8b63c11089a139/0a92e/a375213d384a7b683e3b9f4704cbe945.webp 1002w,\n/static/652fa442a580de29fd8b63c11089a139/288cc/a375213d384a7b683e3b9f4704cbe945.webp 1009w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/652fa442a580de29fd8b63c11089a139/21521/a375213d384a7b683e3b9f4704cbe945.png 167w,\n/static/652fa442a580de29fd8b63c11089a139/86d36/a375213d384a7b683e3b9f4704cbe945.png 334w,\n/static/652fa442a580de29fd8b63c11089a139/74866/a375213d384a7b683e3b9f4704cbe945.png 668w,\n/static/652fa442a580de29fd8b63c11089a139/d69c4/a375213d384a7b683e3b9f4704cbe945.png 1002w,\n/static/652fa442a580de29fd8b63c11089a139/f6f7a/a375213d384a7b683e3b9f4704cbe945.png 1009w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/652fa442a580de29fd8b63c11089a139/74866/a375213d384a7b683e3b9f4704cbe945.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>Github の Slack integration を設定します。<br>\n特に詰まることはなく、画面に従えば問題なく設定できるかと思います。</p>\n<h2 id=\"pull-request-が来たら-circle-ci-のテストを走らせる\" style=\"position:relative;\"><a href=\"#pull-request-%E3%81%8C%E6%9D%A5%E3%81%9F%E3%82%89-circle-ci-%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E8%B5%B0%E3%82%89%E3%81%9B%E3%82%8B\" aria-label=\"pull request が来たら circle ci のテストを走らせる 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>Pull Request が来たら Circle CI のテストを走らせる</h2>\n<p>Circle CI は、テストを走らせたりデプロイしたりする CI 系サービスです。 似たサービスとして<a href=\"https://travis-ci.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Travis CI</a>、<a href=\"http://wercker.com/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Wercker</a>がありますが、<br>\nそれらは使ったことがあったので、今回は使ったこと無い Circle CI を使ってみました。</p>\n<p>Circle CI にログインし、Github に登録したリポジトリを CI 対象として登録します。</p>\n<p>そしてリポジトリに Circle CI を設定します。<br>\nドキュメントは<a href=\"https://circleci.com/docs/language-ruby-on-rails\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">こちら</a>です。</p>\n<p>YAML ファイルでも Ruby のバージョンを指定できるそうなのですが、<code>.ruby-version</code>の方が汎用的かと思いそちらを使用しています。</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\"><span class=\"token function\">git</span> checkout -b feat/circle-ci\nrbenv <span class=\"token builtin class-name\">local</span> <span class=\"token number\">2.2</span>.2\n<span class=\"token function\">git</span> <span class=\"token function\">add</span> .ruby-version\n<span class=\"token function\">git</span> commit -m <span class=\"token string\">'Add .ruby-version'</span>\n<span class=\"token builtin class-name\">echo</span> <span class=\"token string\">'gem \"rspec\"'</span> <span class=\"token operator\">>></span> Gemfile\nbundle <span class=\"token function\">install</span> --path<span class=\"token operator\">=</span>vendor/bundle\n<span class=\"token function\">git</span> <span class=\"token function\">add</span> Gemfile*\n<span class=\"token function\">git</span> commit -m <span class=\"token string\">'Add rspec gem'</span>\n<span class=\"token function\">git</span> push origin feat/circle-ci</code></pre></div>\n<p>連携が完了していると、pull リクエストを作成した時に以下のようになると思います。</p>\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/6eb235f483b3801d43c3e2b93a96aa1d/20982/aa6524b9ba48606ea27c160b6fc9cee5.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: 36.52694610778443%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'147\\'%20viewBox=\\'0%200%20400%20147\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M237%208l-1%201c-2-1-9-1-10%201h-2l-1-2-1%202c0%202%201%202%208%202l8%201h4c3-2%204-2%206-1l12%201c8%200%209-1%209-2%200-3-5-3-23-2l-6-1h-3M5%2035v12h24V22H5v13m45-4c-4%202-5%208-2%2012%202%203%209%203%2011%200%205-6-1-15-9-12m111%201c0%202%200%202-2%201h-17c-1%202%201%204%202%203h6l2-1h3l1%201c1-1%201%200%201%201h2l4-1c3%201%203%201%203-1h1l5%201c4%200%205%200%205-2s0-3-1-2h-15M77%2064l-2%202c1%202%206%202%207%201h9l8%201c7%200%207%200%207-3l-1-2-1%201H77M48%2086c-4%205-1%2013%206%2013%204%200%207-4%207-8%200-6-8-9-13-5m80%200h-4l-4%201h-1c-1-2-2-1-2%201l3%202%202%201h1l6-2%2012%201c10%200%2011%200%2011-2s0-2-2-2h-22\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/6eb235f483b3801d43c3e2b93a96aa1d/5251b/aa6524b9ba48606ea27c160b6fc9cee5.webp 167w,\n/static/6eb235f483b3801d43c3e2b93a96aa1d/7390e/aa6524b9ba48606ea27c160b6fc9cee5.webp 334w,\n/static/6eb235f483b3801d43c3e2b93a96aa1d/7c056/aa6524b9ba48606ea27c160b6fc9cee5.webp 668w,\n/static/6eb235f483b3801d43c3e2b93a96aa1d/10884/aa6524b9ba48606ea27c160b6fc9cee5.webp 778w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/6eb235f483b3801d43c3e2b93a96aa1d/21521/aa6524b9ba48606ea27c160b6fc9cee5.png 167w,\n/static/6eb235f483b3801d43c3e2b93a96aa1d/86d36/aa6524b9ba48606ea27c160b6fc9cee5.png 334w,\n/static/6eb235f483b3801d43c3e2b93a96aa1d/74866/aa6524b9ba48606ea27c160b6fc9cee5.png 668w,\n/static/6eb235f483b3801d43c3e2b93a96aa1d/20982/aa6524b9ba48606ea27c160b6fc9cee5.png 778w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/6eb235f483b3801d43c3e2b93a96aa1d/74866/aa6524b9ba48606ea27c160b6fc9cee5.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>少し待って</p>\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/51a5dd3da18625b6b2f5f8a74d4a229e/167b5/6ba1a268d2bfba7053226520cc58cb5e.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: 28.143712574850298%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'112\\'%20viewBox=\\'0%200%20400%20112\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M4%2018v12h24V5H4v13m43-2c-6%207%203%2017%2010%2011%204-3%204-8%201-11s-8-3-11%200m34-1l-2%201c-1%200-2%200-2%202s0%202%2012%202%2012%200%2012-2-1-2-3-2l-3-1H81m63%200h-22v3c0%202%200%203%201%202h12c11%200%2011%200%2011-3%201-2%200-3-2-2m-48%209l-10%201-9%201h-1l-3-1c-1%200-2%200-2%202%200%201%202%202%2015%202%2016%200%2016%200%2016-4%200-2%200-2-1%200-2%203-2%203-4%200%200-2-1-2-1-1M47%2049c-4%205-1%2013%206%2013s10-9%204-13c-3-3-7-3-10%200m81%200h-4c-4%200-5%200-5%202h-1c0-2-1-2-1-1-1%201%200%203%202%203l2%201%202-1h16c3%201%204%200%206-1h1l2%201c2%201%205-2%203-3-1-1-7-2-9-1h-12l-1-1-1%201M46%2081l-1%209v8h81V81l-40-1-40%201m280%207c-4%200-6%203-2%203l1-1h1c1%202%207%202%208%200h1c1%202%2015%202%2016%200h1l6%201c0-2-4-3-10-3-11%200-11%200-10%201l-1%201-1-1c-1-1-5-2-10-1\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/51a5dd3da18625b6b2f5f8a74d4a229e/5251b/6ba1a268d2bfba7053226520cc58cb5e.webp 167w,\n/static/51a5dd3da18625b6b2f5f8a74d4a229e/7390e/6ba1a268d2bfba7053226520cc58cb5e.webp 334w,\n/static/51a5dd3da18625b6b2f5f8a74d4a229e/7c056/6ba1a268d2bfba7053226520cc58cb5e.webp 668w,\n/static/51a5dd3da18625b6b2f5f8a74d4a229e/bac22/6ba1a268d2bfba7053226520cc58cb5e.webp 776w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/51a5dd3da18625b6b2f5f8a74d4a229e/21521/6ba1a268d2bfba7053226520cc58cb5e.png 167w,\n/static/51a5dd3da18625b6b2f5f8a74d4a229e/86d36/6ba1a268d2bfba7053226520cc58cb5e.png 334w,\n/static/51a5dd3da18625b6b2f5f8a74d4a229e/74866/6ba1a268d2bfba7053226520cc58cb5e.png 668w,\n/static/51a5dd3da18625b6b2f5f8a74d4a229e/167b5/6ba1a268d2bfba7053226520cc58cb5e.png 776w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/51a5dd3da18625b6b2f5f8a74d4a229e/74866/6ba1a268d2bfba7053226520cc58cb5e.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>となればビルドに成功した、ということになります。</p>\n<p>今後 Circle CI との連携を増やしていきますが、基本はこれです。<br>\nビルドに通らない場合はだいたいが設定ミスです。</p>\n<p>ついでに Slack との連携も済ませておきます。</p>\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/1fe08dd3f32fb6d27dffab3598034e03/8ecb0/ee193825a3bffe1ef11bdae8117b3555.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: 21.556886227544908%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'87\\'%20viewBox=\\'0%200%20400%2087\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M29%2059c-3%202-4%206-1%206l4-2c3-2%206-2%207%202s-5%207-8%204c-2-3-5-2-5%200%200%206%2010%208%2015%203%208-8-3-20-12-13m321%207v7h26V59h-26v7\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/1fe08dd3f32fb6d27dffab3598034e03/5251b/ee193825a3bffe1ef11bdae8117b3555.webp 167w,\n/static/1fe08dd3f32fb6d27dffab3598034e03/7390e/ee193825a3bffe1ef11bdae8117b3555.webp 334w,\n/static/1fe08dd3f32fb6d27dffab3598034e03/7c056/ee193825a3bffe1ef11bdae8117b3555.webp 668w,\n/static/1fe08dd3f32fb6d27dffab3598034e03/655ae/ee193825a3bffe1ef11bdae8117b3555.webp 989w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/1fe08dd3f32fb6d27dffab3598034e03/21521/ee193825a3bffe1ef11bdae8117b3555.png 167w,\n/static/1fe08dd3f32fb6d27dffab3598034e03/86d36/ee193825a3bffe1ef11bdae8117b3555.png 334w,\n/static/1fe08dd3f32fb6d27dffab3598034e03/74866/ee193825a3bffe1ef11bdae8117b3555.png 668w,\n/static/1fe08dd3f32fb6d27dffab3598034e03/8ecb0/ee193825a3bffe1ef11bdae8117b3555.png 989w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/1fe08dd3f32fb6d27dffab3598034e03/74866/ee193825a3bffe1ef11bdae8117b3555.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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<h2 id=\"master-にマージされたら-code-climate-のチェックを走らせる\" style=\"position:relative;\"><a href=\"#master-%E3%81%AB%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%95%E3%82%8C%E3%81%9F%E3%82%89-code-climate-%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%92%E8%B5%B0%E3%82%89%E3%81%9B%E3%82%8B\" aria-label=\"master にマージされたら code climate のチェックを走らせる 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>master にマージされたら Code climate のチェックを走らせる</h2>\n<p>Code climate はコードの静的解析ツールです。<br>\n連携している Github のリポジトリ内のコードに静的解析をかけ、問題が有れば指摘してくれます。<br>\n対応している言語は Ruby, PHP, Python, js です。</p>\n<p>Code climate にログインし、対象のリポジトリを有効にしておきます。<br>\n初回起動までが結構長いので、先にやっておくと良いです。</p>\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/c319ab1abc53da3814b097666f47ed17/350de/8487259c49da7defc179d4e0202d5e0a.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: 40.119760479041915%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'160\\'%20viewBox=\\'0%200%20400%20160\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M0%2011v10h401V0H0v11m47%2038c-4%204-1%2011%204%2011%203%200%206-3%206-6%200-6-7-9-10-5m286%2027a39%2039%200%2000-5%2072c9%204%2022%205%2031%201%208-3%2016-11%2020-19%205-9%205-24%201-33-8-18-29-27-47-21m-2%207c-7%203-13%209-17%2016s-4%2021%200%2029c15%2027%2054%2023%2063-7%207-25-21-50-46-38m13-1l4%201c20%202%2032%2024%2024%2042-5%2011-14%2017-26%2018-33%202-44-42-15-57l5-3-5%201c-31%2015-20%2061%2014%2060%2032%200%2043-44%2014-59-7-3-15-5-15-3\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/c319ab1abc53da3814b097666f47ed17/5251b/8487259c49da7defc179d4e0202d5e0a.webp 167w,\n/static/c319ab1abc53da3814b097666f47ed17/7390e/8487259c49da7defc179d4e0202d5e0a.webp 334w,\n/static/c319ab1abc53da3814b097666f47ed17/7c056/8487259c49da7defc179d4e0202d5e0a.webp 668w,\n/static/c319ab1abc53da3814b097666f47ed17/7a915/8487259c49da7defc179d4e0202d5e0a.webp 998w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/c319ab1abc53da3814b097666f47ed17/21521/8487259c49da7defc179d4e0202d5e0a.png 167w,\n/static/c319ab1abc53da3814b097666f47ed17/86d36/8487259c49da7defc179d4e0202d5e0a.png 334w,\n/static/c319ab1abc53da3814b097666f47ed17/74866/8487259c49da7defc179d4e0202d5e0a.png 668w,\n/static/c319ab1abc53da3814b097666f47ed17/350de/8487259c49da7defc179d4e0202d5e0a.png 998w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/c319ab1abc53da3814b097666f47ed17/74866/8487259c49da7defc179d4e0202d5e0a.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>初回の分析が終わるとこのような画面になります。<br>\n<del>1 ファイル D 評価取って急いで直した履歴は見なかったことにして下さい。</del></p>\n<p>全ファイルが A、GPA が 4.0 なら指摘事項なし、という意味になります。</p>\n<p>次に、Github の Pull request と連携させます。<br>\nまず<a href=\"https://github.com/settings/tokens\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Github の Personal access tokens</a>を開き、Code climate 用のアクセストークンを生成します。<br>\n名前は自分で分かる適当な名前、スコープは<code>repo:status</code>が選ばれていれば問題ないです。</p>\n<p>生成されたトークンをコピーしておきます。<br>\nトークンが表示されている画面から <strong>別画面に行くと２度とコピーできなくなる</strong> ので注意が必要です。</p>\n<p>settings の中にある「Integrations」タブを開き、「GitHub Pull Requests」を選択します。</p>\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/f87b3ea73dd48509bbad8dbc93934459/5caea/ae0b48fb75da31a8be3a203df45c2f33.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: 34.73053892215569%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'138\\'%20viewBox=\\'0%200%20400%20138\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M355%207v11l16%201h16V7l-16-1-16%201M17%2017c0%202%200%202%203%202%204%200%205%200%209%202l3-1%2010-1c10%201%2011%200%2010-2%200-1-1-2-5-2h-5l-2-1-2%201H23l-2%201-2-1-1-1-1%203m337%2024v7l1%205h32V41l-16-1-17%201M113%2078l2%204v1h-2l1%201%201%201c-1%201%200%202%201%203%204%200%205-1%204-3l1-4c4-3%202-7-4-7-4%200-4%201-4%204m241-2v7l1%204h32V75l-16-1h-16l-1%202m-241%2036l2%204v1h-2l1%201%201%202c0%202%201%202%203%202s2-1%202-3l1-3c1%200%202-3%201-5%200-2-1-2-5-2s-4%200-4%203\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/f87b3ea73dd48509bbad8dbc93934459/5251b/ae0b48fb75da31a8be3a203df45c2f33.webp 167w,\n/static/f87b3ea73dd48509bbad8dbc93934459/7390e/ae0b48fb75da31a8be3a203df45c2f33.webp 334w,\n/static/f87b3ea73dd48509bbad8dbc93934459/7c056/ae0b48fb75da31a8be3a203df45c2f33.webp 668w,\n/static/f87b3ea73dd48509bbad8dbc93934459/ef2bd/ae0b48fb75da31a8be3a203df45c2f33.webp 996w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/f87b3ea73dd48509bbad8dbc93934459/21521/ae0b48fb75da31a8be3a203df45c2f33.png 167w,\n/static/f87b3ea73dd48509bbad8dbc93934459/86d36/ae0b48fb75da31a8be3a203df45c2f33.png 334w,\n/static/f87b3ea73dd48509bbad8dbc93934459/74866/ae0b48fb75da31a8be3a203df45c2f33.png 668w,\n/static/f87b3ea73dd48509bbad8dbc93934459/5caea/ae0b48fb75da31a8be3a203df45c2f33.png 996w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/f87b3ea73dd48509bbad8dbc93934459/74866/ae0b48fb75da31a8be3a203df45c2f33.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>コピーしておいたアクセストークンを貼り付けて貼り付けて設定完了。<br>\nこれで Circle CI のように Pull request 時にコードのチェックがかかります。</p>\n<p><strong>と思ったのですが</strong> 、オープンソースのリポジトリは常にポーリングしているので PR 連携は提供してませんよ、とのこと。</p>\n<blockquote>\n<p>Note: If you added your repository by clicking Add Open Source Repo, Code Climate will always check for new commits based a poll or when you manually trigger a refresh. We don’t yet support service hooks for these types of repositories.<br>\n— <a href=\"http://docs.codeclimate.com/article/213-github-pull-request-integration\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub Pull Request Integration</a><br>\n— <a href=\"http://docs.codeclimate.com/article/222-how-do-i-install-code-climates-github-service-hook\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">How do I install Code Climate’s Github service hook?</a></p>\n</blockquote>\n<p>ついでに Code climate も Slack と連携させます。</p>\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/b066018c460c7f9c7b1dd52695686ec2/339e3/fb65dada8776ca82d73bf6ff177bd56a.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: 22.155688622754493%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'88\\'%20viewBox=\\'0%200%20400%2088\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M21%2057v11l1%209h7c12%200%2012%200%2012-10l-1-10c-2-2-18-1-19%200m329%203v8l1%206h25V60l-13-1-13%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b066018c460c7f9c7b1dd52695686ec2/5251b/fb65dada8776ca82d73bf6ff177bd56a.webp 167w,\n/static/b066018c460c7f9c7b1dd52695686ec2/7390e/fb65dada8776ca82d73bf6ff177bd56a.webp 334w,\n/static/b066018c460c7f9c7b1dd52695686ec2/7c056/fb65dada8776ca82d73bf6ff177bd56a.webp 668w,\n/static/b066018c460c7f9c7b1dd52695686ec2/56bc3/fb65dada8776ca82d73bf6ff177bd56a.webp 977w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b066018c460c7f9c7b1dd52695686ec2/21521/fb65dada8776ca82d73bf6ff177bd56a.png 167w,\n/static/b066018c460c7f9c7b1dd52695686ec2/86d36/fb65dada8776ca82d73bf6ff177bd56a.png 334w,\n/static/b066018c460c7f9c7b1dd52695686ec2/74866/fb65dada8776ca82d73bf6ff177bd56a.png 668w,\n/static/b066018c460c7f9c7b1dd52695686ec2/339e3/fb65dada8776ca82d73bf6ff177bd56a.png 977w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b066018c460c7f9c7b1dd52695686ec2/74866/fb65dada8776ca82d73bf6ff177bd56a.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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<h2 id=\"circle-ci-で走らせらせたテストのカバレッジを-code-climate-に送る\" style=\"position:relative;\"><a href=\"#circle-ci-%E3%81%A7%E8%B5%B0%E3%82%89%E3%81%9B%E3%82%89%E3%81%9B%E3%81%9F%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E3%82%AB%E3%83%90%E3%83%AC%E3%83%83%E3%82%B8%E3%82%92-code-climate-%E3%81%AB%E9%80%81%E3%82%8B\" aria-label=\"circle ci で走らせらせたテストのカバレッジを code climate に送る 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>Circle CI で走らせらせたテストのカバレッジを Code climate に送る</h2>\n<p>ここまでの設定で、</p>\n<ul>\n<li>push した内容がテストに通ること</li>\n<li>静的解析で判別可能な良くないコード</li>\n</ul>\n<p>は判定可能になりました。ついでなのでテストのカバレッジも出力してみたいと思います。</p>\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/664d1b2efacd4e98c6e4b2595030c287/3dde1/86f5823b3a5d2f30434dc16f2685d6ae.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: 40.119760479041915%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'161\\'%20viewBox=\\'0%200%20400%20161\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M0%205v5h401V0H211A6845%206845%200%20008%200H0v5m13%2025l-1%206v6h377V29H201L13%2030\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/664d1b2efacd4e98c6e4b2595030c287/5251b/86f5823b3a5d2f30434dc16f2685d6ae.webp 167w,\n/static/664d1b2efacd4e98c6e4b2595030c287/7390e/86f5823b3a5d2f30434dc16f2685d6ae.webp 334w,\n/static/664d1b2efacd4e98c6e4b2595030c287/7c056/86f5823b3a5d2f30434dc16f2685d6ae.webp 668w,\n/static/664d1b2efacd4e98c6e4b2595030c287/0a92e/86f5823b3a5d2f30434dc16f2685d6ae.webp 1002w,\n/static/664d1b2efacd4e98c6e4b2595030c287/5304f/86f5823b3a5d2f30434dc16f2685d6ae.webp 1018w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/664d1b2efacd4e98c6e4b2595030c287/21521/86f5823b3a5d2f30434dc16f2685d6ae.png 167w,\n/static/664d1b2efacd4e98c6e4b2595030c287/86d36/86f5823b3a5d2f30434dc16f2685d6ae.png 334w,\n/static/664d1b2efacd4e98c6e4b2595030c287/74866/86f5823b3a5d2f30434dc16f2685d6ae.png 668w,\n/static/664d1b2efacd4e98c6e4b2595030c287/d69c4/86f5823b3a5d2f30434dc16f2685d6ae.png 1002w,\n/static/664d1b2efacd4e98c6e4b2595030c287/3dde1/86f5823b3a5d2f30434dc16f2685d6ae.png 1018w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/664d1b2efacd4e98c6e4b2595030c287/74866/86f5823b3a5d2f30434dc16f2685d6ae.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>Code climate の settings を開き、「Test Coverage」を選択します。<br>\nドキュメントが出てくるので手順通りに進めます。</p>\n<p>マニュアル内の<code>CODECLIMATE_REPO_TOKEN=....</code>となっている箇所を Circle CI 側にも指定する必要があるのでコピーして貼り付けます。<br>\nCircle CI のプロジェクト設定の、「Environment variables」に設定します。</p>\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/0250f90b896c1f6bcdd5d5f98dc11d08/c3fd4/aa56c553c600d6ad9d8ba37416434eef.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: 40.7185628742515%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'163\\'%20viewBox=\\'0%200%20400%20163\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M0%2082v81h5V0H0v82\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/0250f90b896c1f6bcdd5d5f98dc11d08/5251b/aa56c553c600d6ad9d8ba37416434eef.webp 167w,\n/static/0250f90b896c1f6bcdd5d5f98dc11d08/7390e/aa56c553c600d6ad9d8ba37416434eef.webp 334w,\n/static/0250f90b896c1f6bcdd5d5f98dc11d08/7c056/aa56c553c600d6ad9d8ba37416434eef.webp 668w,\n/static/0250f90b896c1f6bcdd5d5f98dc11d08/a7c35/aa56c553c600d6ad9d8ba37416434eef.webp 854w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/0250f90b896c1f6bcdd5d5f98dc11d08/21521/aa56c553c600d6ad9d8ba37416434eef.png 167w,\n/static/0250f90b896c1f6bcdd5d5f98dc11d08/86d36/aa56c553c600d6ad9d8ba37416434eef.png 334w,\n/static/0250f90b896c1f6bcdd5d5f98dc11d08/74866/aa56c553c600d6ad9d8ba37416434eef.png 668w,\n/static/0250f90b896c1f6bcdd5d5f98dc11d08/c3fd4/aa56c553c600d6ad9d8ba37416434eef.png 854w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/0250f90b896c1f6bcdd5d5f98dc11d08/74866/aa56c553c600d6ad9d8ba37416434eef.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>Github にプルリクエストを作ってマージし、Code climate にカバレッジが出れば成功です。</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 274px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/de926a5cd47649e0e4788279d4cb030e/d3fa7/457b301edc06959d1515de8c92e9ba06.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: 150.89820359281438%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'603\\'%20viewBox=\\'0%200%20400%20603\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M186%2057l-9%201A142%20142%200%200072%20262c20%2040%2057%2068%20102%2078%2012%202%2041%202%2054%200a143%20143%200%2000-42-283m1%2022c-29%204-51%2014-70%2033-49%2046-50%20124-2%20172%2014%2014%2027%2022%2044%2029%2025%209%2058%209%2083%200%2037-14%2065-44%2075-81A122%20122%200%2000187%2079m13%204c-1%204%200%206%205%207a109%20109%200%2011-39%206l8-3-1-3c0-4%200-4-6-3-31%208-62%2037-75%2069-7%2017-7%2022-7%2043%200%2023%202%2035%2012%2053%2019%2038%2061%2064%20103%2064%2054%200%2099-36%20114-90%204-12%203-42%200-55-10-35-32-63-64-78-16-7-48-14-50-10m16%2088c-10%204-11%2026-1%2031%204%202%209%202%2013%200%208-4%209-21%202-28-3-3-10-5-14-3m-39%204l-8%2011c-6%209-6%2011%204%2012%208%200%208%200%208%203%201%204%206%204%207%200%200-2%201-3%203-3l3-2c0-4-1-5-4-5-2%200-2%200-2-10v-10h-4c-4%200-5%200-7%204m43%202c-4%200-6%209-4%2015%203%2010%2011%207%2011-4%201-8-2-12-7-11m-39%2041c-3%208%201%2014%209%2013%203%200%203-1%203-4s-2-5-5-4v3c3%201%201%204-2%203s-3-2-3-5c0-6%204-10%207-5l2%201c1-2-2-5-5-5-4%200-4%200-6%203m15%205l1%208%201-3c0-2%200-3%202-3%205%200%209-6%206-9l-6-1h-4v8M26%20419v24c1%201%20136%202%20139%200%202%200%203-22%201-24s-138-2-140%200m162%200l-1%2013c0%2011%200%2011%202%2012h128v-25l-64-1-65%201m99%208c-4%204-2%2010%203%2010%202%200%204-2%204-4s0-2%201-1l3%201c2%200%202%200%201%202l-1%202%202-1c2-2%203-2%203%200l3%201c4%200%205-6%200-7-2%200-2-1-1-2v-2c0-1-1-1-2%201-1%201-1%201-3-1s-5-1-6%203c0%201-1%202-3%201-4%200-4-2%200-2l2-1c-1-2-3-2-6%200m-233%202l-3%203-2-2c-3-3-5-2-5%203%200%204%203%206%206%202h2c1%203%206%203%207%200l1-2v2c1%202%207%203%207%201l-2-1h-2c-1-1%200-1%202-1s2%200%202-2c-1-4-4-5-6-2l-2%202v-3c0-4-2-4-5%200m36%201v7l1-3c0-2%200-3%202-3l1%203%201%203%201-3c0-2%201-3%202-3l1%203%201%203%201-1h1l4%201c3%200%203%200%203-3l-1-5c-2-2-5%200-5%201%201%201%200%202-1%203s-1%201-1-1c0-3-8-5-11-2m109-1c-2%203-1%207%203%208l3-1h1c2%202%206%201%207-1%201-4-3-9-6-6h-8M56%20516c-17%207-22%2030-8%2043%2016%2015%2043%204%2043-19%200-18-19-31-35-24m8%2012l-4%201-4%201v8c0%208%200%209%202%2011%204%204%207%204%2010%203%205-3%207-6%207-15v-7h-4l-5-2h-2m180%2010c-5%206%202%2014%207%208%204-3%201-10-3-10l-4%202m57%200c-2%201-2%202-1%206l-1%204c-2%200-1%203%201%203h9c2-2-1-5-4-5h-2l2-2c2-1%205-5%205-7%200-1-8-1-9%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/de926a5cd47649e0e4788279d4cb030e/5251b/457b301edc06959d1515de8c92e9ba06.webp 167w,\n/static/de926a5cd47649e0e4788279d4cb030e/c6d10/457b301edc06959d1515de8c92e9ba06.webp 274w\"\n              sizes=\"(max-width: 274px) 100vw, 274px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/de926a5cd47649e0e4788279d4cb030e/21521/457b301edc06959d1515de8c92e9ba06.png 167w,\n/static/de926a5cd47649e0e4788279d4cb030e/d3fa7/457b301edc06959d1515de8c92e9ba06.png 274w\"\n            sizes=\"(max-width: 274px) 100vw, 274px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/de926a5cd47649e0e4788279d4cb030e/d3fa7/457b301edc06959d1515de8c92e9ba06.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>さりげなく２重の丸に変わっているのがおしゃれでよいですね。</p>\n<h2 id=\"ci-bundle-update-で毎日-bundle-update-を実行して-pull-request-を送る\" style=\"position:relative;\"><a href=\"#ci-bundle-update-%E3%81%A7%E6%AF%8E%E6%97%A5-bundle-update-%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6-pull-request-%E3%82%92%E9%80%81%E3%82%8B\" aria-label=\"ci bundle update で毎日 bundle update を実行して pull request を送る 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>ci-bundle-update で毎日 bundle update を実行して Pull Request を送る</h2>\n<p><a href=\"http://yapcasia.org/2015/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">YAPC::Asia Tokyo 2015</a>にて<a href=\"http://esa.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">esa.io</a>の中の人の素敵なプレゼンをお聞きし、<br>\nプレゼン中に出てきた<a href=\"https://github.com/masutaka/ci-bundle-update\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ci-bundle-update</a>がとても良いと思いました。</p>\n<p><strong>これから毎日 bundle update しようぜ？</strong></p>\n<p>ということで早速導入。<br>\n<a href=\"http://masutaka.net/chalow/2015-07-28-1.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">解説記事</a>の内容でハマったところがあったので、あらためて記事として手順を残します。</p>\n<blockquote>\n<p>このように circle.yml の deployment section を変更します。<br>\n<a href=\"https://github.com/masutaka/masutaka-29hours/commit/0ba9ef03348568baaa5cf271d4f6e41305f8fdfe\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https://github.com/masutaka/masutaka-29hours/commit/0ba9ef03348568baaa5cf271d4f6e41305f8fdfe</a></p>\n</blockquote>\n<p>とありますが、ここでハマりました。<br>\n<code>./script/deploy-circleci.sh</code>なんて無いぞ…？ Circle CI でのお決まりなのかな…？<br>\nと思いながらそのまま書いたら、案の定ビルドにコケました。なので以下のように修正</p>\n<div class=\"gatsby-highlight\" data-language=\"diff\"><pre class=\"language-diff\"><code class=\"language-diff\"><span class=\"token inserted-sign inserted\"><span class=\"token prefix inserted\">+</span>      - |\n<span class=\"token prefix inserted\">+</span>        if [ -n \"${BUNDLE_UPDATE}\" ] ; then\n<span class=\"token prefix inserted\">+</span>          gem update bundler --no-document\n<span class=\"token prefix inserted\">+</span>          gem install circleci-bundle-update-pr\n<span class=\"token prefix inserted\">+</span>          circleci-bundle-update-pr CircleCI circleci@example.com\n<span class=\"token prefix inserted\">+</span>        fi</span></code></pre></div>\n<p>これでビルドが通るようになりました。 もう１個ハマりました。</p>\n<blockquote>\n<p>環境変数 BUNDLE_UPDATE が指定されていたら、circleci-bundle-update-pr gem をインストールして、同コマンドを実行しています。この環境変数は後述するトリガーが設定してきます。</p>\n</blockquote>\n<p>とあったので、Circle CI 側にも環境変数の設定が必要なのか…？<br>\nと思って指定したらビルド通らなくなりました。</p>\n<p><strong>日本語読めよ</strong> という話なのですが、Circle CI 側にはこの環境変数の指定は不要です。</p>\n<p>他は特に詰まることは無かったので、解説記事さまを呼んでいけば設定完了すると思います。 これで毎日 bundle update して何かアップデートがあれば PR が飛ぶようになりました。</p>\n<p>ちなみに、Ruby のプロジェクトだけでなく npm(Nodejs)や composer(PHP)など幅広く対応している<a href=\"http://tachikoma.io/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tachikoma.io</a>というサービスもあるようです。<br>\nしかし今回は Ruby のプロジェクトなので、tachikoma.io より Ruby に関して高機能な ci-bundle-update を使用しました。</p>\n<p>tachikoma については別途 Node のプロジェクトで試している最中なので、また記事を書きます。</p>\n<p><del>そういえば、npm の ci update は David ではなく<a href=\"https://docs.npmjs.com/cli/shrinkwrap\">shrinkwrap</a>使わないんですかね…、bower にも<a href=\"https://github.com/bower/bower/issues/505\">shrinkwrap の機能が検討されている</a>ようなので、そちらも対応されたら対応するのかなー、なんて思っています。</del></p>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%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>全部設定すると Slack がだいぶ賑わってきます。</p>\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/09623da881e0c0515a48dc9bbd1fb47d/bca35/87fe328607615af11722bfe947725838.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: 85.02994011976048%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'340\\'%20viewBox=\\'0%200%20400%20340\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M17%209c-2%201-5%205-5%207s3%201%206-1c3-3%207-2%208%201%202%205-3%209-7%206-5-4-9-2-5%203%205%208%2019%202%2018-8-2-6-9-10-15-8m0%2054c-3%201-6%206-6%209%200%205%204%2011%207%2011%202%200%201-3-1-3l1-1c2-1%202-1%200-2s-3-3-2-7c0-2%200-2%206-2%205%200%205%200%206%203%200%203%200%204-2%205-2%202-3%207-1%207l4-3c8-8-1-21-12-17m27%202l-2%201c-3%201-4%206-1%206l3-1h1l1-2c0-2%200-2%201%200l1%203%201-3c1-2%201-2%201%200l1%202%201-2c0-2%200-2%201%200s11%203%2012%200h2l1-1-3-1-3-2c-1-1-3%200-4%203h-1l-1-2c-1%201-3%200-4-1h-6l-1-1-1%201m-4%2050c-2%203-1%2064%201%2063a499%20499%200%2000-1-63M11%20221v11l1%209h20v-21H22l-11%201m4%2059l-3%204h6c2-3%206-2%208%201%203%204-4%2010-8%206-2-2-6-2-6-1%200%203%205%207%209%207%2010%200%2014-11%207-17-4-4-9-4-13%200\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/09623da881e0c0515a48dc9bbd1fb47d/5251b/87fe328607615af11722bfe947725838.webp 167w,\n/static/09623da881e0c0515a48dc9bbd1fb47d/7390e/87fe328607615af11722bfe947725838.webp 334w,\n/static/09623da881e0c0515a48dc9bbd1fb47d/7c056/87fe328607615af11722bfe947725838.webp 668w,\n/static/09623da881e0c0515a48dc9bbd1fb47d/e2d2f/87fe328607615af11722bfe947725838.webp 683w\"\n              sizes=\"(max-width: 668px) 100vw, 668px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/09623da881e0c0515a48dc9bbd1fb47d/21521/87fe328607615af11722bfe947725838.png 167w,\n/static/09623da881e0c0515a48dc9bbd1fb47d/86d36/87fe328607615af11722bfe947725838.png 334w,\n/static/09623da881e0c0515a48dc9bbd1fb47d/74866/87fe328607615af11722bfe947725838.png 668w,\n/static/09623da881e0c0515a48dc9bbd1fb47d/bca35/87fe328607615af11722bfe947725838.png 683w\"\n            sizes=\"(max-width: 668px) 100vw, 668px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/09623da881e0c0515a48dc9bbd1fb47d/74866/87fe328607615af11722bfe947725838.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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><strong>一人じゃんけん感はんぱねぇ…！</strong></p>\n<p>自分で Pull request 作ってマージしてブランチ消した途端 Slack の通知が<br>\n<strong>スポポポポッ</strong> ってなって <strong>「うん、知ってる」</strong> ってなる！ ！</p>\n<p>意識高そうな感じでやってる感はすごく出るので、一人でも比較的モチベは保ちやすいかなと思います。<br>\nぼっち開発環境の第一弾、ひとまず完成です。</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 575px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/9941c2e4b42356f693d421cc5700752d/59415/9c7139b6049070cfdfb72271aed71dea.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: 22.155688622754493%; position: relative; bottom: 0; left: 0; background-image: url('data:image/svg+xml,%3csvg%20xmlns=\\'http://www.w3.org/2000/svg\\'%20width=\\'400\\'%20height=\\'88\\'%20viewBox=\\'0%200%20400%2088\\'%20preserveAspectRatio=\\'none\\'%3e%3cpath%20d=\\'M11%2011c-2%201-1%207%201%209s5%202%207-1h1l-1%203c-1%200%200%202%202%202h5l-3%203c-2%201-2%201%200%202v1c-3-1-4%200-4%203%201%202%207%203%2011%200l4-1c1%202%202-9%201-16v-6H23l-12%201\\'%20fill=\\'%23d3d3d3\\'%20fill-rule=\\'evenodd\\'/%3e%3c/svg%3e'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/9941c2e4b42356f693d421cc5700752d/5251b/9c7139b6049070cfdfb72271aed71dea.webp 167w,\n/static/9941c2e4b42356f693d421cc5700752d/7390e/9c7139b6049070cfdfb72271aed71dea.webp 334w,\n/static/9941c2e4b42356f693d421cc5700752d/039fe/9c7139b6049070cfdfb72271aed71dea.webp 575w\"\n              sizes=\"(max-width: 575px) 100vw, 575px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/9941c2e4b42356f693d421cc5700752d/21521/9c7139b6049070cfdfb72271aed71dea.png 167w,\n/static/9941c2e4b42356f693d421cc5700752d/86d36/9c7139b6049070cfdfb72271aed71dea.png 334w,\n/static/9941c2e4b42356f693d421cc5700752d/59415/9c7139b6049070cfdfb72271aed71dea.png 575w\"\n            sizes=\"(max-width: 575px) 100vw, 575px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/9941c2e4b42356f693d421cc5700752d/59415/9c7139b6049070cfdfb72271aed71dea.png\"\n            alt=\"スクリーンショッ\"\n            title=\"スクリーンショッ\"\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>","timeToRead":11,"frontmatter":{"title":"GithubとSlackとCircleCIとCodeClimateとci-bundle-updateでぼっち開発環境を作ってみた","tags":["CI","CircleCI","Code Climate","Git","Github","Ruby","Slack"],"date":"September 14, 2015","featuredImage":{"childImageSharp":{"fluid":{"tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='143'%20viewBox='0%200%20400%20143'%20preserveAspectRatio='none'%3e%3cpath%20d='M120%2013l-1%2013v12h5V25c0-10-1-13-2-13l-2%201m42%2012c0%2012%200%2013%202%2013l2-2c0-5%202-5%205-2%202%204%205%205%206%203%201%200%200-3-2-5l-3-4%202-3c3-3%203-5%201-5l-5%204-4%203v-7c0-7%200-8-2-8s-2%201-2%2013m-94-3c0%205%203%2011%205%2011v1c-6%203-7%204-6%206l3%201%205%202c2%203%204%202%204-2%200-2%200-2%207-5%207-2%2010-4%208-6%200-2-6-1-11%201l-7%202c-2%200-2%200-1-1v-4c-1-5-3-9-5-8v-1c1-1%200-1-1-1-2%200-2%200-1%204m37%200c-3%203-2%206%202%208l5%203c1%201-2%202-5%201-2-1-4-1-4%201s2%203%207%203c8%200%2010-7%202-10-5-2-6-4-1-4%205%201%207-1%204-3-2-2-8-1-10%201m23-1c-2%202-1%204%204%204l5%201c0%201-1%202-3%201-4%200-8%202-8%206s2%205%209%205h7v-7c-1-6-1-8-3-9-3-2-8-3-11-1m21%200c-6%203-7%2010-3%2015%203%202%2011%203%2013%201%201-2-1-4-3-3-6%202-10-3-6-8%201-2%202-2%205-2%202%201%203%200%204-1%201-3-6-4-10-2m57%208c-32%205-48%2040-34%2069%203%207%2013%2016%2020%2020%209%204%2010%204%2010-3v-5h-5c-5%200-11-4-11-7l-3-4c-4-4-4-6%200-4%202%201%203%201%202%203l1%201h3l-1%201%202%202%203%203h1l4-1c4%200%204-1%206-4v-3l-6-2c-12-3-18-19-12-30%202-3%202-6%202-9%200-9%201-10%209-6%205%203%206%203%2011%202h12c5%201%206%201%2011-2%207-3%208-3%209%205l2%2010c3%205%202%2017-1%2022-3%204-11%209-15%209-3%200-3%201-1%204l1%2011c0%2011%201%2011%208%208%2030-14%2037-53%2014-77a46%2046%200%2000-42-13m90%209l-3%204c0%202%204%201%207-1s3-2%205-1c3%202%204%206%201%208-2%202-5%202-7%201-1-2-6-3-6-1%200%203%206%207%2011%207%203%200%209-6%209-9%200-10-11-15-17-8M26%2057l-1%2023v22h71V57l-35-1-35%201m267%2032c-5%203-6%204-6%208v5l6%203%207%204%206-4c6-3%206-3%206-8s0-5-6-8c-7-4-6-4-13%200m1%202c-5%203-6%204-6%206%200%203%201%204%206%207l5%203%206-3c5-2%206-3%206-6%200-4%200-4-7-8l-5-3-5%204'%20fill='%23d3d3d3'%20fill-rule='evenodd'/%3e%3c/svg%3e","aspectRatio":2.80672268907563,"src":"/static/7ba45d274b000bdd1649fe850d4de41a/8eab8/featured-image.png","srcSet":"/static/7ba45d274b000bdd1649fe850d4de41a/1ec58/featured-image.png 334w,\n/static/7ba45d274b000bdd1649fe850d4de41a/ccb4a/featured-image.png 668w,\n/static/7ba45d274b000bdd1649fe850d4de41a/8eab8/featured-image.png 1336w,\n/static/7ba45d274b000bdd1649fe850d4de41a/54967/featured-image.png 1400w","srcWebp":"/static/7ba45d274b000bdd1649fe850d4de41a/f7e47/featured-image.webp","srcSetWebp":"/static/7ba45d274b000bdd1649fe850d4de41a/cd98f/featured-image.webp 334w,\n/static/7ba45d274b000bdd1649fe850d4de41a/7535d/featured-image.webp 668w,\n/static/7ba45d274b000bdd1649fe850d4de41a/f7e47/featured-image.webp 1336w,\n/static/7ba45d274b000bdd1649fe850d4de41a/9592d/featured-image.webp 1400w","sizes":"(max-width: 1336px) 100vw, 1336px"}}}}}},"pageContext":{"slug":"/setup-alone-developing-environment-with-github-slack-circleci-codeclimate-and-ci-bundle-update/","previous":{"fields":{"slug":"/how-to-improve-proofreading-of-sentence-in-japanese/"},"frontmatter":{"title":"Rubyで日本語解析API(+α)を使用して日本語の文書校正を効率化してみる","tags":["API","Ruby","Thor","Yahoo Developer Network"]}},"next":{"fields":{"slug":"/how-to-install-nodegit-with-electron/"},"frontmatter":{"title":"Electronにnodegitが入らない","tags":["Electron","Git","Nodejs"]}}}},
    "staticQueryHashes": ["2585454260","2954598359"]}