株式会社ドクターズプライムのフィード
https://zenn.dev/p/drsprime
株式会社ドクターズプライムのエンジニアのPublicationです。
フィード

なぜかCIが誤発火する — pushの`paths`判定の真実
株式会社ドクターズプライムのフィード
この記事では、CIの誤発火によって無駄にCIが走る問題への解決法を紹介します。僕の環境では、無駄な大量のCIが一度に走ることで「作業者の待ち時間」や「CI同士の待ち時間」が発生してしまう問題が発生していて、これを解決しました。ちゃんと設定しているはずなのに、なぜかCIが発火してしまう。そういった方の参考になれば幸いです。 背景 — モノレポ横断のpaths制御このリポジトリはフロントエンド・バックエンド複数プロダクトを1つのリポジトリにまとめたモノレポで、サービスごとにワークフローファイルを分け、pathsで「自分に関係あるファイルが変わったときだけ動く」ように制御しています。...
1ヶ月前

claude-codeで見つけたTOCTOUについて自分の理解をまとめる
株式会社ドクターズプライムのフィード
きっかけanthropics/claude-code-action のバージョンアップにTOCTOU対策(v1.0.45)という見慣れない単語があった。調べてみたら意外と身近で怖い脆弱性だったので、整理してみる。 TOCTOU(Time-of-Check to Time-of-Use)とはチェックした時点と、実際に使う時点の間にデータが変わってしまう脆弱性。名前の通り、Check と Use のタイミングのズレを突く攻撃手法で、レースコンディション(競合状態)の一種。 日常の例え警備員が部屋を覗き、誰もいないことを確認する(Check)警備員がドアを閉めに向かう...
4ヶ月前

Goのバージョン1.26.0から実装されるslogのMultiHandlerについて
株式会社ドクターズプライムのフィード
はじめにGo 1.21で導入された log/slog パッケージに、2月にリリース予定のGo 1.26から MultiHandler が実装されるため、事前のキャッチアップをしておこうと思い記事を書くことになりました! MultiHandlerについてMultiHandler は標準の Handler インターフェースを実装しており、設定したすべてのハンドラを順次呼び出します。これにより、1回のログ出力で複数の宛先に同時にログを送信できます。例えば「標準出力にはテキスト形式で出力しつつ、ファイルにはJSON形式で保存したい」といったユースケースに対応するには、これまで自前で...
7ヶ月前

数学科大学生が「時間計算量」を再考する
株式会社ドクターズプライムのフィード
はじめにこんにちは!数学科の学部2年生のsebaと申します!現在、株式会社ドクターズプライムでソフトウェアエンジニアのインターンをしており、主に Go, GraphQL, Hasura(PostgreSQL) などを触っています。数学科にいると、プログラミングをしていても「理論的な背景」がどうしても気になってしまいます。今回は、私がインターンの技術試験で痛感した「時間計算量」について、数学科の視点(極限 \lim の概念など)を交えつつ、実務でどう意識すべきかをまとめてみたいと思います。 技術試験での失敗:動くけれど「重い」コード弊社の技術試験を受けた際、コーディング...
8ヶ月前

[Go]DIを型で安全にする(Defined type活用)
株式会社ドクターズプライムのフィード
GoのDefined typeでDIの「引数順序バグ」を撲滅する TL;DRstringを複数受け取るコンストラクタは、引数の順序を間違えてもコンパイルが通ってしまうtype APIKey string のようなDefined typeを使えば、順序ミスがコンパイルエラーになるレビュー負荷が減り、AIコード生成との相性も良い こんな経験ありませんか?「本番環境だけ認証エラーが出る...」調べてみると、DIで渡しているapiKeyとsecretKeyの順序が逆だった。開発環境では同じ値を使っていたから気づかなかった——。こういうバグ、見つけにくいですよね。コ...
8ヶ月前

Goにおけるerrors.Newとfmt.Errorfの違い
株式会社ドクターズプライムのフィード
アドベントカレンダーの記事になります!https://qiita.com/advent-calendar/2025/go今回、レビューでコメントいただき個人的にも気になったため改めて調べてみました。Go には代表的なエラー生成手段として errors.New と fmt.Errorf が存在します。どちらも error を返しますが、どのような違いがあるのか自分の理解をまとめます。 1. errors.New:最軽量な固定エラー 内部実装(簡略)func New(text string) error { return &errorString{tex...
8ヶ月前

登壇が怖いエンジニアへ。社内勉強会から最初の一歩を引き出しやすくする3つのコツ
株式会社ドクターズプライムのフィード
tl;dr準備しなくていい:資料いらずで気軽に始める。ネタがないを救う:毎日のチェックアウトで話題の芽を拾い、公開ニーズとして次回へつなぐ。領域を限定しない:フロントもバックもDBもAIも線引きしない。課題に向き合い、必要なスキルを身につけて解決するチームを目指す。 はじめに登壇が怖い。自分なんかまだ早い。ネタもない。最初の一歩の壁は、越えた後には小さく見えるのに、越えるまではとても大きい。これは自分にも何度もあった感覚です。Dr.’s Primeの社内勉強会「Alchemy」は、2025年10月で110回目。現在は隔週で続いており、名前や形は少しずつ変えながらも...
1年前

