アサインのフィード
https://zenn.dev/p/assign
アサインは「人」と「技術」の力で、若手ハイエンド向けのキャリア支援サービスを提供しています。 転職サイト『ASSIGN』は、長期のキャリア形成をサポートするために、キャリア実現に欠かせないパーソナライズされた情報へのアクセスを容易にしています。技術の力を最大限活用し、ユーザーへの
フィード

State-Driven Clean Architecture — Flutter + Riverpodで考える状態中心設計
アサインのフィード
はじめにFlutter開発歴2年で初めて0からFlutterのモバイルアプリを作ってみようと思った時に、どういうアーキテクチャを選ぶのが最適なのか悩みました。今まで携わっていたFlutterアプリケーションの構成はfeature-first + MVVMでしたが、この構成では、主に2つの課題がありました。ViewModelとRiverpodの責務が重複して曖昧になることです。ViewModelが状態管理や非同期処理のロジックを持つ一方で、Riverpodも同様の責務を担えるため、どちらで状態を扱うべきか判断が難しくなっていました。結果として、処理の分担やデータフローが不明...
20時間前

仕様駆動開発(SDD)を採用したAI駆動開発の実態と課題
アサインのフィード
はじめにこちらの記事は先日開催されたAI駆動開発についてのイベントの登壇内容をベースに記事にしたものです。https://assign.connpass.com/event/368710/発表後の反応が良く、特に「他社のAI駆動開発の実態を知ることができてよかった」という声をいただいたため、改めて記事化することにしました。Claude CodeやCodex等を使用して開発している方は増えていると思いますが、実際に行っている開発フローを共有されることはあまり多くないため、私たちが実施しているAI駆動のフローを共有し、みなさんのAI駆動開発に参考になればと思います。 先に全体...
10日前

AI時代の品質保証 - AIの生成速度に負けない品質基盤作り
アサインのフィード
はじめにこんにちは、株式会社アサインでエンジニアをしているうちほり(@showichiro0123)です。去る2025年10月16日に開催した「AI駆動開発 - 各社のリアルな事例と課題とは?」というイベントで「AI時代の品質保証」というテーマで登壇させていただきました。Vibe CodingやAgentic Codingという言葉が人口に膾炙して久しく、できることが大幅に増えた一方で、AIが作るコード品質に対して不満を持つ方も増えたのではないでしょうか。私も同じような課題感を持っています。そこで、今回の発表では、アサインでの取り組みを元に、以下のトピックを取り上げてお話させて...
10日前

「MVVM=双方向データバインディング」じゃない!Flutterで正しく理解するMVVM
アサインのフィード
はじめに株式会社ASSIGN(アサイン)の白井です。現在、転職者向けのモバイルアプリ開発を担当しています。今年はFlutterのテックリードを目指して日々学習を進めていますが、その中で「MVVM=双方向データバインディングができるアーキテクチャ」という誤解をしていたことに気づきました。学習を重ねるにつれ、Flutterはそもそも単方向データフロー(Unidirectional Data Flow)を前提としたフレームワークであり、Android Frameworkのような双方向データバインディングを前提とする構造とは本質的に異なることを理解しました。Flutter × MV...
1ヶ月前

Vitest 4の新機能 expect.schemaMatching とHonoとZodでスキーマ駆動でテストをやる
アサインのフィード
はじめにこんにちは、株式会社アサインでエンジニアをしているうちほり(@showichiro0123)です。2025年10月22日にリリースされたVitest 4には、テスト駆動開発やスキーマ駆動開発を加速させる新機能が多数追加されました。中でも私の目を引いたのは、Zodなどのスキーマライブラリと統合できるexpect.schemaMatchingです。本記事では、Vitest 4の新機能を概観しつつ、expect.schemaMatchingを使ったスキーマ駆動テストの実践方法を、Honoを使ったWeb APIの開発例を交えて紹介します。 Vitest 4の主要な新機能ま...
1ヶ月前

AI時代に備えるテストケース設計とTDD勉強会の実施記録
アサインのフィード
はじめに今回は、社内で実施した「テストケースの考え方・テスト駆動開発(TDD)勉強会」の内容や開催意図を紹介します。勉強会は私が座学用のスライドと演習課題を用意し、約2時間の枠で開催しました。参加者は10名弱で、前半を座学、後半を演習に充てて質問を受けつつ双方向で進めました。 背景と課題感なぜこのタイミングで「テストケースの考え方・テスト駆動開発(TDD)勉強会」を企画したのかというと、AI駆動開発により開発スピードが非常に高速化する中で、「人間の認知を超えて氾濫するコードに対して如何に品質を保証するのか?」という問いが自分の中にあり、一つの鍵としてTDDがあると考えている...
1ヶ月前

