TGH -Taka Gadgets House-

とことこエンジニアリング

LINEからSlackにメッセージを転送するBotをAWSで作成してみる。

はじめに

この記事は Slack Advent Calender2018 12日目の記事です。

前日はtemmihiさんの[技術(者)を支えるネコ - にゃーんbotを作った]でした!

にゃーん🐱 んで実は今回ぼくが話す内容でにゃーんの基礎のところもわかったりしますので一緒に頑張りましょう!(初めてプログラミングする方でもきっとできる!)

 

エンジニアや今風のスタートアップに勤めている方はSlackを使っている方が多いと思います。

ですがまだまだ周りの方がLINEをメインで使っている方も多いはず。

そんなわけで今回はLINEとSlackのBOTを作ってLINEのメッセージをSlackに転送してみます。

こんなのが出来ます

f:id:takapc:20181211205213g:plain



使うもの

- AWS (Lambda, API Gateway)

- python3.6

- Line messenger API

- Slack Webhook API 

目次

Line Botを作る

まずはLINEのメッセージを受け取るためのBotを作ります。

Botを作るためにはLINE Developersに登録する必要があります。

 今回はMessaging APIを使っていきます。他にもソーシャルログインであるLINEログインや流行りのLINE Payなどの開発もできるようです。そのうちやろうかな。

プロバイダーを作成する

LINEのBOTにはプロバイダーの作成が必要です。

チャネル(BOT)を作成する

Bot本体を作ります。

botの名前などを設定、規約に同意するだけですぐに終わります。

プランについてですが、フリープランで問題ないです。

今後も色々試してみたい方はdeveloper trialでも良いです。

両者の違いについては以下の記事がわかりやすいです。

今回作るLine側のBot自身からメッセージを送ることはないので(push API)は使いません。

f:id:takapc:20181210174833p:plain

チャネルを作成するとbotのアイコンが出てくるので詳細画面を開きます。


f:id:takapc:20181211084919p:plain

Bot詳細画面の下の方にメッセージ送受信設定という欄があります

今回はwebhook送信を使いますので利用するにします。

またグループのメッセージを転送したいと思っている方は下のBotグループトーク参加も利用するにしておきましょう。

f:id:takapc:20181211090500g:plain

これでline側のセットアップは完了です

 

Slack Webhook Botを作る

今度はSlack側のbotを作っていきます。

Slack API | Slack

ここにアクセスしてStart Buildingをクリックします。

f:id:takapc:20181211091259p:plain

appの作成画面が出てくるのでapp名と参加させるWorkspaceを洗濯してCreateします。

botにどの機能をつけるかが選べるので今回はIncoming WebhooksをOnにします。

f:id:takapc:20181211091526p:plain

また、Lineから飛んできたメッセージをどのチャンネルに飛ばすかを設定します。

f:id:takapc:20181211091921p:plain

設定が完了するとWebhookのURLが生成されます。

f:id:takapc:20181211120135p:plain

試しにcurlでテストしてみましょう

Slack Webhook Test

設定したチャンネルにHello WorldがきていればこれでSlack側の設定もOKです。

AWSの構成を作る

今回はいわゆるサーバレスな仕組みを構築します。

AWSマネジメントコンソールにログインします。 

AWSのアカウントを持っていない方は作成してください。無料です。

aws.amazon.com

I/O   -> AWS API Gateway

 LineからのWebhookをAPI GateWayで受けてLambdaに転送します。

f:id:takapc:20181211123349p:plain

API Gatewayの画面を開けたら、+APIの作成をクリックします。

f:id:takapc:20181211123437p:plain

新しいAPIapi名をつけましょう。

f:id:takapc:20181211123705p:plain

リソースタブ

apiを作成できたら左側のサイドバーに作ったAPIのメニューが表示されていると思います。

全部大事なのですが、APIをデプロイする上で必ず使うのがリソースと後述するステージです。

