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
490
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
130
OSC名古屋東海道らぐLT
na0ki
0
630
osc hamanako 2017 LT
na0ki
1
110
OSC Osaka 2017 LT
na0ki
0
140
OSC Nagoya Tokaidou LUG LT
na0ki
0
140
Tokaido LUG 2016.02.20
na0ki
0
900
Other Decks in Technology
See All in Technology
室長と気ままに学ぶマイクロソフトのビジネスアプリケーションとビジネスプロセス
ryoheig0405
0
320
家電アプリ共通PF "Linova" のAPI利用とPostman活用事例ご紹介
yukiogawa
0
130
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
0
150
インフラをつくるとはどういうことなのか、 あるいはPlatform Engineeringについて
nwiizo
5
2.1k
滅・サービスクラス🔥 / Destruction Service Class
sinsoku
6
1.5k
『AWS Distinguished Engineerに学ぶ リトライの技術』 #ARC403/Marc Brooker on Try again: The tools and techniques behind resilient systems
quiver
0
130
日経電子版 x AIエージェントの可能性とAgentic RAGによって提案書生成を行う技術
masahiro_nishimi
1
290
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
15
5.5k
関東Kaggler会LT: 人狼コンペとLLM量子化について
nejumi
3
460
モノレポ開発のエラー、誰が見る?Datadog で実現する適切なトリアージとエスカレーション
biwashi
6
770
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
22
5.8k
データの品質が低いと何が困るのか
kzykmyzw
6
1k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.6k
Thoughts on Productivity
jonyablonski
69
4.5k
Writing Fast Ruby
sferik
628
61k
How to train your dragon (web standard)
notwaldorf
90
5.8k
Done Done
chrislema
182
16k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Designing for humans not robots
tammielis
250
25k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
Bash Introduction
62gerente
610
210k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
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 の依存関係で⼊ってくるライブラリのバージョンを どこかに明記する