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

元エンジニア・ちゃんみどの素人テックブログ

Web系無職がエンジニアに返り咲くための限りなく素人に近いテックブログ。 夢は旦那さんとslackで生活すること。

slackbot開発log。1日のはじめにGoogle Calendarの予定を通知したい!vol.3

slack node.js hubot プログラミング

 

chanmid0.hatenablog.jp

前回、Googleの接続サンプルをもとにしてGoogle Calendar APIの接続に成功しました。今日はサンプルではなく実際に書いてデータを取得したい!

サンプルを置いたscriptsフォルダに「calender.coffee」というファイルを作って、そこに書いていきます。scriptsフォルダに実行するスクリプトを書いておいておけば動くみたい。

 

やりたいことを文にしてみよう

どんなプログラム書いたらいいかを整理します。

  • トリガー:毎朝9:00になったら
  • やること:APIに今日の予定を聞く
  • 予定があったら:ミスタースラックボットが「今日は○○時に「△△」の予定があります」とslackに投稿する
  • 予定がなかったら:ミスタースラックボットが「今日は特に予定がありません」とslackに投稿する

文章にすると、やるべきことが明確になります!APIの取得さえうまくいけば、すんなり書けそうな気がする。

 

サンプルはそのまま持ってきただけだから動いたけど、一からデータ取得まで書けるきがしないので、サンプルを展開して実現することにしました。

quickstartjsにでスタースラックボット氏がしゃべる内容を作って、calender.coffeeにしゃべる内容を渡して、通知してもらう。こんなかんじで進めました!

 

データを取得する

「今日1日の予定を取得する」をもっとプログラム寄りに考えてみます。

  • cronを動かした時間~今日の23:59:59までの予定を取得する

まずはここを組みました。

quickstartjsには、APIに渡す値の中に起動した時点から10件先のデータを取ってくるようになっていたので、取得する予定のおしりを書かなきゃいけません。

今回APIに渡すデータはこちら。追加したのはtimeMaxのみです。解説入れていきます。

auth: auth,
calendarId: 'primary',
timeMin: (new Date()).toISOString(), //取得対象日時の始点。ここでは今日。
timeMax: (max).toISOString(), //取得対象日時の終点。maxは今日の23:59:59。省略可
maxResults: 10, //MAXで取得する件数
singleEvents: true,
orderBy: 'startTime' //取得順はカレンダーの開始時間順

 

maxは今日の23:59:59で、半日くらい悩んだ末、こんなかんじで書けた…

var max = new Date(new Date().setHours(23));
max = new Date(max.setMinutes(59));
max = new Date(max.setSeconds(59));

 取得できたので、出力です。

  • 今日は【時間】に「【予定名】」の予定が入っています。

サンプルには0件だった場合、取得失敗した場合などエラーパターンがもう書かれているので、おいおいいいかんじにしていくとして、成功パターンの文言を考える

var event = events[i];
var start = event.start.dateTime || event.start.date ;
startTime = start.slice(11,16);
console.log('今日は' + startTime + 'に「' + event.summary + '」の予定が入っています。');

startで取れる値が「2017-03-20T16:00:00+09:00」こんなかんじ。startTimeでこの「16:00」の時間部分をスライスしてる。event.summaryは予定タイトル。

今日は16:00に「会議」の予定が入っています。

こんなかんじで吐き出されます。

 

次やること

JSに慣れてないから、時間取得のところとか半日うなって考えてました。

でもローカル上で動くところまで確認出来たので、

次回はcronの設定を書いてミスタースラックボット氏がつぶやくまで出来たらいいなと!

 

JavaScript 第6版

JavaScript 第6版

 

 

slackbot開発log。1日のはじめにGoogle Calendarの予定を通知したい!vol.2

slack hubot node.js

 

chanmid0.hatenablog.jp

 前回、本当はミスタースラックボット氏から通知を行いたいというところ、

普通にslackとGoogle Calendarを連携してしまったので

ミスタースラックボット氏の役目を与える事ができませんでした…

 

なので、この記事はミスタースラックボット氏が、

朝、執事のように予定を通知してくれるというゴールに向かって、

がんばろうという回にしたいっ

 

今回のラインナップ。

  • Google Calender APIの登録から
  • Node.jsのAPI接続のモジュールを使って接続
  • 途中cronのモジュール入れるのに苦労してる

 

とにもかくにもGoogle Calendar APIを使う準備