リソースタブではPOSTやGETなどのHTTPリクエストがきた時にする処理(メソッド)を定義できます。また、/line, /slack などの子リソースを作成したい時にも利用します。

早速リソースタブで新規メソッド(処理)を作成してみましょう。

ANYメソッドを作ります。

f:id:takapc:20181211153223g:plain

メソッド内にLambda関数というボックスがあると思いますが、そこにこれから作るLambda のARN(Amazon Resource Name)を入れることになります。

では、次は処理の実装をします。
 

処理 -> AWS Lambda

 Lambdaはサーバーレス(+環境構築なし)でpythonを動かせます。

API GateWayと統合することで受け取ったリクエストを処理できます。

Lambdaの関数を新規作成する

サービスからLambdaにいきます。もしくは下のリンク参照

https://ap-northeast-1.console.aws.amazon.com/lambda/home

関数の作成ボタンを押し、以下のように設定します。

f:id:takapc:20181211154825p:plain

作成が終わると、Lambdaの基本画面(Designer)が出てきます。

右上のarnをコピーしてAPI Gatewayに移動します。

f:id:takapc:20181211155241p:plain

先ほどのANYをクリックしてLambda関数の所にarnを貼り付けるとLambdaの関数名が表示されますのでそれをクリックして、保存します。

f:id:takapc:20181211160057p:plain

するとこのような画面が出てきますのでOKを押します。

f:id:takapc:20181211164044p:plain

AWSではセキュリティのために権限(ロール)を細かく分けているのでそのままだとAPI GateWayからLambdaへのアクセスが許可されません。

しかしそれだと届いたリクエストをLambdaに渡せなくなるため、API GatewayにLambdaを呼び出す権限を与えます。

保存が終わると画面が変わるかと思います。

f:id:takapc:20181211161154p:plain

この画面は処理の見ての通り処理の流れを図にしています。クライアント(Line)からきたリクエストは統合リクエストによってLambdaの関数に転送されます。

これでAPIの入口はほぼ完成です。最後にデプロイをします。

 

f:id:takapc:20181211165751g:plain

最後に出てくるAPIのURLを試しにクリックしてみましょう!

Hello from Lambda!と書かれたページが出てくるはずです。

Lineのwebhook先を設定する

line developersの設定画面の下に行ってwebhook送信を利用するにして

↑のURLをコピペします。

接続確認して成功したらバッチリです!

f:id:takapc:20181211204343p:plain


 

 

Lambdaで処理の内容を実装する

入口ができたら中身を実装します。

再度Lambdaを開くと左側にAPI Gatewayが追加されているはずです。

f:id:takapc:20181211165948p:plain

少し下にスクロールすると関数コードがあるはずです。

f:id:takapc:20181211170219p:plain

API GatewayとLambdaの統合ではデフォルトでは右上に記されたハンドラが最初に実行されます。デフォルトですと

lambda_function.pyというファイルのlambda_handlerが呼ばれるようになっています。これらはカスタム可能です。

もともとあるコードをみてみましょう。

lambda_handlerの引数のeventにリクエストの本文が入ります。(POST, PUTなどの場合)

このサンプルでは即returnしていますのでlambdaのハンドラが呼ばれたら何もせずにHello from lambda!を返す、となっています。

つまりこのreturnの前に処理を書き込んでいきます。

Lineから来たメッセージをSlackに転送する

本題です。最初に作ったLine Botから来たメッセージをSlackに転送(Webhook)してあげるにはどうすれば良いでしょうか。

まずLINE側から来るリクエストの例を見てみましょう。

Messaging APIリファレンス

Line Messenger APIからのリクエスト例

↑の様な形でリクエストが来ます。

すなわちこの形式でテストすれば良いのでLambdaの上の方にあるテストというボタンを押して、この本文を登録しましょう。

* 追記 これですがリクエストがヘッダーごときたので今回はjsonのことも考慮する必要が出てきました。後述のコードは対応済みなのでコードから読み取ってくださると幸いです。 時間があるときに記事も直します。

