Diverse developer blog

株式会社Diverse(ダイバース) 開発者ブログです。

GithubでSlackのカスタム絵文字を表示する方法

こんにちは!

Diverse 結婚支援事業部 アプリエンジニアの @yuta-fujita-dvs です!


みなさんはSlackのカスタム絵文字大好きですか!?
みなさん大好きということで、今回はGithubでカスタム絵文字を表示するChrome拡張を
作りました!

何を作ったの?

f:id:yuta-fujita-dvs:20160808195823p:plain
これが

f:id:yuta-fujita-dvs:20160817164529p:plain
こうなります。


これを見たあなたはホッコリとした安らぎが得られるているのではないか・・・と思います。

ソースコード

GitHub - SAMUKEI/emoji-chrome


インストール方法はREADMEを参照ください。
フィードバック大歓迎です!

困ったこと

Chrome拡張の実装時に困ったことと対処内容をまとめます。
今後Chrome拡張を作成する際に参考にしてください!

Chrome拡張で外部リソースにアクセスできない

原因

一般的に外部リソースの画像を表示する際には、

<img src="http://hogehoge.com/hoge.png">

のように記載すると思いますが、Chrome拡張においては外部リソースへのアクセスは
Content Security Policy に違反するためできません。

対処方法

公式ドキュメント の解決策を参考に、XMLHttpRequestを利用する必要があります。

対応例

GitHub - SAMUKEI/emoji-chrome
content.js

    var xhr = new XMLHttpRequest();
    xhr.open('GET', emoji[match], true);
    xhr.responseType = 'blob';
    xhr.onload = function(e) {
      var src = window.URL.createObjectURL(this.response);
      $("#" + _id)[0].src = src;
    };
    xhr.send();

    var img = "<img id=\"" + _id + "\" width=\"32\" height=\"32\" />"
    console.log("img = " + img);
    return img;

Chrome拡張でリアルタイムに画面更新されない
(Issue投稿の直後の絵文字が変換されない)

原因

GithubではIssue投稿、Issueへのコメント投稿などの画面の更新(F5)が行われません。
そのため、$(document).readyではキャッチできません。

対処方法

こちらのQiita記事のように通信をキャッチし、
キャッチしたタイミングで処理を行うことで実現可能です。

対応例

GitHub - SAMUKEI/emoji-chrome
manifest.json

  "permissions": [
    "webRequest",
    "http://*/*",
    "https://*/*"
  ],

background.js

chrome.webRequest.onCompleted.addListener(
  function(details) {
    chrome.tabs.query({
      active: true,
      windowId: chrome.windows.WINDOW_ID_CURRENT
    }, function (result) {
      var currentTab = result.shift();
      chrome.tabs.sendMessage(currentTab.id, details, function() {});
    });
  },
  { urls: [ "<all_urls>" ] },
  [ "responseHeaders" ]
);

content.js

chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
  // 通信完了時の書き換え
  replace();
});

今後(いつか)の改修したいこと

  • キー入力時にサジェストから絵文字選択可能に
  • 速度面が不安なので速度改善など(未計測なので速度計測も)

お約束

 
 

『Androidオールスターズ2』に登壇しました

はじめまして。
株式会社DiverseでYYCのAndroidアプリの開発をしている id:kikuchy です。

f:id:t-amano:20160809173121j:plain

先日開催されました Androidオールスターズ2 に登壇させていただきましたので、この場を借りて報告させていただきます。

eventdots.jp


発表内容

『なるべくコードを書かないAndroid開発』という題でお話させていただきました。

YYCチームでは昨年から今年にかけて、Androidアプリをフルスクラッチでリニューアルするということを行いました。
その際にaptとKotlinを用いてエンジニアが管理すべきコードの削減を行ったので、そこで得たaptとKotlinの知見を元にお話させていただきました。


Q&A

懇親会でいくつか質問を頂いたりしたので、ご紹介します。

Kotlinの導入はどれくらい簡単?

既存のJava + Gradleで作っているプロジェクトがあって、開発IDEにAndroid Studioを使っているのであれば非常に簡単です。
Kotlin公式のドキュメントをご覧ください。ワンコマンドで解決します。

kotlinlang.org

また、KotlinからJavaのコード呼び出すのも、JavaからKotlinのコードを呼び出すのも、通常のJava/Kotlinのコードを呼び出すのと全く変わらない手軽さです。
Bridging-Header的なファイルを用意しなくても良い分、Swift <-> Objective-Cの相互運用よりも簡単だと思います。

ですので、新規に作成するクラスからはKotlinで書き始め、段々Kotlin比率を増やしていく、といったスタイルがおすすめです。
(私達、YYC Androidチームもこの方法を取りました)

チーム開発の際に新しい言語を導入するのは大変ではなかったのか?

以前にShibuya.apkという勉強会でお話させて頂いたことがあります。


自分が社内エバンジェリストになる感じで、新しい言語を学ぶことは楽しい、とメンバーに思ってもらうことが大切だと思います。

Kotlinのデメリットは?

まだ成熟していない言語ですので色々つらいところがありますが、代表的なものをいくつか。

  • コンパイルが遅い
  • AndroidのDataBindingとの相性が悪い
  • kapt (Kotlinのapt) を使うとコンパイルが更に遅くなる & kaptの設定を間違えると不具合が出ることがある

