ポジティブ丸メガネ

3年目エンジニアです。

Swift×Eurekaで簡単に設定画面を作る

私が作ったアプリに設定画面を追加したくなり、色々探してみて簡単に作れたので備忘録として残します。

読んだ。

読んだ。

  • Seiya Mogami
  • 仕事効率化
  • 無料

設定画面を作る方法案

とりあえずぐぐってみると、便利そうなライブラリは下記2つくらいでした。
github.com
github.com

QuickDialogはSwiftで実装している記事がなかなか見つからなかったのと、全然更新されていなかったのでEurekaを使うことに。

導入

GitHubのReadMeの下の方にInstallationがあるのでそこ参考にすればいけるかと。

設定画面を作る

まず、Storyboardで設定画面のViewを作成します。適当にSettingsViewControllerとかにしました。対応するSwiftファイルを作成し、下記のようにコードを書きました。

import Foundation
import Eureka


class SettingsViewController : FormViewController{
    
    let userDefault = NSUserDefaults.standardUserDefaults()
    let itunesURL:String = "itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=xxxx"

    override func viewDidLoad() {
        super.viewDidLoad()
        
        form +++ Section("通知時刻の設定")
        <<< TimeRow(){
            $0.title = "通知時刻"
            if let temp:AnyObject = self.userDefault.objectForKey("Time") {
                $0.value = temp as? NSDate
            }
            
            }.onChange{row in
                self.userDefault.setValue(row.value, forKey: "Time")
        }
        
        form +++ Section()
            <<< LabelRow("Review"){
                $0.title = "AppStoreで評価する"
                }.onCellSelection(){row in
                    self.userDefault.setBool(true, forKey: "Review")
                    let url = NSURL(string:self.itunesURL)
                    let app:UIApplication = UIApplication.sharedApplication()
                    app.openURL(url!)
        }
    }
}

どんな動きをするかは、コードを見ればわかると思いますが、実際触ってみたい方はアプリをインストールしてみてください。どんなアプリかは下記参照。
seiya-orz.hatenablog.com

入力された値は「row.value」に格納されます。ただ、型がわからなかったのでどう扱えばよいか苦しみました。そんなときは「row.value.dynamicType」をprintすればどんな型で格納されているかわかるので、デバッグしてみてください。


詳しい書き方はGitHub見るか、下記サイトを見ればなんとかなると思います。
blog.personal-factory.com

終わり。

Raspberry Pi × hubot × Slackでbot運用

家でのうのうと過ごしているラズパイに仕事をさせるため、Hubotいれてみました。
macからssh接続で作業してます。参考にしたのは下記サイト。
www.tapun.net

ラズパイのセットアップ

まずはnpmのアップデートから。

sudo npm install -g npm

続いてnodejsのアップデートのためにnというnodejsのバージョン管理ソフトをインストール。

sudo npm install -g n

そしてnodejsの安定版をインストール。

#安定版インストール
n stable
#最新版インストール
n latest


ここからはhubot関係をインストールします。
yoとgenerator-hubotとcoffee-scriptを入れます。

sudo npm install -g yo generator-hubot coffee-script

続いてbotの作成です。任意の場所にディレクトリを作成し、その中でbotを管理します。

mkdir mybot
cd mybot
yo hubot

うまく動くと下の画像が表示されます。
f:id:seiya-orz:20160625211518p:plain

色々聞かれるので適当に入力。ただし、Bot adapterは必ずslackと答えること。

ローカルで動作確認のために、mybotディレクトリで以下の入力。

bin/hubot

もしかしたら、nodejsとかnpmとかのバージョンが古い的なことを言われるかもしれません。その場合は上記のアップデートをすれば突破できるはず。
pingとなげればPONGと帰ってこれば正常に動作しています。正常な動作が確認できれば、control+cで一旦hubot終了。次はSlack側の設定です。

Slackの設定

Webでもデスクトップアプリでもどっちでもよいですが、追加したいチームの「Apps&Integrations」をクリック。Slackのページに飛びます。
そこの左側のFeatured>Brilliant Botsをクリック。一番上にHubotが出てきているはずなのでHubotをクリック。
Add ConfigurationボタンをクリックしてBotの情報を入力していきます。Botの名前を入力すると、API Tokenが表示されるのでそれをコピーしておきます。
再びラズパイへ戻ります。

BotをSlackで動作させる

設定ファイルを編集します。

vim bin/hubot

すると下記が表示されるはずなのでAPI Tokenを記入します。

#!/bin/sh

set -e

npm install
export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"
#ここに先ほどWebページで取得したAPI Tokenを書きます。
export HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxx(自分のものを入力)