f:id:takapc:20181211180812g:plain

上のリクエスト例を見ると["events"][0]["message"]["text"]を取得すれば本文を取れます。

これを実行した時の出力は

{
"statusCode": 200,
"body": "\"Hello, world ここにLINEのメッセージが入っている\""
}

になります。

Slack incoming webhook にPOST

無事取れているので次はこのメッセージをSlackに転送します。

slackにはurllibを使ってPOSTするだけ!あら簡単!

このコードを追加してテストしてみましょう!

f:id:takapc:20181211184934g:plain

完成!

ではでは動かしてみます。

f:id:takapc:20181211205213g:plain

何かあればいつでも連絡ください!

レポジトリも置いておきます。

github.com

twitter.com

何か質問や意見があればコメントやリプライください!!

感想欲しいです!!初めてのAdvent Calender頑張ったー!

明日はstopll2さんの

独身30代サラリーマンの「ひとりSlack」運用について

です!!

qiita.com

ではまた会いましょう!

Bye!

MacBook Pro mid2018が届きました!

こんにちは、たかです。

ついにMacBook Proが届きましたのでその時のお話を。

 MacBookを買ったお話はこちら。

 

blog.takapc.com

 

仕事をしていたらソフマップから電話があり、

ご注文のMacが店舗に届きました。いつ取りにきますか?

 と来たのでその日の仕事が終わったと同時に秋葉へ受け取りに行きました。

 

f:id:takapc:20181109091814j:plain

19:00ごろに行ったのですが、受付がそこそこ混んでいたので少し待ちましたが、

f:id:takapc:20181109091805j:plain

無事受け取りました。もっとゴツイかと思ってたけど思っていたより薄くてバッグに入ったので助かりました。

明日開封&レビュー動画を取るつもりなのでお楽しみに!

MacBook Air, Mac mini [発売]

前回ついにMBP(MacBook Pro mid2018)を購入したたかです。 

blog.takapc.com

そんな中、ワクワクしながらぐっすり眠ったその夜, Apple Special Eventで新製品が発表されていました..OMG...

www.apple.com

appleの製品からこのページをご覧になっている方は上のリンクからKeynoteをご覧いただけます。

MacBook Air, Mac mini 復活


MacBook Air

まさかこのタイミングで来るとは...

無印MacBookに吸収されるかと思ってましたが、生き残ってくれました..ありがとう..

f:id:takapc:20181031201259p:plain

Macファミリー, それぞれが進化してきました。

f:id:takapc:20181031201311p:plain

その中でもMacBook Airは人気があるのにも関わらずアップデートされてきませんでした

f:id:takapc:20181031201320p:plain

この薄さに魅了されてMacを使い始めた方も多いのではないのでしょうか。

f:id:takapc:20181031201331p:plain

特徴的な横からビュー MacBook Airの再誕です

MacBook Proは高いけどMacは使って見たい」
そんなユーザーやプログラミングするけどそんなに重いビルドはしない人などMacBook Airはかなり広い範囲の人に使われるのではないでしょうか?

価格は

¥134,800 (税別) 

 から。 今度実物を触ってこようかな...

 

それではみなさん。また次のエントリーでお会いしましょう。

 

 

MacBook Pro(mid 2018)を買ってきた。

はじめに

ふぅ.... 買ってしまった...

こんにちは。たかです。

前回、前々回とMacBookスペックを決めてきたわけですが、ついに今回です。

スペック決め編はこちら

 

blog.takapc.com

スペックおさらい

f:id:takapc:20181030145631j:plain

購入しました。

前回でスペックを決め、購入を覚悟したもののAppleCare含め45万円を越えるためビビりながらお店にいきました。  

Apple Storeで買っても良かったのですが、後々新型Macはtype-cのアダプタやらなんやらを購入しなくてはいけないので、ポイントのつくソフマップMacCollection(秋葉原)にいってきました。  

