この記事は リクルートライフスタイル Advent Calendar 2016 の16日目の記事です。
はじめに
ホットペッパービューティーでiOSの開発を担当してる@sotozakiです。
エンジニアのコミュニケーションツールといえばSlackですが、iOSエンジニアだって普段書いてる言語(Swift)でSlack Botを作りたい!
そんなわけで、今回はiOSエンジニアならみんな大好きなSwiftでSlack Botを作ってみます!
環境
バージョン | |
---|---|
Swift | 3.0.1 |
Xcode | 8.1 |
完成したもの
swift
という発言に対してBotがGitHubのURLを答えてくれます。
事前準備
こちらからBotのAPI Tokenを取得しておいてください
https://my.slack.com/services/new/bot
API Tokenは下記のような形式で与えられます。
xoxb-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ここでIcon等の設定もしておくと良いと思います。
Slack Botの作り方
今回はSwiftで書かれたSlack Client用のライブラリがあるのでこれを使います。
https://github.com/pvzig/SlackKit
iOS開発で一般的なライブラリ管理のCocoaPods, Carthageでインストールできますが、
今回はせっかくなのでSwiftと同時に公開されたSwift Package Manageer (SwiftPM)をつかってみます。
プロジェクトのセットアップ
まずはSwiftPMを使ってプロジェクトを生成します
$ mkdir SwiftBot
$ cd SwiftBot
$ swift package init --type executable
$ swift build
$ ./.build/debug/SwiftBot
Hello, world!
ここまででHello Worldが出来ています。SwiftPMも結構便利ですね!
SlackKitの追加
Package.swiftを編集してSlackKitを追加してください
import PackageDescription
let package = Package(
name: "SwiftBot",
dependencies: [
.Package(url: "https://github.com/pvzig/SlackKit.git", majorVersion: 3)
]
)
追加した後にもう一度Buildすることでライブラリを追加できます。
$ swift build
Xcodeプロジェクトの作成
iOS開発でおなじみのXcodeで編集したい方はXcodeプロジェクトも生成します。
Xcodeプロジェクトの生成もSwiftPMから簡単に行えます!
$ swift package generate-xcodeproj
Swift Botの実装
プロジェクトを開き、ソースを以下のように編集します。
API TokenはSlackから取得したものに置き換えてください
import Foundation
import SlackKit
class SwiftBot: MessageEventsDelegate {
let bot: SlackKit
init(token: String) {
bot = SlackKit(withAPIToken: token)
bot.onClientInitalization = { (client: Client) in
client.messageEventsDelegate = self
}
}
func received(_ message: Message, client: Client) {
guard let text = message.text, let channel = message.channel else { return }
if text == "swift" {
client.webAPI.sendMessage(channel,
text: "https://github.com/apple/swift",
asUser: true,
success: nil,
failure: nil)
}
}
func sent(_ message: Message, client: Client) {}
func changed(_ message: Message, client: Client) {}
func deleted(_ message: Message?, client: Client) {}
}
print("SwiftBot is Running")
let bot = SwiftBot(token: "xoxb-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
RunLoop.main.run()
ここではMessageEventsDelegateを適合したSwiftBotクラスを定義しています。
4つのDelegate Methodが用意されていますが、receivedメソッド内でSlackの発言を監視して応答しています。
SlackKitには他にもさまざまなDelegateが用意されているので詳しくはhttps://github.com/pvzig/SlackKit を参照してください。
Botの起動
XcodeのRun(Cmd + R)
もしくは
$ swift build
$ ./.build/debug/SwiftBot
SwiftBot is Running
で起動できます。
ここまででSlack上でオンラインになっていることを確認してください
Botの応答
Slackの適当なチャンネルにBotを招待して"swift"と発言してみましょう
ちゃんと動作してBotがswiftのGitHubレポジトリのURLを返してくれました!
終わりに
SwiftでSlack Botを作成する手法を紹介しました。
CIやfastlaneなどを連携すると面白いですね!