55
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【SwiftPM】SwiftでもSlack Botを作りたい

Last updated at Posted at 2016-12-15

この記事は リクルートライフスタイル Advent Calendar 2016 の16日目の記事です。

はじめに

ホットペッパービューティーでiOSの開発を担当してる@sotozakiです。
エンジニアのコミュニケーションツールといえばSlackですが、iOSエンジニアだって普段書いてる言語(Swift)でSlack Botを作りたい!

そんなわけで、今回はiOSエンジニアならみんな大好きなSwiftでSlack Botを作ってみます!

環境

バージョン
Swift 3.0.1
Xcode 8.1

完成したもの

k.png

swiftという発言に対してBotがGitHubのURLを答えてくれます。

事前準備

こちらからBotのAPI Tokenを取得しておいてください
https://my.slack.com/services/new/bot

bot.png token.png

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を追加してください

Package.swift
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から取得したものに置き換えてください

Sources/main.swift
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上でオンラインになっていることを確認してください

Screen Shot 2016-12-11 at 22.30.57.png

Botの応答

Slackの適当なチャンネルにBotを招待して"swift"と発言してみましょう

k.png

ちゃんと動作してBotがswiftのGitHubレポジトリのURLを返してくれました!

終わりに

SwiftでSlack Botを作成する手法を紹介しました。
CIやfastlaneなどを連携すると面白いですね!

55
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?