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
0
440
mWWDC2017
mikutter World Wide Developers Conference 2017 の資料
ahiru
May 27, 2017
Tweet
Share
More Decks by ahiru
See All by ahiru
tokaido lug 2019-03-09
na0ki
1
100
OSC名古屋東海道らぐLT
na0ki
0
570
osc hamanako 2017 LT
na0ki
1
97
OSC Osaka 2017 LT
na0ki
0
140
OSC Nagoya Tokaidou LUG LT
na0ki
0
120
Tokaido LUG 2016.02.20
na0ki
0
890
Other Decks in Technology
See All in Technology
20240321_生成AI時代のDevOps
kzkmaeda
2
600
なんで私に登壇依頼が?! ~頼られるエンジニアになるためには~ /
mixi_engineers
PRO
2
190
XRミーティング 2024-03-20
1ftseabass
PRO
0
100
技術広報として2023年度に頑張ったこと / What we did well in FY2023 as a DevRel
pauli
5
450
家族アルバム みてねで直面してきた技術的負債 / MIXI KAG 2024
isaoshimizu
17
7.7k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
11
2.6k
AMLD 2024 - Build Your Own GPT
donlelef
1
260
学生としてRSGT2024に参加して得られた学び / Lessons learned from participating in RSGT2024 as a student
fujiemon
0
110
大規模なアジャイル開発の現場と技術負債 / Technical Debt
yoshiitaka
20
3.9k
本気でプロダクトに向き合うCTOになるために必要な事 (技育祭2024春)
mosa_siru
45
14k
業務で使えるかもしれない…!?GitHub Actions の Tips 集 / CI/CD Test Night #7
ponkio_o
PRO
22
6.5k
TCA入門したてなので、自分が馴染みのある実装と比較しながらキャッチアップしてみる
fumiyasac0921
1
370
Featured
See All Featured
Code Review Best Practice
trishagee
54
15k
Code Reviewing Like a Champion
maltzj
512
39k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
8
8.2k
How to name files
jennybc
62
92k
The Power of CSS Pseudo Elements
geoffreycrofte
58
4.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Done Done
chrislema
178
15k
Art, The Web, and Tiny UX
lynnandtonic
288
19k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
57
14k
How to Ace a Technical Interview
jacobian
272
22k
The Art of Programming - Codeland 2020
erikaheidi
40
12k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
18
6.8k
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 の依存関係で⼊ってくるライブラリのバージョンを どこかに明記する