<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>Atsushi Nagase</title>
    <atom:link href="https://ja.ngs.io/rss.xml" rel="self" type="application/rss+xml"/>
    <atom:link href="https://ja.ngs.io/feed.xml" type="application/atom+xml"/>
    <language>ja</language>
    <description>プログラミング、ガジェット、電子工作、ロードバイク、ランニング、旅行など、趣味や仕事のことを書き綴るブログ。</description>
    <link>https://ja.ngs.io/</link>
    <lastBuildDate>Sat, 31 Dec 2016 13:55:00 -0000</lastBuildDate>
    <item>
      <title>2016年 所感</title>
      <link>https://ja.ngs.io/2016/12/31/shokan2016/</link>
      <guid>https://ja.ngs.io/2016/12/31/shokan2016/</guid>
      <pubDate>Sat, 31 Dec 2016 13:55:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;今年は、家族で2013年以来、3年ぶりに母方の祖母が住む、尾道で家族と大晦日を迎えています。&lt;/p&gt;

&lt;p&gt;今年は大きな変化がなく、主に仕事にパワーを割いていました。&lt;/p&gt;&lt;h2&gt;仕事・技術&lt;/h2&gt;

&lt;p&gt;Oneteam Inc. での仕事は、主製品の Oneteam の開発を行っていたところから、徐々に新事業の模索や、顧客へのヒアリング・導入提案をビジネスチームと一緒に行い、内部の開発チームに起案・設計する、という業務を行っていました。&lt;/p&gt;

&lt;p&gt;来年も引き続き、顧客とのコミュニケーションと設計の業務を行う予定です。&lt;/p&gt;

&lt;p&gt;WWDC に参加した 直前後では、Server Side Swift や Playground についての研究もおこなっていましたが、業務内容が Swift と関係ない部分を担当するようになり、暫くさわっていない状態が続いています。&lt;/p&gt;

&lt;p&gt;趣味で開発している CI2Go の Swift 3 化でリハビリを行っていますが、なかなか往生しておる次第です。&lt;/p&gt;

&lt;p&gt;新たに業務・趣味で使い出したのが Go 言語 で、もともと触っていた Perl や Ruby と比べて、開発環境が充実しているのと、ライブラリの依存解決方法が中枢でない点がとても扱いやすく、メンテナンスが止まっている小さいプロジェクトや、趣味のプロジェクトを徐々に移行しています。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;買い物チャット
&lt;/li&gt;&lt;li&gt;Wiplock
&lt;/li&gt;&lt;/ul&gt;

 執筆 &lt;p&gt;はじめて技術書の執筆に共著で参加させていただきました。&lt;/p&gt;

&lt;p&gt;Slack 入門 [ChatOps によるチーム開発の効率化]&lt;/p&gt;

 登壇 

&lt;p&gt;以下のイベントでの登壇を行いました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;02/10 Meguro.es #2 in Drecom
&lt;/li&gt;&lt;li&gt;02/16 dots.
&lt;/li&gt;&lt;li&gt;04/13 Collaboration Hack Meetup
&lt;/li&gt;&lt;li&gt;06/10 CircleCI Meetup
&lt;/li&gt;&lt;li&gt;06/22 WWDC 2016 の振り返り勉強会
&lt;/li&gt;&lt;li&gt;06/27 Tokyo Server-Side Swift Meetup #4
&lt;/li&gt;&lt;li&gt;07/05 「Slack入門」刊行記念LT大会
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;ならべてみると、今年後半は対外活動が控えめだったので、もうすこし、コンスタントにそとに出て話をできるよう、ネタ集めを行っていこうと思います。&lt;/p&gt;

&lt;h2&gt;旅行&lt;/h2&gt;&lt;p&gt;ことしは車を使い始めたこともあり、家族での移動が増え、週末は充実していました。&lt;/p&gt;

&lt;p&gt;特に、今まで電車で行き辛かった場所へもキャンプ用具一式をもって家族ででむくことができたのはライフチェンジングでした。いつも一人で参加しているフェスに、妻子と参加もできました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;02/27-29 水上高原

&lt;ul&gt;
&lt;li&gt;長女の誕生日祝いにスキーへ行きました。
&lt;/li&gt;&lt;li&gt;次女がインフルエンザにかかり、長女・長男と共に上越新幹線で
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;03/26-27 大岳山キャンプ場

&lt;ul&gt;
&lt;li&gt;あきる野市にある大岳山キャンプ場に行ってきました。
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;04/06-10 台北

&lt;ul&gt;
&lt;li&gt;今年1月からジョインしてくた、台湾人デザイナー Carlos Liu の帰省+事務手続きに便乗して台北に行きました。
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;05/14-15

&lt;ul&gt;
&lt;li&gt;横須賀市の IT 企業補助プログラムのサポートにより、会社のメンバーと開発合宿を行いました。
&lt;/li&gt;&lt;li&gt;http://www.yokosukaitcamp.com/
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;06/04-05 Taicoclub

&lt;ul&gt;
&lt;li&gt;ひとりで車で参加しました。
&lt;/li&gt;&lt;li&gt;http://taicoclub.com/16/
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;06/13-20 WWDC

