LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

自動システムテストツール「Bucky」OSS化までの道のり

こんにちは!LIFULLのSoftware Engineer in Testグループ(通称:SETグループ)のヒキモチです。

我々SETグループは先日、自動システムテストツール「Bucky」のOSS化を行いました!

f:id:LIFULL-hikimocr:20190412105309p:plain

github.com

github.com

Buckyは元々社内の自動テストツールとして使われていたものなので、 それをOSSとして公開するためには色々と苦労がありました。

この記事ではその苦労やそこで得た知見などを共有できたらと思います。

目次

そもそもなぜOSS化するのか

「LIFULLエンジニアの認知度の向上のため」

サービスとしての「LIFULL HOME'S」の認知はされていますが、 それを作っているエンジニアの認知度はまだまだ低いと感じています。 オープンソースとして公開することでLIFULL全体のエンジニアの認知度の向上に繋がればよいなと思っています。

「使ってほしい」

単純に自分たちの作ったものを使ってほしいと思っています。 自分たちが日々使っていて便利だと感じているからこそ、 世の中の人達にも使ってほしいという思いがあります。

「外からのフィードバックを受けることで、より使いやすいものに進化させたい」

公開はしましたが、まだまだ使いにくい部分はあります。 Buckyをよりよいものにするために、外部からの意見を積極的に取り入れたいと思っています。 Issues、Pull requests待っています。

OSS化までの道のり

1. リファクタリング

会社の冠をつけて公開するのでソースコードはある程度きれいにしておく必要がありました。 静的解析はRubocopとCodeClimateを連携させて行いました。

  1. Code ClimateとGitHubを連携し、コード解析・テストカバレッジの測定を行う。
  2. GitHub issue連携機能を使い、Code ClimateからGitHub issueを作成。
  3. SETGメンバーが分担してリファクタリング。
  4. ローカルでの確認はCode Climate CLIを用いる。

CodeClimateを使うことで、指摘事項のGitHub issue管理が容易になり作業効率が上がりました。

またmaintainabilityやtest coverageとして評価が可視化されるので、リファクタリングのモチベーション向上にも繋がりました。

f:id:LIFULL-hikimocr:20190513122938p:plain
A~Eで評価が行われる

f:id:LIFULL-hikimocr:20190513124546p:plain
maintainabilityの推移

f:id:LIFULL-hikimocr:20190516162629p:plain
バッジもいい感じになりました

codeclimate.com

2. システムテスト導入

品質向上のため、システムテストを導入することにしました。 ユニットテストでは担保できない、buckyコマンドやテスト実行の動作を保証するためです。

テストフレームワーク「Bats」を使い、bashの終了ステータスやコンソール出力を期待値として扱うことで実現しました。

github.com

仕組みは以下のとおりです。

1.GitHubへのpushをトリガーにCircleCI上に以下のコンテナを立ち上げる

f:id:LIFULL-hikimocr:20190516130349p:plain  ・テスト実行対象コンテナ(nginx)

 ・selenium-standaloneコンテナ

 ・テスト実行コンテナ(bucky)

2.Batsにより、buckyコマンドを実行しnginxコンテナ内のサンプルページに対してテストを実行し、正常な動作が行われるかどうかを検証する

システムテスト周りはこちらに実装してあります。

3. RubyGems.orgへの登録

パッケージとして扱えたほうが便利なので、 GitHubへの公開と同時にRubyGems.orgへの登録も行いました。

bucky-core | RubyGems.org | your community gem host

公開後のお話

使い手のことを考えられていなかった

公開したは良いものの、実際に使うためのドキュメントが整備されていませんでした。

具体的には以下の問題がありました。

問題
  1. READMEを見てもgem install後に何をすればいいかわからない

    当時のREADMEのUsageに従ってもテストを実行することはできませんでした。

  2. Bucky-managementをどのように利用すればいいのかわからない

    テスト実装・実行はBucky-coreの機能ですが、テストレポートはBucky-managementの機能です。

    READMEを見てもどのように連携して利用すればよいかわからない状態でした。

解決策1:ハンズオン資料を作成
解決策2:READMEの構成を変更

Setupを追加しました。

Setupにはインストールしてからテストコードを実装する手順を記載し、Usageにはテスト実行手順を記載しました。

Before

- Bucky-Core
    - Overview
    - Feature
        - Set connection infomation for database
    - Usage
        - Install
        - Run test
        - Implemente test code