exec node_modules/.bin/hubot --name "mybot" "$@"

Slackで動作させる準備が整ったので、下記を実行します。

bin/hubot -a slack

Slack上でBotがオンラインになれば動作しています。先程と同様にpingを投げるとPONGが返ってくるはずです。

動作させたいScriptは、mybot/scriptsのなかに.coffeeでかけば勝手に読み込んでくれます。複数ファイル置いておいても全て読み込んで実行してくれます。
書き方は下記サイトが参考になりました。
blog.fumiz.me

Hubotのデーモン化(バックグラウンド動作)

現在の状態のままだと、MacSSH接続を解除してしまうとHubotも停止してしまいますので、ラズパイのバックグラウンドで動作させるためにHubotのデーモン化を行います。

nodeをデーモンとして動かすためのソフトforeverをインストール。

sudo npm install -g forever

Hubotを動かすために叩いているbin/hubotを以下のように書き換えます(execをコメントアウト、foreverを追加)。

#!/bin/sh

set -e

npm install
export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH"

forever start -w -c coffee node_modules/.bin/hubot -a slack
# exec node_modules/.bin/hubot --name "mybot" "$@"

これでBotが起動していればデーモン化完了です。

まとめ

思っていたよりも簡単に導入できてビックリしました。いろんなとこで少しずつつまずいてちょっと時間かかりましたけど。

ここからはコードをバリバリかいて自分だけの便利Botを作っていくだけですね。



おわり。

Raspberry Piを自宅Webサーバー化するための設定

前回のラズパイ初期設定記事はこちら。
キーボードもマウスも使わずにsshでRaspberry Pi Model Bを使えるようにした for Mac OSX - ぽじてぃぶしんきんぐ

ラズパイを自宅Webサーバー化したので備忘録として書きました。

参考にしたサイト様

ぐぐったらたくさん出てきましたが、こちらを主に参考にしてやりました。
shutosg.hatenadiary.com

やったことの流れ

  1. ラズパイのプライベートIPの固定
  2. apache2の導入
  3. ルータの設定
  4. ドメイン取得
  5. ddclientの導入

ざっくりとこんな感じです。

実施環境としては

です。

IPアドレスの固定

ラズパイのIPを固定します。Jessieの場合は少し違うようで、こちらを参考にしてやりました。
qiita.com

/etc/dhcpcd.confに以下のように追記してreboot

interface eth0
static ip_address=192.168.10.15/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1

192.168.0.*の部分はご自身の環境にあわせて変えてください。Atermの場合はこれでいけるとおもいます。

Apache2の導入

以下のコマンドで導入します。

sudo apt-get install apache2  #apacheの導入

導入できたら、Macとかのブラウザに先ほど設定したIP(例では192.168.10.15)にアクセスできるようになっているはずです。It works!とか出てたらバッチリ。

設定はめんどくさいのでとりあえず初期設定のままで。

ルータの設定

これが非常に苦労しました。

ポートマッピング自体は簡単でした。ポート80(Http)を開放して、ルータのWAN側のアドレス(グローバルIP)にアクセスされれば、ラズパイのプライベートIP(192.168.10.15)のポート80番へ飛ばすようにすればいいだけです。

ただ、Aterm特有なのかもしれませんが、ローカルIP(例だと192.168.10.*)からグローバルIP経由でラズパイにアクセスできません。タイムアウトするのです。外部サイト(ポートチェック【外部からポート開放確認】)を使ってアクセスするとできましたので、ルータが悪いことはわかっていましたが、なかなか解決できません。LTE回線使うとラズパイにアクセスできますので、まあいいっちゃいいんですが。

この部分は未解決です。とりあえず外部からラズパイが見えるようになったのでOKとしました。

ドメインの取得

僕はこちらを使いました。
www.dot.tk

ddclientの導入に、DotTKに登録したメールアドレスとパスワードが必要になりますので、Facebookで登録するのではなく、メールアドレスで登録するようにしましょう。

こちらが参考になります。
qapla.blog52.fc2.com

ddclientの導入

我が家はアパートの部屋ごとに個別に契約しているので、グローバルIPISP次第となります。

僕の場合はグローバルIPは動的に割り当てられているため、DDNSを利用する必要があります。それをいい感じにやってくれるのがddclientです。これも先ほどのサイトを参考にすればうまく設定できるかと思います。

まとめ

最後の方は雑になってしまいましたが、ひとまずこれで自宅Webサーバー化できました。ルーターの問題はなんとか解決したいですが。

次はFTPでファイルをアップロードできるようにしたいと思います。