まずはAPIキーを取得しましょう。これがなきゃ始まらん!

参考にさせていただきました:Google API v3 を利用しよう!〜APIキーの取得方法〜

 

ここからAPIを取得しにいきます。

console.developers.google.com

 

Googleにログインした状態でURLを見ると、こんなかんじ。

f:id:chanmid0:20170318195059p:plain

右上からカレンダーを選びます。

f:id:chanmid0:20170318195248p:plain

プロジェクトの作成が必要とのことで、右上の「プロジェクトを作成」ボタンから作ると、

同じ画面に戻ってくるので「有効にする」リンクを押します。

f:id:chanmid0:20170318195434p:plain

次は認証情報を作成!右上のボタンを押し、作ります。

f:id:chanmid0:20170318200256p:plain

 

入力はこんなかんじ。合ってるかわからないが…

f:id:chanmid0:20170318200455p:plain

次もだいぶわからないがこんなかんじで。

 

f:id:chanmid0:20170318200547p:plain

そうするとjsonファイルがDLされてきました。

中身を見てみます。

f:id:chanmid0:20170318200659p:plain

キー情報がいろいろ詰まってますね。

 

実装の前にcronの設定をしちゃっとく

qiita.com

以降こちらのサイトを参考にしました。わかりやすかったです!

 

朝決まった時間に通知が欲しいので、cronの設定をします。

installひとつめ。

npm install cron --save

これでcronができます。そして問題はもうひとつ。

npm install time --save

これで詰まりました。原因は複数ありました。

  • pythonでエラー:pthon2.X系が必要でした。DLしてnpm config set pythonまで至れり尽くせりな対応をしてあげました。
  • Visual Basic++が入ってない:これもDLしてあげます。
  • node-gyp自体のバグ:まじかよ感半端ないけど、ユーザー名に日本語使ってるとエンコードうまくいかないかんじのエラーが出る。node.jsフォルダを遡ってこのファイルを書き換える。フォルダの場所は、「nodejs\node_modules\npm\node_modules\node-gyp\gyp\pylib\gyp\easy_xml.py」。書き方は下記参考にしました。(超絶助かりました)

    create-something.hatenadiary.jp

それでもバグは全部取りきれなくて、完全に詰みました……

fatalエラーでインクルードファイル読めてないよ、と言われているのはわかったけど、そのファイルがどこにも存在しなくて追えなくなっちまいました。

もっとガツガツ、トライアンドエラーしたいところだけど、絶対条件なモジュールじゃなさそうなので、先に進んでみます。

 

戻ってGoogle Capender APIのつなぎこみじゃー!

Javaで使ってたことあるけどNode.jsで書くのは初めてです。

というわけで、準備しましょう!slackbotのフォルダの「script」フォルダ下にファイルを作ります。このフォルダにスクリプトを書くことで動くんですねー。

npm install googleapis --save

npm install google-auth-library --save

まずはこれでGoogleAPI使うためのモジュールをインストールします。

 

node.jsとGoogle Calendar APIの連携方法は公式を見ました!

Node.js Quickstart  |  Google Calendar API  |  Google Developers

 

クライアントIDを作るためにOAuth同意画面に同意します。

f:id:chanmid0:20170319212419p:plain

認証情報からクライアントIDを作ります。

f:id:chanmid0:20170319212643p:plain

次のページへ。どれに当てはまるのかな?って感じです…その他…?

 

f:id:chanmid0:20170319212730p:plain

進んでいくとクライアントIDが発行されて、一覧画面に戻ります。

戻ったら、JSONデータをDLしておきます。

f:id:chanmid0:20170319215652p:plain

DLすると、クライアントID名でjsonファイルが作られるので、命名を「client_secret.json」とし、slackbotディレクトリ>scriptsの中に入れます

次に、サンプルファイルを引っ張って動作確認をします。「quickstart.js」という名前を付けて、参考URLのソースをコピペ。slackbotディレクトリ>scriptsの中に入れます。

jsonファイルとquickstart.jsが同じ階層に入っていることを確認し、node quickstart.jsして動かします。

そうすると、「Authorize this app by visiting this url:」と表示が出て、URLが発行されます。飛ぶとアクセス許可の画面へ飛ぶので許可していきます。

f:id:chanmid0:20170319220852p:plain

許可すると、コードが発行されるので、コピーしてコマンドの「Enter the code from that page here:」のところにに貼ってください。

f:id:chanmid0:20170319220954p:plain

