Slide 1

Slide 1 text

jsx-slack のご紹介 & 実践 Slack アプリ開発 服部 雄輝 | Yuki Hattori | Speee, Inc. Tiny Spec Tokyo @ Slack Japan K.K. Tiny Spec Tokyo @ Slack Japan K.K.

Slide 2

Slide 2 text

服部 雄輝 Yuki Hattori Speee, Inc.  | Frontend, OSS  | yhatt  | @y_hatt ⾃⼰紹介 ⾃⼰紹介 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 2 2

Slide 3

Slide 3 text

Agenda 社内の Slack アプリ事例紹介 jsx-slack の紹介 (背景 / 特徴) Bolt + jsx-slack による実践開発例 3 3 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 4

Slide 4 text

社内の Slack アプリ事例 Custom Slack app at Speee, Inc. #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 4 4

Slide 5

Slide 5 text

Speee Library 社内図書管理システム (社員のみ利⽤可能) 社内の Slack アプリ事例 社内の Slack アプリ事例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 5 5

Slide 6

Slide 6 text

Speee Library Slack app 貸出・予約・返却期限・レビューなどを通知 書籍の URL をプレビュー展開 (App unfurling) Amazon URL を貼ると在庫を探し出してくれる 在庫が無ければ、そのまま購⼊依頼を申請できる 6 6 社内の Slack アプリ事例 社内の Slack アプリ事例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 7

Slide 7 text

Slack アプリが 社内制度の運⽤を円滑にする 7 7 社内の Slack アプリ事例 社内の Slack アプリ事例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 8

Slide 8 text

jsx-slack の紹介 https://github.com/speee/jsx-slack/ Introduce jsx-slack #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 8 8

Slide 9

Slide 9 text

Block Kit を使う Slack アプリの 開発体験 / Developer Experience を⾼める JavaScript ライブラリ 9 9 jsx-slack の紹介 jsx-slack の紹介 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 10

Slide 10 text

jsx-slack の紹介 jsx-slack の紹介 | 背景 | 背景 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 10 10

Slide 11

Slide 11 text

