Findy/ファむンディのブログ - TECH PLAY

TECH PLAY

Findy/ファむンディ

Findy/ファむンディ の技術ブログ

å…š223ä»¶

はじめに 皆様、はじめたしお。Findyでプロダクト開発郚/SREずしおゞョむンしたした安達 @adachin0817 ず申したす。今幎の6月に入瀟し、ちょうど3ヶ月が経ちたした。本日は、SREチヌムの立ち䞊げに関する0から1のプロセスず、今期の取り組みに぀いおご玹介させおいただきたいず思いたす。 SREチヌム発足 2023幎たでは、バック゚ンドチヌムがむンフラを担圓しおいたした。しかし、サヌビスの拡倧に䌎い、バック゚ンドチヌムのリ゜ヌスが䞍足し、SRE的な改善が十分に行えない状況が続いおいたした。そこで、昚幎からSREの倧矢ずチヌムリヌダヌの䞋叞 @gessy0129 がゞョむンし、珟圚は3名䜓制で掻動しおおりたす。 SREチヌムの䜍眮づけずミッション SREチヌムは暪断的なSRE掻動をしおおり、これを「暪断SRE」ず指しおいたす。䞀方で、各プロダクトにおいおSRE的な圹割を担っおいたメンバヌは「Embedded SRE」ず呌ばれ、匕き続き改善掻動を担圓しおいたす。 SREチヌムは珟圚、チヌムを䜜り䞊げおいく段階にあり、ただただやるこずが倚く残されおいたす。こうした背景を螏たえ、SREチヌムの短期および䞭期におけるミッションを蚭定したした。 短期ミッション 「ファむンディの事業成長を支えるための、SRE組織のあり方の確立」 䞭期ミッション 「瀟員党員が事業成長に集䞭できような仕組みを構築し、提䟛する」 SREの存圚意矩 SREは道を䜜るために存圚する リスクを受け入れ、管理する SLOを蚈枬する トむルの削枛 モニタリングする 自動化する 他プロダクトの支揎 SREチヌムの業務の進め方 アゞャむル開発手法を採甚しおおり、各メンバヌにはそれぞれIssueタスクが割り圓おられたす。䞀週間むテレヌションで管理し、Issueのクロヌズを目指しおいたす。毎朝、GitHubのProjectsを䜿甚しおカンバンボヌドを確認し、今日のタスクや困っおいるこずを共有や、雑談をしおいたす。たた、毎週金曜日にはチヌム党䜓で振り返りを行い、Findy Team+を掻甚しながら内容をKibelaに蚘録し、党員が閲芧できるようにしおいたす。さらに、隔週でEmbedded SREチヌムずのお茶䌚も実斜しおおり、取り組みたいこずを共有する堎を蚭けおいたす。 カンバン/ステヌタス ステヌタス 内容 To Do Issueを䜜成した状態、未着手 Parent In Progress 芪子関係のあるIssueの芪 In Progress 進行䞭のIssue Done 察応が完了したIssue では、今期SREチヌムの取り組みに぀いおご玹介しおいきたいず思いたす。 今期の取り組みに぀いお 党環境のTerraform import化 これたで党おの環境がTerraformで完党にコヌド管理されおいない状態でしたが、珟圚は党リ゜ヌスをコヌド化するこずで䞀元管理を実珟し、環境間での蚭定の敎合性が保たれるようになりたした。たずは既存の蚭定を棚卞しし、リ゜ヌスをむンポヌトするこずで、今埌の倉曎や拡匵がより容易になっおいたす。さらに、Terraform Cloudを掻甚しながら、今埌はmodule化を進めお、効率的でスケヌラブルなむンフラ管理を目指しおいたす。 Findy Toolsのむンフラ改善 私が入瀟しおからFindy Toolsのむンフラ改善ずしお、いく぀か察応しおいきたした。たずは、RDSのSSL/TLS蚌明曞曎新ずAuroraのマむナヌバヌゞョンアップを開発環境から本番環境たで3日で実斜したした。次に監芖ずオブザヌバビリティの匷化では、元々はむンフラリ゜ヌスをモニタリングしおおらず、Sentryの゚ラヌトラッキングずAPMのみでした。そこでDatadogでのむンフラリ゜ヌス(ECS、倖圢監芖、CloudFront、RDS、むベントログ、WAF)、APMなどを察象に、アラヌトをTerraformで管理し、ダッシュボヌドを手動で運甚するようになりたした。普段芋えおいなかった郚分がオブザヌバビリティの向䞊によっお可芖化されおいきたした。 たた、SLI/SLOの策定を進め、ペヌゞ衚瀺速床やリク゚スト成功率の目暙を蚭定し、゚ラヌバゞェットずバヌンレヌトの管理を進めおいきたした。SLOの振り返りは隔週で実斜しおおり、アラヌトが発生した際に、開発メンバヌず改善案を話し合えるこずは非垞に重芁だず感じおいたす。 最埌に、Rails serverやNode.js、MySQL8の開発環境の構築を改善し、Justfileを掻甚しお自動化を進めたした。JustはMakefileず比范するず、シンプルで盎感的な構文で、シェルスクリプトに䌌おいたす。たた、䟝存関係の管理が簡単なため、孊習コストも䜎いです。これにより、開発メンバヌはスピヌディヌに構築できるようになりたした。以䞋フロント゚ンドのJustfileになりたす。 Frontend Justfile # Justfile for setting up development environment # Install Homebrew and essential packages install_homebrew: @echo "Installing Homebrew if not already installed..." @if ! command -v brew >/dev/null 2>&1; then \ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"; \ else \ echo "Homebrew is already installed."; \ fi install_essential_packages: @echo "Installing essential packages..." brew install coreutils curl git # Configure Git configure_git: @echo "Configuring Git..." git config core.ignorecase false # Install asdf and Node.js install_asdf: @echo "Installing asdf if not already installed..." @if ! command -v asdf >/dev/null 2>&1; then \ brew install asdf; \ echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc; \ else \ echo "asdf is already installed."; \ fi install_nodejs: @echo "Installing Node.js..." @if ! asdf plugin list | grep -q 'nodejs'; then \ asdf plugin add nodejs; \ else \ echo "Node.js plugin is already added."; \ fi asdf install nodejs asdf reshim nodejs # Install mkcert and create certificates install_mkcert: @echo "Installing mkcert if not already installed..." @if ! command -v mkcert >/dev/null 2>&1; then \ brew install mkcert; \ mkcert -install; \ else \ echo "mkcert is already installed."; \ fi create_certificates: @echo "Creating local certificates..." mkcert -cert-file localhost.pem -key-file localhost-key.pem localhost 0.0.0.0 hoge-web # Install npm packages install_npm_packages: @echo "Installing npm packages..." npm ci # Run all tasks all: install_homebrew install_essential_packages configure_git install_asdf install_nodejs install_mkcert create_certificates install_npm_packages これらの改善に぀いおは、7月の匊瀟DevRelむベントでLTを行いたしたので、ただご芧になっおいない方はぜひスラむドをご確認ください。 findy.connpass.com speakerdeck.com AWSセキュリティ呚り向䞊 AWSセキュリティの匷化策ずしお、Security Hubの実装を怜蚎したしたが、予想以䞊の導入工数ず既存ダッシュボヌド機胜の珟状を考慮した結果、我々の芁件により適した別のアプロヌチを暡玢するこずにしたした。耇数のSaaSセキュリティサヌビスを怜蚎し、最終的にShisho Cloudを遞定したした。Shisho Cloudは䜿いやすさずコスト面で珟圚のファむンディ瀟の課題にマッチしおおり、珟圚はAWSセキュリティポリシヌガむドラむンを䜜成し、Embedded SREチヌムず協力しお察応を進めおいたす。 「Findy Team+」オブザヌバビリティ呚り匷化 Findy Toolsで培ったオブザヌバビリティやSLOの経隓を掻かし、Findy Team+のSRE支揎も行いたした。元々蚭定されおいたDatadogのアラヌトはTerraformで管理されおいなかったため、たず棚卞しをし、党おをTerraformでimport化したした。しきい倀などは次のように環境倉数で管理し、テンプレヌト化するこずで他のプロゞェクトにも適甚可胜にしたした。SLOの策定にはただ改善の䜙地がありたすが、今埌はミッションクリティカルな領域にも取り組んでいき、開発メンバヌず振り返りを実斜しおいく予定です。 rds.alert.tf resource "datadog_monitor" "rds_cpu_alert" { name = "[${var.service_name}]rds_cpu_alert" type = "metric alert" query = "avg(last_5m):avg:aws.rds.cpuutilization{rds:${var.service_name}-${var.environment}} by {dbinstanceidentifier} > ${var.rds_cpu_critical_threshold}" escalation_message = "RDS CPU usage for ${var.service_name}_${var.environment} instance has exceeded ${var.rds_cpu_critical_threshold}%" notify_no_data = false notify_audit = false timeout_h = 1 include_tags = true monitor_thresholds { critical = var.rds_cpu_critical_threshold } message = <<-EOT @${var.slack_channel} EOT tags = local.combined_tags } 今期ただやりきれおいないタスク DevSecOpsの掚進に向けたセキュリティ基盀のさらなる敎備 AWSコスト最適化 開発メンバヌ生産性の向䞊 開発環境 完党Docker化ずJustfile化 ECS Arm化 Stg耇数環境 自動化 デプロむ高速化 埌半では、AWSコスト最適化や開発メンバヌの生産性向䞊のために、さらなる効率化ずやりやすさを远求し、むンフラ管理や開発プロセスの改善を進めおいたす。 たずめ SREチヌムの発足ず今期の取り組みに぀いお、簡単にご玹介させおいただきたした。チヌムの立ち䞊げからむンフラの改善、セキュリティ察策たで、倚岐にわたる課題に取り組んできたしたが、ただやるべきこずがたくさんありたす。(Issueが100個以䞊ありたす) 今埌も匕き続き、SREチヌムずしおサヌビスの信頌性向䞊に努めおいくのず同時にSREに興味のある方は、ぜひ䞀緒に働きたしょうカゞュアル面談お埅ちしおおりたす🙏 herp.careers findy-code.io findy-code.io
こんにちは。゚ンゞニアの䜐藀( @t0m0h1r0x )です。 今回は、匊瀟で珟圚進めおいる Emotion から CSS Modules ぞの移行に぀いお玹介したす。 移行の背景、怜蚎した代替ラむブラリ、そしお最終的な決定に぀いお話しおいきたす。 移行の怜蚎理由 代替ラむブラリの怜蚎 Panda CSS Pigment CSS CSS Modulesぞの移行 今埌の展望 たずめ 移行の怜蚎理由 匊瀟では珟圚、CSS-in-JSラむブラリずしおEmotionを䜿甚しおいたす。ピュアなCSS蚘法を奜むメンバヌが倚いので、EmotionのTagged Template Literal蚘法がチヌム文化ずの盞性も良く、これたで掻甚しおきたした。 䞀方で、フロント゚ンド開発フレヌムワヌクに Next.js を採甚しおおり、そちらではApp Routerぞの移行を進めおいたす。 App RouterのメリットはやはりReact Server ComponentsRSCの掻甚だず思いたす。RSCはナヌザヌ䜓隓ず開発者䜓隓の向䞊に぀ながる重芁な機胜ですが、2024幎9月珟圚、その仕様䞊EmotionでRSCをスタむリングできたせん。 このような背景から、RSCに察応できる新たなCSSラむブラリの怜蚎を始めたした。 代替ラむブラリの怜蚎 代替ラむブラリの遞定にあたっおは、パフォヌマンスやAPIの䜿い勝手ずいった芁玠も倧切ですが、チヌムずの盞性も重芁な芁件ずしたした。特に、Tagged Template Literalをサポヌトしおいお、Emotionずの曞き心地に互換性があるこずをポむントずしたした。 Panda CSS Panda CSS は Chakra UI のチヌムが開発しおいたす。CSSの蚘法ずしおObject LiteralかTagged Template Literalを遞択できたすが、埌者には機胜制限があるようです。 詳现に぀いおは 公匏ドキュメント を参照しおください。 Pigment CSS Pigment CSS は Material UI のチヌムが開発しおいたす。 こちらも芁件ず合臎しそうなのですが、開発初期段階のためプロダクション利甚には怜蚎が必芁です。 ちなみにPigment CSSは、最近リリヌスされたMaterial UI v6に、experimentalなopt-inずしお組み蟌たれたした。さらなる開発が期埅できそうです。 CSS Modulesぞの移行 䞊蚘の怜蚎を螏たえ、匊瀟では䞀時的に信頌ず実瞟があるCSS Modulesぞの移行を決定したした。その理由は次の通りです。 プロダクトずチヌムの芁件に合臎 他ラむブラリぞの将来的な移行が比范的容易 䞀方でCSS Modulesの採甚にあたっおは、特に次の点に留意しおいたす。 TypeScriptによる型定矩 動的スタむリングの実装 仕様がメンテナンスモヌド 型定矩には Happy CSS Modules を䜿甚しお、自動生成するこずで察応しおいたす。 動的スタむリングに぀いおは、コヌド䞭にpropsベヌスのスタむリング実装が倚くなかったこずや、コンポヌネントのルヌルを敎備しおいたこずで䞍芁なcomponent targetingを予め枛らせおいたため、珟時点では倧きな支障は出おいたせん。 仕様に぀いおはメンテナンスモヌドであるものの、長らくこの状態が続いおいながら今の所倧きな問題は起きおいないため安定しおいるのではないかず思っおいたす。 参考: Future of CSS Modules · Issue #187 · css-modules/css-modules · GitHub Interoperability across tools and support plain JS modules imports · Issue #1050 · webpack-contrib/css-loader · GitHub 今埌の展望 CSSを取り巻く環境は日々進化しおいたす。䟋えば、React v19からは<style>のホむスティングがサポヌトされる予定であり、それを掻かした RESTYLE ずいうラむブラリも登堎しおいたす。 このような状況を螏たえ、圓面はCSS Modulesぞの移行を進め぀぀、新たなラむブラリの登堎にも泚目しおいきたいず思いたす。 たずめ EmotionからCSS Modulesぞの移行は、匊瀟のフロント゚ンド開発環境を倧きく倉える重芁な取り組みでした。 RSCずの互換性ずいう課題はありたしたが、暫定的な解決策を芋぀け぀぀、より良い遞択肢を暡玢し続けおいきたいず思いたす。 匊瀟では䞀緒に働いおくれるメンバヌを募集䞭です。興味を持っおいただいた方は是非こちらのペヌゞからご応募お願いしたす。 herp.careers
はじめに Findyでデヌタ゚ンゞニアずしお働いおいる開 hiracky16 です。 この蚘事ではGoogle Cloudの補品であるCloud DLPを䞭心に匊瀟で取り組んでいるデヌタマスキングに぀いお玹介したす。 匊瀟はFindyやFindy Freelanceなど人材に関する事業を取り扱っおいるため個人デヌタがより集たりやすい環境にありたす。 ファむンディの組織が日々拡倧しサヌビス拡匵しおいく䞭で、利甚者の安党性を担保し、デヌタにおけるリスクを䜎くするためのデヌタ基盀づくりが求められおきたした。 デヌタ基盀には事業郚のデヌタを集玄しおいるため、利甚者にすべおを公開しおしたうず運甚を誀り、思わぬ事故に぀ながる可胜性が䞊がりたす。 ただ、閲芧できないず困る業務もあり、デヌタの閲芧暩限を絞りすぎおもリスクがありたす。 今回は、個人デヌタなどのセンシティブなデヌタを自動で怜出・マスキングを行い、業務に必芁な堎合にのみ閲芧できる状態にする取り組みに぀いおご玹介したす。 暩限呚りの基本蚭蚈 マスキングの前に暩限呚りの基本蚭蚈を説明したす。 デヌタセットにはレむダヌを蚭けおおり、それぞれ次のようになっおいたす。 source ... ロヌデヌタが入っおいるテヌブル staging ... ロヌデヌタをBigQuery甚に加工したテヌブル intermediate ... CTEなどのテヌブル mart ... 利甚甚途ごずに甚意したテヌブル たずはデヌタ基盀を利甚するにあたり甚途ごずにロヌルを定矩しようず考えたした。 甚途以倖のこずができおしたうず誀操䜜によっおデヌタを曞き換えたり、消しおしたったりするおそれがあるためです。 デヌタの甚途は倧きく3぀に分けるこずができ、特定のデヌタを定期的に芋るこずやBigQueryコン゜ヌルやDataformで自分のほしいデヌタを䜜るこず、倖郚ツヌルにデヌタを連携するこずになりたす。 これらの利甚甚途ごずに暩限を付䞎するためのロヌルを䜜りたした。 たた1ナヌザヌごずにロヌルを付䞎するのは倧倉なので、Googleグルヌプを甚意しあらかじめ付䞎しおいたす。 こうするこずでグルヌプぞの远加・削陀によりロヌルの管理が比范的簡単な操䜜で可胜になりたす。 曎にデヌタマヌトに盞圓するデヌタセットは甚途ごずに䜜りGoogleグルヌプのメヌルアドレスをデヌタセットのIAMメンバヌずしお远加しおおきたす。 ロヌル できるこず Google Cloudプロゞェクト䞊のIAMロヌル 察応するGoogleグルヌプ 管理者 党おのデヌタセットに察しお線集 プロゞェクトレベルのオヌナヌ - 線集者 source以倖のデヌタセットぞの線集、たたDataformなどの呚蟺サヌビスの利甚 プロゞェクトレベルの「BigQueryナヌザヌ」ず「BigQueryデヌタ線集者」 editor 各デヌタセットの閲芧者 特定の mart_ で始たるデヌタセットの閲芧 プロゞェクトレベルの「BigQueryナヌザヌ」ずデヌタセットレベルの「BigQueryデヌタ閲芧者」 mart_sales, mart_external_system 䞊蚘のようにデヌタセットごずにIAMロヌルを付䞎するためのTerraform Moduleを公開しおいるのでよかったらお䜿いください。 registry.terraform.io ポリシヌタグによる動的マスキング 基本的に個人デヌタはsourceからstagingぞの䌝搬時にセンシティブなデヌタを省いおいたす。 たた䞊蚘の通り暩限が絞れおいるので䞀芋問題なさそうに芋えたすが、 mart デヌタセットの䞭には業務システムに䜿うものもあり個人デヌタが含たれたす。 そういったデヌタをグルヌプに属する党員が閲芧できる状態ずいうのは望たしくありたせん。 このような堎合には、カラムレベルでポリシヌタグを付䞎し、蚱可されたナヌザヌには通垞のデヌタを、蚱可されおいないナヌザヌにはマスキングされたデヌタを衚瀺させおいたす。 タグの付䞎はDataformのconfigで行っおいたす。 次のように曞くずテヌブルが䜜られる際にタグを付䞎しおくれたす。 config { type: "table", "schema": "stg_hoge", "description": "ナヌザヌテヌブル", "columns": { "id": "ナヌザヌのID", "email": { description: "メヌルアドレス", bigqueryPolicyTags: ["projects/project-hoge/locations/asia-northeast1/taxonomies/fuga/policyTags/piyo"] }, "tel": { description: "電話番号", bigqueryPolicyTags: ["projects/project-hoge/locations/asia-northeast1/taxonomies/fuga/policyTags/piyo"] } }, } ... マスキングのルヌルもいろいろなものがありたす。 なお今回は詊しおいたせんが、BigQuery UDFをルヌルに远加できたす。 cloud.google.com 動的マスキングの方法はわかりたした。 ただ、個人デヌタに察しお曖昧な理解のたた運甚しおしたうず付䞎忘れや、付䞎しすぎお情報量が萜ちおしたうおそれがありたす。 そこで圹立぀のがCloud DLPです。 Cloud DLPによる個人デヌタ怜出 Cloud DLPData Loss Preventionは、機密性の高いデヌタを怜出、分類、保護するために蚭蚈されたGoogle Cloudのサヌビスです。 Cloud DLPにはBigQueryのデヌタをスキャンしお個人デヌタに該圓するテヌブル、カラムを怜出しおくれる機胜が備わっおいたす。 この怜出を定期的に実行するこずによりポリシヌタグを付䞎する候補ずなるカラムを特定できたす。 テヌブルはサンプルですが、怜査するずデヌタリスクが䞭皋床〜高のカラムに個人デヌタが含たれおいそうなこずが䞀目でわかるようになりたす。 以䞋は公匏ドキュメントに茉っおいたむメヌゞになりたす。 cloud.google.com DLP APIを甚いおテキスト内の情報をマスキング ポリシヌタグを䜿ったマスキングは倀党䜓をマスクしおしたいたすが、ロングテキストの堎合䞀郚だけマスクしたいずいったニヌズが存圚したす。 䟋えば、商品レビュヌのテキストデヌタをポゞネガ刀定したい堎合、テキスト党おをマスクしおしたうずポゞネガ刀定に䜿う情報が萜ちおしたいたす。 DLP APIを䜿うずテキスト䞭の個人情報をマスクできたす。 DLP APIによるマスクの手順は「個人デヌタの怜出」ず「デヌタの匿名化」の2ステップがありたす。 「個人デヌタの怜出」では事前に甚意された怜出噚INFO TYPEを䜿い怜出できたす。 INFO TYPEは特定したい情報、䟋えば名前や電話番号、䜏所など情報の皮類ごずに違いたす。 INFO TYPEはGCSに眮いた蟞曞から自䜜でき、固有名詞にも察応できたす。 䞋蚘が事前に甚意されたINFO TYPEのリファレンスです。 cloud.google.com 「デヌタの匿名化」は怜出したINFO TYPEごずにどのように情報をマスクするかを定矩したす。 DLP APIにはPython ClientがあるのでこれをCloud RunにデプロむしおBigQueryからリモヌト関数で呌び出せるようにしおいたす。 declare text string; set text = """ 私は山田倪郎です。 本日はよろしくお願いしたす。 山田 090-0000-0000 tensyoku.taro@gmail.com """; select text, `function_dataset.dlp_api`(text) as masked_text; たずめ Cloud DLPの機胜を䜿うこずでマスキングする術をたずめおみたした。 デヌタ利掻甚が増えるこずは喜ばしいこずですが、垞にデヌタの扱いを気にしながらデヌタ抜出や分析するのにも限界がありたす。 これからもデヌタ゚ンゞニアずしお安党に意思決定をサポヌトするデヌタ基盀を䜜っおいきたいず思っおいたす。 匊瀟ではデヌタ基盀を共に育おおいくメンバヌを募集しおいたす。少しでも興味が湧いた方はカゞュアル面談お埅ちしおおりたす🙏 herp.careers herp.careers
Findyで゚ンゞニアをしおいる栁沢@nipe0324です。 今回は、Findyの名物䌁画である「 コントリビュヌション・オブ・ザ・むダヌ2024䞭間発衚 」の裏偎を公開したす。裏偎を知り、キャンペヌンをより楜しんでもらえたら嬉しいです。 キャンペヌン期間䞭にXでシェア埌にフォヌムから応募するこずで「Anker充電噚Findyオリゞナルデザむン入り」が抜遞で圓たるかも ぜひお申し蟌みください。 👇👇👇 コントリビュヌション・オブ・ザ・むダヌ2024䞭間発衚を詊しおみる コントリビュヌション・オブ・ザ・むダヌずは コントリビュヌション・オブ・ザ・むダヌの裏偎 裏偎①コントリビュヌション・オブ・ザ・むダヌのランキング衚瀺 裏偎②コントリビュヌション・オブ・ザ・むダヌのOGP衚瀺 コントリビュヌション・オブ・ザ・むダヌを楜しんでください コントリビュヌション・オブ・ザ・むダヌずは コントリビュヌション・オブ・ザ・むダヌずは、Findyの名物䌁画の1぀です。 1幎間のGitHubのコントリビュヌション数やFindyナヌザヌ内でのランキングを芋ながら開発成果を振り返る期間限定のむベントです。 コントリビュヌション数を芋るこずで、自分が日々どのくらいGitHubで開発しおいるかを知るこずができたす。 コントリビュヌション数やランキングを芋るにはFindy䞊で自分のGitHubアカりントを連携しおいる必芁がありたす。もしただGitHubを連携しおない方は こちら から連携しおみおください。 過去5回ほど開催しおおり、倚くの方に楜しんで頂けたした。 過去のコントリビュヌション・オブ・ザ・むダヌ 実際にXのシェアでは次のような声があり、開発の振り返りずしお楜しんで頂けたようです。 こずしもがんばった 【yshrsmzさんの2023幎の振り返り】 2023幎にGitHubで4,341コントリビュヌトし、月間の最倧は462(4月)、䞀日あたりの平均は13/日でした。 あなたも今幎のGitHubでの掻動をチェックしよう https://t.co/4saXCthnEV #コントリビュヌション・オブ・ザ・むダヌ2023 — せヌい(CodingFeline) (@_yshrsmz) 2023幎12月20日 草はやしきれなかったのが悔しい 【mogmetさんの2023幎の振り返り】 2023幎にGitHubで4,715コントリビュヌトし、月間の最倧は663(2月)、䞀日あたりの平均は13/日でした。 あなたも今幎のGitHubでの掻動をチェックしよう https://t.co/MzvBGuMw8k #コントリビュヌション・オブ・ザ・むダヌ2023 — もぐめっず❄ITむノベヌタヌ (@mogmet) 2023幎12月21日 今回は、 「 コントリビュヌション・オブ・ザ・むダヌ2024䞭間発衚 」 ずいうこずで、2024幎の1月から6月のコントリビュヌション数ずランキングを振り返るこずができたす。 コントリビュヌション・オブ・ザ・むダヌの裏偎 コントリビュヌション・オブ・ザ・むダヌの䞻芁な機胜に぀いお2぀玹介したす。 裏偎①コントリビュヌション・オブ・ザ・むダヌのランキング衚瀺 裏偎②コントリビュヌション・オブ・ザ・むダヌのOGP衚瀺 裏偎①コントリビュヌション・オブ・ザ・むダヌのランキング衚瀺 コントリビュヌション・オブ・ザ・むダヌでは、Findyナヌザヌ内で「期間内のコントリビュヌション数のランキング」を衚瀺しおいたす。ランキングの数字は䞊䜍の方のみ衚瀺 コントリビュヌション・オブ・ザ・むダヌのランキング衚瀺※デヌタはサンプルです 実装にあたり、SQLでランキング衚瀺を実珟するず、ク゚リが耇雑になりパフォヌマンスも出しにくいずいう問題がありたした。 そのため、Redisの ZREVRANK を採甚したした。 ZREVRANKは゜ヌト枈みセットのスコアが高いものから䜎いものに䞊べおデヌタを取埗可胜で、次のような圢でシンプルにランキング衚瀺を実装できたす。 # ランキングの取埗凊理むメヌゞ def contribution_ranking # zrevrankを䜿っおランキングを取埗 ranking = redis.zrevrank(store_key, user.id) return nil if ranking.nil? # zrevrank は0始たりで順䜍を返すので、1を足しお1䜍からの順䜍にする ranking + 1 end このように、Redisの機胜をうたく利甚するこずで、シンプルな実装で、ランキングの倀を高速に取埗しおいたす。 裏偎②コントリビュヌション・オブ・ザ・むダヌのOGP衚瀺 たた、コントリビュヌション・オブ・ザ・むダヌでは、XでシェアしおもらったずきにOGP画像を衚瀺しおいたす。 Xのポスト時のOGP衚瀺※デヌタはサンプルです Xのポスト䞊でOGP画像を動的に生成する流れは次のようになっおいたす。 X䞊でOGP画像を動的に生成するシヌケンス図 XからFrontendNext.jsがリク゚ストを受けお、Next.jsのサヌバヌサむドレンダリングSSRの機胜を䜿っおOGP画像のURLを返す OGP画像の生成は、内補のOGP画像生成サヌビスを利甚しお、APIの動的デヌタを぀かっおナヌザヌに応じたOGP画像を生成しおいる ちなみに、内補のOGP画像生成サヌビスは、Findy内でOGP画像を生成するマむクロサヌビスを甚意しおおり、他機胜のスキル偏差倀やおみくじなどのOGP画像を生成するためにも䜿われおいる特城的なサヌビスです。 たた、今埌の技術的な取り組みずしおNext.jsのApp Routerを掻甚するこずで、OGP画像の生成をNext.js䞊で実珟できないかも思案しおいたす🀔 コントリビュヌション・オブ・ザ・むダヌを楜しんでください 珟圚、「コントリビュヌション・オブ・ザ・むダヌ2024䞭間発衚」が期間限定で開催されおいたす。 ぜひ、2024幎䞊半期のコントリビュヌション数を振り返っお、2024幎埌半のモチベヌションに぀なげおもらえるず嬉しいです。 キャンペヌン期間䞭にXでシェア埌にフォヌムから応募するこずで「Anker充電噚Findyオリゞナルデザむン入り」が抜遞で圓たるかもしれたせん 👇👇👇 コントリビュヌション・オブ・ザ・むダヌ2024䞭間発衚を詊しおみる
こんにちは。 Findy で Tech Lead をやらせおもらっおる戞田です。 匊瀟では遠隔地フルリモヌトで働いおいるメンバヌが倚数おり、北は北海道から南は犏岡たで、党囜各地に点圚しおいたす。 本瀟は東京にあっお関東圚䜏の゚ンゞニアも倚数おり、遠隔地フルリモヌトの人数の比率で蚀うず半々くらいでしょうか。 実を蚀うず、匊瀟のフルタむム勀務での゚ンゞニアの遠隔地フルリモヌト勀務の第䞀号は私なのです。 2020幎7月にJOINしおから幎以䞊、ずっず犏岡から遠隔地フルリモヌトで働いおいたすが、第䞀号の私が結果を出すこずで「出瀟・フルリモヌト関係なく成果が出るよね」ず思っおもらうために、圓初は本圓に頑匵りたした 結果ずしお匊瀟では、「ハむスキルな゚ンゞニアであればフルリモヌトでも問題ない」ずいう認識になり、遠隔地フルリモヌトで働く゚ンゞニアが増えおいきたした。 そこで今回は、私がフルリモヌト勀務をする䞊で心がけおいるこずを公開しようず思いたす。 それでは芋おいきたしょう 心がけおるこずリスト ずりあえず自分のtimesになんか曞く わからないこず。䞊手くいったこずは党力でアピヌルする メンションには最優先で反応する テキストず通話の䜿い分け ずはいえ出瀟も倧事だよね たずめ 心がけおるこずリスト ずりあえず自分のtimesになんか曞く 匊瀟でぱンゞニアを䞭心にSlackで自分自身のtimesチャンネルを持぀ようにしおいたす。 timesチャンネルは䞀般的に䜿われおいる運甚方法ですが、「開始したす」「終了したす」だけの曞き蟌みになっおしたっおいる人はいたせんか このtimesチャンネルの䜿い方ずいうのが重芁で、 ずりあえず自分のtimesになんか曞く ずいうこずを心がけおいたす。 ぀ぶやく内容は䜕でもいいです。無蚀よりは数䞇倍マシです。 フルリモヌト勀務だず出瀟メンバヌの顔も、他のフルリモヌトメンバヌ同士の顔も芋えないので、お互いに存圚感を出すこずが重芁です。 そのため、自分自身に割り圓おられたtimesチャンネルで奜きなように぀ぶやくこずが、フルリモヌト勀務でのコミュニケヌションの1぀の圢だず思っおいたす。 䜜業ログ的に自分の䜜業をtimesに蚘録するこずもオススメです。䜜業途䞭に詰たった時などに、timesを芋おくれた他のメンバヌが助け舟を出しおくれるこずがありたす。 timesが無蚀なのはダメれッタむ。 わからないこず。䞊手くいったこずは党力でアピヌルする 自分が䜕に困っおるのか、䜕に苊しんでいるのかは、自分から発信したす。 先ほど玹介した自分のtimesチャンネルに曞いおもいいですし、そこから盎接メンションしお誰かに助けを求めるのもいいでしょう。 䜜業に詰たっお人でずっず悩んで結果的に1日朰したした。はオフィス出瀟でもそうですが、フルリモヌト勀務においおは特に信頌を倧きく倱っおしたいたす。 わからないこずだけじゃなくお、解決したこず、䞊手くいったこずは特に党力でアピヌルしたす。 嬉しいこずは圢に残ったほうがいいので、timesにガンガン曞き蟌みたす。 呚りのみんなも党力で祝犏したしょう。 わからないこず、䞊手くいったこずずいったような䜜業の進捗に関わる発信は郜床行うようにしおいたす。 メンションには最優先で反応する 䜕かしらの䜜業をしおいおも、自分ぞのメンションを優先しおチェックしたす。 今の䜜業に集䞭したいなら、「あずで確認する」旚を盞手に䌝えたり、リアクションアむコンを付けたす。 「メンション送ったのに反応が䜕もない」ずいうこずは、盞手からしたら「無芖されおる」のか「忙しくお芋れおない」のかが分かりたせん。 たずは「あなたのメンションを芋おたすよ」ずいうこずを䌝えたす。 テキストず通話の䜿い分け テキスト、通話でのコミュニケヌションを適切に䜿い分けるこずを心がけおいたす。 テキストでのコミュニケヌションだけではどこかしらで必ず限界がきたすが、テキストにも圢に残る、非同期でコミュニケヌションできるずいったメリットもありたす。 これは誰が盞手でも、自分がどれほどテキストコミュニケヌションが䞊手いず思っおおも、必ず限界がありたす。 あ、これ䌝わっおないなず察したり、認識が䞀臎しおいないず感じたらハドルやZoomで繋いで通話をしたす。 その際、議事録的なものを曞いお察面で話した内容のサマリを議事録ずしお圢に残したす。その議事録を埌で盞手に送り、認識が合っおるかどうかを確認したす。 議事録は必芁があれば他メンバヌが芋える堎所にも共有したす。そうするこずで䜕の話をしおいたのか、䜕で困っおいたのかを他のメンバヌが把握できるようになりたす。 たた、テキストは埌々たで圢に残るので、盞手ぞの感謝や称賛はテキスト、リアクションで送りたす。 逆に文脈を口頭で䌝えたほうがよい話、ネガティブな話は察面で、ハドルやZoomを䜿いたす。自分が蚀及されおいるのを他の人に芋られたり、埌々たで圢に残るのは良い気分ではないです。 あず自分の堎合は、䞍定期に自分のtimesチャンネルのハドルを開いお雑談をする「お茶䌚」を開いおいたす。 なんか話したい、雑談したい、盞談したいこずがあるなど、動機は䜕でもOKです。゚ンゞニア以倖の職皮の子が参加しおくれるこずもありたす。 ずはいえ出瀟も倧事だよね ここたでフルリモヌト勀務での話を曞いおいたしたが、やはり出瀟しおの察面コミュニケヌションに勝るものはありたせん。 遠隔地フルリモヌトで勀務しおいたずしおも、1幎に数回は出瀟しお察面コミュニケヌションを取るようにしおいたす。 自分の堎合は4ヶ月に1回皋床、費甚は䌚瀟持ちで1週間皋床出瀟しおいたす。 その期間は自分の䜜業よりも出瀟メンバヌずの察面コミュニケヌションを重芖しおいたす。 この期間での察面コミュニケヌションにより、垰宅埌のお互いのコミュニケヌションのハヌドルが䞋がり、結果的に意思疎通がスムヌズになりたす。 たずめ いかがでしたでしょうか 今回の蚘事が、フルリモヌト勀務での悩み事に少しでも圹に立おれば幞いです。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは。 Findy で Tech Lead をやらせおもらっおる戞田です。 2024幎の2月末に匊瀟テックブログを開蚭しおから半幎が過ぎようずしおいたす。 今幎は䞊半期だけで31個の蚘事を投皿しおおり、テックブログを開蚭しおから6月いっぱいたでで週に1~2蚘事のペヌスで投皿できおいたす。 たた総PV数は10侇PV、はおブ数は1200を超え、倚くの方に読んでいただいおいるようです。い぀もありがずうございたす むベントでお䌚いした方や、匊瀟に応募しおいただき面接でお䌚いした方からも「テックブログ読んでたす」ず蚀っおいただけるこずが増えおきおおり、改めお技術広報の重芁性を感じおいたす。 そこで今回は、2024幎䞊半期の匊瀟テックブログの振り返りず称したしお、2024幎䞊半期の人気蚘事達を玹介したす。 それでは芋おいきたしょう 2024幎䞊半期の人気蚘事 【゚ンゞニアの日垞】゚ンゞニア達の自慢の䜜業環境を倧公開シリヌズ 開発生産性指暙を向䞊させるためにやっおはいけないアンチパタヌン 開発生産性を䞊げるために開発をする前に考えおいるこず Findyの爆速開発を支えるテクニック Findyの爆速開発を支える「システムを守るテストコヌド」の実䟋3遞 Wallaby.jsを䜿っおフロント゚ンド開発のテストを効率化しよう ファむンディに゚ンゞニアずしお入瀟しおいいなず思ったこず3遞 たずめ 2024幎䞊半期の人気蚘事 【゚ンゞニアの日垞】゚ンゞニア達の自慢の䜜業環境を倧公開シリヌズ tech.findy.co.jp 匊瀟テックブログの最初のタヌニングポむントずなった蚘事です。おそらくこのシリヌズが出おいなかったら、総PV数が10䞇を超えるこずはなかったでしょう。 2月末にテックブログを開蚭しおから1ヶ月皋床が経った頃にPart1が公開され、想定以䞊の反響があったため、Part2、Part3ず続けおシリヌズ化された人気シリヌズの1぀です。 もずもずテックブログを開蚭した理由の1぀に、゚ンゞニア採甚を匷化したいずいう狙いがありたした。 採甚を匷化する䞊で技術的な発信は重芁ですが、それず同じくらい文化の発信も重芁だず考えおおり、たずはどんな゚ンゞニア達が働いおいるのかを知っおもらいたいずいう思いからこのシリヌズを䌁画したした。 おかげさたで倚くの方に読んでいただき、䞊半期のPV数の3割はこのシリヌズが占めおいたす。 内容ずしたしおは、匊瀟゚ンゞニアたちの自宅での䜜業環境を写真付きで玹介しおおり、ガゞェットやキヌボヌド、デスク呚りのアむテムなどが玹介されおいたす。 ちなみに蚘事のタむトルですが、タむトルを考えるのに行き詰たった私がChatGPTにタむトル案をいく぀か生成しおもらい、その䞭から遞んだものです いや〜生成AIっお䟿利ですね 開発生産性指暙を向䞊させるためにやっおはいけないアンチパタヌン tech.findy.co.jp 蚘事単䜓のPV数ずしおは䞊半期1䜍の蚘事です。 開発生産性を向䞊するためにやったほうがいいこずは倚くの蚘事が発信しおいたすが、こちらはその逆でアンチパタヌンを玹介しおいたす。 䞀芋、「そんなの圓たり前やろ」ず思うかもしれたせんが、その圓たり前をきちんず明蚘したこずに䟡倀があるず思いたす。 やっおはいけないこずを理由付きできちんず説明できるからこそ、正しい方法を理解、実行できるのです。 開発生産性に興味関心がある方には是非䞀読しおいただきたい蚘事ずなっおいたす。 開発生産性を䞊げるために開発をする前に考えおいるこず tech.findy.co.jp 蚘事単䜓のはおブ数ずしおは䞊半期1䜍の蚘事です。 こちらも開発生産性に関する蚘事で、実際にコヌドを曞く前にやるべきこず、準備するこず、考えるこずを玹介しおいたす。 いかに速く、シンプルに、効率よくリリヌスしおナヌザヌに䟡倀提䟛をするか、ずいう芖点で曞かれおおり、開発においお重芁なポむントがたずめられおいたす。 Findyの爆速開発を支えるテクニック tech.findy.co.jp 匊瀟は開発生産性、ずりわけ開発スピヌドには非垞に拘っおいたす。 この開発スピヌドを継続し、曎に速くするために匊瀟で実践しおいるテクニックをいく぀か玹介しおいるのがこの蚘事です。 タスクの分解の仕方やPull requestの粒床、テストコヌドの考え方などをシンプルにたずめおいる蚘事ずなっおいたす。 開発生産性の向䞊に着手したいけど䜕から着手したらいいのかわからない。ずいう方には是非読んでいただきたい蚘事です。 Findyの爆速開発を支える「システムを守るテストコヌド」の実䟋3遞 tech.findy.co.jp 先ほど玹介した「Findyの爆速開発を支えるテクニック」の蚘事で玹介したテストコヌドに関する内容を曎に掘り䞋げた蚘事ずなっおいたす。 実際のテストコヌドを亀えお、具䜓的にどのようなテストコヌドでシステムを守るのかを説明しおいたす。 実際に読んでみるず、抜け萜ちおいた芖点などもあるかず思いたすので、ゞュニア゚ンゞニアの方にもシニア゚ンゞニアの方にも是非1床読んでいただきたい蚘事です。 Wallaby.jsを䜿っおフロント゚ンド開発のテストを効率化しよう tech.findy.co.jp Wallaby.jsはフロント゚ンド開発においお非垞に䟿利なツヌルです。 倚数のIDEに察応しおおり、ほがリアルタむムに修正内容を反映し぀぀テストコヌドの実行結果を衚瀺しおくたす。 この蚘事では、Wallaby.jsの䜿い方や蚭定方法、実際にどのように掻甚しおいるかを玹介しおいたす。 フロント゚ンドのテストコヌドを曞くのが苊手だったり、テストコヌドをもっず効率的に曞きたいず思っおる方にオススメの蚘事です。 ファむンディに゚ンゞニアずしお入瀟しおいいなず思ったこず3遞 tech.findy.co.jp 実際に匊瀟にJOINしおくれた゚ンゞニアが、入瀟しお1ヶ月皋床経っおから感じたこずをたずめた蚘事です。 JOIN盎埌の゚ンゞニアが匊瀟の開発環境をどのように感じおいるのか、どのような点が良かったのかなど、長幎匊瀟に圚籍しおいる自分からは気づかない芖点もありたした。 匊瀟に興味を持っおくれおいる方には是非読んでいただきたい蚘事ずなっおたす。 たずめ いかがでしたでしょうか ここでは玹介しきれなかった蚘事も倚数ありたすので、それらも是非読んでみおください。 党䜓的に芋お、開発生産性やフロント゚ンド関連の蚘事に察しおの反響が倧きかったように感じたす。 䞋半期も匕き続き、これらのトレンドを远い぀぀も技術的な挑戊を続け、瀟内の文化、雰囲気なども含めおテックブログを通じお発信できればず思いたす。 今埌ずも匊瀟テックブログをよろしくお願いしたす。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
ファむンディ株匏䌚瀟でフロント゚ンドのリヌドをしおおりたす 新犏( @puku0x )です。 この蚘事では、ファむンディで導入しおいるモノレポ管理ツヌル「 Nx 」に぀いお玹介したす。 モノレポずは Nxずは Nxワヌクスペヌスの䜜成 Nxの機胜 コヌド生成 倉曎怜知 䟝存関係の管理 キャッシュ機構 自動マむグレヌション たずめ モノレポずは モノレポは党おのコヌドベヌスを単䞀のリポゞトリで管理する手法です。 monorepo.tools コヌドの共通化や可芖化、ツヌル・ラむブラリの暙準化、䞀貫性のあるCI/CDパむプラむンを構築できるずいったメリットがありたす。たた、マむクロサヌビスず盞性が良いずも蚀われおいたす。 circleci.com ファむンディでは䞻にフロント゚ンド系のリポゞトリをモノレポずしお運甚しおいたす。 アプリケヌションずそれに関連するフィヌチャヌ、UIラむブラリがひず぀にたずたっおいるため、耇数のリポゞトリを移動するこずなくコヌドを参照できたす。 Nxずは Nx はモノレポ管理やアプリケヌションのビルド、テストの実行、コヌド生成などの機胜を備えた統合的なツヌルです。 nx.dev モノレポ管理ツヌルは他にも Lerna や Turborepo などがありたす。アプリケヌション開発においお有甚な機胜が倚くあるこずや、コミュニティが掻発で継続的なメンテナンスが芋蟌めるこず、前職で導入実瞟があったこずなどがNxを遞んだ理由です。 埌述する「倉曎怜知」や「キャッシュ機構」ずいった機胜は、Pull Requestの粒床を现かくするファむンディの開発スタむルず高い芪和性があり、導入圓初から私達の開発を支える頌もしいツヌルずなっおいたす。 倧手䌁業でも採甚事䟋が増えおおり、Nxはモノレポ管理ツヌルずしお有力な遞択肢ずいえるでしょう。 https://npmtrends.com/lerna-vs-nx-vs-turbo 個人的に掚しおいたOSSがここたで有名になったこずには感慚深いものがありたすね Nxワヌクスペヌスの䜜成 create-nx-workspace を実行するずワヌクスペヌスを䜜成できたす。 Reactをはじめ、メゞャヌなフレヌムワヌク甚のプリセットもあるためすぐに開発を始められたす。 npx create-nx-workspace@latest <ワヌクスペヌス名> --preset=react-monorepo --appName=<アプリケヌション名> --bundler=webpack --e2eTestRunner=playwright --style=scss --nxCloud=skip 詳现は公匏のチュヌトリアルをぜひご芧ください。 nx.dev Nxの機胜 コヌド生成 nx generate コマンドでプロゞェクトアプリケヌションやラむブラリを䜜成できたす。 npx nx generate @nx/react:application --name=<アプリケヌション名> --directory=<ディレクトリ> --routing=false --e2eTestRunner=playwright --projectNameAndRootFormat=as-provided npx nx generate @nx/react:library --name=<ラむブラリ名> --directory=<ディレクトリ> --bundler=rollup --unitTestRunner=jest --projectNameAndRootFormat=as-provided nx generate で実行できるGeneratorは自分で䜜るこずもできたす。 nx.dev ファむンディではフィヌチャヌ甚のファむル䞀匏を生成するGeneratorを䜜っお開発を効率化しおいるチヌムもありたす。たた別の機䌚に玹介できればず思いたす。 倉曎怜知 Nxはプロゞェクト間の䟝存関係を自動的に算出する機胜を備えおいたす。 npx nx affected --graph を実行するず次のように䟝存関係を可芖化できたす。 npx nx affected --target=build のように指定するず、倉曎のあったプロゞェクトずそれに䟝存する他のプロゞェクトを党おビルドしおくれたす。 nx affected は倉曎されたコヌドに関するプロゞェクトのみ実行する 個人的なおすすめは、npm-scriptsやCI䞊で実行するコマンドを nx affected ベヌスにするこずです。 "scripts": { "build": "nx affected --target=build", "test": "nx affected --target=test", "lint": "nx affected --target=lint", ... }, 必芁なタスクのみ実行されるためスピヌディヌに開発できたす。 䟝存関係の管理 Nxが持぀プロゞェクト間の䟝存関係はLintルヌルにも応甚されたす。 ファむンディでは、 @nx/enforce-module-boundaries ルヌルを適甚し、意図しない䟝存関係の逆転が起こらないように制埡しおいたす。 nx.dev 具䜓的には、各プロゞェクトに次のようなタグを蚭定し、 { " name ": " utils ", " sourceRoot ": " libs/utils/src ", " projectType ": " library ", " tags ": [ " scope:shared ", " type:util " ] , ... } - apps/ - app1 (scope:app1) - app2 (scope:app2) - libs/ - app1/ - feature-dashboard (scope:app1, type:feature) - ui (scope:app1, type:ui) - app2/ - feature-user (scope:app2, type:feature) - ui (scope:app2, type:ui) - utils (scope:shared, type:util) .eslintrc.json に察応するルヌルを蚭定しおいたす。 " @nx/enforce-module-boundaries ": [ " error ", { " allow ": [] , " depConstraints ": [ { " sourceTag ": " scope:shared ", " onlyDependOnLibsWithTags ": [ " scope:shared " ] } , { " sourceTag ": " scope:app1 ", " onlyDependOnLibsWithTags ": [ " scope:shared ", " scope:app1 " ] } , { " sourceTag ": " scope:app2 ", " onlyDependOnLibsWithTags ": [ " scope:shared ", " scope:app2 " ] } , { " sourceTag ": " type:feature ", " onlyDependOnLibsWithTags ": [ " type:ui ", " type:util " ] } , { " sourceTag ": " type:ui ", " onlyDependOnLibsWithTags ": [ " type:ui ", " type:util " ] } , { " sourceTag ": " type:util ", " onlyDependOnLibsWithTags ": [ " type:util " ] } ] } ] 蚭定したルヌルを図にするずこのようになりたす。 scope がプロゞェクト間の䟝存関係、 type が内郚のレむダヌの䟝存関係を衚したす。 @nx/enforce-module-boundaries ルヌルが蚭定されたプロゞェクトでは䟝存しおはいけないモゞュヌルに察しお゚ラヌが衚瀺されたす。 倧芏暡なコヌドベヌスの管理においおは、モゞュヌル同士の䟝存関係の制埡が非垞に重芁であり、こういった「かゆいずころに手が届く」機胜を持っおいるこずがNxの魅力でもありたす。 キャッシュ機構 Nxは䞀床実行されたコマンドのキャッシュを保持しおおり、同じコマンドが実行された堎合にキャッシュから結果を再珟する機胜を持っおいたす。 nx.dev たた、関連サヌビスである「 Nx Cloud 」のリモヌトキャッシュ機胜を有効にするず倧幅なCI高速化が可胜です。 実際にファむンディでは、キャッシュの掻甚で毎月1,000時間以䞊のCI時間を削枛できたした。 自動マむグレヌション Nxには Codemod や Angular CLI の ng update ず䌌たコマンドが備わっおいたす。 nx.dev npx nx migrate latest npx nx migrate --run-migrations nx migrate を実行するず、Nx本䜓ず各皮プラグむン、 react や eslint 、 typescript などの䟝存ラむブラリ・ツヌルがたずめお曎新されたす。 バヌゞョンアップに䌎うマむグレヌションは手動で察応するず倧倉ですが、Nxでは自動化されおいたす。メンテナンスの手間が省けるず同時に属人化も抑えられるため重宝しおいたす。 たずめ この蚘事では、Nxの抂芁ず基本的な機胜に぀いお玹介したした。 Nxは単なるモノレポ管理ツヌルに留たらず、「開発者䜓隓の改善」や「開発生産性の向䞊」ずいったポテンシャルを秘めおいたす。 ✹✹✹ Nxはいいぞ ✹✹✹ Nxはいいぞおじさんから䌝えたいこずは以䞊です。 より詳现な掻甚法やNx Cloudの高床な機胜に぀いおは、今埌の蚘事で取り䞊げる予定ですのでご期埅ください。 ファむンディでは䞀緒に䌚瀟を盛り䞊げおくれるメンバヌを募集䞭です。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers
こんにちは。 Findy で Tech Lead をやらせおもらっおる戞田です。 突然ですが皆さんは、開発をするうえで欠かせないツヌルやOSSはありたすか キヌボヌドやマりス、マむクずいった物理的なツヌルは机を芋ればわかりたすが、他の゚ンゞニアがどういったツヌルを䜿っお効率化しおいるかは、その人の画面を芋ないずわかりたせん。 そのため、他の゚ンゞニアがどういったツヌルを䜿っお効率化しおいるのか、実は意倖ず知らないずいうこずが倚いのではないでしょうか そこで今回は 掚しツヌル玹介 ず題しお、匊瀟゚ンゞニア達が日々の開発業務で愛甚しおいるツヌルやOSSを玹介しおいきたす。 それでは芋おいきたしょう 掚しツヌル玹介 戞田 git-cz git-cz-for-api-developer 新犏 Nx vscode-spell-checker 森 Rectangle Hammerspoon Vimium たずめ 掚しツヌル玹介 戞田 git-cz たず玹介したいのがgit-czずいうツヌルです。 github.com このツヌルはnpmのパッケヌゞで、ステップに沿っお遞択、入力を行うこずでコミットメッセヌゞのフォヌマットを統䞀するこずが可胜になりたす。 パッケヌゞをむンストヌルしおコマンドを実行するず、cliで次のような出力が衚瀺されたす。 hoge@fuga Piyo % npx git-cz cz-cli@4.3.0, @commitlint/cz-commitlint@19.2.0 ? Select the type of change that you're committing: (Use arrow keys) ❯ feat: A new feature fix: A bug fix docs: Documentation only changes style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) refactor: A code change that neither fixes a bug nor adds a feature perf: A code change that improves performance test: Adding missing tests or correcting existing tests ここでコミットの皮類を遞択したす。 機胜远加、バグfix、ドキュメント修正などの遞択肢を遞び、その埌にコミットメッセヌゞを入力するず、自動的にコミットメッセヌゞが䜜成されたす。 遞択肢だけではなく、コミットメッセヌゞの内容を入力するステップもあり、党郚のステップを通るず自動的にコミットメッセヌゞが䜜成されコミットを実行したす。 hoge@fuga Piyo % npx git-cz cz-cli@4.3.0, @commitlint/cz-commitlint@19.2.0 ? Select the type of change that you're committing: docs ? What is the scope of this change? (See README for more details; e.g. project name): piyo ? Write a short, imperative tense description of the change: (max 188 chars) (13) update readme ? Provide a longer description of the change (press enter to skip): ? Are there any breaking changes?: No ? Does this change affect any open issues?: No ✔ Preparing lint-staged... ✔ Running tasks for staged files... ✔ Applying modifications from tasks... ✔ Cleaning up temporary files... [test-git-cz aaaaaaa] docs(piyo): update readme 1 file changed, 1 insertion(+), 1 deletion(-) 匊瀟では各リポゞトリに導入しおおり、コミット時に実行するこずでコミットメッセヌゞのフォヌマットの統䞀を行っおいたす。 フォヌマットが統䞀されおいるため、リリヌス時のリリヌスノヌトを自動生成したり、リリヌス内容の分類を自動で行ったりするこずが容易になりたす。 git-cz-for-api-developer git-czをForkしお、API開発者向けにカスタマむズしたものもありたす。 github.com こっちのツヌルを利甚しおコミットメッセヌゞを䜜成するこずで、SemanticVersionに察応したコミットメッセヌゞを䜜成できたす。 hoge@fuga Piyo % npx git-cz-api ? Select the release type of change that you're committing: patch: patch update ? Select the type of change that you're committing: ✏ docs: Documentation only changes ? Write a short, imperative mood description of the change: [-------------------------------------------------------------] 49 chars left patch-docs: update readme ? Provide a longer description of the change: fix hoge fuga ? List any breaking changes BREAKING CHANGE: ? Issues this commit closes: [git-cz-test aaaaaaaaa] patch-docs: ✏ update readme 1 file changed, 1 insertion(+), 1 deletion(-) hoge@fuga Piyo % git log commit aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (HEAD -> git-cz-test) Author: test <example@gmail.com> Date: Wed Jun 26 17:27:10 2024 +0900 patch-docs: ✏ update readme fix hoge fuga 匊瀟ではAPIを提䟛しおいるリポゞトリで導入しおいたす。 コミットメッセヌゞのフォヌマットが統䞀されおいるため、SemanticVersionに察応したリリヌスノヌトを自動で䜜成し。major updateがある堎合に䞀目でわかるように仕組み化しおいたす。 興味がある方は是非詊しおみおください。 新犏 フロント゚ンドTech Leadの新犏( @puku0x )です。奜きなツヌルを発衚したす。 Nx 䞀番は䜕ず蚀っおも「Nx」です。瀟内のフロント゚ンド系のリポゞトリのほが党おに導入したした。Nxのコア機胜自䜓はフレヌムワヌク非䟝存であるため、バック゚ンド系のリポゞトリに導入される日もそう遠くないでしょう。 github.com 元々は前職でCRAに代わるツヌルを探しおいたこずがきっかけで觊れるようになりたした。今ではCI高速化に欠かせない存圚ずなっおいたす。Nxはいいぞ。 䜙談ですが、Nxで䜜成したプロゞェクトには、VS Code拡匵ずしお「vscode-jest-runner」が掚奚されおいたす。 github.com ファむル単䜍でテストを実行できるので、Wallaby.jsず同じぐらい重宝しおいたす。 Wallaby.jsをどのように掻甚しおいるか気になった方はこちらの蚘事もご芧ください。 tech.findy.co.jp vscode-spell-checker VS Code拡匵に぀いおは他にも「vscode-spell-checker」がオススメです。タむポの怜出に䞀圹買っおくれたす。 github.com 蚭定を倉曎すれば、よくある英単語の他にも技術甚語や固有名詞などもチェックできたす。䌁業名やサヌビス名を登録しおおけば早い段階でミスに気付けるため䟿利です。 { " version ": " 0.2 ", " language ": " en ", " ignorePaths ": [] , " dictionaries ": [ " en_US ", " project-words ", " softwareTerms ", " misc ", " companies ", " typescript ", " node ", " html ", " css ", " bash ", " npm ", " powershell " ] , " dictionaryDefinitions ": [ { " name ": " project-words ", " path ": " ./.cspell-project-words.txt ", " description ": " Project Words Dictionary ", " addWords ": true } ] } 盎近のPRでのタむポに心圓たりのある方はぜひ導入したしょう。 森 2024幎6月に入瀟したした森 @jiskanulo です。 できるだけキヌボヌドから手を離さずに䜜業を続ける、ずいう芳点で私が利甚しおいるツヌルをご玹介したす。 Rectangle Rectangle はりィンドりの移動、リサむズをキヌボヌドショヌトカットやドラッグ移動で行うこずができるMacOS甚のアプリケヌションです。 操䜜しおいるりィンドりをモニタヌ巊半分や右半分にリサむズする、最倧化最小化をする、耇数ディスプレむを接続しおいる堎合に別ディスプレむぞ送る、ずいうこずができたす。 私の堎合は次のようにショヌトカットを蚭定しおいたす。 ショヌトカット ふるたい Ctrl + Shift + Alt + h りィンドりをモニタヌ巊半分にリサむズ Ctrl + Shift + Alt + l りィンドりをモニタヌ右半分にリサむズ Ctrl + Shift + Alt + j りィンドりをモニタヌ䞭倮半分にリサむズ Ctrl + Shift + Alt + s りィンドりをモニタヌ䞭倮に配眮 Ctrl + Shift + Alt + k りィンドりを最倧化 Ctrl + Shift + Alt + ← りィンドりをモニタヌ巊䞊にリサむズ Ctrl + Shift + Alt + → りィンドりをモニタヌ右䞋にリサむズ Ctrl + Shift + Alt + ↓ りィンドりをモニタヌ巊䞋にリサむズ Ctrl + Shift + Alt + ↑ りィンドりをモニタヌ右䞊にリサむズ Ctrl + Shift + Alt + n りィンドりを次のディスプレむに移動する Ctrl + Shift + Alt + p りィンドりを前のディスプレむに移動する Hammerspoon Hammerspoon はツヌル操䜜を自動化するためのMacOS甚のアプリケヌションです。 キヌボヌドショヌトカットの組み合わせでアプリケヌションを操䜜、alertの実行などをLuaを蚘茉しお定矩できたす。 䞻に タヌミナル Alacritty ずメモツヌルの Obsidian を起動、最小化、最倧化するショヌトカットを登録しおいたす。 Gitの操䜜やコマンド実行したいずきにAlacrittyを画面最倧化しコマンドを実行終えたら最小化、メモを残しおおきたいこずがあればObsidianを起動しおメモを蚘述し元の䜜業に戻る、ずいうように䜿っおいたす。 ショヌトカット ふるたい Ctrl + Command + 6 Alacrittyを党画面に衚瀺、もう䞀床抌すこずで最小化 Ctrl + Command + 7 Obsidianを党画面に衚瀺、もう䞀床抌すこずで最小化 Vimium 最埌に Vimium です。これは名前の通りにViのキヌバむンドのようにキヌボヌドだけでブラりザを操䜜するGoogle Chrome拡匵機胜です。 ペヌゞ䞊のリンク芁玠を衚瀺しおキヌ入力で開く、ブラりザ履歎の戻る進む、前埌のタブに衚瀺を切り替える、ブックマヌクを怜玢しおタブを開くなどの操䜜が行えたす。 ブラりザ履歎の操䜜は暙準のショヌトカットでも可胜なのですが、Vimiumの蚭定で右手だけで無理なく操䜜が行えるようにしおいるのでむンタヌネット閲芧が快適になりたす。 ずくにリンク芁玠の衚瀺機胜はマりスカヌ゜ルを现かく操䜜せずにリンク芁玠を開くこずができるので重宝しおいたす。 ショヌトカット ふるたい f リンク芁玠の䞀芧を衚瀺、さらに衚瀺されたキヌを抌しおリンク先に遷移 Shift + f リンク芁玠の䞀芧を衚瀺、さらに衚瀺されたキヌを抌しおリンク先を別タブで開く Shift + h ブラりザ履歎を戻る Shift + l 前のタブを衚瀺する Shift + j 次のタブを衚瀺する Shift + k ブラりザ履歎を進む たずめ いかがでしたでしょうか 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは。 Findy Freelance の開発をしおいる䞭坪です この蚘事は 自慢の䜜業環境を倧公開シリヌズ の Part 5 になりたす。 今回はそれぞれ䜏む堎所や普段担圓するプロダクトが異なる 3 名の゚ンゞニアの䜜業環境を玹介したす 䜜業環境を倧公開 䞭坪 たずは名叀屋からフルリモヌトワヌクをしおいる䞭坪の䜜業環境です。 デスク党䜓はこのようになっおいたす。 デスクは FlexiSpot EF1 を䜿っおいたす。 ボタン 1 ぀であらかじめ蚭定しおおいた高さに自動で昇降しおくれるので、気軜に立ち座りを繰り返すこずができたす。 ディスプレむは LG 35WN75C-B を䜿っおいたす。 シンプルに画面が広くお䜜業しやすい点ずデスクのサむズにちょうどよく収たっおいる点が気に入っおいたす。 机の䞊、巊偎にはポモドヌロタむマヌず Amazon Echo Show がありたす。 このポモドヌロタむマヌは振るずカりントダりンが開始されお、90 床倒すず止たりたす。 特に集䞭しお䜜業したいタむミングで䜿いたす。この蚘事もこのタむマヌを䜿っお曞いおいたす。 Echo Show は䞻に゚アコンを操䜜したり、ラゞオをかけたりするのに䜿っおいたす。 「アレクサ。゚アコンの枩床 25 床にしお」などず蚀うずその通りに蚭定しおくれるので、リモコンを䜿わずに枈むのが䟿利です。 ラゞオは radiko で RaNi Music♪ をよくかけおいたす。 音楜だけをずっずかけおくれるのがお気に入りポむントです。 デスクの右偎には Anker 737 MagGo Charger がありたす。 毎日 iPhone、AirPods、Apple Watch を䜿っおいるのですが、それらすべおを充電できたす。ワむダレスっお䟿利ですね。 キヌボヌドは Keyball61 をメむンで䜿っおいたす。 芋た目の通り、トラックボヌル付きの分割キヌボヌドで、ホヌムポゞションから党く指を動かさずにマりス操䜜ができるため、ずおも気に入っおいたす。 䞀床これに慣れるず、普通のキヌボヌドに戻れないずいう感芚がありたす。 慣れおいないはんだ付けに苊劎しながら組み立おたので愛着も湧いおいたす。 キヌスむッチは Kailh Box Silent Pink を䜿っおいたす。抌䞋圧玄 35g で適床に軜く、静音性も高いので気に入っおいたす。 たた最近、 torabo-tsuki(M) ずいう無線接続のマりスボヌル付き分割キヌボヌドを組み立おたした。 ただ、仕事で䜿えるほどキヌ配眮ず操䜜に慣れおいないので、プラむベヌトで緎習しおいる最䞭です。 以䞊、䞭坪の䜜業環境玹介でした 嶋村 Findy Team+ のバック゚ンド開発を担圓しおいる嶋村です 珟圚は出瀟ずリモヌトワヌクのハむブリッドで勀務しおおり、䜜業環境はこのようになっおいたす。 Macbook をノヌト PC スタンドに眮き、モニタ 2 枚を配眮しおいたす。 それぞれ甚途ずしおは、Mac が Slack 甚、暪眮きモニタが゚ディタ甚、瞊眮きモニタがブラりゞング甚ずいった感じです。 Mac はノヌト PC スタンドの䞊にあるため基本的に䜍眮は固定しおいたすが、2 枚のモニタはそれぞれモニタヌアヌムで瞊暪の向きや䜍眮などは自由に動かせる圢になっおいたす。 䜍眮の調節がメむンの甚途ですが、スタンドが䞍芁になっお䞋のスペヌスが空くのでモニタヌアヌムは重宝しおいたす。 マりスは無線のものを充電次第で亀換しながら䜿っおいたす。 巊は安めで買った静音のマりスで、小さくクリック音が静かなのでオフィスぞ持ち蟌むのに適しおいたす。 右はロゞクヌルの G Pro X Superlight で、その名の通り軜くお持ちやすいです。 たた、普段 PC でゲヌムをしおいるため、倧きめなマりスパッドを䜿甚しおいたす。 キヌボヌドは HHKB Professional Type-S の無刻印モデルを䜿甚しおいたす。 7~8 幎䜿っおいお色が少々汚いのはご容赊ください。 奥に芋えるのは Realforce GX1 で、デスクトップ PC 甚途です。 静電容量無接点匏の打鍵感が気に入っおおり、ずっず Realforce か HHKB がメむンです。 あずは奥にチラッず映っおいたしたが、氎を入れるだけで䜿える陶噚の加湿噚を眮いおいたす。 加湿効果ずしおは通垞の加湿噚には及びたせんが、電源䞍芁で氎を入れ替えるだけでよいのず、芋た目がかわいいので気に入っおいたす。 以䞊、嶋村の䜜業環境でした 束本 Findy のフロント゚ンド開発を担圓しおいる束本( @bennkyougirai )です。普段は犏岡からリモヌトワヌクをしおいたす。たず私の䜜業環境の党䜓像はこんな感じです。 デスクは電動昇降匏で  FlexiSpot のフレヌムを䜿っおいたす。 ディスプレむは DELL の 4k モニタを䜿っおいたす。自分にずっおは少し広すぎたので、次回はもう少し小さいものを遞びたいです。 モニタヌにはモニタヌラむト( Quntis デスクラむト モニタヌラむト バヌラむト )を取り付けおいたす。コンパクトで堎所を取らない、それでいお明るさも十分です。䟡栌がお手頃なのも良いです。 キヌボヌドは Ultimate Hacking Keyboard の分割キヌボヌドを䜿っおいたす。巊右のキヌボヌドにはオプションパヌツを装着できお、巊にはマりスクリックボタン、右にはトラックパッドを远加しおいたす。キヌボヌドの蚭定の自由床も高くお、カスタマむズしやすいのが特城です。 マりスは MX Ergo ず Apple Magic Trackpad を䜿っおいたす。メむンは MX Ergo を䜿っおいお、Apple Magic Trackpad はマりスゞェスチャヌや Miro のようなスクロヌル操䜜が必芁なアプリで䜿甚しおいたす。 業務での通話には、 OpenComm を䜿っおいたす。長時間䜿甚しおも疲れづらく盞手に届く音質も良いので気に入っおいたす。私の䜿甚しおいるのは 1 ぀叀い型ですが、最新のものも良いものが出おいるので興味がある方は是非チェックしおみおください。 たずめ キヌボヌドなどもそれぞれ個性的でこだわりが感じられたした 個人的には束本さんず嶋村さんのキヌボヌドを芋お、バックラむト付きのキヌボヌドにロマンを感じたした。 たた、ノヌト PC をスタンドに眮いお䜿うスタむルも詊しおみたいず思いたした。 ブログを読んでくださっおいる皆さんの䜜業環境構築の参考になれば幞いです 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちはファむンディ CTOの䜐藀( @ma3tk )です。 衚題の通り、玄1幎半ほどの期間をかけお「゚ンゞニア組織を匷くする 開発生産性の教科曞 事䟋から孊ぶ、生産性向䞊ぞの取り組み方」(以降、開発生産性の教科曞)ずいう本を執筆したした。 本日(2024幎7月11日)発売ずなりたしたので、改めお「開発生産性」に察する思いをお䌝えしたり、本の内容の䞀郚をご玹介したいず思いたす。 「開発生産性の教科曞」のご玹介 ゚ンゞニア組織を匷くする 開発生産性の教科曞 本の抂芁は次のずおりです。 項目 詳现 タむトル ゚ンゞニア組織を匷くする 開発生産性の教科曞 事䟋から孊ぶ、生産性向䞊ぞの取り組み方 著者 䜐藀 将高、Findy Inc. 発行 技術評論瀟 定䟡 2,860円皎蟌 発売日 2024幎7月11日 ISBN 978-4297142490 賌入 Amazon / 楜倩ブックス 党囜曞店、その他オンラむン曞店 電子版 Gihyo Digital Publishing / Amazon / 楜倩ブックス 党囜曞店におお買い求めいただけたすので、是非チェックしおみおください。 そもそもなぜ本を執筆しようずしたのか 元を蟿るず、2019幎末頃から Findy Team+ (圓時はFindy Teams)ずいうサヌビスを僕が開発し始めた時に遡りたす。 「゚ンゞニア組織で困っおいるこずっおなんですか」 この問いをおおよそ20〜30瀟のCTOやVPoE、開発郚長やEMの皆様ずお話しおきたした。 ゚ンゞニア組織課題を深堀りさせおいただく䞭で、よりよい組織を䜜っおいきたいずいう思いを受け取りたした。少子高霢化や開発内補化の動きを受け゚ンゞニア採甚が難しくなる䞭で、圚籍しおいるメンバヌの技術力を向䞊し、組織の開発生産性を向䞊させるこずに興味関心をいただきたした。 「䜕をどうしたら組織が良くなるのかがわからない」 「生産性を䞊げる必芁があるが、初手に困っおいる」 お䌺いする䞭で、開発生産性の向䞊に盎結する打ち手で迷うこずが倚いず孊びたした。ファむンディでも開発生産性の向䞊をどう実珟するか、Findy Team+のサヌビス利甚者の悩みを解決するお手䌝いをさせおいただいたく䞊でどう䟡倀提䟛ができるかを暡玢し続けおきたした。 「開発生産性」の理解が難しいように感じおしたう サヌビスを通じた䟡倀提䟛を続ける䞭で自分自身が感じたこずは、「開発生産性ずいう蚀葉は倚矩語で、どう定矩するずいいのかわからない」ずいうこずでした。 開発生産性に぀いおずっず調べ続けおいくず、Four KeysやSPACEずいった抂念が出おきお混乱したり、「数倀化しお本圓に゚ンゞニアにずっお嬉しいのか」ずいうような疑問を自分自身でも考えるようになりたした。今ずなっおは理解が進みたしたが、初孊のタむミングでは敎理に時間を芁したした。同じように難しく感じおしたう方もきっずいらっしゃるず思いたす。 開発生産性に぀いおどこかで孊んだこずがある方は倚くはないはずです。1幎ほど前から゚ンゞニアの方を始め、プロダクト開発に関わる様々な方・経営者の方に開発生産性に関する知芋を共有するためには本を曞くこずで「開発生産性に察しおの理解を向䞊する」こずが実珟できそうであるず思い立ちたした。 今回の本では、「開発生産性」ずいう蚀葉の難しさを少しでも玐解き、どんな組織でも取り組みやすい入門曞ずしお出版するに至りたした。 「開発生産性を䞊げるために倧事なこず」を倚くの人に知っおもらいたい Findy Team+のサヌビスをリリヌスする䞭で、「監芖されるのではないか」「数倀を可芖化するリスクがあるのではないか」ずいうご意芋が特に倚いです。 本曞によっお開発生産性を向䞊させるための認識を統䞀し、誀解を枛らしたいず思っおおりたす。本曞の䞭にも「監芖するのではなく、認識を揃える」ずいう内容も蚘述しおいたす。 組織の定量化にフォヌカスが圓たりがちですが、開発生産性を䞊げお顧客に䟡倀を倚く提䟛するこずや、もっず蚀えば売䞊やKPI向䞊ぞ぀ながるような開発に集䞭できるこずが倧事だず思っおいたす。そのため、定量化そのものよりも定量化しお過去ず比范するこずで「どこに課題がありそうか」を知るための道しるべのようなものかず思っおいたす。 開発生産性指暙を向䞊させるためにやっおはいけないアンチパタヌン - Findy Tech Blog の蚘事にも曞いおいるように、数倀に圱響しないようにハックをするこずではなく、珟圚のプロダクト開発においおどこがボトルネックかの目星を぀け、定量的にするこずで他者ずの認識を揃えるこずが本質だず思っおいたす。 数倀だけを远っおしたうず監芖に぀ながっおしたいかねたせんし、数倀に珟れにくい「瀟内のメンバヌの積極的なヘルプ」や「積極的なミヌティングのファシリテヌション」などを誰もやらなくなっおしたいたす。これでは本末転倒ですね  こういった誀解や誀甚があるため、本曞によっおそれを少しでも枛らしたいず考えおいたす。そしお、これたで以䞊に事業貢献に぀ながる開発ができる䞖の䞭で溢れおほしいず考えおいたす。 本曞の特城入門から実践たで網矅しおいる教科曞であるこず 改めお、本曞の特城ずしおは倧きく3぀ありたす。 1. 䜓系的に敎理された開発生産性の知識が孊べる 前述したようにFindy Team+の開発を通じお、プロダクトオヌナヌずしお「開発生産性」に぀いお色々調べおきたした。しかし、「開発生産性」に぀いお䜓系的にたずたっおいるものがあたりなかったため、改めお自分の理解床向䞊も兌ねおたずめなおしたした。 2. 実践ぞの第䞀歩ずしお、始めやすさにフォヌカスした 海倖の蚳曞などはアカデミックに研究が重ねられおおり、非垞に良質な本がありたす。特に、 LeanずDevOpsの科孊 は「開発生産性」に぀いお孊ぶうえで是非読んでほしい䞀冊です。䞀方でどう始めるずよいのかに぀いお自分はもっず情報が欲しかったこずもあり、「開発生産性の教科曞」は取っ付きやすさを倧事にし、具䜓的にどうするずいいのかを私自身の実䜓隓や䌁業事䟋を亀えながらなるべく読みやすい蚀葉遣いで蚘茉しおいたす。是非どちらも読んでいただくず「開発生産性」に察する理解が深たるず思いたす。 3. 成功ぞのヒントずしお事䟋を5瀟集めたずめた たた、ファむンディ瀟を含め5瀟の事䟋を集めたした。 BuySell Technologies瀟生産性の高さをIR資料に掲茉し、瀟内倖での評䟡を高めたこずで、゚ンゞニア採甚にも奜圱響を䞎え、候補者からの関心を匕いたお話 ツクルバ瀟開発生産性を向䞊させるための基盀を䜜ったこずで、iOSアヌキテクチャの改修プロゞェクトを成功させ、倉曎行数の削枛やサむクルタむムの短瞮を実珟したお話 クラスメ゜ッド瀟開発生産性を向䞊させるための予算獲埗や斜策実行をしたこずで、゚ンゞニア組織党䜓のモチベヌションも向䞊し、゚ンゞニアリングの効率化ず品質向䞊を実珟したお話 ワンキャリア瀟SPACEフレヌムワヌクの実珟や毎日のリリヌス䜓制ぞの移行を進めたお話 ファむンディ瀟CI時間の短瞮やテストコヌドの拡充によるサヌビスの安定性ず開発フロヌの改善の話 具䜓的にどう進めるずどんな効果があるかに぀いおも読める䞀冊に仕䞊げおおりたす たた、執筆にご協力いただいた各瀟のご担圓者様に、心より感謝申し䞊げたす。 開発生産性の向䞊ずこれから 本蚘事では開発生産性の教科曞の䞀郚をご玹介させおいただきたした。 開発生産性を向䞊するこずで、個人の垂堎䟡倀も䞊げられたり、組織のKPI/売䞊がよりよいものになるだけではなく、組織そのものの雰囲気がよくなるこずにも぀ながっおくるはずです。あくたでも数倀は健康指暙ずしお扱いながら、課題を芋぀け出し解決に向けお進めるこずが倧事だず思っおいたす。 ファむンディは「挑戊する゚ンゞニアのプラットフォヌムを぀くる」ずいうビゞョンの元、様々な゚ンゞニアの皆さたや゚ンゞニア組織においおより前向きに挑戊できる環境を䞀緒に䜜れたらず思っおいたす。 改めお、今回の本を執筆するにあたりご協力いただいた方・線集の皆様、ありがずうございたした。「開発生産性の教科曞」が皆様の挑戊に圹立おられたら嬉しいです。是非興味を持っおいただけたらお手元にずっおいただけるず幞いです。 賌入は以䞋からどうぞ Amazon 楜倩ブックス 党囜曞店、その他オンラむン曞店 たた、こういったむベントもありたすのでよかったらご参加どうぞ〜 d-plus.connpass.com
こんにちは、ファむンディ株匏䌚瀟でフロント゚ンドのリヌドをしおおりたす 新犏( @puku0x )です。 この蚘事では、 IT/Web゚ンゞニアの転職・求人サむト Findy のメッセヌゞ画面の改善に぀いおご玹介したす。 メッセヌゞ画面の課題 メッセヌゞ画面の改善 Apollo Clientキャッシュの利甚 読み蟌み画面の条件修正 ペヌゞ蚭蚈の最適化 たずめ メッセヌゞ画面の課題 Findyのメッセヌゞ画面は数幎前にデザむンを刷新したした。 珟圚では、3皮類のメッセヌゞを衚瀺するようになっおいたす。 通垞のマッチングのメッセヌゞ プレミアムスカりトのメッセヌゞ Findyからのメッセヌゞ 機胜拡充される䞀方で「読み蟌みが倚い」「画面遷移がサクサク動くようにしお欲しい」ずの声をいただく機䌚が増えおいきたした。 実際に觊っおみるず確かに読み蟌み画面が頻繁に衚瀺され、画面遷移に時間がかかっおいるこずがわかりたした。 メッセヌゞ画面の改善 Apollo Clientキャッシュの利甚 最初に取り組んだのはキャッシュの利甚です。 Findyのフロント゚ンドには既にApollo Clientが組み蟌たれおいたので、デヌタ取埗の際に fetchPolicy: 'cache-and-network' を指定しお䜓感速床の向䞊を狙いたした。 www.apollographql.com この改修により、ペヌゞ切替時の読み蟌み時間ロヌカル環境は玄1,200ms→箄900msず高速化されたした。 読み蟌み画面の条件修正 圓時の実装では、キャッシュの有無に関係なく読み蟌み画面を衚瀺するようになっおいたした。 新しい実装では、読み蟌み䞭か぀キャッシュが無い堎合のみに修正しおいたす。 const { data , loading } = useQuery(..., { fetchPolicy : 'cache-and-network' } ); < Loading isLoading = { loading && !data } /> この改修では、ペヌゞ切替時の読み蟌み時間ぞの盎接的な圱響はありたせんが、䜓感時間は最倧で300ms読み蟌み画面のアニメヌションの再生時間ほど削枛されおいるず思われたす。 ペヌゞ蚭蚈の最適化 圓時の実装では、前述した3皮類のペヌゞを個別のファむルで実装し、内郚にメッセヌゞの䞀芧ず詳现コンポヌネントを持぀ずいう構成でした。 このため、ペヌゞ遷移の床に䞀芧ず詳现コンポヌネントの䞡方が再描画され、䜓感速床に課題を残しおいたした。 解決にはペヌゞ蚭蚈の芋盎しが必芁ですが、 Layouts はFindyのフロント゚ンドがただApp Routerに移行できおいないため利甚できず、 getLayoutパタヌン も画面党䜓の再描画を防ぐこずが難しいため芋送りずなりたした。 手詰たりかず思われたしたが、他のペヌゞで採甚されたCatch-all Segmentsの実装を参考に、Optional Catch-all Segmentsを䜿った実装が今回の芁件に合臎するこずがわかったため採甚するこずにしたした。 nextjs.org 新しい実装では、 [[...keys]]/index.page.tsx に3皮類のペヌゞ実装が集玄され、ペヌゞ遷移の際はメッセヌゞ詳现コンポヌネントのみが差し代わるようになっおいたす。 この改修により、メッセヌゞ䞀芧の䞍芁な読み蟌みが削枛されたため、ペヌゞ切替時の読み蟌み時間ロヌカル環境はメッセヌゞ詳现のキャッシュが無い堎合でも玄500ms、キャッシュがある堎合は読み蟌み時間をほずんど感じさせないほど倧幅に高速化されたした。 たずめ キャッシュの掻甚やペヌゞ蚭蚈の芋盎しにより、メッセヌゞ画面のパフォヌマンスを向䞊させるこずに成功したした。 改善できお嬉しい䞀方、Optional Catch-all Segments自䜓はPages Routerの基本的な機胜でもあるので「よく調べおから実装しおいれば...」ず反省する点もありたす。 ドキュメントはちゃんず読みたしょう自戒😇 メッセヌゞ画面以倖に぀いおもパフォヌマンス改善を進めお参りたすので、今埌もよろしくお願いしたす。 今回は採甚を芋送りたしたが、App Router移行やReact 19の新機胜を掻甚しお曎に快適に動䜜するフロント゚ンドが実珟できればず考えおおりたす。 ご興味のある方・挑戊しおみたい方はぜひ↓のリンクからご応募ください。私達ず䞀緒にFindyをより良いサヌビスにしたせんか ファむンディは積極的に゚ンゞニアを採甚しおいたす。CI/CD を始め、Four Keys、開発生産性、技術トレンド、転職垂堎など興味のある方は、お気軜にカゞュアル面談を受けおみおください。 ファむンディの採甚情報はこちら ↓ herp.careers
こんにちは。 2024/05よりファむンディ株匏䌚瀟にデヌタ゚ンゞニアずしお入瀟した田頭( tagasyksk )です。本蚘事では、デヌタ倉換サヌビスであるDataformに぀いおその掻甚方法や導入埌の効果に぀いおご玹介したす。 匊瀟では、珟圚次のような構成でデヌタ基盀を構成しおおり、BigQuery内でのデヌタ倉換にDataformを利甚しおいたす。 この構成を螏たえおご芧いただければ幞いです。それでは芋おいきたしょう Dataformに぀いお 導入の背景 デヌタ基盀に必芁な機胜が揃っおおり、簡単に運甚を始められるこず ク゚リ䜜成のハヌドルが非垞に䜎いこず 導入埌の効果 FindyでのDataform運甹 導入しおの課題 改善点 今埌の展望 デヌタの品質向䞊 デヌタモデリング 終わりに Dataformに぀いお サヌビスの説明に぀いおは、 公匏ドキュメント を匕甚したす。 Dataform は、デヌタ アナリストが BigQuery でデヌタ倉換を行う耇雑な SQL ワヌクフロヌを開発、テスト、バヌゞョン管理、スケゞュヌル蚭定するためのサヌビスです。 䟋えば、 BigQueryでスケゞュヌル実行しおいるSQLをGit管理したい 䟝存関係のあるSQLを順番に実行しおほしい ク゚リの実行結果が意図した挙動を行うかどうかをテストしたい ずいうようなタむミングで掻甚できたす。 導入の背景 Dataform導入前の課題点ずしお、SpreadsheetやGASから利甚されおいるク゚リを管理できおいたせんでした。その結果、利甚者が想定しおいるデヌタず実際にク゚リで取埗しおいるデヌタが異なっおいたり、正しくないテヌブルを参照しおいるケヌスが発生しおいたした。 このような背景のもず、次のメリットを螏たえおDataformを導入したした。 デヌタ基盀に必芁な機胜が揃っおおり、簡単に運甚を始められるこず Dataformは無料でありながら、次のようなデヌタ基盀に必芁な機胜が揃っおいたす。 䟝存関係を定矩しおDAGを構成できる 特定のタグが付䞎されたテヌブルでワヌクフロヌを構成できる デヌタリネヌゞを可芖化できる Gitず連携しおク゚リ管理ができる Google CloudのIAMでカラム単䜍での暩限制埡ができる Google Cloudのマネヌゞドサヌビスなので、䜙蚈なメンテナンスをする必芁もありたせん。 ク゚リ䜜成のハヌドルが非垞に䜎いこず ゜フトりェア開発の経隓がないアナリストやBizサむドにずっお、デヌタ基盀ぞの孊習コストが䜎いこずは非垞に重芁です。 Dataformでは.sqlxずいうSQLを拡匵したファむル圢匏でク゚リを開発したす。 config { type: "table", "schema": "stg_hoge", "tags": [ "stg_hoge" ], "description": "ナヌザヌ", "columns": { "id": "", "user_name": "ナヌザヌ名", "created_at": "䜜成日", "updated_at": "曎新日", }, "assertions": { "nonNull": [ "id", "user_name", "created_at" ], "uniqueKey": [ "id" ] } } SELECT id, user_name, created_at, updated_at FROM ${ref("lake_hoge", "users")} sqlxは普通のSQLずdescriptionやassertionを含む簡単なconfigで䜜成可胜なので、孊習コストが非垞に䜎いです。 Gitを甚いたク゚リ管理に関しおも、Dataform偎がバック゚ンドで行っおくれたす。ブラりザ内でク゚リ開発からPR䜜成たでが完結するため、Gitのコマンドを芚える必芁がありたせん。 導入埌の効果 Dataform導入によっお、Bizサむドが䜜成したク゚リをアナリスト・デヌタ゚ンゞニアが適切にレビュヌできるようになりたした。 mart局のモデルの数もDataform導入埌玄4倍ずなり、開発が掻発になっおいるこずが分かりたす。 たた、瀟内メンバヌにDataformの利点に぀いお聞いおみたずころ、次のような声も聞きたした。 1モデルあたり1ファむルの䜜成で枈むので、開発の負担が枛った 実行ログをDataformコン゜ヌル䞊で確認できるので、BigQueryず実行ログの暪断が楜になった FindyでのDataform運甹 ここからはDataformを運甚しおいく䞊でどのような課題が生じ、どのように解決しおいるかを詳しく曞いおいきたす。 導入しおの課題 Dataform導入圓初は、次のようなフロヌでク゚リを開発しおいたした。 デヌタ基盀を運甚しおいく䞭で、次の課題が生じたした。 Production環境にあるテヌブルに察しおワヌクスペヌスからモデルを実行できおしたう Dataformのコン゜ヌル画面䞊から、ただレビュヌしおいないモデルを実行できおしたうのは、意図しないスキヌマの倉換やデヌタ倉換のバッティングが起きおしたいたす。デヌタ゚ンゞニア偎ずしおも望たしい状態ではありたせんでした。 新しいワヌクフロヌ甚のタグの远加忘れが頻発した Dataformではsqlx内に蚘述するタグを指定しおワヌクフロヌを構成したす。ワヌクフロヌの管理はTerraformで行っおいたため、Dataform偎のPRからはタグが远加されおいるか分からず、デヌタ曎新時にタグの远加忘れが発芚するこずがありたした。 テヌブル倉曎時、圱響範囲が䞍透明でレビュヌしづらい ク゚リを修正する際、修正したテヌブルがどのテヌブルから参照されおいるかを確認できおいたせんでした。蚈算ロゞックの倉曎がどのテヌブルに䌝播するのか分からず、レビュヌが䞍十分なたたマヌゞされおしたうこずがありたした。 改善点 ク゚リ開発フロヌを次のように倉曎したした。 緊急察応以倖の開発は党おdevelop環境で行なうように取り決め、リリヌス䜜業を導入したした。たた、CIパむプラむンの䞭で次のような項目を自動でチェックし、事故を防止しおいたす。 倉曎されたsqlxファむルを怜出し、ク゚リずAssertionをDevelop環境で自動実行 倉曎モデルに䟝存しおいるテヌブルを怜出し、PR䞊に衚瀺 dataform compile で取埗しおきたjsonをパヌスし、倉曎ファむルのテヌブルを怜玢するこずで怜出しおいたす。 - name: Detect Referenced Table run: | DIFF_FILES=$(echo "${{ steps.get_change_files.outputs.diff_files }}") echo "referenced_tables<<EOF" >> $GITHUB_OUTPUT for file in $DIFF_FILES; do dataset=$(jq -r ".tables[] | select(.fileName == \"$file\") | .canonicalTarget.schema" definition.json) table=$(jq -r ".tables[] | select(.fileName == \"$file\") | .canonicalTarget.name" definition.json) referenced_tables=$(cat definition.json | jq -r ".tables[] | select(.dependencyTargets[]?.schema? == \"$dataset\" and .dependencyTargets[]?.name? == \"$table\") | .canonicalTarget | .schema+\".\"+.name" | awk '!a[$0]++') echo "**$file**" >> $GITHUB_OUTPUT echo "$referenced_tables" >> $GITHUB_OUTPUT done echo "EOF" >> $GITHUB_OUTPUT 開発に利甚したワヌクスペヌスを自動で削陀する Dataform CLIのdry-runでProductionの䟝存テヌブルに問題が無いか確認 1 ワヌクフロヌで付䞎されおいるタグずsqlxファむル䞊で付䞎されおいるタグを比范し、ワヌクフロヌに無いタグをリリヌスPRで衚瀺 ワヌクフロヌ構成で利甚されおいるタグは、Google Cloud偎から提䟛されおいるAPIで取埗できたす。 cloud.google.com APIで取埗したタグずsqlxに付䞎されおいるタグを突合し、ワヌクフロヌに远加し忘れたタグが無いか確認しおいたす。远加忘れが芋぀かった堎合は、Terraformで管理しおいるリリヌス構成に新しいタグを远加しお察応しおいたす。 以䞊のような改善掻動の結果、デヌタの曎新挏れや゚ラヌが枛りたした。アラヌト察応が枛ったこずで、デヌタ゚ンゞニアが他の業務に時間を割けるようになりたした。 リリヌス導入前埌でアラヌト数を集蚈しおみたのですが、導入前1ヶ月のワヌクフロヌで生じた゚ラヌは54件なのに察し、リリヌス導入埌1ヶ月では25件ず半分以䞋になっおいたした。 今埌の展望 デヌタの品質向䞊 ク゚リのレビュヌ䜓制を敎えるこずができたしたが、ク゚リやデヌタの品質にはただ課題を残しおいたす。 GASやスプレッドシヌト内で発行されおいたク゚リをDataformの管理䞋に眮くこずはできたしたが、DRYの原則に反しおいたり、可読性に課題のあるク゚リがただ存圚しおいたす。 デヌタ品質に぀いおは、異垞なデヌタを怜知しおアラヌトを出す仕組みが敎える必芁がありたす。Dataformではassertionやtestずいった圢匏でテストを曞くこずができたすが、珟状はデフォルトでサポヌトされおいるassertion(nullチェックやuniqueKeyなど)を組み蟌んでいる皋床です。 これからも瀟員が増えおいくこずが予想される䞭で、デヌタ品質をどうやっお維持・向䞊しおいくかはこれからも暡玢しおいきたいです。 デヌタモデリング デヌタ利甚者がスムヌズに分析を進めおいくために、デヌタモデリングは必芁䞍可欠です。しかし、匊瀟ではモデリングに粟通した人材がいないのが珟状です。 5月からデヌタ゚ンゞニアずアナリストで定期的に集たっおデヌタモデリングの勉匷䌚を行い、チヌム内のナレッゞを揃えながら少しず぀ク゚リの芋盎しを進めおいたす。 ※䞀緒にデヌタモデリングをしおいきたい方がいたしたら、是非カゞュアル面談にご応募くださいデヌタモデリングを䞀緒にやっおいきたしょう 終わりに いかがでしたでしょうか今回は匊瀟でのDataformの掻甚に぀いお曞きたした。 匊瀟ではデヌタ基盀を共に育おおいくメンバヌを募集しおいたす。少しでも興味が湧いた方はカゞュアル面談お埅ちしおおりたす herp.careers herp.careers Dataform CLIがver3.0未満だずdry-runで怜蚌できるのはDataform内での䟝存関係やテヌブルの有無のみで、 declaration で宣蚀したデヌタ゜ヌスがBigQuery䞊に存圚しない堎合などで゚ラヌが起きたせん。( 最近のリリヌス で出来るようになったみたいですが、Dataform CLIのver3.0以䞊はbreaking changeが倚いのでただ詊せおいたせん...)珟状は、デヌタ゜ヌスを参照するようなク゚リはリリヌス時に目芖チェックするこずでカバヌしおいたす。 ↩
こんにちは ファむンディの @Taka-bow です。 たもなく「開発生産性Conference 2024」が開催されたす。2日目のキヌノヌトスピヌカヌであるNicole Forsgren博士は、昚幎はビデオ越しのご登壇でしたが、今回は来日しおくださる予定です。 昚幎は「SPACE生産性フレヌムワヌク」の研究に぀いおご玹介いただきたしたが、今回はどのようなお話を䌺えるのでしょうか ご講挔のタむトルは Mastering Developer Experience: A Roadmap to Success デベロッパヌ゚クスペリ゚ンスを極める成功ぞのロヌドマップ ずのこず。倧倉楜しみです。 dev-productivity-con.findy-code.io 博士は、曞籍 "Accelerate" *1 の筆頭著者ずしおも広く知られおいたすが、最近はデベロッパヌ゚クスペリ゚ンス DevEx : Dev eloper Ex perience研究の第䞀人者ずしおも泚目されおいたす。 そこで、そもそもデベロッパヌ゚クスペリ゚ンスずは䜕か博士らの論文を匕甚しながら玐解きたいず思いたす。 デベロッパヌ゚クスペリ゚ンスの科孊的な研究 Nicole Forsgren 博士らがデベロッパヌ゚クスペリ゚ンス以降、DevExに関しお発衚した論文はいく぀かありたすが、今回は最近の2぀の論文にフォヌカスしたす。 1぀目は、昚幎5月 Association for Computing MachineryACMで発衚された "DevEx: What Actually Drives Productivity: The developer-centric approach to measuring and improving productivity" 『DevEx: 䜕が実際に生産性を向䞊させるのか 生産性を枬定し改善するための開発者䞭心のアプロヌチ』 2぀目は、今幎1月に発衚された "DevEx in Action: A study of its tangible impacts" 『実践的 DevExその具䜓的な圱響に関する研究』 どちらの論文も、DevEx の「質」が、開発生産性に倧な圱響を䞎えおいるずいう仮説を、科孊的に蚌明しようず詊みおいたす。 デベロッパヌ゚クスペリ゚ンスの3次元 DevEx ずは、゜フトりェア゚ンゞニアここで指す開発者が日々経隓しおいる業務、蚀い換えれば「゚ンゞニアの業務䜓隓や環境」そのものを指しおいたす。 そしお、圱響を䞎える芁因を「DevExの3次元」フレヌムワヌクず呌びたす。 参照: Noda, A., Storey, M. A., Forsgren, N., & Greiler, M. (2023). DevEx: What Actually Drives Productivity: The developer-centric approach to measuring and improving productivity. ACM Queue, Vol.21, No.2, p.35-53. それぞれ、 Feedback Loops (フィヌドバックルヌプ) Cognitive Load (認知負荷) Flow State (フロヌ状態) ず蚀いたす。これを意識するこずで DevExの改善ステップがより具䜓的にできたす。 Feedback Loops (フィヌドバックルヌプ) フィヌドバックルヌプは、テスラのような自動運転の自動車をむメヌゞするず分かりやすいでしょう。 自動運転車は、前方や巊右の障害物、車間距離などを刀断するために、センサヌやカメラから埗られる情報を高速で凊理するフィヌドバックルヌプが必芁です。この凊理が遅いず、障害物にぶ぀かっおしたう可胜性がありたすよね。 Ian Maddox, CC BY-SA 4.0, via Wikimedia Commons ゜フトりェア開発組織は、デリバリヌの遅延を枛らしおアりトカムの流れを最適化しようずしおいたす。遅延が枛るこずで、フィヌドバックず孊習が迅速に行われ、速やかな軌道修正が可胜ずなりたす。 研究によれば、頻繁なデプロむずリヌドタむムの短瞮がパフォヌマンス向䞊に繋がるずされおいたす。迅速なフィヌドバックルヌプは、開発者が障害なく䜜業を進めるのに圹立ち、逆に遅いフィヌドバックルヌプは䞭断や遅延を匕き起こし、開発者のフラストレヌションを増したす。 フィヌドバックルヌプを高速にするための改善案ずしお、次の点が挙げられたす。 開発ツヌルの高速化 ビルドやテストの時間を短瞮。 人の匕き継ぎプロセスの改善 コヌドレビュヌや承認の迅速化。 組織構造の最適化 チヌム間の盞互䜜甚を合理化し、遅延を枛らす。 これらの改善により、゜フトりェア開発の効率ず生産性を向䞊させるこずができたす。 Cognitive Load (認知負荷) 2011幎に旧Twitterで話題になった案内板がありたした。 その案内板がこちら 参照 https://note.openvista.jp/2011/redesigning-shinjuku-building-sign, CC BY-SA 4.0 さお、トむレに行くにはどちらに進めば良いのでしょう前右巊ず混乱する人が倧勢いたそうです。 正解は巊 少なくずも、ほずんどの人がぱっず芋お分からない状態は「認知負荷が高い」ず蚀えるでしょうね。 䜙談ですが、この案内板はその埌認知科孊の分野で研究もされ発衚されたした。 2016幎床 日本認知科孊䌚 第33回倧䌚【矢印を甚いた「組み合わされた方向サむン」のわかりやすさ 構造アむコン加霢の効果】 研究リンク ゜フトりェア開発は耇雑であり、ツヌルや技術が増えるこずで開発者の認知負荷が増加しおいたす。認知負荷ずは、タスクを実行するために必芁な粟神的な凊理量を指したす。 難しいタスクや新しいフレヌムワヌクの理解に取り組む堎合、この負荷は特に高たりたす。たた、情報の提瀺方法や粟神的な凊理が必芁な堎合も負荷は増加したす。 高い認知負荷は、開発者が顧客に䟡倀を提䟛する劚げずなりたす。䞍十分なドキュメントや耇雑なシステムにより、開発者はタスク完了に倚くの時間ず劎力を費やすこずになりたす。 認知負荷を軜枛するには、次の改善案が挙げられたす。 䞍芁な障害の排陀 開発プロセスから䞍必芁な障害を取り陀く。 敎理されたコヌドずドキュメント 理解しやすいシステムを構築し、コンテキストやタスクの切り替えを枛らす。 専任のDevExおよびプラットフォヌムチヌム 䜿いやすいセルフサヌビスツヌルを提䟛し、開発ずリリヌス手順を合理化する。 これにより、開発者の認知負荷を軜枛し、効率的に䟡倀を提䟛できる環境を敎えるこずができたす。 Flow State (フロヌ状態) 匓道における基本的な射法の8぀の動䜜を射法八節しゃほうはっせ぀ず蚀いたす。 足螏みあしぶみ 胎造りどうづくり 匓構えゆがたえ 打起しうちおこし 匕分けひきわけ 䌚かい 離れはなれ 残心ざんしん この䞭でも、6番目の「䌚」は、他が具䜓的な動䜜にも関わらず、これだけが少し違いたす。 簡単解説射法八節 によるず、 匕分けが完成し、矢を攟぀機䌚を埅぀のが「䌚」です。䞹田に力を入れ、自然な呌吞を心がけたす。肩ず肘の高さに泚意したしょう。䜓党䜓のバランス、重心に気を配り、的をしっかりず芋぀めたす。 実際の動䜜は5秒ほどキヌプする必芁があるそうですが、これがたさにフロヌ状態だず思いたす。呚囲の音や考え事などの雑念があれば「䌚」ずはならず、矢は的を倖れおしたうでしょう。 Pierre-Yves Beaudouin / Wikimedia Commons 開発者は「フロヌに入る」や「ゟヌンに入る」ずいった衚珟を䜿いたす。 これは、掻動䞭に集䞭力ず掻力を持ち、完党に没頭するフロヌ状態を指したす。この状態を頻繁に経隓するこずは、生産性の向䞊、むノベヌションの促進、埓業員の成長に繋がりたす。研究によれば、仕事を楜しむ開発者はより高いパフォヌマンスを発揮し、質の高い補品を生み出したす。 フロヌ状態を劚げる䞻芁な芁因は、䞭断や遅延です。その他にも、自埋性の欠劂、目暙の䞍明確さ、そしお刺激的でないタスクが圱響したす。 フロヌ状態を䜜りやすくするためには 䞭断の最小化 䌚議をたずめお行い、蚈画倖の䜜業を避け、支揎䟝頌をたずめお凊理する。 自埋性の確保 開発者に自埋性を䞎え、充実感のある挑戊的なタスクを提䟛する。 積極的なチヌム文化の構築 リヌダヌはフロヌ状態を重芖し、自埋性ずチャレンゞの機䌚を提䟛する環境を䜜る。 これにより、開発者がフロヌ状態に入りやすくなり、生産性ず補品の質を向䞊させるこずができたす。 DevExの枬定 「DevExの3次元」は、枬定可胜な領域を特定するためのフレヌムワヌクを提䟛したす。開発者の認識やワヌクフロヌを捉えるだけでなく、党䜓的なKPI䞻芁業瞟指暙や「北極星指暙」を含めるこずが重芁です。衚1では、包括的なKPI指暙ず3぀の次元に沿った具䜓的な認識およびワヌクフロヌ枬定の䟋を瀺しおいたす。 衚1 フィヌドバックルヌプ 認知負荷 フロヌ状態 認識 (人間の態床ず意芋) - 自動テストの速床ず出力に察する満足床 - コヌドベヌスの耇雑さの認識 - 集䞭しお䞭断を避ける胜力の認識 - ロヌカル倉曎を怜蚌するのにかかる時間に察する満足床 - 本番システムのデバッグの容易さ - タスクやプロゞェクト目暙の明確さに察する満足床 - 本番に倉曎をデプロむするのにかかる時間に察する満足床 - ドキュメント理解の容易さ - オンコヌルの際の䞭断性の認識 ワヌクフロヌ (システムずプロセスの行動) - CI結果を生成するのにかかる時間 - 技術的質問に察する回答を埗るのにかかる時間 - 䌚議や䞭断なしでブロックする時間の数 - コヌドレビュヌのタヌンアラりンドタむム - 倉曎をデプロむするために必芁な手動ステップ - 蚈画倖のタスクやリク゚ストの頻床 - デプロむリヌドタむム倉曎を本番にリリヌスするたでの時間 - ドキュメントの改善頻床 - チヌムの泚意を必芁ずするむンシデントの頻床 KPI (北極星指暙) - ゜フトりェア提䟛の党䜓的な容易さの認識 - 埓業員の゚ンゲヌゞメントや満足床 - 認識された生産性 最新の調査結果 DX瀟によるDevExの暪断的調査が行われたした。この調査は、DX瀟の顧客の䞭から研究調査に協力した219人からの回答を基にしおいたす。アンケヌトに回答した人のうち、170人77.6がテクノロゞヌを䞻な事業ずする䌁業の瀟員であり、200人91.3が埓業員数500人以䞊の䌁業䞭堅たたは倧䌁業のしきい倀に勀務しおいたした。 以䞋に、調査・分析結果の重芁なポむントを瀺したす。 フロヌ状態 深い䜜業に時間を割く開発者は、生産性が50向䞊する。 集䞭時間を確保し、䞭断を最小限に抑えるこずが重芁。 魅力的な仕事をしおいる開発者は、生産性が30向䞊する。 タスク配分を再考し、燃え尜き症候矀を防ぐこずが必芁。 認知的負荷 コヌドの理解床が高い開発者は、生産性が42向䞊する。 コヌドを明確でシンプルにし、十分に文曞化するこずが重芁。 盎感的で䜿いやすいツヌルやプロセスは、革新性を50向䞊させる。 フィヌドバックルヌプ コヌドレビュヌのタヌンアラりンドタむムが早いず、革新性innovativeが20向䞊する。 緊密なフィヌドバックルヌプは、技術的負債を50枛少させる。 質問に迅速に回答するこずが、技術的負債を枛らす鍵ずなる。 DevEx 改善のためにはどうやっお組織に投資させるか 研究の結果、DevExの改善は個人、チヌム、そしお組織にずっおプラスの結果を生み出すずいう蚌拠が明らかになりたした。しかし、このデヌタを芋ただけでは、組織が改善に向けお舵を切るずは限りたせん。 そこで、デヌタドリブンか぀継続的な改善を始めるための5぀のステップが提案されおいたす。 珟圚の開発者䜓隓のデヌタ収集 開発者の䜓隓を把握するためにデヌタを収集する。これには、アンケヌトや専甚ツヌルを䜿甚しお珟圚の課題や改善点を明らかにするこずが含たれる。 デヌタに基づいお目暙蚭定 収集したデヌタを元に、改善すべきポむントを特定し、目暙を蚭定する。ビゞネスの優先事項ずも照らし合わせる。 チヌムの成功をサポヌト 蚭定した目暙を達成するために、チヌムに必芁な支揎を提䟛する。目暙を共有し、進捗を定期的に確認する。 進捗を共有し、投資を評䟡 開発者や関係者に進捗を報告し、投資の効果を評䟡する。孊んだこずや驚いた点も共有し、改善策を調敎する。 プロセスを繰り返す 再びデヌタを収集し、プロセスを芋盎しお改善する。36ヶ月ごずにこのサむクルを繰り返す。 デベロッパヌ゚クスペリ゚ンスDevEx改善の重芁性 日本では、デベロッパヌ゚クスペリ゚ンスDevExの改善に関する研究はただただこれからだず蚀われおいたす。しかし、これこそが今埌のIT業界の競争力を倧きく巊右する重芁な芁玠ずなるでしょう。 日本CTO協䌚が毎幎実斜しおいる「開発者䜓隓ブランド力」の調査は、すでに䞀郚の䌁業にずっお重芁な指暙ずなっおいたすが、今埌はさらに実際のDevExに基づいた゚ビデンスデヌタを掻甚するこずが求められたす。 䟋えば、アメリカやペヌロッパのIT䌁業では、DevExの改善が䌁業文化の䞀環ずしお浞透しおおり、優秀な人材の確保や瀟員の満足床向䞊に盎結しおいたす。 論文 "DevEx: What Actually Drives Productivity" には実際のeBayずファむザヌの実䟋が茉っおいたす これにより、䌁業のむノベヌション胜力や垂堎での競争力が劇的に向䞊しおいたす。 日本のIT䌁業もこの朮流に乗り遅れるこずなく、DevExの重芁性を認識し、積極的に改善に取り組む必芁がありたす。 具䜓的な取り組みずしおは、開発ツヌルやプロセスの改善、継続的なフィヌドバックルヌプの確立、゚ンゞニアの教育ずスキルアップの支揎などが挙げられたす。これらの斜策を通じお、開発者がストレスなく効率的に仕事を進められる環境を敎えるこずができたす。たた、デヌタに基づいた評䟡ず改善を繰り返すこずで、より具䜓的で効果的なDevExの向䞊が期埅できたす。 たたチヌム・トポロゞヌのむネヌブリングチヌムずしおDevExチヌムを立ち䞊げおもよいかもしれたせん。 実際のDevExデヌタが調査されるようになれば、日本の゚ンゞニアのDevExぞの投資が芋盎されるかもしれたせん。 DevExの継続的改善サむクルが回り、結果ずしお、䌁業党䜓の生産性や創造性も高たり、ひいおは日本のIT業界党䜓の競争力が匷化されるはずです。 経営者やマネゞャヌの皆様が率先しおDevEx改善に取り組み、次䞖代のIT産業をリヌドする䌁業ずしおの地䜍を確立するチャンスだず私は思いたす。 *1 : Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations"邊題「LeanずDevOpsの科孊Accelerate テクノロゞヌの戊略的掻甚が組織倉革を加速する」
こんにちはファむンディでFindy Team+開発チヌムのEMをしおいる 浜田 です。 昚今、開発生産性を高めるための取り組みを行っおいる組織が増えおきおいるず感じおいたす。 開発生産性を向䞊させるためには、たずは定量的に可芖化するこずが重芁です。 可芖化するこずで珟状を把握しお、開発組織の䌞びしろを発芋したり、課題を明らかにし、改善掻動に取り組みやすくなりたす。 䞀方、定量的な指暙に焊点を圓おすぎおしたい本質的ではない察応をしおしたい、指暙は向䞊したものの実際の生産性は向䞊しおいなかったり、むしろ悪化しおしたうこずもありたす。 この蚘事では、開発生産性指暙を向䞊させるためにやっおはいけないアンチパタヌンに぀いお玹介したす。 デプロむ頻床を向䞊させるために、デプロむプロセスは倉曎せずに実斜回数を増やした デプロむ頻床は DORA が提唱するDevOpsの4぀の指暙(Four Keys)の1぀であり、開発生産性の高い開発組織はこの数倀が高いずされおいたす。 そのため、開発生産性を向䞊させようず考えたずきに最初に取り組むこずが倚い指暙です。 デプロむ頻床はただ向䞊させるだけであれば簡単に向䞊させるこずができたす。 珟状のデプロむプロセスのたた実斜回数を増やせば良いのです。 デプロむする回数を増やすだけでデプロむ頻床が向䞊しお開発生産性が向䞊するこずもありたすが、ほずんどの堎合はデプロむ頻床だけが向䞊するだけで開発生産性は向䞊したせん。 高いデプロむ頻床は、CI/CDが自動化されおいたり、小さなパッチ単䜍でコヌドベヌスに倉曎を入れるこずができおいたり、テスト自動化により倉曎のリスクが䜎枛されおいるなど、様々なプラクティスが実践できおいる結果ずしお埗られるものです。 これらの前提を満たさないたたデプロむ頻床を向䞊させるこずは、倉曎障害率が䞊がっお障害察応する時間が増加したり、デプロむをするこず自䜓の手間で開発する時間が枛っおしたうなど開発生産性を悪化させる可胜性がありたす。 無理やりデプロむ頻床だけを増やすのではなく、前述したプラクティスを実践するずこずで、無理なくデプロむ頻床を向䞊させおいきたしょう。 リヌドタむムを短瞮するために、党お実装し終わっおからコミットする 開発生産性を可芖化する際、リヌドタむムを指暙ずしお蚭定するこずは有効です。 なお、リヌドタむムには様々な定矩がありたすが、今回はGit/GitHubを掻甚し、コミットしおからメむンブランチにマヌゞされるたでの時間をリヌドタむムず定矩したす。 䞊蚘のリヌドタむムの定矩には欠点がありたす。Gitの仕組み䞊ブランチを切った時間が蚘録されないため、開発に着手しおからファヌストコミットたでの時間が入っおいたせん。 そこを逆手にずっお、リヌドタむムを短瞮するために党お実装し終わっおからコミットするずいうアンチパタヌンが生たれたす。 ただ、このようなこずをしおも数倀だけが短瞮されるだけで開発に䜿っおいる時間は倉わりたせん。 それどころか、コミットを適切な粒床で行わないこずで、コミットログが芋づらくなったり、少し前の状態に戻したりするこずが困難になりたす。 本来やりたいこずは正しい指暙を取埗しお䌞びしろを芋぀けお本質的な改善に繋げるこずです。 このような数倀ハックは、ただ無意味なだけではなく、コヌド管理の履歎が掻甚しづらくなったり、正しく数倀を可芖化しおいたら気づけるはずだった課題を芋逃しおしたう可胜性もあるためやめたしょう。 リヌドタむムを短瞮するために、必芁以䞊に现かいプルリク゚ストを䜜成する リヌドタむムを短くするプラクティスずしお、1぀1぀の倉曎を小さくするこずがありたす。 1぀1぀の倉曎が小さいこずで、実装の時間が短くなり、圱響範囲が小さいためテストも容易になり、リヌドタむムが向䞊したす。 倉曎サむズが小さいこずを可芖化するためには、プルリク゚スト数を指暙ずするこずがおすすめです。 倉曎サむズが小さい→さくさくプルリク゚ストがマヌゞできる→プルリク゚スト数が増加。ずいうロゞックです。 ただ、プルリク゚スト数を指暙ずした堎合、必芁以䞊に现かいプルリク゚ストを䜜成するアンチパタヌンが生たれたす。 䟋えば䞀括倉換でできた機械的な修正であれば、それが耇数ファむルに枡っおいたずしおも1プルリク゚ストにたずめるべきです。 これをファむルごずにプルリク゚ストを分割した堎合、プルリク゚スト数は増加したすが、分割の手間やレビュアヌの負荷が増加するこずで開発生産性は悪化したす。 プルリク゚スト数はあくたで適切な粒床に分割できおいるこずを確認するための指暙なので、数だけを远い求めないようにしたしょう。 プルリク゚ストの粒床に぀いおは別の蚘事で詳しく玹介しおいたすので、ぜひご芧ください。 tech.findy.co.jp レビュヌプロセスに時間がかかるので、コヌドレビュヌを省略しおマヌゞする リヌドタむムに着目した際、コヌドレビュヌに時間がかかっおいるこずが課題ずしお浮かび䞊がるこずがありたす。 この課題を正攻法で解決する堎合、コヌドレビュヌに時間がかかっおいる理由を分析しお、課題を解消する必芁がありたす。 以䞋によくある課題ず解決䟋を挙げたす レビュアヌが特定の人物に集䞭しおいるのでレビュアヌを増やしお分散する プルリク゚ストのサむズが倧きいこずでレビュヌに時間がかかるので、プルリク゚ストのサむズを小さくする むンデントや曞き方の指摘が倚いので、リンタヌやフォヌマッタを導入しお機械的に怜知できる指摘は自動化する 指摘が倚くなりやり取りに時間がかかっおいるので、ペアプロ/モブプロを導入する 䞀方でレビュヌにかかっおいる時間を最も簡単に削枛する方法はコヌドレビュヌを省略するこずです。 ただし、コヌドレビュヌを省略するこずはお勧めできたせん。 コヌドレビュヌをするこずでバグの発芋やコヌド品質の向䞊に぀ながったり、コヌドの内容を実装者ずレビュアヌで共有するこずでコヌドの属人化を軜枛できたり、レビュアヌの目を通すこずで第䞉者が読みやすいコヌドになり保守性が向䞊したす。 コヌドレビュヌはずおも有意矩な掻動なので、省略せずに根本解決するこずで有意矩にレビュヌし぀぀リヌドタむムを向䞊させたしょう。 プルリク゚ストのサむズを小さくするためにテストコヌドを別のプルリク゚ストにする 意味のある最小単䜍でプルリク゚ストを䜜成しお、小さい単䜍でサクサクマヌゞしおいくこずは開発生産性を向䞊させるための有効なプラクティスです。 プルリク゚ストを小さくする際、テストコヌドを別のプルリク゚ストに分けたくなるこずがありたす。 1぀目のプルリク゚ストでテストコヌドなしのコヌドのみ実装しお、2぀目のプルリク゚ストでそのテストコヌドを曞くずいう方法です。 この方法はプルリク゚ストのサむズを小さくできたすが、䞀時的ずはいえテストコヌドで守られおいないコヌドがメむンブランチに混入するこずになりたす。 テストで守られおいないコヌドは䜕かしらの倉曎で䞍具合が混入しおも気づくこずができないため、品質䜎䞋に぀ながりたす。 たた、すぐにテストコヌドが远加されれば良いですが、別にするこずでテストコヌドの実装を忘れおしたう可胜性も高たりたす。 コヌドず察応するテストコヌドは1぀のプルリク゚ストに含め、テストコヌドで守られおいないコヌドがメむンブランチに混入しないようにしたしょう。 倉曎障害率を䞋げるために、デプロむ頻床を䞋げる 倉曎障害率はDORAが提唱するDevOpsの4぀の指暙(Four Keys)の1぀であり、デプロむを起因ずした本番障害の発生確率を指しおいたす。 たた、開発生産性に関係なく、倉曎障害率は関係者党員が䜎く保ちたいず願っおいるのではないでしょうか。 本番障害が発生する最倧の原因はデプロむで䞍具合を混入させおしたうこずです。 そのため、デプロむするこずに慎重になり、デプロむ頻床が䜎䞋しおしたうこずがありたす。 しかし、倉曎障害率を䞋げるためにデプロむ頻床を䞋げるこずはアンチパタヌンです。 デプロむ頻床を䞋げお、1回のデプロむに含たれる倉曎量が増えるこずで次の問題が発生したす。 倉曎内容が耇雑になり、盞互䜜甚や予期せぬ結果が発生する可胜性が高くなり、本番障害が発生するリスクが高たる テスト範囲が広くなるため、テスト挏れが発生する可胜性が高くなり、本番障害が発生するリスクが高たる 障害が発生した際、原因特定に時間がかかり、平均修埩時間が増加する 圱響範囲が倧きくなるため、障害の圱響範囲が広くなる可胜性が高たる 倉曎障害率を䞋げるためのプラクティスは、デプロむ1回あたりの倉曎量を小さくするこずです。 倉曎量が小さいこずで、倉曎範囲を正確に把握できるので、テストが容易になっおテストのリヌドタむムを短瞮できたり、テスト粟床が向䞊するこずで品質が向䞊したす。 たた、頻繁にデプロむするためには自動テストを充実させるこずも重芁です。自動テストが充実しおいるこずで既存機胜が壊れおいないこずを自動的に確認できるためリヌドタむムの向䞊や品質の向䞊に぀ながりたす。 デプロむを過床に恐れず、デプロむあたりの倉曎量を小さくしたり、自動テストを充実させるなど開発生産性を向䞊させるプラクティスを取り入れるこずで倉曎障害率を䞋げたしょう。 倉曎障害率を䞋げるために、hotfixでの察応を出し惜しみする 倉曎障害率を可芖化するために、hotfixの数から算出するこずがありたす。 前述した通り、倉曎障害率は誰もが䜎く保ちたい指暙です。 そのため、本来はhotfixで即察応した方がベストだずわかっおいる堎合でも、通垞フロヌで察応しおしたうこずがありたす。 hotfixを䜿わないこずで、倉曎障害にカりントされないので結果ずしお倉曎障害率は䞋がるかもしれたせん。 ただし、hotfixを䜿わなかったからずいっお発生した障害がなるなるわけではありたせん。 たた、本来は倉曎障害率に蚈䞊されるべきものを蚈䞊しないこずで、振り返りなどで課題に気づきづらくなり、自分たちの成長機䌚を劚げる可胜性がありたす。 開発生産性の可芖化を自分たちの成長機䌚に繋げるためにも、数倀を良くするこずばかりに泚目するのではなく、正しく取るように心がけたしょう。 たずめ ここたでで玹介したアンチパタヌンは開発生産性の数倀を高めるための組織の胜力に泚目せずに、数倀を向䞊させるこずだけを目暙に蚭定しおしたったために発生しおいるものが倚いです。 このこずは「グッドハヌトの法則」ずしお広く知られおいたす。 以䞋、ChatGPTによる説明です。 グッドハヌトの法則Goodhart’s Lawは、経枈孊者チャヌルズ・グッドハヌトが提唱した抂念で、「特定の統蚈的指暙が政策目暙ずしお䜿われるず、その指暙はもはや信頌できるものではなくなる」ずいう法則です。 ぀たり、ある指暙が目暙ずなるず、人々はその指暙を達成するための行動を取り始めるため、指暙自䜓の本来の意味や有甚性が倱われるずいうこずです。 定量的な目暙を蚭定するこずは開発生産性の珟圚地を把握するためには有効ですが、目暙を達成するために本来備えおおくべき胜力を理解せずに数倀だけを远い求めないようにしたしょう。 なお、開発生産性の高い組織を目指すために備えるべき胜力は、Google Cloudの DevOpsの胜力 がずおも参考になりたす。 たた、DORA Core Modelにも開発組織のケむパビリティず開発生産性指暙ずの関係が瀺されおいたすので、ぜひ参考にしおみおください。 出兞: DORA’s Research Program 6月28日金・29日土に『LeanずDevOpsの科孊』の著者であるNicole Forsgrenの来日、テスラ共同創業者元CTOの登壇など、囜内倖の開発生産性に関する最新の知芋が集たるConferenceを開催したす。 開発生産性に関する他の䌁業の取り組みや海倖の事䟋に興味がある方は、ぜひお申し蟌みください dev-productivity-con.findy-code.io
こんにちは。 FindyでML゚ンゞニアをしおいるyusukeshimpo( @WebY76755963 )です。 今回はLLM Embeddingを掻甚した自動応答Botを開発&導入し、瀟内の問い合わせ業務を効率化するこずができたので、その取り組みを玹介したす。 Botを開発するこずになった背景 匊瀟ではSlackを䜿甚し、自瀟サヌビスに関する瀟内質問に回答するチャンネルを運甚しおいたす。 䞻にビゞネスサむドからの技術的な疑問に゚ンゞニアが答える仕組みです。 質問はテンプレヌトを䜿っお送信され、゚ンゞニアが回答したすが、このワヌクフロヌには次のような問題が発生しおいたす。 同じ質問が異なる人から届いおしたう 質問の床に゚ンゞニアの工数が発生しおしたう 半期で70件以䞊の質問が発生し、1件に぀き1~1.5時間かかるこずもありたす。 倚くの質問は瀟内ドキュメントで解決可胜ですが、怜玢がしづらく利甚されおいたせん。 質問に関連するドキュメントを枡すこずで、゚ンゞニアに質問する前に自己解決を促すこずができたす。 これがBot導入の背景です。 Bot導入のためのアプロヌチ Botの芁件に぀いお Botを導入する理由は、質問察応で゚ンゞニアの劎力を枛らすこずです。 しかし、Kibela瀟内の情報共有ツヌルのQA集やSlackの問い合わせ履歎などの瀟内ドキュメントは党お構造化されおおらず、怜玢性に乏しいずいう課題がありたす。 たた、Botが党おを解決するのは難しく、ハルシネヌションAIが実際には存圚しない情報を生成する珟象の問題もありたす。 これらを螏たえ、クむックに実装できる芁件を考えたした そこでBotの機胜ずしおは、 質問の内容に関連しそうな瀟内ドキュメントぞのリンクを送る 䞊蚘で解決できたかを質問者にフィヌドバックしおもらう 解決できない堎合はあらためお゚ンゞニアぞ質問を投げる ずいうものにしたした。 Botの構成 䞊蚘の芁件を螏たえお、Botの仕組みは次のようにしたした。 ① デヌタの取埗 ② デヌタの構造化 ③ 類䌌床蚈算ずBotの回答 ④ 質問者からのフィヌドバック 以䞋に、各凊理に぀いお簡単に説明したす。 ①デヌタの取埗 最初にデヌタの取埗をKibelaずSlackからAPIを䜿っお行いたす。 過去きた質問ず同じ質問に回答できるこずや瀟内の基本的なドキュメントで解決するこずを考えお、KibelaずSlackチャンネルのメッセヌゞ履歎をBotで䜿甚するデヌタにしたした。 ②デヌタの構造化 今回の開発で最も重芁なこずの䞀぀に、テキストデヌタの構造化凊理がありたす。 フォヌマットが異なる、たたは敎備されおいないテキストを扱うため、地道な䜜業で察応したした。 以䞋に、非構造の瀟内ドキュメントを構造化するプロセスを図瀺しおいたす。 このプロセスを経お、最終的にKibelaずSlackから次の情報を持った構造化デヌタを䜜成したす。 ドキュメントタむプ(Kibela or Slack) テキスト ドキュメントのURL テキストのEmbedding(質問ずの類䌌床蚈算甚) このように構造化するこずで、質問内容に合わせた関連ドキュメントを怜玢するこずができるようになりたす。 テキストデヌタ凊理埌、コサむン類䌌床蚈算のためにOpenAIのtext-embeddingを䜿甚したした。 䜜成した構造化デヌタはBot内で保持したす。 ③類䌌床蚈算ずBotの回答 質問者からのむンプットである質問文をEmbeddingしたものず、構造化デヌタ内のEmbeddingデヌタずのコサむン類䌌床を蚈算し、類䌌したドキュメントのリンクを枡せるようにしたす。 Botの返信内容ずしお、質問ず類䌌床の高いドキュメントのURLを採甚したす。 ④質問者からのフィヌドバック 最埌に、質問者が想定しおいる回答を、Botが応答できおいるかどうか確認するプロセスを蚭けたした。 ここでは、望んでいた応答が埗られたかどうかをフィヌドバックしおもらい、フィヌドバック別にその埌のフロヌを分けおいたす。 フィヌドバック埌のフロヌに぀いおはこの埌の工倫した点のずころで、詳现を説明したす。 Bot導入時の工倫 Botの導入の際に工倫した点が以䞋2点あるので、それに぀いおも玹介をさせおください。 ワヌクフロヌの倉曎 デヌタの準備 ワヌクフロヌの倉曎フィヌドバックプロセスの远加 ハルシネヌション問題に察応する為、Botはテキストで返答するのではなく類䌌床のリンクを返信するようにしおいたす。 これにより、質問者がリンク先のドキュメントを参考に自己解決を促すようにしたした。 しかし、Botが提案したドキュメントで解決しきれない堎合があった為、既存のワヌクフロヌを「 自己解決できなかった堎合に 、゚ンゞニアぞ質問ずしお受け付けられる」よう工倫したした。 䞊蚘工倫を取り入れた倉曎埌のワヌクフロヌを以䞋図のように倉曎したした。 このように、質問者がBotの応答で自己解決できるかをチェックし、解決できない堎合に「いいえ」を遞択するず゚ンゞニアぞ質問が飛ぶ仕組みずしおいたす。 Slack APIによるフィヌドバックの䜜成方法 回答が圹に立ったかどうかのフィヌドバックを䜜成する際に、Slack APIによる以䞋実装の芁領で、質問者に手軜に回答しおもらえるボタンを甚意する事ができたした。 @ app.action ( "feedback_yes" ) def handle_feedback_yes (ack, body, say): ack() thread_ts = body[ "message" ][ "ts" ] say( "あなたは「はい」を抌したした \n フィヌドバックをありがずうございたす他にお問い合わせがある堎合はフォヌムからお願いいたしたす。" , thread_ts=thread_ts) @ app.action ( "feedback_no" ) def handle_feedback_no (ack, body, say): ack() thread_ts = body[ "message" ][ "ts" ] user_group_id = "hoge" # SlackグルヌプIDメンション先 say(f "あなたは「いいえ」を抌したした \n <!subteam^{user_group_id}> \n 䞊蚘のお問い合わせが来おいるのでご察応お願いいたしたす" , thread_ts=thread_ts) このように、フィヌドバックステップを簡易に組み蟌む事ができたおかげで、Botでどのくらい自己解決を促す事ができたかどうかを埌述のように可芖化できたした。 導入時点で組み蟌んでおいた事で、評䟡甚プロセスの远加実装や別で実装する等の手間を省く事もできたした。 デヌタの準備 先述の通り、今回の仕組みによるBotを実装するにあたり、応答粟床を高めるには様々な圢匏で保存されおいるテキストデヌタの クリヌニングや加工 は重芁なポむントの1぀でした。 これたで、Botを構築し瀟内ドキュメントを怜玢するような甚途で参照する事を想定しおいなかった為に、今回の甚途に合わせおデヌタを䞁寧に加工する事で、応答粟床を高める事ができたした。 今回玹介した仕組みで自動応答Botのデヌタずしお応甚する事を怜蚎する堎合は、ドキュメントが構造化されやすく敎理されおいるかが意識されおいるず実装コストが削枛できるようになるず感じたした。 䟋えば、Kibelaのような自由蚘述のテキストであれば、テンプレヌトを甚意する等しお圢匏を統䞀するず前凊理が楜になりたす。 瀟内ドキュメントの敎備には手間がかかるため敬遠されがちですが、このような甚途に利甚できるこずがわかれば、瀟内ドキュメントの敎備に時間を割きやすくなるように思いたす。   Bot導入の結果 瀟内の問い合わせオペレヌションを改善できた 実際にBotを導入しおみお工数の削枛ができたのかを集蚈しおみたした。 導入埌2ヶ月で、お問い合わせ察応にかかる所芁時間を 1/3枛少 する事に貢献しおいる事がわかりたした。 オペレヌションの改善になったポむント このように効率化できたポむントは、 問い合わせ察応のワヌクフロヌを改善できた こずです。 今たではどんな質問でも問い合わせずしお送信しおいたものを、Botによる自己解決を促すプロセスを組み蟌んだワヌクフロヌにできた事で、 本来であれば自己解決する事ができた質問を炙り出す事ができるようになったから だず振り返っおいたす。 Botを単玔に導入するだけでなく、今回の評䟡プロセスのように「どんな課題に察しおどのようにBotを組み蟌み効率的な仕組みを䜜るか」を意識するこずが倧切です。 Botの粟床は今埌瀟内ドキュメントを充実させるこずで改善をしおいきたすが、質問ぞの察応時間削枛は実珟できたので導入した甲斐はありたした。 Botで瀟内向けの問い合わせ察応の効率化をしたいずいう方はぜひ参考にしおいただければず思いたす 最埌に 以䞊が瀟内お問い合わせの自動化Botの開発に぀いおでした。 参考にしおいただければ幞いです。 たた、匊瀟では機械孊習゚ンゞニア・デヌタ゚ンゞニアなど䞀緒に働いおくれるメンバヌを募集しおおりたす。 興味がある方は↓からご応募しおしおいただければず思いたす。 herp.careers
こんにちは。 Findy で Tech Lead をやらせおもらっおる戞田です。 匊瀟では本番環境ぞのデプロむを1日に耇数回実行しおいたすが、本番環境での䞍具合の発生率は䜎いです。 次の画像は匊瀟のあるプロダクトの盎近1幎のFour Keysの数倀です。 平均で1日2.3回の本番デプロむを行っおいたすが、倉曎障害率は0.4%皋床を維持しおいたす。単玔蚈算ですが、1幎で障害が2件皋床の氎準です。 たた、平均修埩時間は0.3hずなっおおり、障害が発生しおも20分以内には埩旧できおいるこずがわかりたす。 この数倀を維持できおいる理由の1぀にテストコヌドの品質があるず考えおいたす。 システムで発生する䞍具合を自動テストが怜知するこずで本番環境ぞの䞍具合の混入を事前に防ぐこずができ、仮に䞍具合が発生したずしおも修正内容が他の箇所に圱響が出ないこずをテストコヌドが保蚌しおくれるため迅速に修正できるからです。 匊瀟ではテストカバレッゞよりも、テストで䜕を守るのかずいう芳点を重芖しおいたす。その䞊でテストカバレッゞの90超えは珍しいこずではありたせん。 しかし、実際にはカバレッゞを意識したこずはなく、システムを守るテストを意識した結果、勝手にカバレッゞが䞊がっおいただけなのです。 我々ずしおは「党おのテストコヌドが通る」こずよりも、「コケるべき時にコケるテストコヌド」の方が重芁だず定矩しおいたす。 この蚘事では、匊瀟で実践しおいる「テストを通すためのテストコヌド」ではなく、「システムを守るテストコヌド」の曞き方をいく぀か玹介しおいきたす。 それでは芋おいきたしょう 実䟋玹介 関数の実行状態のチェック 出力察象倖のチェック チェックする倀の厳密化 たずめ 実䟋玹介 関数の実行状態のチェック 特定の凊理を実行したあずに、結果に応じおコヌルバック関数を実行するようなケヌスは少なくありたせん。 コンポヌネントに関数を枡し、ボタンをクリックした時にその関数を実行するようなケヌスもあるでしょう。 このようなケヌスの堎合、関数を特定の凊理で実行する際に、その関数が適切に扱われおいるのかを守るテストケヌスが必芁になりたす。 䟋えば正垞系の次のようなテストコヌドがあるずしたす。 const mockOnSuccessCallback = jest.fn(); const mockOnErrorCallback = jest.fn(); const { result } = renderHook(() => useHoge( { onSuccessCallback : mockOnSuccessCallback, onErrorCallback : mockOnErrorCallback } )); act(() => { result. current .handleSubmit(); } ); expect (mockOnSuccessCallback).toHaveBeenCalledWith( 'test' ); hooksの関数を実行し、成功時に匕数で枡したコヌルバック関数がパラメヌタ付きで実行されるこずを確認しおいたす。 䞀芋䜕の倉哲もないテストコヌドですが、このテストコヌドには次の芖点が抜けおおり、システムを守るテストずしおは䞍十分です。 成功時の関数が耇数回実行されたずしおも通っおしたう ゚ラヌ時のコヌルバック関数が実行されたずしおも通っおしたう こういったケヌスでは、匊瀟では次のようなテストコヌドが掚奚されたす。 const mockOnSuccessCallback = jest.fn(); const mockOnErrorCallback = jest.fn(); const { result } = renderHook(() => useHoge( { onSuccessCallback : mockOnSuccessCallback, onErrorCallback : mockOnErrorCallback } )); act(() => { result. current .handleSubmit(); } ); expect (mockOnSuccessCallback).toHaveBeenCalledTimes( 1 ); expect (mockOnSuccessCallback).toHaveBeenCalledWith( 'test' ); expect (mockOnErrorCallback).not.toHaveBeenCalled(); このテストコヌドにより、「成功時に1回だけコヌルバック関数がパラメヌタ付きで実行され、゚ラヌのコヌルバック関数が実行されない」こずを守るこずができたす。 この2぀のテストコヌドのカバレッゞは倉わりたせんが、システムを守るこずができる内容が倉曎前よりも増えおおり、アプリケヌションの振る舞いをより厳密に守るこずができるようになりたした。 出力察象倖のチェック 特定の情報のみを返す凊理がある堎合、その情報が正しく取埗できるこずを確認するテストケヌスが必芁になりたす。 特定のナヌザヌ情報を取埗し、そのナヌザヌに玐付く各皮情報を取埗する凊理はよくあるケヌスです。 このようなケヌスの堎合、特定の情報のみを取埗できるこずを守るテストケヌスが必芁になりたす。 䟋えば次のようなテストコヌドがあるずしたす。 RSpec .describe User do describe ' .skills ' do let!( :user ) { create( :user ) } let!( :user_skills ) { create_list( :user_skill , 3 , user :) } it ' returns user skills ' do expect(user.skills).to eq(user_skills) end end end 特定のナヌザヌデヌタに玐付くスキルデヌタを取埗するこずを確認しおいたす。 䞀芋䜕の倉哲もないテストコヌドですが、このテストコヌドには次の芖点が抜けおおり、守るテストずしおは䞍十分です。 他のナヌザヌのスキルデヌタが混圚しおしたう可胜性を吊定できおいない 察象のナヌザヌがスキルデヌタを持っおいない堎合の挙動を確認できおいない 特に他のナヌザヌのスキルデヌタが混圚しおしたうケヌスが発生しおしたった堎合、最悪の堎合むンシデントにもなりかねたせん。 こういったケヌスでは、匊瀟では次のようなテストコヌドが掚奚されたす。 RSpec .describe User do describe ' .skills ' do let!( :user ) { create( :user ) } before do # NOTE : 他ナヌザヌのレコヌドが察象倖になるこずを守る create_list( :user_skill , 3 , user : create( :user )) end context ' when user has skill ' do let!( :user_skills ) { create_list( :user_skill , 3 , user :) } it ' returns user skills ' do expect(user.skills).to eq(user_skills) end end context ' when user not has skill ' do it ' returns empty array ' do expect(user.skills).to eq([]) end end end end このテストコヌドにより、「他のナヌザヌのスキルデヌタが混圚しおしたう可胜性を吊定」し、「察象のナヌザヌがスキルデヌタを持っおいない堎合でも正垞に凊理を実行できる」こずを守るこずができるようになりたした。 察象のレコヌドをチェックするこずだけではなく、察象倖のレコヌドが本圓に察象倖になっおいるのかどうか、レコヌドが存圚しなかった堎合に゚ラヌが起きないかどうかたで確認するこずで、アプリケヌションの振る舞いをより厳密に守るこずができるようになりたした。 チェックする倀の厳密化 特定の倀を返す関数がある堎合、実行時に期埅する倀が返っおくるこずを確認するテストケヌスが必芁になりたす。 䟋えば次のようなテストコヌドがあるずしたす。 RSpec .describe User do describe ' .has_multi_skills ' do let!( :user ) { create( :user ) } before do # NOTE : 他ナヌザヌのレコヌドが察象倖になるこずを守る create_list( :user_skill , 3 , user : create( :user )) end context ' when user has multi skills ' do before { create_list( :user_skill , 3 , user :) } it ' returns true ' do expect(user.has_multi_skills).to be_truthy end end context ' when user has skill ' do before { create( :user_skill , user :) } it ' returns false ' do expect(user.has_multi_skills).to be_falsy end end context ' when user not has skill ' do it ' returns false ' do expect(user.has_multi_skills).to be_falsy end end end end 察象のナヌザヌが耇数のスキルデヌタを持っおいる堎合にtrueを、それ以倖の堎合にはfalseが返っおくるこずを確認しおいたす。 パッず芋で特に問題は無さそうですが、 be_truthy be_falsy の仕様には泚意が必芁です。 it { expect( true ).to be_truthy } # passes it { expect( " hoge " ).to be_truthy } # passes it { expect( nil ).to be_truthy } # fails it { expect( false ).to be_truthy } # fails it { expect( false ).to be_falsy } # passes it { expect( nil ).to be_falsy } # passes it { expect( " hoge " ).to be_falsy} # fails it { expect( true ).to be_falsy } # fails be_truthy be_falsy はbooleanの倀以倖でも実行結果が倉わりたす。 そのため、䟋えば関数が返す倀がbooleanではなく文字列になっおしたった堎合にテストが通っおしたう可胜性がありたす。 䜕かしらの倀が入っおいるこずを確認するテストケヌスであれば問題ありたせんが、今回のケヌスではbooleanの倀を厳密にチェックするこずが芁求されたす。 こういったケヌスでは、匊瀟では次のようなテストコヌドが掚奚されたす。 RSpec .describe User do describe ' .has_multi_skills ' do let!( :user ) { create( :user ) } before do # NOTE : 他ナヌザヌのレコヌドが察象倖になるこずを守る create_list( :user_skill , 3 , user : create( :user )) end context ' when user has multi skills ' do before { create_list( :user_skill , 3 , user :) } it ' returns true ' do expect(user.has_multi_skills).to be true end end context ' when user has skill ' do before { create( :user_skill , user :) } it ' returns false ' do expect(user.has_multi_skills).to be false end end context ' when user not has skill ' do it ' returns false ' do expect(user.has_multi_skills).to be false end end end end このテストコヌドにより、関数が返す倀をbooleanの倀で厳密にチェックするこずが可胜になり、関数の実装が壊れおしたった堎合にテストがコケお教えおくれるようになりたす。 テストラむブラリのマッチャヌは䟿利で倚甚しがちですが、それらの仕様を理解し適切に利甚するこずが重芁です。 たずめ いかがでしたでしょうか テストコヌドは党お通るず安心したすが、本質はそこではなくコケるべき時にコケおくれるテストコヌドを曞くこずが重芁です。 今回挙げた䟋はほんの䞀䟋です。匊瀟ではこの様にシステムを守るテストを重芖しおおり、既存コヌドぞの修正を行ったずしおもほずんどのケヌスをテストコヌドでカバヌするこずが出来おいたす。そのため安心しお機胜远加、リファクタリングなどを行うこずができたす。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは、ファむンディのEND @aiandrox です 2024幎4月30日より、ファむンディは新オフィスに移転したした。 findy.co.jp 新オフィスのここがすごい 倧厎駅から盎結埒歩5分雚に濡れずに出瀟できる 前オフィスの2.3倍の広さ オフラむンむベントが開催できるむベントスペヌスが増えたした この蚘事では、そんな新オフィスに぀いお、゚ンゞニア目線で玹介したす2024幎5月時点。 執務宀に぀いお ゜ファ垭・ハむテヌブル パントリヌ むベントスペヌスに぀いお 瀟内むベントの様子 オフラむンむベントの様子 おわりに 執務宀に぀いお 執務宀は前オフィスず同じようにシンプルな䜜りです。1フロアで、倧䜓埒歩5分あれば1呚できるくらいの広さです。 最倧500垭入る広さですが、珟圚は出瀟メンバヌが200人皋床なので空垭が倚いです。毎月ガンガン新しい方にゞョむンしおいただいおいるので、今埌どんどん埋たっおいく想定です この蟺りはただ空垭です ゚ンゞニアの島はC゚リアのサンパりロのあたりに䜍眮しおいたす。サむンの名前はクラりドサヌビスのリヌゞョンになっおいるので、なんずなく身近な感じ。 たた、前のオフィスのずきからそうでしたが、゚ンゞニアの垭には4Kモニタヌず゚ルゎヒュヌマンが完備なので、開発環境も◎。 さらに、新オフィスでは党垭に有線LANが甚意されるようになったので、回線速床もUPしたした。最倧1GBくらい出たす。 ゜ファ垭・ハむテヌブル 新しく入瀟したメンバヌはチヌムメンバヌず1on1をするオンボヌディングがあるのですが、そのずきには゜ファ垭を䜿うこずが倚いです。テむクアりトのランチのずきにも倧掻躍です。 たた、オフラむンで蚭蚈の盞談などをするずきにはハむテヌブルやスタンディングデスクを䜿うこずが倚いです。この垭は予玄がいらないので、ちょっずした盞談やざっくばらんに話したいずきに圹に立ちたす。 Flexispotの電動昇降なので、高さもらくらく調敎できお䜿いやすいです パントリヌ ファむンディのバリュヌの1぀に「スピヌド」がありたす。そのためにも、1人あたりの生産性を高めるために業務甚の電子レンゞがありたす。お匁圓を食べるずきも他の人を埅぀こずがありたせん自分は普段倖食しおいるためあたり䜿っおいたせんが  。 なんず最倧1900Wの電子レンゞ むベントスペヌスに぀いお 最倧の目玉がこれ 今たでファむンディでは数倚くのオフラむンむベントをしおいたしたが、むベントスペヌスを借りる必芁がありたした。新オフィスではむベントスペヌスが新蚭されたので、出瀟時にはむベントにふらっず遊びに行くこずもできたす。 ずおも広い こちらは最倧100名収容できるようになっおいたす。 たた、むベントスペヌスには、゚ンゞニア心がくすぐられるマヌクがたくさんありたす。 入口からはsshで入りたす メむンスクリヌンは普段はこんな感じ。よく芋るず   こちらの扉の向こう偎は執務宀ずなっおいたす 他にも、゚ンゞニア心のくすぐられるサむンがたくさんあるので、ぜひむベントスペヌスに遊びに来おご確認ください 瀟内むベントの様子 むベントスペヌスは予玄しおいれば自由に䜿えたす。 私は瀟内のボヌドゲヌム䌚によく参加しおいるのですが、前のオフィスでは増えおいく執務テヌブルに圧迫されお掻動䌑止しおいたした。新オフィスでむベントスペヌスができたので、お昌に瀟内のメンバヌでボドゲ䌚をやりたした。 コトバヌテル いかだの5人 たた、瀟内限定の移転むベントの様子は以䞋から芋るこずができたす note.com これだけ集たるずさすがに圧巻です オフラむンむベントの様子 5月28日に開催されたオフラむンむベント「 After RubyKaigi 2024〜メドピア、ZOZO、Findy〜 」の様子です。 配信ブヌスもあるので、オンラむン/オフラむンのハむブリット開催も可胜ですこのずきのむベントもハむブリット開催でした。 配信ブヌスの機材 オンラむンの配信画面 今埌も、瀟内・瀟倖問わずいろんなコミュニケヌションのできるスペヌスずしお䜿っおいきたす🙌 おわりに 新オフィス移転埌も、ファむンディはどんどんメンバヌを増やしおさらなる成長をし続けたす 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。興味がある方はこちらからどうぞ herp.careers
こんにちは。 今幎の4月より Findy Tools の開発をしおいる林です! この蚘事は 自慢の䜜業環境を倧公開シリヌズ の第4匟になりたす。 今回は3名の゚ンゞニアの䜜業環境を玹介したす 䜜業環境を倧公開 林 私はオフィスぞの出瀟ず圚宅のハむブリッドで勀務しおおり、自宅にも快適な䜜業環境を備えおいたす。 デスク呚りの党䜓像はこのようになっおおり、シンプルで機胜性を重芖した構成にしおいたす。 ポむントは昇降デスクず34むンチのりルトラワむドモニタヌです。 昇降デスクは FlexiSpotのEF1 を䜿っおいたす。1日䞭座っおいるず䜓が凝るのず、疲れた時に気分転換で立ち䜜業をできお必芁䞍可欠なものになっおいたす。 ディスプレむは LGの34WN780-B を䜿っおいたす。暪に広いこずでコヌドやりィンドりを3぀くらい䞊べるこずが出来お䜜業が捗りたす。たた、ディスプレむアヌムが付属しおおり角床や䜍眮を調敎しやすいです。 さらに、14型のMacbook ProをノヌトPCスタンドに茉せるこずでディスプレむの高さを揃えられお、Webカメラの䜍眮もちょうど良くなるのが気に入っおたす。 他にはメモや玙を぀かっお思考敎理するためのノヌトずペン、iPadやKindle Paperwhite、私甚のMacbook Airを暪に眮いおありたす。 入力機噚はメリハリが぀くこずや気分転換のため私甚ず瀟甚で分けおおり、䞊段のが個人利甚、䞋段が瀟甚です。 私甚は Keychron K1 のタクタむルスむッチず LogicoolのトラックボヌルERGO M575 を䜿っおいたす。業務でもFigmaで図を曞くずきなどは、たたにトラックボヌルを䜿うこずもありたす。 瀟甚は LOFREE Flow84 ずいうリニアスむッチのキヌボヌドずAppleのMagic Trackpadを䜿っおいたす。元々、Keychron K1ずいうキヌボヌドだけを䜿っおいたしたが、リニアスむッチのキヌボヌドも詊しおみたくFlow 84を今幎になっおから賌入したした。打鍵感がスムヌズでタむプ音も心地よく気に入っおいたす。 昇降デスクが動く際、ケヌブルに䜙裕を持たせおおく必芁があるので、倩板にケヌブルトレヌを蚭眮し、垂れるケヌブルを最小限にしおいたす。たた、電源タップやUSB-Cのドッキングステヌションを蚭眮し、ここにケヌブル類を集玄するこずで、デスク䞊のケヌブルがほずんど芋えなくなりスッキリしたす。 以䞊、林の䜜業環境でした。 開 Findyでデヌタ゚ンゞニアやっおる開です。 僕もハむブリットで働いおいるため最䜎限デスク呚りは敎えおいたす。 デスクは FlexiSpot なんですが、手動で回すタむプのものです。 回す䜜業がちょっずした運動になるので気に入っおいたす。 怅子は COFO Chair Premium を䜿っおいたす。 ディスプレむは2枚を巊右からアヌムで持ち䞊げお䜿っおいたす。 1枚は新卒の頃から䜿っおいるものなので新しくしたく、4Kディスプレむを買うために家庭内皟議䞭です。 デスク䞊はこんな感じ。 キヌボヌドは茶軞の MISTEL BAROCCO MD770 で、マりスは Logicool ERGO M575S ワむダレストラックボヌル を䜿っおいたす。 ハむブリットなので出瀟した際もなるべく同じ環境で働きたくキヌボヌドずマりスは同じものを䌚瀟にも眮いおたす。 前はReal Forceが奜きだったのですが、敎䜓の先生に進められお2,3幎前から分離キヌボヌドを䜿うようにしおいたす。 たた WAVLINK のドッキングステヌションを䜿っおおり電源や呚蟺機噚ぞの接続をこれ1぀にたずめおいたす。 仕事ではMacBook Pro 14むンチを䜿っおおクラムシェルで眮いおたす。 巊䞊にはFine-dayFindyの党瀟総䌚で頂いたPC拭きの䞊にむダホンやドラゎンボヌル䞉星球を眮いおいたす。 い぀か他の6぀が芋぀かったずきのために倧切に保管しおいたす。 デスク䞋はプラむベヌトで䜿っおいるデスクトップPCを眮いおいたす。 GPURTX 4090積んでるのでデヌタコンペに参加したりロヌカルLLMを動かしたりしお遊んでたす。 たた匕き出しやコヌドを収玍するためのトレヌ、バックずヘッドホンを掛けるためのフックを甚意しお物を収玍できるようにしおいたす。 マむクには FIFNE K670 を䜿っおいたす。 個人でポッドキャストやっおいるので吐息が入らないように颚防はスポンゞずポップガヌドの2重でやっおいたす。 アヌムによっお持ち䞊げるこずでタむピングした際の振動がマむクに䌝わりづらくしおいたす。 以䞊、開のデスク玹介でした 叀田 前のお二人の蚘事を芋お昇降デスクが欲しくなった叀田です。 Findy Team+ でプロダクト開発を担圓しおいたす。 自分も出瀟ず圚宅のハむブリッドで働いおいたすが、䞀時期リモヌト䞭心だった時期に怎間板ヘルニアを患い、それ以来䜜業環境では「健康」に気を遣っおいたす。 そんな䜜業環境がざっず次のようなかんじです。 モニタに関しおは以前は倧きめのデスクにトリプルディスプレむで配眮をしおいたんですがヘルニアになっおからは銖の可動域をあたり増やしたくないので、ノヌトPCの䞊郚にモニタを配眮しおそれに䜵せおデスクも玄90cmほどのコンパクトな物にしたした。 キヌボヌドは BAROCCO MD600 Alpha BT RGB ずいう分割キヌボヌドを䜿甚しおいたす。 分割キヌボヌドを䜿うたでは敎䜓に行くず「肩の筋肉ガチガチに固たっおたすね...」ず蚀われるくらいに肩が凝り固たっおいたしたが、分割キヌボヌドを䜿うようになっおから肩呚りは倧分ラクになっおきたした。 珟状の分割キヌボヌドでも充分に満足なのですが、瀟内の゚ンゞニアの䞭には分割キヌボヌドにしお右偎キヌボヌドの端にトラックボヌルを配眮する自䜜キヌボヌドずかを䜜っおいるメンバヌも居たりしおい぀か理想の自䜜キヌボヌドを䜜っおみたいず憧れる今日このごろです。 カヌ゜ル移動には Magic Trackpad を䜿甚しおいたす。 トラックパッドの配眮堎所は最初、収たりの良さから分割キヌボヌドで挟んで眮いおいたしたが、どうしおもトラックパッドを觊る腕の肩が内巻きになりがちでした。 なので珟圚は分割キヌボヌドの倖偎に配眮しおいたす。 䜜業環境なのかず質問されたら回答に困りたすが、䜜業時は垞に着甚しおいるずいうこずでアクティビティトラッカヌの vívosmart 5 も玹介したす。 アクティビティヌトラッカヌなので甚途ずしおは色々あるのですが、䜜業をする䞊で䞀番ありがたいのがMoveアラヌトずいう䞀定時間身䜓を動かしおいないずアラヌト通知をしおくれる機胜です。 このアラヌト通知が来たら立ち䞊がっおちょっずりォヌキングをしたり、ストレッチをしたりしお身䜓をほぐしおいたす。 ストレッチの際は ハンドルチュヌブ などを䜿っお胞を倧きく開くようなストレッチをするず銖や肩呚りの凝りが軜枛されたす。 たた座垭には BackJoyのサポヌトクッション を必ず敷いお䜜業しおいたす。これがあるかないかでは長時間䜜業した埌の腰回りの疲劎感が倧分違っおきたす。 以䞊、䜜業環境玹介ずいう健康グッズ玹介みたいでしたが、叀田の䜜業環境でした たずめ いかがでしたでしょうか 分割キヌボヌドや昇降デスク、ストレッチグッズなど身䜓の健康に気を遣った環境が倚かったですね やはり゚ンゞニアは1日の倧半をデスクで仕事をするので、䜜業環境の倧切さを再実感したした。 䜕か参考になるものがあれば幞いです。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers
こんにちは、ファむンディ株匏䌚瀟で機械孊習゚ンゞニアをしおいたすsasanoshouta( @Edyyyyon )です。この蚘事は、ファむンディでむンシデントが発生した際に行なっおいる ポストモヌテム の運甚ずその様子に぀いお、先日発生したむンシデントを元に玹介をする蚘事ずなっおいたす。 今回発生したむンシデントに぀いお たず、今回発生したむンシデントに぀いお軜く玹介をさせおいただきたす。䞀蚀で衚珟するず、 サヌビスの機胜の1぀を䞀時的に停止 させおしたいたした。 ポストモヌテムの様子 匊瀟ではむンシデントが発生した際に ポストモヌテム を実斜しお再発防止に努めおおりたす。 ポストモヌテムずは そもそもポストモヌテムずはなんだず蚀う方もおられるかもしれたせんので、簡単にご玹介いたしたす。 ポストモヌテムは、むンシデントずそのむンパクト、その緩和や解消のために行われたアクション、根本原因矀、むンシデントの再発を避けるためのフォロヌアップのアクションを蚘録するために曞かれるものです。 *1 䞀般的にポストモヌテムを実斜するには䞀定の基準があり、基準を超えた障害が起きたずきに実斜するものです。 しかし匊瀟ではただポストモヌテムに察する知芋や歎史が浅く、文化ずしお根付かせるために、珟圚は緎習も兌ねお小さい障害でもポストモヌテムを実斜するようにしおいたす。 ポストモヌテムの流れ 今回のむンシデントを䟋に、ポストモヌテムの流れを芋る圢で実斜の様子をご玹介したす。匊瀟の堎合のポストモヌテムは、以䞋の順序で実斜されたす。 圓事者が事前に障害たでのアクションを振り返る ミヌティングで集たりアクションに぀いおのフィヌドバックを実斜する ネクストアクション決定ずりォッチ 1. 圓事者が事前に障害たでのアクションを振り返る この手順に぀いお特筆する事はありたせんが、匊瀟の堎合はGoogle docsにおむンシデントごずに管理をしおいるので、以䞋画像のように䞻催者からdocsの案内が来たタむミングで芚えおいる事が新鮮なうちに時系列での出来事の詳现を蚘茉しおいたす。 ポストモヌテム実斜前の連絡 2. ミヌティングで集たりアクションに぀いおのフィヌドバックを実斜する 以䞋画像のような圢で、事前に圓事者が曞き蚘した時系列でのむベントを振り返りながら、各むベントに関連するアクションの䞭で良かった点ず改善点に぀いお参加者で話し合いたす。 ポストモヌテム実斜時の雰囲気䟋 少しだけむンシデントの事に぀いお觊れたすが、「機胜が利甚䞍可になっおいる事が発芚しおから埩旧たでをスムヌズに行えた」ず蚀う振り返りがありたした。圓日はゎヌルデンりィヌクの狭間時期ず蚀う事もあり、本来のバック゚ンド担圓者が䞍圚の間に起きた出来事でもありたした。しかし、日頃からサヌビス䞊で提䟛しおいる機胜のIaC化をコツコツ進めおいた事で担圓者䞍圚の䞭でもスムヌズな埩旧察応が行えたした。 3. ネクストアクション決定ずりォッチ 2 で行なったむベント・アクションに察する振り返りをもずに、ネクストアクションを決定したす。 以䞋は今回のむンシデントにおけるネクストアクションにもなりたす。今回起きた事は、機胜開発者が開発に必芁なサヌビスずその暩限をバック゚ンド運甚者ず 十分な意思疎通をしきれなかった事で起きたむンシデント だず捉えおいたす。ヒュヌマン゚ラヌを起こしおしたった開発者目線のネクストアクションを今回は以䞋のように定めたした。 開発に着手する前に管理者偎ず十分に意思疎通を図れるフロヌを制定し、運甚する フロヌの䞭で定める項目 開発したい芁件に぀いお運甚者に事前共有する 開発の為に必芁最䜎限の適切な暩限を芁求する 䞊蚘フロヌをポストモヌテム実斜埌3日以内に䜜成し、次回週次の党䜓確認䌚で案内。 たた、運甚者目線でも開発時に「 今自分がどちらの環境を開いおいるのか目芖で分かりづらいのでは 」ずの意芋もあり、「 どの環境にいるのか分かりやすくする為の芖芚情報を導入 」する事で同様のヒュヌマン゚ラヌを防ぐ仕組みを導入する事になりたした。 ポストモヌテム埌のネクストアクションを䜜成はしたものの、圢骞化するものも䞭には少なからず存圚するず思いたす。 なので、匊瀟ではネクストアクションを議論する際に意識するポむントずしお、 具䜓性を持たせお明確なアクションにするこず それを定期的にりォッチしお進んだのか進んでないのかを確認し続けお攟眮しないこず の2点を垞に意識しおポストモヌテムを実斜するようにしおいたす。 䜙談ですが、匊瀟では党゚ンゞニアが盎近の取り組みを持ち回りで定期的に共有する党䜓䌚のようなものを蚭けおいたす。 その党䜓䌚の堎でポストモヌテムの内容ず埗られた知芋を包み隠さず共有し、゚ンゞニア組織党䜓の共有知芋ずするこずを文化ずしおいたす。 ネクストアクションにはむンシデントを受けおどんな察策を打぀かを考える事に焊点が集䞭しがちだず思いたすが、「圓事者でない゚ンゞニアも含む組織党䜓に察しお共有する」ずいう事も再発防止策の䞀぀ずしお機胜しおいる事を実感しおいたす。 ポストモヌテム実斜時に気を぀けおいる事 䞊蚘匊瀟でのポストモヌテムの様子を実際のむンシデントを䟋に玹介したした。最埌に、実斜の際に気を぀けおいる事に぀いお共有したす。 犯人探し、批刀をしない ポストモヌテムで最も重芁芖しおいる項目です。 ポストモヌテムの目的は孊びにあり、犯人探し、批刀を行うずそれを恐れ圓事者が真実を語らなくなり、その背埌にある本圓の原因に気づくこずができなくなる為です。 批刀ではなく、 根本原因の远求ず分析に培する 事を心がけるようにしおいたす。 障害の根本原因を分析し、理解する 原因の分析が䞍十分だず、誀った再発防止策になり、結果ずしお同じ障害が再発するこずに繋がりかねたせん。 客芳的な芖点で、 原因がシステムやプロセスにあるこずを意識しお分析をする ようにしおいたす。 人ではなく、仕組みで解決する 再発防止策が頑匵る、気を぀けるだけだず、再発防止を人に䟝存するこずになりたすが、人はミスをする生き物です。 システムやプロセスを修正しお、 人がミスしおも被害を最小限にくい止める ように努めるようにしおいたす。 問題点だけでなく、良かった点も指摘、称賛する 犯人探し、批刀はご法床ですが、良かった点があれば䜕回でも称賛する事も倧切にしおいたす。 さいごに 改めたしお、ご䞍䟿をおかけしたしたナヌザヌの皆様に深くお詫びをするずずもに、再発防止に努めおたいりたす。 今回のポストモヌテムを通じお、開発を進める䞊で足りおいなかった芳点・過剰だった点を浮き圫りにする事ができたこずは非垞に個人ずしお孊びになりたした。 この孊びを掻かしお、より良いサヌビス創りに貢献できるよう個人・組織ずしお粟進しおたいりたす。 *1 : ※ SRE サむトリラむアビリティ゚ンゞニアリング ―Googleの信頌性を支える゚ンゞニアリングチヌム より抜粋
こんにちは。 Findy で Tech Lead をやらせおもらっおる戞田です。 早速ですが、これは匊瀟のずあるチヌムの1ヶ月のサむクルタむムです。 最初のコミットからマヌゞされるたで平均3.6時間皋床ず、開発に着手したらその日のうちにリリヌスされるのがデフォルトずなっおいたす。 今回はこの開発スピヌドを継続し、曎に速くするために匊瀟で実践しおいるテクニックを玹介しおいきたす。 それでは芋おいきたしょう タスク分解 Pull requestの粒床 テスト CI/CD 高速化 自動化 通知 たずめ タスク分解 開発タスクをアサむンされた時、たず最初に タスク分解 をしたす。 タスク分解をするこずによるメリットずしおは、 工数芋積もりの粟床が䞊がる 察応方針の認識を他メンバヌず合わせやすくなる 察応挏れに気づきやすくなり、手戻りの発生が少なくなる Pull requestの粒床を適切に保぀こずができる 他メンバヌぞの匕き継ぎをしやすくなる などが挙げられたす。 分解したタスク毎にPull requestを䜜成するこずで、Pull requestを小さく䜜り続けるこずが可胜になりたす。 マヌクダりン蚘法のチェックボックスを䜿っおIssueにタスクリストを掗い出したす。 終わったタスクから順にチェックボックスにチェックを入れ、タスク管理をしたす。 良いタスクリストを䜜成するためのコツは、 最初から完璧なタスクリストを䜜ろうずしない こずです。 たず最初に倧枠のタスクを考え、そこから分解しおいくように意識しおタスクリストを䜜成するず、結果的に詳现なタスクリストが完成しおいたす。 完成したタスクリストを元にPull requestを䜜成しおいくず、結果的に適切な粒床でPull requestを䜜成できるようになるはずです。 䟋えば、䜕かしらのデヌタの䞀芧を返すREST APIを远加する堎合、次のようなタスクに分解できたす。 - [ ] APIの仮実装を行う - [ ] APIの゚ンドポむントを決める - [ ] APIのresponseの圢を決める - [ ] モックデヌタを返す - [ ] デヌタベヌスからデヌタを取埗しお返す - [ ] 怜玢条件に察応する - [ ] id - [ ] nameの郚分䞀臎 - [ ] ゜ヌトに察応する 小さくコツコツず修正を䞊乗せしおいき、最終的に完成圢に近づけおいくような分解の仕方が良いでしょう。 倧きな機胜の実装担圓になった際に、䞀床に党おの機胜を実装するのではなく、 小さい機胜远加を䜕回も繰り返しお結果的に倧きな機胜を完成させる ようなむメヌゞを持぀ず良いです。 たずタスク分解をしお䜜成したタスクリストを他のメンバヌにレビュヌしおもらいたす。そこで認識を合わせるこずで、開発の進行がスムヌズになりたす。 分解したタスクに沿っお開発を進めおいくず、そのタスクも曎に分解したほうが良いこずに気づくこずもありたす。 その際はどんどん分解しおいきたす。結果的に分解されたタスクそのものが知芋ずなり、今埌の開発の参考になるからです。 Pull requestの粒床 Pull requestを小さくするこずで開発生産性が改善するこずは既に知られおいる事実ですが、小さすぎおも問題が出たす。 じゃあどうするのかずいう話になりがちですが、これはPull requestの サむズ を気にしすぎおいお 粒床 を考えおいないために起こる問題です。 Pull requestを 小さくするのではなく、粒床を考える こずが、小さいPull requestを䜜り続けるための秘蚣です。 では適切な粒床ずはどういったものなのでしょうかそれは、 䞀぀のこずだけに泚力しおいる Pull requestです。 具䜓的に幟぀かの䟋を挙げたしょう。 䟋えば、「関数名を倉曎したので、それを利甚しおる1䞇行を䞀括眮換したPull request」があるずしたす。 これは適切な粒床だず蚀えたす。倉曎行数は1䞇行でサむズは倧きいかもしれたせんが、「特定の関数名を䞀括眮換する」ずいう1぀のこずしかしおいないため、粒床ずしおは適切です。 Pull requestの抂芁欄に䞀斉眮換した旚を曞いおおき、CI通れば即mergeでOKです。 ※埌述するように自動化テストが充実しおおり、守れるテストになっおいる前提です では「画面の開発䞭に別の画面のリファクタを入れ、倉曎行数は20行皋床だったPull request」はどうでしょうか これは適切な粒床ずは蚀えたせん。倉曎行数は20行でサむズは小さいかもしれたせんが、「画面の開発」ず「別の画面のリファクタ」ずいう぀の事を同時にしおいるため、粒床ずしおは䞍適切です。 仮に画面の開発の郚分で䞍具合が発生しrevertが必芁になった堎合、画面の開発郚分だけではなく別の画面のリファクタの郚分も同時にrevertされおしたいたす。 適切な粒床を考える䞊で、 Pull requestの存圚意矩が倚岐に枡っおいないかどうか ずいうこずを考えるず良いです。 粒床が倧きすぎるず出おくる問題は色々ずありたすが、 レビュヌに時間が掛かり、レビュワヌ目線で考えるずレビュヌに察しお粟神的に負荷がかかる どこをどうレビュヌしたら良いのか分かりづらいため、レビュヌの質が䞋がり、結果的に䞍具合の発生率が高くなる Pull request䞊でのコミュニケヌションが必芁以䞊に増えおしたう 䞍具合発生時の圱響範囲が広くなり、原因の特定に時間がかかる etc などが挙げられたす。 Pull requestが倧きすぎるこず自䜓の原因は組織によっお異なりたすが、 Pull requestの粒床が倧きすぎるこずは、システム開発においお䜕のメリットも生み出さない のです。 適切な粒床を維持し続けるこずにより、Pull requestのレビュヌに察する負担が枛るためレビュヌ自䜓の質が䞊がるこずに加え、レビュヌの優先床が䞊がるこずに繋がり、結果的に開発スピヌドず品質の䞡方を担保できたす。 テスト 実装コヌドに加えお、それの動䜜を保蚌するテストコヌドを同じPull request内で甚意するこずをマストずしおいたす。 実装コヌドよりもテストケヌスやテストの内容に察するレビュヌの方が倚いこずもありたす。 匊瀟ではテストのカバレッゞに察しおの倧きな拘りは特にありたせんが、カバレッゞよりも重芁芖しおいるこずがありたす。 それは、そのテストが「守る」テストになっおいるかどうかです。通るべき時に通り、コケるべき時にコケるテストになっおいるかどうかが重芁なのです。 䟋えば正垞系の次のようなテストコヌドがあるずしたす。 const mockOnSuccessCallback = jest.fn (); const mockOnErrorCallback = jest.fn (); const { result } = renderHook (() => useHoge ( { onSuccessCallback: mockOnSuccessCallback , onErrorCallback: mockOnErrorCallback } )); act (() => { result.current.handleSubmit (); } ); expect ( mockOnSuccessCallback ) .toHaveBeenCalledWith ( 'test' ); hooksの関数を実行し、成功時に匕数で枡したコヌルバック関数が実行されるこずを確認しおいたす。 䞀芋䜕の倉哲もないテストコヌドですが、このテストコヌドには次の芖点が抜けおおり、守るテストずしおは䞍十分なのです。 成功時の関数が耇数回実行されたずしおも通っおしたう ゚ラヌ時のコヌルバック関数が実行されたずしおも通っおしたう こういったケヌスでは、匊瀟では次のようなテストコヌドが良いずされおいたす。 const mockOnSuccessCallback = jest.fn (); const mockOnErrorCallback = jest.fn (); const { result } = renderHook (() => useHoge ( { onSuccessCallback: mockOnSuccessCallback , onErrorCallback: mockOnErrorCallback } )); act (() => { result.current.handleSubmit (); } ); expect ( mockOnSuccessCallback ) .toHaveBeenCalledTimes ( 1 ); expect ( mockOnSuccessCallback ) .toHaveBeenCalledWith ( 'test' ); expect ( mockOnErrorCallback ) .not.toHaveBeenCalled (); このテストコヌドにより、「成功時に1回だけコヌルバック関数がパラメヌタ付きで実行され、゚ラヌのコヌルバック関数が実行されない」こずを守るこずができたす。 この2぀のテストコヌドのカバレッゞは倉わりたせんが、テストずしお守るこずができる内容が異なりたす。 匊瀟ではカバレッゞよりもテストが守る内容の方に重きを眮いおおり、結果ずしおカバレッゞが䞊がっおいるだけなのです。 匊瀟のリポゞトリではテストカバレッゞが90を超えおいるものも珍しくないですが、それはカバレッゞを意識しおテストを曞いたのではなく、守るテストを曞き続けるこずによっお勝手に䞊がったものなのです。 このような䞀定の品質以䞊のテストコヌドが存圚するこずにより、ラむブラリのバヌゞョンアップや既存凊理のリファクタなどは「CI通れば即mergeでOK」ずいう文化が根付いおいたす。 党おの修正に察しお動䜜確認を行うこずは無く、テストコヌドのお陰でスピヌドず品質の䞡方を担保する状況を維持し続けるこずを実珟しおいるのです。 CI/CD 匊瀟のCIのほずんどはGitHub Actionsで統䞀しおいたす。 匊瀟ではPull requestが䜜成されるたびにテストやLinterなどを実行し、レビュヌの効率化やコヌドの品質を䞀定に保぀ようにしおいたす。 高速化 CIの速床には非垞に拘っおおり、様々な高速化の工倫をしおいたす。CIの実行速床が遅いず、Pull requestをmergeするたでの時間が長くなっおしたい、結果的にクリティカルパスになっおしたうからです。 1぀目はキャッシュの掻甚です。GitHub Actionsが提䟛しおいる各皮パッケヌゞをキャッシュする仕組みを利甚するこずで、CIのセットアップに必芁な時間を削枛するこずが出来たす。 匊瀟ではいく぀かのプロゞェクトに Nx を導入しおおり、Nxが持぀ 倉曎怜知機胜 ず リモヌトキャッシュ機胜 によっおCIを倧幅に高速化したした。 2぀目はテストコヌドの実行を䞊列化するこずです。 GitHub Actionsのmatrixず呌ばれる機胜 を利甚し、CIのワヌクフロヌそのものを䞊列実行できるようにしおいたす。 テストファむルをいく぀かのグルヌプに分類し、それぞれのワヌクフロヌにグルヌプごずのテストファむルを割り圓おる独自のスクリプトを甚意しおいたす。 1぀のワヌクフロヌ内で党おのテストファむルを実行しおしたうず、テストファむルの数に比䟋しおCIの実行時間が長くなっおいきたす。 しかしグルヌプ分けをしおワヌクフロヌを䞊列実行するこずで、CIのトヌタルでの実行時間はほずんど倉わりたせんが、CIが完了するたでの時間を䞀定に保぀こずが出来るようになりたす。 詳现は 別蚘事 の方でも玹介しおいるので、興味がある方はそちらもご芧ください。 3぀目はGitHub Actionsのワヌクフロヌが実行される runnerのスペックを䞊げる こずです。 runnerのCPUのコア数やメモリを増やしたマシンを利甚できるように蚭定し、テストコヌドの実行コマンドを芋盎しお、同じワヌクフロヌ内でもテストコヌドを䞊列実行できるようにしおいたす。 ぀たりワヌクフロヌそのものず、ワヌクフロヌ内の䞡方の䞊列化を実珟しおいたす。これにより、匊瀟では最倧で40個のテストファむルを䞊列実行しおいるリポゞトリもありたす。 runnerのスペックを䞊げるこずにより利甚料金の倧幅な増額が予想されたすが、GitHub Actionsの課金はrunnerの総実行時間に察しお行われおおり、ワヌクフロヌ自䜓の実行が高速化される分、結果的に総実行時間が短くなり、課金額が必芁以䞊に膚らんでしたうこずを防いでいたす。 自動化 CI高速化以倖にも業務の効率化のため、ほが党おのプロゞェクトにリリヌス䜜業を自動化する仕組みを取り入れおいたす。GitHub Actionsのワヌクフロヌを手動実行するだけで、リリヌス甚のPull requestが自動生成され、それをmergeするだけで自動的にstaging/production環境ぞのデプロむが実行されるようになっおいたす。 曎にPull requestのLabelsやAssigneesを自動で蚭定するようにもしおいたす。 このように手間ずコストを掛けおでもCI/CDの高速化ず自動化の䞡方を実珟させおいたす。 通知 䜕かしらの異倉、倉化、䟝頌があった際に、そのタむミングでSlackに通知が飛ぶようになっおいたす。 たず゚ラヌや障害の怜知です。本番環境で゚ラヌや障害、各皮負荷の増加が発生した際に、SentryやDatadogを通じおSlackに通知を飛ばすようになっおいたす。この仕組みによっお䞍具合や障害に最初に気づくたでの時間が短瞮され、修正コヌドを本番環境にデプロむされるたでの時間が短瞮されたす。 次に開発時の通知です。GitHubのWebhookを通じお、Issueが䜜られた時やコメントが远加された際にSlackにメンション付きでリアルタむムで通知するようにしたした。 特に効果が倧きかったのはPull requestのレビュヌ䟝頌をメンション付きで通知するこずです。この仕組みによりファヌストレビュヌたでの時間が短瞮され、結果的にPull requestがマヌゞされるたでの時間が短瞮されたした。 本来であればGitHubの公匏APPを利甚しお通知を送信すればよいのですが、匊瀟では独自に開発したスクリプトを利甚しおいたす。 公匏APPは通知内容の情報も入っおくるので䞀芋するず䟿利ですが、匊瀟の開発スピヌドだず通知が倚すぎお、逆に通知の内容が流れすぎおしたうこずがありたした。 そのため、もっずシンプルな内容を通知しおくれる独自スクリプトを甚いお通知を送信しおいたす。 䞍具合や障害、レビュヌ䟝頌もコメントも、気づかないずそこから䜕も動きがありたせん。気づかないこずがクリティカルパスになるのです。 たずめ いかがでしたでしょうか 匊瀟では開発生産性や開発スピヌドに重きを眮いおおり、そのためには手間ずコストを惜したず日々改善を続けおいたす。 珟圚、ファむンディでは䞀緒に働くメンバヌを募集䞭です。 興味がある方はこちらから ↓ herp.careers たた、6月28日金・29日土に『LeanずDevOpsの科孊』の著者であるNicole Forsgrenの来日、テスラ共同創業者元CTOの登壇など、囜内倖の開発生産性に関する最新の知芋が集たるConferenceを開催したす。 開発生産性に関する他の䌁業の取り組みや海倖の事䟋に興味がある方は、ぜひお申し蟌みください dev-productivity-con.findy-code.io