ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

ChatOps関連のメモ

最近SlackのCTOが日本で取材を受けたりして下記のようなコメントをして話題になりましたね。 f:id:ikeike443:20171217163031p:plain www.businessinsider.jp

僕もメールはゴキブリみたいなもんだってのには同意なんだけど、それとは全然関係なく、Slackの存在感が増すにつれ最近のChatOps事情が気になったのでちょっと調べてみた。これはその備忘。

ChatOps

ChatOpsってのは多分、一応GitHubが最初にいい出したもののような気がする、わからないけど。ChatOpsの象徴であるHubotは2011年にOSSになってます。

hubot.github.com

チャットボットを使って便利に楽しく仕事しようぜ、っていうコンセプトですね。日本でも世界中でもHubotの上にいろんなアプリが作られたと思う。 でもチャットボットって今やHubotだけじゃなくいろんなやり方で作れるのね。

Slack Bot

Slackそれ自体に、Botフレームワークがあります。Events APIってのをリッスンして、いろいろおもしろいことをやれるようになってる。 例えば、チャンネル上の誰かの発言をひたすらオウム返しするボットなら、Slackの設定画面でリスナーのURLをまず下記ページを見て設定した上で、 https://api.slack.com/events-api#subscriptions

下記のようにEvents APIをリッスンするサーバを書けばいい。(Sinatra使ってます)

post '/listen_to' do
  params = JSON.parse request.body.read
  return params['challenge'] if params.has_key?('challenge') #Botの最初のセットアップ時に必要なレスポンス
  return if params['event'].has_key?('bot_id') #自分自身にオウム返しをしないようにチェックしてる
  return if params['event']['text'].start_with?("/") #スラッシュコマンドを除外

  uri = URI.parse("https://slack.com/api/chat.postMessage")
  request = Net::HTTP::Post.new(uri)
  request.content_type = "application/json"
  request.add_field("Authorization", "Bearer <TOKEN>") 
  request.body = JSON.dump({
    "channel" => params['event']['channel'],
    "text" => params['event']['text']
  })

  req_options = {
    use_ssl: uri.scheme == "https",
  }

  response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
    http.request(request)
  end
end

適当なコードなのは勘弁してほしいけど、EventをリッスンしてPOSTメッセージをSlackから受け取ったら、その内容をそのままSlackのchat.postMessageというAPIを使って返すだけ。かんたん。 今までずっとHubotを通してSlackボットを作ってたので、Slack自体にBotフレームワークがあることに気づいたのは最近です。

ちなみに備忘だけど、Hubotを使ってSlackと連携する際には下記のフレームワークを使うと楽です。

slackapi.github.io

DialogFlow

チャットボットを作ろうと思ったら、やっぱり近頃流行りの人工知能的なアレをやりたいよね。昔懐かしの人工無能でもいいんだけど、ともあれ。 Googleapi.aiを買収して、カンバンのつけかえをしたDialogFlowを使うのがやはりストレートでしょうか。これ系で今Googleに勝てるプラットフォームはないと思う‥ちなみに5月にGoogleI/Oに行ったときにもこれをいじって遊んだ。日本語にも一応対応しているのがポイント高い。

GUIでポチポチ会話のパターンみたいなのを入れておくと、いい感じに喋ってくれます。バックエンドで機械学習してくれるみたいで、だんだん賢くなるのではないかと期待させる。機械学習と言われるとなんでもできるように感じさせるマジック!

dialogflow.com

実はDialogFlowにSlack連携があるの知ってました?

DialogFlow -> Slack

DialogFlowで作ったIntentをSlackに連携するボタンがあって、それを押してSlack側で認証してあげると、Slack内でDialogFlowがボットとして会話の相手をしてくれます。 f:id:ikeike443:20171217165436p:plain

先程のオウム返しSlackボット(Slack API Tester)と同じ部屋で会話してやるとこんな感じになる。 f:id:ikeike443:20171217165811p:plain DialogFlowBotさん、Slackボットのことは無視するのね。

HubotにもDialogFlowとのIntegrationがあるといいね。

DialogFlow -> Google Home

DialogFlowで作ったIntentはGoogle HomeのActionとして使える。さっき見せたDialogFlowのIntegration画面にGoogle Assistantというのがあるから、そのボタンを押して支持に従うと、Google Homeを通してDialogFlowと会話ができる。 Google HomeのテストもWebで簡単にできるように作られてていい感じ。 f:id:ikeike443:20171217170428p:plain

