クラウドワークス エンジニアブログ

日本最大級のクラウドソーシング「クラウドワークス」の開発の裏側をお届けするエンジニアブログ

LSPってなんだ〜?

はじめに

クラウドワークスエージェント(旧ビズアシ)事業のエンジニアをしている山田です。
先日RubyKaigi2025に参加しました。オフラインは去年の沖縄に続き、二度目の参加です。
前回、LSP / Parser関連の話が印象に残っていて、今回それ関連のセッションを多めに取ったと思います。
ただ、ふわっとした理解のままで臨んでしまったので、あまり頭に入ってこなかったです。

ということで今回改めてLSPについて調べてみました。

続きを読む

フロントエンドのテストを Jest から Vitest へ移行し始めた話

はじめに

こんにちは。クラウドソーシングサービス「クラウドワークス」( crowdworks.jp )でエンジニアをしている倉野です。2024年10月に株式会社クラウドワークスに入社し、主にフロントエンド開発を担当しています。

今回は、フロントエンドのユニットテストツールを Jest から Vitest へ移行し始めた経緯と、その過程で得られた学びについてお話しします。

なぜ移行を考えたのか?

これまで、処理速度の速さやWeb開発ビルドツール Vite との互換性から、Vitest への移行を漠然と考えていました。しかし、移行コストや他の業務との兼ね合いで、なかなか踏み出せずにいました。

そんな中、今年の3月、フロントエンドで使用しているフレームワーク Vue.js のユーティリティ関数集 VueUse大きなアップデート(Breaking Change) がありました。具体的には「CommonJS(CJS)ビルドが廃止され、ES Modules(ESM)のみでのビルドとなる」という変更です。

このアップデートに対応するため、現在の Jest で ESM 対応を進めるよりも、テストツール自体を Vitest に変更する方が将来的にも良いのではないかと考えました。他のフロントエンドエンジニアとも相談した結果、「やってみよう!」という結論に至ったのです。

続きを読む

新卒入社して1年経ったので振り返ってみた

2024年4月に株式会社クラウドワークス(以下 CW)に新卒入社しました佐々木です。入社時からエンジニアとしてクラウドソーシングサービス「クラウドワークス」(以下 crowdworks.jp)の開発に携わっております。

新卒エンジニアと聞いて,皆さんはどのようなイメージを持たれるでしょうか。「大学で情報学や理工学などを修めたのか」「学生の頃から個人で開発をしていたのか」「インターンで活躍していたのか」などと想像される方も少なくないと思います。

しかしながら,私はそのどれにも当てはまりません。私は一般的には文系に分類される領域の出身で,個人的な開発をしたこともなく,内定後に参加したインターンRuby on Rails の基礎を勉強させていただいたくらいの素人です。すなわち,文字どおり全くの未経験という状態でエンジニアになりました。

本記事は,私が新卒でエンジニアになった背景と,約1年 CW でエンジニアとして過ごして考えたことや感じたことを綴ったものです。

CW に来るまで

学生時代

私は大学で主に心理学を学び,その後大学院に進学して実験心理学を専門に研究をしていました。論文の執筆や定期的な学会発表はもちろんのこと,学会賞を取ったり JST-SPRING による支援対象に採用されたりと,科学者としての道を着々と歩んでいました。余談ではありますが,実験そのものや実験で得られたデータ解析のために MATLAB や R を使っていたため,プログラミング自体には多少触れていました。

なぜ就職したのか

私は学術研究の世界で生きていきたいと考えていたため,当初はそれ以外の選択肢を一切視野に入れていませんでした。大学院生時代は一言では表せないほど苦しいものでしたが,文献調査や実験,発表資料の作成,知識の共有などは全く苦ではないどころかむしろ楽しんで取り組むことができるものでした。

しかしながら,自分の研究の社会的意義というものを真剣に考えたとき,学術研究の道への動因は自分自身の知的好奇心を満たし,研究成果によって他者からの承認を得たいという,極めて自己中心的なものに過ぎないのではないかという疑念が生じました。さらに,私が主に取り組んでいたものは基礎研究でしたが,これは多くの場合で遠い将来において他の研究の一助となることが期待されるものです。私としてはこのような研究の意義は決して小さいものだとは思いませんが,今日の実社会においては基礎研究の意義が十分に理解されないこともあり,今後は研究の価値を社会に提供することが一層難しくなるのではないかと考えるようになりました。また,仮に専門領域の外に出たとしても,研究を通じて培った論理的思考力や情報を分析する力は無駄にはならないと信じていました。

