Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mWWDC2017
Search
ahiru
May 27, 2017
Technology
550
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
mWWDC2017
mikutter World Wide Developers Conference 2017 の資料
ahiru
May 27, 2017
More Decks by ahiru
See All by ahiru
tokaido lug 2019-03-09
na0ki
1
170
OSC名古屋東海道らぐLT
na0ki
0
700
osc hamanako 2017 LT
na0ki
1
140
OSC Osaka 2017 LT
na0ki
0
180
OSC Nagoya Tokaidou LUG LT
na0ki
0
170
Tokaido LUG 2016.02.20
na0ki
0
930
Other Decks in Technology
See All in Technology
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
300
Lightning近況報告
kozy4324
0
180
生成 AI 実践ガイド (概略版) AIガバナンス編
asei
0
110
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
140
ザ・データベース、MySQL ~ OSC 2026 Sendai ~
sakaik
0
130
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
170
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
140
Kiro Ambassador を目指す話
k_adachi_01
0
110
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
280
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
2.3k
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.5k
マルチアカウント環境での コーディングエージェントを使った障害調査が大変なので AIエージェントにReadOnly権限を付与してみた / ReadOnly AI Agents for Multi-Account AWS Incident Response
yamaguchitk333
2
110
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
240
Odyssey Design
rkendrick25
PRO
2
700
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
160
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
HDC tutorial
michielstock
2
720
4 Signs Your Business is Dying
shpigford
187
22k
Chasing Engaging Ingredients in Design
codingconduct
0
220
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Transcript
None
⽇本⼈は敗戦後、Shift-JISやJAP106などをGHQ に押し付けられて、結果として情報⼯学の発展に ⼤幅な遅れを取りました。私も⼩学⽣の頃、 プログラミングを始めたら習ったこともない英語 が並んでいて挫折したものです。またあなたたち はASCII以外⾮対応という、⽇本の⼩学⽣でも作 らないような低品質なサービスを沢⼭公開してき ました。そうやって代々私達が虐げられてきたこ とを、あなたたちが追体験できる貴重な機会が、 このmikutterであるわけです。
⾃⼰紹介 lあひる lNitech lTwitter 「あひる焼き」とつぶやけばわかる lEJUG, mikutter
いいか、みんな (゚д゚ ) (| y |)
mikutterとSlackでは単なるておくれだが mikutter ( ゚д゚) Slack \/| y |\/
⼆つ合わされば mikutter_slack となる ( ゚д゚) mikutter_slack (\/\/
つまりておくれだ mikutter_slack ( ゚д゚) \/| y |) mikutterの作者です
( ゚д゚) (| y |) Ban Stop Me Premiamu!!
最近のmikutter • mikutter は多種多様なサービスと連携するための機能を強化し ている • プラグインを導⼊することで新たなサービスに対応できると いった柔軟性・拡張性の⾼さを持つ • Twitter
はmikutterの機能のうちの⼀つにすぎない • 〇〇のサービス⽤のプラグインマダァ-?(・∀・ )っ/⼐⌒☆チンチン ようこそプラグイン開発沼へ =͟͟͞͞(☞ ՞ڼة◔=͟͟͞)☞ (・∀・ ;)
作者の陰謀
作者の陰謀
mikutter_slack • Slack とは • プラグイン概要 • 実装 • 使⽤ライブラリ
• できていること • 今後の予定
Slack とは • チャットツール • Electron ベースのクライアントで各種OSに対応 • Win, macOS,
Android, iOS, Linux(beta) • ⾊々なサービスとの連携が可能 • GitHub のアクティビティの通知、Jenkins の通知などなど… • 絵⽂字機能やコマンド機能など楽しい機能も盛りだくさん • 最近は通話もできるようになった • API も提供されており、Bot の開発も盛んに⾏われている
Slack の API • Restful な API が⽤意されている • ⼤きく分けて
Event API と RTM API がある • Event API • ⼀般的なよくある REST API • POST または GET で⾊々な情報を取得する • RTM API • RealTime Messaging API の略称 • WebSocket を⽤いたリアルタイムなイベントのやり取りを実現
プラグイン概要 • Slack を使えるようにする mikutter プラグイン • コアプラグインと gui プラグインに分離している
• ライブラリの採⽤によって Event API のみでなく、RTM API に対応 • mikutter 3.5 から導⼊された Retriever Model (現 Diva Model) を使ったモデルクラスによる実装 • 公式レファレンスと mikutter の作者を〆ることで最新の情報 を得ている • 今後出てくるであろう、他サービスのプラグインのプロトタイ プになることを⽬指している
要件
要件 • 必要要件 • mikutter: 3.6.0-develop • ruby : 2.3
• 推奨要件 • mikutter: 3.6.0-develop • ruby : 2.4
slack_gui
実装 • 主なモジュール • slack_gui.rb
slack_gui の機能 • GUI 周りを⼀通り担当する • チャンネルのタブを開く • 画像を開く •
投稿(未実装)
slack
使⽤ライブラリ • slack-api • RTM API や Event API などを
Ruby で叩ける • WebSocket 周りもよしなにしてくれるので、mikutter 側の実装に専 念できる • 作者のレスポンスが早くていい(重要) • サンプルも丁寧でドキュメントもしっかりしている(重要) • MIT ライセンス
slack-api • Slack は RTM 接続時に⼤量のデータを送ってくる • だいたい 72KB ほどの
JSON ⽂字列 (約 7 万字) • 当初、このライブラリはこのデータを破棄していた • 作者が RTM を使っていなかった • これに関して Twitter でライブラリ作者が捕捉・対応してくれた • ありがとうございます • その後バグを⾒つけ思い切って PR 出して少しばかり貢献した
実装 • 主なモジュール • api/ • model/ • entity/ •
slack.rb
実装 ‒ slack.rb
実装 ‒ slack.rb • mikutter が最初にロードする実⾏ファイル • mikutter の設定画⾯の定義 •
抽出データソースの定義 • RTM への接続処理 • ⼀般的に mikutter のプラグインとして必要なものを実装 • これ⾃体はかなりスリムで実態はほとんど model や api に実装 することでslack.rb のスリム化の実現と可読性を上げた • たった 75 ⾏!
実装 ‒ model
実装 ‒ model • Retriever Model (以後 Diva Model) によって
クラスモデルを提供 • 各モデルクラスは親であるDiva Modelを継承する • モデルの定義によって可読性の向上 • モデルごとに、そのモデルが必要な実装を詰める
実装 ‒ model class Message < Diva::Model include Diva::Model::MessageMixin field.has
:user, Plugin::Slack::User, required: true field.string :text, required: true field.time :created field.string :team, required: true field.string :ts, required: true entity_class Diva::Entity::URLEntity entity_class Plugin::Slack::Entity::MessageEntity end
実装 ‒ api
実装 ‒ api • slack-api を通して API から得た情報を model に格納したり、
情報をキャッシュしたり • ネットワークが介在するので基本的に Deferred オブジェクト によって形成されている • Deferred オブジェクトを返すのでエラーハンドリングや⾮同期 が格段に楽に • Auth は闇 • 抽象化によって処理がわかりやすい・追いやすいコードに
実装 - api • 実際の画⾯を⾒せる
実装 - api
実装 ‒ entity
実装 ‒ entity • Slack の特殊な⽂字( @, # などから始まるものや URL)は
内部的には <@hoge>, <#foo>, <https://example…> といっ た形になっている • それらをパースする機能を持つのが MessageEntity • mikutter 提供する Diva::Entity::RegexEntity によって実現 • filter() で対象をフィルタリングし、その対象を整形し、返す
実装 ‒ entity MessageEntity = Diva::Entity::RegexpEntity .filter(/マッチ/, generator: lambda {
|s| e_url = s[:url] e_face = s[:face] e_open = s[:open] s.merge(url: e_url, face: e_face, open: e_open) }) .filter(…) …
実装 ‒ entity
できてること • リードオンリー • パブリックチャンネルの取得 • プライベートチャンネルの取得 • そのユーザの権限で取ることができるすべての情報の取得 •
ただし取れているだけ • 絵⽂字を画像として開く • チャンネルを新しいタブで開く
今後の予定 • World に対応 • 書き込みに対応 • マルチアカウントに対応 • Bot
の投稿に対応 • 切断時の再接続処理 • slack-api の依存関係で⼊ってくるライブラリのバージョンを どこかに明記する