Probot

ところでGitHubは最近、Hubotの延長となるOSSプロジェクトを始めていて、GitHub.comにGitHub Appsとしてインストールして、BotにIssueの掃除をさせたり、何かアラートを出させたり、ってことができるようにしている。 Probotっていうんだけど、意外と日本では知られてないので、一応ここで言及しておきます。

probot.github.io

GitHub Enterpriseでもいずれ使えるようにするんじゃないかなーと思う。 ProbotもDialogFlowやGoogleHomeと連携できると楽しいよね。

結論

は特にないんだけど、ただのメモだから。 まあ思ったのは、HubotやProbotとDialogFlowのインテグレーションをイケてる感じに作れると、Google Homeを通してデプロイを指示したり、GitHubにたまってるIssueを整理したり、今週のTODOを確認したり、できそう。Pull Request上でProbotに何か指摘されて、そのコンテキストをSlackに持ち込んでBotと会話して問題解決するとか、その結果をGoogle Homeを通して音声で受け取るとか、色々やれそうだよね。

どのデバイス、プラットフォームから話しかけても、適切なコンテキストを適切に引き回して、仕事をサポートしてくれるといいなあ。Google Homeに話しかけて仕事をスタートして、その同じコンテキストを前提にしてSlackで会話し、GitHub Issue上で会話し、みたいにできると楽だなあ。

最近書いたGitHubの記事

3月と7月にそれぞれ書きました。

thinkit.co.jp

thinkit.co.jp

お役に立てば幸いです。

今後も色々書いていくので、こんな事知りたい、みたいなリクエストが有ればぜひ。

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

近況

最近ブログを書いていないので近況でも。

2月は所属しているチームのキックオフミーティングがあった。

サンディエゴです。ホテルにOctocatの投影。バットマンみたい。こういうところこだわるの社風だなあと思う。

2016年のTop Solutions Engineerとして表彰されました。なにげに社会に出てから所属している会社に表彰されたのははじめてです。

同僚と。仲のいいチームです。

2月、シンガポールで開催されたDevSecConというイベントにブースを出した。

現地のパートナーと、シドニー在住のうちの営業と4人でポーズ。

定番のところで記念撮影。シンガポールは実質滞在期間40時間くらいの弾丸出張でした。

4月、Le Wagonで講演

f:id:ikeike443:20170530151512j:plain プログラミングブートキャンプを行っているフランスのスタートアップ、Le Wagonが東京でサービスをやるということで、そこで講演するよう依頼をもらった。その時の様子。 なにげにこれがはじめての英語講演…

同じく4月、DevOpsDays Tokyoにブース。

名古屋に住む同僚と。

割と盛り上がってたと思います。吉羽さんが関わっていると聞いたので会社に無理言ってスポンサーしてもらいました。

自宅オフィスにスタンディングデスクを買った

やすかった。

たしかこの後に韓国に滞在24時間の弾丸出張もしたはずなんだけど、写真がない…

5月、AWS Summit Delhiにブース。

インドでの人気はすごいです。

現地のパートナーと、東京在住のうちの営業(変顔してるほう)。

なんていう遺跡だったか忘れたけど、記念撮影した。この日はたしか42度くらいあって無茶苦茶に暑かった。持ってた水がお湯になった。

同じく5月、Google I/Oへ。

会社のConference benefitを使ってGoogle I/Oへ。AIあつい。

現地(Mountain View)で、"Building Tools with GitHub"の原著者のChrisと。実はChrisとは初対面ではなく、今まで2回、いずれもGitHub Universeで会っている間柄。今回予定が合うので会ってみた。

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

たまたま時間があったので、うちがお客様を集めて行っているGitHub Enterprise Summit San Joseにお邪魔。お客様同士で開発フローの改善などを話し合っていていい雰囲気だった。東京、名古屋、京都、大阪でもやりたいなあ。

Google I/O

写真多めで。Google I/O、楽しかった。

Google Homeもらった。

5月、De:Codeにブース。

日本マイクロソフトさんのDe:Codeに出展。

という近況でした。

こんな風に並べると海外にずっといるみたいに見えるけど、実際は東京でお客さんとお話している割合のほうが長いです。

オライリージャパンさんからGitHubツールビルディングが出ます