後述しますが驚愕のポイントがつきました。 マッコレにして良かった..

 

f:id:takapc:20181029081413j:plain

ソフマップAKIBA3号店 Mac Collection

店内に入るも再びチキる

 

 しかしここで帰ってしまってはわざわざ秋葉原まで来た意味がありません。

そして購入しました。

すごい緊張した...

f:id:takapc:20181031195430j:plain

税込¥460,768なり.. 高いですけどきっとすぐに回収できるはず!

CTOモデルですので納品まで7-10日かかるとのこと。

到着するのが楽しみです。受け取ったらレビューをしていきたいと思います..

そんなことしてたらAppleがビッグな発表をしていた...

13inchに割り切ってたら発狂していただろうことが起きました。

良かった..

近いうちにApple Special Eventで発表された製品についての記事を書きます。

ではまた明日!

新型MacBook Pro(mid 2018)の検討 Part2

f:id:takapc:20181029205151p:plain こんにちは。たかです。

前回はMacのサイズまで決めました。

blog.takapc.com

軽くまとめてみます。

条件 My Choice Reason
前提条件/使うソフト Xcode, InteliJ(開発), Logic Pro(作曲), Adobe illustrator, Photoshop(Raw加工あり)
新品 or 中古 新品 長く使うから
サイズ 13" or 15" 15" スペック強いから
価格 ~¥500,000 長く使うので妥協したくないから

それでは続きです。

スペック

今回の本題です。
最初に記した通り、最低限以下の処理は難なく実行できないと困ります。

Xcode, InteliJ(開発), Logic Pro(作曲), Adobe illustrator, Photoshop(Raw加工あり)

また、常駐アプリケーションとして、Slack, Line, Shift, Chrome, Skype, SourceTreeを想定します。 - Xcode, InteliJ(開発)
これらのプロセスはCPU, RAMのリソースを重要とします。
iPhoneのシミュレーターを立ち上げながらXcodeでStoryBoardを開き, AppCodeでコーディングする、といった感じです。

ここでMacBook Pro 15" のベースモデルのスペックを見ていきます。 f:id:takapc:20181029205422p:plain

Components 15" Base 15" Higher
CPU 2.2GHz 6-core 8th-generation Intel Core i7 processor 2.6GHz 6-core 8th-generation Intel Core i7 processor
CPU Boost Turbo Boost up to 4.1GHz Turbo Boost up to 4.3GHz
GPU Radeon Pro 555X with 4GB of GDDR5 memory Radeon Pro 560X with 4GB of GDDR5 memory
SSD 256GB SSD storage1 512GB SSD storage1

これ以外の

  • Retina display with True Tone
  • Touch Bar and Touch ID
  • Thunderbolt 3 ports x4
  • 16GB 2400MHz DDR4 memory

は一緒です.

ここからカスタムしていきます。

CPU

今使っているMacのスコアは5680でした。後に出てくる新型Macがどれほどやばいかが比較できます。

f:id:takapc:20181030135636p:plain

MacBook Pro(mid 2018)はCPUの選択肢が3つあります。(性能が低い順) - Intel Core i7-8750H @ 2.2 GHz (6 cores)
- Intel Core i7-8850H @ 2.6 GHz (6 cores)
- Intel Core i9-8950HK @ 2.9 GHz (6 cores)

Geekbenchによると やはりサーマルスロットリング/TDP管理が改善されたi9がi7を引き離しているようです。

f:id:takapc:20181029211951p:plain

ベンチマークの差は909でした。決して小さくない差です。スペックだけ鑑みるとi9一択となりそうですが、オプション価格(+44000円)の割にリターンは少ないようです。

加えて他の方のレビュー動画、投稿を見てもあまりi9の評価は高くなかったため今回は見送りました。(サーマルスロットリング/OSのTDP管理が改善される前の動画が多かったので現在は違うかもしれませんが..)