&lt;ul&gt;
&lt;li&gt;WWDC 2012 より 4年ぶりに Moscone West の WWDC に参加してきました。
&lt;/li&gt;&lt;li&gt;毎度、素敵な出会いと再会があるので、素晴らしいカンファレンスです。来年も本体当選せずとも参加しようと思います。
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;07/02-03 宮原オートキャンプ場

&lt;ul&gt;
&lt;li&gt;千葉県いすみ市にある宮原オートキャンプ場で一泊キャンプをおこないました。
&lt;/li&gt;&lt;li&gt;近くに ポッポの丘ギャラリー という古い鉄道車両が (野ざらしで) 展示されているスポットがあり、息子と自分は楽しめました。
&lt;/li&gt;&lt;li&gt;http://www.camp-miyahara.com/
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;07/30-08/01 北海道

&lt;ul&gt;
&lt;li&gt;同僚と 第30回苫小牧ハスカップトライアスロン大会in勇払 に参加すべく北海道にいきました。
&lt;/li&gt;&lt;li&gt;スイムでリタイアしました。
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;08/12-14 兵庫県竹野

&lt;ul&gt;
&lt;li&gt;両親と家族で竹野休暇村に2泊2日で海水浴旅行にいきました。
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;09/10-11 Sawagi Festival @ 山中湖撫岳荘

&lt;ul&gt;
&lt;li&gt;はじめて家族と泊まりがけ音楽フェスに参加しました。
&lt;/li&gt;&lt;li&gt;http://www.sawagifes.com/
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;10/01-02 CAMP Off Tone @ マウントピア黒平

&lt;ul&gt;
&lt;li&gt;甲府にある マウントピア黒平 で行われている CAMP Off Tone に参加しました。
&lt;/li&gt;&lt;li&gt;http://www.offtone.in/camp/
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;10/08-09 朝霧 JAM

&lt;ul&gt;
&lt;li&gt;こちらも初参加です。ものすごい濃霧の中のフェスでした。
&lt;/li&gt;&lt;li&gt;http://smash-jpn.com/asagiri/
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;釣りもそれなりに行って時間を割いていたのですが、こちらに残せるほどの結果を残せていないので、割愛します。&lt;/p&gt;

&lt;p&gt;来年もこりずに釣行いこうと思います。&lt;/p&gt;

&lt;h2&gt;音楽&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;04/24 小豆 バンド @ Live cafe Again

&lt;ul&gt;
&lt;li&gt;近所のバー Octant 常連の三味線の先生率いる限定バンドライブ。素晴らしかった。
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;05/03 Pacha Tokyo 2016 @ 晴海客船ターミナル
&lt;/li&gt;&lt;li&gt;05/30 くるり NOW AND THEN vol.3 @ 神奈川県民ホール
&lt;/li&gt;&lt;li&gt;06/04-05 Taicoclub @ こだまの森

&lt;ul&gt;
&lt;li&gt;雨の中の Tycho がすばらしかった
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;li&gt;09/03 EMMA HOUSE
&lt;/li&gt;&lt;li&gt;09/10-11 Sawagi Festival @ 山中湖撫岳荘
&lt;/li&gt;&lt;li&gt;09/16 Tony Humphries Japan Tour 2016 ‘Soundbite’ Feat. Tony Humphries @ Contact Tokyo
&lt;/li&gt;&lt;li&gt;10/01-02 CAMP Off Tone @ マウントピア黒平
&lt;/li&gt;&lt;li&gt;10/08-09 朝霧 JAM
&lt;/li&gt;&lt;li&gt;10/21 David Morales Japan Tour
&lt;/li&gt;&lt;li&gt;11/19 Masters At Work @ ageha
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;前述の旅行と重複する部分もありますが、上記の様なイベントに参加してました。&lt;/p&gt;

&lt;p&gt;充実していたと思います、来年も懲りずによい音楽を聴いていきたいと思います。&lt;/p&gt;

&lt;p&gt;晴海埠頭での開催が最後だった Body and SOUL Tokyo 2016 が WWDC へのフライトと調整がつかず、とても楽しみにしていた A Hundred Birds Orchestra 20th Aniversary 東京公演　が体調不良に参加できなかったのがとても悔やまれます。&lt;/p&gt;

&lt;h2&gt;健康&lt;/h2&gt;

&lt;p&gt;今年10月ごろから徐々にランニング通勤の回数が減ってきて、年末はほぼ電車通勤 (かつ寝不足か二日酔い) の時期がつづき、年末は風邪でダウンしてしまったため、来年は体力維持と規則正しい生活 (そしてあわよくば何かしら大会のリザルト) をのこせるといいなと思います。&lt;/p&gt;

&lt;h2&gt;家族&lt;/h2&gt;&lt;p&gt;今年で長男が幼稚園を卒園するので、毎朝お迎えは次女が入園するまでの1年間お休みになります。&lt;/p&gt;

&lt;p&gt;毎回思いますが、ついこの間まで赤ちゃんだったのが、小学校にあがりそれぞれ、友達ややりたいことを見つけて親から離れていくのは寂しくも思います。&lt;/p&gt;

&lt;p&gt;来年も、彼らに負けないぐらいアクティブに一年を過ごしたいと思います。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>LINE ボットとの会話で Amazon 検索と購入をする - 買い物チャット</title>
      <link>https://ja.ngs.io/2016/12/11/line-buychat/</link>
      <guid>https://ja.ngs.io/2016/12/11/line-buychat/</guid>
      <pubDate>Sun, 11 Dec 2016 14:40:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;LINE ボット との会話で Amazon 検索と購入をする、買い物チャットをリリースしました。&lt;/p&gt;

   
 
