Electron で Slack 風UIの HipChat クライアントを作っている話

この記事は Electron Advent Calendar 2015 - Qiita の1日目の記事です。

ここ最近作っているアプリについてまとめる。


アプリについて

HipChat をギョームで使っているが、巷では Slack が流行しており、乗り換えたい願望が高まっている。
しかし乗り換えにはコストの面でハードルがある。


そこでSlack風味なHipChatクライアントがあれば面白いかもと、作っている。
ただ作るだけでは面白くないので、未経験だった技術(Electron, AngularJS, gulp)を使っている。



まだまだいろんな機能が足りてないが、ちょっとメッセージを送る程度には使える。
HipChat 公式クライアントは最後に開いたRoom(SlackでいうところのChannel)がデバイス間をまたいで微妙に同期する仕様。
別PCで少しRoomを開き、元のPCで見ると開いていた大量のRoomが勝手に閉じられたりする。
こういう問題を回避するのに有効。


余談だが HipChat Webクライアントのコンソールのログで採用募集しててウケた。

f:id:khei-fuji:20151129170804p:plain

Electron と AngularJS との相性

元々よくなさそうという話は見かけていた。

既に語られてる部分は省略し、実感したよくないところを書く。

設計のコンフリクト

AngularJS を使うメリットの一つに、どういう機能はどこで実装すればいいかが迷わなくて済むというものがある。
一方、Electron ではレンダリングプロセスとバックグラウンドプロセスが存在しており、レンダリング以外の仕事はバックグラウンドに持っていくことが推奨されている。もちろん AngularJS はレンダリングプロセスに存在する。

つまり AngularJS と Electron が設計面でコンフリクトしており、お互いの良さを打ち消し合ってしまうことになる。
(HipSlack v0.0.1 ではよくわかっておらず、平気でレンダリングプロセスを使いまくっている)

データバインディングのあやしい挙動

リモートオブジェクトをバインディングに使うと、同じ controller にバインディングしている textarea の日本語IMEの挙動がおかしくなる。


f:id:khei-fuji:20151129172305g:plain

IMEの変換中の文字列がバインディングに取り込まれてしまっている模様。

最低限のコードをまとめたサンプル

自動化

最初はわけもわからず generator-angular から grunt を使ってた。
いざ自分でいじろうと思ったら意味がわからず、gulp でイチから書き直した。

とはいっても gulp のプラグインを組み合わせただけ。

  • gulp lint で構文チェック
  • gulp serve でビルド、Electron 起動
  • gulp package で製品のパッケージ作成

これくらいできれば十分。(テストは!?)
これから始めるなら grunt より gulp がいいと思う。

今後

ES6 or TypeScript

素の JavaScript を書くとツライのでどうにかしたほうがいい。

HipSlack の開発では VisualStudioCode を使っている。
Microsoft/vscode · GitHub をVisualStudioCode で開いてみたところ、TypeScript の関数定義の移動がかなり使いやすかった。
まさに VisualStudio の名を受け継いでいる感じ。
ということで TypeScript に傾きつつある。

Push通知

チャットアプリなのにリアルタイムに更新されないとかありえない。
HipChat には Webhooks が用意されているので、それを使って push 通知したい。

ChromeでW3C Push APIを使ってみた - Qiita を参考に実装していた。
が、現在の Chromium のバージョンが低くてムリっぽい。

Registration failed - push service not available

AngularJS を捨てる

Electron と AngularJS の相性がよくないと実感できた。
React あたりに置き換えるのがよさそう。
もともと AngularJS を触りたくてやってただけなので全くこだわりはない。

自動アップデート

手軽にできそうなので気になっている。
このへんとか。
jenslind/electron-gh-releases · GitHub

参考資料

お世話になった記事。

最後に

Electron は MS が採用してきたりと、いわゆるWeb系ではない人(僕みたいなエンタープライズ系)でも関わりやすい、面白い技術だと思う。
なのでいろんな人が手を動かしてみるといいんじゃないかな。


明日は Quramy さんです。


AngularJS 使い始めて踏み抜いた箇所

AngularJS 使い始めて、何やるにしてもググってばかりなので、Google の戦略なのかもしれない。

スコープ

イベント


AngularJSライブラリ 活用レシピ 厳選 108

AngularJSライブラリ 活用レシピ 厳選 108

2015年に Amazon で買ってよかったもの

今週のお題「今年買って良かったモノ」

毎年書くのが恒例になりつつある。


生活用品

この値段で満足度の高い椅子が買えるとは思わなかった。
見た目もいいし、リビングに置けばそこが指定席になる。


こだわりはなかったけど、これを使い始めてから家や職場といたるところに置いて、他のペンを排除したくらいに快適になった。