つい先程完成した本が届きました。

この本はGitHub APIとWebhooksを使って、様々な言語・プラットフォーム上でGitHubと協調して動くツールを作ってみよう、という意欲的な本です。翻訳は笹井さんが、私は監訳者と言うかたちで関わらせていただきました。中で言及される言語やテクノロジーは実にバラエティに富んでいて、検証が大変だったのを覚えています。

既に2年ほど前の本の翻訳であるため、ものによっては文中のコードはそのまま動かないケースがありますが、APIを総覧して、いろんなツールを作るヒントになる本という意味で有用かと思います。作者のGitHubリポジトリにサンプルコードがありますので、それを見ながら読むのがいいでしょう。ちなみに動かない部分があるとしてもそれはGitHub APIの部分ではなく、依存しているライブラリだったりの問題ですのでご安心を。GitHub API自体は後方互換性を非常に気にして開発しており、2年たった今でもすべて元の期待する挙動どおりの動きをします。

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

付録でも言及しましたが、GitHubは昨年から開発者向けにEarly Accessプログラムを実施しています。また、最近GitHub Developerプログラムそのものも改訂があったばかりです。残念ながら、日本から参加者はそこまで多くないのが現状ですが、これを機にぜひ積極的にご参加いただければ幸いです。下記のようにフォーラムもありますよ。

platform.github.community

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

GitHubツールビルディング ―GitHub APIを活用したワークフローの拡張とカスタマイズ

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

Git-it と Patchwork

先日、下記の記事がバズりました。(Git-itを紹介くださりありがとうございます!) www.softantenna.com

この記事がバズる中で書かれたコメントを見ていると、こんなツール使わなくても仕事で使えば覚えられるのでは、といったニュアンスのコメントが散見されました。もしかしたら Git-it の位置づけと、それを補完するイベントの存在が知られてないのかなと思い、ちょっとブログに書いておこうと思った次第です。

Git-it ってなに?

Git-it は GitHubber の Jessica Lord が作った初心者向けの Git 練習アプリです*1。大元をたどると node.js コミュニティの手による Workshop アプリに端を発するみたいですが。これは Git に触ったことがない方向けの練習ツールで、特に、エンジニアじゃない方に向けてデザインされています。デザイナーであったり、学生さんだったり、です。

そしてこのアプリは特に Patchwork というイベントで利用するためにデザインされています。

Patchwork って??

Patchwork というのは GitHub が主催しているコミュニティイベントで、Git/GitHub を使ってみたいすべての人にむけてオープンになっています。参加資格は Git 初心者であること、だけで、職業は問うていません。イベントではオープンソースとは何か、誰でも開発に参加できること、などを理解していただいた後、Git-it を使って実際に Git と GitHub およびバージョン管理という概念や、他人とのコラボレーションの仕方について学んでいただくようになっています。

イベントの中では、OSS プログラマーの人に来ていただいてご自身がどういうきっかけで OSS に関わるようになったかを喋ってもらったり、学生さんが OSS に関わるようになった経緯をトークしてもらったり、行政の方にオープンデータの取り組みについて語ってもらったりしています。

ソフトウェア開発やオープンデータへの貢献を通じて、誰でも社会をよくしたり、関わっているソフトウェアをよくしたりすることができるんだ、ということを知っていただくいい機会になっています。

patchwork.github.io

Patchwork にはプログラマーの方であってももちろん参加いただいて構わないのですが、過去に多く参加いただいているのはデザイナーさんや営業や企画の方、そして学生の方や主婦の方です。ソフトウェアに関わることが多くなって Git について学びたいと思っている方や、自分の手でアプリを作れるようになりたいと思って参加される方や、オープンデータやオープンソースに参加してみたいと思っている方が多く参加してくださっています。

2015年にも日本だけで複数回このイベントを行っています。

東京

f:id:ikeike443:20160424102732j:plain

f:id:ikeike443:20150903222741j:plain

この2つの写真は昨夏に東京で開催した時の様子です。

github.com

このようにブログで告知したりしています。

umi-uyura.hatenablog.com

この時に参加された方のブログです。

神戸

f:id:ikeike443:20151214214354j:plain

これは12月に神戸で開催した時の写真です。

patchwork-kobe.peatix.com

こんな風にブログではないところで告知することもあります。

japan.cnet.com qiita.com

神戸に参加された方のブログや、ニュース記事です。