最新のNext.js15 / React19における実践的な設計方針とベストプラクティスを体系的にまとめました
アサインのフィード
はじめにNext.js 15とReact 19が登場し、App Routerを中心とした新しい開発体験が標準となってきました。Server ComponentとClient Componentを意識したコンポーネント設計、データハンドリング、状態管理、キャッシュ戦略など、実務で求められる設計判断は多岐にわたります。筆者は、2023年7月のApp Routerリリース直後から現在まで、約2年に渡りNext.js(v13~15)を使った開発に携わってきました。 実際にApp Routerを使った開発では、情報が少ない中で様々な課題に直面し、最初に挙げたような複数観点での設計や実装判断...
1ヶ月前

データ分析基盤の「安定運用」と「セキュリティ」を支えるアーキテクチャ選定と運用方法
アサインのフィード
はじめに株式会社ASSIGN(アサイン)の白井です。現在、プロダクト改善をよりデータドリブンに進めるため、信頼性と再現性の高いデータ分析基盤の構築を進めています。その一環として、Cloud SQLに蓄積された業務データを、BigQueryへ安全かつ正確に連携する仕組みを整備しています。単なるデータ連携にとどまらず、セキュリティ・スケーラビリティ・運用自動化の観点からも最適な構成を目指しています。この記事では、「安全に・正確に・安定してデータを連携させるための設計と運用の工夫」について紹介します。 本記事で扱う主なテーマ【運用】: Cloud Run Function...
1ヶ月前

【Next.js】App Router × Route Handlersで実現する無限スクロール
アサインのフィード
はじめに株式会社ASSIGNでWebフロント開発を担当している中水です。先日、ASSIGN Webアプリのマイエージェント機能でNext.jsのRoute Handlersを使った無限スクロール機能を実装しました。本記事では、無限スクロールの実装方法と、クライアントサイドでのデータフェッチの手法を解説します。 要件初期表示で20件のデータを取得し、画面下部までスクロールした際に、さらに20件ずつ追加でデータを取得・表示します。 環境Next.js v14(App Router)TypeScript 実装を進める上での課題と対応方針 前提ASSIGN...
1ヶ月前

Next.js × Hono × モノレポで実践する「リアルオプション戦略」:初期の開発速度と将来の柔軟性を両立させるWebシステム設計
アサインのフィード
はじめにASSIGN CTOの須永と申します。弊社では転職エージェントの支援品質の高度化・顧客価値の最大化を目指し、面談・選考管理、各種書類作成、求人マッチング、データ分析などの機能を持つ業務管理システムを内製で開発しています。昨年度からは新たに新卒就活支援事業を開始し、転職支援事業と同様に業務管理システムの開発プロジェクトを本格的に推進することになりました。この記事では、上記システムの設計で採用した「リアルオプション戦略」に基づく技術選定の背景と、その具体的な内容についてご紹介します。 プロジェクトにおける不確実性このプロジェクトには、いくつかの大きな制約や考慮すべ...
2ヶ月前

Adjust RawデータをBigQuery経由でスプレッドシートに自動連携する仕組み
アサインのフィード
はじめに本記事では、AdjustのrawデータをBigQuery経由でスプレッドシートに自動連携する仕組みを紹介します。「マーケチームから広告の学習データが欲しいと言われたけど、どうやって整備すればいい?」そんな悩みを持っている方に役立つ内容になればと思います。 背景マーケティングチームからの具体的な依頼は、「ユーザーがどの広告経由で、アプリ内でどんな行動をしたか」という時系列データ(rawデータ)を、Google広告の機械学習に利用したい、というものでした。マーケチームからの要件は以下の3点です。Google広告の学習に使える直近3ヶ月分の最新データがほしい1時...
2ヶ月前

A/Bテスト理解のための統計学 〜 具体例から専門用語へ、段階的に理解する仮説検定
アサインのフィード
はじめに弊社では、モバイルアプリの会員登録導線の中でA/Bテストを実施しています。会員登録時の質問の順番を入れ替えることで、登録率に変化が出るのかを検証するためです。A/Bテストの結果を見てみると、以下のような内容が表示されていました。「結果が統計的に有意ではありません」これは一体どのような状態なのか、テストの結果を正しく理解するためにも、仮説検定について改めて勉強してみました。しかしいざ勉強を始めてみると、専門用語が多く、なかなかイメージがつかみにくいものだと感じました。また、自分の中では理解できても、他の人に伝えていくのが難しい内容だとも思いました。そこで、具体例...
2ヶ月前