&lt;h2&gt;商品を検索する&lt;/h2&gt;
&lt;p&gt;ボットを友だちに追加して、検索したい商品名をメッセージで送ります。&lt;/p&gt;
&lt;p&gt;該当した商品を最大5件、横スクロールの一覧を返信します。&lt;/p&gt;
 

    
 
&lt;h2&gt;バーコードで検索する&lt;/h2&gt;
&lt;p&gt;手元にあるものと、同じものを購入したい場合、バーコードの写真をとって、ボットに送ります。&lt;/p&gt;
&lt;p&gt;メッセージで送ったのと同じく、該当した商品を返信します。&lt;/p&gt;
 

    
 
&lt;h2&gt;カートに追加する&lt;/h2&gt;
&lt;p&gt;ボットが返信した商品の カートに追加 ボタンをタップすると、やりとりを行なっているチャット内でのみ有効なカートに商品が追加されます。&lt;/p&gt;
&lt;p&gt;グループチャットにボットを追加している場合、友人や家族と共通のカートで買い物を行え、レジャーやイベントの準備を一緒に行うことができます。&lt;/p&gt;
 

    
 
&lt;h2&gt;カートを見る&lt;/h2&gt;
&lt;p&gt;カート追加後に返信する商品下の カートを見る ボタンをタップすると、今までカートに追加した商品が横スクロールで返信します。&lt;/p&gt;
&lt;p&gt;カートへは、最大5件、商品を追加することができます。&lt;/p&gt;
&lt;p&gt;Amazon で購入しますか？ というメッセージの 購入する ボタンをタップすると、ウェブブラウザが開き、Amazon.co.jp のカートにまとめて追加できます。&lt;/p&gt;
 

   &lt;h2&gt;フィードバックをください！&lt;/h2&gt;

&lt;p&gt;利用していて、不便だったり、こんな機能があると嬉しい、などご意見がありましたら、以下のフォームからメッセージを送っていただけると幸いです。&lt;/p&gt;

&lt;p&gt;買い物チャット お問合せ&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Wiplock - 作業途中の Pull Request を間違えてマージするのを防止する</title>
      <link>https://ja.ngs.io/2016/09/23/wiplock/</link>
      <guid>https://ja.ngs.io/2016/09/23/wiplock/</guid>
      <pubDate>Thu, 22 Sep 2016 17:00:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;h2&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;未完了のタスクやタイトルに WIP という文字列を含む Pull Request からメインブランチを保護する &lt;strong&gt;Wiplock&lt;/strong&gt; をリリースしました。&lt;/p&gt;

&lt;p&gt;よかったら試して下さい。&lt;/p&gt;

&lt;p&gt;https://wiplock.com&lt;/p&gt;

&lt;p&gt;ソースコードを公開しています。Go と React + Redux で開発しました。&lt;/p&gt;

&lt;p&gt;https://github.com/ngs/wiplock&lt;/p&gt;&lt;h2&gt;動機&lt;/h2&gt;

&lt;p&gt;日々の GitHub を使った開発フローで、作業途中 (WIP) の Pull Request を作成し、同僚と実装に関する議論に役立てたりします。&lt;/p&gt;

&lt;p&gt;これらの Pull Request を、タスクが未完了のままマージしてしまったり、タイトルに WIP を付けたままマージしてしまい、紛らわしいマージコミットを作成してしまいます。&lt;/p&gt;

&lt;p&gt;このようなミスオペレーションを防止するため、&lt;strong&gt;Wiplock&lt;/strong&gt; という、小さな Web アプリケーションを開発しました。&lt;/p&gt;

&lt;h2&gt;使い方&lt;/h2&gt;

 1. GitHub でサインインする 

&lt;p&gt;Wiplock を開くと、黒い Sign in with  ボタンがあります。&lt;/p&gt;

&lt;p&gt;これをクリックして、次の画面で承認を行って下さい。&lt;/p&gt;

&lt;p&gt;組織で利用する場合には、組織の Grant Access ボタンをクリックし、アクセス権を付与して下さい。&lt;/p&gt;

 2. リポジトリーを見つけてスイッチをオンにする &lt;p&gt;GitHub でのサインインが完了すると、Wiplock に自分のリポジトリー一覧が表示されます。&lt;/p&gt;

&lt;p&gt;利用したいリポジトリを見つけてスイッチをオンにして下さい。&lt;/p&gt;

 3. 動作確認 &lt;p&gt;リポジトリページを開き、WIP という文字列をタイトルに含む Pull Request を作成、または編集して下さい。&lt;/p&gt;

&lt;p&gt;タイトルを編集すると、Pull Request のステータス表示が Pending になります。&lt;/p&gt;

 4. ブランチを保護する &lt;p&gt;Settings &amp;gt; Branches 画面を GitHub のリポジトリページで開き、Require branches to be up to date before merging チェックボックスをオンにします。&lt;/p&gt;

&lt;h2&gt;自分の Wiplock をつくる&lt;/h2&gt;

&lt;p&gt;他者の管理するアプリケーションに権限を付与したくない場合は、Heroku や Docker ホストに自身の Wiplock を起動することができます。&lt;/p&gt;

 必要なもの 