~省略~

After

- Bucky-Core
    - Overview
    - Feature
    - Setup
        - Install
        - Implement test code
        - Set connecting information for database
    - Usage
        - Run test
        - Rerun test
~省略~

ruby version

gemspecにrequied_ruby_versionの指定をしていなかったため、 公開時は必要rubyバージョンが1.0.0以上となっていました。 慌てて修正を行いました。

gem release 自動化

RubyGemsへのリリースも自動化しています。

GitHub上でreleaseタグを作成するとそれをトリガーに以下の処理が行われます。

  1. バージョンファイルの書き換え
  2. masterブランチへpush
  3. gemのパッケージ化
  4. RubyGemsへリリース

詳しくは以下の記事をご覧ください。

RubyGemsリリースを自動化した話 - Qiita

最後に

開発者以外もyaml記法さえ知っていれば簡単にテストコードが書けるようになっていますので、 ぜひ使ってみてください。

詳しい使い方はGitHubリポジトリのREADMEもしくはhands-onを参照ください。

まだまだ改善すべきところはあると思っているので、 我々も開発していきますし、issue、PullRequestもお待ちしてます。

また、Buckyが弊社でどのように使われているかは先日弊社ゼイが発表を行いましたこちらのスライドを参照ください。

www.slideshare.net

LIFULL主催の技術勉強会 Ltech #6「Quality Talk Night!」開催レポート

LIFULLエンジニアで、Ltechの運営チームの @サム です!

今回は、2019年04月23日平成最後のLtech #6Quality Talk Night!」についてレポートします。

f:id:LIFULL-samukaak:20190423193041p:plain

Ltech とは

Ltech(エルテック)とは、「LIFULLがお送りする、技術欲をFULLにするイベント」です。 特定の技術に偏らず、様々な技術の話を展開していきます。

Ltech #6「Quality Talk Night!」

今回の Ltech のテーマはQAやSET、テスト技術などについてです!

f:id:LIFULL-samukaak:20190424102508j:plain

LIFULLでは品質改善推進の専門部署があり、品質管理やセキュリティ、QAやSETエンジニアのチームだけでなく、UX・UIに対して専門的なアプローチをするチームがあります!

それぞれのチームでの、主に不動産・住宅情報サービス「LIFULL HOME'S(ライフル ホームズ)」での取り組みについて余すことなくお伝えします!

LIFULLでのQAのあり方

www.slideshare.net

LIFULL HOME'S では、週4日リリース、月にすると200~300件のプロジェクトがリリースが行われています。 プロジェクトには プランナー、エンジニア、デザイナー が担当していますが、専属のQA/テスターはいません。 そのため、プロジェクト内のチームでテスト仕様書の作成から実施までやります。

品質保証組織(QA)は、LIFULLのプロジェクトにどう関わっているのか?

プロジェクトに介入して、プロダクトやテストの品質向上支援をおこなっています。

実例

  • QAサポート

    • コンサルテーション(お悩み相談)
    • テスト設計支援・代行
    • 探索的テストによる支援
    • テスト計画コンシェルジュ
  • テスト計画書の作成を代行するサービス

    • スケジューリングなどを含めた全てではなく、テストスコープの明確化、テストアプローチの合意までを行う
    • QAとプロジェクトチームが話し合って、互いに腹落ちするテストアプローチやリスクを定義
  • リスクマネジメント

    • 企画された施策に対してリスク判定を行い、リスクが高い施策についてはQA側からアプローチを行う

LIFULLにおけるQAは、”1つ”のプロダクトではなく、”LIFULL”のプロダクトの品質保証を行っています。

リリース前の最終防衛線、LIFULL HOME'Sの自動回帰テスト

www.slideshare.net

LIFULL では、GitHubを使っていますので、GitHub Flowでプロジェクトの開発を行っています。 そのため、自動回帰テストの実施タイミングとしては、Developブランチで、自動テストフレームワーク「Bucky」を使っています。

自動テストフレームワーク「Bucky」についてはこちらをご参考ください。

qiita.com

この「Bucky」を使って自動回帰テストをおこなうことで、実際にプロダクトにおける問題をリリース前に検知することができました。

「Bucky」はOSSとしてGitHubに公開されています。

LIFULL ユーザビリティへの取り組み

www.slideshare.net

