🍮 Prpr: bot for github pull request
prprというgithubのプルリクエストに反応するボットを作った。
プルリクエストに関する運用が増えてきたので、ガーっと作った。
プラグイン
gemを追加することで、挙動を追加できる。
source 'https://rubygems.org' ruby '2.2.3' gem 'prpr' # メッセージの通知先をslackにする gem 'prpr-slack' # 「REVIEW」ラベルをつけたときに、チャットサービス(例: slack)にレビュー依頼を通知する。 gem 'prpr-review_label' # コメントで @mention をしたときに、チャットサービス(例: slack)に通知通知する。 # mention名は適宜読み替えられる。 gem 'prpr-mention_comment' # プルリクエストの作成時に、チェックリストを投稿する。 gem 'prpr-checklist' # コンフリクトしているプルリクエストに「conflict」ラベルをつける。 gem 'prpr-conflict_label' # Gemfile.lockを更新する際に、マイナー・メジャーバージョンが変わっている箇所に注釈を付ける gem 'prpr-gemfile'
実行例
Herokuへのデプロイ
prpr-templateをHerokuにデプロイすれば、ほぼそのまま動く。 Deploy to Herokuボタンをつけてあるので、簡単にデプロイできると思う。
Tl; dr
Ruboty
いくつかの箇所でrubotyのアイデアやコードを参考にしている。 gemによって挙動を拡張する点や、クラスごとの責務の切り方などについては特に強い影響を受けている。
このおかげでだいぶ速く開発することができた。
Github上のボット
Github上のボットはすでにいくつか作成されている。
例えば、今回やっていることはアプリ開発の品質底上げ施策をWebhooksでBotが支援する世界 - クックパッド開発者ブログに近い。 また、Webhookに反応するわけではないが行末のスペースを自動で消すWhitespace botもある。自分もタブとスペースの混在を検知するSpace tab botを作ったことがある。
ただコードが公開されていて挙動を自由に拡張できるボットは見つけれなかったので、今回作った。 もしあるなら、教えてほしい。
名前
Githubのプルリクエストに反応するボットの名前、「prpr」ではどうか、みたいな話になってる。
— mzp (@mzp) 2015, 9月 2
「Prpr is github pull request bot. It pronounced as "pero-pero”.」「え、そのasはあずにゃんって意味?」「あずぺろ…!」
— mzp (@mzp) September 2, 2015
というのが名前の由来だが、mzp/prprというレポジトリ名がちょっと嫌になったので、特に読み方は指定しないことにした。 もしくはぷるぷる。
設計
なぜこのような設計にしたかについては別エントリを書いた。
🐸FlickSKK 1.4.1: 細かな修正
iOS用SKK: FlickSKKにいくつかの修正を行ない、1.4.1としてリリースした。 iPhone 6sがそろそろ発表される気配があるので、その前に修正をリリースしておきたかった。
https://itunes.apple.com/jp/app/flickskk/id944678753?mt=8
修正内容
補完候補を半透明に表示する
今までは自動で補完される候補(ダイナミック補完)は灰色で表示していた。 しかし、絵文字は灰色では表示できないため、通常の変換候補と区別ができなかった。
そこで、半透明で表示するように変更し、区別できるようにした。
謝辞の表示
1.4.0でAlamofireを使うようにしたが、謝辞を表示するのを忘れていたの追加した。
次のバージョンでやりたいこと
iPhone 6sでフォースタッチでついたら、#120 フォースタッチを実装してみるのまともな実装を作りたい。 シフトから開放されたい。
それはそれとして、そろそろ#21 ユーザー辞書をiCloud同期するにも手をつけたい。
⌚️進捗どうですか
AppleWatchアプリの練習で、アリスもしくはカレンが進捗を問い詰めてくるアプリを作った。
作ったのがWWDC2015前なので、watchOS 2ではない。
グランス
「進捗を大きくする」というメッセージとともにこれがコミットされてた pic.twitter.com/jhVRvYp4gw
— mzp (@mzp) 2015, 5月 25
グランスに画像を表示しているので、腕をもちあげると常に進捗を問い詰められる。
通知
— mzp (@mzp) 2015, 6月 5
進捗時計、Push通知に対応したので、毎時これが来ます。 pic.twitter.com/Aq1mUV99OW
— mzp (@mzp) 2015, 6月 4
LocalNotificationを使って毎時30分に進捗を聞いてくる。
watchOSの通知にはstaticとdynamicの2種類があり、以下のルールで使い分けられる。(と@banjunが言っていた)
- 通知のカテゴリーが合っている(staticでもdynamicでも)
- NotificationControllerで.Custom返す
- NotificationControllerがもたもたしない(どんだけでstaticにフォールバックするか謎だけど,コンソールみてるとそこそこフォールバックしてる)
- 通知が来たときだけ(あとから通知センターでみるのはstatic)
- バッテリーがある
- 他の通知と重ならない
iOS アプリ
進捗時計の設定画面です pic.twitter.com/emcK0iP70Z
— mzp (@mzp) 2015, 6月 3
iOSアプリでは、進捗を問いつめる画像を選択できる。
iOSアプリとwatchkitアプリの間でのデータのやり取りはAppGroupを用いる。
その他知見
今日の学び: プロジェクト名をShinchokuにすると渋い表示がでてくる pic.twitter.com/J13AVzLwLD
— mzp (@mzp) 2015, 6月 1
FlickSKK 1.4: 追加辞書対応
iOS用SKK: FlickSKKに追加辞書機能を追加し、1.4としてリリースした。
https://itunes.apple.com/jp/app/flickskk/id944678753?mt=8
新機能: 追加辞書
これまでFlickSKKで使えたのはL辞書とユーザ辞書のみだったが、今回から任意のSKK辞書を追加できるようした。
より正確には以下の辞書を追加できるようになった。
- EUC-JPもしくはUTF-8のSKK辞書
- 共有辞書 (ユーザ辞書のみに出現する送りありエントリのブロック形式には対応していない)
また辞書一覧はOpenlab SKK Wikiにあったはずだが今は落ちてるので、 Index of /skk/skk/dicから選ぶのがいいと思う。
余談
ノウハウの共有
FlickSKK開発で(@banjunが)つちかった知見を外部に切り出した。
- NorthLayout: auto layoutのラッパ
- iOS - 個人用アカウントでAppGroupを用いたチーム開発を行なう - Qiita: AppGroupの運用方法
長野旅行
今回は長野を旅行しながらリリース作業を行ないました。星空が最高だったので、夏の大三角を指さしてきました。
2000年ごろのインターネットを懐しむ会 #インターネット老人会
2000年ごろのインターネットを懐しむ会を開催した。
発端
@bleis 懐古の会、そのうちやりましょう。
— mzp (@mzp) 2015, 5月 6
@bleisのプロジェクトが一段落したらやる計画だったが、色々あってプロジェクトが終わる前に開催することとなった。
なお開催日の案としては、8月6日のミートパイ記念日にやる案もあったが、わりと先だったためボツとなった。
命名
冬にたい焼きやアイスを食べてもなんの感慨もいだかない人間になってしまった
— mzp (@mzp) 2014, 12月 8
— 進捗ますます厳しい (@dmp) 2014, 12月 8
— ユリア・クソリプニツカヤ (@teracy) 2014, 12月 8
インターネット老人会だ
— てるろー (@terurou) 2014, 12月 8
関連
- 2000年ごろのインターネットを懐かしむ会 #インターネット老人会 - Togetterまとめ
- #インターネット老人会 がキレッキレすぎる - さまざまなめりっと
- どれもこれも懐かしすぎるだろ…… Twitterハッシュタグ「インターネット老人会」で時の流れを実感する - ねとらぼ
知見の共有
施設
- 安い。30人の部屋を半日借りて3500円だった。プロジェクタとホワイトボードもついてくる。
- 安く借りるには、刈谷市およびその近隣の市に在住・勤務している必要があるが、愛知県の特殊性として知り合い数人いれば条件に該当する人がいる。
- 設備が充実してて、各部屋の前に電光掲示板がある。これにイベント名が表示されると、結構おもしろい。(参考)
- となりがスーパーになっているのでおやつを買いにいける。鯛焼きとかアイスを買うとよい。
- LANポートはあるがWifiはない。
ustream
ネットワーク環境が確保できるか怪しかったのと、リモートを意識して話すのが難しそうだったので、わりと初期に断念した。実際、後半は全員でわいわい話す感じになっていたので、ustreamでの視聴は難しかったと思う。
「愛知は遠い。ustreamしてほしい」という声は何人かからもらったので、東京で誰か開催するといいと思う。
伺か
伺かはWindows 8.1でも問題なく動作する。 ただしヘッドライン等は更新が停止してしまっているので、事実上動作しない。
盛り上ったテーマ
写真で見るインターネット老人会
🔡AquaSKK 4.2.6(コード署名の追加)
MacとiOSの開発プログラムが統合されMac用アプリにコード署名が行なえるようになったので、AquaSKKのインストーラにコード署名を行なった。
簡単に言うと以下の警告がでないようになった。
ダウンロード
https://github.com/codefirst/aquaskk/releases/tag/4.2.6
変更内容
インストーラパッケージの変更
これでのAquaSKKはIcebergを用いてインストーラの作成を行なっていた。 しかし、このインストーラでは形式が古く署名が行なえなかったので、インストーラの作成方法を変更した。
主な変更点は以下の通り。通常使う上で気にする内容はない。
- Icebergではなく、標準的な
pkgbuild
/productbuild
を使うようにした。 - インストーラ内で起動していた、TSM版AquaSKK(Leopard以前で動作していたバージョン)からの移行スクリプトを廃止した。
- コード署名を行なうようにした。
OpenJDKへの対応
OracleJDKで作成されたアプリケーションはl/L/qでの入力切り替えがうまくいかない問題があるので回避策が実装されている。 同様の回避策がOpenJDKで作成されたアプリケーションでも動作するように変更を加えた。
WWDC合宿
WWDC外れたので,日本でWWDCキーノートをみてSDKダウンロードして,今年から配信のセッション動画ストリーミングもみつつ,なんかつくる合宿というのをやりたいけど,そういうのできそうな宿とかコワーキングスペースがないものか。
— ばんじゅん(!!) (@banjun) 2015, 4月 21
HaLakeおよびその周辺でWWDC合宿をやってきた。WWDCでの発表内容自体は各所で解説されているので、それ以外について書く。
WWDC合宿待機 pic.twitter.com/rxHsQpPMB6
— えいとす(a.k.a. あちょす) (@athos0220) 2015, 6月 8
スケジュール
WWDCのセッションは日本時間の1:00 AMに開始されるので、その前までに寝ておかないといけない。そのため、夕方に仮眠したのち、深夜に起きて活動する、という生活をしていた。
視聴
WWDCの視聴はAppleTVの専用チャンネルが便利だった。
Keynoteはmacwebcasterによる同時通訳があったが、それ以外は英語のまま聞いていた。単語くらいしか聞きとれなかったが、スライドをみていればなんとかなった。
プログラム統合
iOS Developer ProgramとMac Developer Programが統合されたことがわかった直後の@banjunの反応がおもしろかった。
ぼく「iOS Developer programとMac Developer programが統合されたらしいですよ」ばんじゅん「ファッ。昨日、両方とも更新の手続きしましたよ??」
— mzp (@mzp) 2015, 6月 8
昨日ios developer programとmac developer programをrenewしたのが私です
— ばんじゅん(!!) (@banjun) 2015, 6月 8
Mac
Apple製品が集まったので、だいぶおもしろいことになっていた。
謎儀式 pic.twitter.com/6Nj9aIBByh
— mzp (@mzp) 2015, 6月 8
Xcodeを共有するためにAirDropを起動したらすごいことになってた。 pic.twitter.com/tjC629IpbG
— mzp (@mzp) 2015, 6月 8
HaLake
合宿(と仮眠)以外の時間は、HaLakeでリモート勤務していた。 広くてキレイで最高だった。あと1階下がカフェになってて、すぐにコーヒー買いにいけるのがかなりよかった。