そうすると、カレンダーの内容が返ってきました!

f:id:chanmid0:20170319221215p:plain

わーい!!やっと光が見えてきたー!!

 

次やること

ここまで来たら、あとは作り込むだけ!…な気がする。

次は実際にプログラム書き始めたいと思います!

 

まだNode.jsの書き方とかhubotの書き方に慣れない。。

ちょっとずつがんばろう。

あとエラーの解決力もな!

 

最新WebサービスAPIエクスプロ-ラ ~Amazon、はてな、Google、Yahoo! 4大Webサービス完全攻略

最新WebサービスAPIエクスプロ-ラ ~Amazon、はてな、Google、Yahoo! 4大Webサービス完全攻略

 

 

 

 

slackbot開発log。1日のはじめにGoogle Calendarの予定を通知したい!vol.1

slack

chanmid0.hatenablog.jp

 

slackbotでなに作るかを決めたのでさっそくやります!!

 

1日のはじめにGoogle Calendarの予定を通知したい!

まずはここからやります!

細かい要件はこんなのを予定しています。

  • Google Calendarの予定を、slack経由で通知する
  • hubotで作ったbotが通知してくれる
  • 通知は1日のはじまり(9:00くらい?)に行う
  • 予定がなくても予定がないことを通知する

とりあえずこれを満たすslackbotさんを作ります。

 

ちなみにslackbotはすでに待機中。

ミスタースラックボット氏がきっと神対応をしてくれるはず。

f:id:chanmid0:20170318164156p:plain

デフォルトのhubot投入するまでは花嫁修業と銘打ってカテゴリにしてます!

chanmid0.hatenablog.jp

 

まずはGoogle Calendarとslackを連携!

slackから、App連携をしてGoogle Calendarを読み込みます。

App Directory | Slack

 

f:id:chanmid0:20170318165516p:plain

 

Googleと検索するとGoogle Calendarも出てきます!

 

f:id:chanmid0:20170318165627p:plain

クリックすると確認画面が表示されます。

ボタンを押すと、Googleのアカウント入力とアクセス許可を求められます。

そうすると設定をする画面へ。

f:id:chanmid0:20170318170039p:plain

カレンダー連携する部分の選択が左。

アカウント全てのカレンダーに対してなので、自分のアドレスを選びました。

右は連携を行うアカウントやチャンネルを選択します。

あとでネーミングはどうにかしますが、ミスタースラックボット氏がいるチャンネルを選択します。

 

次はこちら。

f:id:chanmid0:20170318170730p:plain

イベントのリマインド設定。

  • イベントのどれくらい前にリマインドするか
  • 終日設定の予定をいつリマインドするか

今はどちらも必要としてないのでチェックはずしました。

 

カレンダーの更新などがあったときの設定

f:id:chanmid0:20170318170840p:plain

  • イベントが作られたときか招待されたとき
  • タイトル、時間、場所が更新されたとき
  • イベントがキャンセルか削除になったとき

これも通知の必要ないのでチェック外しました。

 

最後の設定!カレンダーの通知

f:id:chanmid0:20170318171112p:plain

  • 毎日9:00にその日の予定概要を通知する
  • 1週間の予定概要を通知する

毎日9:00の通知が必要なので、上にチェックをします。

 

最後にボタンを押してチャンネルを確認すると連携したよと投稿が。

f:id:chanmid0:20170318173525p:plain

 

でもな、本当にやりたいことはそうじゃないんだよおお

思った。

通知は、ミスタースラックボット氏はやってくれない、と。

グーグルカレンダーさんがやってくれるんだと。

 

…間違えてるやん!

 

多分、hubotのミスタースラックボット氏が教えてくれるようにするには、

Google CalendarAPIをhubotに仕込まなきゃいけないんじゃないか?

 

次回やること

失敗は失敗で学んだことがあったからよしとしよう。。

次はGoogle Calendar APIの取得から実装あたりまでやりたいです! 

slackbot開発でやりたいこと具体的にしました!

プログラミング slack

 

slackbotに一言喋らせたところで道を見失っていたんですが、やることを決めました!

これがどれくらいの難易度なのか、各サービスと連携取れれば済んじゃう話なのかわからないんですけど、とりあえずやってみます!

 

slackbotには「執事」になってもらうという大きいゴールを設けて、いろんなことをslackbotの方からわたしに投げかけてもらいます。

 

多分、難易度は上のほうが優しい。