&lt;p&gt;GitHub で自身の OAuth アプリケーションを作成する必要があります。&lt;/p&gt;

&lt;p&gt;https://github.com/settings/applications/new&lt;/p&gt;

 Heroku 

&lt;p&gt;Wiplock リポジトリの README にある、Heroku Button をクリックするだけで、簡単にご利用いただけます。&lt;/p&gt;

&lt;p&gt;https://github.com/ngs/wiplock#heroku&lt;/p&gt;

 Docker 

&lt;p&gt;起動するには、Redis サーバーが必要です。&lt;/p&gt;

&lt;p&gt;まだ、お手持ちの環境にインストールされていない場合には、公式 Docker イメージを使うことで、簡単に導入できます。&lt;/p&gt;
 docker pull redis
docker run --name wiplock-redis -d redis 

&lt;p&gt;Wiplock の Docker イメージをダウンロード (Pull) します。&lt;/p&gt;
 docker pull atsnngs/wiplock 

&lt;p&gt;そして、REDIS_URL を起動した Redis コンテナの名前を使って指定し、Wiplock を起動します。&lt;/p&gt;
 docker run --name wiplock -p 8000:8000 -d --rm \
  --link wiplock-redis:redis \
  -e GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID} \
  -e GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET} \
  -e SECRET=${SECRET} \
  -e REDIS_URL="redis://redis:6379" \
  atsnngs/wiplock 

&lt;p&gt;ローカルホストで Wiplock の起動が確認いただけます。&lt;/p&gt;

&lt;p&gt;http://localhost:8000&lt;/p&gt;

&lt;h2&gt;Milestones&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;in progress ラベルがついている Pull Request も保護する
&lt;/li&gt;&lt;li&gt;リポジトリルートにある、.wiplock.yml を使って保護条件を設定できる
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;みなさんの開発フローを安全に保つのにお役に立てれば幸いです！&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Nightwatch.js の E2E テストでメールの配信をテストする</title>
      <link>https://ja.ngs.io/2016/09/08/nightwatch-mail-test/</link>
      <guid>https://ja.ngs.io/2016/09/08/nightwatch-mail-test/</guid>
      <pubDate>Thu, 08 Sep 2016 08:00:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;Nightwatch.js で書いた E2E テストプロジェクトで、Mandrill と RequestBin を使ってメールの配信もテストするサンプルプロジェクトを公開しました。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ngs/nightwatch-mail-example on GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;このサンプルプロジェクトは Hacker News Letter を購読・購読解除を行うユーザーの操作を実行しています。&lt;/p&gt;&lt;p&gt;テストコードは以下の様な書き方です:&lt;/p&gt;
 page.navigate()
//
// Mandrill のメールルートを作成する
.createEmailRoute(email)
//
// フォーム入力
.waitForElementVisible('@form')
.clearValue('@email')
.setValue('@email', email)
.click('@submit')
//
// 完了画面に遷移
.waitForElementNotPresent('@form')
.assert.urlEquals(page.url + 'almostfinished.html')
//
// 指定した件名のメールの受信を確認
.assert.receivedEmailSubjectEquals(email,
  'Hacker Newsletter: Please Confirm Subscription')
//
// 指定した文字列が HTML 本文に含まれるメールの受信を確認
.assert.receivedEmailHTMLBodyContains(email,
  '&amp;lt;a class="button" href="https://hackernewsletter.us1.list-manage.com/subscribe/confirm?u=') 

&lt;p&gt;全てのコードを見る.&lt;/p&gt;

&lt;h2&gt;動機&lt;/h2&gt;

&lt;p&gt;弊社では最近 Nightwatch.js を製品の E2E テスト実装に導入し、とても簡単でシンプルに Web アプリケーションのテストコードを記述できるので気に入りました。。&lt;/p&gt;

&lt;p&gt;テストコードを書いている最中、メールの受信を介したユーザーフローのテストコードを書こうと思い、Nightwatch.js を拡張して、カスタムアクションとアサージョンを実装しました。&lt;/p&gt;

&lt;p&gt;ref: Extending Nightwatch - Nightwatch Developer Guide&lt;/p&gt;

&lt;h2&gt;導入方法&lt;/h2&gt;

 1. Mandrill の受信ドメイン (Inbound Domain) を設定する 

&lt;p&gt;まず、Mandrill のドキュメントを参考にして、受信用のメールドメイン (Inbound Email Domain) を設定します。&lt;/p&gt;

&lt;p&gt;ドメインを入力し、Inbound Domains 画面の青い + Add ボタンをクリックするだけです。&lt;/p&gt;&lt;p&gt;ドメインを追加したら、MX Setup ポップアップに記載されている DNS レコードを追加します。&lt;/p&gt; 2. Mandrill の API キーを取得する 

&lt;p&gt;次に、Mandrill の API を設定画面から取得します。&lt;/p&gt;&lt;p&gt;間違えて実際にメールを誰かに送ってしまわないために、Test Key チェックボックスはオンにすることをお勧めします。&lt;/p&gt;

 3. (任意) 自身の RequestBin を使う 