京都

f:id:ikeike443:20151216192942j:plain

12月には京都でも開催しました。

patchwork.doorkeeper.jp

京都の時は Doorkeeper で告知しました。

ふたたび東京

f:id:ikeike443:20151219110510j:plain

12月には再度東京でも開催しました。

まとめ

ということで、この Git-it というアプリの位置づけと、関係する Patchwork というイベントについてご紹介しました。GitHub がどうしてこんなイベントをやっているのかについては、次の記事も参考にしてください。

thinkit.co.jp

Git-it は学習には良いツールなので、ぜひ皆さんも使ってみてください。そしてよかったら次回の Patchwork にメンターとして参加いただけると幸いです。

*1:ちなみに日本語化は私がやっています。

デモやプレゼンをするときに使っているツール

僕はいまソリューションエンジニアというロールで、お客さん先で GitHub や DevOps(バズワード)的なツールのデモをやったり、セミナーやカンファレンスでトークすることが多いのですが、デモやプレゼンをするのに自分が使っているツールをまとめておくと誰かがもっといいものを教えてくれるかもしれないと思い、ここに書いておくことにしました。

別のアカウントを作る

まず最初にやってるのがこれで、Mac上に、普段使いとは別のデモ用アカウントというのを作っています。デモやプレゼン中にFacebookのメッセージが飛んできたり、Slack上のふざけた投稿とかが出てきて場を凍らせないようにするためですw

共有したいファイル(VMのイメージとか、プレゼン資料とか)は /Users/Shared/ 以下に置いています。ものによっては Dropbox を使って共有しているものもあるけど。Dropbox を使う場合は、デモ用アカウントのほうでは一部のフォルダだけを同期対象にしておくことで、同期でふんづまってしぬことを避けています。

デモ用アカウントの方は壁紙とかも気を使って、明るいものを使っています。具体的には下記の壁紙を使っています。

https://enterprise.github.com/assets/aws/jetpack-octocat-clouds-11760c12e5f33fb4ecec2ce20b894461.jpg

Mousepose

Mousepose というツールがあって、これを使うとマウスポインタの周りに人の注目が集まるようなエフェクトを掛けたりとか、マウスクリックを可視化したり、キーボード入力中にキーボードを入力していることを視覚的に分からせたりすることができます。 www.boinx.com

これはすごく便利で、これなしではデモンストレーションができないと言ってもいいくらいです。どんなものかは下記で動画が見られるので参考にしてください。

https://www.boinx.com/mousepose/inaction/

Keeping You Awake

これは Mac が自動的にスリープに入ってしまうのを防ぐツールです。

普段は10分位でスリープに入るようにしているのですが、プレゼンやデモの最中には、画面を静止した状態で10分以上議論したりすることも多いですよね。そういう時に不意にスリープに入らないようにできます。

github.com

Divvy

Divvy はウィンドウを素早く任意のサイズにリサイズできるツールです。ショートカットの割当もできるので、素早くウィンドウを2分割、3分割、4分割表示にするみたいな芸当が可能になります。

ブラウザを2つ同時に開いて比較してみせる用途などに使えます。似た機能をもつソフトは他にもありますが、これが一番使いやすいんじゃないかなあと思います。El Capitan の標準機能では満足できない方におすすめ。

mizage.com

Monosnap

自分はプレゼンで動画を多用するのですが、Monosnapは動画を簡単に作るのにも使えます。キャプションなども付加できるし、アニメGifにもできます。スクリーンショットを撮るにも便利です。

www.monosnap.com


こんなところですかね。ほとんど有償ですが、できることから考えるとどれもとてもお買い得です。

第一回 GitHub オフィスアワーをやります

eventdots.jp

渋谷のdotsさんで、4月13日に、こんなイベントをやります。イベントと言ってもトークやLTがあるわけではなく、GitHubberが机に座っているので気軽に来てもらって、聞きたいことを何でも聞いてもらう、という趣旨のものです。一応今回は予約制にしているので、リンク先から申し込みしてください。

内容は何でもよくて、普段僕らがどういうふうに働いているのか、みたいな話でも、企業に導入するにはどうしたらいいのか、とかでもいいです。CIやCDの実施について相談があれば、それもお答えできると思います。

本当になんでもいいので、気軽に来てくれると嬉しいです。当日は日本から5,6人、オーストラリアから2人ほど参加する予定です!