LINEからSlackにメッセージを転送するBotをAWSで作成してみる。
はじめに
この記事は Slack Advent Calender2018 12日目の記事です。
前日はtemmihiさんの[技術(者)を支えるネコ - にゃーんbotを作った]でした!
にゃーん🐱 んで実は今回ぼくが話す内容でにゃーんの基礎のところもわかったりしますので一緒に頑張りましょう!(初めてプログラミングする方でもきっとできる!)
エンジニアや今風のスタートアップに勤めている方はSlackを使っている方が多いと思います。
ですがまだまだ周りの方がLINEをメインで使っている方も多いはず。
そんなわけで今回はLINEとSlackのBOTを作ってLINEのメッセージをSlackに転送してみます。
こんなのが出来ます
使うもの
- python3.6
- Line messenger API
- Slack Webhook API
目次
- はじめに
- こんなのが出来ます
- 使うもの
- 目次
- Line Botを作る
- Slack Webhook Botを作る
- AWSの構成を作る
- Lambdaの関数を新規作成する
- Lambdaで処理の内容を実装する
- 完成!
- 何かあればいつでも連絡ください!
Line Botを作る
まずはLINEのメッセージを受け取るためのBotを作ります。
Botを作るためにはLINE Developersに登録する必要があります。
今回はMessaging APIを使っていきます。他にもソーシャルログインであるLINEログインや流行りのLINE Payなどの開発もできるようです。そのうちやろうかな。
プロバイダーを作成する
LINEのBOTにはプロバイダーの作成が必要です。
チャネル(BOT)を作成する
Bot本体を作ります。
botの名前などを設定、規約に同意するだけですぐに終わります。
プランについてですが、フリープランで問題ないです。
今後も色々試してみたい方はdeveloper trialでも良いです。
両者の違いについては以下の記事がわかりやすいです。
今回作るLine側のBot自身からメッセージを送ることはないので(push API)は使いません。
チャネルを作成するとbotのアイコンが出てくるので詳細画面を開きます。
Bot詳細画面の下の方にメッセージ送受信設定という欄があります
今回はwebhook送信を使いますので利用するにします。
またグループのメッセージを転送したいと思っている方は下のBotのグループトーク参加も利用するにしておきましょう。
これでline側のセットアップは完了です
Slack Webhook Botを作る
今度はSlack側のbotを作っていきます。
ここにアクセスしてStart Buildingをクリックします。
appの作成画面が出てくるのでapp名と参加させるWorkspaceを洗濯してCreateします。
botにどの機能をつけるかが選べるので今回はIncoming WebhooksをOnにします。
また、Lineから飛んできたメッセージをどのチャンネルに飛ばすかを設定します。
設定が完了するとWebhookのURLが生成されます。
試しにcurlでテストしてみましょう
設定したチャンネルにHello WorldがきていればこれでSlack側の設定もOKです。
AWSの構成を作る
今回はいわゆるサーバレスな仕組みを構築します。
AWSマネジメントコンソールにログインします。
AWSのアカウントを持っていない方は作成してください。無料です。
I/O -> AWS API Gateway
LineからのWebhookをAPI GateWayで受けてLambdaに転送します。
API Gatewayの画面を開けたら、+APIの作成をクリックします。
リソースタブ
apiを作成できたら左側のサイドバーに作ったAPIのメニューが表示されていると思います。
全部大事なのですが、APIをデプロイする上で必ず使うのがリソースと後述するステージです。
リソースタブではPOSTやGETなどのHTTPリクエストがきた時にする処理(メソッド)を定義できます。また、/line, /slack などの子リソースを作成したい時にも利用します。
早速リソースタブで新規メソッド(処理)を作成してみましょう。
ANYメソッドを作ります。
メソッド内にLambda関数というボックスがあると思いますが、そこにこれから作るLambda のARN(Amazon Resource Name)を入れることになります。
では、次は処理の実装をします。
処理 -> AWS Lambda
Lambdaはサーバーレス(+環境構築なし)でpythonを動かせます。
API GateWayと統合することで受け取ったリクエストを処理できます。
Lambdaの関数を新規作成する
サービスからLambdaにいきます。もしくは下のリンク参照
https://ap-northeast-1.console.aws.amazon.com/lambda/home
関数の作成ボタンを押し、以下のように設定します。
作成が終わると、Lambdaの基本画面(Designer)が出てきます。
右上のarnをコピーしてAPI Gatewayに移動します。
先ほどのANYをクリックしてLambda関数の所にarnを貼り付けるとLambdaの関数名が表示されますのでそれをクリックして、保存します。
するとこのような画面が出てきますのでOKを押します。
AWSではセキュリティのために権限(ロール)を細かく分けているのでそのままだとAPI GateWayからLambdaへのアクセスが許可されません。
しかしそれだと届いたリクエストをLambdaに渡せなくなるため、API GatewayにLambdaを呼び出す権限を与えます。
保存が終わると画面が変わるかと思います。
この画面は処理の見ての通り処理の流れを図にしています。クライアント(Line)からきたリクエストは統合リクエストによってLambdaの関数に転送されます。
これでAPIの入口はほぼ完成です。最後にデプロイをします。
最後に出てくるAPIのURLを試しにクリックしてみましょう!
Hello from Lambda!と書かれたページが出てくるはずです。
Lineのwebhook先を設定する
line developersの設定画面の下に行ってwebhook送信を利用するにして
↑のURLをコピペします。
接続確認して成功したらバッチリです!
Lambdaで処理の内容を実装する
入口ができたら中身を実装します。
再度Lambdaを開くと左側にAPI Gatewayが追加されているはずです。
少し下にスクロールすると関数コードがあるはずです。
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側から来るリクエストの例を見てみましょう。
↑の様な形でリクエストが来ます。
すなわちこの形式でテストすれば良いのでLambdaの上の方にあるテストというボタンを押して、この本文を登録しましょう。
* 追記 これですがリクエストがヘッダーごときたので今回はjsonのことも考慮する必要が出てきました。後述のコードは対応済みなのでコードから読み取ってくださると幸いです。 時間があるときに記事も直します。
上のリクエスト例を見ると["events"][0]["message"]["text"]を取得すれば本文を取れます。
これを実行した時の出力は
{
"statusCode": 200,
"body": "\"Hello, world ここにLINEのメッセージが入っている\""
}
になります。
Slack incoming webhook にPOST
無事取れているので次はこのメッセージをSlackに転送します。
slackにはurllibを使ってPOSTするだけ!あら簡単!
このコードを追加してテストしてみましょう!
完成!
ではでは動かしてみます。
何かあればいつでも連絡ください!
レポジトリも置いておきます。
何か質問や意見があればコメントやリプライください!!
感想欲しいです!!初めてのAdvent Calender頑張ったー!
明日はstopll2さんの
独身30代サラリーマンの「ひとりSlack」運用について
です!!
ではまた会いましょう!
Bye!
MacBook Pro mid2018が届きました!
こんにちは、たかです。
ついにMacBook Proが届きましたのでその時のお話を。
MacBookを買ったお話はこちら。
仕事をしていたらソフマップから電話があり、
ご注文のMacが店舗に届きました。いつ取りにきますか?
と来たのでその日の仕事が終わったと同時に秋葉へ受け取りに行きました。
19:00ごろに行ったのですが、受付がそこそこ混んでいたので少し待ちましたが、
無事受け取りました。もっとゴツイかと思ってたけど思っていたより薄くてバッグに入ったので助かりました。
明日開封&レビュー動画を取るつもりなのでお楽しみに!
MacBook Air, Mac mini [発売]
前回ついにMBP(MacBook Pro mid2018)を購入したたかです。
そんな中、ワクワクしながらぐっすり眠ったその夜, Apple Special Eventで新製品が発表されていました..OMG...
appleの製品からこのページをご覧になっている方は上のリンクからKeynoteをご覧いただけます。
MacBook Air, Mac mini 復活
MacBook Air
まさかこのタイミングで来るとは...
無印MacBookに吸収されるかと思ってましたが、生き残ってくれました..ありがとう..
「MacBook Proは高いけどMacは使って見たい」
そんなユーザーやプログラミングするけどそんなに重いビルドはしない人などMacBook Airはかなり広い範囲の人に使われるのではないでしょうか?
価格は
¥134,800 (税別)
から。 今度実物を触ってこようかな...
それではみなさん。また次のエントリーでお会いしましょう。
MacBook Pro(mid 2018)を買ってきた。
はじめに
ふぅ.... 買ってしまった...
こんにちは。たかです。
前回、前々回とMacBookスペックを決めてきたわけですが、ついに今回です。
スペック決め編はこちら
スペックおさらい
購入しました。
前回でスペックを決め、購入を覚悟したもののAppleCare含め45万円を越えるためビビりながらお店にいきました。
Apple Storeで買っても良かったのですが、後々新型Macはtype-cのアダプタやらなんやらを購入しなくてはいけないので、ポイントのつくソフマップのMacCollection(秋葉原)にいってきました。
後述しますが驚愕のポイントがつきました。 マッコレにして良かった..
店内に入るも再びチキる
しかしここで帰ってしまってはわざわざ秋葉原まで来た意味がありません。
そして購入しました。
すごい緊張した...
CTOモデルですので納品まで7-10日かかるとのこと。
到着するのが楽しみです。受け取ったらレビューをしていきたいと思います..
そんなことしてたらAppleがビッグな発表をしていた...
13inchに割り切ってたら発狂していただろうことが起きました。
良かった..
近いうちにApple Special Eventで発表された製品についての記事を書きます。
ではまた明日!
新型MacBook Pro(mid 2018)の検討 Part2
こんにちは。たかです。
前回はMacのサイズまで決めました。
軽くまとめてみます。
条件 | 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" のベースモデルのスペックを見ていきます。
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がどれほどやばいかが比較できます。
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を引き離しているようです。
ベンチマークの差は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円なのでお財布に余裕がある人は追加してもいいのではないかなと思います。
RAM
買い替えを検討した時に言ったとおりメモリ不足は絶対に避けたい状況でした。 つまり選択肢としては
- 16GB
- 32GB
があるわけですが、メモリは積めるだけ積むと決めていたので32GBです。 我が道を妨害するメモリ不足からは絶対に逃げたかったです。
作業時間の8割くらいはオーバースペックでしょう(笑) RAM: 32GB
SSD
Macで結構重要かつお金がかかるのはストレージです。取り替え出来ないですから。
現行のMacのSSDの書き読み速度は速いです。小さめのを買って後から外付けというのはあまりにスマートじゃないように感じます。
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を手放すことをついに決意した私です。
今回は次のMacBook選びをしていきたいと思います。
Macを購入する上で見るポイント
前提条件/使うソフト
- USキー
- Xcode, InteliJ(開発), Logic Pro(作曲), Adobe illustrator, Photoshop(Raw加工あり)
以上の2点を前提条件とします。
新品 or 中古
今回は新品にしました。
一般的な中古と新品の差を見てみます。
評価項目 | 中古 | 新品 |
---|---|---|
価格 | ◎ | × |
保証 | △ | ◎ |
綺麗さ | △ | ◎ |
納期 | 即時 | 即時 or 7-10日*1 |
俺のモノ感 | △ | ◎ |
近頃のMacBook Pro新品はめちゃくちゃ高いです。
参考までに吊るしモデル(何もカスタムされていないモデル)をApple Storeで見てみます。
高い..高くないですか?
性能が違うので単純に比較できませんが、現行15インチモデルに近いものを見つけたので比較してみます。
表形式で比較していきます。
モデル | 価格 |
---|---|
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など少し掘り下げていきます。 明日投稿予定です。 投稿しました!
Macを買おうとしている方! 相談に乗りますよ!
*1:CTO(Custom To Order)の場合
ありがとう MacBook Pro (2013 Early) そしてさようなら
こんにちは、たかです。
今までMacBook Pro 2013 Earlyを使っていましたが(中古で10万円で購入)、最近メインのデスクトップが故障したこともありMacをパワフルに使う機会が増えましたので1年前から買い替えを検討していました。
2018年まで普通の用途ではなんら問題なく動作してくれました。
5年経っても問題なく動くハードとOS, さすがMacといったところでしょうか。
不満を感じたのはLogic ProやPhotoShopでゴリゴリ編集をする時ぐらいでした。
私はXcode+AppCodeでの開発とかは問題なく動いていましたし、本当にいいマシンでした。
メモリ不足以外は。
RAMが8GBの僕のMacでは開発環境を立ち上げた時点で7-8割食われます。macOS mojaveにしてからだいぶ早くはなったのですが、やはり不足感は否めません。
この状態でXcodeでビルドしたり、Photoshopで編集したりすると動作がカクつきます。
しかし、本当によく動いてくれました。mojaveにしてからHigh sierraより体感30%ぐらい早くなってくれたので新Macの購入を躊躇うほどでした。
どこかで聞いた言葉が頭をすり抜けます
Macは買いたい時が買い時
買い換えよう。そう思ったのでした。
次回に続きます。