&lt;p&gt;配信されたメール RequestBin で他の人でも閲覧ができます。もしアプリケーションから配信されるメールを一般から閲覧できることに懸念がある場合には、自身の RequestBin を Heroku や IBM Bluexix に オープンソースの RequestBin をデプロイすることで、利用できます。&lt;/p&gt;
 git clone git://github.com/Runscope/requestbin.git
cd requestbin
heroku create
heroku addons:add heroku-redis
heroku config:set REALM=prod
git push heroku master 

 4. 環境変数 

&lt;p&gt;サンプルプロジェクトを実行するために、上記の手順で取得した情報を環境変数に書き出します。&lt;/p&gt;

&lt;p&gt;自分は direnv　をローカル環境変数の管理に使っています:&lt;/p&gt;
 echo "export MANDRILL_API_KEY=${YOUR_API_KEY_HERE}" &amp;gt;&amp;gt; .envrc
echo "export MAIL_DOMAIN=${YOUR_MAIL_DOMAIN_HERE}" &amp;gt;&amp;gt; .envrc
# If you set up your own RequestBin in Step 3
echo "export REQUEST_BIN_HOST=https://${YOUR_HEROKU_APP}.herokuapp.com" &amp;gt;&amp;gt; .envrc
# Allow new environment variables
direnv allow 

 5. NPM! 

&lt;p&gt;これで、npm コマンドを使ってサンプルテストスイートを実行できます。&lt;/p&gt;
 npm install # for first time
npm test 

&lt;h2&gt;カスタムアサージョンとコマンド&lt;/h2&gt;

&lt;p&gt;機能拡張のファイルレイアウトは以下の様になっています:&lt;/p&gt;
 lib
├── custom_assertions
│   ├── receivedEmailHTMLBodyContains.js
│   ├── receivedEmailSubjectContains.js
│   └── receivedEmailSubjectEquals.js
├── custom_commands
│   ├── checkEmails.js
│   ├── createEmailRoute.js
│   └── deleteEmailRoutes.js
├── globals.js
└── page_objects
    └── hackernewsletter.js # example specific file 

&lt;p&gt;設定ファイル からそれらを指定します。&lt;/p&gt;
 {
  "custom_commands_path": "./lib/custom_commands",
  "custom_assertions_path": "./lib/custom_assertions",
  "page_objects_path": "./lib/page_objects",
  "globals_path": "./lib/globals.js",
  // snip ...
} 

&lt;h2&gt;もっとアサージョンを追加する&lt;/h2&gt;

&lt;p&gt;サンプルプロジェクトでは receivedEmailHTMLBodyContains, receivedEmailSubjectContains, receivedEmailSubjectEquals を実装しました。&lt;/p&gt;

&lt;p&gt;もし from_email や attachments などの他のフィールドをテストしたい場合には、既存の実装をフォークして、アサージョンを追加することができます。 (一覧を見る)&lt;/p&gt;
 const util = require('nightwatch/lib/util/utils');
exports.assertion = function receivedEmailSubjectEquals(address, expected, msg) {
  const DEFAULT_MSG = 'Testing if &amp;lt;%s&amp;gt; received with subject equals to "%s".';
  this.message = msg || util.format(DEFAULT_MSG, address, expected);
  this.expected = function() {
    return expected;
  };
  this.pass = function(value) {
    const expected = this.expected();
    return value.filter(function(email) {
      return email.subject === expected;
      // use indexOf(expected) !== -1 for *contains* implementation.
    }).length &amp;gt; 0;
  };
  this.value = function(result) {
    return result || [];
  };
  this.command = function(callback) {
    return this.api.checkEmails(address, callback);
  };
} 

&lt;p&gt;もし、便利なアサージョンを実装したら、是非 リポジトリをフォーク してプルリクエストを送って頂けると幸いです！&lt;/p&gt;

&lt;p&gt;Happy testing!&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Hubot を使って日々のルーチンワークをゼロにする</title>
      <link>https://ja.ngs.io/2016/07/05/slack-book-lt/</link>
      <guid>https://ja.ngs.io/2016/07/05/slack-book-lt/</guid>
      <pubDate>Tue, 05 Jul 2016 10:45:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;2016-07-05 著書 Slack 入門 - ChatOps によるチーム開発の効率化 の刊行記念 LT 大会で “Hubot を使って日々のルーチンワークをゼロにする” という内容を発表した資料です。&lt;/p&gt;</description>
    </item>
    <item>
      <title>IBM Cloud Tools for Swift ことはじめ について発表しました</title>
      <link>https://ja.ngs.io/2016/06/29/tsss4/</link>
      <guid>https://ja.ngs.io/2016/06/29/tsss4/</guid>
      <pubDate>Tue, 28 Jun 2016 22:30:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;2016-06-27 弊社 Oneteam のスペースで行った Tokyo Server-Side Swift Meetup #4 で WWDC 2016 にて発表された IBM Cloud Tools for Swift ことはじめ についてお話しました。&lt;/p&gt;&lt;p&gt;関連リンク:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Going Server-side Swift Open Source
&lt;/li&gt;&lt;li&gt;IBM Cloud Tools for Swift
&lt;/li&gt;&lt;li&gt;IBM-Swift/BluePic on GitHub
&lt;/li&gt;&lt;/ul&gt;
</description>
    </item>
    <item>
      <title>WWDC 2016 振り返り勉強会で発表しました</title>
      <link>https://ja.ngs.io/2016/06/22/finc-wwdc-2016/</link>
      <guid>https://ja.ngs.io/2016/06/22/finc-wwdc-2016/</guid>
      <pubDate>Wed, 22 Jun 2016 12:00:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;2016-06-22 有楽町にある FiNC さんで行われた WWDC 2016 の振り返り勉強会で発表してきました。&lt;/p&gt;