go testのキャッシュの仕組みを理解して、テストコードを変えずにCIを高速化する
株式会社ドクターズプライムのフィード
サマリgo testは、パッケージごとにテスト結果をキャッシュしているソースコードに加え、テストコマンドの引数やテスト内で参照したファイルや環境変数がすべて同じなら、キャッシュが利用されるそのため、基本的にはCI上でもGoのキャッシュ機構を使用しても問題ないGoが検知できない変更(設定ファイルやデプロイ設定の変更など)がある場合は、キャッシュをクリアすることで偽陰性を回避する必要がある はじめに普段の開発でGoを使用しているのですが、CIでのテスト実行時間に課題感を感じていました。テストを高速化したいと思ったのですが、テストコード自体を改善するには結構大きな変更が...
1年前

Go 1.25以降でのslogについて
株式会社ドクターズプライムのフィード
Go言語のプログラムで、動作の記録やエラーの原因調査に欠かせない「ログ」。Go 1.21で標準ライブラリに導入された構造化ログ機能log/slogが、Go 1.25でさらにアップデートされ、これまで少し手間がかかった点が解消され、より便利になりました。主な変更点は以下の2つです。 1. 複数の情報をまとめて記録しやすくなった (slog.GroupAttrs)ログには、複数の関連する情報(例: ユーザーIDとユーザー名)を一つのグループにまとめて表示したいことがよくあります。 これまで(Go 1.24まで)プログラムの実行中に数が変わるような複数の情報をまとめてグループ化す...
1年前

Go 1.25、GOMAXPROCS自動設定の恩恵
株式会社ドクターズプライムのフィード
先日公開されたGoの公式ブログ「Container-aware GOMAXPROCS」は、コンテナでGoを動かす開発者にとって良いアップデートの情報をご紹介をさせていただきます。「docker run --cpus="2.0"でCPUを制限しているのに、想定通りじゃなさそうだな…🤔」そんな経験はありませんか?Go 1.25から、そのような課題がGoランタイム自身によって解決されます。この記事では、公式ブログの内容を基に、Dockerを触る開発者にとって具体的に何がどう変わるのかを解説します。 docker run --cpusもあるけど不十分だった件Dockerでアプリケーショ...
1年前

AI時代のエンジニア育成 - 依存ではなく活用を促進するための3つの実践的アプローチ
株式会社ドクターズプライムのフィード
ここ数ヶ月の間、コーディングエージェントを積極的に活用しており、開発スタイルが大きく変化しました。この変化は、チーム構成にも大きな影響を与えていると感じています。特に、ジュニアエンジニアが担当していた、軽微なバグ修正や類似機能の追加などの難易度の低いタスクは、AIにより短時間で実装できるようになりました。Devinなどの自立型のツールを使用すれば、独立してタスクを進めることも可能です。それに伴い、Xなどではジュニアエンジニア不要論なども見かけるようになりました。短期的な生産性だけを考えれば、その主張にも一理あるかなと思います。しかし、組織の持続的な成長を考えると、育成は依然と...
1年前

Findy Team+ Awardを2年連続で受賞して見えた、生産性をスケールさせる組織づくりの軌跡
株式会社ドクターズプライムのフィード
この度、私たちの開発チームが、Findy様が主催する「Findy Team+ Award」を2年連続で受賞するという、大変光栄な機会に恵まれました。これもひとえに、日々変化する状況の中で試行錯誤を続けてくれたチームメンバー一人ひとりの努力と、客観的な指標を与えてくれるFindy Team+というプロダクトのおかげです!今回の受賞を一つの節目とし、この2年間でチームの生産性にどのように向き合い、組織をスケールさせてきたのか、その試行錯誤の歩みを振り返ってみたいと思います。この記事が、同じように開発組織の成長や生産性向上に課題を感じている方々にとって、何かしらのヒントになれば、嬉しいです...
1年前

ベクトル検索を使って顧客情報の重複登録を防止する
株式会社ドクターズプライムのフィード
ベクトル検索を使って顧客情報の重複登録を防止する 1. 導入顧客情報を人の手で管理していると、必ずといっていいほど発生する課題があります。それは「同じ顧客が複数回登録されてしまう問題」です。従来は「部分一致」「正規化した上で LIKE 検索」といった方法で荒く抽出したリストの中から重複を検知していました。しかし、現場ではこれらの方法ではどうしても限界があります。そもそも荒く抽出するため、確認するデータ量が多いという課題があります。それだけでなく、扱う顧客情報の性質上「法人名が同じでも住所が違う」だったり、その逆もありえます。加えて過去経緯として、人の手で登録していたた...
1年前

