If today were the last day of my life

やりたいことをがんばるブログ

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側にさせてみたいと思います。

技術力が付かないことを役員に訴えかけた話

技術力のある会社って?

弊社は所謂メー子なのですが、資格保有者数などで見てもグループ内では“技術力のある会社”と見られています。 曲がりなりにも理系修士の私としても、技術力と研究開発という2つのワードに惹かれて門戸を叩いた経緯があります。 ですが、最近、神の声なのか鶴の一声なのか、自分たちでは手を動かさない。 たくさん残業して、とにかくプロジェクトをこなして、利益を、という、売り上げ至上主義になりつつあるのです。

居酒屋で役員御一行様に遭遇

定時退社デー(そもそもなにそれ?)のある日、 同じタイミングで仕事を終えた同期と会社近くの居酒屋でご飯を食べようとしたところで 役員や部課長などと鉢合わせ、同席することになりました。 そこで「不満があれば言ってみろ」と。

成長しないといずれ死ぬと思っているということ

  • 外注率が高い。内製しない研究しないで技術力が付かない
  • ロスジェネ世代、中間層(リーダークラス)が極端に少ないが中途も取らない
  • 大した技術力もない2,3年目が受発注だけして、仕事した感だけ持って歳を取る
  • 段階を踏んで成長できる環境がない。これではいずれ死ぬ(要約)

反応、それと変わったこと

頭ごなしに否定されると思いつつ話したのですが、意外にも役員は真剣に聞いてくれました。 それよりも、課長など現場に近い人達の方が途中で茶々を入れてきます。 「言われたことをやってればいいんだ」とか、 「メーカー傘下だから安泰なのに何が不安なのか(笑)」などなど。

上司の危機感のなさには辟易としたものの、 数ヶ月後の事業計画草案に「若手の技術力底上げ」が盛り込まれたと聞きました。 もちろん私が訴えかけたからだけではないと思いますが、 何かのきっかけになってくれると良いのですが…

開発合宿をしてみた件

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

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

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!!
今後はメンバー宅持ち回りの週末勉強会でブラッシュアップしていきます(^-^)