&lt;p&gt;今回の WWDC で発表された新機能の中で気になったものを、発表直後に開発したプロトタイプのデモと、その中で行き詰まったところを Lab で質問してきた内容を共有しました。&lt;/p&gt;&lt;h2&gt;Xcode Source Editor Extension&lt;/h2&gt;

&lt;p&gt;開発を始めるために必要な準備と、具体的な開発方法についての発表と、編集中のソースコードから GitHub gist を作成するデモを行いました。&lt;/p&gt;

&lt;p&gt;関連ページ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WWDC 2016 - Session 414 - Using and Extending the Xcode Source Editor
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Swift Playgrounds for iPad&lt;/h2&gt;

&lt;p&gt;Playground Book の開発方法についての共有と、Arduino 互換 BLE ボード Red Bear Lab Blend Micro を Swift Playgrounds for iPad から扱うデモを行いました。&lt;/p&gt;

&lt;p&gt;関連ページ&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WWDC 2016 - Session 408 Introducing Swift Playgrounds
&lt;/li&gt;&lt;li&gt;Playground Book Package Format
&lt;/li&gt;&lt;li&gt;Red Bear Lab Blend Micro
&lt;/li&gt;&lt;li&gt;Swift Playground for iPad で Bluetooth 機器の一覧を取得する
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;プロトタイプの今後&lt;/h2&gt;

&lt;p&gt;今回デモを行ったプロトタイプは、まだ開発中のものなので、公開できるクオリティーになったら、順次このブログで公開・告知していこうと思います。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Slack 入門 [ChatOps によるチーム開発の効率化]</title>
      <link>https://ja.ngs.io/2016/06/22/slack-book/</link>
      <guid>https://ja.ngs.io/2016/06/22/slack-book/</guid>
      <pubDate>Wed, 22 Jun 2016 00:00:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;2016-06-28、共著で参加させていただいた Slack 入門 [ChatOps によるチーム開発の効率化] が技術評論社より発売されます。&lt;/p&gt;

 
 

 

 
 Slack 入門 [ChatOps によるチーム開発の効率化] 
&lt;p&gt;2016年6月28日発売&lt;/p&gt;
&lt;p&gt;松下雅和，小島泰洋，長瀬敦史，坂本卓巳　著&lt;/p&gt;
&lt;p&gt;Amazon Japan で購入する&lt;/p&gt;
&lt;p&gt;A5判 / 208ページ&lt;/p&gt;
&lt;p&gt;定価 (本体1,980円 + 税)&lt;/p&gt;
  &lt;p&gt;また、電子版の発売を予定しています。日付が確定次第告知させて頂きます。&lt;/p&gt;&lt;h2&gt;『Slack 入門』について&lt;/h2&gt;

&lt;p&gt;この本は、2013年の登場より、豊富なインテグレーションや、親しみやすい UI で愛され続けて、今も人気の勢いを落とさないチャットツール、Slack の入門書です。　&lt;/p&gt;

&lt;p&gt;基本的な使い方、機能の徹底解説、API の活用、Hubot を使ったチャットボットの導入、CI ツールとの導入について記載しています。&lt;/p&gt;

&lt;p&gt;自分は 第4章 代表的な連携ツール Hubot の執筆を担当しました。&lt;/p&gt;

&lt;p&gt;GitHub 社製 チャットボットフレームワーク Hubot の導入方法、フレームワークとプロジェクトの仕組み、スクリプトの作成方法、具体的な実装例について解説しています。&lt;/p&gt;

&lt;p&gt;今まで Node.js や Heroku を触ったことがない方でも、順を追って作業すれば導入できるような内容になっています。&lt;/p&gt;

&lt;h2&gt;概要&lt;/h2&gt; 
&lt;p&gt;いま最も注目を集めるチャットコミュニケーションツールSlackの解説書です。&lt;/p&gt;

&lt;p&gt;Slackが人気の背景には，さまざまなサービスと連携してソフトウェア開発を効率化できるツールとしてエンジニアから高い評価を得たことにあります。Slackは親しみやすいUIとチャットコミュニケーションを活性化させる工夫がたくさんあり，いまやエンジニアだけでなく多くのビジネスユーザを獲得しています。コミュニケーションプラットフォームのデファクトスタンダードになりつつあると言っても過言ではありません。&lt;/p&gt;

&lt;p&gt;本書では「ChatOps」というソフトウェア開発におけるタスク管理の考え方に触れ，はじめてSlackを利用する方に向けて基本操作をじっくり解説します。さらにボットツール（Hubot）と連携したタスクの自動化やCIツールと連携したアプリの開発方法を紹介しています。この1冊にSlackの基礎から実践的な利用方法がまとまっています。&lt;/p&gt;
 

&lt;p&gt;引用元: 技術評論社 / Slack入門 [ChatOpsによるチーム開発の効率化]&lt;/p&gt;

&lt;h2&gt;発売記念イベント&lt;/h2&gt;