またi9は爆熱だと聞いているのでノートパソコンとしての排気機構が確立された状態でないとPC自体の耐久性がi7に比べて劣ると考えました。

さて、そうなるとi7の8750Hか8850Hの差額は11000円です。

ベースクロックが0.4Ghz高いi7 8850Hを選択しました。

CPU: i7 8850H

GPU

GPUですが、555xと560xが選択できます。 メインメモリが2048MBか4096MBかの違いのようです。

ベンチマーク上では1.1倍の性能差のようです 後々4Kモニターを接続したりFinal Cut Proもいじる予定だったので560xを選びます。 差額は11000円なのでお財布に余裕がある人は追加してもいいのではないかなと思います。

GPU: Radeon 560x

RAM

買い替えを検討した時に言ったとおりメモリ不足は絶対に避けたい状況でした。 つまり選択肢としては

  • 16GB
  • 32GB

があるわけですが、メモリは積めるだけ積むと決めていたので32GBです。 我が道を妨害するメモリ不足からは絶対に逃げたかったです。

作業時間の8割くらいはオーバースペックでしょう(笑) RAM: 32GB

SSD

Macで結構重要かつお金がかかるのはストレージです。取り替え出来ないですから。

現行のMacSSDの書き読み速度は速いです。小さめのを買って後から外付けというのはあまりにスマートじゃないように感じます。

f:id:takapc:20181030140301p:plain

4TBは高すぎるので買えません。

結論から言うと1TBを選びました。

  • 512GBは動画と音楽のライブラリで埋まってしまう。
  • 2TBは使用するか微妙な割に差額が高い。

SSD : 1TB

その他

予定通りキーボードはUSとします。 またapple careをつけます

購入スペックが決定

Components My Choise
CPU 2.6GHz 6-core 8th-generation Intel Core i7 processor
CPU Boost Turbo Boost up to 4.3GHz
GPU Radeon Pro 560X with 4GB of GDDR5 memory
RAM 32GB
SSD 1TB SSD
価格 ¥390,800 (税別)

次回!ついに購入します! 今から緊張してきました。 スペック間違えないで注文しなきゃ....

新型 MacBook Pro(mid 2018) について Part1

こんにちは。たかです。

前回今のMacを手放すことをついに決意した私です。

blog.takapc.com

今回は次のMacBook選びをしていきたいと思います。

Macを購入する上で見るポイント

前提条件/使うソフト

以上の2点を前提条件とします。

新品 or 中古

今回は新品にしました。

一般的な中古と新品の差を見てみます。

評価項目 中古 新品
価格 ×
保証
綺麗さ
納期 即時 即時 or 7-10日*1
俺のモノ感

近頃のMacBook Pro新品はめちゃくちゃ高いです。

参考までに吊るしモデル(何もカスタムされていないモデル)をApple Storeで見てみます。

MacBook Proを購入 - Apple(日本)

f:id:takapc:20181029131511j:plain
高い..高くないですか?
性能が違うので単純に比較できませんが、現行15インチモデルに近いものを見つけたので比較してみます。

パソコン・タブレットPC MacBook Pro MPTT2J/A Core_i7 2.9GHz 16GB SSD512GB スペースグレイ 〔10.13 HighSierra〕|中古・アウトレットのソフマップ[sofmap]

f:id:takapc:20181029132514p:plain f:id:takapc:20181029132527p:plain

表形式で比較していきます。

モデル 価格
mid2017 中古 249,980
mid2018 新品 302,800

52820円の差がありますね。ヤフオクなどで買えばもっと差が出るでしょう。

いつもなら中古で買ってしまうのですが、このMacとは長い付き合いになりそうなので新品にしました。あとは次のような理由もあります。

  • Apple Careがつけられる
    さすがに30万を超えるので保証が欲しかったです。周りでMacBookを通学電車で曲げた人がいたので。

  • 俺のモノ感
    長い付き合いになりそうなので一緒にスタート切れる新品がモチベーションの向上に繋がるかなと思いました。

  • macからのプレッシャー