{ "blocks": [ { "type": "context", "elements": [ { "type": "mrkdwn", "text": "Book author 1, author 2", "verbatim": true } ] }, { "type": "section", "text": { "text": "**\n\nLorem, ipsum dolor sit amet consectetur...", "type": "mrkdwn", "verbatim": true }, "accessory": { "type": "image", "alt_text": "book cover", "image_url": "https://bit.ly/2Q8xdv4" } }, { "type": "section", "fields": [ { "type": "mrkdwn", "text": "*Category*\nX. Book category", 11 11 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 12

Slide 12 text

リッチな UI/UX 管理・運⽤が⼤変 Block Kit の JSON が⼤きくなりやすい メッセージの書式設定が埋もれる ( *foo* _bar_ ) 動的にメッセージを⽣成するとより埋もれる 12 12 jsx-slack の紹介 jsx-slack の紹介 | 背景 | 背景 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 13

Slide 13 text

Block Kit のブロックを Component とみなすことで React-like JSX でメッセージを記述 できるのでは? 13 13 jsx-slack の紹介 jsx-slack の紹介 | 背景 | 背景 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 14

Slide 14 text

Book author 1, author 2

Book title

Lorem, ipsum dolor sit amet consectetur...

book cover Category
X. Book category Review
{':star:'.repeat(4)} 4.2 (5 reviews) ☆ Favorite 5 {':star:'.repeat(5)} 4 {':star:'.repeat(4)} 3 {':star:'.repeat(3)} 2 {':star:'.repeat(2)} 1 {':star:'.repeat(1)} 14 14

Slide 15

Slide 15 text

      15 15 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 16

Slide 16 text

Block Kit as component Layout block, Interactive components, etc... React ⾵の使⽤感 Higher-Order Component, Functional component, , Conditional rendering etc... HTML ⾵の書式設定 ( etc...) 16 16 jsx-slack の紹介 jsx-slack の紹介 | 特徴 | 特徴

Slide 17

Slide 17 text

App Home & Modals コンテナコンポーネント JSX でアプリホーム画⾯を構築 コンテナコンポーネント JSX でモーダルを構築 HTML フォーム⾵の記述が可能 17 17 jsx-slack の紹介 jsx-slack の紹介 | 特徴 | 特徴 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 18

Slide 18 text

App Home  スライムが あらわれた!
さくせん? ガンガンいこうぜ いのちだいじに たたかう jsx-slack の紹介 jsx-slack の紹介 | 特徴 | 特徴 18 18

Slide 19

Slide 19 text

Modals

何かお困りですか?


備品発注依頼 備品の紛失 その他の質問 jsx-slack の紹介 jsx-slack の紹介 | 特徴 | 特徴 19 19

Slide 20

Slide 20 text

REPL demo (Yet another Block Kit Builder) 20 20 jsx-slack の紹介 jsx-slack の紹介 | 特徴 | 特徴 https://speee-jsx-slack.netlify.com/ https://speee-jsx-slack.netlify.com/

Slide 21

Slide 21 text

Bolt + jsx-slack による 実践開発例 (App Home & Modals) #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 21 21

Slide 22

Slide 22 text

キーワードに沿った画像をランダム表⽰する Slack アプリ 22 22 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 23

Slide 23 text

開発の流れ 1. Bolt の導⼊ 2. App Home 有効化 3. Bolt + jsx-slack でコードを書く 23 23 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 24

Slide 24 text

Bolt の導⼊ https://slack.dev/bolt/ja-jp/tutorial/getting-started ⼊⾨ガイドに沿って Bolt の設定を実施 ("イベントの設定" までで OK) Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 24 24

Slide 25

Slide 25 text

App Home 有効化 app_home_opened イベントも同時に Subscribe すると良い 25 25 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 26

Slide 26 text

Bolt + jsx-slack でコードを書く // home.js const { jsxslack } = require("@speee-js/jsx-slack"); // ホームタブの Block Kit ビューを⽣成する関数 exports.home = ({ userId }) => jsxslack` さん、こんにちは! :cat: キーワードから画像を探す... `; 26 26 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 ※ jsx-slack は ※ jsx-slack は npm install @speee-js/jsx-slack npm install @speee-js/jsx-slack でインストールしてください でインストールしてください

Slide 27

Slide 27 text

// app.js const { home } = require("./home"); // ホームタブが開かれたらビューを更新 app.event("app_home_opened", async ({ context, event }) => { if (event.tab === "home") { app.client.views.publish({ token: context.botToken, hash: event.view && event.view.hash, user_id: event.user, // ⽣成したビューを渡す view: home({ userId: event.user }) }); } }); 27 27 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 28

Slide 28 text

Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 28 28

Slide 29

Slide 29 text

検索モーダルの表⽰ // ボタンを押したらモーダルを開く app.action("search", ({ ack, body, context }) => { ack(); app.client.views.open({ token: context.botToken, trigger_id: body.trigger_id, view: jsxslack` Powered by Unsplash ` }); }); 29 29 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 30

Slide 30 text

画像表⽰⽤モーダルの追加 (マルチステップモーダル) // 指定されたキーワードの画像をランダムに表⽰ app.view("search-modal", ({ ack, view }) => { const keyword = view.state.values.keyword.keyword.value; ack({ response_action: "push", view: jsxslack` ` }); }); 30 30 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 31

Slide 31 text

実践 jsx-slack: jsx-slack + Bolt で Slack のモーダルを⾃在に操ろう https://tech.speee.jp/entry/2019/10/16/100022 Bolt + jsx-slack 実践開発例 Bolt + jsx-slack 実践開発例 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo 31 31

Slide 32

Slide 32 text

@speee-js/jsx-slack で Block Kit が快適に! App Home & Modals Slack app の UX 向上に貢献 アプリで業務効率を上げていきましょう 32 32 おわりに おわりに #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo

Slide 33

Slide 33 text

Thank you! Repository: https://github.com/speee/jsx-slack Demo: https://speee-jsx-slack.netlify.com/ 33 33 #TinySpec2019 #spcTokyo #TinySpec2019 #spcTokyo