LIFULLには、「ユーザーファースト推進グループ」というのがあります。この部署では「ユーザに対する品質」を担当しており、Webやアプリを開発している各部署から、ユーザーテストの依頼を受け、サービス評価と関係する社内コンサルを実施しています。

ユーザーファースト推進グループでは、目的によって4種類に分けた評価を行っております。

  • 専門知識に基づく評価 + ユーザによる評価(ユーザビリティテスト)
  • 社員でユーザビリティテスト + 専門知識に基づく評価
  • リモートユーザビリティテスト + 専門知識に基づく評価
  • 社外の方でユーザビリティテスト + 専門知識に基づく評価

これらの結果から、操作での勘違い、ミス、混乱、気になるところを、全部書き出しリストにし、優先順位をつけて総合的に判断し、取り組む課題を決めていきます。

優先順位の項目の一つとして、ユーザーへの影響を「ユーザ体験に基づく深刻度」として評価しています。ユーザビリティを評価するときのポイントとしては、「正しく実施する」よりも「結果がサービスの改善に使われる」ことを優先します。

何はともあれ

自分たちのサービスに対して、使いにくい、こうしたほういい、こうしたいなど、各々意見はあると思いますが、 それは開発者・関係者の意見でしかありません。

大切なのは、実際に使う人が使えているかどうかです。

ユーザーが理解しやすいか使いやすいか、確かめながら試しながら、改善を繰り返して、よりよいプロダクトにしていきましょう。

懇談会の様子

f:id:LIFULL-samukaak:20190424102633j:plain

最後に

Ltech では、LIFULLエンジニアが中心となって皆様の技術欲を満たすよう実例を交えた勉強会を開催しています。

今後もLtechを積極的に開催していきますので、 ぜひ気になった方は、connpassでLIFULLのメンバー登録をよろしくお願いします!

lifull.connpass.com

シニアデザイナーの一日に密着してみたら、思いがけず熱くなった

こんにちは、LIFULLの人事 水村です。

本日は、私が日頃いろいろと相談相手になってもらうこともある、LIFULLのシニアデザイナーの一日に密着したので、ご紹介したいと思います!

紹介するのは、中途入社して今年で5年目、現在はLIFULLのシニアデザイナーを務める山田和代です。

―仕事内容は?

前職まではデザインプロダクションで広告、web、媒体問わずクライアントワークを請け負っていました。LIFULLでは主に、LIFULL HOME'S 賃貸物件領域のサービスデザインから販促ツールの制作などに関わっています。直近では、タレントを起用したプレゼントキャンペーンのプロジェクトに参加したりしました。今現在は、目下LIFULL HOME'SのUI改善施策に取り組んでいます。今日は、その打ち合わせもありますよ。

ーそうなんですね! よければ、あとでちょっと参加させてください。

続きを読む

【新人向け】アプリディレクターが押さえとくべき基礎知識

こんにちは、LIFULL HOME'Sでアプリディレクターをしているスケガワです。
今回は、新しくアプリディレクターやアプリ担当者になった方が「知ってたほうが良さそう!」と思う基礎知識について書いていこうと思います。 

f:id:LIFULL-sukegawr:20190318163936p:plain 続きを読む

LIFULL主催の技術勉強会「Ltech #5」開催レポート!

こんにちは!LIFULLでエンジニアをしている市来(いちき)です。

2019/02/21(木)に弊社にて開催させていただきました、「Ltech#5 LIFULL HOME'S 機械学習Night2 若手エンジニアが語る機械学習事例」についてレポートいたします。 f:id:LIFULL-ichikir:20190226205645j:plain

続きを読む

鹿内 学さんがLIFULL AI戦略室 データサイエンスパートナーとしてジョインしました!

こんにちは! 木村 修平@LIFULLジンジニア(エンジニア人事) (@kimkimniyans) | Twitterです。

この度、2018年10月に新設したAI戦略室に、鹿内学さん(facebookアカウント)がデータサイエンスパートナーとして協力いただけることになりました!

f:id:LIFULL-kimuras:20190129195514j:plain

続きを読む

街におさんぽに行ってアイデア出すイベント「おさんぽそん」を開催しました

f:id:LIFULL-takarabs:20190122210943p:plain

こんにちは!たからべです。通常業務ではデザインを担当しています。

今回の記事は、全くデザインの話ではありません。

有志で開催した社内イベント「おさんぽそん」が面白かったので、共有いたします!

続きを読む