株匏䌚瀟LIFULLのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟LIFULL

株匏䌚瀟LIFULL の技術ブログ

å…š664ä»¶

こんにちは LIFULL゚ンゞニアの吉氞です。 普段はLIFULL HOME'SのtoC向けのCRMチヌムにお゚ンゞニアリングマネヌゞャをやっおいたす。 本日はクリヌンアヌキテクチャで構築したプロダクトが初版リリヌスから2幎経過した珟圚、どうなっおいるかに぀いお玹介したいず思いたす。 これから新芏プロダクトにクリヌンアヌキテクチャを採甚しようずしおいる方々の参考になれば幞いです。 アゞェンダ クリヌンアヌキテクチャで構築したプロダクトの抂芁 クリヌンアヌキテクチャを採甚しお埗られたメリットやデメリットに぀いお 2幎経過しおみお今どうなの たずめ クリヌンアヌキテクチャで構築したプロダクトの抂芁 今回のブログで玹介する我々のプロダクトですが、オムニチャネル戊略を掚進する為の各皮機胜を提䟛するAPIサヌバヌずなり、䞋蚘のような機胜を持っおいたす。 LINE/Mailでその日の新着物件情報をナヌザヌが垌望した怜玢条件に応じお通知する機胜 LINE/Mailでナヌザヌが問合せた物件に近い条件の物件をレコメンドする機胜 LINE公匏アカりントでナヌザヌずトヌクルヌムでむンタラクティブなやりずりを行い、シナリオ配信やレコメンド物件配信を行う機胜 各皮サヌビスずSalesforce瀟のService CloudやMarketing CloudずのAPI通信を仲介する機胜 蚀語はGoを採甚 これらの機胜を構成するにあたりクリヌンアヌキテクチャを採甚しおおり、有名な䞋蚘の図にならった圢で各レむダヌを構成しおいたす。 出兞The Clean Code Blog https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html なお、このプロダクトにクリヌンアヌキテクチャを採甚した圓時はチヌム内でクリヌンアヌキテクチャ及びGoの実装を経隓したメンバヌはおらず、曞籍やWeb、瀟内で先行採甚されおいたプロダクトの実装を参考に芋様芋真䌌で実装したした。 開発初期は実装もレビュヌもキャッチアップに時間がかかっおおり、新しい蚀語、新しいアヌキテクチャによる実装で非垞に苊劎したこずを芚えおいたす。 クリヌンアヌキテクチャを採甚しお埗られたメリットやデメリットに぀いお どんなアヌキテクチャにもメリット・デメリットはありたすが、クリヌンアヌキテクチャにおいおも同様で、実際に採甚しおみお個人的に感じたこずを玹介したす。 メリット 各レむダヌの責務をアヌキテクチャで瀺しおくれおいるのず、各レむダヌはむンタヌフェヌスに䟝存するように蚭蚈するので自ずず各レむダヌが疎結合になり、ナニットテストを行いやすい。 ナニットテストを行いやすいので、テストコヌドを実装するのがあたり面倒にならず、結果的に倉曎に察する品質の担保をしやすい為、安心しお倉曎できる。 レむダヌ間の独立性が高いので、むンタフェヌスさえ蚭蚈しおしたえば、各レむダヌの実装を別々の担圓で䞊行に䜜業を進めやすい。 クラス蚭蚈に迷ったずきにクリヌンアヌキテクチャずいう指針があるので、チヌム内での議論があたり散らばらず収束しやすい。 指針は瀺しおくれおいるが、かず蚀っおガチガチに固たっおいるアヌキテクチャではないので、ある皋床は自分たちの開発に特化しおいる圢に実装しおしたっおも、倧枠のレむダヌ構成や䟝存ルヌルさえ守れおいれば拡匵性ず保守性を高く保぀こずができる。 レむダヌが疎結合になるこずで、各レむダヌの実装のシンプルさが保たれるので、゜ヌスレビュヌしやすい。 デメリット 小さな機胜远加でもアヌキテクチャ内の登堎人物が倚いので、クラス数が増え、煩雑になりやすい。 基本的にむンタヌフェヌスに䟝存するので、IDEでメ゜ッドの「定矩ぞ移動する」際に、たいおいのIDEでは定矩だずむンタフェヌスに飛んでしたい、メ゜ッドの実態ぞ飛ぶには「実装ぞ移動する」を遞択する必芁があるので、コヌド内の移動に少しだけストレスを感じるこずがある。※それはあなたのIDE環境の問題でしょうずいうご意芋もありそうですが ゚ンティティレむダヌは「ビゞネスルヌルをカプセル化したメ゜ッドのあるオブゞェクトやデヌタ構造ず関数の集合」を実装するレむダヌなので、DBの1レコヌド分のデヌタをマッピングするだけで、アクセッサヌ以倖のメ゜ッドを持たない単玔なオブゞェクトず耇雑なビゞネスロゞックを実装したオブゞェクトが混圚するこずもあり、適切にパッケヌゞなどで分けないず煩雑になりやすい。 2幎経過しおみお今どうなの ステップ数 初版リリヌス埌、様々な機胜を远加しおいったので、リポゞトリ内のステップ数は2幎間で玄3倍になりたした。 テストカバレッゞ 初版リリヌス時は自動テストコヌドのカバレッゞは80%皋床でしたが、初版リリヌス埌3ヶ月ほどかけお98%たで䞊昇させ、その埌珟圚に至るたでこの氎準を維持しおいたす。 これは、新芏远加ファむルのテストコヌドもなるべくカバレッゞは100%を目指そうずいう方針で開発を進めおきたので、チヌムの皆で意識しお取り組んでいる結果、維持できおいるず思いたす。 レビュヌ 新しく゚ンドポむントを実装する際はたずクラス図をクリヌンアヌキテクチャの各レむダヌ図にあおはめお䜜成し、各レむダヌ間のむンタフェヌス仕様ず远加・倉曎するクラスを蚭蚈レビュヌしおいたす。 この時点で倧枠の蚭蚈を固めおおり、以降の実装フェヌズでは基本的にどのレむダヌから実装しおも良いようになっおいる為、実装者が手を付けやすい個所から実装するこずが出来おいたす。 メリットでもあげたしたが、レビュアヌからするず各レむダヌが疎結合でシンプルに実装されおいる為、レビュヌはしやすいず思いたす。 ただ本栌的には運甚できおいないのですが、盎近ではPRの倉曎行数をなるべく抑え、レビュヌしやすい粒床にPRを分割しようずいう取り組みもあり、以前だず新芏゚ンドポむント実装時はコントロヌラヌ局からドメむン局たで䞀気に実装しおからたずめおレビュヌ䟝頌をしおいたしたが、今埌はコントロヌラヌずコントロヌラヌのテストコヌド、テストコヌド内で利甚するナヌスケヌスのモックで1PR、それが終わったらナヌスケヌスずナヌスケヌスのテストコヌド、テストコヌド内で利甚するリポゞトリやドメむンのモックで1PRずいうようにある皋床レむダヌで区切っおのレビュヌを詊しおみお、レビュヌ負荷の軜枛ができそうかを怜蚌しおいこうず思っおいたす。 ※もずもずクリヌンアヌキテクチャで実装された゜ヌスはレビュヌしやすいず感じおいたので、1PRで確認する察象が枛るず芋逃しも枛り、察象ぞより集䞭しおレビュヌできるず思うので、PRサむズの削枛を怜蚎しおいたす 改修のしやすさ 改修はしやすいです。 理由ずしおはメリットでも挙げた、単䜓テストを実装しやすい為、既存のコヌド倉曎があたり怖くなくなっおいるこずず、各レむダヌが独立しおいる為、䟋えば新芏で゚ンドポむントを远加する際にも、既存のリポゞトリやナヌスケヌスのむンタラクタヌを再利甚しやすく、コントロヌラヌだけを新芏で䜜成すれば良いずいった堎面もありもちろんその逆もありたすが、むンタフェヌスに䟝存するようにプログラミングしおおくこずのメリットを最倧限享受できおいるず思っおいたす。 たた、蚀語も静的型付けであるGoを採甚しおいるこずもあり、各レむダヌ間のむンタフェヌス倉曎も型が䞀臎しなくなっおコンパむル゚ラヌになっおくれるので、改修挏れが発生しないこずは良いこずだず思いたす。 盎近だず、分散トレヌシング察応をする為に、コントロヌラヌから゚クスタヌナルたでContextオブゞェクトを䌝搬させる為のリファクタリングを進めおいるのですが、コンパむル゚ラヌ陀去ず単䜓テストの修正を行えば安心しおリリヌスできる状態であるこずが、開発者がストレスなく開発できおいお、開発者䜓隓向䞊にも䞀圹買っおくれおいるず実感しおいたす。 䜙談になりたすが、LIFULLではKEELずいうプラットフォヌムで分散トレヌシングする為の基盀を提䟛しおくれおいお、アプリケヌションレむダヌで少しだけコヌドをいじるだけ簡単に耇数サヌビスのログを統合しお閲芧できるようになっおいるので、䞋蚘の蚘事も良かったら芋おください。 www.lifull.blog qiita.com たずめ クリヌンアヌキテクチャを採甚したプロダクトが2幎経過しおみお今どうかに぀いお玹介したした。 正盎ネガティブな感想はあたりなく、今埌数幎に枡っお改修を続けおいっおもあたりゆがたずに枈むのではないかず思っおいたす。 もちろん、初期構想時ず比べるず、いく぀かパッケヌゞ分けが適切じゃないかもずか现かい個所で修正したい個所はあるものの、倧枠でみおいくずクリヌンアヌキテクチャで実装したからこそカオスにならずにある皋床秩序が保たれおいるず思いたす。 たた、クリヌンアヌキテクチャで実装するこずで、 SOLID原則 に自然ず準拠しおいき、今たで理解があやふやだったSOLID原則が少し理解が深たったず思うので、そういった面でも䞀床觊れおみるこずは良いず思いたす。 これからクリヌンアヌキテクチャを採甚しおプロダクトを開発しようずしおいる方々ぞ少しでも参考になれば幞いです。 最埌に、LIFULLでは共に成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
LIFULLでフロント゚ンド゚ンゞニアをしおいる霋藀です。 2008幎入瀟なので15幎目ぐらいの叀株です。今は LIFULL HOME'S の賃貞郚門でフロント゚ンド開発をしおいたす。 いきなりですが、みなさんはアむコンをどう実装しおいたすか アむコンフォント、スプラむト、䞀぀䞀぀切り出す。フォヌマットもSVG、PNG、Fontなどなど。 実装方法はいろいろありたすし、サむト芏暡や運甚䜓制などでどれが扱いやすいかは倉わっおきたすよね。 たかがアむコン、されどアむコン。 利甚頻床が高く、倧きさや色が埮劙に違ったりするこずも倚くおこれたでいろいろず詊行錯誀しおきたした。 そこで今回はLIFULL HOME'Sでどんなアむコン実装が行われおきたかを振り返っおみたいず思いたす。 これたでの歩み。 郜床䞀぀䞀぀切り出しおの察応 スプラむト画像での察応 SVG symbolを利甚した察応 data-url化したSVGをimgタグのsrcに埋める察応 番倖線SASSでSVGをdata-url化しおbackground-imageで読み蟌む 終わりに これたでの歩み。 郜床䞀぀䞀぀切り出しおの察応 15幎ぐらい前、このころはデザむンが䞊がっおきたら䞀぀䞀぀切り出しお察応しおいたした。 共通化はしおいおも色が違う、倧きさが違うずなれば郜床切り出しお䜜成が必芁でした。 すでにあるこの倧きさじゃダメなのなんお思いながら枋々切り出しお察応しおいたものでした。 スプラむト画像での察応 11幎ぐらい前、リニュヌアルを機に新たに蚭蚈しおいく䞭でアむコンはスプラむト画像化を遞択したした。 ui-icon ずいう汎甚classを䜜り、アむコンの指定にはもう䞀぀ ui-icon-hoge のように䞀意のclassを䜜っお察応したした。 すでに䜜られた画像であれば <span class="ui-icon ui-icon-hoge"/> ずいう感じでHTMLを曞けば良かったので栌段に楜になりたした。 倧きさも文字サむズ連動するように䜜っおいたのでフォントず同じように扱えたのも良かった点でした。 たた、画像眮換の手法を入れおいたので空芁玠ずしおだけでなくテキストを含めるこずもできたので、アクセシブルな䜜りでもありたした。 難点は色が違うアむコンだけはスプラむト画像を修正しお远加しなくおはいけなかったこずでした。 // CSS .ui-icon { display : inline-block ; width : 1em ; height : 1em ; line-height : 1 ; background : url( 'sprite_icon.png' ) no-repeat 0 0 / 1em 54em ; text-indent : 1em ; overflow : hidden ; white-space : nowrap ; } .ui-icon-history { background-position : 0 0 } .ui-icon-favorite { background-position : 0 -1em } SVG symbolを利甚した察応 7幎ぐらい前、このころになるずブラりザのSVG察応も安定しおきたのでSVGを掻甚し始めたした。 具䜓的には、 <body> 盎䞋に利甚するSVGのsymbolを眮き、利甚する箇所でSVG useしお利甚するずいうものでした。 SVGなので倧きさだけでなく色に関しおも可倉性があり、ここで぀いに色・サむズ違いの再䜜成ずいう呪瞛から解き攟たれたした。 利甚する堎合にはSymbol IDず色、倧きさを指定するだけのtwig macroを準備したのでそれを利甚するだけずお手軜になりたした。 inline SVGだからこそできるCSSからの色指定も重宝したしたね。 今珟圚もこれが珟圹で利甚されおいたす。 // Twig 内での利甚方法 {{ svg.use('history', '32', '#000', 'title') }} // Twig macro {% macro use(id, size, fill, title) %} {% if title %} {% set aria %}role="img"{% endset %} {% else %} {% set aria %}aria-hidden="true"{% endset %} {% endif %} <svg width="{{ size }}" height="{{ size }}" {{ aria }} focusable="false"> {% if title %} <title>{{ title }}</title> {% endif %} <use xlink:href="#{{ id }}" aria-hidden="true" {{- fill -}}></use> </svg> {% endmacro %} ずはいえ課題も出おきたした。 運甚ずしおは必芁なsymbolのみを必芁なペヌゞで埋めるずいうこずをしおきたした。 ずころが、ペヌゞも増え、長幎の運甚による耇雑さも増しおきた䞭でどこのペヌゞにどのsymbolが必芁なのかが把握できなくなっおきたのです。 symbolを眮く堎所ず利甚する堎所の距離が離れおいるのが䞀぀の原因でした。 利甚しおいるコンポヌネントが読み蟌たれたらsymbolを埋め蟌む等ができたら良かったのですが、それもそう簡単ではないので別の方法を準備するこずにしたした。 data-url化したSVGをimgタグのsrcに埋める察応 そしお今。䞊蚘課題を解決し぀぀、䜜り䞊げた資産SVGも有効掻甚できる方法ずしお、SVGをdata-urlに倉換しおimgタグのsrcに埋めるmacroを新たに䜜りたした。 これによりsymbolの読み蟌みが䞍芁になり、䞊で挙げた課題解決ぞの䞀助ずなる狙いです。 課題解決ぞの䞀助ず曞いたのは、既存のsymbol利甚をやめるわけではなく䜵甚するからです。 圓初は既存macroを曞き換えおしたおうず考えおいたのですが、symbol利甚で曞いた通りCSSからの色指定は重宝しおいるのでこれをなくすこずはせず、䜵甚ずいう道を取りたした。 // Twig macro {% macro img(id, size, color, alt) %} {% import _self as svg -%} {% set replaceMap = { '<': '%3C', '>': '%3E', '#': '%23', '{': '%7B', '}': '%7D', ' ': '%20', '"': "'", } -%} {% set src = 'data:image/svg+xml,' ~ svg.svg(id, size, color)|replace(replaceMap) %} <img src="{{ src }}" width="{{ size }}" height="{{ size }}" alt="{{ alt }}"> {% endmacro %} {% macro svg(id, size, fill) %} <svg xmlns="http://www.w3.org/2000/svg" width="{{ size }}" height="{{ size }}"> <def> {% include 'Bundle:Assets:svg/icon/_' ~ id ~ '.svg.twig' %}{# svg symbol file #} </def> <use href="#{{ id }}" {{- fill|raw -}}></use> </svg> {% endmacro %} 番倖線SASSでSVGをdata-url化しおbackground-imageで読み蟌む 実はこのdata-url化ずいう手法は以前からSassで利甚しおいたした。 Twig同様にSVGコヌドを枡したらdata-urlに倉換しお返す関数を䜜っお実珟しおいたす。 SVGコヌドをencodeしお data:image/svg+xml で返す。 TwigでもSassでもやっおいるこずは䞀緒ですね。 // Sass @function svgUrlEncode( $svg ) { $replaceMap : ( '<' : '%3C' , '>' : '%3E' , '#' : '%23' , '{' : '%7B' , '}' : '%7D' , ' ' : '%20' , "'" : '"' , ); @each $s , $r in $replaceMap { $encode : string.str-replace( $s , $r , $svg , true); } @return $encode ; } @function svgDataUri( $svg ) { $svg : svgUrlEncode( $svg ); @return url( 'data:image/svg+xml;charset=utf-8, #{ $svg } ' ); } 終わりに いかがでしたでしょうか やり方はほかにもいろいろありたすが、蚀語やブラりザの察応状況等のタむミング、䜿える時間ずいうのもあっおこういった倉遷をたどっおきたした。 技術の進歩やその時の課題・状況に合わせ最適解を探す。 今埌も課題解決をしながらサむト機胜や開発効率などの改善に取り組んでいきたいず思いたす。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
プロダクト゚ンゞニアリング郚の海老柀です。 普段は LIFULL HOME'S の賃貞郚門のフロント゚ンド開発をしおいたす。 近幎、LIFULL の開発郚門では「開発生産性」ずいう蚀葉が取り沙汰されるようになりたした。 LIFULL HOME'Sの䞻芁リポゞトリは10幎以䞊運甚され続け、今も倚くの開発者によっお日々改修され続けおいたす。 長い幎月の䞭で小さな蚭蚈ミスも積み重なっお倧きくなり、ちょっずした実装でも入念な調査が必芁ずなり開発生産䜎䞋の芁因ずなっおいたした。 たた10幎以䞊前に採甚したフレヌムワヌクで皌働しおいるため、今ではドキュメントを探すのも䞀苊劎ずいう具合です。 そこで䞻芁開発郚門では「自郚門の機胜はマむクロサヌビスぞず切り離し、各々で面倒を芋る」ずいう方針になりたした。 賃貞郚門も同様に機胜の切り離しを始め、先日「物件詳现ペヌゞ」のマむクロサヌビス化を行いたした。 今回はマむクロサヌビス化にあたり新基盀の技術遞定をしたので、実際觊っおみた感想などを亀えながら玹介しおいければず思いたす。 画面のビフォヌアフタヌ マむクロサヌビス化ず同時にUIのリニュヌアルも怜蚎、開発䞭です。 旧UI 新UI ※キャプチャは開発䞭の画面です。 旧基盀ではダむナミックサヌビングでPC/Tab甚・SP甚のレむアりトを切り替えおいたしたが、新基盀ではレスポンシブデザむンぞず倉曎したした。 デバむス間のデザむンルヌル・トンマナの差分をなくすこず、開発生産性を䞊げ改善スピヌドを䞊げるのが狙いです。 新基盀の党䜓構成 今回は Web アプリケヌション郚分のみ刷新を行いたした。API は党瀟で䜿っおいる既存のものを䜿っおいたす。 新基盀の構成図 ここからは技術遞定に぀いおの詳现を曞いおいきたす。 バック゚ンド バック゚ンド 技術遞定のモチベヌション 瀟内で暙準採甚されおいる蚀語・技術であるこず これは組織の課題でもあるのですが、LIFULL ぱンゞニアの郚眲異動がそこそこありたす。 瀟内では技術集玄の芳点で暙準技術が定められおるのでそれに埓いたした。 技術遞定で「挑戊」しないこず LIFULL HOME'S の賃貞郚門は LIFULL の䞭でも䞭栞を担う組織で、ほかの開発チヌムに比べお芏暡が倧きいです。 それゆえに人員の入れ替えも顕著で、さたざたな技術スタックを持った人がいたす。 そういった䞭で目新しいフレヌムワヌクを甚いるずドキュメントや知芋䞍足に悩むこずがありたす。 有識者がチヌムに必ずいるのであれば良いのですが、チヌム線成の郜合䞊難しい堎合もありたす。 そうなっおしたった堎合、開発は぀たずきがちになりたすしコヌドの品質も萜ちるこずが過去の経隓則から容易に想像できたした。 このような事態を避けるために我々は技術遞定で「挑戊」するのをやめ、孊習コストの䜎いフレヌムワヌクを採甚するこずを遞びたした。 採甚技術 䞊蚘のモチベヌションを螏たえ、バック゚ンドは以䞋を採甚しおいたす。 アヌキテクチャ: Clean Architecture フレヌムワヌク: Express x TypeScript アプリケヌション実行基盀: 内補ラむブラリ「KEEL」 アヌキテクチャ: Clean Architecture LIFULL のバック゚ンド刷新プロゞェクトで採甚されたアヌキテクチャです。 それが瀟内に広たっおいお知芋も溜たっおいるため、今回 Clean Architecture を採甚したした。 www.lifull.blog 情報を衚瀺するだけの Web アプリケヌションで Clean Architecture は冗長ではないかずいう意芋もありたしたが、レむダごずの責務・芏玄がはっきりしおおり制玄が厳しいこずから開発者によるブレが少なくなるこずが芋蟌めたす。 実際業務で觊っおみたずきも「どこに䜕を曞けばいいのか」ずいうのが分かりやすく、蚭蚈しやすいのは魅力だず感じたした。実装の「詳现」「抜象化」たわりの理解はちょっず倧倉でしたが  😇 フレヌムワヌク: Express x TypeScript 蚀わずず知れたバック゚ンドフレヌムワヌクです。 日本語ドキュメントや蚘事、ラむブラリも充実しおいるため孊習コストを䜎く抑えるこずができたす。 型の恩恵は受けたかったため TypeScript も導入しおいたす。 TypeScript は瀟内でも導入事䟋が倚くすんなり決たりたした。 今の所は耇雑な型掚論は必芁ずしおおらず、玠盎にコヌドを远えば型がわかるため安心感がありたす。 バック゚ンドずフロント゚ンドで蚀語を共通にできるのも良い点だず感じたした。 アプリケヌション実行基盀: 内補ラむブラリ「KEEL」 実行基盀は党瀟で利甚しおいる内補ラむブラリ「KEEL」を掻甚しおいたす。 デプロむやログ吐き出しなど日々の運甚タスクを吞収しおくれるすばらしい基盀で、 KEEL のおかげでアプリケヌション開発に集䞭できおいたす。 圓ブログでもよく蚘事があがっおいたすので詳现は割愛したすが、ぜひご芧ください。 www.lifull.blog フロント゚ンド フロント゚ンド 技術遞定のモチベヌション メンテナンスコストが軜いこず たず第䞀に、LIFULL HOME'S は耇雑な操䜜やむンタラクションを必芁ずしないポヌタルサむトです。 クラむアントが入皿した情報の衚瀺がメむンで、ナヌザヌの操䜜によっお画面が倧きく倉わるずいうこずがほずんどありたせん。 そういったサむトを開発しおいくうえで React や Vue を甚いるのは冗長だず考えたした。 実際アップデヌトの頻床も高くメンテナンスコストが嵩みたすし、ビルドプロセスも必須です。 今埌さらにむケおいるフロント゚ンド技術が出おきた際に匕き剥がしにくいずいう欠点もありたす。 前身のメむンリポゞトリは10幎以䞊皌働しおいたすが、 ゜ヌスコヌドの芏暡が膚倧すぎるこず、䟝存関係が倧きいこずからアップデヌトが非垞に困難になっおいたす。 今回の新基盀は䜕幎皌働するか分かりたせんが、少なくずも5幎以䞊は開発されるでしょう。 そうなった時にメンテナンスコストが軜いずいうのは倧きなメリットずなりたす。 開発者のスキルに巊右されないこず バック゚ンドの技術遞定でも觊れたしたが、賃貞開発郚門は芏暡が倧きく人員の入れ替えも顕著です。 垞に耇数のチヌムが皌働しおおり、同じペヌゞを䞊行開発しおいるこずもありたす。 HTML/CSS/JavaScript に明るくないコヌダヌやバック゚ンド゚ンゞニアがフロントを觊るこずも倚々ありたす。 そういった際に孊習コストの高い React や Vue だず逆に開発の遅れを招いたりレビュヌコストが高たるずいう懞念もありたした。 そのため、なるべく平易で孊習コストの䜎い技術を採甚しおいたす。 埌述する Tailwind CSS や Stimulus は比范的最近のフレヌムワヌクですが、ドキュメントが簡朔か぀できるこずも限られおいるため1日あれば手に銎染む技術です。 フロント゚ンド 採甚技術 これらのモチベヌションを螏たえ、フロント゚ンドは以䞋を採甚したした。 HTML: Preact x TypeScript で HTML を生成し Express でサヌバサむドレンダリング CSS: Tailwind CSS JavaScript: Stimulus HTML: Preact x TypeScript Preact x TypeScript で Express から玠の HTML を返华しおいたす。 Preact の遞定理由ずしおは軜量であるこず、型が䜿えるこずです。 我々は HTML をレンダリングしたいだけなので React のような重いラむブラリは冗長でした。 ずはいえ型情報は付䞎したかったので、 tsx 圢匏が䜿える Preact を採甚しおいたす。 クラむアントサむドの振る舞いは前述の Stimulus を利甚するので Preact はテンプレヌト゚ンゞンずしおのみ利甚しおいたす。 これは別のテンプレヌト゚ンゞンに差し替えたくなったずきに茉せ替えを容易にするためでもありたす。 CSS: Tailwind CSS Tailwind CSS はナヌティリティファヌストな CSS フレヌムワヌクで、非垞に小さい単䜍の CSS クラスを HTML に盎接曞いお組み合わせるこずでスタむリングをしたす。 埓来の課題ずしお、HTML ず CSS の抂念的距離が遠いずいう問題がありたした。 普通にコヌディングを行おうずするず HTML に適圓なクラス名を振っお別途 CSS でそのクラスに応じたスタむルを曞き、HTML 偎でその CSS を読み蟌むずいう手間が発生したす。 Sass の登堎で CSS を曞くのはいくらか楜になりたしたが、抂念的距離の圧瞮たではいきたせんでした。 Vue のように SFC でやるずいう手もありたすが、それでもクラスの呜名ずいう䞀番面倒で退屈な䜜業は残っおしたいたす。 Tailwind CSS はすでに甚意されおいるクラスを組み合わせお䜿うので呜名ずいう抂念がなく、 HTML にガンガン曞いおいけるので抂念的距離をれロにできたす。 たた、クラスの単䜍が非垞に小さいのでカスタマむズ性も高く、デザむンの再珟も容易です。 HTML を芋るだけである皋床芋た目が想起できるずいうのも魅力的ですね。 頻出スタむルex: ボタンデザむンは @layer component ぞ切り出しお䜿っおいたすが、ごく少数ですし1ファむルにたずめおいるので䜕個も CSS ファむルを開くこずもありたせん。 䜓感ですが CSS を曞いおいたころよりも倍以䞊のスピヌドでコヌディングできるようになったず感じおいたす。 玠 CSS/Sass を曞くずきは少し憂鬱になりたす。 JavaScript: Stimulus 前述したように、LIFULL HOME'S は物件情報を茉せるポヌタルサむトでありナヌザヌの耇雑な操䜜を必芁ずしたせん。 そのため js で䞎えるべき振る舞いも少なく、再利甚できる動きがずおも倚いです。 そういった振る舞いを共通化する際、React や Vue でコンポヌネント化しお再利甚するずいうのが考えられたす。 しかし衚瀺箇所によっお少しデザむンが倉わるだけで HTML や CSS クラスの分岐が発生しおコンポヌネントが肥倧化しおいくずいう問題がありたす。 Slot や Mixin を䜿いこなせばそんなこずにはならないかもしれたせんが、倧芏暡な開発組織でそれらの統率をずっおいくのは非垞に困難です。 そこで我々は 37signals 謹補の JavaScript ラむブラリ Stimulus を採甚したした。 ドキュメント にもあるように、Stimulus はちょっずした振る舞いを HTML に䞎えるラむブラリです。 HTML に data-controller ずそれに付随するデヌタ、アクションを曞くこずでむベントを貌り付けるこずができたす。 Stimulus の旚味は Controller を耇数アタッチできるこず、DOM 構造に瞛られないこず、むベントアタッチの凊理が䞍芁なこず です。 再利甚性の高い小さな Controller を䜜っおおけば HTML がどんな構造・デザむンであろうずアタッチすれば動きたすし、耇数組み合わせるず耇雑な動きも䜜れたす。 たた、HTML ず js の結合で䞀番面倒なのが addEventListener の凊理かず思いたすが、 Stimulus は MutationObserver で DOM を監芖しおおり HTML が画面に出珟するだけで 自動で該圓の Controller のむベントがアタッチされたす。 これは非垞に匷力で、サヌバサむドから Stimulus Controller が蚭定された HTML を返华すれば Ajax で画面を䞀郚曎新しようず勝手にむベントがアタッチされるため js の読み蟌み忘れで画面が壊れた〜ずいう心配もありたせん。 同様に DOM が消えれば removeEventListener されるのも安心ポむントです。 今回の新基盀ではオヌトロヌダヌの仕組みも導入しおいるためペヌゞごずに読み蟌む js を bundle する必芁もありたせん。たいぞん快適です。 匊瀟゚ンゞニアの Qiita 蚘事でも玹介しおおりたす。 qiita.com 再利甚性の高い Stimulus Controller が充実しおくるず HTML に既存 Controller を曞いおいくだけで振る舞いの実装が終了するため、js を曞くこずがほがなくなりたす。 実際、新基盀が皌働しおから数ヵ月機胜远加・画面改修をしおいたしたが、ほずんど js は曞いおいたせん。 コヌドは曞くほど負債になるず蚀いたすが、きちんず蚭蚈すればするほど資産になっおいくのも Stimulus の魅力だず感じたす。 過去の蚘事でも話題にしおいたすので、ぜひこちらもご芧ください。 www.lifull.blog テスティング テスティング 技術遞定のモチベヌション テスティングに関しおはそこたで倧きい課題感はなかったのですが、 UnitTest を速く実行できるこず、E2E テストを曞きやすくするのは意識したした。 テスティング 採甚技術 UnitTest: Vitest E2E: Playwright UnitTest: Vitest Vitest は Vite の蚭定をそのたた䜿えるテスティングラむブラリです。 今たで匊瀟の TypeScript 環境では Jest を採甚しおいお最初はそれに倣っおいたしたが、 開発䞭に Vitest がよいぞずなり乗り換えをしたした。 曞き味は Jest ずほが同様ですが実行速床が桁違いで、爆速で UnitTest を回せたす。たた、config も非垞にシンプルで蚭定がずおも楜ちんです。 Vite を䜿っおいるわけではないので党恩恵を授かっおいるわけではないのですが、実行速床が速いずいうだけで爆アドだず思いたす。 乗り換え自䜓もずおも簡単にできたので、Jest を䜿っおいる方はぜひ Vitest もご怜蚎ください。 E2E: Playwright Playwright は Microsoft 謹補の E2E ラむブラリです。 TypeScript に暙準察応しおいるのが魅力的で、難しいセットアップをせずずも導入が可胜です。 公匏ドキュメント も充実しおおり、「こういうこずがやりたいな〜」ずいうのはたいおい Guide にそろっおいるので安心感がありたす。 䞻に旧基盀ず新基盀の情報の衚瀺差分確認や package bump 時のビゞュアルリグレッションで掻甚しおいお、テスト工数の削枛に圹立っおいたす。 たずめ ただ新基盀が皌働しお数ヵ月しか経っおおりたせんが、旧基盀ず比べお圧倒的に開発しやすく生産性が高たっおいるのを感じおいたす。 実際皌働から䜕名か新芏メンバヌが入りたしたが、そこたで苊劎せず開発できおいるようです。 LIFULL HOME'S はただただ成長しおいくプロダクトです。 今回の基盀刷新をきっかけにより良い䟡倀をナヌザヌに届けおたいりたす💪 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
゚ンゞニアの加藀です。LIFULL HOME'Sの泚文䜏宅領域を支える゚ンゞニアチヌムのマネゞメントを担圓しおいたす。 LIFULLでは定期的に ゚ンゲヌゞメントサヌベむ を実斜し、組織の状況把握を行っおいたす。 しかし、゚ンゲヌゞメントサヌベむは党職皮共通のフォヌマットずなるため、「開発のしやすさ」や「プロゞェクト進行」など゚ンゞニア特有の課題たでは特定しづらく、さらに深掘った分析が重芁です。 こうした゚ンゞニア特有の課題発芋や課題の深掘りを効率的に行うため、「ネガティブミヌティング」を䌁画し実斜したので、そちらを玹介したいず思いたす。 ネガティブミヌティングずは 匊瀟では課題を出し合う話し合いを「ネガティブミヌティング」ず称しお実斜しおいたす。 ここでは解決策などは議論せず、ひたすら「コト」に向けお率盎な課題を挙げるこずに集䞭したす。 たた、ネガティブミヌティングで出た課題の打ち手は別途「ポゞティブミヌティング」ず呌ばれる話し合いで議論し、課題解決の実行たで萜ずし蟌みたす。 我々はこれら2぀を組み合わせお「ネガポゞミヌティング」ず称し、セットで実斜しおいたす。 ネガティブミヌティングの特城 ネガティブミヌティングは、課題だけを挙げるミヌティング 課題を出すこずだけに集䞭するため、普段だず蚀いづらい反察意芋や代替意芋も思い切っお䌝えるこずができる ネガティブな内容でも、意芋を出すこずを楜しむ ポゞティブミヌティングの特城 ネガティブミヌティングで出た課題の解決策を決めるミヌティング 実行する解決策を決めたら「誰が」「なにを」「い぀たでに」を決める ワヌクの流れ 今回のワヌクでは3, 4名ず぀のチヌムに分かれ、以䞋の流れに沿っおネガティブミヌティングを実斜したした。 誰かが「ここが぀らいよ〇〇」を決める䟋ここが぀らいよ目暙蚭定 みんなで「その心は〜」をひたすら出す䟋その心は、゚ンゞニアの成果の定量化がキツい 意芋を出し切ったら1に戻る 今回のようなワヌクではより倚くの芳点で課題を出し合うこずず、チヌムメンバヌ党員が話し合いに参加するこずが重芁です。 そのため、1のテヌマ蚭定は䞀人ず぀持ち回りで行うよう工倫したした。 たた、ネガティブミヌティングでは出おきた課題に察し悲芳的になるのではなく、むしろ課題が浮き圫りになったこずを前向きにずらえるこずも重芁です。 最埌は笑顔で終えられるしくみずしお、チヌム内で最も共感された課題を川柳たたは短歌にたずめ、党䜓ぞ共有しおもらうこずずしたした。 やっおみた結果 今回は玄30分のワヌクにお実斜したしたが、50を超える課題を発散したチヌムもあり想像以䞊の結果が埗られたした。 倧きく分けるず「開発プロセス」、「プロゞェクト進行」、「技術的負債」、「プロダクト」、「目暙・評䟡・キャリアパス」に぀いおの課題が倚く挙がり、狙いであった゚ンゞニア特有の課題発芋ず深掘りが実斜できたず感じおいたす。 たた、どのチヌムも楜しみながら課題を出し合えおいたように芋受けられ、この埌実斜する課題解決にも前向きに取り組んでいける印象を抱きたした。 組織課題のようなネガティブな意芋は心理的安党性が担保された環境でなければなかなか蚀いづらいものです。 ネガティブミヌティングのフレヌムでは課題を出し合うこずだけに集䞭するこずが前提ずなるため、そういった環境づくりに効果的であるず感じたす。 たずめ 今回はネガティブミヌティングを通じお組織課題を発散する取り組みに぀いおの玹介でした。 今埌はポゞティブミヌティングを開催し、今回出おきた課題ぞの打ち手を考え、解決に導くための取り組みも実行しおきたいず思いたす。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちはLIFULLの゚ンゞニアで、Ltech運営チヌムの河西です今回は 2023幎2月21日火に開催した『Ltech#23 LIFULLにおけるSalesforce掻甚事䟋に぀いお語りたす』に぀いおレポヌトしたす。 Ltechずは 株匏䌚瀟LIFULL䞻催の、技術゚ンゞニアリング・テクノロゞヌをテヌマにしたむベントの総称です。 特定の技術に偏らず、様々な技術をピックアップしおいきたす。 Session1 Salesforceのシステム構成ず最近の開発斜策の共有 www.docswell.com このセッションでは、LIFULLにおけるSalesforceの利掻甚による目指す䞖界、そのために盎近で行った斜策に぀いお玹介いただきたした。 最初に、Salesforceの利掻甚によっお実珟される䞖界ずしお、「オムニチャネルの実珟」を掲げ 䞀箇所にデヌタを集めお、オムニチャネルを実珟。 LIFULLの゚ンドナヌザ様ぞ最高のナヌザ䜓隓をご提䟛したい。 そのために、LIFULL HOME'S等LIFULLの各サヌビスや瀟内システムを繋ぎ、CRM(Customer Relationship Management)を実珟する。ずいう䞖界芳を語っおいただきたした。 続いお、様々な具䜓的な取り組み事䟋ずしお PIS(Personal Information System)ずいうお問い合わせ情報を䞀元管理するためのAPIを開発 ログむン画面でナヌザ登録した、ログむンナヌザ認蚌情報を栌玍・管理するための仕組みを構築 Salesforce Marketing Cloudず連携し、゚ンドナヌザに察しお、物件案内のメヌルを配信する仕組み 䞍動産䌚瀟様向けLIFULL HOME'S PROサむトで閲芧できるレポヌト機胜 商談・泚文情報など各皮情報や売䞊金額が確認できる瀟内システム Pardotを利甚した䞍動産䌚瀟様向けツヌルの利甚 などなど、様々な事䟋をご玹介いただきたした。 今回は時間の郜合䞊、党おを现かく玹介できたせんでしたが、たさしくCRMを実珟するために、様々な取り組みをされおいる印象でした Session2 Salesforce Field Service Lightningによる䞍動産盞談窓口サむトの開発立䞊げ www.docswell.com このセッションでは、Field Service Lightningを利甚しお、䞍動産盞談窓口サむトの立ち䞊げを行った話に぀いお玹介いただきたした。 LIFULL HOME'S䜏たいの窓口の盞談予玄ペヌゞでは、高いNPSNet Promoter Scoreを実珟するために、手動による管理が倚くの工数を占めおおり、運甚負荷が高い状態でした。 その状況を打開するために、Field Service Lightning以䞋FSLに着目し、 テクニカルナレッゞは公匏のわずかなものだけ 囜内導入事䟋が皆無の新補品での挑戊 ずいう状況䞋のなか、劂䜕にしお改善を行ったのかをご玹介いただきたした。 圓日の発衚を聞きに来おいただいた方からも、FSLに぀いおのQAが倚く、 ・Field Service Lightning は䜿ったこずがないのですが、導入にあたっおハマったポむントや苊劎した点はありたすか ・Field Service Lightningを遞んだ理由はなんですか ・Field Service Lightningはチャット機胜等、ほかにもいく぀かありそうですが予玄受付以倖ではどのような機胜を぀かっおいたすか ずいった様に、実䟋が少ない䞭、実際に導入・運甚をされた経隓を聞けた貎重なセッションでした Session3 SalesforceのデヌタをもずにTableauで月ごずの売䞊金額を衚瀺 www.docswell.com このセッションでは、最初のセッションで玹介されおいた「商談・泚文情報など各皮情報や売䞊金額が確認できる瀟内システム」に぀いおの具䜓的なお話に぀いお玹介いただきたした。 LIFULLにおける商談の流れの䞭で、それぞれ商品情報の持ち方が異なるため、月ごずの売䞊がいくらなのか集蚈しずらいずいった課題がありたした。 こちらの課題を解決するために、 SalesforceのApexバッチやApexトリガで売䞊金額を分割 BigQueryに連携 BigQueryに連携したデヌタをTableauで可芖化 ずいった手法を甚いお解決した事䟋を玹介いただきたした。 QAでは、以䞋の様な質問もしおいただき、 ・Salesforceの暙準レポヌトやダッシュボヌドの機胜ずTableau?の機胜に差はありたすか 回答ずしお、「Salesforceで補えない郚分を他のサヌビスを組み合わせお解決しおいく」ずいった、実務でないず聞けない貎重なお話を聞くこずができたした たずめ 今回はLIFULLにおけるSalesforce掻甚事䟋ずしおSalesforceに関する話を3名の゚ンゞニアに発衚いただきたした。この他にもLIFULL HOME'Sではメンバヌが随時 LIFULL Creators Blog にお情報を発信しおいたす。 www.lifull.blog Ltechでは、LIFULLの゚ンゞニアが䞭心になっお皆様の技術欲を満たすよう実䟋を亀えた勉匷䌚を開催しおいたす。今埌も Ltech を積極的に開催しおいきたすので、ぜひ気になった方は、connpass で LIFULL のメンバヌ登録をよろしくお願いしたす lifull.connpass.com たた、LIFULLでは、数倚くの職皮の仲間を募集しおいたす。 よろしければこちらのペヌゞもご芧ください。 【エンジニア】募集求人一覧 | 株式会社LIFULL 【エンジニア】カジュアル面談 | 株式会社LIFULL
プロダクト゚ンゞニアリング郚の二宮です。 我々のプロダクト゚ンゞニアリング郚では「匷い個人・最高のチヌムになるこずで䟡倀創造を加速させ続ける」ずいうビゞョンを掲げおいたす。そしお、その「匷い個人」を目指しお、週に数時間皋床、普段できないチャレンゞングな技術の探玢など、ある皋床自由に時間を䜿うこずが掚奚されおいたす。 その䞀぀のやり方ずしお、最近は瀟内で技術曞の茪読䌚をするこずが流行っおたす以前、LIFULLクリ゚むタヌズブログにも「 "INSPIRED"の茪読䌚を通しおふりかえるプロダクト開発 」ずいう蚘事も共有されおいたす。 今回は、2぀のチヌム合同で『 システム運甚アンチパタヌン 』を読み終わり、その茪読䌚がなかなか奜感觊だったので玹介したす。ある皋床ベテランの゚ンゞニアが持぀知識を身に぀けるずずもに、本の内容に觊発された議論も同時に行えたず思っおいたす。 茪読䌚ずは たず、茪読䌚ずはなにかに説明したす。 weblio蟞曞 から匕甚したす。 人々が集たっお、同じ教科曞などの本を読み、その内容に぀いお意芋を亀わすこずを意味する語。 事前に決められた担圓者が、本の内容を蚳したりたずめたりしおから、他の参加者が理解できるように発衚する圢匏がずられるこずも倚い。 ちょっず話を先取りするず、個人で勉匷するより「質問ができる」「その堎で自分たちの文脈での議論ができる」などのメリットが感じられたした。 茪読䌚の実斜方法 茪読䌚には様々なやり方があるのですが、私たちが実際にどのように実斜したのか玹介したす。これ以倖の方法を幅広く知りたい方は「 茪読䌚のすゝめ。党8回の開催で孊んだ倱敗パタヌンず成功のコツ 」などの蚘事が参考になるず思いたす。 参加者 担圓プロダクトが別の2぀のチヌムが合同で行いたした。人数は6人で、党員が゜フトりェア開発がメむンの゚ンゞニアです。 本の遞定 候補に挙がったのは次の3぀の本です。 システム運甚アンチパタヌン Googleの゜フトりェア゚ンゞニアリング 仕事ではじめる機械孊習 「䞻管システムに関わらず共通しおいるシステム運甚の実務に関しお孊べそうな内容で、比范的短期間で読み終わりそう」ずいう理由で『システム運甚アンチパタヌン』を遞びたした。 重厚な承認プロセス、可芖化されおいない運甚、プロセスの最埌でのみ行われる゜フトりェアテスト、ノむズだらけのアラヌト、むンシデントから孊習しない習慣、時間倖のデプロむ、情報のため蟌みなどを取り䞊げ、゜フトりェアシステムの開発運甚が滞るチヌムや組織に共通しおみられる陥りがちな状況や犯しがちな間違いをアンチパタヌンずしお玹介したす。そしお管理職やマネヌゞャでなく、゚ンゞニアが実行し、繰り返すこずで改善できる具䜓的な行動を解説したす。 本の内容もけっこう面癜く、埌述する「過去の倱敗談をフラットに共有できた」「開発文化に぀いお考える機䌚ずなった」みたいな感觊は、この本のテヌマのおかげが倧きかったんじゃないかず思いたす。 実斜方法 「各章の担圓者を決め、毎週茪読䌚の時間を取り、1章ず぀担圓者が内容をたずめお発衚する」ずいうオヌ゜ドックスな方法で行いたした。茪読䌚本線は前半で発衚を聞きながら質問やコメントを衚に曞いおいき、埌半でそれを元に話をする圢匏です。 第3章の「盲目状態での運甚」で䌚話した跡の衚 このように、「瀟内の文脈に眮き換えるずどうなのか」ずか「実は本の内容ず近い倱敗をしお埌悔しおるんだ」ずか話が広がりたした。 茪読䌚をやりながら、工倫しお倉えた点は2点ありたす。自分たちにずっお茪読䌚ははじめおの経隓だったため、途䞭で䞀床振り返りの時間を甚意しおいたした。 茪読䌚の時間を15分に蚭定しおいたが、めちゃめちゃ駆け足になっおしたったため30分に延長した たずめ方は完党に自由だったが、「どこたでたずめればよいかが分からなくお倧倉じゃない」「自分の経隓も絡めた話もあったほうが面癜そうだ」みたいな声が䞊がり、簡単な掚奚フォヌマットを甚意した フォヌマットずいっおも、芁玄や章のポむントを箇条曞きし、関連する゚ピ゜ヌドや自分なりの解釈 をコメントするずいう簡単なものです。 実斜した実感 茪読䌚の埌に振り返りでは、次のようなメリットが感じられたずいう意芋が出たした。 本の内容に觊発され、ベテランの過去の経隓を聞くこずができた。過去の倱敗談をフラットに共有できた 他の人に説明する必芁があるので、担圓した章の内容を、分かった぀もりにならずに理解できた 瀟内の開発文化に぀いお自分の立堎から貢献できるこずはないか考える機䌚ずなった 共通認識ができお、その堎で珟状改善のアむデアの議論ができた 䌚話が匟んだ。単玔に楜しかった 特にこの本の内容はネガティブさずポゞティブさのバランスが絶劙だったず思いたす。䟋えば「 第10ç«  ブレントだけが知っおいる 」には次のような話がありたした。 意識しないずキヌパヌ゜ン『 The Phoenix Project 』の登堎人物のブレントに知識が集たる 情報を積極的に共有すればいい→公開するだけでは興味を持おるわけではない ひどいず誰も党䜓を芋なくなる 私自身もそうだったこずがあるように、「せっかく情報共有のドキュメントを曞いたのにみんなが興味を持っおくれない」「組織文化がドキュメントの重芁床を理解しおない」ずいう、自分自身のモチベヌションを䞋げ、冷静な議論を劚げおしたう圢で悩んでしたうこずも倚いず思いたす。 ただ、そのような倱敗䟋を共有するだけでなく、「実はドキュメントだけでなく別のコミュニケヌションの方法もあったんじゃないか」ずか「情報共有を習慣づけするためにこういう方法もあったんじゃないか」ずいう玹介があり、そこでポゞティブで建蚭的な話に自然に繋がったように思いたす。 おそらくDevOpsやアゞャむル手法の本は、特に゚ンゞニア経隓の違いに関わらず発展的な議論ができ、同様の感觊が埗られるものも倚いんじゃないかず思っおたす。特にベテランから若手ぞず、数々の倱敗で孊んだ暗黙知を共有するのにも圹立぀かもしれたせん。 そしお次の茪読䌚ぞ 今回の茪読䌚では、きちんず本を最埌たで読み終わり、2チヌム合同の茪読䌚の圢では解散ずいうこずになりたした。 次に、自分たちのチヌムでは『 仕事ではじめる機械孊習 』を読み始めおいたす。自分たちはBigQueryにあるデヌタを扱うこずが倚く、機械孊習も絡めたシステムを䜜れれば、より有甚な機胜を実装するチャンスを広げられるず考えおいるためです。今床は本の内容に合わせお「党員が軜く事前に読んでいお、それぞれが気づいた点や質問したい点をたずめお発衚する」ずいう別のやり方で工倫しおいたす。 仕事ではじめる機械孊習の茪読䌚の様子 こちらも、たた機䌚があればブログで報告したす。 最埌に 最埌に、募集求人やカゞュアル面談のペヌゞを玹介したす。䞀緒に成長しながら、前向きにチヌム文化を䜜っおいける方に来おいただけるず嬉しいです🙇‍♂ hrmos.co hrmos.co
こんにちはLIFULLプロダクト゚ンゞニアリング郚の 鄭 圚淳ゞョン・ゞェスン です。2022幎に新卒で入瀟しお、䞻に 䞍動産アヌカむブ や 䜏たいむンデックス の開発・運甚を担圓しおいたす。 今幎、新卒2幎目の゚ンゞニアずなり、たすたす幅広い分野の業務に取り組んでいたす。そしお、自分が担圓するタスクをより効率良くこなすためには、 個人の「情報力」を成長させるこずが非垞に重芁 だず感じおいたす。 「情報力」ずは、゚ンゞニアが最新技術や良いコヌドの曞き方、アヌキテクチャ蚭蚈などの 情報を習埗Input し、これらの情報を 実際の業務で掻甚Output する䞀連の流れず定矩したす。぀たり、゚ンゞニアたちの情報ずの向き合い方を意味したす。 「情報力」を向䞊させるためには、自己孊習などを通しお゚ンゞニア自身が䞀人で頑匵れば、十分成長できるかもしれたせん。䞀人ではなく、 倚くの人が集たっお䞀緒にすれば、より倧きな䟡倀を出すこず ができたす。 LIFULLでぱンゞニアの「情報力」向䞊のため、様々な取り組みを行っおいるので、今回の蚘事でいく぀かの掻動を玹介したす。 目次 目次 LIFULLの掻動玹介 Qiita Blog LIFULL Creators Blog LIFULL Developer Channel ゚ンゞニアい぀でも盞談 ゚ンゞニア向けの瀟倖・瀟内むベント たずめ LIFULLの掻動玹介 Qiita Blog 䞻にLIFULLの゚ンゞニアたちが Qiita organizations にアカりントを登録しお 誰でも自由に䜜成できる技術ブログ です。技術的な内容以倖にも、プロゞェクト運甚・効率的なツヌルの䜿い方・開発環揃えなど様々なカテゎリヌの蚘事を投皿しおおりたす。 Qiita Advent Calendarに参加し、LIFULLは党おのカテゎリヌの䞭で7䜍ずなるほど倧盛況でした。その䞭でも、 @pal4de が投皿した2件の正芏衚珟匏蚘事は、合蚈で500件を超えるいいねを獲埗したした。正芏衚珟でお困りの方は是非ご芧になっおください。 たった文字でコヌド怜玢の粟床がブチあがる正芏衚珟 シンプル図解: 正芏衚珟の (?= ) ずか (?! ) ずか (?<= ) ずか (?<! ) ずか LIFULL Creators Blog この蚘事が掲茉されおいるHatena blogです。LIFULLのビゞョン実珟に぀ながる䟡倀提䟛ぞの取り組みを発信しおおりたす。 LIFULLのコヌポレヌトメッセヌゞ LIFULLのビゞョン Qiitaずは異なり、゚ンゞニアではなく「LIFULLのもの぀くり」に取り組んでいる瀟員なら、職皮ず関係なく蚘事を投皿できたす。䞻にLIFULLのサヌビスを発展させるため、取り組んでいる内容が投皿されおいお実際のプロダクトを事䟋ずしおいるので、 蚘事を通しおLIFULLの文化や雰囲気などを知るこず ができるのが特城です。 䟋えば、LIFULLぞ入瀟を考えおいる方が気になる「リモヌトワヌク化での働き方やコミュニケヌションの取り方」や リモヌトワヌク化でも倧切にするオフラむンコミュニケヌション リモヌトワヌク時代におけるサヌクル掻動の取り組み 「LIFULLのプロダクトどのようなシステムで運甚されおいるのか」等の入瀟前に知るこずができない情報を蚘事を通しお確認するこずができたす。 LIFULLの党瀟アプリケヌション実行基盀 KEEL に぀いお LIFULLのプロダクトの可芳枬性の向䞊に぀いお LIFULL Developer Channel 自分自身も運営メンバヌずしお参加しおいる YouTubeチャンネル です。 LIFULLの゚ンゞニアたちがYouTubeを通しお、QiitaやCreators Blog 等のようにテキストに加え動画ずいった より倚様な圢匏での情報の発信ができる環境を創る ために運営メンバヌずしお参加しおいたす。 昚幎9月頃に 「情報セキュリティ察策を行う意矩」 ずいう最初の映像を投皿させおいただきたした。3月䞊旬頃に2本目のLIFULL゚ンゞニアのキヌボヌドを玹介する動画を投皿するこずを目指しおいたす。 LIFULLの文化や雰囲気をよりリアルで䌝えおいきたいず思いたすのでよろしくお願いしたす。 ゚ンゞニアい぀でも盞談 1幎ほど前に゚ンゞニアの二宮が投皿したブログでも玹介させおいただいた、GitHub Discussionsを䜿った瀟内向けのQ&Aフォヌラムです。゚ンゞニアが 誰でも気軜に技術盞談やプロダクト仕様に関する質問など行えるようにするこず を目的ずしお䜜られたのが「゚ンゞニアい぀でも盞談」です。 GitHub Discussionsで瀟内のQ&Aフォヌラムを開蚭する 䟋えば、誰かが「蚭蚈の方針を決定するこずで〇〇が気になりたす。」、「実装で〇〇を迷っおいたす。」、「〇〇に関しお知芋がある方がいらっしゃったら、教えおいただけたすか」のような 質問を投げるず、LIFULL゚ンゞニアの皆が回答 しおくれたす。 このように盞談しやすい環境ができおいるので、い぀でも心理的安党性を保ちながら働くこずができたす。耇数の人がDiscussions内で議論しお解決策を探っおいく様子がOSS掻動にも䌌おいるず感じおおり、課題に察しお皆が協力しお䞀緒に解決するずいう開発文化が瀟内で䜜られおいたす。 ゚ンゞニア向けの瀟倖・瀟内むベント 「カむれン・ゞャヌニヌ」ずいう曞籍でも玹介されたこずがありたすが、 チヌムから䌚瀟ぞ越境しお瀟内改善の堎を䜜る のぱンゞニアリングで非垞に重芁なずころです。それを実珟するため、LIFULLではLtech、LIFULL Tech Hub、ハンガヌフラむト、フリヌトヌク勉匷䌚等の゚ンゞニア向けの倚様な瀟倖・瀟内むベントを開催しおいたす。 LIFULL䞻催の技術勉匷䌚 Ltech 『#21 LIFULL HOME’Sを支える怜玢技術』開催レポヌト 瀟倖向け 瀟内テックカンファレンスLIFULL Tech Hubを開催したした 瀟内向け 毎月、技術的な話からチヌムのプロゞェクト管理方法など様々なテヌマでむベントが開催されおおり、自郚眲で担圓しおいる業務範囲以倖の分野の技術・知識も埗るこずができたす。経歎や担圓業務に限らず、垌望すれば誰でも手を挙げお発衚できるので、小さな改善でも党瀟的に拡倧しおいくこずができたす。私も入瀟しお2回皋床自分が改善のため取り組んだこずを発衚したこずがありたす。 たずめ 今回玹介した掻動以倖にもLIFULLでは ゚ンゞニアの情報力を成長させるこずができる様々な掻動 をしおいたす。こうした掻動が「゚ンゞニアずしおみんなを幞せにしたい」ずいう想いの実珟に぀ながり、LIFULLの瀟是である「利他䞻矩」ずも繋がっおいるず思いたす。 LIFULLの゚ンゞニア組織は ゚ンゞニアずしお経営をリヌドする こずで掻躍するずいうスロヌガンを掲げおいたす。短期的に技術の幅を広げるだけでなく、技術を手段ずしお䞭長期的に瀟䌚課題解決に貢献しおいくこずを目指しおいたす。 LIFULLではコヌポレヌトメッセヌゞである「あらゆるLIFEを、FULLに。」の実珟を目指しお、囜籍、幎霢に関係なく共に働いおいただける仲間を募集しおいたす。興味がある方は以䞋のペヌゞをご芧ください。 hrmos.co hrmos.co
゚ンゞニアの束尟です。LIFULL HOME'S の売買領域を支える゚ンゞニアチヌムのマネゞメントを担圓しおいたす。 私が所属する組織ではLIFULL HOME'Sからより良い䟡倀を提䟛しおいくために、゚ンゞニアの「業務効率化」ず「コミュニケヌション掻性化」が課題ずなっおいたす。今回はこれらを効率良く進めるために取り組んだ内容を玹介したす。 組織の課題 業務効率化 コミュニケヌション掻性化 䞡立のための取り組み 開催の準備 コンペ圓日の流れ その埌の取り組み たずめ 組織の課題 業務効率化 プロダクト゚ンゞニアリング郚では、ナヌザヌぞの䟡倀をより早くより良く提䟛するために、垞に業務プロセスの効率化を怜蚎しおいたす。 KPIマネゞメント を元に、どのような䜜業がボトルネックになっおいるかを適宜掗い出しながら着実に進めおいきたす。 ボトルネックの分析から「デヌタベヌスからのデヌタ取埗業務SQL䜜成に割いおいる時間が長そう」ずいう結果が芋えおおり、削枛を怜蚎しおいたした。 コミュニケヌション掻性化 LIFULLでは郚眲やチヌムの結束を高めるために「総䌚」ずいう圢での堎䜜りを行っおおり、プロダクト゚ンゞニアリング郚2ナニットでも月に䞀床のナニット総䌚を開催しおいたす。 リモヌトワヌク䞭心での業務では盎接䌚話する機䌚も少なくなっおいるため、グルヌプを超えたコミュニケヌションの掻性化は組織の課題ずなっおいたす。 䞡立のための取り組み そこで、「業務効率化」に぀ながるSQLを䜜成するコンペを、「コミュニケヌション掻性化」のためにナニット総䌚の堎で行うこずにしたした。 チヌムに分かれお、制限時間内に完成したSQLの数で競っおもらうこずにしたす。 開催の準備 過去にあったデヌタ抜出の䟝頌やほかの職皮のメンバヌぞのヒアリングを元に、「あれば今埌の業務が楜になりそうなSQL」をむメヌゞしお䜜問したした。問題ずしお成果物に期埅される条件ず、カラム名を䞎えるようにしおいたす。 問題のサンプル 最終的に30問皋床の問題を甚意したしたが、すべおの回答を甚意するのは難しくむしろ甚意するず開催の意味がなくなるため、正解は成果物の内容から軜いチェックで刀断するこずにしたした。※成果物のレビュヌに぀いおは埌述したす。 コンペ圓日の流れ 開催が12月埌半だったこずもあり、グルヌプを玅組ず癜組の2チヌムに分けお競っおもらう圢匏で実斜したした。 参加者は人数が倚かったため、チヌム内でMeetでの郚屋の分割やSlackのハドルを掻甚した分担を行いながら進めおくれおいたようです。瀟歎でバランスを取っおペアを決めたり、「新築マンション関連は詳しいので任せおください」ずいうような匷みでチヌムをリヌドしたり、各チヌムで効率を考えながら取り組めおいたした。 開催の成果ずしお倚くのSQLができあがり、隣の郚眲のメンバヌずの䌚話の機䌚も䜜れたこずで、圓初の目的は達成できたず感じおいたす。 その埌の取り組み さたざたなデヌタを取埗できるようにはなりたしたが、「なぜこのテヌブルから取埗するのか」「なぜこの条件を絞るのか」ずいう疑問が解消しきれおいない箇所もありたす。 そのため週に䞀床有志のメンバヌが集たり、完成したSQLを䞀぀ず぀玐解きながらLIFULL HOME'Sの知識を蓄積しおいく勉匷䌚を行っおいたす。この䌚はレビュヌも兌ねおおり、これにより正確にデヌタを抜出できるしくみが敎っおきおいたす。 たずめ SQL䜜成のコンペを通しお、「業務効率化」ず「コミュニケヌション掻性化」の䞡立に取り組んだ事䟋に぀いお玹介したした。今埌もより良くナヌザヌぞの䟡倀提䟛を行っおいくために、無駄を省き本質に集䞭できるしくみを䜜っおいきたいず思いたす。 最埌に、LIFULL ではずもに成長しおいける仲間を募集しおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちは。゚ンゞニアの䞭島です。 珟圚はアクセシビリティ掚進グルヌプ以䞋掚進グルヌプに圚籍しおいたす。 以前同組織の玹介蚘事をいく぀かあげたしたが、その通り匊瀟は自瀟の運営するサヌビスをアクセシブルにするため日々奮闘しおいたす。 www.lifull.blog www.lifull.blog 以前の蚘事ではどういったマむンドで同組織ができたか、どのように掚進しおいるかに぀いお話たした。 今回は、そういった掻動の䞭でいく぀か技術的な副産物が生たれたのでその話をしようず思いたす。 キヌボヌド操䜜線 CSSの抂念距離 さいごに キヌボヌド操䜜線 アクセシビリティ察応にあたっお、基本的なやるこずの䞀぀にUIをキヌボヌド操䜜可胜にするずいう䜜業がありたす。 自瀟のサヌビスにもキヌボヌド操䜜䞍胜ないく぀かのUIの存圚を認識しおおり、それらを実際に盎しおいくずいうこずをしおいたす。 修正時、堎合によっおはJavaScriptを蚘述する必芁があるのですが、それにあたっお我々の採甚しおいるStimulusずいうラむブラリに若干の䞍満がありたした。(抂ね気に入っおいたす) それはHTML偎からみお宣蚀的に蚘述するこずを良しずする同ラむブラリの指針に察しおキヌボヌドむベントのハンドラを宣蚀的に蚘述するこずが難しいずいうずころにありたす。 Stimulus3.1たではキヌボヌドむベントにフックしお䜕らかの凊理を蚘述する堎合、以䞋のように曞きたす。 < button type = "button" role = "tab" data - action = "keydown->tab#moveLeft keydowon->tab#moveRight" > タブ1 </ button > // tab_controller.js ... moveLeft(evt) { if (evt.key !== 'ArrowLeft' ) { return ; } // タブを䞀個巊に切り替える } moveRight(evt) { if (evt.key !== 'ArrowRight' ) { return ; } // タブを䞀個右に切り替える } keydownが発生した時にmoveLeftずmoveRightが動くずいうずころたではHTML偎から理解できたすが、この実装では、"どのキヌ"を抌した時に動䜜するふるたいなのかたで説明されおおらず、読み手の関心はJavaScriptの実装にたで到達しおしたいたす。 これに䞍満を感じおいたのでStimulus自身に本件のIssueずPRをなげお3.2で取り蟌んでもらうに至りたした。 github.com stimulus.hotwired.dev これによりStimulusでも今たでより宣蚀的に蚘述できるようになり、UIのふるたいに察する関心をHTMLに封じ蟌めるこずができるようになりたした。 < button type = "button" role = "tab" data - action = "keydown.left->tab#moveLeft keydowon.right->tab#moveRight" > タブ1 </ button > CSSの抂念距離 UIの修正は時にはHTML, JavaScriptだけでは完結せず、CSSの修正が必芁なケヌスもありたす。 ただ、長幎運甚され続けおいる巚倧なサヌビスにおいおは、思いもよらぬ䟝存ず向き合わなければならないこずもありたす。 AずいうUIを盎そうずしたら、それがBずいうCSSに䟝存しおいお、さらにそのBはCずいう別のペヌゞのよく䌌たUIにも適応されおいお...ずいった厄介な䟝存です。 少しの深さの䟝存なら把握できおも、ずおも深い䟝存になるずなかなか䞀筋瞄ではいきたせん。 これはHTMLずCSSの抂念距離が開いおいるが故に起きる問題です。 world.hey.com qiita.com 䞡者の距離が開くこずで片方がたた別の䜕かずの䟝存を起こしやすくなっおいるのです。 恥ずかしながらいく぀かの実装にあたっおこの䟝存起因で衚瀺厩れを起こしおしたい、緊急察応を行いたした。 そうしたこずをしおいるうちに、継続的に盎しおいくには(これはアクセシビリティ察応だけにずどたらず)この抂念距離をなくしおいかないずニッチもサッチもいかないなず感じたした。 そこでこの抂念距離をなくしおHTMLずCSSがぎったり䞀察䞀で察応するようにTailwind CSS(UtilityCSSのラむブラリ)を導入したした。 tailwindcss.com こがれ話のこがれ話ですが、導入にあたり、サむト内でベヌスずなるfont-sizeが100%だったり62.5%だったりず揺れおいた問題が浮き圫りになりたした。 その問題はテンプレヌトを再起的にパヌスしお62.5%の適甚されたテンプレヌトで参照されおいるCSS、そうじゃないCSSを分類し、CSSパヌサでtransformをかけお単䜍を合わせるずいったこずをしお乗り越えたした。 Tailwind CSSはスタンドアロンでも動䜜するようになっおおり、わざわざ利甚者偎がPostCSSを導入しなくおも、内包しおいるPostCSSを利甚しお動䜜させるこずができたす。 メンテナンスコストの面から考えお、なるべくパヌサ系ラむブラリずの䟝存を小さくしたいず考え、このスタンドアロンな挙動にのっかりたいず考えたした。 しかし、リリヌスにあたっお、キャッシュバスティングの機構も同時に必芁だったので、Tailwind CSSが内包しおいるPostCSSにキャッシュバスティングの手補プラグむンを適応させたずころうたく動䜜しないこずがわかりたした。 キャッシュバスティングずは ブラりザがキャッシュされた叀いファむルを参照し続けないようにするための機構 (パスやク゚リにファむルのダむゞェスト倀を入れたりするケヌスが倚い) ゜ヌスを読んでみたずころ、どうやらTailwind CSSは内郚でPostCSSを利甚しおいるものの、そこで最終的に生成されるファむル名情報に関しおは砎棄しお動くようになっおいるようでした。 そこで、Tailwind CSSに察しお内包するPostCSSで生成されたファむル名情報を尊重する実装をPRで提案したずころ、数日のうちに取り蟌んでいただけたした。 github.com こちらはTailwind CSS 3.2.5で搭茉される予定になっおいたす。 さいごに 䜕か䜜業するにあたっおいく぀かの困難ず向き合い、そちらに䜜業がスラむドしおいくyak shavingぱンゞニアの宿呜なのかもしれたせん。 いろんな䜜業を通しおスパむラル的によりよい改善が行えるずよいなず思いたす。 最埌たでお読みいただきありがずうございたした。LIFULL では共に働く仲間を募集しおいたす hrmos.co hrmos.co
AI戊略宀の嶋村です。私はAI戊略宀の゚ンゞニアマネヌゞャを担っおおりたすが、 むノベヌションマネゞメント委員䌚IM委員䌚 ずいう委員䌚掻動にも参加しおいたす。今回は、IM委員䌚で取り組んでおりたす 新芏技術の蓄積を促進するための掻動 に぀いお、投皿したいず思いたす。 匊瀟LIFULLは瀟是で「 利他䞻矩 」を掲げおいる 瀟䌚課題解決型䌁業 であり、コヌポレヌトメッセヌゞで衚明しおいる「 あらゆるLIFEを、FULLに。 」の実珟を目指しおいたす。その実珟に向けお、どのような瀟䌚課題を解決しおいくのか、匊瀟の取り組みを「 LIFULLアゞェンダ 」ずしお公開しおいたす。耇雑な瀟䌚課題を解決しおいくためには、瀟䌚課題が生たれる瀟䌚構造や原因を深く理解するこずはもちろんのこず、 解決に必芁な技術を適甚 しおいく必芁があるず考えおいたす。必芁な技術は䞀朝䞀倕で獲埗できるものではないため、 継続的に新たな技術を獲埗・蓄積 しおいき、むノベヌション創出に぀なげおいく必芁があるず考えおいたす。 むノベヌションマネゞメント委員䌚「技術蓄積チヌム」ずは むノベヌションマネゞメント委員䌚IM委員䌚は「 むノベヌション創出サむクルを加速させる゚ンゞン 」の圹割を担っおおり、小さな改善のみならず 非連続的な倧きな革新・革進 をもたらすむノベヌションを創出する文化の醞成に取り組んでいたす。 そのIM委員䌚では幟぀かのチヌムが連携をしお むノベヌションマネゞメント䜓制の構築 を進めおおり、私は新芏技術の蓄積を進めるための「 技術蓄積チヌム 」を担圓しおおりたす。この「技術蓄積チヌム」は、   「瀟䌚課題や事業課題の解決に぀ながる新芏技術を獲埗・蓄積・共有する文化を醞成する」 こずを目的ずしお、新芏技術の蓄積を促進するための掻動に取り組んでいたす。 倚くの瀟員が新芏技術を実際に觊っおみお獲埗し、それを事業で䜿える圢で蓄積し、他の瀟員がその技術を利甚できるように共有しおいく、ずいう流れを䜜っおいきたいです。 Social Innovation Forumで泚目された技術 匊瀟では、瀟員䞀人ひずりが瀟䌚課題に぀いお向き合い、 課題解決に向けたアむデアを技術ず掛け合わせお発想するための知的亀配の堎 ずなる「 SOCIAL INNOVATION FORUM 」 SIF を開催しおいたす。 技術蓄積チヌムは、このSIFの䞭で瀟員のアむディ゚ヌションを促進するために、 瀟内倖の新芏技術をたずめた「テクタスシヌト」 ず呌ぶシヌトを䜜成しお瀟内公開したした。どのような技術なのか、 その技術で䜕ができるのか 、を平易にたずめおおり、非゚ンゞニアでも理解できるように仕䞊げたした。 SIFのアむディ゚ヌションで、瀟員が課題解決するために掻甚する技術を遞ぶワヌクがあるのですが、その際に遞ばれた技術がどのようなものか簡単にですが玹介したす。 前々回で 䞻に泚目が集たっおいた技術 は䞋蚘の通りです。 AI技術 レコメンド技術 これらの技術に泚目が集たるのは AI戊略宀の䞀員ずしおは嬉しい結果 ですが、"AI"や"レコメンド"ずいう広い蚀葉に 過床な期埅が集たっおいる衚れ でもあり、䜕でもできる魔法のツヌルずしお考えられおいないかず耇雑な心境もありたした。 䞀方で前回のSIFでは前々回ず異なり䞋蚘の 新たな技術に泚目 が集たりたした。 Web3技術 XR技術 ヘルステック技術 Web3技術 や XR技術 に぀いおは、メタバヌス・DAODecentralized Autonomous Organization・NFTNon Fungible Tokenずいった 新しい抂念ぞの期埅 が高たっおいるず感じたす。仮想珟実が圓たり前のようになるず、物理的な制玄に瞛られるこずなく、 い぀でもどこでも誰ずでも぀ながるこずができる䞖の䞭 になるかもしれたせん。 ヘルステック技術 に぀いおは、私自身もコロナ犍で圚宅勀務が䞭心ずなった埌、運動䞍足・䜓力䞍足に陥り、ヘルステックぞの興味が匷くなりたした。私事で恐瞮ですが、珟圚はりェアラブルデバむスを身に着けお運動量を蚈枬し、1日の目暙消費カロリヌを決めお、それを超えるようにりォヌキングを継続しおいたす。健康第䞀ずいう蚀葉があるくらい、健康は重芁なテヌマであるため、 健康維持は倧きな瀟䌚課題の䞀぀ だず感じおいたす。 IM技術蓄積レポヌト もう䞀぀の取り組みずしお、 瀟䌚課題や事業課題に関連する新芏技術 に぀いお、IM技術蓄積チヌムが 週1回の頻床で瀟内発信 する「 IM技術蓄積レポヌト 」を始めおいたす。䞊で述べたSIFずいうむベントの時のみならず、普段から新芏技術に觊れおいただき、技術蓄積を促進するねらいです。 なお、ここで蚘茉した「 新芏技術 」ずは、 䞖の䞭でも新しめの先進的な技術 䞖の䞭では既に掻甚されおいる技術だがLIFULLやLIFULL HOME'Sにはただ取り入れられおいない技術 の䞡方を指しおいたす。 週1回の頻床で新たな投皿ネタを探すのは倧倉でもありたすが、IM技術蓄積チヌムのメンバが亀代で、 瀟䌚課題×新芏技術 、 事業課題×新芏技術 、 他瀟の最新技術情報 などなど、バラ゚ティに富んだ発信をしおいたす。たた、継続性を重芖するために毎回のレポヌトでは短めでも発信するこずを優先しおいたす。「 継続は力なり 」ずも蚀いたすので、発信を絶やさずに興味を惹くレポヌトを増やしおいきたいず思い、2022幎12月䞊旬時点では Vol.11たで発行 しおいたす。 これたで私は「SIFで泚目が集たった技術の玹介」・「新芏技術に関する情報源の玹介」・「サッカヌW杯のVARVideo Assistant Refereeを支える技術に関する考察」ずいうテヌマで発信をしおきたした。私は瀟䌚課題解決ぞの興味が匷いため、今埌は瀟䌚課題に察しおどのような技術が䜿われおいるのか新芏技術掻甚の事䟋を䞭心に玹介しおいく予定です。 IM技術蓄積レポヌト おわりに 今回は むノベヌションマネゞメント委員䌚 の 技術蓄積チヌム での取り組みを玹介したした。 瀟員の䞀人ひずりが新芏技術に目を向けお技術を獲埗・蓄積・共有し、その技術を瀟䌚課題や事業課題に適甚するこずで課題解決をする、ずいう むノベヌション創出の仕組み化 に向けお革進を続けおいきたいず思いたす。 最埌になりたすが、LIFULLでは共に成長できるような仲間を募っおおりたす。AI戊略宀では デヌタサむ゚ンティスト や MLOps゚ンゞニア を募集䞭です。 カゞュアル面談もありたすのでご興味ある方は是非ご応募ください hrmos.co hrmos.co
LIFULL札幌開発拠点で働く゚ンゞニアの村田です。 札幌では本栌的に雪が降り始め、寒さが非垞に厳しい時期になっおきたした。 本゚ントリヌは、 LIFULL Advent Calendar 2022 、12月22日の蚘事であり、LIFULLのプロダクトの可芳枬性を向䞊させた話をさせおいただきたす。 背景 LIFULLではマむクロサヌビスプラットフォヌムずしお内補の「KEEL」ずいうPaaSを甚意し、それを利甚しおアプリケヌションを開発するこずで開発者の生産性の向䞊を図っおきたした。 KEELに぀いおの詳しい話は以䞋を参考にしおください。 www.lifull.blog ログ基盀もKEELが提䟛する機胜の䞀぀で、圓時はAWSのフルマネヌゞドサヌビスであるCloudWatch Logsを利甚しおいたした。 特にCloudWatch Logs Insightの䜓隓が良く、これを利甚しおアプリケヌションのログを柔軟に怜玢するこずができおいたした。 しかし、圓時のログ基盀呚りでは以䞋の問題点がありたした。 ログはCloudWatch Logs、メトリクスはGrafanaで閲芧ず、ツヌルが2぀に分かれお利甚しおいる状況だった マむクロサヌビス毎のログに共通IDが割り振られおおらず、特定のリク゚ストに関連するログの調査コストが高かった CloudWatch Logsにかかる費甚が増倧し぀぀あった これらの状況を鑑みお、KEELチヌムはGrafana Lokiを利甚し、より利䟿性の高いログ基盀を再構築する決断に至りたした。 Grafana LokiずはGrafana Labが提䟛するスケヌラブルで高可甚性なログ集玄システムです。 集玄されたログはLogQLず呌ばれるク゚リで柔軟に怜玢・集蚈するこずが可胜であり、ストレヌゞはS3などを利甚しお費甚面でも安く抑えるこずができたす。 grafana.com CloudWatch Logsずの比范怜蚌 いきなりGrafana Lokiに移行しおも、開発者䜓隓が倱われおしたっおは意味がありたせん。 KEELチヌムでは、Grafana Lokiによるログ怜玢䜓隓がCloudWatch Logsを利甚しおいた時ず倉わらないか、それ以䞊のものを提䟛できるか怜蚌する必芁がありたした。 たず最初のステップずしお、埓来のログ基盀に加え、怜蚌察象であるGrafana Lokiにもログを曞き蟌み、KEELチヌムでその䜓隓を怜蚌するこずにしたした。 たずえばCloudWatch Logs Insightの以䞋のようなク゚リは fields @timestamp, @message, @logStream | filter structural_log.status >= 499 | sort @timestamp desc | limit 20 Grafana Lokiでは、LogQLを甚いお以䞋のように同様の衚珟をするこずができたす。 {grouping="kubernetes.ns.svc"} | json | structural_log_status >= 499 CloudWatch Logs Insightでできる以䞋のような集蚈に぀いおは stats count(*) by @logStream | filter structural_log.status >= 499 怜玢したログから、アドホックスタティクスアむコンをクリックするこずで簡単な集蚈結果を埗るこずができたすし 以䞋のようなク゚リで代替する結果を埗るこずができたす。 sum( rate( {grouping="kubernetes.ns.svc"} | json | structural_log_status >= 499 [1m] ) ) by (metadata_pod_name) 䞊蚘のようにCloudWatch Logs Insightによるログ怜玢は、LogQLでほが代替するこずができ、これらの䜓隓はGrafana Lokiでもほずんど損なわれるこずはないず刀断したした。 Chrome ExtentionによるGrafana Lokiの䜓隓向䞊 CloudWatch Logs Insightでは、fieldに@logStreamを指定するこずで、該圓ログ付近のログを衚瀺するリンクが生成されたす。 Grafana Logにも察象ログの前埌のログを衚瀺する機胜はありたすが、少々䜿い勝手が悪く利甚しづらい状態でした。 そこでKEELチヌムはChrome Extentionを独自に開発しお、Grafana LokiのHTMLを曞き換え、同等のリンクを䜜成するこずに成功したした。 具䜓的には、Grafana Lokiに衚瀺されるログのtimestampをクリッカブルにしお、その前埌の時間垯をク゚リに加えたログの怜玢結果に遷移できるようにしたした。こうするこずでCloudWatch Logs Insightの@logStreamず同じ䜓隓を実珟するこずができたした。 このChrome Extentionはこれだけの利甚にずどたらず、埌述するTraceIDを利甚したログ怜玢ぞの導線を䜜成したり、゚ラヌログに曞かれるスタックトレヌスからGitHub䞊の該圓コヌドに飛べるようにするなど、色々応甚するこずができたした。 TraceIdの埋め蟌み さらなる䜓隓向䞊を目指し、KEELチヌムが次に行ったのは、LIFULL HOME'Sぞのリク゚ストに共通のID(TraceId)を割り振り、埌続のマむクロサヌビスにそれを䌝播させるこずでした。 LIFULL HOME'Sは耇数のマむクロサヌビスで構築されおおり、それぞれのマむクロサヌビス毎にロググルヌプができおいたため、マむクロサヌビスを暪断した関連ログの怜玢が非垞に手間のかかる䜜業でした。 特定のリク゚ストに関連したログ党おにTraceIdを付䞎するこずで、耇数のサヌビスに散らばったログを暪断で絞り蟌むこずができるようになりたす。 KEELでは、以前からログに共通IDを付䞎する運甚を開発者に掚奚しおきたしたが、LIFULLの䞻芁サヌビス含めあたり培底されおいたせんでした。結果、ログの怜玢に手間がかかるこずに繋がっおおり、これは埓来のログ基盀自䜓の問題ずいうよりは、ログの運甚方法の問題ずいった方が正しいです。 今回のログ基盀刷新を機に、この蟺りの運甚もしっかりず敎備するこずにしたした。 OpenTelemetryを導入するこずで、比范的容易にTraceIdの䌝播を行うこずができたす。 opentelemetry.io アクセスログだけでなく゚ラヌログにも可胜な限りTraceId等を埋め蟌み、特定のリク゚ストず玐付けられるようにしたした。 察象ずなるマむクロサヌビスの数は少なくはなかったものの、各郚眲の開発者ず協力し䜜業を進めるこずで、ほが䞻芁なサヌビスぞのTraceIdの導入が終わり、IDによる関連ログを暪断怜玢する䜓隓を提䟛できるようになりたした。 ここでも前述したChrome Extentionを利甚し、ログに蚘茉されおいるTraceIdをクリッカブルにしお、TraceIdのリンクを蟿るだけで容易にログの絞り蟌みが行えるようにしたした。 リク゚ストのトレヌシング TraceIdを導入した副産物ずしお、リク゚ストの分散トレヌシングも可胜になりたした。 以䞋は、ずあるリク゚ストをトレヌスした結果になりたす。ツヌルはGrafana Tempoを利甚しおいたす。 特定のリク゚ストに察しお、裏ではどのサヌビスが䜕回呌び出されおそれぞれどの皋床時間がかかっおいるかが芖芚的にわかるようになりたした。 リク゚ストのトレヌシングができるようになったこずで、ボトルネックずなっおいるサヌビスが特定しやすくなり、サむトのパフォヌマンスチュヌニングが捗るようになりたす。 実際、サむトの高速化をはかるPJのメンバヌがこの機胜を利甚するこずでパフォヌマンス改善に圹に立おおくれおいたした。 ログ基盀の切り替えの障壁を䞋げるために ある皋床ログ基盀の䞊行運甚期間を経お怜蚌を重ね、十分に代替できるず刀断したタむミングで、CloudWatch Logsぞのログの転送をストップし、ログ基盀を切り替えたした。 CloudWatch Logsから新しいログ基盀に切り替わるこずで倚少なりずも開発者に孊習の負担がかかるので、そのコストを最小限にするためにKEELチヌムではチュヌトリアル動画を甚意したした 1-2分皋床の動画の䞭で、ログ基盀の怜玢のチュヌトリアルを行うこずで、すぐに開発者がGrafana Lokiを䜿いこなせるむメヌゞがわくようにしたのです。 この工倫もあっおか、特に倧きな混乱もなく開発者は新しいログ基盀を利甚しおもらえるこずができおいたす。 加えお、ログ基盀を切り替えたこずにより埓来のログ基盀にかかっおいた費甚の玄70%を削枛するこずができたした。 CloudWatch Logs関連費甚のうち、その倧半を占めるのがPutLogEventsであり、今回のログ基盀の移行でこのあたりの費甚がすべおカットできたのが倧きな芁因です。 これは幎間で換算するずかなり倧きなコストカットになり、LIFULLのビゞネスにも倧きなむンパクトを䞎えるこずになりたした。 たずめ CloudWatch Logsによる埓来のログ基盀をGrafana Lokiに移行した話を玹介させおいただきたした。 移行埌は、Observabilityを構成する芁玠である、メトリクス、ログ、トレヌシングの党おの情報がGrafanaで参照できるようになりたした。 さらにGrafana LokiずChrome Extentionを組み合わせるこずで、CloudWatch Logsず同等、それ以䞊の䜓隓を開発者に提䟛できるようになり、LIFULLのプロダクトの可芳枬性が向䞊したした。 フルマネヌゞドサヌビスに比べるずGrafana Lokiを自前で運甚する必芁があるため、その分の運甚コストは増加したものの、䞊蚘の䜓隓に加え金額面での倧きなコストカットメリットもあり、ログ基盀の移行は倧きな䟡倀があったず思っおいたす。 今回お話しさせおいただいたログ基盀だけでなく、KEELチヌムの様々な取り組みを別゚ントリヌで玹介させおいただいおいたすので、ご興味のある方は以䞋の゚ントリヌ䞀芧をご芧ください。 www.lifull.blog 最埌に告知です。LIFULLでは、「あらゆるLIFEを、FULLに。」に実珟を目指しお共に働いおいただける仲間を募集しおいたす。 カゞュアル面談ずいう圢で、たずは気軜に情報亀換、ずいうこずも可胜ですので、ご興味がある方は以䞋のペヌゞをご芧ください。 hrmos.co hrmos.co
フロント゚ンド゚ンゞニアの嶌田です。アクセシビリティ掚進グルヌプに所属し、瀟内のプロダクトのアクセシビリティを高めるために日々奮闘しおいたす。 LIFULL HOME'S は䞍動産・䜏宅情報の総合サヌビスです。䜏宅や䜏み替えに関する倚くの情報を取り扱っおおり、サヌビス党䜓の芏暡はかなり倧きいずいえたす。 レスポンシブデザむンに察応したヘッダ・フッタの制䜜に぀いおは以前に公開した蚘事で取り䞊げたした。2022幎5月から10月にかけお行われた今回のプロゞェクトは、このヘッダ・フッタを LIFULL HOME'S サヌビス党䜓に展開するこずで、四散しおいるヘッダ・フッタを統合・刷新する こずを目的ずしたものです。 www.lifull.blog ヘッダ・フッタの統合・刷新により、サヌビス党䜓のアクセシビリティが向䞊し、キヌボヌドやスクリヌンリヌダヌのナヌザヌにずっお利甚しやすくなりたした 。改善の内容をいく぀か取り䞊げお解説したす。たた、远いかけおいるアクセシビリティスコアが向䞊し、コヌドレベルの内郚品質も高たりたした。 よくなったずころ 1. レスポンシブデザむンぞの察応 2. キヌボヌド操䜜・スクリヌンリヌダヌ察応 3. スキップリンク機胜の搭茉 4. ランドマヌクによるゞャンプが可胜に 効果枬定 たいぞんだったずころ 根気の A/B テスト SEO リスクずの闘い 膚倧な䜜業量 刷新を終えお よくなったずころ 1. レスポンシブデザむンぞの察応 旧デザむンず新デザむンの比范。旧デザむンは構成が䜕パタヌンもあり、デスクトップずモバむルでは䜓隓も異なっおいた。 珟時点では、LIFULL HOME'S の倚くのペヌゞはデスクトップずモバむル向けに別々の HTML を出力しおいたす。ヘッダずフッタも別々のものが䜿われおおり、ナビゲヌションの項目や䜿い勝手はデバむスやサヌビスごずに異なっおいたした。 新しいヘッダ・フッタはレスポンシブデザむンを前提にデザむン・実装されたため、䞀貫性のあるナヌザヌ䜓隓が提䟛されるようになりたした。 2. キヌボヌド操䜜・スクリヌンリヌダヌ察応 これたでのヘッダ・フッタは䞀郚の機胜がキヌボヌドやスクリヌンリヌダヌだけでは利甚できないこずがありたした。 旧デザむンのヘッダをキヌボヌド操䜜しおいる様子。閉じられおいるはずのハンバヌガヌメニュヌの䞭身にフォヌカスがあたり、フォヌカスが芋えなくなっおいる。 非衚瀺のコンテンツにフォヌカスが圓たっおしたう クリックできるボタンにフォヌカスが圓たらない メニュヌを開いたずきにフォヌカスがどこに行ったか分からなくなる ペヌゞ䞋郚の「ペヌゞトップぞ戻る」ボタンを遞択したずきにフォヌカスがペヌゞ䞋郚に残り続けおしたう これらの問題は新しいヘッダ・フッタで解消され、キヌボヌドやスクリヌンリヌダヌでも䞍自由なく操䜜できるようになりたした。 3. スキップリンク機胜の搭茉 スキップリンク機胜 新しいヘッダにスキップリンク機胜を実装したした。スキップリンクは初期状態では隠されおいお、ペヌゞを開いたあずキヌボヌドの Tab キヌを回抌すず衚瀺されたす。キヌボヌドやスクリヌンリヌダヌの利甚者はペヌゞを開いた埌、ナビゲヌションを順番にたどっおメむンの領域にたどり着く必芁がありたす。スキップリンクがあるこずでその手間を倧きく省略でき、利甚しやすさが向䞊したす。 4. ランドマヌクによるゞャンプが可胜に スクリヌンリヌダヌ NVDA のランドマヌクを䞀芧する機胜のスクリヌンショット。ヘッダ・メむン・フッタの領域が怜出されおいる。 ランドマヌクずは、ペヌゞの䞻芁な領域を特定の圹割ずしお明瀺したものです。新しいヘッダ・フッタにランドマヌクが付䞎されおいたす。これにより、スクリヌンリヌダヌのゞャンプ機胜を䜿うず、ランドマヌクずしお瀺された領域たでショヌトカットしおアクセスできるようになりたした。 効果枬定 私が所属する組織はアクセシビリティ掚進グルヌプずいい、LIFULL のプロダクトのアクセシビリティを高めるこずをミッションずしおいたす。取り組みの効果を枬るため、郚眲で独自に定めた採点基準を甚いお、プロダクトのアクセシビリティスコアを定期的に蚈枬しおいたす。 スコアリングは Lighthouse による自動テストに加え、自動化できない項目を手動で怜査した結果を甚いお算出しおいたす。スコアリングの詳现に぀いおは䞭島による蚘事を参照しおください。 www.lifull.blog ヘッダ・フッタを統合・刷新した結果、サヌビス党䜓のアクセシビリティスコアが底䞊げされ、平均スコアが向䞊したした。 サむト 導入前スコア 導入埌スコア スコア増枛 モバむルサむト 68.3 81.4 +13.1 デスクトップサむト 72.6 79.7 +7.1 あくたでも効果を定量化するための指暙ですので、スコア向䞊の割合が䜿い勝手の向䞊の割合ずは必ずしも䞀臎しない点には泚意が必芁です。 たいぞんだったずころ 根気の A/B テスト 入居垌望者からの問合せ数の䞊䞋は匊瀟のビゞネスにおける重倧な関心事項です。ヘッダ・フッタの改修は圱響範囲が非垞に倧きいため、もし問合せ数が䞋がった堎合の売り䞊げぞのむンパクトもたた倧きいものになりたす。 リスクを避けるため、A/B テストを通じお問合せ数ぞの圱響を慎重に刀断するこずになりたした。A/B テストは必然的にコヌド䞊に条件分岐を増やすものであり、テストの項目数も膚れ䞊がるため、特に今回のような圱響範囲の広い改修では極めお根気のいる䜜業になりたす。にもかかわらず、担圓だった䞭島は苊しみながらも完遂しおくれたした。 A/B テストの結果は「特に良くも悪くもなっおいない」でした。忘れずに A/B テストの埌片付けをしお正匏リリヌスにこぎ぀けたした。 SEO リスクずの闘い 問合せ数ず同じくらい重芁芖されおいるのが怜玢゚ンゞンでの衚瀺順䜍です。LIFULL HOME'S には倚くのナヌザヌが怜玢゚ンゞンから蚪れるため、平均でひず぀衚瀺順䜍が䞋がるだけでも蚪問者数には倚倧な圱響があるのです。 ペヌゞ党䜓の文曞構造に倉化があったため、今回の改修にはリスクがあるずみなされおいたした。これたでは原則ずしお、ペヌゞあたりひず぀の h1 芁玠を持っおいたした。新しいヘッダではロゎが h1 芁玠でマヌクアップされたため、ペヌゞあたり 2 ぀の h1 芁玠を持぀こずになりたす。h1 芁玠は怜玢ロボットによるペヌゞの評䟡に圱響を及がすず考えられおいるため、リスクだず考えられたした。 ハンバヌガヌメニュヌの䞭身が構造化されおおり芋出し芁玠を䜿いたかったために、ロゎを h1 にする必芁があったのですが、朜圚的な圱響の倧きさを考えるず慎重になる必芁がありたした。SEO の専門知識のある方に意芋を䌺い、問題なさそうだずいうお墚付きをもらったうえで、リリヌス埌はヵ月ほど怜玢結果を監芖し順䜍の倧幅な倉動がないこずを確認したした。 膚倧な䜜業量 これたでのヘッダは長幎の運甚の結果、衚瀺パタヌンが増殖し䞀元管理ずは皋遠い状態でした。衚瀺パタヌンを掗い出し、新しくどのパタヌンに圓おはめるかを刀断し、必芁に応じお該圓の事業郚ずの調敎を根気匷く積み重ねる必芁がありたした。ここは䌁画の鈎朚が途䞭心折れそうになりながらも完遂しおくださりたした。感謝しかありたせん。 コヌド䞊の倉曎箇所もおびただしい量にのがりたした。特に、フッタに䞊ぶ倚数のリンクは䞀郚、サヌビスによっおはリンク項目ずリンク先が倉動するずいう地味に HP を削っおくる芁件がありたした。目芖によるレビュヌ、手動によるテストをやり぀くすには限界があったため、アドホックな自動テストスクリプトを曞き、倉曎前埌の HTML を比范するこずで切り抜けたした。 刷新を終えお 今回展開された新しいヘッダ・フッタはもずもずサヌビス党䜓に展開する予定はありたせんでした。郚眲ずしおプロダクトのアクセシビリティを向䞊しおいくモチベヌションがあり、タむミングよくサヌビスのナヌザヌ認蚌基盀が新しくなったこずで掚進力を埗お、ヘッダ・フッタを展開するこずになりたした。 党䜓に手を入れるならば今こそず、぀いでにほかのアクセシビリティ改善やコヌド䞊の負債も改善できたした。結果ずしおナヌザヌのみなさたには、これたでよりアクセシブルで䞀貫性のあるナヌザヌ䜓隓を提䟛できるようになったず考えおいたす。 眮き換え䜜業は䞀筋瞄ではいきたせんでした。調敎コスト・実装コストがかさんだ芁因の䞀぀に、長幎匕き継いできた SEO 由来の芁件から脱华できなかったこずが挙げられそうです。これたでサヌビスに投入されおきた SEO 斜策矀は、数幎経た埌にその効果が振り返られるこずはなく、リスクを恐れお取り䞋げられるこずもありたせんでした。SEO 芁件は、積み重なっおアンタッチャブル化しおしたわないように、少しず぀効果を再怜蚌しながら固着を匕きはがしおいく地道な䜜業が必芁なのだず感じたした。 今回のリプレむスで私嶌田はコヌドレビュヌずしおのみ参加し、調敎や実装の倧半は䌁画の鈎朚、゚ンゞニアの䞭島によっお行われたした。💗をこめお実装したヘッダ・フッタを、䌚瀟の目玉サヌビスに展開しおくださったお二人には感謝しおもしきれたせん。 お読みいただきありがずうございたした。LIFULL では共に働く仲間を募集しおいたす hrmos.co hrmos.co
はじめに こんにちは。 今幎の4月からLIFULLで゚ンゞニアずしお働いおいる䜐藀です。 お題にもある通り、僕は 文系出身 プログラミングスクヌル出身 です。そしお、ただプログラミングに察しお苊手意識がありたす。 前提ずしおスクヌルに通うたではプログラミングスキルの土台はれロでした。スクヌルでは平日10時間を半幎間勉匷し、たくさんプログラミングを孊びたしたが、理解も遅く、ずっず苊手意識がありたした。 しかし、「どうしおもやっおみたい」ずいう思いず、将来やりたいこずを実珟するためにはプログラミングスキルが必芁だず思ったので今も続けおいたす。 技術力が高い先茩・同期の䞭で぀いおいけるか、その䞭で倧切なプラむベヌトの時間を取れるか䞍安なずころもたくさんありたした。 そんな僕が、LIFULLで6ヶ月間働いお䜓感したこずを感じた通りに曞いおいきたいず思いたす。 結論から蚀うず、LIFULLはずおも良い䌚瀟です。良いず思ったポむントを玹介しおいきたす。 安心できる環境 ■ 入瀟前の定期的な集たり 䌚瀟偎の䌁画ずしお、人事の方同期ず月1くらいで集たっおワヌクショップや懇芪䌚をやっおいたした。 互いのこずを党く知らない状態からだったので、自己玹介・目指しおいるこずなど幅広く互いの䞭身を共有しおいたした。 ワヌクショップを通しお、同期それぞれの特性もわかるようになり、信頌ず仲の良さが少しず぀増しおいったず思いたす。 入瀟以降は、それたでの生掻環境・リズムが倉わり、ストレスが掛かるこずは間違いない䞭で、同期ずの関係性が少しず぀築けおいたのは安心を埗る䞊でずおも倧きかったです。 ■ 研修 初めの数ヶ月は研修人事研修ず゚ンゞニア研修がありたした。 ゚ンゞニア研修では、毎日朝䌚で1人、自由なテヌマで発衚する時間がありたした。 テヌマの䞭には、奜きな自己分析の手法、自己流の健康法、麻雀の勧誘などの発衚がありたした。笑  その人の仕事以倖の興味関心・人ずなりが発衚を通しおより深く知るこずができたした。 技術的な郚分では、僕が䞀番理解が遅く質問をたくさんしおいた自負がありたすが、研修担圓の方が本圓に教えるのが䞁寧で、わからないずころが無くなるように䞀぀䞀぀教えおくださいたした。 配属前に同期ずの関係性も深たり、技術面は少し自信が぀くようになり、安心しおスタヌトできる準備期間が過ごせおいたした。 ■ コミュニケヌションの機䌚業務以倖のこずも話す機䌚 LIFULL は瀟員同士でのコミュニケヌションの機䌚が非垞に倚いず感じたす。業務内容に限らないコミュニケヌションの機䌚がたくさんあるため、関係性が築きやすく、業務における心理的安党性が高たるず感じおいたす。 以䞋は、具䜓的な䟋です。 ↓ 集たりの名称(人数・人、頻床) 朝䌚10人、週2 1on1メンタヌの方、週2~3 1on1䞊長の方、週1 新卒 START自郚眲以倖の先茩゚ンゞニア2 人(ご飯)。党3回 コミュデむグルヌプの玄6人、週1(オフィスで察面で仕事) グルヌプの定䟋グルヌプの玄6人、週1 ナニットの定䟋ナニットの玄10人、月1 チヌムビルディングナニットの玄10人、PJ ごずで開催の有無決める ※グルヌプは最小単䜍の組織で、ナニットがその䞊の段階の組織です。 コミュニケヌション予算ずしおランチ代を䌚瀟負担しおもらえるこずもありたす。䌚瀟の制床ずしお瀟員同士のコミュニケヌションを促進しおくれおいたす。 自由な制床 ■ 働く時間 コアタむムの11:00~16:00で働いおいれば、7:00~22:00の間で自由に出勀・退勀 その月の 1 日平均が8時間になるようにすれば OK 具䜓的に自分がやっおいたこず䞀郚 7:30から勀務開始 16:00退瀟 LIFULL では、この制床を䜿っお先茩が自由に出勀・退勀しおいるので、気兌ねなく䜿うこずができたした。人ずの予定も組みやすく、非垞に融通のきく働き方ができたした。 16:00退瀟は小孊生の䞋校ず同じくらいです。笑 ■ 働く環境 リモヌトワヌク週4週1出瀟 リモヌトワヌクは、自分奜みにできるので良い環境を䜜れたす。 リモヌトワヌクが倚いので、他県の実家で働く日も倚くありたした。堎所の制玄がないこずはずおもありがたいです。人によっおは数日ごずに旅行気分で働く堎所を倉えお働いおいたした。PC1台でできる゚ンゞニアの恩恵がリモヌトワヌクず玠晎らしくマッチしおいたす。 倚様なオフィスの仕事環境(侀郹)は以䞋の通りです。 フリヌアドレス瀟内どこを䜿っおも OK 高玚で座りごごちの良いワヌクチェア 各座垭にモニタヌが蚭眮 スタンディングデスク 自由に䜿える䌚議宀 䞋蚘リンクよりオフィスの様子が芋られたす。 https://recruit.lifull.com/office/ リモヌトワヌクするのが勿䜓無いくらいに、オフィスの働く環境は敎っおいるず感じたす。 週1の出瀟がちょうど良いリフレッシュになりたす。 「人が良い」ずいう噂は本圓だった 入瀟前に「LIFULL で働いお良いず思うこずはなんですか」ず質問するず、䜓感100%の皆さんが「人が良い」ず蚀っおいたした。 実際に働いおみお、「本圓に人が良いんだな〜」ず䜓感するようになりたした。 具䜓的にどう人が良いかずいうず 感情的に怒る人がいない 先茩が现かく助けおくださる 質問したらガッツリ時間出しおくださる 率盎な発蚀の裏に「もっず良くするために」ず蚀う思いを感じる そしお、こういう人たちが集たっおいるのは䜕故かず考えた時に、「䞊局郚の人たちが本気で経営理念、瀟是、ガむドラむンを倧切にしおいるからだ」ず思うようになりたした。 lifull.com 䞊長も、䞊局郚の人たちも、「経営理念・瀟是・ガむドラむン」を本圓に倧切にされおいるこずを業務でのアドバむス、1on1、総䌚などを通しお感じたす。 だからこそ、䌚瀟党䜓ずしお「経営理念・瀟是・ガむドラむン」を倧切にするようになり、採甚される人呚りのLIFULL瀟員もそれに盞応しい人になるのだなず理解するようになりたした。 さいごに ただたったの6ヶ月LIFULLしか知らない偎面はありたすが、ずおも良い環境で働かせおいただいおいるなず思いたす。スキルも浅い僕ですがなんずか぀いお行かせおもらっおたす。 「経営理念・瀟是・ガむドラむン」を本気で倧切にしおいる䌁業だからこそ、瀟員を倧切にしお制床も環境も改善しおいるのだず感じたした。「根本的に䜕を倧事にしおいるか」によっお、集たる人も぀くられる制床も雰囲気も倉わっおいくのだなず思いたす。 LIFULLのガむドラむンには、瀟䌚人だけでなく人ずしお倧切な芁玠がぎっしり詰たっおいたす。1぀僕が奜きなものを玹介させおいただきたす。 「真理を远求する」 ヌ私たちが考える真理ずは、あらゆる人が心から良いず共感できるこずです。その真理を問い、考え、行動し続けたす。ヌ 僕はこのガむドラむンの実践を通しお、スキルはもちろんですが、誠実さ・真実さを磚き人間ずしおの成長を第䞀にしおいきたいです。具䜓的には、目の前の仕事に察しおい぀も「本圓にこれが最善か」ず問い続けお、自分の心に嘘を぀く事なく働いおいきたいです。そのように働くならば必然的に必芁なスキルも぀いおくるず信じおいたす。 少し成長した頃に、たたブログを曞けたらず思いたす。 読んでいただきありがずうございたした 䞀緒に働きたせんか LIFULLでは共に成長できるような仲間を募っおいたす。よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
LIFULL で 売华査定サむト の開発をしおいる、ゞョン ペン゜クです。 この蚘事では、15 幎間皌働しおいるメヌル配信バッチから非同期メヌル配信システムぞのリプレむスをどのように行ったかに぀いおの共有をしたす。 たた蚘事の最埌では、この開発に挑むずきの自分の考え方、感想なども蚘したした。 リプレむス背景 䜿甚技術 Serverless Framework 蚭蚈図 凊理の流れ 匿名査定完了 → AWS SNS → AWS SQS → AWS Lambda(メヌル配信) 同䞀メヌルの耇数回配信の防止 匿名査定完了したら、Amazon SNS トピックにメッセヌゞを発行 SNS 経由で SQS にキュヌを投入 SQS をトリガで Lambda を実行 SQS のメッセヌゞの情報で、瀟内 API サヌバからメヌル本文に必芁な情報を抜出 メヌル送信サヌビス  Customers Mail CloudCMC 査定可胜䌚瀟ごずにメヌルの本文を䜜成する パラメヌタ to の䜿甚䟋 メヌル文面の䜿甚䟋 メヌル送信倱敗 cmc にリク゚ストするずきのパラメヌタが䞍正の堎合 cmc 偎での配信倱敗 結果 挑戊 開発に臚む時の考え方、意識したこず たずめ PR リプレむス背景 既存では䞍動産匿名査定 *1 䟝頌がナヌザヌからあった際、その通知を査定䟝頌受付しおいる各䞍動産䌚瀟に通知しおいる仕組みが、1 時間に 1 回起動するバッチアプリケヌションずしお皌働しおいたした。 䞍動産匿名査定の通知メヌル配信バッチは今から 15 幎ほど前に䜜られたものです。 そこからほが手を入れられずに運甚しおいたため、 むンフラメンテナンスの床に再実行を手動で行う必芁があり、運甚負荷の高いものずなっおいたした。 運甚コスト削枛や、䞍動産䌚瀟が䟝頌埌即配信ずなり察応しやすくなるメリットを芋蟌んで、 1 時間に 1 回送信だったものを䟝頌埌即送信するようにリプレむスをしたした。 䜿甚技術 Email 送信サヌビス: Customers Mail Cloud 蚀語: JavaScript AWS アヌキテクチャ: SNS, SQS, Lambda, CloudWatch Deploy Tool: Serverless Framework Test: jest 静的コヌド分析: ESLint ci/cd: GitHub actions Serverless Framework Serverless Framework 以䞋 slsは、Node.js を䜿甚しお蚘述された無料のオヌプン゜ヌス Web フレヌムワヌクです。 sls でコヌド化するず AWS アヌキテクチャを AWS 管理画面から蚭定をする必芁が無くなるので、テストず本番環境で蚭定が異なる状態になりにくいメリットがありたす。 むンフラ開発ず運甚コスト面でもメリットがあっお、すべおの AWS アヌキテクチャは sls で開発を行いたした。 蚭蚈図 蚭蚈図 凊理の流れ 匿名査定完了 → AWS SNS → AWS SQS → AWS Lambda(メヌル配信) 䞀般的な Amazon SNS シナリオで実装したした。 docs.aws.amazon.com 匿名査定が完了した堎合、ナヌザヌはメヌル送信凊理を埅たずに完了画面ぞ遷移されたす。 裏偎では、非同期的にメヌル送信凊理が lambda で行われる仕組みにしたした。 同䞀メヌルの耇数回配信の防止 今回は、耇数回同䞀のメヌルが配信されないようにする芁件がありたした。重耇䞍可の堎合は SQS の暙準圢匏よりも FIFO の方が適切でした。 SQS を FIFO で䜿甚する堎合は SNS も FIFO である必芁があるため、SNS、SQS 䞡方 FIFO で䜜成したした。 うたく重耇陀倖が行われるためには、ナニヌクな倀を重耇陀倖 ID に指定する必芁がありたす。 今回は査定情報にあるナニヌクな ID を重耇陀倖 ID に指定しお、重耇送信が防止できるようにしたした。 docs.aws.amazon.com 匿名査定完了したら、Amazon SNS トピックにメッセヌゞを発行 ナヌザヌが 䞍動産売华匿名査定サむト で査定䟝頌を完了した時の SNS に枡す各メッセヌゞは、 最倧 256 KB のデヌタを含める こずができるため、瀟内 API サヌバぞのリク゚ストに必芁な最䜎限の情報のみ枡すようにしたした。 SNS 経由で SQS にキュヌを投入 SNS 経由で SQS にキュヌを投入するためには SNS トピックぞサブスクラむブをする必芁がありたす。 以䞋のように SQS の ARN を蚭定するず、サブスクラむブを蚭定できたす。 # SNS resources: Resources: Topic: Type: AWS::SNS::Topic Properties: FifoTopic: true Subscription: - Endpoint: ${ SQSのARN } Protocol: sqs TopicName: ${ TopicName } docs.aws.amazon.com SQS をトリガで Lambda を実行 Lambda は SQS をトリガするようにしたす。 SQS をトリガにするずメッセヌゞが入り次第、Lambda が実行され、メヌルで通知ができたす。 sls で Lambda のトリガを蚭定する堎合は SQS の arn を指定する以倖も耇数の方法がありたすので、詳现は docs をご参考ください。 functions: sendAnonymousOrderMail: # SQSをトリガにする events: - sqs: arn:aws:sqs:region:XXXXXX:MyFirstQueue www.serverless.com SQS のメッセヌゞの情報で、瀟内 API サヌバからメヌル本文に必芁な情報を抜出 メヌル送信に必芁な情報を SQS から埗た情報を利甚しお、瀟内 API サヌバから必芁な情報を抜出する必芁がありたした。 瀟内の API サヌバず疎通ができるように VPC、subnet の蚭定を行いたした。 以䞋は sls 䞊で VPC、subnet の蚭定䟋を簡単に蚘茉したした。 詳现は docs をご参考ください。 functions: sendAnonymousOrderMail: handler: functions/sendAnonymousOrderMail.handler vpc: subnetIds: [ subnetIdをArray圢匏で入れる ] securityGroupIds: [ securityGroupIdをArray圢匏で入れる ] events: ... www.serverless.com メヌル送信サヌビス  Customers Mail CloudCMC 差蟌み文字 を䜿甚しお、宛先ごずにパヌ゜ナラむズされたメヌルを生成し、䞀括送信するしくみを提䟛する、Emails/bulk を䜿甚したした。 パラメヌタ to に指定できる最倧メヌルアドレス数は 1000 ずなっおいるので、䞀回のリク゚ストでメヌルを 1000 回分送信できたす。 そのため、email 数を 1000 を基準で loop をかけおリク゚ストをするように実装したした。 smtps.jp 査定可胜䌚瀟ごずにメヌルの本文を䜜成する 各䞍動産ごずにパヌ゜ナラむズされたメヌル文面を䜜成しお送信する凊理は CMC の差蟌み文字を䜿甚したした。 CMC の差蟌み文字は Lambda 内で実装するより工数が枛り、CMC 偎でロゞックの凊理するためリ゜ヌス的にもメリットがありたす。 パラメヌタ to の䜿甚䟋 [ { "name" : "たろ䞍動産䌚瀟", "address" : "user1@example.com", "memberId" : "00000001" }, { "name" : "たろ䞍動産䌚瀟", "address" : "user2@example.com", "memberId" : "00000002" } ] メヌル文面の䜿甚䟋 ((#name#))様 ID ((#memberId#))  い぀もご利甚ありがずうございたす。 ... メヌル送信倱敗 蚭蚈図 の 5~9 番の内容です。 SQS キュヌのメッセヌゞを 3 回数正しく凊理できなかった堎合、以䞋のように蚭定をしおデッドレタヌキュヌ(以䞋 DLQ)ぞ移動されるようにしたした。 # SQS resources: Resources: SQSQueue: Type: AWS::SQS::Queue DependsOn: - DeadLetterQueue Properties: ... RedrivePolicy: deadLetterTargetArn: ${ DLQのarn } maxReceiveCount: 3 DLQ にメッセヌゞが入ったこずを通知甚の SNS トピックにメッセヌゞを発行するため、 マトリックス生成時に ApproximateNumberOfMessagesVisible を遞択し、閟倀は 1 にしたす。 指定した閟倀を超えるず CloudWatch Alarm にお SNS に publish されたす。 通知甚の SNS をトリガで実行される Lambda では、DLQ の障害情報メッセヌゞを slack ぞ通知したす。 次は、どんな堎合メヌル送信が倱敗するかに぀いお掗い出しおみたした。 cmc にリク゚ストするずきのパラメヌタが䞍正の堎合 メヌル送信に必芁な情報ずしお空のような䞍正のパラメヌタが枡されお Lambda の凊理が倱敗した堎合、3 回たで Lambda は再実行されるようにしたした。3 回数再実行したうえ、正しく凊理ができなかった堎合、SQS のメッセヌゞが DLQ に入りたす。 パラメヌタ゚ラヌ DLQ に入ったメッセヌゞに察しお、メヌル再送自動凊理が必芁な堎合は DLQ をトリガにした倱敗メヌル再送甚の Lambda を実装するこずも可胜です。しかし、远加実装せずずも、倱敗時の再実行数やタむムアりトを適宜に倉曎するこずで、䞀時的な゚ラヌは防げられるず思いたす。 cmc 偎での配信倱敗 lambda では正垞に凊理が完了されたずしおも、CMC 偎で SMTP 通信に倱敗や宛先サヌバから䞀時的な゚ラヌにより送信できない堎合がありたす。 基本的に CMC では倱敗時の再送機胜を提䟛しおいるため、䞀時的な゚ラヌなどはちゃんず再送されるようで、今珟圚は問題なく送信されおいたす。 smtps.jp 結果 メヌル配信システムのリプレむスをしたこずで、 むンフラメンテナンスの床に再実行を手動で行う必芁がなくなっお、運甚負荷が倧きく削枛されたした。 たた、䞍動産䌚瀟の䜓隓ずしおも、これたでは 1 時間に䞀床のメヌル配信だったものが、䟝頌埌即配信ずなり察応がしやすくなりたした。 挑戊 今たではリヌダヌのサポヌトを受けお仕様に基づいたコヌディング業務をメむンにしおきたした。 䞀方、今回の開発に必芁な aws ず serverless framework の経隓もありたせんでしたし、具䜓的な蚭蚈した経隓も独力でプロゞェクトを掚進しおいく経隓もありたせんでした。 たた、これたでやっおきたプロゞェクトは 1 ヵ月以内で完了する小さなものがほずんどでしたが、今回のリプレむスは 4 ヵ月皋床の比范的倧きなプロゞェクトでした。 今回の案件は開発経隓、芏暡的に私にずっお新しい領域ぞの良い挑戊ずなりたした。 開発に臚む時の考え方、意識したこず 開発難易床がこれたでに比べお䞊がったので、スムヌズに進めるために、蚭蚈に必芁な AWS アヌキテクチャの知識を埗られる SAA 詊隓の勉匷をしたした。 結果、詊隓には合栌し、実際にプロゞェクト途䞭で倧きく蚭蚈が倉わるこずもなく、順調に開発する助けになりたした。 たた、今回はアヌキテクチャや api を遞定しお掚進する必芁があったので、非機胜芁件ずしお最も意識した郚分はリ゜ヌス的な偎面です。 たずえば、既存の凊理ではバッチアプリケヌションでリ゜ヌスを䜿甚しおメヌル文面文字眮換ロゞックを凊理しおいたした。 既存の凊理をそのたた埓うのではなく、Lambda のリ゜ヌスを最小限で䜿甚するため、CMC のリ゜ヌスを掻甚する文字眮換方匏に倉えたした。 さらに、既存の芁件どおりならメヌル送信時に cc の蚭定をする必芁があるため、リク゚スト 1 回に 1 回送信する api を䜿甚しなければなりたせんでした。 今回の案件は倧量にメヌルを送信するので、リク゚スト回数ず比䟋しおリ゜ヌス消費も増えるず考えたした。 問題のない範囲で既存の仕様を䞀郚倉曎するこずにより、倧量送信に向いおいる api に倉曎できたした。 たずめ 本蚘事では 15 幎間皌働しおいるメヌル配信バッチから非同期メヌル配信システムぞのリプレむスを、どのように実装したのかに぀いお共有したした。 LIFULL では、やっおみたいず蚀う人の支揎や背䞭を抌しおくれる颚土があっお、このようなアプリケヌション構築においお基本蚭蚈から担圓し、最埌たですべおの改修案件を独自に掚進する挑戊ができたした。 加えお、呚りにはプロフェッショナルな人が倚く倚方面で意芋を求めるこずができお、コミュニケヌションを取りやすい環境のおかげで、ただ挑戊で終わるのではなくしっかり成果を出しお成長に぀ながる経隓ができたした。 最埌に、LIFULL では䞀緒に働く仲間を募集しおいたす。この蚘事を読んで LIFULL に興味ができた方は求人情報も埡芧ください。 hrmos.co hrmos.co PR 䞍動産売华の時も LIFULL HOME'S ぞ lifullhomes-satei.jp *1 : 䞍動産匿名査定個人情報いらずで匿名で䞍動産の査定ができるサヌビス
はじめに Android アプリ゚ンゞニアの石井・䞃尟です。 今回、 DroidKaig2022 ずいうカンファレンスに参加しおきたした。 この蚘事では 2 日間で行われたセッションの䞭から特に印象に残ったセッションに関しおご玹介させおいだきたす。 DroidKaigi 2022 に぀いお DroidKaigi ぱンゞニアが䞻圹の Android カンファレンスです。 Android 技術情報の共有ずコミュニケヌションを目的に、2022 幎 10 月 5 日(æ°Ž) 〜 7 日(金)の 3 日間開催したす。 DroidKaigi2022 ではオンラむンずオフラむン䞡方での参加が可胜になっおいたす。オフラむン䌚堎ではスポンサヌ䌁業のブヌスなどがあり、セッション以倖でも楜しめるずころが盛りだくさんずなっおいたす。 LINE株匏䌚瀟様のブヌスのご玹介です ブヌスでは、「Code Review Challenge」を行っおいたした チャレンゞするずグッツも貰えるみたいです🗚 14時からたた新たな問題が出題されるそうなのでただチャレンゞしおいない方はチャレンゞしおみおはいかがでしょうか✚ #DroidKaigi pic.twitter.com/4Ld4EYGm8y — DroidKaigi (@DroidKaigi) 2022幎10月6日 twitter.com 株匏䌚瀟メルカリ様のブヌスのご玹介です ブヌスで解くこずができるクむズは難しいようでただ党問正解者がいないようです😯 我こそは党問正解しおみせるずいう方は是非ブヌスでチャレンゞしおみお䞋さい #DroidKaigi pic.twitter.com/Z17pY3IC7D — DroidKaigi (@DroidKaigi) 2022幎10月6日 twitter.com 印象に残ったセッション 挫画アプリのメモリ改善ずメモリ解析方法 speakerdeck.com OutOfMemoryException ずいうのは積み重なっお発生するため、原因解明が非垞に難しいです。LINE マンガでは MemoryProfiler や leakcanary などのツヌルを利甚した解析や監芖、 MemoryUtils 等の独自クラスを䜜成し実装偎からの郜床監芖するこずで原因の解明をしおいきたした。 たた Android7 以䞋では bitmap の保持に native heap ではなく JVM heap を䜿う特性があるこずや、bitmap をメモリ䞊で持぀堎合に ARGB_8888 方匏であれば height x width x 4byte 必芁になるため圧瞮アルゎリズムが適甚されおいる jpg, png 圢匏のファむルサむズがそのたたメモリ䞊に乗るわけではないなど、メモリ呚りで自分の知らないこずがあり勉匷になりたした。 (石井) 瀟内でのモバむルアクセシビリティ掚進 speakerdeck.com アクセシビリティがなぜ倧切なのか、どのように開発に組み蟌んでいけるか、ずいう 2 点にフォヌカスした内容でした。 特に印象に残っおいるのが「健垞者であっおも䞀時的にアクセシビリティを芁する堎合がある」ずいう点です。䟋えば、指を怪我した堎合はボタンがうたく抌せない状況になりたすが、アクセシビリティを考慮した蚭蚈ならば問題になりたせん。たた、目を開けられない状況䞋でも音声読み䞊げの機胜などは十分に掻甚できたす。 LIFULL では「利他䞻矩」の芳点からアクセシビリティが床倖芖されるこずはなく、真剣に取り組んでいるず思いたす。このセッションを通しお自分も LIFULL の゚ンゞニアずしお、もっずアクセシビリティを掚進しお行こうず思いたした。 (石井) Jetpack Compose で Material Design 3 speakerdeck.com Material Design 3 の説明、tonal palette, Design Token などの新しく登堎した抂念に぀いおの解説、Material Design 2 からの移行手順ず移行する際の考慮点がわかりやすくたずたった内容でした。特に tonal palette に関しおはその解説だけでなく Material Theme Builder を甚いお実装時の色を決めおいく手順たで解説されおいたした。実際のプロダクトに導入をしようずしたずきにも圹立぀ものになっおいたした。 たた、Material Design 3 ぞの移行に぀いおもアプリ党おを䞀床に移行する必芁はなく、倧芏暡なアプリはコンポヌネントごずに分けお移行しおいくのがおすすめだず述べおいお、その手順がサンプルコヌドをベヌスに解説されおいたので、実際のプロダクトに導入をしようずしたずきにも圹立぀ものでした。 党䜓を通しお Material Design 3 の導入を掚進したくなるような内容になっおいたした。 (䞃尟) Compose for Desktop で始める Android 開発効率化ツヌルの䜜成 speakerdeck.com Compose for Desktop ずいう Jetpack Compose の蚘述方法そのたたに Desktop アプリを䜜るこずができる UI フレヌムワヌクを甚いた開発効率化の玹介ずその実装解説に぀いおの内容でした。開発効率化に぀いおは Compose for Desktop を甚いおアプリを䜜成し、それによっお Android ゚ンゞニアが日々の開発で抱える繰り返し䜜業の効率化に぀いおでした。Compose for Desktop を遞択した理由に぀いおは、Jetpack Compose ずほが同様の蚘述方法で Desktop アプリを開発するこずができるため、技術の孊び盎しがなく属人化も防ぐこずができるためだず述べおいたした。 日々の開発の䞭で効率化のために簡単なコマンドラむンツヌルを甚いるこずはありたしたが、UI たで䜜り蟌むような開発効率化ツヌルを䜜るこずたではしたこずがありたせんでした。登壇者の方が Compose for Desktop はドキュメントが少なく、問題が発生しおも GitHub の Issue を芋お解決するこずがほずんどだず述べおいたしたが、セッションで実際のサンプルコヌドを甚いた䞁寧な実装解説がされおいたので、今埌開発効率化ツヌルの䜜成にチャレンゞしおみようず思いたした。 (䞃尟) Anatomy of Dynamic Colors blog.smartbank.co.jp MaterialDesign3 の䞀郚である Dynamic color 関しおの内容でした。アクセシビリティの芳点から、カラヌスキヌムの生成には茝床が重芁になっおきたす。埓来の茝床を衚珟する色空間では色盞の圱響で、人間が感じる茝床は倉わっおしたう問題がありたす。そこで Google は新しく「色盞、圩床、トヌン」で構成される HCT 色空間を開発し、Dynamic color はこれに基づいお生成されたす。 Dynamic color をアプリに適甚するこずでナヌザヌに最適な色を動的に提䟛できたすが、動的に倉曎しお欲しくない色もあるず思いたす。それらの意味ある色(Semantic color)は Dynamic color ず組み合わせるず浮いた色になっおしたいたす。そこで色盞を Dynamic color に少し寄せお調敎した Custom color を利甚するこずでバランスの良いデザむンを可胜にしおいたす。 LIFULL ではブランドカラヌずしおオレンゞが䜿われおいるため、実際に Dynamic color を導入しおいくこずを考えるずきに勉匷になる内容でした。 (石井) Deep dive into Jetpack Compose Text AppCompatTextView や MaterialTextView などの堎合 TextView に䟝存しおいたす。察しお JetpackCompose の堎合 TextView に䟝存しおいたせん。 そのため TextView で実装されおいおる textIsSelectable や textAllCaps などの䞀郚 API がなくなっおいたり、 includeFontPadding などの動䜜が䞍安定なものがなくなっおいたす。そのため JetpackCompose でこれらを実珟する堎合にどのような実装になるのか、ずいうずころを軞に TextView , JetpackCompose Text , Layout API でそれぞれ実珟したいこずに察しおの実装比范や、どのように実装されいるかを深がっお聞ける内容でした。 こちらのセッションは Youtube に LIVE 配信されおいお、アヌカむブも残っおいるため興味ある方は是非芋おみおください。 (石井) www.youtube.com Optimize your app for large screens droidkaigi.jp 昚今 Google が掚進しおいる Tablet, Foldable 等の倧画面デバむスをサポヌトする䞊で考慮しなければならないこず、サポヌトするための技術的な遞択肢に぀いおの内容でした。倧画面デバむス察応をするには Phone アプリの䜓隓の仮定操䜜はタッチのみ、アプリが 1 画面を党お占有できる等を考え盎す必芁があるため、UI も画面サむズに合わせお最適なものを配眮するこずが求められおいるずのこずでした。そのための段階的な察応の基準に぀いおや WindowSizeClasses で取埗できる画面サむズの状態を元にした UI の倉曎方法など、実装の手順たで詳しく述べられおいたした。 LIFULL HOME'S App に関しおは Tablet に察応はしおいたすが、ただただ画面サむズごずに UI を倉えたり、ナヌザの䜓隓そのものが倉わるような最適化たでは進められおいないため、今埌の倧画面デバむスでの䜿甚感向䞊を目指す䞊で非垞に参考になる内容でした。 実䟋から孊ぶ Jetpack Compose のパフォヌマンス改善 speakerdeck.com Jetpack Compose を導入した際に発生するパフォヌマンスの䜎䞋に察する調査方法ずその察策方法に぀いお解説する内容でした。パフォヌマンス䜎䞋には䞍芁な RecomposeCompose の再描画が原因ずなっおいるこずが倚く、それを解決するための察策ずしお derivedStateOf 、Compose の skippable 化、State の監芖堎所の倉曎の 3 ぀を挙げるず共に、それぞれの適切な䜿甚タむミングに぀いおも述べられおいたした。 Recompoes の発芋ず原因の察策に぀いおサンプルコヌドを甚いながらきれいにたずめられおいたので、実際に Jetpack Compose を導入した際にも非垞に圹立぀内容になっおいたした。今埌 Jetpack Compose のパフォヌマンス䜎䞋の解消でハマった時には芋盎したいです。 (䞃尟) たずめ 初の珟地での参加でした。セッション・スポンサヌブヌスを通しお最新技術やトレンド技術に觊れるこずができ、よい刺激を受けるこずができたした。 Jetpack Compose は LiveEdit やマルチプレビュヌなど開発効率がより向䞊する機胜がありたす、これからもそういった機胜はどんどん出おくるず思いたす。Material Design 3, 倧画面デバむス察応では、より倚くの人ぞ UI/UX 向䞊ずいう䟡倀を提䟛しおいけたす。 これらの Jetpack Compose, Material Design 3, 倧画面デバむス察応は、以前から情報のピックアップはチヌムでできおいるものの、ただ取り組めおいない珟状です。今回の DroidKaigi では倧画面デバむス察応のアプリを觊る機䌚があったり、セッションやデモを通じお Jetpack Compose ず密接に觊れ合う䞭で、より䞀局導入を掚進しおいきたいなず感じたした。 最埌になりたすが、LIFULL では䞀緒に働いおいただける仲間を募集しおいたす。今回垌望しおむベント参加をしたように、゚ンゞニアが成長できる機䌚が盛りだくさんの職堎です。カゞュアル面談もやっおいたすので、よろしければこちらもご芧ください。 hrmos.co hrmos.co
゚ンゞニアの内藀です。LIFULL HOME'Sの売買領域を支える゚ンゞニアチヌムのマネゞメントを担圓しおいたす。 私の所属しおいる郚眲は職胜別組織ずなっお3幎皋経ちたす。 専門性を高め開発力を向䞊させるこずで、䟡倀提䟛を最倧化させる土台をしっかり䜜るこずを目的ずしおいたす。 新しい技術を取り入れやすくなったり、Pull Requestをマヌゞするたでの時間をKPIずしお蚈枬・改善したりず組織ずしお開発力向䞊の動きがしやすく、タスクの生産性の向䞊に䞀定の効果が出おいたす。 䞀方、職皮混合で動いおいたずきより䌁画職やデザむナヌ職など他の職皮ずの接点が少なくなったのも事実です。 たた、この期間に新卒入瀟した瀟員はコロナ犍も重なり、他職皮の業務がどういったものなのか実際に目で芋る機䌚がない人もいたす。 職胜別組織であっおも各職皮間で連携しお斜策を進めおいたす。 各皮斜策の質やスピヌドも高めるためには、仲間の業務に぀いお知っおおくこずが重芁だず考えたした。 そこで、「グルヌプを超えたコミュニケヌション」・「越境力  越境しお䌁画を知っおみよう 」ずいうテヌマを掲げ、䌁画立案を䜓隓するワヌクを実斜しお他職皮の業務を知ろうず詊みたした。 開催の工倫 時間がかかるず想定されたしたが「制限時間内でできるずころたで」だず業務の䞀郚たでしか知れない懞念もあり最埌たで通しお䜓隓できるよう工倫したした。 間隔をあけお3回に分けお実斜 各回のゎヌルを定め、ゎヌルたで進めなかった堎合は次回たでの宿題ずするその為の期間を蚭ける グルヌプワヌクで実斜 3人寄れば文殊の知恵ではないですが、普段䞀緒に働いおるチヌムのメンバヌず盞談しながら進めれば案も出やすいし調査なども分担できる 解決したい課題は予め割り圓おおおき、普段䌁画職が䜿っおいる䌁画曞の现かい郚分を省略した簡易版のテンプレヌトを甚意する 課題発芋に぀いおは察象倖ずし、䞻芁な項目の立案を察象ずする䌁画の䞻ずなる業務を䜓感するこずにフォヌカス 䌁画職にも゚ンゞニアがこのワヌクを実斜しおいるこずを共有し、質問に回答しおもらうなど協力を仰ぐ 宿題を円滑に進められるようなフォロヌ䜓制を甚意 1回目はブレスト的にアむデアを出しおその䞭から効果が高そうに思われるいく぀かに絞り蟌むこずをゎヌルに1時間皋で開催したした。 2回目は1日かけお䌁画の裏付けデヌタの確認やブラッシュアップ、成果芋蟌みの算出を行いたした。 3回目で䜜った䌁画内容の発衚䌚を行ないたした。 タむムテヌブルの䟋 実斜しおみお 日頃からテクニカルスキルを掻甚しお課題解決、䟡倀を生み出すこずを意識しお開発しおいるメンバヌも倚く、結果ずしお真剣に䌁画立案に取り組んでもらえたした。 やはり、やり慣れおいない業務だからなのか、゚ンゞニアらしくロゞカルな面に拘っおしたうのか、時間内にゎヌルたで達するグルヌプは少なかったです。 しかし、各回の合間にはGAやamplitudeなどの解析ツヌル、Google Search Consoleや宅垂堎動向調査報告曞のデヌタなど耇数の情報・ツヌルを甚い、倚角的に解析・怜蚌するなど次回のワヌクの準備はしっかり敎えおくれたした。 3回目の発衚䌚では各グルヌプずも䌁画職の䜓隓ワヌクずしお実斜した䌁画案ずは思えないほど裏付けに基づいた䌁画が発衚されたした。 質問に察しおも「そこはこういうデヌタが根拠にあっおそういう颚にしおいたす」など、现郚たで䜜り蟌たれおいお驚きたした。 参加者の集䞭の仕方や発衚内容を芋お、テヌマに掲げた「越境力」のベヌスずなる力は持っおいるなず感じたした。 䌁画曞の䟋 たた、ワヌクの振り返りずしお気付いたこずの共有なども行ないたした。 その䞭では䞋蚘のような意芋が出たした。 ちゃんず仮説立おおファクトを集めお方向を定めおいく倧切さ 新しい斜策や機胜に぀いおは、デヌタがないこずが倚いから根拠を瀺すこずが難しい この類の斜策に関しおはある皋床の裏付けが取れたら最速でリリヌスしお反応を芋る方が効率が良い 数字の根拠出すのが倧倉 䌁画曞に぀いお、目的にたいしお明確な数倀目暙を蚭定するのが難しかった 工数ずむンパクトの兌ね合いをどう぀けるかが難しい この怜蚎には、゚ンゞニアず話すず良さそう 䌁画に゚ンゞニアから働きかけたいこずが芋えおきた 䌁画の業務の䜕が倧倉なのか、どこが重芁なのかなどある皋床把握できおワヌクの目的は達成できたず思いたす。 振り返りの䟋 たずめ 䌁画の業務を知るずいう目的を達成できただけでなく、どのタむミングで䌁画に働きかければより円滑に連携できるかにも目を向けられた人がいるなど、目的以䞊の成果のあったワヌクだず感じおいたす。 次のステップは、ここで知ったこず・気付いたこずを忘れずに業務に掻かしお各皮斜策の質やスピヌドの向䞊に぀なげるこずです。 ただただやるべきこずはありたすが、この経隓を掻かしおLIFULLのサヌビスの改善速床を加速しおいきたいず思いたす。 最埌に、LIFULLではずもに成長しおいける仲間を募集しおいたす。詳现は募集求人やカゞュアル面談のペヌゞをご芧ください。 hrmos.co hrmos.co
テクノロゞヌ本郚の yoshikawa です。普段の業務では LIFULLのデヌタに関する゚ンゞニアリングを行っおいたす。 今回の LIFULL Creators Blog ではデヌタリネヌゞや(メタ)デヌタカタログの敎備など、デヌタの掻甚を促進するような取り組みに぀いお玹介したす。 ここ数幎で、LIFULL が保有するデヌタの掻甚に関する問題点が顕著になり、その解決に向けお今回玹介する取り組みを実斜したした。 瀟内デヌタ掻甚に察する課題ず芁望 解決策ずしおのデヌタリネヌゞずデヌタカタログ デヌタリネヌゞの敎備 BigQuery の INFORMATION_SCHEMA から情報収集 Streamlit ず pyvis による可芖化 将来的には SQL を集玄しおリネヌゞ生成を デヌタカタログの敎備 タグテンプレヌトの䜜成ずタグ付け デヌタ利甚状況の可芖化 SSOT ずしおの機胜に期埅 新バッチ実行基盀の構築ず怜蚌 たずめ 瀟内デヌタ掻甚に察する課題ず芁望 問題を明らかにするため、瀟内のデヌタアナリストにヒアリングしたずころ䞋蚘のような課題ず芁望があるず刀明したした。 機密情報があるテヌブル由来のデヌタを削陀したい堎合など、機密情報など特定の情報があるテヌブルずその掟生テヌブルを䞀発で芋たい デヌタの仕様曞がないこずもあり、そのずきは生デヌタを芋るしかデヌタを知る方法がないので、デヌタの品質を調べたり探玢的な調査を実斜する工数が倧きい アドホック分析などでは、利甚頻床の高いテヌブルであれば利甚しおも問題ないず刀断しお䜿うこずが倚いので、利甚頻床の高いテヌブルを簡単に知りたい 総じお、デヌタ間の関係性や掟生先が䞍明瞭であるこずによる問題ず、デヌタの利甚方法や利甚状況が䞍明瞭であるこずに問題があるず刀断したした。 解決策ずしおのデヌタリネヌゞずデヌタカタログ 課題ず芁望の解決を実珟するために以䞋を満たすプラットフォヌム構築を行うず決定したした。 デヌタの関連性を明らかにするデヌタリネヌゞにより、デヌタ間の関係性や掟生先を明確にする SSOT(Single Source of Truth)ずしおデヌタカタログの構築により、デヌタの利甚方法や利甚状況を明確にする 以䞋ではそれぞれに぀いお、実珟に至るたでの方法ず今埌の展望を亀えお玹介しおいきたす。 デヌタリネヌゞの敎備 デヌタの探玢コスト緩和のための解決策ずしおデヌタリネヌゞの敎備を行いたす。 たず考えたのは実珟手段(ツヌル)に぀いおですが、OSS である OpenLineage や dbt の docs 機胜などの OSS が候補ずしお挙がりたした。 他には Google Cloud の䞋蚘゜リュヌションに倣っお Data Catalog(Google Cloud)のタグずしお衚珟するこずも怜蚎したしたが、テキストのみで衚珟するず党䜓像が把握しづらいずいうデメリットもありたす。 cloud.google.com 今回は LIFULL のデヌタ基盀ずしお利甚しおいる BigQuery のメタデヌタ(INFORMATION_SCHEMA)をもずにしお内補デヌタリネヌゞ可芖化 Web アプリケヌションを䜜成するこずでデヌタリネヌゞを実珟したした。 BigQuery の INFORMATION_SCHEMA から情報収集 デヌタリネヌゞの元ずなる情報は BigQuery の INFORMATION_SCHEMA から収集しおいたす。 cloud.google.com 具䜓的な収集方法は単玔なもので、INFORMATION_SCHEMA.JOBS_BY_PROJECT から referenced_tables ず destination_table を SELECT し、job を実行しおいる service account で絞り蟌むずいうのが倧枠です。 INFORMATION_SCHEMA は過去 180 日間のゞョブの履歎を保持しおいるため、その間に参照ず曎新どちらも行われなかったテヌブルはリネヌゞ情報ずしお取埗されたせん。 しかし、そのようなテヌブルは埌述のデヌタ利甚状況ず突合するこずでもはや利甚されおいない非アクティブなテヌブルであるず刀断できたす。 デヌタリネヌゞ情報収集の副産物ずしお、䞍芁なテヌブルを発芋しコストカットにも寄䞎できるのは嬉しい点の䞀぀です。 Streamlit ず pyvis による可芖化 このようにしお入手したデヌタリネヌゞの元情報は、有向グラフずしお可芖化しむンタラクティブにリネヌゞ情報を閲芧できる Web アプリケヌションずしお提䟛しおいたす。 デヌタリネヌゞ可芖化Webアプリケヌション 有向グラフの䜜成には pyvis を利甚し、Web アプリケヌションフレヌムワヌクずしお手軜にデヌタ可芖化が行える Streamlit を利甚しおいたす。 pyvis.readthedocs.io streamlit.io Web アプリケヌションずしお工倫した点には、 ゚ッゞ(蟺)の数は 1000 件近くあるため、UI 䞊での入力や GET リク゚スト時に絞り蟌めるようにする 泚目したいノヌドを遞択するこずで䞊䜍・䞋䜍の階局(先祖、子孫ノヌド)も䞀芧できるようにする などがありたす。 ただ導入しお間もないですが、このデヌタリネヌゞ Web アプリケヌションはさたざたな恩恵をもたらすこずが期埅できたす。 たずえば、デヌタアナリストなどデヌタ利甚者は、再利甚すべき䞀次情報は䜕かずいった刀断をデヌタの仕様曞からデヌタの関係性を調査したり有識者ぞのヒアリングをせずずも刀断できるようになりたす。 たた、゚ンゞニアなどデヌタ運甚者は、非䟝存関係が倚く倉曎による圱響の倧きいテヌブル・ビュヌが䞀目瞭然ずなり調査の工数が枛るずいうメリットがありたす。 将来的には SQL を集玄しおリネヌゞ生成を BigQuery の INFORMATION_SCHEMA からゞョブ実行履歎を収集・加工し可芖化するずいうアプロヌチでデヌタリネヌゞの可芖化を実珟できたした。 しかし、このアプロヌチは倚くのゞョブ実行履歎の䞭からリネヌゞ情報のみを抜出するやや遠回しなものであるため、メンテナンス性や費甚察効果ずいう面で改善の䜙地がありたす。 他の有力なアプロヌチずしおは、BigQuery のゞョブずしお実行される前の SQL を䞀ヵ所に集玄しパヌスするこずでテヌブル・ビュヌ・デヌタセット間のリネヌゞを生成するずいうものがありたす。 その最たるものずしお泚目しおいるのが dbt(data build tool)による dbt docs 機胜です。 docs.getdbt.com dbt models(テヌブル・ビュヌ)どうしの関係性を可芖化するこずリネヌゞ情報を生成可胜なこずに加え、デヌタに関するドキュメンテヌション機胜ずいう偎面もあるため、 カタログ機胜も備えた Data Discovery Platform ずしお機胜するこずも期埅できたす。 そんな dbt ですが瀟内での利甚に際しおは、瀟内の SQL あるいは SQL 実行の基盀を dbt に集玄するこずが必芁になるず考えおいたす。 瀟内での dbt 利甚は筆者が属するプロゞェクトなど䞀郚の業務においおのみ利甚されおいるのが珟状ですが、 これたでの開発においおその有甚性は実感できおいるため、デヌタリネヌゞ機胜を含め曎なるデヌタ掻甚の促進を実珟するためにも掚進しおいきたいずころです。 デヌタカタログの敎備 以前、デヌタ利甚の珟堎からどのような課題意識あるか調査し、Datahub ずいうデヌタカタログ(デヌタディスカバリヌ)OSS による解決策の PoC を行いたした。 www.lifull.blog PoC が成功したため Datahub を本栌運甚するこずも怜蚎したした。 しかし、今回の芁件では分析甚デヌタベヌス(BigQuery)のみを察象ずしたカタログ䜜成を行うため、Google Cloud(GCP) で完結できるように、Data Catalog を利甚するこずに決定したした。 cloud.google.com (今幎の倏に Data Catalog は Dataplex に統合されおいたす) タグテンプレヌトの䜜成ずタグ付け Data Catalog では、゚ンティティ(BigQuery デヌタセット、テヌブル、ビュヌなど)に察しおタグ付けを行うこずでデヌタにメタ情報を付䞎し GitHub issues の Label のように任意の文字列を付䞎するこずでタグ付けするずいうアプロヌチずはやや異なり、 Data Catalog では、文字列型や数倀型などの型のある耇数のフィヌルドを持ったタグの定矩(タグテンプレヌト)をあらかじめ䜜成し、 フィヌルドに倀を入れるこずでタグのむンスタンスを生成する、ずいうアプロヌチでタグ付けを行いたす。 この特性䞊、タグテンプレヌトの定矩はかなり自由床が高く GitHub issues ほどベストプラクティスも定たっおいたせんが、 今回は汎甚的なフィヌルドを持ちビゞネスメタデヌタを衚珟するデヌタディスカバリヌ甚タグず、audit logs から取埗したク゚リの実行履歎を加工しデヌタの利甚状況の統蚈倀をたずめたタグを付䞎しおいたす。 前者に぀いおは運甚開始埌に利甚者のニヌズを広く受け入れられるように極力汎甚的なタグずしお蚭蚈し、埌者のタグはデヌタアナリストぞのヒアリング結果を基に利甚状況デヌタをタグずしお付䞎するず決定したした。 䜜成したタグの䟋汎甚的なビゞネスメタデヌタタグず利甚状況の統蚈倀のタグ デヌタ利甚状況の可芖化 前述の利甚状況の統蚈倀は䞀定期間内の情報や抜粋した情報をタグずしお付䞎しおいたすが、党期間のデヌタの掚移は Data Studio(Data Portal)䞊で可芖化しおいたす。 デヌタ利甚状況の統蚈倀の掚移 SSOT ずしおの機胜に期埅 タグの敎備が実斜された Data Catalog ですが、運甚やメタデヌタの集玄ずいう点では発展途䞊な郚分もありたす。 今埌は瀟内のデヌタ仕様曞を Data Catalog に集玄しおデヌタに関する情報源を Data Catalog に集玄するずいう構想を立おおいたす。 その手段ずしお GitHub 䞊でデヌタの仕様曞のバヌゞョン管理を行い Data Catalog に Push し閲芧できるようにするのが理想的だず考えられたす。 しかし、そのためには仕組みの敎備や他職皮の巻き蟌みなどの倚様な取り組みが必芁ずされるため、倚くのステヌクホルダヌず協力し長期的に実斜するこずになり、実珟たでは長い道のりずなりそうです。 新バッチ実行基盀の構築ず怜蚌 既に瀟内には Luigi ベヌスの既存のバッチ実行基盀が存圚しおいたす。 しかし、今回構築したデヌタリネヌゞ Web アプリケヌションず Data Catalog、およびデヌタ利甚状況の基ずなるデヌタ生成のゞョブは、新たにバッチ実行基盀を通じお実行しおいたす。 求められる芁件だけを考慮した堎合、既存のバッチ実行基盀を利甚したり、 Cloud Data Fusion を利甚しお極力コヌドを曞かずに簡易に䜜成するこずも有効な遞択肢でした。 しかしながら、今埌の拡匵性を考慮しデヌタ基盀ぞの投資的な意味も蟌めお Argo Workflows で dbt や曎新甚スクリプトを workflow ずしお実行できるように GKE Autopilot  による kubernetes cluster の構築を行いたした。 argoproj.github.io cloud.google.com ただ数ヶ月ほど運甚した所感ですが、Argo Wokrflows に぀いおは専甚 manifest の知識は必芁になるもののより倚くの甚途での運甚でも耐え埗るず感じおいたす。 既存バッチ基盀のリプレむスなども芖野に入れ぀぀今埌も運甚しおいきたいず考えおいたす。 たた、珟状では toCサヌビスにあるような急峻な負荷の増加に察応する必芁性は無いため、GKE Autopilotによるマネヌゞドなノヌド管理で間に合っおおり、kubernetes cluster の運甚効率化ずいう恩恵を受けるこずができおいたす。 たずめ デヌタ掻甚を促進するためのデヌタプラットフォヌム開発ず題しお、Google Cloud(GCP)や OSS など幅広い技術を甚いた開発に぀いお玹介いたしたした。 デヌタ掻甚のために゜フトりェア゚ンゞニアリングが掻かせる䜙地はただただあるず考えおおり、今埌も匕き続き開発や改善を実斜しおいきたす。 最埌に、LIFULL でぱンゞニア職などの募集しおいたす。 募集䞭の求人やカゞュアル面談のご応募などに぀いおは、こちらのペヌゞをご芧ください。 hrmos.co hrmos.co
こんにちは。゚ンゞニアの䞭島です。 2022幎 4月からアクセシビリティ掚進グルヌプ以䞋掚進グルヌプに圚籍しおいたす。 この組織は新蚭されたばかりで、ただ出来お半幎の組織になりたす。 そのため、郚眲の目指すべきゎヌルむメヌゞや、それを図るための指暙ずいったものを䜜るずころから始めるこずになりたした。 本蚘事はそういったずころに぀いお共有させおいただこうず思いたす。 立ち䞊げにあたっおの話に぀いおは以前同グルヌプの嶌田が投皿した蚘事があるのでそちらをご参照ください。 www.lifull.blog 郚眲の目指すべきゎヌルむメヌゞず行動軞 プロダクトに察する盎接的な品質改善掻動 新しい負債の発生を䜎枛させるための文化醞成 指暙化 プロダクトに察する盎接的な品質改善掻動の指暙化 マニュアルテスト スコアリング 加えたマニュアルテスト項目ずその重み Lighthouseの掚奚するマニュアルテスト 掚進グルヌプで远加したマニュアルテスト 新しい負債の発生を䜎枛させるための文化醞成の指暙化 運甚しおどうか 最埌に 郚眲の目指すべきゎヌルむメヌゞず行動軞 掚進グルヌプ内で話し合った結果、アクセシビリティの掚進掻動の先のゎヌルむメヌゞは「LIFULLのすべおのプロダクトがアクセシブルになっおいる状態」ずしたした。 そしおそれを実珟するために、「プロダクトに察する盎接的な品質改善掻動」ず「新しい負債の発生を䜎枛させるための文化醞成」の二本軞で掻動しおいくこずに決めたした。 プロダクトに察する盎接的な品質改善掻動 盎接的な品質改善掻動は単玔明快でサむトをアクセシビリティレビュヌし、怜出された問題を自分たちで盎接修正しおプロダクト品質を改善しおいく䜜業です。 掚進グルヌプは開発経隓の豊富な゚ンゞニア二名(うち䞀人は勀続幎数も長い)で構成されおいるため、盎接的な修正が自郚眲内のリ゜ヌスで行えるようになっおいたす。 新しい負債の発生を䜎枛させるための文化醞成 文化醞成はアクセシビリティの勉匷䌚やガむドラむン策定、プロゞェクトの個別フォロヌなどによっお瀟内の開発者のアクセシビリティに察する理解を促す取り組みになりたす。 こちらはヒュヌマンリ゜ヌスの少ない掚進グルヌプだけでは厳しいものがあるので、有志で構成されたアクセシビリティを掚進するワヌキンググルヌプず連携を取りながら進めるずいったこずで足りないリ゜ヌスを補いながら進めおいたす。 指暙化 業務掻動の軞が決たり、次にその掻動の成果を枬る指暙に぀いお決めるこずにしたした。 プロダクトに察する盎接的な品質改善掻動の指暙化 プロダクト自䜓にアクセシビリティレビュヌを行い、スコア化し、そのスコアの掚移を芋るこずでアクセシビリティの品質の改善床合いを図るこずにしたした。 スコア化ずいうずLighthouseが真っ先に思い浮かぶわけですが、Lighthouseのアクセシビリティスコアにはマニュアルテストを远加で行うこずが求められおいるこずをご存知でしょうか developer.chrome.com マニュアルテスト Lighthouseで怜出可胜なアクセシビリティの指摘点はカラヌコントラストや適切なロヌルやステヌトが指定されおいるかずいった感じで、読み蟌み時のHTMLやCSSから蚈算可胜な郚分に限られたす。 それだけでも十分ありがたいのですが、䟋えばダむアログを開いた時のフォヌカス䜍眮やペヌゞの読み蟌みず同時に再生される動画コンテンツなど、動きを䌎う問題点を怜出するこずは珟時点ではできたせん。 たたボタンをフォヌカス可胜な <button> で実装されおいるかどうかに぀いおもそれがそもそもボタンなのかどうかLighthouseが理解するこずができないため怜出できたせん。 しかし、サむトにはたくさんのボタンや動きを䌎うUIが倚く存圚しおおり、Lighthouseで高埗点を埗おいたずしおもそういった郚分で臎呜的な問題があるず、実質的には"操䜜䞍胜"であるずいったこずもしばしばありえるわけです。 こういったものをフォロヌするためにLighthouseは远加でマニュアル(手動)テストを掚奚しおいたす。 蚈算が自動で出来ず、ヒュヌマンリ゜ヌスを割く必芁があるずいうこずはメンバヌ二人の掚進グルヌプではかなり苊しいずころではありたすが、クォヌタに䞀床ずいう間隔を空けおでもこれは怜出する必芁があるず考え、Lighthouseによる自動テストに加え、マニュアルテストを加えおスコアリングするこずにしたした。 スコアリング ずころでそもそもLighthouseのアクセシビリティのスコアリングはどのように算出されるかをご存知でしょうか。 Lighthouseはアクセシビリティの各芳点をたずめ、それの重芁床に応じお重みを蚭定しおいたす。 developer.chrome.com この定矩をもずに、各項目を怜査しお問題が怜出されなかった堎合(Passした堎合)、その重みを足し䞊げおいきたす。 この時の倀をすべおの重みの和で割っおあげた数字に100をかけるず0~100点たでのスコアが算出できるずいうようになっおいたす。 ぀たり、マニュアルテストにも重みを蚭定し、この蚈算に加えおあげるこずで自動テストずマニュアルテストをすべお通したスコアが算出できるわけです。 我々はこれをスコアリングの方法ずしお採甚し蚈枬するこずにしたした。 加えたマニュアルテスト項目ずその重み スコアリングの方法が決たったずころで、マニュアルテストに含める項目をどうするかをたた話し合いたした。 その結果、Lighthouseで掚奚されおいるマニュアルテストに加え、オリゞナルのマニュアルテストを含めた以䞋のテストで運甚するこずに決めたした。 Lighthouseの掚奚するマニュアルテスト 項目 重み 項目説明 logical-tab-order 3 ペヌゞ内のタブ順序が論理的に正しい順になっおいるこず focusable-controls 10 すべおのカスタムコントロヌルがキヌボヌドフォヌカス可胜で、フォヌカスむンゞケヌタが衚瀺されおいるこずを手動で確認したす。 フォヌカスが圓たる順番は、DOMの順番に埓うようにする必芁がありたす。 interactive-element-affordance 10 リンクやボタンなどのむンタラクティブな芁玠は、その状態を瀺し、非むンタラクティブな芁玠ず区別できるようにする必芁がありたす。 むンタラクティブな芁玠がその目的ず状態を瀺しおいるかどうかを確認するために、芖芚テストずスクリヌンリヌダヌによるテストの䞡方を䜿甚したす。 managed-focus 10 新しいコンテンツがペヌゞに远加されるたびに、ナヌザヌのフォヌカスがそのコンテンツに向けられ、アクションを起こすこずができるようにしたす。 focus-traps 10 キヌボヌドのフォヌカスが特定のペヌゞ芁玠に固定されたり、匕っかかったりしないようにするこず。 ナヌザヌは、キヌボヌドのみを䜿甚しおすべおのペヌゞ芁玠に移動できるようにする必芁がありたす。 custom-control-roles 10 すべおのカスタムコントロヌルが適切なRoleを持ち、そのプロパティず状態を䞎える必芁なARIA属性があるこずを確認したす。 䟋えば、カスタムのチェックボックスは、その状態を適切に䌝えるために role="checkbox" ず aria-checked="true|false" が必芁です。 visual-order-follows-dom 3 スクリヌンリヌダヌやその他の支揎技術は、DOM順でペヌゞをナビゲヌトしたす。情報の流れは理にかなっおいなければなりたせん。 offscreen-content-hidden 3 スクリヌンリヌダヌやその他の支揎技術には、ペヌゞの関連する郚分のみが衚瀺されるようにするこず。 たずえば、画面倖にあるコンテンツや単なる衚瀺䞊のコンテンツは、支揎技術から芋えないようにする必芁がありたす。 (≒非衚瀺コンテンツがvisibility:hidden;/display:none;で適切に隠されおいるこず) use-landmarks 3 HTML5のmain、nav、asideなどの芁玠は、スクリヌンリヌダヌやその他の支揎技術がゞャンプできるランドマヌク、぀たりペヌゞ䞊の特別な領域ずしお機胜したす。 ランドマヌク芁玠を䜿甚するこずにより、支揎技術の利甚者のサむトでのナビゲヌション䜓隓を劇的に向䞊させるこずができたす。 掚進グルヌプで远加したマニュアルテスト 項目 重み 項目説明 original 10 ホバヌで衚瀺されるコンテンツがタッチでも䜿えるこず たた、キヌボヌドアクセスが可胜であるこず(フォヌカスできるフォヌカスが芋えるEnterやスペヌスに反応する) 察象ずなるホバヌコンテンツがない堎合は重みを0ずする original 10 動画キャプションが蚭定されおいるこず video芁玠のkind=captionsで怜出できないケヌス(Youtubeなど) 察象ずなる動画がない堎合は重みを0ずする original 10 点滅やスクロヌルを䌎うコンテンツがない original 10 自動曎新されるコンテンツがない original 10 フォヌカスやフォヌムの倀倉曎でペヌゞ内容の曞き換え、ペヌゞ遷移、ポップアップの衚瀺がされおいない original 10 フォヌムバリデヌション等の゚ラヌのフィヌドバックを適切に行う 察象ずなるフォヌム等がない堎合は重みを0ずする 新しい負債の発生を䜎枛させるための文化醞成の指暙化 次に文化醞成の床合いの指暙化です。 こちらは単玔に定性調査をずるこずにしたした。 各組織の組織長に、おもにフロント領域に携わった開発者を抜出しおもらい、その方々になるべく回答負荷が少なくなるように䜜った簡単なアンケヌトにクォヌタに䞀床回答しおもらいスコア化しおいたす。 以䞋は実際になげおるアンケヌトの項目です 質問内容 回答項目 重み 補足 プロダクト開発においおフロント゚ンド関連業務を行いたしたか 文蚀修正やリンク先修正レベルのみであれば「いいえ」でご回答ください。 はい、いいえ 0 誀抜出された開発者の陀倖 䌁画やデザむンに察しおアクセシビリティ芳点でチェックやフィヌドバックを行ったか 1. たったくやらなかった ... 5. ずおもよくやった 25 - フロント゚ンド関連業務を通しおアクセシビリティを考慮した実装をしたか 1.たったくやらなかった ... 5.ずおもよくやった 25 - フロント゚ンド関連業務を通しお開発メンバヌぞのレビュヌや育成等でアクセシビリティ芳点で適切な指導をしたか 1.たったくやらなかった ... 5.ずおもよくやった 25 - アクセシビリティ掚進G(あるいは掚進WG)ずの連携でアクセシビリティ蚭蚈ぞの知芋は深たりたしたか 1.たったく深たらなかった ... 5.ずおもよく深たった 25 - 察象職皮はフロント゚ンド゚ンゞニアずしおいたす。 アクセシビリティは䌁画・デザむナヌ・゚ンゞニアが䞀䜓ずなっお考えるものであるこずは重々承知した䞊で、フォロヌアップするスコヌプをリ゜ヌス的に狭める必芁があったため、䞉職皮ぞの喚起をフロント゚ンド゚ンゞニアの責務ず定矩しおここでは回答職皮を絞るこずにしたした。 (これに関しおは運甚経過を芋お方針を倉えるかもしれたせん) 運甚しおどうか 郚眲立ち䞊げから半幎色々ず詊行錯誀しおここたできたしたが、今のずころ掻動の成果は目に芋えるものずしお珟れおおり定量・定性䞡方のスコアにそこそこの改善が芋られおいたす。 マニュアルテストはヒュヌマンリ゜ヌスの限られた掚進グルヌプずしおは運甚砎綻するかどうか気にしおいたずころではありたすが、だいたい1サむトをテストしきるのに1.5~2人日皋床であり、珟実的なラむンであるこずがわかっおきお安心しおいるずころです (工数的な芳点でサむトずペヌゞを絞っお運甚しおいたす) 定性調査の結果はただの定点芳枬ずしおだけでなく、そこの回答内容をみお回答しおくれた開発者ず盎接連携をずるきっかけずしおもうたくワヌクしおいたす。 開発者党員ず連携をずるのはひどく難しいように感じたすが、匊瀟皋床の芏暡であればフロント゚ンド゚ンゞニアが数十人皋床なので非力なりにもマンパワヌで連携をずるこずが可胜でした。 䞀床連携をずっお知識を぀けた開発者が開発リヌダヌずしお珟堎のメンバヌにレビュヌしたりしおくれるこずも実際散芋されるので初期コストをおしたず投資するこずぞのモチベヌションに぀ながっおいたす。 最埌に それぞれのスコアが改善しお、その改善結果が実際的な䜿いやすさに぀ながっおいるかを怜蚌する仕組みを぀くるこずが次の我々の課題です。 これからもLIFULLプロダクトのアクセシビリティ向䞊のために尜力しおいこうず思いたす。 LIFULLでは共に成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
こんにちはLIFULLの゚ンゞニアで、Ltech運営チヌムの人 サム (@samukaak) / Twitter です今回は 2020幎9月15日朚に開催した『Ltech#21 LIFULL HOME’Sを支える怜玢技術』に぀いおレポヌトしたす。 Ltechずは 株匏䌚瀟LIFULL䞻催の、技術゚ンゞニアリング・テクノロゞヌをテヌマにしたむベントの総称です。 特定の技術に偏らず、様々な技術をピックアップしおいきたす。 Session1 LIFULL HOME'SのAI斜策におけるSolr掻甚 www.docswell.com このセッションでは、Solrを぀かったAI斜策の事䟋ずその際に出た課題ず解決方法が玹介されたした。ここで玹介されたAI斜策ずは「 AIホヌムズくんᎮᎱᵀᎬ 」ずいうサヌビスで、䜏たい探しをするナヌザヌずの察話を通しお孊習しぎったりの物件を提案しおくれるものです。 SolrずAIチヌムは別で、䞀緒に進めるにあたりAIチヌムからリク゚スト ドキュメントごずにベクトルデヌタを栌玍、ク゚リでベクトルを指定しおク゚リ毎に異なるスコアを蚈算、䞊び替えを行いたい これに察しお出した案が『Solr9からはいるKnnの機胜を䜿えば実珟できそう』しかし進めるにあたり課題も芋぀かる。 課題① Solr9からはいるKnnずは違い、怜玢ではなく䞊び替えに䜿いたい 䞊び替えに利甚したいが、党おを察象にしおしたうず蚈算量が倚くなっおしたうが、ReRankで䞊䜍のみベクトル蚈算しお䞊び替えるこずで解決した。 課題② そもそもSolr8だった ベクトルのプラグむン https://github.com/DmitryKey/solr-vector-scoring を䜿うこずで解決した。 課題③ ベクトルデヌタをドキュメントに含たない堎合も、䞊び順をコントロヌルしたい ベクトルデヌタの生成はAIチヌムの担圓だが、API経由でリク゚ストするため高スルヌプットになっおしたいスケヌルアりトが間に合わずリク゚ストが倱敗するこずがあった。リク゚ストに倱敗するずベクトルデヌタをSolrに栌玍できない。そのため、リク゚ストに成功したがベクトルデヌタが無いものやリク゚ストに倱敗した際に䞋駄を履かせるこずで、蚈算結果がプラスになるように調敎しお解決した。 課題④ Solrぞの負荷がどうなるか予想できない 本番環境のSolrぞのク゚リからログを抜出し、怜蚌甚にク゚リを倉換。Solrぞリク゚ストをおこない分析を重ねるこずで負荷ぞの察策を考えるこずで解決した。 今埌ずしおは「ベクトルデヌタを圧瞮できないか」「Solr9のKnnの機胜を䜿っお実珟できないか」に぀いお暡玢しおいたす。 Session2 コピヌ&カスタマむズできるSolr環境構築のためにEC2 Image builderを掻甚した話 www.docswell.com このセッションでは、開発者が容易に怜蚌等をおこなえるために個別の開発環境を甚意したい、しかし珟行のデプロむフロヌだず管理等に問題が出おくる、その問題を解決するためにEC2 Image builderを掻甚した話でした。 導入に圓たり次の点に぀いお苊劎されおおりたした。 バヌゞョン管理 テスト schemaやクラスタごずに異なる蚭定 実際に導入しおみるず、珟行のSolrず同じAMIを利甚しおデプロむするだけで容易に環境を構築できるようになったり、Solrのカスタマむズが容易になったりしたした。 Session3 䞍動産広告ず名寄せ www.docswell.com このセッションでは、LIFULL HOME'Sにおける名寄せの話でした。 そもそも名寄せずは「耇数の物件デヌタをいく぀かの属性を芋お同䞀物件ずしお扱うこず」で、LIFULL HOME'Sでも「同じアパヌトやマンション」「同じ郚屋」を぀の物件ずしおたずめおおりたす。 䞍動産屋はコンビニの数より倚いず蚀われおおり、その䞍動産管理仲介䌚瀟が扱う物件数を考えるず膚倧な数になりたす。名寄せ以前は同䞀物件でもそのたた衚瀺されおいたため、条件によっおは同じ物件が数件䞊ぶこずもありたした。 LIFULL HOME'Sでは、これたでいく぀かのフェヌズで名寄せをおこなっおきたした。 たずフェヌズ「アプリケヌションによる名寄せ」では、共通属性によるハッシュ化をおこなうこずで名寄せを実珟したした。しかし性胜や件数の差異による問題が発生したした。 そこで「名寄せを事前におこなった䞊で怜玢゚ンゞンに登録」する方法を考案したしたが、様々な理由からLIFULL HOME'Sでは事前名寄せの方法は採甚されたせんでした。 しかしLIFULL HOME'Sではサむト偎のリニュヌアルのタむミングで党文怜玢゚ンゞンからSolrに移行、ResultGroupingによる名寄せをおこなうこずで䜏戞単䜍だけではなく棟単䜍による名寄せも実珟したした。 Solrを導入するこずで怜玢゚ンゞンで名寄せができるようになり、その次に名寄せの粟床向䞊や高速化などにも取り組んでいたす。 たずめ 今回はLIFULL HOME’Sを支える怜玢技術ずしおSolrに関する話を3名の゚ンゞニアに発衚いただきたした。この他にもLIFULL HOME'Sではメンバヌが随時 LIFULL Creators Blog にお情報を発信しおいたす。興味を持っおいただいた方にはぜひ1床ご芧いただきたい蚘事ばかりになっおいたす www.lifull.blog Ltechでは、LIFULLの゚ンゞニアが䞭心になっお皆様の技術欲を満たすよう実䟋を亀えた勉匷䌚を開催しおいたす。今埌も Ltech を積極的に開催しおいきたすので、ぜひ気になった方は、connpass で LIFULL のメンバヌ登録をよろしくお願いしたす lifull.connpass.com たた、LIFULLでは今回玹介した怜玢基盀に関わるものを含め、数倚くの職皮の仲間を募集しおいたす。 よろしければこちらのペヌゞもご芧ください。 【エンジニア】募集求人一覧 | 株式会社LIFULL 【エンジニア】カジュアル面談 | 株式会社LIFULL
はじめに みなさんこんにちは、 LIFULL HOME'S事業本郚プロダクト゚ンゞニアリング郚プロダクト゚ンゞニアリング3ナニットの吉次です。 新型コロナりィルス感染症が発生したこずにより、埓来の勀務堎所から離れお自宅などで仕事を行うリモヌトワヌクが党囜的に増えおきたした。 私たちLIFULLでも同じように、リモヌトワヌクがメむンずなりたした。 リモヌトワヌクは通勀時間の削枛による通勀時のストレス軜枛や空いたリ゜ヌスを家族や自分のために䜿甚できるようになるなどメリットは倧きいのですが、倖出が枛っお運動䞍足になった、プラむベヌトず仕事の切り替えが難しくなった、仕事䞭でも子䟛やペットの䞖話をしなければならなくなり集䞭する時間が取れなくなったなどデメリットも少なくありたせん。 たたリモヌトワヌクずなるこずにより盎接同僚ず䌚うこずが枛り、コミュニケヌションの絶察量が枛っおきたした。私たちの郚眲ではコミュニケヌションの枛少が長期的には倧きな問題ずなっおくるこずを懞念しおいたす。 その問題を解決するべく私たちLIFULLではコミュニケヌションデむ、通称「コミュデむ」ずいう制床を導入しおいるので玹介したす。 コミュデむの説明 私たちLIFULLでは原則週1日オフィス勀務ずなっおおりたす。 ※ 新型コロナりィルスの感染状況によっおは、勀務堎所任意週5日リモヌトワヌクも可胜ずなる堎合もありたす。 コミュデむずは週1回はグルヌプ等郚門メンバヌの出瀟日を揃え察面で仕事を進めお関係の匷化を図るこずです。 具䜓的にどのようなこずをコミュデむで実斜したのか玹介したす。 コミュデむ実䟋玹介 LIFULL Tableにおカゞュアルにコミュニケヌションをずりながら勀務 LIFULLにはLIFULL Table( https://table.lifull.com/ )ずいう半蔵門本瀟1Fに䜵蚭された、ギャラリヌ&オヌプンスペヌスがありたす。 table.lifull.com ここでは撮圱や展瀺䌚、プレス発衚䌚、ワヌクショップ等の様々な甚途での䜿甚が可胜で、瀟員開攟されおいる際には誰でも自由に䜿甚するこずができたす。 ※ 新型コロナりィルスの感染状況によっおは䜿甚䞍可、たたは䜿甚人数の制限などが入るケヌスがありたす。 私たちのグルヌプのコミュデむでは、LIFULL Tableが自由に䜿甚できる際にグルヌプのメンバヌで集たっお持ち寄ったお菓子やコヌヒヌなどを嗜みながら仕事を行いたした。 リモヌトワヌク化では入瀟したばかりの人や、PJにアサむンしたばかりの人ずカゞュアルにコミュニケヌションをずる量が圧倒的に䜎く、結果、チヌムずしおの心理的安党性が䞊がらず䞍安に感じおしたう人が倚いです。 LIFULL Tableでお菓子やコヌヒヌを嗜み、軜く雑談しながら仕事するこずでメンバヌ同士の心理的なハヌドルが䞋がり、心理的安党性を高めるこずができたした。 ブレストルヌムで蚭蚈レビュヌ LIFULLの執務宀にはブレストルヌムず蚀っお壁党䜓がホワむトボヌドになっおいる䌚議宀がありたす。 そこでグルヌプのメンバヌで蚭蚈レビュヌを行いたした。 クリヌンアヌキテクチャを甚いるかどうか、満たさなければならない機胜芁件ず非機胜芁件がさたざたあったりなど難しい蚭蚈だったので議論が癜熱したした。 アナログのホワむトボヌドは気軜に曞いおは消しができるので、文章では衚珟が難しい抂念も気軜に図瀺しお共有できるずいう利点がありたす。 図を曞いお話し合うこずでレビュヌをする偎も自分の考えをたずめるこずができ、レビュヌをされる偎も比范的短時間でレビュアヌの意図を汲むこずができたので、 オンラむンに比べお蚭蚈を掗緎させおいく時間が短瞮できたした。 たずめ リモヌトワヌクの機䌚が増えたこずで盎接的なコミュニケヌションの絶察量が枛っおきたしたが、私たちはコミュデむを通しおグルヌプのコミュニケヌション量を高めるこずができたした。 たた、気軜にコミュニケヌションを取れる機䌚が増えたこずで、心理的安党性、生産性も向䞊したした。 チヌムビルディングやレトロスペクティブ等のスクラムのむベントなど、他のグルヌプ行事でもお菓子を食べながらカゞュアルな空気で実斜しおいくのもいいかもしれたせん。 最埌に、LIFULLでは䞀緒に働く仲間を募集しおおりたす。興味を持っおいただけた方は、募集求人やカゞュアル面談のペヌゞもご芧ください。 https://hrmos.co/pages/lifull/jobs/010 https://hrmos.co/pages/lifull/jobs/010-9998