&lt;p&gt;2016-07-05 火曜日、執筆者の一人である、@matsukaz さん が CTO を務められる、千駄ヶ谷にある 株式会社トランスリミット さんのオフィスにて &lt;strong&gt;「Slack入門」刊行記念LT大会&lt;/strong&gt; と題した発売記念イベントを行います。&lt;/p&gt;

&lt;p&gt;4名の執筆者 (と、公募中の3名) がそれぞれ登壇し、導入の経緯や使用事例についてのライトニングトークを行います。&lt;/p&gt;

&lt;p&gt;本書を購入して頂いた方以外にも ChatOps や Slack に興味のある方々に参加頂けたらと思います。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Swift Playground for iPad で Bluetooth 機器の一覧を取得する</title>
      <link>https://ja.ngs.io/2016/06/15/swift-playground-core-bluetooth/</link>
      <guid>https://ja.ngs.io/2016/06/15/swift-playground-core-bluetooth/</guid>
      <pubDate>Wed, 15 Jun 2016 14:45:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;先の投稿で所感を述べた通り、Swift Playground for iPad の発表に感銘を受けたので、早速遊び始めています。&lt;/p&gt;

&lt;p&gt;まず最初に作ったのは、Core Bluetooth の API を使用して、周辺の Bluetooth 機器の一覧を UITableView で表示するサンプルです。Playground Book の形式で GitHub に公開しました。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ngs/Playground-Bluetooth-Book&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Core Bluetooth に関して、全く触ったことが無かったので、@shu223 さんの Qiita 投稿 を参考にさせて頂きました。&lt;/p&gt;

&lt;p&gt;今回は一覧まででしたが、ちょうど良いデバイスが入手でき次第、実際にデータの送受信を行える様にしようと思います。&lt;/p&gt;

&lt;p&gt;このプロジェクトを進化させて、ラップトップを持ち歩かなくても、Bluetooth デバイスとブレッドボード、iPad だけで気軽にスケッチが作られるようになればな、と思っています。&lt;/p&gt;&lt;h2&gt;動作デモ&lt;/h2&gt;&lt;h2&gt;必須環境&lt;/h2&gt;

&lt;p&gt;開発者プレビューで公開されている、iOS 10 beta がインストールされている iPad 必要になります。&lt;/p&gt;

&lt;p&gt;Apple 開発者サイトの Download ページ からインストーラーをダウンロードし、インストールして下さい。&lt;/p&gt;

&lt;h2&gt;Playground Book の iPad への転送方法&lt;/h2&gt;

&lt;p&gt;以下の手順が面倒だったら、Swift コードを Blank プレイグラウンドにコピペするだけでもお試し頂けます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;最新の ZIP アーカイブ をダウンロードして解凍するか リポジトリ を Git でクローンします。
&lt;/li&gt;&lt;li&gt;iPad の AirDrop を有効にします。
&lt;/li&gt;&lt;li&gt;Finder で ⌘ + ⇧ + R を入力して AirDrop のウィンドウを開きます。
&lt;/li&gt;&lt;li&gt;Bluetooth.playgroundbook を iPad のアイコンにドロップします。
&lt;/li&gt;&lt;li&gt;iPad 上で開くアプリケーションの選択を尋ねられるので、Playground を選択します。
&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;参考&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;WWDC 2016 Videos / Introducing Swift Playgrounds
&lt;/li&gt;&lt;li&gt;Playground Book Package Format
&lt;/li&gt;&lt;/ul&gt;

 window.setupAmazonWidget('　', '4873117135', 'B018VOYJDU', 'B017YV1P6U', '4883379736') 


</description>
    </item>
    <item>
      <title>WWDC 2016 Keynote + Platforms State of the Union 所感</title>
      <link>https://ja.ngs.io/2016/06/14/wwdc-2016-keynote/</link>
      <guid>https://ja.ngs.io/2016/06/14/wwdc-2016-keynote/</guid>
      <pubDate>Tue, 14 Jun 2016 13:30:00 -0000</pubDate>
      <author>a@ngs.io (長瀬 敦史)</author>
      <description>&lt;p&gt;2016-06-13 Mon. - 17 Fri. 開催されている WWDC 2016 に参加するために、San Francisco に来ています。&lt;/p&gt;

&lt;p&gt;旅の一連の記録は帰国後に投稿しますが、WWDC 初日、Bill Graham Civic Auditorium で開催された Keynote, Platforms State of the Union の所感を書きます。&lt;/p&gt;&lt;h2&gt;iOS のビルトインアプリケーションの連携&lt;/h2&gt;

&lt;p&gt;iOS 10 から VoIP, Messages, Maps, Notification など、ビルトインのアプリケーションに対して拡張を行う API が発表されていました。&lt;/p&gt;

&lt;p&gt;新 iMessage は今までのメッセージングアプリケーションの良さを踏襲したような機能追加で、より感情表現を伝えやすく、テキストだけのコミュニケーションに違和感を覚えていて、他のメッセージングアプリケーションを使っていた人たちにも使ってもらいやすくなったと思います。&lt;/p&gt;

&lt;p&gt;Apple プラットフォームのデバイスのユーザー同士だと、既存のメッセージングアプリケーションからの乗り換えもありかな、と思いますが、コミュニケーションという特性上、Android, Windows ユーザーとのやりとりも必須なので、完全乗り換えは難しそうです。&lt;/p&gt;