ショルダーバッグを使って MacBookPro を持ち歩いていて肩が痛い気がしてきたのでリュックを購入。
そこそこの収納力もあり、見た目もよく、安いと三拍子揃っている。
と思ったらこれを書いてる時点で在庫切れしてる。


カルビー フルグラ 800g×6袋

カルビー フルグラ 800g×6袋

フルグラは最高の保存食。
長持ちするし、箱を常備しておくことで災害時の非常食にもなると期待している。
数ヶ月に1度買うペース。


家電

録画生活に革命が起きた。
録画アプリの使い勝手が最高によい。
くれぐれも再生環境を把握してから買うべき。


小型の掃除機の中ではコストパフォーマンスに優れている。
無難にまとめるなら。


トレーニング

外をランニングする気を失わせる有酸素運動マシーン。
ジム通いが続かなかったので、季節に関係なく気が向いたときに映画やアニメでも観ながら運動できるのはなかなかよい。


XYSTUS(ジスタス) スリムトレーナーTR H-7218

XYSTUS(ジスタス) スリムトレーナーTR H-7218

腹筋を割るという夢を叶えるために続けている。
正しいやり方でないと効かないし体を痛めるので Youtubeで調べる のがよい。


おまけ

Splatoon(スプラトゥーン)

Splatoon(スプラトゥーン)

書くまでもないかもしれないが、一応。
買ってから5ヶ月近く経ってるのに未だにたまに遊んでるのはなかなかすごいことな気がする。


最近オブジェクト指向についての話を見かけない

表題のとおり。
最近オブジェクト指向って言葉を聞かないし話さなくなった気がする。
そこで理由を少し考えてみた。

理由

  • デザインパターンやらなんやら、もう語り尽くされた
  • クラウドなどプログラミング技術以外の技術の重要性が高まったので相対的に重要性が下がった
  • 高齢化が進み、ある程度習得した人(と習得する気がない人)が相対的に増えたので語りながら学ぶ人が減った
  • 経験者が相対的に増えたので未経験者はOJT中心で学び、未経験者同士で考えるムダが減った


コードレビューしてて「オブジェクト指向」という言葉を使ったときの久しぶり感がすごかった。


オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

ニコ動のランキングをフィルタする Chrome Extensions、Niconico-Ranking-Filter をつくった

ここしばらく話題に上がっている「マリオメーカー問題」

これを回避するための Chrome Extensions をつくった。


github.com


あくまでも個人用途です。



UPQ Phone A01 ホワイトの封緘(ふうかん)の儀

kheiakiyama.hateblo.jp

先日この記事を書いたばかりだが、以下の問題があった。

UPQが出荷済スマホを全て回収、技適マークの記載ミス - ケータイ Watch


回収ということになったので開封の逆、封緘した。
(対義語がわからなくてググッてしまった)


自宅に届いた封書。


f:id:khei-fuji:20151004100644p:plain



中身は今回の件の説明、スマホの返送用セット


f:id:khei-fuji:20151004100723p:plain

返送の手順書。
データのバックアップ取っておいてね、と注意深く書いてある。


細かい話だけど「パッケージ貼付用ラベル」ってのが微妙にわかりづらかった。
単純に箱って書いてくれればいいのに。


f:id:khei-fuji:20151004100746p:plain

パッケージに貼った。

f:id:khei-fuji:20151004100807p:plain

この後携帯を佐川急便で送った。


さていつ返ってくるやら。


どうでもいいけど UPQ Phone グッズAmazon にそれなりにあって驚く。


UPQ Phone A01 ホワイトが届いたので開封の儀

何かと話題が多い UPQスマホ、UPQ Phone A01 が届いたので開封の儀をはじめる。


www.dmm.com


箱は白を基調としてグリーンがアクセントカラーとなっている。
端末の色と同じ色なんだろうか。




箱を開けてみたところ。
iPhone以外のスマホ開けたことないけど、大体同じような構成だなあ。




付属品を全部出してみた。

  • 端末
  • USB充電器
  • ACアダプタ
  • 充電パック
  • クイックスタートガイド
  • 保証書




SIMカードやSDカードは用意してないが、充電バックを入れないと始まらないので端末をオープン。
リアカバーを開けたところ。
無理に開けようとすると平気で曲がりそうなので、落ち着いて爪で少しずつ開ける。




あとは電源をつけるだけ!!
起動直後はこんな感じ。




本体のストレージ容量は8GBだが、うち4.5GBが埋まっていた。
SDカード挿せばいいし、まあこんなもんでしょ。


f:id:khei-fuji:20150923215221p:plain



ということで開封の儀は終わり。


レビューについてはしばらく使ってからまとめることにする。
それにしても Android 童貞の自分には、スクリーンショットの取り方すらわからなくていろいろツライ。


アプリを作ろう!  Android入門 Android Studio版 Android5対応

アプリを作ろう! Android入門 Android Studio版 Android5対応