「お前俺のこと使いこなせるほど腕あるのか?」

と常にMacが思わせてくれそうです。だって高いんだもん。

サイズ

結論から言うと15インチにしました。
昔からそうですが、Macは13インチと15インチで結構スペックが変わったりします。また後ほどカスタムしますがこれにも影響します。

13インチのメリット

  • 持ちやすい
  • 軽い(1.3kg)
  • 安い
  • 2018モデルから性能がえげつない(ベースでも2017年の15インチ並み)
  • 大体のバッグに収まる (超重要)
    最後のが一番大事だったりします。15インチバッグに収まらないケースが多発したりします。
    クリエイター系以外なら13インチ一択だと思います.

13インチのデメリット

  • CPUの性能が低い (15インチに比べて)
  • そもそも物理コア数が4core(15インチは6core)
    無理やりデメリットを書きましたがCPUの性能は低くはないです。
    そこらへんのノートパソコンを余裕で踏破するスペックはあります。15インチに比べた場合...の話です。

  • RAMがDDR3 , 16GBまでしか増設できない 普段使いに関しては全く問題ないがAdobe系を立てるとパフォーマンスに直結する)
    長く使うのでスペックには妥協できませんでした。

15インチのメリット

  • 圧倒的なスペック
    iMacよりもスペック高いってどう言うことよ..

  • の割に軽い(1.8kg)
    軽..くはないですが、重くもないです。リュックなら誤差レベル, バッグなら致命傷かも

  • 不安を感じない(maybe 処理の遅さによるストレスを抱えない)
    すでにある程度PCが触れる人にとって, パソコンでやりたいこと以外に割く時間は本当にもったいないです。 やりたいことを妨害されずに突っ走れる環境はとっても大事だと私は感じます。

15インチのデメリット

  • 高い
  • でかい
  • 怖い
  • 高い
  • 高い

細かい理由は読者の皆様で推測してください(笑)

価格

いつもの私なら最優先ですが今回はそれより他の事を優先しましたので気にしてなかったです。
とはいえ支払える額にも限度はあるので今回は保証込みで¥500,000(50万円)としました。

長くなってしまったので続きは次のエントリーで。 残りのポイントはこちら。

スペック

CPU, GPU, RAMなど少し掘り下げていきます。 明日投稿予定です。 投稿しました!

blog.takapc.com

Macを買おうとしている方! 相談に乗りますよ!

twitter.com

*1:CTO(Custom To Order)の場合

ありがとう MacBook Pro (2013 Early) そしてさようなら

 こんにちは、たかです。

今までMacBook Pro 2013 Earlyを使っていましたが(中古で10万円で購入)、最近メインのデスクトップが故障したこともありMacをパワフルに使う機会が増えましたので1年前から買い替えを検討していました。

f:id:takapc:20181029083327j:plain

2018年まで普通の用途ではなんら問題なく動作してくれました。

5年経っても問題なく動くハードとOS, さすがMacといったところでしょうか。

不満を感じたのはLogic ProやPhotoShopでゴリゴリ編集をする時ぐらいでした。

私はXcode+AppCodeでの開発とかは問題なく動いていましたし、本当にいいマシンでした。

メモリ不足以外は。

f:id:takapc:20181029084626p:plain

 RAMが8GBの僕のMacでは開発環境を立ち上げた時点で7-8割食われます。macOS mojaveにしてからだいぶ早くはなったのですが、やはり不足感は否めません。

 この状態でXcodeでビルドしたり、Photoshopで編集したりすると動作がカクつきます。

しかし、本当によく動いてくれました。mojaveにしてからHigh sierraより体感30%ぐらい早くなってくれたので新Macの購入を躊躇うほどでした。

どこかで聞いた言葉が頭をすり抜けます

Macは買いたい時が買い時

買い換えよう。そう思ったのでした。

次回に続きます。