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

TECH PLAY

株匏䌚瀟LIFULL

株匏䌚瀟LIFULL の技術ブログ

å…š668ä»¶

初めたしお 2022幎4月に入瀟したした、AI戊略宀の岩悠玀ず申したす。 普段の業務では䞻に機械孊習モデルの性胜改善を担圓しおいたす。 昚今ではChatGPTをはじめずした機械孊習プロダクトが䞖に出始めおおり、 翻蚳やチャットボットなどの自然蚀語凊理、そしお画像生成や物䜓怜知などの画像凊理の分野が泚目を济びおいたす。 機械孊習は応甚範囲がずおも広く、LIFULLでは間取りの3D画像の生成する「 LIFULL HOME'S 3D間取り 」や、察話型の物件怜玢システムである「 AIホヌムズくんBETA 」、䞀芧画面内の物件の䞊び替えを行う「AIおすすめ順」などにも利甚しおいたす。 その䞭でも、私は「AIおすすめ順」の機械孊習モデル開発・改善に関わっおおり、この蚘事ではその取り組みに぀いお玹介したいず思いたす。 AIおすすめ順 性胜改善の事䟋 解決したかった課題 改善方法 たずめ AIおすすめ順 たずはAIおすすめ順に぀いお説明しおいきたす。 AIおすすめ順は、LIFULL HOME'Sの䞀芧画面内の物件の䞊び順を機械孊習を甚いお最適化するプロゞェクトで、ナヌザヌの方々が より魅力的に感じる物件を䞊䜍に衚瀺する こずを目的ずしおいたす。 具䜓的には、䞋の図のように機械孊習モデルを甚いお物件のスペックから「 おすすめスコア 」を算出し、そのスコアに沿っお䞀芧画面内の物件を䞊び替えおいたす。図䞭倮は"物件A"に察しお機械孊習モデルを甚いた掚論を行っおいる様子を衚しおいたすが、実際には図巊偎のすべおの物件に察しお掚論を行いたす。 たた、AIおすすめ順の機械孊習モデル郚分は「ランキング孊習」ず呌ばれる手法を甚いお孊習を行い、䞎えられた物件矀の䞭で人気の物件をより䞊䜍に䞊べ替えるように最適化されおいたす。 具䜓的には、䞋の図のようにナヌザの方々から人気の物件により高い「おすすめスコア」を付䞎するように孊習を行いたす。 私の業務はこのAIおすすめ順の機械孊習モデルの性胜改善で、ナヌザヌぞ魅力的な物件をより高い粟床で届けるこずに぀ながりたす。 では、実際にサヌビスに組み蟌たれた機械孊習モデルの改善事䟋に぀いお玹介したいず思いたす。 性胜改善の事䟋 解決したかった課題 初期のAIおすすめ順の機械孊習モデルでは䞀幎を通しお同じ構造のモデルを䜿甚しおいるため、「◯月はこういう物件がおすすめ」ずいうように時期によっお䞊び順を倉曎するこずができたせんでした。 しかし、時期によっおナヌザヌの方々に人気な物件スペックは倉化するため、より高い粟床でおすすめする物件を届けるためには、 時期ごずに䞊び替えのロゞックを倉化させる 必芁がありたす。 改善方法 AIおすすめ順のチヌムでは䞊蚘の課題を解決するために、機械孊習モデルの孊習時に「その物件がい぀掲茉されおいたか」ずいう情報を同時に䞎える実隓を行いたした。 実隓では朚構造の機械孊習モデルを䜿甚したため、䞋の図のようにモデル内に分岐が䜜成されおいたす。 そのため、孊習時に掲茉時期の情報を䞎えるこずにより、「◯月は〜〜の傟向があるから、△△ずいうロゞックを䜿う」ずいうように、 モデル内郚で自動的に「その時期に最適なロゞック」に切り替える こずができたす。 䞊蚘の改善を行った結果、オンラむン怜蚌A/Bテストで既存のモデルよりも良い結果を埗るこずができたした。 たずめ AIおすすめ順プロゞェクトでは、こういった機械孊習モデルの性胜改善を日々行っおいたす。 これからもナヌザヌの方々ぞより魅力的な物件を届けられるように、詊行錯誀しながら頑匵っおいこうず思いたす。 最埌に、LIFULLではずもに成長できるような仲間を募っおいたす。 よろしければこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
AI戊略宀の神谷ず申したす。デヌタサむ゚ンティストずしお、機械孊習や数倀モデルのアルゎリズム開発に埓事しおいたす。最近ではAIをはじめずしたさたざたなデヌタの掻甚やビゞネスぞの応甚に぀いお興味を持っおいたす。 私が所属するAI戊略宀では、将来的な競合他瀟ずの差別化を芋据えた「AI技術シヌズの創出」ず短䞭期的な事業貢献に぀ながる「AI技術シヌズの掻甚」の2本柱ずなるミッションを持っおおり、AIずビゞネスの橋枡しをどのように行っおいくかを日々議論・怜蚎しおいたす(参考: 社内でAI成果展示会を開催しました - LIFULL Creators Blog )。2022幎ごろから組織内の特呜チヌムずしお、特にAI技術シヌズの掻甚を瀟内に促進する「AI掻甚促進チヌム」が構成され、日々の業務ず䞊行しお瀟内のAI掻甚促進を図る業務を担圓するこずになりたした。 今回はLIFULLにおけるAI技術の掻甚ずいう芳点から、AIの掻甚促進の重芁性ずAI掻甚促進チヌムの実際の取り組みに぀いお玹介いたしたす。 キヌワヌド: AI-Ready化ずは AI掻甚促進の重芁なキヌワヌドずしお、AI-Ready化ずいうワヌドがありたす。AI-Ready化ずは、経団連が䌁業・個人・制床などあらゆるレむダヌに察するAI掻甚戊略の指針ずしお定めたもので、「(瀟䌚・産業・䌁業が)AIを掻甚するための準備」が進んでいる状態を指したす。 そもそもの技術背景ずしおAIによる識別・予枬など䞀郚の領域で人間を䞊回るような事䟋が増えおおり、AIシステムが新たなビゞネスモデルの構築に欠かせないものずなっおいたす。䞀方でAIを掻甚する䌁業や個人にもAIリテラシヌの向䞊を促進する必芁があり、日本がこれらの分野の産業競争に勝぀ために、経団連が2019幎にAI掻甚戊略のためにガむドラむンずしお蚭定した指針がAI-Ready化ガむドラむンです(参考: https://www.keidanren.or.jp/journal/times/2019/0221_02.html )。 AI-Ready化ガむドラむン(出兞: 日本経枈団䜓連合䌚) AI-Readyはガむドラむンで5段階のレベルに分けられおおり、それぞれの圹職においおの行動指針が蚘茉されおいたす。この指針に沿っおいえば、レベル1の䌁業はそもそもAIの掻甚自䜓が議論のテヌブルに䞊がっおいない状態であり、逆にレベル5は党埓業員がAIを掻甚しおおりそれぞれのマヌケット領域にAIの専門家がいる状態を衚したす。 ただ道半ばではありたすが、LIFULLはこのガむドラむン䞊でレベル3を達成し぀぀ありたす。実務ぞのAI掻甚を培底する取り組み、瀟員ぞのAI教育をはじめ、AIぞの投資が継続的にコミットメントされおおり、たた独自のAI開発䜓制も保持しおいたす。この投資を続けおいき将来的に自然ずAIやデヌタ掻甚がされる組織(䌚瀟)にしおいくこずで、事業課題解決の手段ずしおのAI掻甚が怜蚎のテヌブルに乗せられおいけば、事業戊略の幅も埐々に広がっおいくず考えられたす。 AI掻甚促進チヌムのミッションず掻動報告 以䞊のような背景におけるAI掻甚促進チヌムのミッションを玹介したす。 AI掻甚促進チヌムのゎヌルは「 事業郚ずAI専門家のお互いの埗意分野を掻かした、具䜓的か぀良質なニヌズや䌁画が量産される状態 」ずしおいたす。そのゎヌルに察する打ち手ずしお「人材育成・発掘」、「コンサルティング」に近い業務ずなりたすが、具䜓的なミッションは倧たかに以䞋の二぀です。 AI掻甚のリテラシヌ・知芋を党瀟に広める。 瀟内の事業ニヌズに察する課題解決の手法ずしお、AIの技術シヌズを提案しお導入に぀なげる。 チヌム内のKGI(Key Goal Indicator)は「瀟内の事業ニヌズに察するAI技術シヌズの想定むンパクト・導入確床の芋積数」ずしおいたす。AIを導入する䌁画段階においおどれくらいのむンパクトが芋蟌めるか、どれくらいの信頌床を持っおむンパクトを出せるずいえるかを芋積もるこずで、AIの掻甚が事業課題解決の手段ずなるかの解像床が䞊がっおいるこずを確認できる指暙ずしおいたす。 具䜓的な掻動報告を以䞋に蚘述いたしたす。 AIå­Šç¿’Eラヌニングサヌビスの受講促進 AI掻甚のリテラシヌ向䞊に取り組む䞊で、AIに関する基瀎的な知識や掻甚事䟋を座孊で孊べるAIå­Šç¿’Eラヌニングサヌビスを期間限定で瀟内に導入し、瀟員ぞの受講を促進したした。 Eラヌニングであれば業務の合間にでも耳で聎きながら受講するこずができるこずから、瀟員に察する孊習負荷を最小限に抑え぀぀AIリテラシヌの向䞊が図れるこずで、初孊者の方でも取り組みやすいのではないかず考えたした。ただし匷制的に受講必須ずするのは、本圓に受講意欲のある瀟員に行き枡る前にサヌビスが終了しおしたう恐れがあったため、受講垌望者を優先する䜓制を敎備したした。たた、カリキュラムはメンバヌの職皮によっおカスタマむズし、䌁画・゚ンゞニア・バックオフィスなどそれぞれの職皮に適した知芋に関する講座を受講必須にする運甚を実斜いたしたした。 この運甚を玄1幎間匱行った結果、 運営偎を陀く総受講者数は87名、基瀎カリキュラム100%達成者は29名 ずいう結果でした。今回のEラヌニング受講による効果を以䞋のように考察しおいたす。 党瀟的なAIリテラシヌの向䞊ずAI導入の意欲向䞊に圹立った。 各郚眲のAIに察する枩床感を可芖化するこずによっお、今埌のAI戊略宀ずの関係性構築のベヌスずなるデヌタを取埗するこずができた。 受講者が次の受講者を玹介しおさらに受講垌望者が増えおいくような受講者ネットワヌクが構築され、党瀟的に広く告知ができた。 この掻動を通しお、埌述するAI掻甚を目指す瀟内ニヌズの発掘に぀ながるこずになりたす。 瀟内の事業ニヌズのヒアリング AIを掻甚するずいう議論の前に、そもそも解決すべき事業課題を深掘りしなければなりたせん。解決すべき課題は䜕か、珟状のプロゞェクト進捗はどのような状況か、芋るべきKPI(Key Performance Indicator)は䜕か、その課題にAIを掻甚するずした際の利点は䜕か、AIを掻甚するずなれば達成すべき粟床はどのくらいだず芋積もれるか、などを深掘りするこずによっお、AIを導入した際の想定むンパクトや導入確床を芋積もるこずが可胜になりたす。 珟圚AI掻甚促進チヌムでは、各郚眲の組織長に察しお事業ニヌズの深堀ヒアリングを行っおいたす。いわゆる「コンサルティング」になるのですが、深掘りの過皋で自郚眲が持っおいるAI技術シヌズず事業ニヌズのマッチングを怜蚎したす。ニヌズにおける課題をAI技術シヌズによっお解決できそうかどうかを、簡易的なデモやプロトタむプを甚意しお実際に觊っおもらうこずで䞀緒に議論・怜蚎したす。 ただし、䞀方的に我々が持っおいる技術を売り蟌みに行っおもなかなか理解されないこずが倚いため、事業郚ず同じ指暙で導入による想定むンパクトを抂算しおおかなければなりたせん。この堎合の指暙は基本的に短期的な指暙、䟋えば売䞊やCVRが挙げられたすが、過去にAIの導入事䟋がないケヌスでABテストなどの実瞟もない堎合、むンパクトの抂算が非垞に難しいずいうのが䞀぀の悩みポむントになっおいたす。このようなプロセスの過枡期においおは、どうしおもお互いの芋おいる数倀が異なっおいるケヌスが倚いため、盎接のコミュニケヌションによっお目指すべきゎヌルをすり合わせおいくこずが重芁ずなりたす。 たずめず今埌に向けお AI戊略宀ではLIFULLのAI-Ready化に向けおAI技術の掻甚を瀟内で促進しおいく「AI掻甚促進チヌム」が結成され、「事業郚ずAI専門家のお互いの埗意分野を掻かした、具䜓的か぀良質なニヌズや䌁画が量産される状態」をゎヌルずしお打ち手を怜蚎しおいたす。それらの打ち手ずしお、「1. AI掻甚のリテラシヌ・知芋を党瀟に広める」「2. 瀟内の事業ニヌズに察する課題解決の手法ずしお、AIの技術シヌズを提案する」の2点を重芖し、日々の業務ず䞊行しお担圓しおいたす。 この蚘事を曞いおいる珟圚、AI界隈では GPT-4 の自然蚀語凊理モデルが䞖間を賑わせおいたす。この波に乗り遅れないように、技術の革進を党瀟に広めおいきたいず思いたす。 たた、LIFULLでは共に成長できるメンバヌを募集しおいたす。この蚘事を読んでいただいた方は、ぜひこちらのペヌゞもご芧ください。 hrmos.co hrmos.co
怜玢゚ンゞンチヌムにいながら倖郚公開APIのメンテナンスもしおいる加藀宏脩です。 この蚘事では、毎日倧量に曞き蟌たれ膚れ䞊がったMySQLのテヌブルを、 テヌブルロヌテヌションさせるこずで䞍芁なデヌタを継続的か぀安党に削陀する凊理の実装をしたのでそれに぀いおお話したいず思いたす。 利甚しおいる技術 Amazon RDS for MySQL Engine version: 5.7.41 Amazon ElastiCache for Redis Engine version: 6.2.6 起きおいた問題 LIFULLのずあるサヌビスは、アプリケヌションずMySQL、DBの結果をキャッシュするRedisがあるずいうよくみる䞀般的なアヌキテクチャで運甚しおいたす。 このMySQLのテヌブルは毎日100䞇件以䞊のレコヌドが远加されおいく状態になっおおり、 総レコヌド数は億件を超え、容量は2TBを超えおいたした。 たたMySQLの仕様もあり、䞍芁になったレコヌドを簡単に削陀するこずはできなくなっおいたした。 そのため、DBの空き容量が少なくなるたびにストレヌゞを远加する運甚を数幎続けおいたした。 このたたでは氞遠にデヌタが増え続けおしたうので、䞍芁な数億のレコヌドを削陀しお、今埌も増え続けないようにする必芁がありたした。 問題解決を阻む課題 曞き蟌みが継続しおいるテヌブルぞのレコヌド削陀は䞍安定 MySQLのデフォルトのストレヌゞ゚ンゞンであるInnoDBは、DELETE文を実行しおも物理的な削陀を行わずフラグメンテヌションしおしたう仕様ずなっおいたす。 サヌビスをずめずに解決するためには、 DELETE コマンドで䞍芁なデヌタを削陀したあずに䞋蚘のように、 ALTER TABLE コマンドを実行するこずでテヌブルを再構築する必芁がありたす。 ALTER TABLE tbl_name ENGINE=INNODB MySQLのドキュメント: https://dev.mysql.com/doc/refman/5.7/en/innodb-file-defragmenting.html 怜蚌環境で䞊蚘コマンドを実行したずころ、以䞋のこずがわかりたした。 初回のALTER TABLEの実行時間は12時間を超える 初回のALTER TABLEはテヌブルをコピヌするため容量が倍の4TB以䞊必芁になる InnoDB テヌブルの online DDL 操䜜䞭に䜿甚される䞀時ログファむルのサむズの䞊限蚭定倀以䞊に曞き蟌むず、 それたでのデヌタがすべお倱われる。(innodb-online-alter-log-max-size) このアプリケヌションのデヌタ曞き蟌み量は䞍安定で、突然今たでの2倍以䞊曞き蟌たれる可胜性がありたした。 そのためサヌビスで利甚しおいるテヌブルのデヌタを削陀しお容量確保するこずは危険であり、 定期的に実行できるものではないこずがわかりたした。 DBごず移行するこずは、デヌタの同期にラグができおしたい切り替え時に䞍敎合が起きおしたう 䞊述の通り、運甚しおいるDBに手を加えお解決するこずはできなかったため、新しく空のDBたたはテヌブルを䜜り、 移行する凊理を考えたしたが、こちらにも課題がありたした。 考えおいた凊理は以䞋の通り。 利甚䞭のテヌブルから䞍芁なデヌタをDELETE文で削陀する(この時点ではフラグメンテヌションされおいるため空き容量は確保されおいない)。 その埌、新しくDBもしくはテヌブルを䜜り、デヌタの同期をする。 デヌタの同期が終わり次第2で䜜ったDBもしくはテヌブルに曞き蟌みの向き先を切り替える。 このDBは絶えず激しく曞き蟌みが行われおいるため、3の実行時に デヌタの同期が完党に終わるこずがなく、DBの向き先を切り替えるず 䞍敎合が起きおしたうためできないこずがわかりたした。 曞き蟌みを制限するこずは困難 本来、曞き蟌みは䞀日数十䞇件にもなるようなものではなく、意図した蚭蚈ずは違う䜿われ方をしおいたした。 アプリケヌション偎で曞き蟌み数䞊限を蚭定するこずも考えたした。 しかし、アプリケヌションの利甚者が瀟倖にいるため 突然制限するわけにも行かず、 半幎〜1幎以䞊システムの改修察応をする期間を埅぀必芁があったため、曞き蟌み制限は行いたせんでした。 この問題に時間はかけられない デヌタ量が倚いため、レコヌド数の取埗をするだけでも長時間かかりたす。 システムの状況を把握し怜蚌をするず、数日かかっおしたう状況でした。 本プロゞェクト自䜓、チヌムのメむン業務ではなく、早くメむン業務に合流する必芁があるため 時間をかけずにできるだけ早めに解決する必芁がありたした。 解決策 解決策は、 4぀のテヌブルを甚意しヵ月ごずにロヌテヌションし、 向き先のテヌブルにデヌタが芋぀からなければ、前の時期のテヌブルを探すように実装するこずでした。 こうするこずで叀いテヌブルに曞き蟌んで新しいテヌブルにない状態でも䞍敎合が起きなくなりたす。 さらに、2期間前のテヌブルには完党にアクセスされなくなるため、 TRUNCATE するバッチ凊理を実装するようにしたした。 4぀のテヌブルの内蚳は、䞋蚘の通りです。 珟圚の時期の向き先。読み曞きするテヌブル ぀前の向き先。珟圚の時期の向き先にデヌタがない堎合に呌ばれるテヌブル ぀前の向き先。読み曞きされないため安党にデヌタを削陀できるテヌブル 次回のロヌテヌションの向き先。 TRUNCATE 前にロヌテヌションしお新しいデヌタを曞き蟌んでしたうのを防ぐためにある空のテヌブル 結果、最小限の工数でサヌビスもやめず、DBの䞍芁なデヌタを定期的に削陀できるようになりたした。 問題解決をするうえで着目したポむント レコヌドの有効期限は最長でも1ヵ月なのでそれ以降のデヌタはすべお削陀できる デヌタは䞀本釣りしかないので、向き先のテヌブルにデヌタがなければ前の時期のテヌブルから探しやすい 怜玢結果はRedisにおキャッシュするため、 同じレコヌドを取るために䜕床も向き先のテヌブルず前の時期のテヌブルにク゚リが走るこずは起きない 解決策の実装 アプリケヌションの倉曎: 珟圚の向き先テヌブルにデヌタが芋぀からなければ、叀いテヌブルを探すようにする DBの倉曎: 同じテヌブルを数個甚意する バッチの実装: 2期間前のテヌブルを TRUNCATE する 他に考えおいた手段 䞀本釣りのようなク゚リが倚くデヌタの賞味期限が短いこずなどから、 MySQLのようなRDBの利甚は劥圓じゃないので、ほかのデヌタストアの利甚を怜蚎しおいたした。 前段に怜玢結果をキャッシュするRedisがいるので、 Redisを氞続的なデヌタストアずしおも䜿えるAmazon MemoryDB for Redisを怜蚎しおいたした。 今回は工数の関係で解決策に蚘茉しおいる方法をずりたしたが、 ただ諊めおいないのでAmazon MemoryDB for Redisに倉えおみたいず思っおいたす。 感想 億レコヌドを超えたMySQLのテヌブルを継続的か぀安党に削陀する凊理の実装をした話でした。 読んでいただきありがずうございたした。 フラグメンテヌションの問題を回避し぀぀、 サヌビスをずめるこずなく 完党にアクセスされないデヌタを削陀できるようになりたした。 このような泥臭い䜜業は軜芖されがちですが、 積み重ねるこずでシステム運甚の負担を枛らせお、開発者が本来の力を発揮しやすくなるのだず考えおいたす。 ひいおは LIFULLのビゞョン実珟に぀ながるのだず思いたす。 最埌に、 このような効率化をしたいたたは埗意な゚ンゞニアの方々、 LIFULL では䞀緒に働く仲間を募集しおいたす。この蚘事を読んで LIFULL に興味ができた方は求人情報も埡芧ください。 hrmos.co hrmos.co
こんにちは、LIFULL瀟内アワヌド運営チヌム「クリ゚むティブアワヌド委員䌚」のチバです 今回は、「未来に぀ながるクリ゚むティビティの創出」をビゞョンに掲げ瀟内アワヌド運営などを行う瀟内組織、「クリ゚むティブアワヌド委員䌚」の掻動玹介です💪❀‍🔥 クリ゚むティブアワヌド委員䌚ずは 私たちのミッション プロゞェクトアワヌド2022の取り組み グランプリを遞び出す必芁性は果たしおあるのか 目暙の成果指暙を考える Zoomの参加者゚クスポヌト機胜で蚈れるもの Googleフォヌムを投祚フォヌムにしお蚈れるもの プロゞェクトアワヌド2022の結果 デザむナヌの䌊藀さんの取材蚘事 クリ゚むティブアワヌド委員䌚ずは 郚眲関係なく、有志メンバヌで構成されおいる䌚瀟公認のワヌキンググルヌプです。 瀟内の衚地制床「プロゞェクトアワヌド」の運営を䞻な掻動にしおいたす。 「プロゞェクトアワヌド」ずは、 「日々の業務成果」を瀟内にお披露目しお倚くのプロゞェクトにスポットラむトを圓おる取り組みです。 圚籍メンバヌは通垞業務が他にあり、私自身も、普段は LIFULL HOME'SのLINE・メヌルのリテンションマヌケティング をしおいたす。 私たちのミッション 䞻管に人事本郚が぀いおおり、私たちは以䞋のミッションを䞎えられおいたす。 LIFULLの創り出すアりトプットの品質ベンチマヌクを高めるこずを狙いずしお、仲間の取り組みに称賛する機䌚を生み出す 䞊蚘を掻動目暙に萜ずし蟌むず、䞋蚘の3぀になりたす。 アりトカムを生み出すたでのプロセスが瀟内に知芋共有ずしお拡散される機䌚を぀くる 他チヌムの取り組みを知る"面"を増やしお、郚眲を越えた協働のきっかけをもたらす 瀟員が瀟員に「期埅」や「感謝」を「称賛」ずしお䌝えられる堎を甚意する 䞊蚘の目暙をどのように斜策に眮き換えお取り組たれたのか、 プロゞェクトアワヌド2022 開催の様子ずずもにご玹介したす💁 プロゞェクトアワヌド2022の取り組み プロゞェクトアワヌドは瀟内で毎幎開催されるむベントです。 「日々の業務成果」を瀟内にお披露目し、最も称えられたプロゞェクトはグランプリを受賞しおオリゞナルグッズを手にするこずができたす。 グランプリ遞抜は、瀟員党員が投祚で遞ぶこずになっおおり、これは、2006幎にボトムアップではじたった頃から倉わらない方針です。 2006幎 ものづくりの玠晎らしい仕事を評䟡する、トップセヌルスず察をなす存圚ずしお誕生しおから、2022幎 「プロゞェクトアワヌド」䞀次審査に審査員制床を導入、瀟員投祚は二次審査実斜ぞ倉曎した グランプリを遞び出す必芁性は果たしおあるのか そもそも、どのプロゞェクトも玠晎らしい取り組みであるのにグランプリを遞び出さなくおもよいのではないか、ずリプレヌスをかけようずした時期もありたした。 しかし、プロゞェクトアワヌドを開催するず、瀟内䞭の優れたプロゞェクトがわっさわっさ集たっおきたす。 「知らなかった、こんな利点があったのか」 「この取り組みは知っおたけど、うちのプロダクトには関係ないず思っおた、そんなこずないじゃん」 「これの話はもっず聞きたい・・・担圓者ず぀ながるぞっ」 普段から瀟内各所のプロゞェクトや斜策情報はあらゆるチャネルで共有されおいたす。 LIFULLでは、毎月の党瀟総䌚、本郚長䞻催のりェビナヌ、Slackや掲瀺板に投皿される瀟内報などで知るこずはできたす。 しかし、スポットラむトが圓たるこずで泚目が集たりやすくなりたした。 ピックアップするだけで、知の拠点ができあがる のです。 ならば、ピックアップしなければ。私たちがやるこずだ、そう思えたので掻動を継続するこずになりたした。 目暙の成果指暙を考える 䞊述した3぀の目暙、それぞれには以䞋のような成功指暙を䞎えたした。 これらの成果指暙は、それぞれ䞋蚘の方法で蚈枬したした。 Zoomの参加者゚クスポヌト機胜で蚈れるもの 最終プレれン審査䌚参加人数 継続芖聎時間 参加者所属郚眲比率 Googleフォヌムを投祚フォヌムにしお蚈れるもの 投祚総数 ナニヌク投祚数 投祚コメント数 ここたでいったら成功、が明確になったこずで、これらの指暙を抌し䞊げるこずを意識した掻動ができるようにしたした。 過去トラッキングできおいる投祚総数、ナニヌク投祚数、投祚コメント数の3぀を過去2幎ず比范するず、やはり䟋幎よりも成長を実感できたす。 芋える指暙が出来䞊がるこずで、グンッず自埋的に動けるようにもなったので、チヌムメンバヌが自らタスクを取りにいき進めやすくなりたした。 プロゞェクトアワヌド2022の結果 プロゞェクトアワヌド2022では、瀟内デザむナヌによっお補䜜されたオリゞナルグッズが景品ずなりたした。 デザむナヌの䌊藀さんの取材蚘事 note.com グッズ化アむディアも、䞊行開催したアむディアアワヌドで䞀般瀟員から公募したものです👏 電源タップもヘッドホンもUSBハブも入るゆずりの16むンチサむズ りィンクしおるホヌムズくんでディスプレむも垞にきれいにできちゃうぞ フリヌアドレスになったオフィス移動もこれで安心安党👷 実際に受取った瀟員も喜んでくれお、運営チヌム䞀同安心しおいたす。 note.com これからも仲間の取り組みに称賛する機䌚を生み出せるよう努めおたいりたす💪 次の掻躍にご期埅ください
こんにちは 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