以上のことから,実社会に近い環境に身を置き,社会に対する具体的な貢献を目指して,学術研究とは異なる領域への就職を選択しました。

なぜエンジニアを選んだのか

エンジニア未経験者に多い誤解として「エンジニアはコーディングだけしていればよい」というものがあるようです。しかしながら,私はエディタを開いてコードを書くという作業はエンジニア業務の一要素に過ぎず,本質は課題を見つけてその解決方法を考えることにあるため,調査や議論に費やす時間も少なくないと考えていました(実際のところ,そのとおりのようです)。これには研究の進め方と非常に多くの共通点があり,また研究において最も集中力を発揮した作業がコードを書くことであったため,エンジニアとして働くことになったとしてもその仕事に抵抗を感じることはないだろうと考えました。このことから,エンジニアという職種を選択しました。

なぜ CW を選んだのか

居住環境を自由に選択できることを最低条件として挙げていたため,フルリモートワークが可能である組織を探しました。その結果として複数の候補がありましたが,多様性が受け入れられる今日において,様々な能力を持つ個人とその能力を必要とする社会とをつなぐ架け橋としての役割を担っている CW に目が留まりました。能力があるにもかかわらず,居住地や年齢,制度など様々な要因によりそれを発揮できていない人も少なくないと思われますが,CW はこのようなまだ表に出ていない価値を輝かせる可能性を持つ極めて社会的意義の高い企業であると感じたため,ここを選択しました。

CW に来てから

現在の業務内容

入社時から現在まで,crowdworks.jp で主に不正利用対策を担っているチームに所属し,サービスの安全性維持や不要なコストの削減などに取り組んでいます。

入社後のギャップ

制度や働き方などに関する疑問点は入社前に質問し,回答をいただいていました。また,上述のように,エンジニア業務に関する認識も適当なものであったため,入社後に「思っていたものと違った」となることはありませんでした。

CW の良い点

私としては,「働きやすさ」が最も顕著な点であると感じています。この働きやすさは,特に「人間関係の良さ」と「フレックスタイム制度やリモートワークの環境が整っていること」によって維持されているのではないかと思われます。

仕事における主たるストレッサーとして人間関係が挙げられることもありますが,CW においては,これまで人間関係に起因する不満や精神的負担を感じたことはありません。感情的に声を荒らげる人や精神的に圧迫するような態度をとる人は見受けられず,年齢や役職といった隔たりもありません。相互の敬意が当然に表現されていると感じられます。さらに,疑問点があれば躊躇なく質問できる雰囲気があるだけでなく,挑戦の結果として失敗が生じた場合でもそれを咎められることがなく,むしろ「ナイストライ!」といった前向きな反応が返ってくるなど,心理的安全性の高い環境が維持されていると思われます。

働き方という点について考えてみると,フレックスタイムやリモートワークが可能であることは極めて大きな利点だと思われます。企業の一員である以上,企業や部署,チームなどの都合に合わせることが求められることもありますが,基本的には個人のライフスタイルやその日のコンディションに応じた働き方が可能となります。また,通勤による時間的・身体的・精神的負担の削減に加えて,居住地にとらわれずに働くこともできるため,特に私のように特定の地域に住むことを希望する者にとっては理想的な環境です。これは,個人の QOL 向上に直結するだけでなく,組織にとっても多様な人材の確保や生産性の向上につながるものであると考えられます。このような柔軟な働き方は,現代の多様なライフスタイルに対応する上で不可欠なものであるため,「誰もが自分らしく活躍できる未来を支え 個のためのインフラになる」を目指す CW にとっては,この維持・継続もまた当然果たすべき役割だと思われます。

(2025年4月以降,所属部署によって頻度は異なりますが,定期的な出社が求められるようになりました。ただし,個人の事情への配慮はなされており,規定頻度以上の出社が一律に必須となっているわけではありません。)

こうなるとさらに良くなると感じた点

私としては,例えば,エンジニア向けの新卒研修があれば嬉しかったと感じました。CW では新卒におけるエンジニアの割合が低いこともあり,私が受けた新卒研修はビジネス職の方々を対象としたものであるように感じられました。新卒研修後に実施されたサービスウォークスルーを通じて crowdworks.jp の概要に触れることはできましたが,実際の開発現場で使用するツールやその使用方法,開発業務以外で担当すること,作業の具体的な進め方,その他業務における注意点などは,それ以降, OJT で学んでいく必要がありました。所属するチームによって担当する領域が異なるため,例えば crowdworks.jp のドメイン知識全般といったものを一律に扱うことは難しいかもしれませんが,日常業務で必要となることやその進め方などについては,最初にその全容を知っておくと,これから何をすればいいのかといったことがイメージしやすくなると思われました。