Dify開発のTips集: DSLのバージョン管理/デプロイフロー/モノレポ連携
株式会社ドクターズプライムのフィード
概要最近名前が変わったDify(ディフィ)を使用して、実際にサービス開発を行う際のTipsについてまとめました。この記事では、以下の内容について知ることができます。Difyをセルフホスティングしない場合のバージョン管理手法Dify Consoleへのデプロイフローモノレポ環境でのDify運用方法!Difyは日々アップデートされているため、本記事の内容が古くなる可能性があります。最新情報については、公式ドキュメントをご確認ください。 対象読者Difyの基本を理解している方Difyへの知見を深めたい方プロダクトにDifyを導入している or したい方...
1年前

Claude Codeを開発の全フェーズで活用したら開発生産性が1.5倍に向上した
株式会社ドクターズプライムのフィード
自分は今年の4月くらいから本格的にコーディングエージェントを使い始めて、主にCline、GitHub Copilot Agent(以降Copilot)、Claude Codeあたりを試してきました。Claude CodeをメインにするまではCopilotを使っていて、便利だなと思いつつも自分:エージェント=6:4くらいの割合で自分でコードを書いていました。しかし、5月にClaude 4モデルがリリースされてから精度がかなり上がり、とても感動したのを覚えています。それからは、3:7くらいでエージェントに任せる割合が増えていきました。さらに、それから少ししてClaudeのProプランで...
1年前

FDEとは少し違う?僕らが「ビジネスのど真ん中」に飛び込んでイノベーションを起こす理由
株式会社ドクターズプライムのフィード
最近、社内のメンバーと話していて「FDE(Forward Deployed Engineer)」という言葉に出会いました。この言葉を調べてみると、、、フォワードデプロイドエンジニア(FDE)は、ビジネスの最前線に立ち、技術的な専門知識を駆使して課題解決を直接支援するエンジニアです。AI企業のPalantir社が提唱した役割で、従来のエンジニアとは異なり、顧客の現場に深く入り込み、製品の導入からカスタマイズ、運用までを一貫して担当します。「ビジネスの最前線に飛び込み、現場の課題を技術で解決するエンジニア」とありました。最前線...かっこいいですね😃ドクターズプライムでも、ここ1...
1年前

Claude Codeの利用料金に応じて通知音を変化させてコーディングを楽しくする
株式会社ドクターズプライムのフィード
普段Claude CodeのHooks機能を使って、タスク完了時に通知を受け取るようにしています。今回は少し遊び心を加えてClaude Codeの利用料金に応じて通知音を変える仕組みを作ってみたので、その内容を紹介しようと思います! 通知の仕組み仕組みは非常にシンプルで、通知用のシェルスクリプトを作成し、タスク完了時にそのスクリプトを実行するだけです。Claude CodeのHooks機能で、タスク完了時や確認要求時などにコマンドやシェルスクリプトを実行できるので、作成したシェルスクリプトを実行するように設定することで実現しました。https://docs.anthropic...
1年前

Claude Codeのカスタムスラッシュコマンドを活用してコーディング以外も任せる
株式会社ドクターズプライムのフィード
最近のプロジェクトでClaude Codeを積極的に活用しており、かなり重宝しています。生成されるコードの精度が高く、複数のセッションを並行で稼働させることで開発生産性も大幅に向上しています。一方で、コーディング自体はClaude Codeに任せることができるものの、動作確認やPR作成などのコーディング以外の部分については人間が対応する必要があり、そこがボトルネックになっていると感じていました。そこで今回は、カスタムスラッシュコマンドを活用してClaude Codeにコーディング以外の部分も任せる方法を紹介します! カスタムスラッシュコマンドについてClaude Codeには...
1年前

Goでメモリリークの発生箇所を特定する方法(サンプル付き)
株式会社ドクターズプライムのフィード
バックエンドサーバーのメモリリークに遭遇ある日CloudRunのログでこんなエラーに遭遇しました。Memory limit of 512 MiB exceeded with 518 MiB used. Consider increasing the memory limit, see https://cloud.google.com/run/docs/configuring/memory-limitsなんだこれ?と思ってメモリ使用率の推移を見てみると、、、メモリ使用量が徐々に増えていって、100%に到達した時点でガクンと下がっています。これぞメモリリーク!っていう動きを...
1年前

Next.js App Router × Apollo Clientにおける実装方法と内部の仕組み
株式会社ドクターズプライムのフィード
最近のプロジェクトでNext.jsのApp Routerへの移行を進めていて、その過程でApp RouterとApollo Clientの連携について色々とキャッチアップする機会がありました。そこで今回は、App RouterとApollo Clientを組み合わせた場合の実装方法と内部の仕組みについて紹介したいと思います!記事の中で使用するサンプルコードは下記にあるので、興味があれば見てみてください。https://github.com/KazukiHayase/app-router-apollo-client-catch-up App Router + Apollo Cli...
1年前