maedakazuki

街コンジャパンの開発事例!〜Railsを使った非同期通信〜


こんにちはリンクバルの前田です。
今回は技術部の街コンジャパンチームで作っている機能のご紹介をしたいと思います。

色々あるのですが、直近だと「並び替え」機能が新しいのでこちらを紹介します。

導入背景

  • 以前より、オススメのイベントや価格の安いイベントを見つけたいという要望があった。
  • 4月中旬頃「GW前に何か実装できないか」という議論をチームメンバーで15分間行い施策案を出した。
  • 課題

  • イベント一覧ページに並び替え機能を配置する場所によっては使いづらいページになってしまう
  • 続きを読む


    必見!iOSアプリ審査のためのスクリーンショット基準!


    こんにちはリンクバルの前田です。今回はiOSアプリの審査でメタデータリジェクトされたので、その内容の一部をご紹介します。

    iOSアプリ審査

    いつも通り、iOSアプリを申請していると何故かメタデータのリジェクトが。。。

    We noticed that your screenshots do not sufficiently reflect your app in use.

    Please see attached screenshots for details.

    続きを読む


    Athenaを使ってS3のログファイルを検索してみる


    AWSのサービスにS3のログ解析ツール「Athena」について書かせて頂きます。

    Athenaとは?

    https://aws.amazon.com/jp/athena/

    Amazon Web ServiceのS3にある大量のログをSQLのクエリを書いて抽出できるサービスです。
    大量のファイルが分割されていると解析するのが大変なのですが、

    これらのファイルの入っているパケットを指定してAthenaの設定を完了すると、
    以下のようにSQLクエリを実行するだけで検索できてしまいます。

    SQLクエリは業務で良く書きますので、データベースを触っていたサーバーサイドエンジニアでも使いやすいのではと思いました。

    Athenaの設定方法

    1、データベースを作成する

    2、データフォーマットを指定する


    ※CSVやJSONのデータフォーマットも指定できます。

    3、カラムを指定する

    4、パーティションを指定する


    ※CreateTableを押すとAthenaで利用するデータベースの完成です。

    Athenaを使ってやってみたかったこと

    json形式でファイル出力されたS3のログをキーベースで検索して、簡単にS3のファイルからデータを抽出したかったのですが、結果できませんでした。
    なぜかというと、ファイル転送を挟んだログファイルだったためにファイル自体がtsv形式だったので、json形式のデータフォーマットに適用できなかったためです。
    カラム型にjson型があると嬉しいなと思いました。

    TSV形式での検索

    LIKE検索ができますので、ログ自体の検索はできましたし、レスポンスも遅いわけでもなく使い勝手は良かったです。

    下記、簡単なクエリ例です。SQLと変わらないですね。
    SELECT * FROM table_name WHERE column_name LIKE '%xxxxx%' LIMIT 100;

    まとめ

    AWSを使ってS3に溜まっているログをAthenaを使うだけで抽出できるので、今後も使っていきたいと思います。
    導入も簡単なので、まだ使ったことのない方は試してみるとどうでしょうか。

    最後に

    リンクバルではエンジニアの採用を募集しています。採用はこちら


    CircleCIを使った自動チェックについて


    街コンジャパンの開発ではCircleCIを使って、
    コーディングルールやRailsのテストコードを自動チェックしています。

    CircleCIの自動チェック処理はCircleCIのキューに一度貯めて、
    コンテナという自動チェック処理を行うプロセスがタスクを取り出して一つずつチェックしているようです。

    メリット

    ・開発者が複数でも一定の品質を担保することができる
    ・CircleCIのチェックが通らないとマージできないので実行できないコードを弾くことができる
    ・無料でも使うことができる
    ・GitHubのWebhocksと連携することができる
    ・GitHubアカウントで認証できる

    デメリット

    ・ソースコードが多くなってくると徐々に遅くなってくる
    ・無料版では自動チェックをするコンテナが一つのため、キューがたまりやすく効率が悪くなる

    コンテナを増やすポイント

    コンテナが一つ場合は、15分以上コンパイルを待たないといけないこともありましたので、
    開発効率を上げるためにCircleCIのコンテナを2つ使いました。
    コンテナの数は開発人数にもよるとは思いますが、開発が忙しくなる時期にコンテナを増やすなどの利用も計画的にすることもできると思います。

    まとめ

    Githubと連携して使うことができますのでCommitごとにコーディングルールやテストコードを実行できますので、
    一定基準の品質を担保しつつ共同開発をすることができます。
    無料でも使えるので是非Githubでソースコードを管理されている場合は使ってみると良いと思います。
    ちなみに、コーディングルールの自動チェックはRubocupというgemを使って、設定ファイルでコーディングルール管理をしています。

    最後に

    リンクバルではエンジニアの採用を募集しています。採用はこちら


    カスタマーサポートツール「HelpScout」を使ってみた


    HelpScoutの導入

    つい先日、社内のプロジェクトでサイトをローンチした際に、社内全体からたくさんの問い合わせを受けることがありました。

    その時に導入したのが「HelpScout」というカスタマーサポートツールです。
    https://www.helpscout.net/

    2週間くらい無料で使えたので試しに試験導入しました。

    良かったところ

    このツールは、特定のメールアドレス宛にメールを送るとHelpScout上で問い合わせの管理を行うことができます。
    今までこう言ったツールは使ったことがなかったのですが、実際に使ってみると、問い合わせがメールに埋もれることなく管理することができました。

    _9__assigned_-_help_scout

    各問い合わせに対して優先度付けをしたラベル(low、high、doing等)を貼ることで、状態管理も見やすいことも利点だったと思います。

    気になったところ

    やや使いづらいところとしては、メーラー上でメールを返信するとHelpScout上に新しい問い合わせとして起票されてしまうことや、HelpScout上で返信したメールをメーラーで見ると返信したメールが見れなかったところだったと思います。

    ステータスを「Close」にした問い合わせの返信があった場合、「Open」に自動で変更される機能も面白かったと思いました。
    例を上げると、「ありがとうございました。」というメールが来ると新しい問い合わせとして再Openします。

    おわりに

    簡単に導入することが出来る、使い勝手も良く、現在も使っているHelpScoutのご紹介でした。
    カスタマーサポートツールを使ったことのない方や、少し使ってみようと思われた方は、導入も簡単ですので一度使ってみるのも良いかも知れません。

    リンクバルではエンジニアを募集していますので、ご応募お待ちしております。
    採用ページはこちら


    開発プロジェクトで「Trello」を使ってみた!


    リンクバルの開発プロジェクトで使用している課題管理ツール「Trello(トレロ)」をご紹介したいと思います。

    Trelloを採用した理由
    開発プロジェクトが稼働し始めた当初、開発メンバー同士でまずは大きい機能単位の課題を洗い出し、テキストベースでGoogleDocに書き込んでいました。
    当初は課題を記入するのも簡単で全体像が見えやすかったのですが、開発が進んでいくにつれて課題が先延ばしになるものや完了していくものなど、GoogleDocでの管理では大変になってきました。
    そこで、課題をカードとして作成て優先度の高いカードはリストの上に配置するという運用をカード操作だけできる「Trello」を採用し現在も使っています。

    Trelloの使い方
    まず、ボード(Board)を作ります。ホワイトボードのような位置づけです。
    次に、リスト(List)を作ります。ホワイトボードに縦線を引いて枠を作ったイメージです。
    最後に、カード(Card)を作ります。ホワイトボードに付箋紙を貼るイメージです。
    ボード上に複数のリストを作って、そこにカードを入れて運用します。

    例えば、「やること」「着手中」「完了」というリストを作成したなら、
    「やること」リストにカードを追加し、着手したらカードを「着手中」に移動し、完了したら「完了」に移動する。

    このように操作することで、どんなやることが残っていて、今何をやっていて、何が終わったのかを一つのボードで管理するができます!

    運用ルールのピックアップ
    現在、開発プロジェクトで使っている「Trello」です。
    mj2trello

    Trelloを使い始めた当初は私がボード(Board)のリストに課題を追加していましたが、
    気づいた人が誰でも登録できる「新着」というリスト(List)がとても役に立っています。
    %e6%96%b0%e7%9d%80

    とにかくまずは「新着」リストにカードを登録する。
    いつ誰が対応するか、優先度付けを出来るだけ早めにカードを移動することで、
    やるべき課題のボリューム感、対応時期がビジュアルで分かるようになります。

    今後の課題
    「Trello」を使ってみて課題だと感じることは、開発プロジェクト開始当初と比べて細かい課題の登録が多く、さらに20人近く同じプロジェクトを使っていますので、カードがとても多い状況になるリストが存在したり、優先度付けの運用をしている時に量が多く、並び替えが大変だったりします。

    この辺りを改善するために、一部のリストは別プロジェクトに移動させて管理したりなどの工夫もされていますが、その反面、一つのボード(Board)で全体の課題を全メンバーが目視で確認できる利点もありますので、状況に応じて「Trello」の柔軟性の強みを活かして上手くやっていく必要があると感じています。

    つぶやき
    背景を単色ではなく「いい感じ」に変えてビジュアル的にも良くしていきたいな。


    NewRelicのTransactionTrace機能がとても便利な件


    NewRelicの便利な機能を紹介します

    NewRelic公式サイト
    https://newrelic.com/

    このAPMの「Transaction Trace」というAPMのPro版の機能がソースコードのメソッド単位でレスポンスタイムが分かるので、サイトのチューニングやボトルネックを発見するのにとても役に立ったことがありましたので、記事にさせて頂きました。

    ライセンス料金
    https://newrelic.com/calculator

    Transaction Trace
    TransactionTrace

    Transaction Trace Detail
    TransactionTraceDetail

    このような具合でソースコード単位でボトルネックになっている箇所を見つけ出し、
    パフォーマンスのチューニングをすることができます。
    またデータベースで実行されたクエリを確認することもできます。

    最後に
    もしサイトが重く悩んでいましたらNewRelic APM Pro版を導入してみるのも良いかもしれません。
    フリーで登録後、14日間はPro版をトライアルできるようですので、NewRelicの導入がまだの方は試してみてはどうでしょうか。