aptのデメリットは?

  • コンパイルが遅くなる
  • Javaのメタプログラミングの知識を(多少)要求される

生成しようとするコードによっては TypeMirrorElement の扱いを要求されることがありますが、その程度だと思います。
(作ろうとするものによりますが…!)


会の雰囲気

他の登壇者の方の発表についてはブログの主旨から外れますので、ここでは書きません。
公開できる登壇者は #eventdots ハッシュタグを付けてスライドを公開しているはずですので、探してみてください。

登壇者の方々はもちろん、聞きに来てくださっていた方々もAndroid開発界隈では有名な方がいらっしゃって、セッションだけでなく懇親会でも、とてもレベルの高いお話を聞くことができました。

全体的になごやかな雰囲気で、懇親会の話も弾み、会場が閉まる直前まで多くの方が残られていました。

主催のdots. 小沢さんから「また来年も開催します!」というお話があったので、来年も開催されたら参加したいと思います。


さいごに

実は私自身、Android開発を始めて1年と少ししか経っておりません。
かなりがむしゃらにやって来ましたが、そのがむしゃらなやり方を許容してくれる環境がDiverseにはあります。

自分を急成長させたいあなた、ぜひDiverseへ!

Diverseに新卒で入社して感じたこと徒然

はじめまして.

Diverse VEAT Product teams でサーバサイドやらせてもらっている@akehata-dvsです.

新卒で株式会社ミクシィに入社して,出向という形でDiverseで働かせてもらっています.

入社してから三ヶ月が経ち,これまでのことを書いていこうと思います.

f:id:t-amano:20160802150354j:plain

入社1日目,入社式に遅刻する

人事に怒られました.以上も以下もありません.この話はこれで終わり.

研修,配属まで

研修では主に社会人としての仕事に取り組む姿勢であったり,基本的なマナーをであったりを叩き込まれました.

技術的な面に関しては、「各部署によって求められているものが違う」という理由で、新卒エンジニアとして横並びで受ける研修はほとんどなく、入社2週間後には各部署で OJTが始まりました.

この辺りのスピード感はさすが大手ベンチャーだなぁと感じました.だらだらと意味があるのかどうかよく分からない研修を受けさせられると辟易としてしまう性格なので,この辺りは本当にありがたいと思っています.

配属後

配属先は動画デーティングアプリのVEATのチーム(VEAT Product teams)でした.

(VEATに関してはこちらのプレスリリースを参照ください)

やったこと

  • 一部のボーナス系のTask実装

  • 管理ページの実装,要望対応

    • ユーザ検索,検閲,その他
  • Capistrano導入

  • いくつかAPIを実装

  • Push系施策いくつか

業務用のソースを書くことの難しさ

VEATはフレームワークにRailsを採用しています.

自分は大学時代にある程度Railsについて勉強していたので,0からのスタートではありませんでしたが,付け焼刃の知識は使い物にならないなというのをすぐに痛感しました.

とりあえずこう書けばこう動く!的なやっつけメンタルではなく,ちゃんと理屈を考えてソースを書くことが必要だと学びました.

それでも自分の知識では限界があるのは当然で,PRを出すたびに「こんな魔術みたいなやり方があるのか…」というソースが出てきて感動する日々が続いています.

RailsだけでなくSQL周りも自分が思っていた以上に全然未熟,というか素人同然でした.最初のうちはN+1問題上等なSQL文ばっかり書いてました.

この辺りの知見というのはやっぱり業務でないと得られないものが多く,しっかりと業務を通じて吸収していきたいと考えています.

意識低い系

業務を通じて感じたことは,いままでの自分のエンジニアとしての意識はあまりにも低かったなぁということです.

  • 「とりあえず動けばいい」

  • 「たぶん大丈夫」

  • 「真似すればいいや」

大学時代はこんな気持ちでソースを書いていましたが,こんなので業務になるわけがないです.

意識が低すぎて自分の体から解脱して地中に埋まってるレベルです.意識埋没系男子.

これに早めに気づけたのも,OJTですぐにプロダクトに直結しているタスクを振ってもらえたからだと思っています.もしじっくりと育てあげる系の研修だったら,自分の意識の低さに気づくのがもっと遅れていたかもしれません.

これに関しては本当に感謝していますし,この経験を絶対に無駄にしないようにしたいです.

今後

とりあえずもっと勉強して早く「一人の戦力」として扱われる人材になりたいです.

いまは半人前どころか下手したら負だったりするので,気合い入れてやっていきます.

あとは他のプロダクトはPerlで書かれているものが多いので,ソース読みながらPerlの方もちょくちょくやっていきたいなぁと思っています.

Diverse技術研究所 にも所属しているので,こちらの方でも何らかの成果を出していきたいです.

株式会社Diverseのdeveloper blogをはじめます

こんにちは。株式会社Diverse で CTO をしている天野です。

Diverse はマッチングサービスを開発・運営している会社です。詳しくは、公式blog をご覧ください。

このブログでは、私たちが主にどのような技術を用いてサービスを開発・運営しているか、などについて書いていきたいと思います。

よろしくお願いします。

f:id:t-amano:20160801125716j:plain:w400