下にいくほどAPIからデータとってきてごにょごにょがややこしそう。そもそもmisfitはデータ提供しているのかも不明。。

1日のはじめにGoogle Calendarの予定を通知したい

よく読むブログの更新があったら通知したい

misfit rayのデータを1日の終わりに通知したい

 

こういうのはやってみなきゃ始まらないから。

まずは手を動かしてみます!

 

勤務1ヶ月で発狂しそうになった超有名IT企業で派遣してたときの話

仕事のこと

今から半年ほど前のことだった…

エンジニア→開発ディレクターとバリキャリ街道を突っ走っていたんだが、

あまりに激務で心身ともに疲れ果ててしまったわたしは、

一度その最前線から撤退して派遣で仕事をしていたんだ。

日本のトップ企業である某IT企業に派遣で行くことになった

で、たまたま求人がマッチしてたのが某IT企業。

ネットでもよくいいニュースが流れるような、ホワイト企業

だからすごい楽しみにしてた。

社屋もきれいだし、お昼ごはんもおしゃれで、オフィスも居心地がいいし、

派遣にディスプレイ2つを分けてくれる。

SIer時代は、いつのだよってくらい古いThinkPadしか使ったことなかったから

デュアルモニターなんて贅沢なもんを与えてくれるのが異空間の出来事のようだった。

 

とにかく、すべてが親切で居心地がいいものだと信じ切っていた。

そこから30日でギブアップ宣言するというのに…

入って数日でやることがない。

仕事が始まって、最初の数日でPCのセットアップとかをやった。

それから、仕事に入るのかと思ったけど、

まだ仕様が固まってないから、何も出来ることはないと言われた。

え?入社数日で用無し?…とまでは思わなかったけど、

資料のデータを見ておくようにと指示をもらって見ていた。

でも、仕様が決まってないからそんなに見ておくところがない。

30分で頭に入るくらいの量しか、資料にはなかった。

 

問題はここから。

それから、資料だいたい読めましたと報告しても、

まだやることないから。もっと深く読んどいて。」とのこと。

もう読むとこないってーの!!!これ以上どうしろというんだ…

でも、言ってもやることないから、の一点張り。

この状態が1週間くらい続きました。

会社来てもやること実質0!!!

無駄にネットサーフィンするのも監視されてるし出来なくて、

しょうがないから社内報とか1日見て8時間過ごしました

定時に1秒狂わず席を立つ生活です。

 

やっと仕事が来ても、30分で終わるようなやつしかくれない

もうさすがに疲れてきてました。仕事に追われるほうがまだましです。

そんなとき、やっと仕事が舞い込んできました。

つ、ついに!!目を輝かせて指示をもらいました。

開発ディレクター的なポジションだったので、ワイヤーの修正の仕事。

社員が仕様を会議とかでまとめたら、それをワイヤーに落とし込む。

指示は、タスク管理ツールで連絡がきます。

ワイヤーを修正したら、そのツールで報告します。

 

いざ指示をもらって蓋を開けてみたら、どうみても30分あれば事足りる内容

ま、また修正終わったら仕事くれるっしょ!

と思ってちょっぱやで仕上げて連絡しても、

社員は忙しくてまったく連絡がその日に来ない。

その日は残りの7.5時間を社内報を眺めて終えました

 

今度はこの30分タスクの繰り返しの日々が続きます。

何度か社員に言っても、「いやもう直すところないし」の一点張り。

派遣元の営業に話をしても、「仕事ないなら幸せじゃないですか」とか、

神経を逆なでされて相手にされません。

 

仕事、ないなら自分で作るしかないなと思って、

無駄にワイヤーを好き勝手レイヤー分けしたりして時間を潰したりして、

なんとか8時間、自分の理性を保とうと努めてました。

チームの人とのコミュニケーションはどうなってたの?

話を変わってこの話。

チームの人ともっとコミュニケーション取れる体制だったら、

もっとやりようがあったと思います。

でも、チームのメンバーの名前すらしらなかったんです。

この会社、チームの人たちの席がバラバラで、MTG時にしか集まらないんです。

しかも、一度顔合わせしたくらいでMTGに呼ばれないし、

話かけられるのは窓口の社員2人だけの状態。

 

同じ派遣元の人がいて声かけてもらってたんですが、

仕事かけもちしてたりで、あまり話す機会もありませんでした。

 

なので、仕事場で一言も発さないなんてザラでした