新人ならではの苦悩

当初は,開発未経験であるがゆえに,既存コードの理解や実装したい内容をコードで表現することに苦労するだろうと想像していました。しかしながら,そのような苦労がないわけではないものの,それ以上に,上述した課題の発見とその解決策の提案という点で十分な貢献ができないことが課題であると感じています。施策に関するミーティングや作業進捗共有の場などにおいては先輩方の議論を聞くにとどまり,その決定事項に従って手を動かすという,いわゆる「言われたことを言われたとおりにする」程度しかできていないのではないかと思うことがあります。その一方で,この課題は私自身の資質に起因するものではなく,背景知識の少なさ,すなわち単に知らないだけであるということに起因するものであると考えられるため,日々の業務を通じて必要な情報を蓄えることで対応できるようになることが期待されます。

生活面での変化

これは一言で表せるもので,生活リズムが整いました。大学院生時代は研究に没頭するあまり寝食を疎かにすることもあり,そもそも比較対象として適切ではないかもしれませんが,一日の稼働時間に制限があることも影響して,入眠時刻や起床時刻が安定したことが最も大きな変化です。

終わりに

終始一人語りでしたが,ここまでお付き合いくださり,ありがとうございました。

社会にも CW にも貢献できるよう邁進いたします。

We're hiring!

株式会社クラウドワークスでは、エンジニアメンバーを募集しています!

herp.careers

チーム横断でプロダクト改善!「合同スプリント」での取り組みについて紹介します

クラウドソーシングサービス「クラウドワークス」(以下crowdworks.jp)のエンジニアをしている原です。2024年4月に新卒で株式会社クラウドワークスに入社し、今年で2年目です。

はじめに

crowdworks.jpの開発現場では、昨年より半期に一回のペースで「合同スプリント」という取り組みを行っています。

これは、まとまった時間がないとできないタスクやチーム外の知見が必要なタスクなどをチーム横断で行う活動です。合同スプリント期間中は普段のチームの施策は一旦ストップし、取り組むテーマごとにチームを新しく編成します。

今期も4/7から4/18にかけての2週間行われました。

今回の合同スプリントの取り組み

今回の合同スプリントのタスクは、以下のようにさまざまでした。

  • 技術的負債解消(Gemの削除、リファクタリングなど)
  • CIの高速化
  • フロントエンド開発ツールのアップデートや剪定
  • フロントエンドの機能剪定に向けた調査
  • 検索エンジンOpenSearch)のパフォーマンスチューニング
  • Rollbarから飛んでくるアラート通知の精査
  • 仕事検索機能の改善に伴う調査

今回の合同スプリントには私が普段所属しているデリバードチーム※のエンジニア4人も全員参加したので、各メンバーに自身の取り組みの内容について振り返ってもらおうと思います。

続きを読む

【RubyKaigi】英語セッションも怖くない!チームで挑む「モブセッション」の効果

こんにちは、crowdworks.jp SREチームの田中です。

RubyKaigi 2025が愛媛県松山市で2025年4月16日から4月18日の日程で開催されました。 普段あまりRubyを書く機会はないのですが、楽しそうなので参加しました。

rubykaigi.org

株式会社クラウドワークスでは、Gold SponsorsとしてRubyKaigiを協賛しました(ブース出したかった!)。

engineer.crowdworks.jp

当日はクラウドワークス内の3つのサービスを開発する計14名のメンバーがRubyKaigiに参加し、素晴らしい学びと交流の機会を得ました。 松山の美味しいご飯や道後温泉も最高でしたね。

RubyKaigiは、Rubyの開発者やユーザーが集まり、Rubyに関する最新の情報を共有するカンファレンスです。 RubyKaigiではYJITのような処理系の最適化に関するセッションや、Ruby構文解析エンコーディングといったコアな話題が多く、Rubyを使用しているだけの私にとっては難しい内容が多かったです。

以前2回参加したRubyKaigiでは、セッションを聞いてもあまり理解できなかったので、もっとRubyKaigiのセッションを理解し、楽しみたいと思っていました。

今回は特に、セッション内容の理解を深め、参加者同士の繋がりを強化するために、『モブセッション』という新しい試みを行いました。この記事では、その詳細と効果についてお伝えします。

続きを読む

© 2016 CrowdWorks, Inc., All rights reserved.