Android APIアップデートで詰まって気づいた、Flutterアプリのアーキテクチャ理解の重要性
アサインのフィード
はじめにFlutterアプリケーションのAndroid API Level 35への移行作業において、想定以上に複雑な問題に直面し、当初は単純なバージョン更新作業と考えていたものが、最終的にはビルドシステム全体の理解を必要とする大規模な作業となりました。マルチプラットフォーム開発の魅力はネイティブ側をあまり意識せず動作してくれる抽象化にありますが、その抽象化層で問題が発生した際、影響範囲が広範囲に及ぶため、独力で解決するにはFlutterのマルチプラットフォームアーキテクチャへの深い理解が不可欠であることを痛感しました。本記事では、私の体験を元に移行作業で直面した具体的な問題と...
2ヶ月前

Next.js15へのアップデート手順と破壊的変更の背景
アサインのフィード
はじめに先日、社内プロダクトのフロントエンド基盤を Next.js v14 から v15 にアップデートしました。本記事では、実施した進め方の全体像と、Next.js 15の破壊的変更の背景をご紹介します。 Next.js 15へのアップデートの背景対象アプリは、社内エージェントの生産性向上や、採用企業の活動を高度化するための Web システムです。候補者検索、スカウト送信、メッセージ送受信などの機能を備え、Next.js 14/React 18系で運用していました。しかし課題として、Next.js のデフォルトキャッシュや状態管理設計に起因する「使いづらさ」がありました...
3ヶ月前

Claude CodeのHooksでSlackに会話内容を通知する
アサインのフィード
はじめに株式会社アサインでプロダクトエンジニアとBizDevをしている坂井です。Claude CodeのHooks機能を使いAIからの返答内容をSlackに自動通知する仕組みを作成したので紹介します。こんな感じでslackの指定したチャンネルに投稿してくれます。Claude Code Hooksとは何かを知りたい方はこの記事が参考になるので、そちらをご覧ください。簡単に言うと、Claude Codeの特定のアクション(応答完了時、Tool使用時、通知発生時)にシェルコマンドを実行することができる機能です。https://dev.classmethod.jp/articl...
3ヶ月前

検索条件の卒業年次を動的に計算して定数管理を不要にする設計
アサインのフィード
はじめにASSIGNでは、新卒就活生向けアプリ 「ASSIGN新卒」 を Flutter / Dart で開発しています。今回、新機能として 「募集機能」 をリリースしました。募集機能は、インターンや新卒採用に関する募集情報を学生が検索・閲覧できる機能です。本記事では、この募集機能の開発において工夫した、検索条件の卒業年次を動的に計算して定数管理を不要にする設計について紹介します。 実現したいこと募集機能では、募集対象の卒業年次を管理する必要がありました。実現したいことは以下の通りです。募集カードに対象の卒業年次を表示(例:26卒)募集一覧を絞り込む検索条件として...
3ヶ月前

Tailwind CSS v4アップデートのリアルな実務課題と対策
アサインのフィード
はじめに株式会社ASSIGNでWebフロント開発を担当している中水です。先日、弊社で開発しているプロダクトでTailwind CSS v4へのアップデートを実施しました。v4が提供する新機能に期待してアップデート作業に取り掛かりましたが、いざ進めてみると、いくつかの予期しない問題に直面しました。実プロダクトでのv4アップデート事例は自分が調べた範囲では見当たらなかったため、これからv4への移行を考えている方にとって少しでも参考になる情報をお届けできればと思います。 アップデートの背景今回、v4へのアップデートに踏み切った理由は、主に2つの大きなメリットを享受するためです...
3ヶ月前

Vibe Codingならぬ、Vibe Slidingのススメ(?)
アサインのフィード
はじめに今回は vibe codingならぬvibe sliding に挑戦してみました(slideにスライドを作るという意味はない気がするが)。要するに、AI エージェントにスライド作成を任せるという試みです。結論から言うと、想像以上にリッチなスライドを簡単に作ることができました。この記事ではvibe slidingで試した中で気づいたSlidevの紹介やAIとの相性の良さなどについて紹介します。利用したAIツールはClaudeCodeでモデルはOpus 4.1です。 成果物実際に作成したスライドはこちら。 スライドhttps://vibe-sliding.ver...
3ヶ月前

Prismaのスキーマファイルを分割するのじゃ
アサインのフィード
はじめにPrismaのスキーマファイルを分割しました。Prismaの標準機能としてmulti file schemaがサポートされており、この機能を利用しました。ナレッジをご紹介します。 分割の背景弊社のバックエンドはモジュラモノリスな作りになっており、複数のプロダクトのテーブル設計が一つのスキーマファイルで管理されていました。それぞれのプロダクトが機能改修を行うたびにスキーマファイルは巨大化し、分割前時点で数千行にも及んでいました。この状況により大きく2点の課題が発生していました。1点目は、プロダクト間のコンフリクトです。複数のプロダクトがそれぞれ独自に同じファイルを編...
3ヶ月前