一人暮らししてたんで、まじで1週間会話0です。

徐々に終わりのカウントダウンが始まる…

話戻ります。

 

そんな感じで、やることがない7.5時間を潰す毎日を過ごしていたころ、

胃の調子がどんどん悪くなっていったんです

元々そういう体質だったから胃薬飲んで会社行ってたけど、

もう何も食べれないくらいまでストレスでやられちゃってました。

お昼も全然食べれなくて、気持ち悪くて早退したりし始めました。

 

うん、これはヤバイな!

自覚はしてたけど、この生活は続けられないと思い始めました。

と思ったら、今度は電車でパニック発作寸前のものを起こしてしまって、

いよいよ会社に行くことを体が拒否し始めちゃいました。

 

それから、胃の不調も悪化して体力消耗。

パニック障害と診断されてしまって会社に行くことが出来なくなってしまいました。

 

職場でやることないのってしんどいわ

それから東京での一人暮らしを辞めて実家に戻って、

家で仕事をしているわけですが、

仕事場でひまを持て余すってかなりしんどい状況だと思うんですよね。

忙しくするより避けたい状況ですね。

ほんとあの7.5時間は悪夢でしたもん。

7.5時間も、自由はきかない中で何をしろっつーの!

 

某IT企業はいい企業だと思う気持ちは変わりませんよ。

社員だったら、いい職場だと思います。

でも、派遣っていう立場だと違いますよね。

友達のうちにあがったときみたいな、気持ちが解放しきれない感があるというか。

 

ちなみに、この企業の社員を狙う派遣女子ってまじでいるらしいですよ。

玉の輿に乗りたいんだそうで。うひょー!

 

そんなかんじです~

 

独自ドメインのWordPressを捨ててはてなブログにやってきた

自分のこと

こんにちは。

過去記事はすべてWordPressで書いたものですが、全部はてなに移行しました。

だって、さみしいんだもん!

いい大人がみっともないですが…でも…WordPressって反応皆無でさみしいんだもん。SNSでのつながりだってそんなになくて、検索流入だって1週間に1件とかなんだもん。勢いでブログ作って、好きで記事書いてた最初の1週間が過ぎて、モチベーション落ち始めるときに反応皆無だと、ちょっと厳しいじゃん。WordPress独自ドメイン持ってたほうが、長い目で見たときいいってよく言うけど、長い目で見れる日が来る気がしなかったんだもん。ただそれだけですよ!それだけではてなに来たんですよ!

 

とにもかくにも、わたしのことよろしくどうぞ。

元エンジニアのすっかりプログラム書けなくなったわたしのこと、どうぞよろしくお願いします。詳しいことはここ。ついったーも右のプロフィールからフォローしてね。

chanmid0.hatenablog.jp

 

400字くらいしか書いてないけどこれで終わります。

花嫁修業という名のslackbot作り。デフォルトのhubotが動かない!編

Git heroku hubot slack 花嫁修業

前回、hubotのデプロイまで行ったけど、動きませんでした。

chanmid0.hatenablog.jp

今日はそれを解決したいと思います。

ローカルのhubotを動かそう

まずはこれですよね。

で、いろいろ探し回ってたら、こういう書き方をするみたい。

./bin/hubot -a shell -n slackbot

そうすると。

エラー…でも負けない。スルー。

ぴんぽーーーーん!!やったー!!!

どうやら、ローカルでは大丈夫みたいです。

slackとhubotの連携がうまくいってないのか

ローカルでは動く、slack上では動かない。

そこで参考にしたのがこちら。

qiita.com

もし、前回ジェネレーターで campfire のままにしていた場合などは、別途インストールする必要があります。

確認したら、確かにcampfire。全部デフォルトで設定してたからかな。

なのでインストール

npm install –save hubot-slack

もう一度cat Procfileすると書き換わってます。

GitへPush

ただの上書きです。

名前がunknownなのが気になるけど…

いくつかが「second commit」としてGitにあがりました。

そこで気付いた。

違う。herokuへ何もあげてない!!コマンド叩き直します。

こんなかんじでログが続きます。

「heroku open」でAppへアクセスすると、下記が書いてあります。

「きゃんのっと」言われてるけど大丈夫かしら?

もう一度mr_slackbotに話しかける。

きたー!!!

いいね!

次やること

やっとhubotがslack上で動きました!

なので、次は中身の解析というか、

簡単にいじってみながら学んでいきたいと思います!