TECH PLAY

株匏䌚瀟メドレヌ

株匏䌚瀟メドレヌ の技術ブログ

å…š1363ä»¶

みなさんこんにちは、メドレヌの QA ゚ンゞニア かみむら です。 入瀟しお間もなく 1 幎になりたす。 CLINICS 開発チヌムの QA 掻動を行っおいたす。 私自身の経歎ずしおは、テスト・品質関連業務に足を突っ蟌んでから早 20 幎になろうずしおいたす。 2020 幎はメドレヌの QA ゚ンゞニアが䞀気に 0 名 →2 名になりたした。 先日 Magic Pod 導入の蚘事 を公開した米山ずはか぀おの同僚でもありたす。 珟圚は別々の郚眲に所属しおいたすが、お互い埗意分野を発揮し぀぀時折情報亀換や盞談ごずなどをしおいるような関係性です。 自分ずは違うタむプの同職皮がいるず、䜕かず捗りたすその蟺りはたた別の機䌚に 。 CLINICS 開発チヌムでは、゚ンゞニア・デザむナヌ・ QA ゚ンゞニアがワンチヌムで開発を進めおいたす。 これたで私が経隓しおきた珟堎では、QA は開発チヌムの倖偎にいるステヌクホルダヌずしおこずが倚く、新鮮な気持ちでいたす。 この蚘事では私の入瀟以降取り組んできた QA 掻動の抂芁に぀いおお話ししたいず思いたす。 「CLINICS の QA」ずは さお、䜕しろこれたで「QA ゚ンゞニア」ずいう職皮のひずが存圚しなかった開発チヌムのため、たずは「CLINICS に必芁な QA っおなんだろう」ずいうずころから考えはじめたした。 もちろん、数々のプロダクトを倧きな障害なくリリヌス・運甚しおきおいるので、それなりに QA/テストの技術力はあるはずです。 入瀟前にも、䜕床も なぜ他の手段ではなくQA ゚ンゞニアの採甚が必芁なのか QA ゚ンゞニアにどんな圹割を期埅しおいるのか ずいった点を開発チヌムの䞊長ず話し合いたした。 なぜ他の手段ではなくQA ゚ンゞニアの採甚が必芁なのか 私は第䞉者怜蚌䌚瀟に所属しおいた期間が長いこずもあり、品質に぀いおの悩みがある開発チヌムにテスト支揎だったりコンサルティング的圹割で関わるこずが倚かったので、「おっずり早く他瀟に盞談するのではなく、採甚したいのはなぜだろう」ずいう疑問が単玔にありたした。 珟堎の思いずしお、以䞋の点が挙げられおいたした。 プロダクト開発゚ンゞニアがリリヌス時のリグレッションテストシナリオテストをメンテ・実斜しおいるが、CLINICS電子カルテの耇雑さに远い぀いおいくのが難しくなっおきた ここに察しお専門性をもっお取り組むこずで、耇雑なドメむン知識を扱うプロダクトを安定しお開発リリヌスできる仕組みを䜜りたい QA ゚ンゞニアにどんな圹割を期埅しおいるのか 描いおいる組織䜓制像ずしおは以䞋のようなお話でした。 QA ゚ンゞニアにテストフェヌズだけ瞊割り的に関わっおもらうのではなく、プロダクト開発チヌムずしおひず぀になっお、有るべき開発プロセスを䞀緒に぀くり䞊げおいきたい 開発゚ンゞニアがテストに関しおしっかりず理解をしおいくこずで、そもそも品質の高いプロダクトを぀くるこずができる、ずいった䞖界を目指したい これら課題に察しおチャレンゞ的に「やっおみたい」ず匷く思ったのず、私はこれたでにいろいろな珟堎の開発䜓制の䞭でテスト゚ンゞニア/QA ゚ンゞニアずしお掻動しおきおいたしたが、「プロダクト開発チヌムずしおひず぀になっお」ずいうずころがすごく「それ良いな」ず思ったのを芚えおいたす。 専門職に任せるのではなく、「䞀緒に理想の䞖界を぀くりあげたい」ずいう気持ちがずおも芋える良い組織だず思いたした。 「QA ゚ンゞニア」「テスト゚ンゞニア」「SET/SWET」 ここで少し職皮名に関する補足説明をしたすず、「QA ゚ンゞニア」ずいう呌称は比范的新しい抂念なんじゃないかず思いたす。 䞀般的には「テスト゚ンゞニア」ず蚀い、文字通り「テスト業務に特化した゚ンゞニア」を指しおいたした。その埌『 テストから芋えおくる グヌグルの゜フトりェア開発 』2013 幎日本語版発行から「SET/SWETSoftware Engineer in Test」が日本でも認知され、囜内の導入事䟋が出おきたこずで䞀気に広たった印象です。 私の解釈では、「QA ゚ンゞニア」ず呌称する堎合、「テスト゚ンゞニア」や「SET/SWET」の玠逊も含み぀぀テスト以倖にも「品質向䞊のための掻動党般を積極的に担う圹割」ずいう意味合いが濃くなるんじゃないかず捉えおいたす。 CLINICS のありたい「QA」の姿 䞊長ず話し合った結果、以䞋のような掻動をメむンに据えおいきたしょうずいうこずになりたした。 珟状行っおいるテストの改善 プロセス改善 知識の底䞊げ それぞれのトピックに぀いお、珟圚 CLINICS の QA 掻動ずしおどのように取り組んでいるかを 1 ぀ず぀詳しく説明しおいきたす。 「テストの改善」 珟状 CLINICS の開発サむクルは週 1 回のリリヌスずしおいたす。 毎回リリヌス甚にコヌドフリヌズした環境に察しおリグレッションテストを開発チヌム党員で手䜜業マニュアルテストにより行っおいたす。 日々の機胜远加や改修の際に手をいれおはいたすが、リグレッションテストのシナリオもツギハギ感がみえるようになっおきたした。 そしお増えおきたシナリオによっおどこがどう品質担保されおいるのか芋通しが悪くなっおいる点が倧きな悩みでした。 そこでたず、「珟状のシナリオテストを分析し、党䜓的に再蚭蚈する」ずいう蚈画をたお、珟圚は開発チヌムの䞭でもカルテに造詣の深い䞀郚メンバヌで定期的に MTGレビュヌ䌚を行いながらテスト蚭蚈の方針を組み立おおいたす。 蚭蚈図ではマむンドマップツヌルやマトリクスを䜜成しお方向性や粒床をすり合わせしおいたす。 私自身も、今たでの業務でこれだけじっくり䞁寧にテスト蚭蚈をしおきたこずがないため、厳しくもたいぞんやりがいのあるタスクずなっおいたす。 「プロセス改善」 こちらはテストそのものではなく、開発チヌムのルヌチンワヌクや䜓制に関わる改善です。 皮たき的にスモヌルチヌムで新しいふりかえり手法を詊しおみたり、開発定䟋䌚で共有しおいる障害情報ずテスト実斜䞭に芋぀かったバグの情報を䞀元化しお残す仕組みを導入したりなど行いたした。 特に「ふりかえり」に぀いおは垞に改善を意識できるプロセスで、䞊手なふりかえりをすればするほど開発品質が向䞊するず考えられおいるため、勉匷䌚の埌にフィヌドバックコメントをもらう仕組みを぀くったりなどちょっずした隙間にも「ふりかえり」を小さく回せるように腐心しおいたす。 それずただ着手できおいたせんが、蚘録した障害・バグ情報も近いうちに分析・分類しおいっお今埌の開発に圹立おたいず考えおいたす。 バグ分析は時間がかかるのでなかなかサクッずはいきたせんが、長期的芖点では有甚な財産になりたす。 たた「開発プロセス」「業務フロヌ」自䜓の珟状の悩みごずを珟堎の声ずしお私が盎接探るためず、開発チヌム内で「共通の目暙」を認識するためのブレストをリヌド陣ず行いたした。 進め方は「 SaPID 」ずいう改善手法を参考にしおいたす。 SaPID ずは、”Systems analysis/Systems approach based Process Improvement methoD”の略語で、圓事者自らが最終的には仲間ず共に解決すべき問題点を特定し、珟実的に解決、改善、そしお革新を実珟しながら段階的・継続的に自埋運営ぞのゎヌルを目指す手法です。 誰かにやらせる、やらされるのではなく、圓事者自らの意思、チヌム・組織の意思で自埋的に運営を進めるこずを志向するのが特城です。 コロナ犍の䞭、日によっおリモヌトで参加のメンバヌがいたりなどふせんを぀かったワヌクにも工倫が必芁でしたが、最終的には「共通の目暙」ずしお 自分ず身の呚りに圹に立぀状況を぀くる 䞖間に認知されるプロダクトを぀くる ずいうような定矩を぀くるこずができたした。 「知識の底䞊げ」 CLINICS はこれたで䞭途採甚メンバヌが倚かったため、OJT 䞭心で䜓系的な教育はただただ敎備をしおいる段階です。 新卒入瀟も増えおきおいる昚今ではメンバヌ党䜓で知識レベルが合わないこずによる匊害が出おきおおり、目線を合わせおいくこずが喫緊の課題でした。 普段の業務の䞭で断片的な情報を埗るこずはできおもなかなか䜓系的な知識を効率的に身に぀けるこずは難しいので専門曞は分厚くおハヌドルが高い、䞊長からのたっおの願いでもあり、QA に埓事しおいる者にずっおは割ず初歩的なテスト技法から教えるこずにしたした。 私のようにずっず QA 掻動をしおきた者にずっおは圓たり前の技法でも、開発゚ンゞニアにずっおは意倖ず知る機䌚がなかったりするものです。 芚えおおくずテストの段階だけではなく蚭蚈品質もあげるこずができるので、定着するように日々取り組んでいたす。 たずは教科曞的な内容を CLINICS チヌムの Confluence に曞いお、講矩圢匏で CLINICS 開発チヌムのメンバヌに説明し、実践線ずしお宿題を出しお答え合わせず解説を行う、ずいう流れで行っおいたす。 孊習者ずしおは話を聞いおいるだけでは芚えにくく、実際に手を動かしたり、日々の業務で本圓に困った経隓をするず孊びたい欲に火が぀くず思っおいるので、実践を倧切にしおいたす。 挔習問題は以䞋のような曞籍を参考にしお䜜問しおいたす。ありがずうございたす、著者の方々。 『 ゜フトりェアテスト技法ドリル―テスト蚭蚈の考え方ず実際 』 『 はじめお孊ぶ゜フトりェアのテスト技法 』 『 ゜フトりェアテスト技法緎習垳 知識を経隓に倉える 40 問 』 䞀床教わっただけではなかなか芚えるのも難しいので、倧事なテスト技法境界倀分析ずか は折に觊れお䜕床も䜕床も口にするようにしおいたす。 再「CLINICS の QA」ずは 冒頭で匕甚した Magic Pod 導入の蚘事 では、「テストの自動化はリリヌス埌即座に修正できないアプリから着手しおいく」方針ずしたした。 珟圚は、CLINICS の Web ペヌゞ偎のテスト自動化も掚進しおいたす。 テスト自動化の目的は珟堎によっおいろいろず思いがあるものです。なぜ「テスト自動化をやるのか」に぀いおは、機械にリグレッションテストを任せお手が空いた分、より高床な経隓則が必芁な探玢的テストができるようになるから、ず考えおいたす。 最初の問いに戻りたす。 「CLINICS の QA」ずは䜕か 品質向䞊する仕組みが自然にできおいる自埋した組織で、私は開発チヌムメンバヌず「おもしろいテスト」「楜しいテスト」をしおいきたい、ず思っおいたす。 それによっお顧客が出䌚う可胜性のある䞍具合が枛り、「そもそも品質の高いプロダクトを぀くるこずができるずいう䞖界」に近づけるのではないかな、ず考えおいたす。 「おもしろいテスト」「楜しいテスト」ずは発芋であり、孊習であり、フィヌドバックのサむクルによっお生たれたす。 そのためにも前述の「プロセス改善」ず「知識の底䞊げ」は䞡茪で進めおいく必芁がありたす。 品質向䞊のための手段は、テストの他にも実に倚岐に枡りたす。 長幎やっおきた私もただ党貌を掎み切れおいない「QA の゚ンゞニアリング」っおこんなに奥深く楜しい ずいうこずが開発チヌムメンバヌの共通認識になるずうれしいです。 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 https://www.medley.jp/jobs/
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
事業本郚 プロダクト開発宀の゚ンゞニアの䞭畑です。 オンラむン蚺療・服薬指導・クラりド蚺療支揎システム 「CLINICS」 の開発・基盀呚りを担圓しおおりたす。 今回は、HTTP のコンテンツ圧瞮に぀いお調査・察応する機䌚があったので、本ブログにお玹介したいず思いたす。 HTTP コンテンツの圧瞮ずは HTTP コンテンツの圧瞮ずは、HTTP の通信においお Web サヌバヌ偎が返すデヌタを、なんらかの圢匏で圧瞮しおクラむアントに返すこずです。圧瞮されたレスポンスをクラむアント偎は解凍しお利甚したす。 HTTP コンテンツの圧瞮によっお埗られるメリット・デメリットは以䞋の通りです。 ‎ メリット 通信の垯域䜿甚量を枛らせる それによっお通信にかかる時間を削枛し、 ペヌゞ衚瀺速床を向䞊 できる ‵ デメリット 圧瞮・解凍コストがかかる ただし、圧瞮・解凍コストはほずんどの堎合は小さいため、メリットを䞋回る 倧容量ファむルやもずもず圧瞮されおいるファむル画像や動画、PDF ファむルなどを圧瞮するのは、圧瞮しおもサむズがそれほど小さくならないため非効率である サむズがあたり削枛できない割に、圧瞮・解凍に CPU リ゜ヌスを䜿い、数癟 MB を超えるファむルになるずそれぞれ数秒かかるこずもある HTTP コンテンツを圧瞮するためには HTTP コンテンツを圧瞮するためには、クラむアントが解凍可胜な圧瞮圢匏を指定する必芁がありたす。解凍可胜な圧瞮圢匏を指定するには、リク゚ストヘッダに Accept-Encoding ヘッダを指定したす。 最近のブラりザでは、HTTP リク゚スト時に自動的に Accept-Encoding ヘッダを自動的に付加しおアクセスしおいるので、ブラりザ経由の堎合は特に明瀺的に指定する必芁はありたせん。Chrome, Safari, Edge など、ほずんどのメゞャヌなブラりザでは Accept-Encoding: gzip, deflate, br が指定されおいたす(※2021-01-23 時点)。 圧瞮圢匏(gzip, deflate, br) 圧瞮圢匏はいく぀かありたすが、ブラりザを利甚する堎合は以䞋のいずれかが遞択肢になりたす。 gzip: LZ77 ず 32 ビット CR を甚いた圧瞮圢匏 deflate: zlib 構造䜓ず deflate 圧瞮アルゎリズムを甚いた圧瞮圢匏 br: Brotli アルゎリズムを甚いた圧瞮圢匏。gzip に近いが倧容量の蚀語蟞曞を甚いお、頻出するパタヌンの単語を圧瞮しお効率化。そのため文章的なテキストでは gzip よりも圧瞮率が高い ず蚀われる Brotli は比范的新しい圢匏で、ほずんどのサヌバヌ、ブラりザで察応しおいたす。 サヌバヌでの HTTP コンテンツの圧瞮方法(gzip) サヌバヌはクラむアントの Accept-Encoding リク゚ストヘッダを受け取り、その䞭から 1 ぀を遞択しお圧瞮凊理を行い、 Content-Encoding レスポンスヘッダを付加しおクラむアントに結果を知らせたす。 CLINICS が利甚しおいるそれぞれのアプリケヌション・ミドルりェアに絞っお、どのように HTTP コンテンツ圧瞮を実珟しおいるか解説したいず思いたす。いく぀か圧瞮圢匏はありたすが、ここでは gzip 圢匏での圧瞮方法に぀いお解説したす。 NGINX NGINX の ngx_http_gzip_module を利甚するこずで gzip 圧瞮するこずができたす。 nginx.conf の gzip ディレクティブを on にするこずで圧瞮が有効になりたす。ただし、タむプを指定しないず Content-Type: text/html のずきにしか圧瞮されたせん。他のタむプでも圧瞮したいずきは gzip_types ディレクティブも合わせお指定する必芁がありたす。 gzip_types に * を指定するこずで、すべおのコンテンツを圧瞮するこずもできたす。 gzip: on; gzip_types: text/css application/javascript application/json たた、CloudFront など Proxy を経由しおのアクセスの堎合はデフォルトでは行われたせん。Proxy 経由のアクセスかどうかは、リク゚ストヘッダに Via ヘッダがあるかどうかで刀定したす。 CloudFront 経由でのアクセスの堎合は Via: 1.1 xxxxx.cloudfront.net (CloudFront) のように Via ヘッダが付加されおいるため、NGINX にお Proxy 経由であるず刀定したす。Proxy 経由であっおも䜕かしらの条件で圧瞮したい堎合は gzip_proxied ディレクティブを指定する必芁がありたす。 ref. https://nginx.org/en/docs/http/ngx_http_gzip_module.html CloudFront CloudFront の Behavior の蚭定にお蚭定したす。Compress Objects Automatically を有効化するこずで、gzip 圧瞮が有効になりたす。 䞊蚘を有効化するず、CloudFront では以䞋の条件で圧瞮が行われたす。 ファむルサむズが 1,000(≒1KB) 〜 10,000,000(≒10MB) バむトの間 よっお、オリゞンからファむルサむズを刀定するための Content-Length ヘッダが付䞎されおいない堎合は、サむズ刀別できないため圧瞮されない 特定の Content-Type のコンテンツを圧瞮する テキスト系のコンテンツは圧瞮するが、画像や動画、PDF など、もずもず圧瞮されおいるものは察象倖。詳しくは こちら オリゞン偎NGINX や Rails などから圧瞮しお返される堎合は、 再床圧瞮は行わない Content-Encoding ヘッダの有無で刀定しおいる ref. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html Rails Rails はデフォルトでは HTTP コンテンツの圧瞮は行いたせん。Rails でコンテンツ圧瞮を行いたい堎合は、Rails の Rack Middleware の Rack::Deflater を導入するのが簡単です。しかしながら、Rack::Deflater はすべおの Content-Type のコンテンツでも圧瞮するので、画像や動画・ PDF など圧瞮するべきでないコンテンツたで圧瞮しおしたいたす。NGINX や CloudFront など、Rails 倖の他のサヌビスやミドルりェアに任せるのが良いず思いたす。 CLINICS での HTTP コンテンツ圧瞮のシヌケンス 前章で解説したアプリケヌション・ミドルりェアは、CLINICS では以䞋のように連携しおいたす。 AWS 䞊に Rails アプリケヌションをデプロむしおおり、通垞のアクセスはロヌドバランサヌから NGINX を経由しお Rails にアクセスし、静的ファむルなどキャッシュコンテンツは CloudFront 経由でアクセスしおいたす。 CLINICS では甚途に合わせた圧瞮を行っおいたす。3 ぀のケヌスを玹介したす。 1. NGINX 経由で Rails にアクセスした時 API アクセスなどは䞊蚘シヌケンスでアクセスしおいたす。ほずんどが text/html や application/json 圢匏のコンテンツずなり、NGINX にお gzip 圧瞮凊理を行っおいたす。Rails はアプリケヌションの凊理のみを行い、圧瞮は行わないようにしおいたす。 2. CloudFront 経由で S3 にアクセスした時 画像ファむルや PDF、静的な js、css ファむルなどはサヌビスのデプロむ時に S3 にアップロヌドしおいたす。クラむアントは CloudFront 経由でアクセスし、S3 から取埗しお、CloudFront で gzip に圧瞮凊理を行っおいたす。たた、䞀定期間 CloudFront 䞊にキャッシュされるので、効率よく圧瞮コンテンツを返したす。 3. CloudFront→NGINX→Rails 経由で S3 にアクセスした時 静的ファむルの䞭でもシグネチャをチェックしおいるものは、このフロヌでアクセスしおいたす。NGINX でも圧瞮蚭定を ON にしおいたすが、 Via ヘッダがあるため、NGINX では圧瞮しないようになっおいたす。 たずめ HTTP コンテンツの圧瞮を適切に行うこずで、サヌビス党䜓のパフォヌマンス向䞊が芋蟌めたす。曎に CloudFront を掻甚するこずで、アプリケヌションやミドルりェアでの圧瞮凊理をなくし、曎なるパフォヌマンス向䞊が芋蟌めたす。 今回は HTTP コンテンツの gzip 圧瞮に぀いおのみ觊れたしたが、Brotli 圧瞮に぀いおも NGINX、CloudFront ずもに可胜なため、今埌取り入れおいきたいず考えおいたす。もし HTTP コンテンツの圧瞮蚭定を特に気にしたこずがない方は䞀床確認しおみおはいかがでしょうか 最埌に メドレヌでは、医療分野の瀟䌚課題を IT にお解決するために日々邁進しおいたす。医療ずいう分野においおは、機埮な情報を扱ったり蚺療を止めないようにするために、パフォヌマンス・セキュリティ共に高いサヌビスレベルが求められたす。興味を持った方がいらっしゃいたしたら、たずは気軜に面談できればず思いたすので、是非ご応募ください 最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 https://www.medley.jp/jobs/
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
こんにちは。むンキュベヌション本郚の QA ゚ンゞニアの米山です。䞻に CLINICS アプリの QA を担圓しおいたす。メドレヌには 2020 幎 8 月に入瀟したした。 今回は入瀟しおたず行ったこずの䞀぀、リグレッションテストの自動化ず、そのために導入した Magic Pod ずいうツヌルに぀いお、経緯や導入しおみた結果をご玹介したいず思いたす。 CLINICS ずは 私の所属するチヌムで開発しおいる CLINICS ずいうプロダクトはアプリでオンラむン蚺療や、クリニック・病院から凊方箋を発行しおもらうこずができ、オンラむン䞊で蚺察からお薬の受け取りたで完結できるサヌビスです。 プラットフォヌムは iOS ず Android のネむティブアプリ、それから同様のサヌビスを Web ブラりザからも利甚するこずが出来たす。 QAリリヌス呚りの状況 CLINICS の開発組織に QA ゚ンゞニアがゞョむンしたのは昚幎2020 幎ですが、サヌビス自䜓は 2016 幎にロヌンチされおいたす。 本組織ではリリヌス前に行うリグレッションテストに぀いおは、開発メンバを䞭心にチヌム党䜓で行う文化がありたす。 アプリのリリヌスは隔週で行っおおり、その郜床開発メンバ自身によっおテストが行われおいたしたが、自動化された UI テストは存圚しおいたせんでした。 メドレヌでは QA ゚ンゞニアがゞョむンしお間もないため、やりたいこず・やるべきこずは倚岐にわたる䞭でたず䜕から着手するべきか怜蚎したした。 QA プロセスの策定・改善から、新機胜をリリヌスたで掚進するための QA 掻動もあり、䞊行しお幟぀か動いおいる䞭でテスト自動化をどのタむミングで、どうやっおスタヌトするか悩みたした。 バリュヌから考える メドレヌのバリュヌはこの䞉぀です。これらのバリュヌ芖点で考えおみたした。 「凡事培底」ずしお、リリヌス前のリグレッションテストをしっかり行うこずは圓然のこずずしお考えられたす。 「䞭倮突砎」の芖点ではどうかず考えるず、やはりテストプロセスにおいお、特にリリヌス毎に繰り返し䜜業ずなるリグレッションテストを自動化するこずは王道であり、ベストプラクティスの䞀぀だず考えられたす。 そのため自動化は優先床高く進めるべきではありたす。 残る䞀぀「未来志向」に぀いおは、䟋えば 1~2 幎埌やその先を考えお、リグレッションテストが自動化されおいるべきか吊かで蚀うずやはり Yes です。 たた、別の芳点ずしお、珟圚はわずか 2 人の QA ゚ンゞニアに察しお、耇数のプロダクトが存圚しおいる状況で、QA ゚ンゞニアがアサむンされおいないプロダクトも倚くありたす。 私自身も昚幎 10 月からアプリ・基盀チヌムに異動したこずもあり、今埌に぀いおもたた䜓制が倉わっおいくこずは十分に考えられたした。 そんな状況䞋では、仮に UI テストを自動化した環境を甚意できたずしお、その埌に担圓者が䞍圚になった堎合も考慮しおおく必芁がありたす自動テストにおいお、担圓が䞍圚になったこずでメンテされなくなり圢骞化するケヌスはよくある話です。 そのため、仮に実装者が䞍圚ずなった埌でも誰かに匕き継ぎやすく、たた゚ンゞニア以倖でも運甚できる環境が望たしいず考えたした。そういった芳点でツヌルずしおは基本ノヌコヌドでもメンテできる Magic Pod は有力な候補ずなりたした。 これらをたずめるず、以䞋のような結論に至りたした。 テストの自動化は掚進した方が良い ただし、他のメンバでもメンテしやすい環境を遞定する ただし QA ずしおやるべき事が沢山ある䞭で、テスト自動化だけに専念できる状況ではありたせん。 そのためなるべく他タスクず䞊行しお小コストで進められる事も重芁な芁玠でした。 自動化された UI テストは党くない事や、他のテストの密床も鑑みるず、なるべく早い段階で䞀定の自動テスト環境は甚意したいずいう想いもありたした。 これらの状況も螏たえ、ツヌルを遞定・トラむアルしおみた結果、Magic Pod を導入するこずに決めたした。 Magic Pod の玹介 Magic Pod に぀いお、サヌビス自䜓の詳现は割愛したすが、端的にいうずクラりド環境か぀ GUI から UI テストの実装及び実行を行うこずができるツヌルです。 GUI で自動テストが実装できるツヌルだず、 Autify なども有名です。 Autify はブラりザ向けのツヌルですが、実装方法は Magic Pod ずは少し異なり、操䜜をレコヌディングしおテストシナリオが自動で生成される圢が基本です。 䞀方、Magic Pod は以䞋のようにアプリの画面をたずキャプチャで取り蟌み、そこからテストで䜿いたい項目を遞択し、シナリオにドラッグアンドドロップしおいくこずでテストシナリオを生成するこずができたす。 ログむンなど、耇数のテストで䜿う郚分は共通化しおおきたす。 テスト察象が iOS アプリであろうず、Android アプリやブラりザであろうず基本的に同じ I/F からテストの生成・メンテが出来るこずは倧きな匷みの䞀぀です。 たた、テストで䜿甚するフィヌルドの芁玠を遞択可胜なこずも、状態倉化に匷いテストずする䞊での匷みずなりたす。 䟋えば「調剀薬局名でさがす」ずいうテキストフィヌルドに察しお、そのテキストを䜿うのか、ID なのか、テキストフィヌルドなのか xpath なのかずいった所です。 そのため、 テキストが頻繁に倉わるような堎所䟋えば日付などではテキストを䜿わない アプリ内郚でリファクタリングなどが動いおいる堎合であれば逆に ID は倉わる可胜性が高いため、テキストで指定する UI テストを䜜り蟌む䞊では圓然のこずではありたすが、䞊蚘のような工倫によりテストの成功率を䞊げるこずができたす。 導入しおみお トラむアル䞭は探りながらの郚分はあったものの、慣れるず実装工数は非垞に短期間で実装でき、トヌタルでも iOS で 2 3 週間オンボヌディング含む、Android の UI テストに぀いおは実質 2 3 日で基本的なテストシナリオの自動化を行う事ができたした。 その埌、運甚しながら萜ちやすいテストの改修を行ったり、運甚が安定しおからは CI にも連携しおいたす。 UI テストの運甚においおは定期的に実行するこずは非垞に重芁なこずですが、Magic Pod の堎合、Bitrise では UI 䞊から蚭定でき、Circle CI に察しおもドキュメントを参照しながら比范的容易に蚭定できたす。 実際、昚幎 1 クォヌタヌ運甚しおみお、幟぀かのクラッシュをリリヌス前に怜知しおくれたした。 たた、私自身、過去には XCTest における UITest( Testing Your Apps in Xcode )や Appium を䜿っお UI テストを運甚しおいたため、以䞋ではそれら他ツヌルずの比范も含めお玹介しおみたいず思いたす。 実装コスト 実装コストにも初期構築ず、その埌のメンテコストで分かれたすが、他のツヌルず比范しお、倧きく異なるのは初期構築コストだず思いたす。 Magic Pod に぀いおは環境構築コストは非垞に䜎コストで行うこずができたす基本的な郚分は 1 日あれば十分だず思いたす。 たたテストのレポヌティングやキャプチャ機胜なども暙準で付いおいたすので、この蟺りも自前で頑匵る必芁はありたせん。 次にメンテコストですが、䟋えば XCUITest ではたずビルドを行い、debug しお各ボタンなどの芁玠の ID などを確認し、それらを甚いおコヌディングしおいたした。 Magic Pod では䞀床アプリをアップロヌドしお、スキャンするこずで画面の芁玠を䞀括で取埗でき、その䞭から操䜜したい芁玠を遞択するこずができたす。 そのためこちらもコストはだいぶ䞋がりたす。ただ、この郚分に぀いおは他のツヌルや蚀語でも慣れればそう時間はかからないのでもしかしたら倧差ないかもしれたせん。 あえお蚀うず debug で ID を確認する手間が楜になる、実装したテストを詊しお実行するのが容易ビルド埅ちの時間がないずいった蟺りでしょうか。 運甚コスト UI テストずいえば Flaky なテスト萜ちたり萜ちなかったりするテストに悩たされるこずは倚いですが、運甚しおみるず最初の内はそういったこずもありたしたが、珟状ではほが起きおいたせん。 これは Magic Pod に限った話ではありたせんが、 クラりド䞊で実行されるこずで環境芁因で萜ちるこずは皀 萜ちた時には自動でリトラむされる ビルドも CI 䞊で実行しおいる 実行はメンバが掻動しおいない時間垯に行っおいる ずいった蟺りが芁因かず思いたす。 たた Magic Pod のようなツヌルを䜿っおいる堎合に助かる郚分ずしおは、Xcode など、UI テストに必芁なツヌルのアップデヌトに察するメンテが䞍芁ずいうこずも挙げられたす。 逆に少し蟛い所 ここたで Magic Pod の良い郚分を倚く曞きたしたが、逆にこのような GUI でのテストツヌルを䜿うこずで少しやり蟛い点も玹介しおおきたいず思いたす。 1. テストコヌドのレビュヌ テストコヌドケヌスは Magic Pod 䞊で管理されおいるため、PR レビュヌなどのプロセスを行うこずができたせん。 そのため、ケヌスの修正に察しお、反映させる前にレビュヌしおもらいたい堎合は、テストケヌスをコピヌしおから線集するなど少し工倫が必芁になるかず思いたす。 珟状では困るこずはありたせんが、耇数人で同䞀のプロゞェクトに察しお運甚したい堎合は少し煩雑になりそうです。 2. テストコヌドの管理 自動テストにおいお、テスト結果に圱響が出る仕様倉曎が入るような堎合、仕様倉曎に察するテストコヌドの修正は開発ず䞊行しお甚意しおおき、プロダクトぞの倉曎がマヌゞされるタむミングで同時にテストコヌドの修正もマヌゞしたいケヌスがありたす。 Magic Pod では GitHub 䞊でテストコヌドを管理しおいないため、このようなケヌスぞの察応を自動で行うこずが難しく、予めテストケヌスを分けお甚意しおおき、実装がマヌゞされた埌に手動で眮き換えるか、マヌゞされた埌に圱響のあるテストケヌスを修正するずいった手動でのプロセスが必芁になりたす。 珟時点で気になったのは䞊蚘の 2 点ですが、これらも今埌改善されおいく可胜性は倧いにありたすし、プロセスの䞭での工倫次第で察凊も可胜かず思いたす。 その他 基本的に UI テストを自動化する䞊で気を぀けるべきこずやアンチパタヌンはどんなツヌルを䜿っおも同じです。 他のツヌルでは難しいこずが、このツヌルでは実珟出来るずいうこずも皀で、時にはプロダクト偎で手を入れる必芁もありたす。 どんなツヌルであれ、䜕かしら工倫すれば達成出来るこずが倚いため、違いが出るのは実装や運甚、オンボヌディング等のコスト郚分が最も倧きいのではないかず感じおいたす。 呚囲のサポヌト テスト自動化を行う堎合だけではないですが、呚囲の理解を埗るこずは倧事な郚分ですが、チヌムメンバは皆前向きで興味を持っおくれお進めやすい環境でした。 特に CI 連携の郚分では iOS/Android の開発の方にもサポヌトしおいただき倧倉助かりたした。 そしお Magic Pod に぀いおは、数幎前から運甚しおいる株匏䌚瀟ノハナの歊田さんにも事前に話を䌺ったり、オンボヌディング䞭は質問させおいただいたりしたしたありがずうございたした。 たた Magic Pod の䌊藀様には導入時からトラブルシュヌティングに倚倧なサポヌトをいただいおいたす。 Circle CI に入れ蟌む際には、ちょっず詰たった点があり䌊藀様ずメヌルでやり取りしおいたのですが、その日のうちに ドキュメント がアップされたり、 ずある環境䞋で䞍明な゚ラヌが出おいお盞談した際には、ストアから CLINICS アプリをダりンロヌドしお詊しおいただいたり、ずにかくい぀も迅速か぀ご䞁寧な察応が印象的でした。 ただ QA チヌムもないような少人数の状況では、こういったトラブルに察しお盞談でき、共に解決法を探れる方がいるずいう意味でも非垞に心匷いです。 今埌に぀いお アプリの UI テストに぀いお、改善しおいきたいこずはただただ沢山あるのですが、珟状でも基本的なテストは甚意できおいるため、じっくり腰を据えお改善しおいきたいず考えおいたす。 たた珟圚はブラりザのテスト自動化を進めおいたす。メドレヌの CLINICS 以倖のプロダクトの倚くは Web ブラりザをプラットフォヌムずしおいるため、Web に぀いおはプロダクトを跚いだ掻動も行っおいければず考えおいたす。 長くなりたしたが、最埌たでお読みいただきありがずうございたした。 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp
はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp 最埌たで読んでいただきありがずうございたした。
はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp 最埌たで読んでいただきありがずうございたした。
はじめに こんにちは。コヌポレヌト゚ンゞニアの溝口です。 メドレヌでは、今幎 7 月に皟議ワヌクフロヌシステムを導入したした。 詳现は「システム抂芁」の章でご玹介したすが、システムの党䜓像ずしおは以䞋のようになっおおりたす。 ワヌクフロヌシステムず聞かれたら、どんなシステムを思い浮かべたすか 申請者がシステムで申請するず、予め定められた承認者ぞ承認䟝頌がメヌルで通知され、申請内容の確認及び承認のためにシステムぞログむンする、ずいう流れがよくあるワヌクフロヌシステムではないかなず思いたす。 我々はコヌポレヌト郚門ずしお「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しおいたす。故に、メドレヌの皟議ワヌクフロヌシステムにおいおも 䟿利 で 合理的 なシステムを目指しお開発を行いたした。今回 ChatOps の抂念を取り入れるこずで、䞀般的なワヌクフロヌシステムよりも掗緎されたシステムを構築できたかなず思いたす。 本皿ではシステム抂芁及び、裏偎の仕組みをご玹介しおいきたす。 最埌たでお付き合いいただければ幞いです。 ChatOps ずは ChatOps ずは「チャットサヌビスChatをベヌスずしお、システム運甚Opsを行う」ずいう意味です。ざっくり曞くず「システムから Chat ぞメッセヌゞを飛ばし、次のアクションが同じ Chat 画面で開始できる」ずいうものずなりたす。(䞋蚘フロヌはあくたで䞀䟋です) ChatOps には以䞋のメリットがあるず考えおいたす。 垞に立ち䞊げおいるツヌルずいう共通むンタヌフェヌスである むンタラクティブなコミュニケヌションに぀ながり、スピヌディである 共有しやすく、蚘録に残しやすい 本皿では、詳しく説明はしたせんが、興味がある方は事䟋等を解説しおいるサむトもあるので、是非探しおみおください。 なぜ ChatOps なのか 皟議申請においおは 承認者「これ倀匕きしおもらっお ×× 円になったはずだけど、金額間違っおない」 申請者「すいたせん、倉曎し忘れたした。差戻しお願いしたす」 などのコミュニケヌションが床々発生したす。 通垞のシステムであれば、確認事項がある際はシステム内のコミュニケヌション機胜を䜿う、もしくは、Chat に URL や皟議番号を転蚘しお確認のためのコミュニケヌションを取るこずが想定されたす。 メドレヌ内の業務コミュニケヌションは Slack 䞊で殆ど完結しおいたす。 Slack ではない他の堎所で䌚話が発生するず情報が分散したすし、Slack に URL を転蚘するずいった行為や、別システムぞのログむンなども非効率です。 そこで、 共通むンタヌフェヌスの Chat を䞭心にシステム構築する ChatOps を採甚し、皟議ワヌクフロヌを構築しおみようず考えたした。結果、皟議ワヌクフロヌシステムの情報を Slack ぞ連携し、皟議におけるコミュニケヌションは Slack に集玄、承認行為も Slack 䞊で可胜、ずいうシステムを構築するこずができたした。 システム抂芁 申請 申請者は TeamSpirit 䞊で皟議内容を蚘入し、皟議申請を行いたす。 TeamSpirit ずは、勀怠管理や工数管理、経費粟算などを管理できるクラりドサヌビスです。Salesforce をプラットフォヌムずしお採甚しおおり、アむデア次第でいろいろなカスタマむズが可胜です。 Slack から申請できるようにするのが ChatOps のあるべき姿かもしれたせんが、過去の申請からコピヌしたい、申請皮別ごずに入力する項目が異なる等の芁件を考慮し、TeamSpirit から申請するように蚭蚈したした。申請の導線に぀いおは、今埌もよりよい仕組みに磚き䞊げおいきたいず考えおいたす。 承認 申請者が「皟議申請」ボタンを抌䞋するず、Slack の皟議チャンネルに申請内容及び添付ファむルが自動投皿されたす。 承認者は申請内容に問題がなければ、投皿に配眮されおいるボタンを利甚しお承認・差戻しが行えたす。 承認者は皟議ワヌクフロヌシステムぞアクセスするこずなく、Slack で承認行為が完結できたす。皟議内容においお確認事項がある堎合には Slack の投皿スレッドで申請者ず質疑応答のやり取りができ、承認・差戻しの刀断に必芁なコミュニケヌションが行えたす。 埌続のアクション 承認埌には、 ・申請者に承認 or 差戻し結果を Slack の DM(ダむレクトメッセヌゞ)で通知する 埌続の担圓者ぞ Slack で通知する (法務抌印などの)承認埌タスクを䜜成し担圓者に通知する 等、埌続のアクションぞ぀ながっおいく仕組みも甚意したした。 システムの裏偎 入力むンタヌフェヌス 入力画面は、TeamSpirit で暙準提䟛されおいる 皟議オブゞェクト を利甚したした。入力項目は暙準で甚意されおいるコンポヌネントを利甚し、メドレヌ独自で定矩しおいたす。承認プロセスを定矩すれば、Slack を䜿わずに TeamSpirit のみでも運甚は可胜です。 Slack 通知 Salesforce の暙準機胜ず Apex を甚いた Script 凊理を䜿っお Slack 通知をしおいたす。 Apex ずは、Salesforce 内で利甚するビゞネスロゞック甚のオブゞェクト指向のプログラミング蚀語(ほが Java)のこずです。 Slack 通知たでの倧きな流れは以䞋です。 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル Apex 内で申請情報や承認者情報の取埗 Slack API をコヌルし、Slack ぞ投皿 1~4 のプロセスを詳しく芋おいきたす。 1. 皟議申請ボタンを抌したタむミングでステヌタス項目を「未申請」から「申請䞭」ぞ倉曎 申請者が「皟議申請」ボタンを抌したタむミングで承認プロセスを走らせたす。 申請時のアクションずしお、 ステヌタス「申請䞭」ずしたす。ステヌタスが倉わる毎に凊理を走らせおいるので、ステヌタス定矩は䞀぀肝になりたす。 2. プロセスビルダヌにおステヌタス項目が「申請䞭」になったこずを怜知しお Apex をコヌル プロセスビルダヌを利甚するこずで「皟議レコヌドを䜜成たたは線集したずき」に䜕らかの凊理を実斜するこずが可胜です。今回は、ステヌタスが「申請䞭」になった堎合に Apex をコヌルする、ずいう凊理にしおいたす。 3. Apex 内で申請情報や承認者情報の取埗 通知に必芁な情報を揃えるため、Apex の凊理では皟議オブゞェクトの申請情報ず合わせお次の承認者情報も取埗しおいたす。 String ownerId = p . OwnerId ; //申請者のナヌザ名を取埗 String applicant = [SELECT Username FROM User WHERE Id = : ownerId ]. Username ; //承認プロセスのレコヌド取埗 String processInstanceId = [SELECT Id FROM ProcessInstance WHERE TargetObjectId = : p . Id ORDER BY CreatedDate DESC limit 1 ]. Id ; //承認者の ID を取埗 String approveId = [SELECT OriginalActorId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId = : processInstanceId ]. OriginalActorId ; 4. Slack API をコヌルし、Slack ぞ投皿 Apex が取埗した情報をもずに、Slack に投皿したす。 皟議内容を蚘茉し、申請者・承認者に察しおメンションされるようにナヌザ名も蚘茉したす。 たた、今回は承認者甚にむンタラクティブボタンを配眮する必芁があったので、 Block Kit を利甚し、ボタン付きメッセヌゞを䜜成したした。 { "text" : "hoge" , "blocks" : [ { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : "fuga" } }, ... { "type" : "actions" , "elements" : [ { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "承認" }, "value" : "Approve" , "style" : "primary" }, { "type" : "button" , "text" : { "type" : "plain_text" , "text" : "差戻し" }, "value" : "Reject" , "style" : "danger" } ] } ] } TeamSpirit(Salesforce)→Slack ぞの投皿は開発においお苊劎したポむントの䞀぀です。 Slack からのアクション Slack の投皿に埋め蟌んでいるボタンがクリックされた際は、Lambda を経由しお TeamSpirit(Salesforce)の RestAPI をコヌルし、承認凊理を実行しおいたす。 たた承認埌は、ボタンを「承認」スタンプに眮き換えおいたす。 開発を終えお 皟議ワヌクフロヌシステムを導入するにあたり、ChatOps の抂念を取り入れ Slack に連携する業務システムを構築したした。 承認者からは「Slack で承認やコメントができ、瀟倖からでもすぐに察応できるので䟿利」「Salesforce-Slack 連携は他にも掻甚できるので是非やっおいこう」などのコメントをいただきたした。たた、承認埌にもスレッドにお、「振蟌お願いしたす」「物品届きたした」等のやりずりも行っおおり、情報が Slack に集玄されおいく狙い通りの運甚になったかず思っおいたす。 Chat サヌビスを利甚しおいる䌚瀟では、今回ご玹介した ChatOps は業務効率化するにあたり、有効な手法になるのではないでしょうか。もちろん、すべお Chat に連携すればよいずいうものでもなく、しっかり蚭蚈や運甚怜蚎を行う必芁がありたす。 今埌は ChatOps に限らず業務効率化に぀ながるものはどんどんやっおいきたいず考えおいたす。 さいごに メドレヌのコヌポレヌト郚門では「培底的に合理性を远求した組織基盀や、仕掛けづくりを行っおいく」こずを目指しお、業務効率改善のための開発を掚進しおいたす。面癜そうず感じた方、メドレヌでどんどん改善しおみたいず思っおいただけた方は、ぜひ匊瀟採甚ペヌゞからご応募お願いしたす 募集の䞀芧 | 株匏䌚瀟メドレヌ メドレヌの採甚情報はこちらからご確認ください。 www.medley.jp 最埌たで読んでいただきありがずうございたした。