読者です 読者をやめる 読者になる 読者になる

へんてこの何か

なにがし

SlackのMessage Buttonsを試した

これの前の記事で試そうとしたけどやめたMessage Buttonsをやっぱり試してみた

https://i.gyazo.com/6cf4567f90b265c7c8bceb59ca5f1771.gif

使ったコードはこちら
github.com

基本は前の記事で書いた感じでできた
httpsでアクセスできるサーバーを用意すれば簡単にできた(botkit使ってるから)

Interactive Messages

前回からの差分で言うと、Slack AppのInteractive Messagesに貼り付けるhttpsなURLは、botkitを使ってる場合は /slack/receive になる
botkit/SlackBot.js at 7a2c61c142137a9b3e6bcf5e1dd8ac9e9b2c0ed6 · howdyai/botkit · GitHub

botkitでは/slack/receive に来たアクセスをinteractive_message_callbackとして扱うようになってるみたい
ここら辺でcallbackを実際に呼び出してる
botkit/SlackBot.js at 7a2c61c142137a9b3e6bcf5e1dd8ac9e9b2c0ed6 · howdyai/botkit · GitHub

感想

楽しい!!!!!!!!!!!

SlackのMessage Buttonsを試そうとした

SlackにMessage Buttonsなるものが追加されたので試そうとしました
試そうとしましたが、httpsなサーバーが必要とわかったのでそこでやめました
httpsなサーバー用意するのめんどくさすぎる…またVPS一台借りようかな

2016/6/23 22時半 追記

試しました
henteko07.hatenablog.com

Botの作り方の流れ

  1. ここからbot用のアプリ作る
  2. 作ったアプリのApp CredentialsのClient IDとClient Secretをメモる
  3. 作ったアプリのBot UsersからBot User追加する
  4. 作ったアプリのInteractive MessagesでInteractive MessagesをEnableにしてそこにbotサーバーのhttpsなURL貼る
  5. サンプル見ながらコード書いて走らせてみる
  6. https://MY_DOMAIN:port/login とかにアクセスしてSlackのTeamにアプリをインストールする
  7. やっとbotと会話できるので、Message Buttonsを試しまくる

bot

controller.on('interactive_message_callback', function(bot, message) {});

とかにユーザーがbuttonを押した時にcallbackとしてやってくるので、そこに処理書くとリアクションができるみたい(要検証)

button自体の表示はreplyのattachmentsのtypeにbuttonとか指定してあげると出せるので便利
アラート出して遊んでた

感想

botkitのconversationみたいに、サーバー立てなくてもbotにcallbackが来るものだと思っていたのだけど、そうじゃないっぽくてめんどくさかった
動作的にはslash commandと同じ扱いみたい
もしかしたら気づいてないだけで、サーバー立てなくてもbotにinteractive_message_callbackが来る方法があるのかもしれない
調べてみる

参考にしたの

ここら辺見ておけば大丈夫そう

Slack “Message Buttons” in Botkit — Why Not?
botkit/readme-slack.md at master · howdyai/botkit · GitHub
botkit/slackbutton_bot_interactivemsg.js at master · howdyai/botkit · GitHub
Making messages more interactive with buttons | Slack

kitematicでjenkins 2系を動かしてみる

前回とかでkitematicを読んで見てたけど、とりあえず最新verのkitematicを動かしてみたくなったので最近v2になったっぽいjenkinsを動かしてみた

jenkins 2.xをkitematicで起動する

kitematicを起動して検索窓に jenkins って入れるとオフィシャルのjenkins dockerが出てくるので選ぶ

f:id:henteko07:20160618200406p:plain

ここでそのままcreateを押すとlatestなverのjenkins(現状はv1.651.3)が立ち上がってしまうので、ここはtagを選択してインストールしたいverを選択する
とりあえず2.3くらいにしてみた(最新は2.9みたい changelog)

f:id:henteko07:20160618200652p:plain f:id:henteko07:20160618200657p:plain

これでcreateを押せば、指定のverのjenkinsが起動する

jenkins が立ち上がったら

jenkins 2系からかなり変わって、最初にjenkinsのダッシュボードにアクセスするとこんなのが出てくる

f:id:henteko07:20160618200835p:plain

なにやらパスワードをコピペしてこいと書かれているので、kitematicのこの部分のexecボタンを押して対象のdocker内で以下のコマンドを実行して出てきた文字列をコピペしてみた

f:id:henteko07:20160618200951p:plain

$ cat /var/jenkins_home/secrets/initialAdminPassword

そしたら次はプラグインのインストールしとく?みたいに聞かれるので、とりあえずインストール押しといた

f:id:henteko07:20160618201222p:plain f:id:henteko07:20160618201156p:plain

インストールが終わると普通にAdminユーザー作ってログインできた
お手軽感がすごい

f:id:henteko07:20160618201321p:plain f:id:henteko07:20160618201412p:plain

さいごに

