MavericksからEl Capitanにアップグレードしようとしたらコケた

原因は未だによくわからない。 MBP (Late 2013)の環境を一度キレイにしたくて初期化をしました。

Mavericksに戻るので、App StoreからEl Capitanに更新しようとしたところ、 正しいパスワードを入力してから確認コードを入力しろ云々のエラーメッセージ。 Mavericksの初期セットアップ時には問題なく2ファクタ認証できていたので、 パスワードの誤りとか、確認コードが届かないとかではないのです。

ブラウザでhttps://appleid.apple.com/にログインしてApp用パスワードを作ってみるも変わらず。 結局、このページから2ファクタ認証をオフにしてアップグレードすることができましたが、 イマイチすっきりしません。。。

AWS Lambdaを使ってSlack Botを作った話

いつもの週末勉強会でSlackは使っていたので、自然とBotを作ろうという話になりました。 Botに何をさせるかは少し悩みましたが、いつも昼飯で悩むので、くまモンが昼飯をランダムで指定するBotにします。

実現する方法はいくつもあるようなので、AWS Summitで勉強したばかりのLambdaを使ってみました。

ざっくり手順

  • Lambda関数を準備
  • API GatewayでLambda関数を設定
  • SlackのOutgoing Webhooksを利用

Lambda関数を準備

AWSサービス一覧からLambdaを選択。 そして[Create a Lambda function]をクリック。

続いてSelect blueprintです。 Botを作るにはmicroservice-http-endpointを選択すると楽らしいのですが、 なかなか上手く行かなかったので、まずLambdaを理解するためにサンプルは使わないことに。

ここでは右下の[Skip]を選択。 f:id:suzusin:20160903183515p:plain

Configure triggersですが、ここでは[Next]で飛ばします。 f:id:suzusin:20160903190429p:plain

関数に名前をつけます。「myLunchBot」としました。言語はNode.jsです。 f:id:suzusin:20160903190643p:plain

zipでupする方法やS3を使う方法もあるようですが、ここではインラインで記述します。 usernameに"くまモン"、あとはランダムでテキストを返すようにしました。 f:id:suzusin:20160903191041p:plain

[Create new role from template(s)]を選択して新規ロールを作成します。 あとはそのまま。 f:id:suzusin:20160903191547p:plain

Reviewで確認して[Create function]をクリック。 関数が出来たら[Test]してみます。良い感じです。 f:id:suzusin:20160903192159p:plain

API GatewayでLambda関数を設定

今度はAPI Gatewayを作成します。 このサービスを利用することで、Lambdaを利用してAPIを公開することができるとのこと。

API名を入れて[APIの作成]を押します。 f:id:suzusin:20160903193337p:plain

続いてリソースの[アクション]から[メソッドの作成]を選択、POSTメソッドを作成します。 統合タイプはもちろんLambda関数を選択、リージョンを選択するとLambda 関数名を入力できます。 ここ、最初は候補が出てこないのですが、入力し始めると出てきますね。ちょっと不安になる… f:id:suzusin:20160903200015p:plain

[保存]を押して作成完了。

続いて、POST - メソッドの実行という画面になります。 ここでは、統合リクエストの設定からマッピングテンプレートを設定する必要があるようです。 下記を参考にさせて頂きました。

takayukii.me

[保存]します。 f:id:suzusin:20160903200930p:plain

戻ってテストしてみると…あれ、Unsupported Media Typeになってる。 f:id:suzusin:20160903201227p:plain

さっきの本文マッピングテンプレートのところ、 リクエスト本文のパススルーが「テンプレートが定義されていない場合 (推奨) 」になっていました。 作成時に「はい、この統合を保護します」を選択したからみたいです。 「リクエストの Content-Type ヘッダーに一致するテンプレートがない場合」を選択し直します。

もっかいテスト。うん、今度はOKそうです。 f:id:suzusin:20160903203708p:plain

[アクション]からAPIのデプロイを行います。 f:id:suzusin:20160903203946p:plain

そして呼出URLが表示されるので、これをメモっときます。

SlackのOutgoing Webhooksを利用

以下のURLからOutgoing Webhooksを探します。 https://{team}.slack.com/apps

[Add Configuration]をクリック。

今回はすべてのチャンネルを対象にするため「Any」を選択。 トリガーとするフレーズは「ごはん」。 f:id:suzusin:20160903204939p:plain

URLに先ほどメモった呼出URLをセット。 Customize Iconには、くまモン公式から取得した画像を利用させて頂きました。 https://kumamon-official.jp/application

[Save Settings]をクリックして準備完了! 早速試してみます。

できました! 「ごはん」に反応して、ランダムで反応します。 f:id:suzusin:20160903210318p:plain

現在は前方一致なので、次はすべてのポストを対象にして判断をLambda側にさせてみたいと思います。

開発合宿をしてみた件

定期的に集まっている同期との会話の折、
開発合宿なるものが流行とのこと。
なるほど、オススメの場所や過ごし方等々、調べるとたくさん出てきました。

今回選んだのはアクセスも良好な静岡県伊東市、山喜旅館さん。

www.ito-yamaki.jp

開発合宿所としてオススメされているところです。

さて当日、メンバーが集まりやすい横浜駅に午前10時頃に集合。
今思えば、このへん全く無計画でした。
踊り子号でわずか1時間半。あっという間に到着です。

そう、現地でお昼を食べてもチェックインの15時までは時間が余るという…
1時間1000円程度?で先に会議室を借りることもできるらしいので、
やる気とお財布次第では選択肢に入れたいところですね。

今回は3人と少ないこともあり、周辺を散策して15時を待ちました。

到着。レトロな外観です。

外部電源不要の最新電話機があると私たちの間で話題に。

 

さて本番。以下ざっくりタイムスケジュールです。

初日

15:00 アイスブレイク
15:30 アイデアソン
17:00 環境準備
18:00 実装

2日目

 9:00 ひたすら実装
21:00 プレゼン

 

最近の技術トピック等の雑談を経て、
今回の目標は“動くアプリを作る”となりました。

また、“実装時間中はIngressを起動しない”,“プレゼン終わるまではガルパンを上映しない”といった制約が課されました。
上下関係もない身内だけの場合は特にダレやすいので、最初が肝心ですね。

最初は紙でアイデア出し。
もっと色々準備してマインドマップも綺麗に書きたかった(反省)。

 

環境は以下のとおり。モックはWebアプリとしました。

リポジトリ:Bitbucket
テンプレートジェネレータ:yo
スクランナー:gulp
yoやgulpは詳しいメンバーが導入手引きしてくれたので、
Slackに上がったコマンドと説明を受けて楽をしました(^_^;

ここは要復習。。。

 

そして実装以降なんですが、みんな集中していたので、誰も写真を撮っていませんでした(笑)
そのことに気づいて撮った、成果発表中の一コマ。
社内報告などがある場合は、撮影役を決めた方が良いですね。

f:id:suzusin:20160604022021j:plain

そんなこんなであっという間の時間でしたが、
やはり非日常+タイムプレッシャーの効果はあったと思います。

ひとまず動くものが作れたのもGood!!
今後はメンバー宅持ち回りの週末勉強会でブラッシュアップしていきます(^-^)