&lt;p&gt;これほどのソフトウェアを、クロスプラットフォームで展開するとなると、なかなかの投資となると思うので、恐らく本腰入れては進出してこないと考えています。(Android 版 iMessage がでるという噂はありましたが)&lt;/p&gt;

&lt;h2&gt;Continuity&lt;/h2&gt;

&lt;p&gt;macOS Sierra の発表にあった、Continuity: 複数のデバイスが連携して動作する機能群に含まれる、Clipboard Sharing, Auto Unlocking は、2016年に入って気に入って使っていたソフトウェア達: Near Lock と Copied を OS ビルトインで実現してくれます。(WWDC 恒例の 3rd Party 潰しですね。)&lt;/p&gt;

&lt;p&gt;とても気に入っていましたが、恐らく Sierra の Production がリリースされたら、全デバイスにインストールし、それらは使わなくなってしまうだろうと思います。&lt;/p&gt;

&lt;h2&gt;Swift Playground for iPad&lt;/h2&gt;

&lt;p&gt;今回の Keynote で発表されたアップデートの中で最も印象的だったのが、この発表です。&lt;/p&gt;

&lt;p&gt;人によっては Xcode に付随する Playground に比較して、あれは子供向けだから、やれることは少ないよ みたいなイマイチな反応もされていますが、やれることは少ない、でも、使って欲しい使い方を提供できる、お手本にしたい設計思想です。&lt;/p&gt;

&lt;p&gt;もともと Playground が iOS にも欲しいし、そのうち出るだろう、と思っていたのですが、想像を上回る製品で感動しました。&lt;/p&gt;

&lt;p&gt;実際に iPad Pro に iOS 10 をインストールして遊び始めてみました。iOS 10 を iPad にインストールすれば、OS にビルトインされています。&lt;/p&gt;

&lt;p&gt;まだ Top 画面にある Featured 内のコンテンツは Coming Soon になっており、Keynote にあった、モンスターが移動するゲームは遊べません。&lt;/p&gt;

&lt;p&gt;My Playgrounds から、+ サインをタップして新規作成すると、ひな形で&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answers: 質問ラベル What is your name? に対して、応答フォームに入力すると、Hi \(inputValue) のフォーマットで出力する簡単なプログラム
&lt;/li&gt;&lt;li&gt;Shapes: 矩形を描画しユーザーインタラクションによる操作ができるプログラム
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;と、スクラッチでコードを書くための Blank が選べます。&lt;/p&gt;

&lt;p&gt;Swift Playground for iPad で使用できるパッケージのフォーマットについて、Playground Book Package Format に記載されており、これを iCloud Drive などに設置し、iPad で開けば、コンテンツが作成できるはずなのですが、なぜか現在はパッケージとして認識せず、選択できません。&lt;/p&gt;

&lt;p&gt;会期中に Lab で質問してこようと思います。&lt;/p&gt;

 2016-06-14 11:50 PDT 追記 

&lt;p&gt;Creating Content for Swift Playground Lab で質問したところ、.playgroundbook ディレクトリがバンドルとして認識されないのは、現プレビューバージョンで発生しているバグで、今後修正される予定とのことです。&lt;/p&gt;

&lt;p&gt;今のところ iPad に .playgroundbook のコンテンツを転送するには、AirDrop でフォルダごと転送するか、Apple Mail を使って、添付ファイルとしてメールで送信する方法があるそうです。&lt;/p&gt;

&lt;p&gt;AirDrop は動作確認できましたが、メールは Mail cannot open this attachment. という警告がでて、関連づけられたアプリケーションを起動できませんでした。 (スクリーンショット)&lt;/p&gt;

&lt;h2&gt;Xcode&lt;/h2&gt;

&lt;p&gt;Keynote では触れられていませんでしたが、Platforms State of the Union (SOTU) では Xcode のアップデートも発表がありました。&lt;/p&gt;

&lt;p&gt;着実に進化しており、(TODO: What’s new にリンクする) 正式版リリースが出て、プロダクション開発に使える日が楽しみになりました。&lt;/p&gt;

&lt;p&gt;特に印象的だったのが Xcode App Extensions です。&lt;/p&gt;

&lt;p&gt;Xcode App Extension ができることは以下:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ソースコードの編集

&lt;ul&gt;
&lt;li&gt;内容の追加と削除
&lt;/li&gt;&lt;li&gt;内容の変換
&lt;/li&gt;&lt;li&gt;内容の選択
&lt;/li&gt;&lt;li&gt;クリップボードの更新
&lt;/li&gt;&lt;li&gt;ファイル内の移動
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;

&lt;p&gt;AppStore で配布でき、プロセスは Xcode と別プロセスで起動し、Sandbox 内で動作するので、セキュアーである、とのことでした。&lt;/p&gt;

&lt;p&gt;かつて Coda 2 用に実装していた、Gist や Markdown プラグインも作れるのでは、と思っており、想像が膨らんでいるので、こちらも調査して、ラボなどで質問してこれたらと考えています。&lt;/p&gt;

&lt;h2&gt;帰国後の発表&lt;/h2&gt;

&lt;p&gt;こちらの記事で話題にしていることのいずれかを特に深掘りして、WWDC 終了後の 06/22 有楽町で開催される FiNC WWDC振り返り勉強会 で発表したいと思います。&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