kitematic経由でjenkins 2系をdockerで動かしてみた
すごい簡単すぎた
特にkitematicからexecボタン押したら即dockerコンテナ内でコマンド打てるの楽すぎるでしょ

jenkinsが2系をまだ触って見てないからちょっと触ってみる

kitematicを読んでる part2

前回からkitematicを読んでる
今回はkitematicがどうやってdockerとかVirtualBoxなどの依存するパッケージをインストールしているかを調べてみた

依存するパッケージのインストール方法

結論として、現状のkitematicではDocker Toolboxをユーザーの手でインストールしてもらっているみたい

https://github.com/docker/kitematic/blob/master/src/components/Setup.react.js#L49

すごい単純だった
実際に動かしてないから多分だけど

昔のkitematicではどうしていたか

現状では手動のインストールだけど、前のverとかだとどうしていたか気になったので調べてみたら、バイナリをコピーしたりしていた

https://github.com/docker/kitematic/blob/0ca35b5db1d614a0d0d00c98d060fdd4fc220ae5/src/utils/SetupUtil.js#L37

VirtualBoxインストーラーを叩くようにしているみたい

https://github.com/docker/kitematic/blob/0ca35b5db1d614a0d0d00c98d060fdd4fc220ae5/src/utils/SetupUtil.js#L54

割りと泥臭いけど、こんなんでいいかみたいな安心感ある

次はlocalにインストールされているdockerとかの確認をどうやってやっているかを詳しく読みたい

kitematicを読んでる

前回でとりあえずElectronのことが少しは分かったので、今回は他のElectron製のアプリのコード読んでみることにした

選んだのはdockerのGUIアプリのkitematic

github.com

選んだ理由としては、kitematicを使った時の最初の印象がすごいみたいな感じだったのと、単純にdockerとどう連携してるのかが気になったのでこれを読むことにした

読み方

とりあえず普段使ってるIntellij IDEAにimportして読んでる
今のところはビルドせずに単純に読むだけ、コードジャンプはしたいのでIntellij IDEAにお任せする、みたいな感じで読んでる

kitematicがlocalのdockerとどうやって連携しているか

まずlocalのdockerとどうやって連携しているのかが気になったので、そこから読み進めていってる

結論としては、kitematicはdockerのRemote APIを使って連携してるっぽい
https://github.com/docker/kitematic/blob/master/src/utils/DockerUtil.js

当初は普通に child_process.execSync とかでdockerコマンド叩いてるのかなとか妄想してたら、そうだRemote APIあるやんってなった
もっと詳しく見ると、どうやらnpmモジュールのdockerodeを使ってるみたい
便利すぎるこれ…

といいつつ、dockerのデーモンの生存確認として、child_process.execSync を使ってるみたいだった
https://github.com/docker/kitematic/blob/master/src/utils/DockerUtil.js#L120

さいごに

読むの楽しくなってきたからもう少し読んでみる
次はdockerやVirtualBoxなどの、localのインストールしておく必要がある依存しているもののインストールをどうやって行っているのかが知りたいのでそこら辺を見てみる

ElectronでAbemaTV用のViewer作ってる

Electron熱が再度来たので、練習のためにとりあえずAbemaTV専用アプリ作ってみてる

github.com

こんな感じで各Windowごとにアニメ見れたり、複数Window出せたり、番組表をすぐ出せたりする f:id:henteko07:20160609223217p:plain

新しいWindowとか番組表Windowは全部ショートカットキーで呼び出せるので、割と便利

作ってて思ったこと

Destructuring assignment キモい

const {app, BrowserWindow, Menu} = require('electron');

こんな感じで書いてるところあるんだけど、これすごくキモい
この気持ち悪さはJavaScriptを書き続ければ慣れるのだろうか

Menu.buildFromTemplateがおかしい

Menuを作るときに渡すテンプレートなんだけど、こんな風に書いてもEditというMenuは表示されない

const template = [
  {
    label: 'Edit',
    submenu: [
      {
        label: 'Quit',
        accelerator: 'Cmd+Q',
        click: function() { app.quit(); }
      }
    ]
  }
];

一番はじめのMenuは絶対にlabelが潰されて強制的にアプリ名のMenuになるみたい
気付かずにハマった

エンジニア向けサービスを支える技術 で発表することになりました

今月末にあるイベントで発表することになったのでそのご報告です

sideci.connpass.com

エンジニア向けサービスを支える技術 というイベントで発表することになりました!
まだタイトルとかは発表されてないけど、多分「開発者向けサービスの作り方」とかそういう感じになると思う

まだスライド1枚も作ってないけどまだまだ時間あるし大丈夫だよね
このイベントで、初めてはてな東京オフィス行くので楽しみ(正確には2回目だけど、まだその時は東京オフィスはちゃんとできてなかった)

もし参加する人居たらよろしくお願いします

おわりに

超久しぶりにブログ書いた気がする