【個人プロダクト】自ら立案して、公開まで実施した話(連載 1/13・導入)

はじめに

ウイスキーのテイスティングノートを記録する Web サービス「tayst whisky」を、企画から本番公開まで1人で行いました。 最初のコミットから一般公開までは約 2 ヶ月半です。

  • サービス: https://whisky.tayst.jp/
  • 香り・味・余韻をタグで記録し、ボトルごとの傾向をレーダーチャートで見られます。日本語と英語に対応しています

トップページ

普段は業務でバックエンドエンジニアをしていますが、自分でゼロから立案して公開まで持っていくのは初めてでした。 この記事は連載の導入として、なぜ作ったか、何を決めて始めたか、どこを捨てたかをまとめます。 個々の判断は次回以降の記事で1つずつ書きます。

1. モチベーション

動機は 3 つありました。

  • 自分で使いたいプロダクトをゼロから作りたかった。 ウイスキーの味は紙の「テイスティングノート」に記録するのが定番です。しかし紙は常に持ち歩くものではなく、Web 上でサッと入力できるものがあれば便利だと考えていました。
  • エンジニア視点しか無かった自分に、ゼロベースで考える視点があるか確かめたかった。 何を作るか、誰に使ってもらうか、規約や問い合わせ窓口をどうするかまで含めて構築してみたいという思いがありました。
  • AI を使うとどのくらいの品質と期間で公開まで行けるか見たかった。 実装だけでなく、設計の壁打ちや文書化にも AI を利用しました。

出発点は「自分が使いたいものを作る」でした。 自分 1 人が使うだけなら、認証も規約も問い合わせ窓口も要りません。ローカルで動けば十分です。

それでも公開に踏み切ったのは、同じようにウイスキーの記録に困っている人に使ってもらい、その人の時間が少しでも豊かになればよいと思ったからです。 「自分のため」で始めたものを「誰かのため」に出すと決めた時点で、やることは一気に増えました。

  • 認証、利用規約とプライバシーポリシー
  • 問い合わせ窓口、監視、コスト感

この連載は、これらを 1 つずつ決めながらプロダクトを公開まで持っていった話です。

正直、公開するかどうかは、かなり悩みました。 機能も見た目もまだ足りない、と思う箇所がいくつも残っていたからです。

背中を押したのは、LinkedIn 共同創業者のリード・ホフマンの言葉です。

製品の最初のバージョンで恥ずかしい思いをしていないなら、リリースが遅すぎだ

リード・ホフマンに学ぶシリコンバレー流・意思決定の秘訣 | DIAMOND ハーバード・ビジネス・レビュー

足りないところは公開してから直せばよい、と割り切って 2026 年 8 月 25 日に一般公開しました。

2. 初期構成として決めたこと

始める前に、次の方針を決めました。

方針 理由
BaaS を使わない ログインの中身を理解しないまま本番に出すのはセキュリティ面で不安でした
AI に書かせても、作りは自分で説明できる状態を保つ 作りが分からないまま AI に任せる「バイブコーディング」は避けたかったです。ただし線を引いたのは設計で、コードの行までは追っていません(6 章)
スケール前提で、業務と同じアーキテクチャにする ECS on Fargate と Aurora Serverless v2 から始めました。業務で扱う構成を個人でも一通り触っておきたかったからです
SPA と NoSQL を使わず、テーブル設計を初期から行う 後から作り直すのが一番高くつく部分だからです
コストは最小にし、1 日単位で費用を見る 個人の財布で払うので、月末にまとめて見るのでは遅いと考えました
英語表示に対応する 海外のウイスキー好きにも使ってもらえる形にしておきたかったです
デザインは AI と壁打ちし、コンセプトに近ければ採用する 自分でデザインを起こす時間は取れないので、Miro の AI アプリデザイン生成を無料期間のうちに使い、一気に画面を作りました
時間は本業に支障の無い範囲で使う 1 時間でも空けば AI と対話して進めるスタイルです

このうちいくつかは、公開までの途中で変えています。Aurora Serverless v2 は費用の理由で RDS PostgreSQL に移し、 イベント会場向けの機能だけは例外として SPA と DynamoDB を使いました。変えた理由も連載の中で書きます。

3. 採用した技術

バージョンは執筆時点のものです。

領域 採用したもの
フロントエンド Next.js 16(App Router / SSR)、React 19、TypeScript 5、next-intl 4(多言語)、Tailwind CSS 4、Recharts 3(レーダーチャート)
バックエンド Ruby 4.0、Ruby on Rails 8.1(API モード)、PostgreSQL 17、Mobility(DB の多言語化)、Solid Cache
認証 Logto(一般利用者向け IDaaS)、Amazon Cognito(運営者向け)
テストと静的解析 RSpec 8、Vitest 4、ESLint 9、Prettier 3
ソース管理と CI/CD GitHub、GitHub Actions、ecspresso v2
インフラ AWS(ECS on Fargate、CloudFront、ALB、RDS、Lambda、DynamoDB)、Terraform 1.11 以上
監視 Sentry、CloudWatch アラーム + SNS
開発環境 Docker Compose(Node 22 / Ruby / PostgreSQL / DynamoDB Local)
ドキュメント tbls(DB スキーマの自動生成)、draw.io(構成図)、Swagger UI(API)
AI Claude Code(実装・設計の壁打ち・文書化)

4. 工夫した点

工夫 内容
ADR(アーキテクチャ決定記録)を最初から書く 公開時点で 91 本、執筆時点で 98 本になりました。AI と壁打ちした結果を「なぜそう決めたか」の形で残すと、次のセッションの AI にも自分にも効きました
tech-note を書く 技術のキャッチアップ用のメモをリポジトリに置き、ADR とは分けています
管理画面は作り込まない 最初は DB を直接見ていましたが限界が来て、途中で運営者向けの管理画面を足しました。見た目は OSS のテンプレート、ログインは Cognito(数人なら $0)に寄せ、自作は最小にしています
STG 環境を用意し、業務と同じフローにする ローカルで通したものを STG に出し、手で触ってから本番にタグを打ちます
AWS Organizations で環境ごとにアカウントを分ける 管理アカウントの下に STG と本番のアカウントを持ち、請求はまとめて費用は環境ごとに見ます
AWS Well-Architected の 6 本の柱で判断を点検する 公式ツールは通していませんが、どの柱に効く判断か、どの柱を意図的に落とすかを ADR に残しています。対応表は連載 2 本目に載せます
Claude Code が読む文書を、Claude Code にレビューさせて直す 毎回読み込まれる CLAUDE.md が肥大したので、索引を 1 行 1 文に圧縮して 70KB から 23KB にしました。後日、スキルが実在しない構造を指示していたのも見つかり、4 つの CLAUDE.md と 9 つのスキルの正を 1 つに揃えました
コミット前フックで文書の更新漏れを止める コードだけ変えて文書を触っていないコミットや、ADR を足して索引を更新していないコミットを、フックが止めます

5. 品質はどう担保したか

「AI でどのくらいの品質で公開できるか」を見るために、品質は 3 つの層で考えました。

概要 内容
自動で止める フロント・バックエンドともに単体テスト(合計 1,600 例前後)とリンターを整備し、push 前のフックでテストを回します
人が確認する STG で手動で動作確認してから本番に出します
出たあとに気づく Sentry のエラー通知と CloudWatch のアラームをメールで受けます

6. 逆に、捨てたもの

全部をやろうとはしていません。やらなかったこと、なぜ捨てたか、代わりに何で受けたかを書いておきます。

捨てたもの なぜ捨てたか 代わりに何で受けたか
AI 同士のレビュー ADR には残していない、自分の判断です。1 人開発でレビューの往復に時間をかけるより、テストとフックで機械的に止めるほうが割に合うと考えました 正直に言うと、実装は細かく読まず、動作と設計意図が合っていれば取り込んでいました。設計は ADR と壁打ちで押さえ、コードはテストとフックと STG の手触りに任せています
E2E テスト async な Server Component は Vitest / Jest で直接テストできず、単体テストの範囲を lib/ と Client Component に絞りました。E2E は将来の課題として残しています STG で手で触る確認に寄せました
CI でのテスト実行 開発者が 1 人のうちは GitHub Actions に課金してまでクラウドで回す必要が無いと判断しました push 前のフックが、変更のあったサービスのテストだけを Docker の中で回します
APM(アプリ性能監視) Datadog を入れたものの APM は一度も有効にせず、固定費でコンテナのメトリクスを送るだけになっていました。Agent は NAT 経由で常時送信するので、静かな時間にも払います 一度入れて止めました。本番は CloudWatch のアラームと Sentry のメールだけです。戻す条件は「実利用者がいて、原因不明の遅さが 2 回起きたら」
DB の Multi-AZ インスタンス代が $18 → $36 と倍になり、Aurora から移して削った分の半分が消えます。Single-AZ の代償はインスタンス障害で数分〜数十分の停止で、データは gp3 と日次バックアップ、PITR で守れます Single-AZ の小さなインスタンスにし、復旧手順を runbook に書きました
常時稼働のジョブワーカー Solid Queue を動かすには専用 DB とスキーマの読み込み、ロールの分離が必要で、ECS サービスが 1 つ増えて費用と監視の対象も増えます。非同期にしたい処理は JSON の書き出しと数個の S3 PutObject で、年に数十回しか走りません 重い処理は同期実行にし、ワーカーは置いていません。遅くなったらまずアップロードの並列化で受けます

いずれも「利用者が増えたら戻す条件」を ADR に書いてあり、今は意図的に払っていない状態です。

7. 数字で見た公開まで

項目
最初のコミットから一般公開まで 約 2 ヶ月半(2026 年 6 月 7 日 → 8 月 25 日)
コミット数(main) 約 250
マージした Pull Request 数 約 155
ADR 数 91 本(執筆時点では 98 本)

Claude Code のプランは途中で上げた

Claude Code は Pro プランで始めました。 しかし進めるうちに利用上限に当たる回数が増え、上限が戻るまで手が止まる時間のほうが長くなりました。

「1 時間でも空けば AI と対話して進める」というスタイルは、空いた時間に上限で止められると成り立ちません。 公開までの期限を優先して、途中で Max(5x)プランに切り替えました。

プラン 使い方 困ったこと
Pro 立ち上げ期。小さな実装と壁打ち 設計の壁打ちと実装を同じ日にやると上限に当たる
Max(5x) 途中から公開まで 上限で止まることはほぼ無くなった

AI で個人プロダクトを公開まで持っていくなら、AI のプラン代も AWS と同じく「払う費用」として最初から見ておくべきでした。

8. 連載の予定

  1. 個人プロダクトを自ら立案して、公開まで実施した話(本記事)
  2. BaaS を使わず、業務と同じ構成を選んだ理由
  3. AWS 費用を 1 日単位で見て削った話
  4. Claude Code が読む文書を、Claude Code にレビューさせて直した話
  5. 原則 RDBMS、イベントだけサーバーレスにした話
  6. ADR と tech-note で、人間と AI の意思決定を残す
  7. 認証を Auth0 で始めて、STG に出す段階で Logto に乗り換えた話
  8. Datadog で始めた監視を止め、Sentry と CloudWatch アラームに落ち着いた話
  9. STG を挟んだら、本番構築が STG のレビューになった話
  10. Rails の DB ユーザーを操作用とマイグレート用に分けた話
  11. タグ入力をフレーバーホイールに置き換えた話
  12. GA4 と Clarity を Cookie 同意バナー無しで入れた話
  13. デザインを AI で一気に作り、あとから育てた話

おわりに

「AI があれば個人でも業務水準の構成で公開まで行ける」というのが、やってみた実感です。 ただし、どこを捨てるかを自分で決めないと、時間も費用も際限なく増えます。

同じように個人プロダクトを公開まで持っていきたい方の参考になれば嬉しいです。

【テックリード】テックリードへの道:タスクが「動かない」時に見直したいソフトスキルの話

はじめに

シニアエンジニアやテックリードを意識し始めると、自分でコードを書くこと以上に「チームやプロジェクトをどう動かすか」という課題に直面することが増えてきます。
先日、社内のエンジニアリングマネージャー(EM)に壁打ちをさせてもらった際、自分の中での「もやもや」が整理されたので、同じような立場にいる方に向けて共有したいと思います。

「重要かつ緊急」なのにタスクが進まない

アイゼンハワー・マトリクスで「重要かつ緊急(第1領域)」と定義したはずのタスク。
「これをやらないとシステムの土台が保てない」という危機感もあり、PdMやエンジニアとも目的・背景の読み合わせは済んでいる。ゴールも示している。

それなのに、なぜか思うように進まない。そんな状況に陥っていました。

なぜタスクが「依頼」で止まってしまうのか

自己分析をしてみると、いくつかの要因が見えてきました。

1. 依頼(指示)の「強度」と「形式」

Slackで依頼はしているものの、「投げっぱなし」になっていないか?
定例ミーティングなどで顔を合わせて、「これが最優先事項です」と改めて熱量を持って伝えるプロセスが欠けていたかもしれません。

2. 「具体的」か「抽象的」か

相手側で、「具体的にどう手をつければいいか」がイメージできていない可能性に気づきました。
既存の対応に追われている中で、抽象的な「重要事項」が投げられても、とっつきにくいのは当然です。

3. リソース配分の調整不足

「リソースが足りない」のは常ですが、PdMと握って「優先度の低いものを後回しにする」という合意形成を、徹底できていたか。

自分が手を動かさない、という「覚悟」

ここで一番の葛藤は、 「自分でやったほうが早い」という誘惑 です。
しかし、自分が動けば他のマネジメントや全体設計が止まってしまう。

「自分ではなるべくやらない」と決めること。 これは一見、怠慢のように見えて、実はチームを回すための「マネジメント」そのものなんだと実感しました。

シニア以上に求められる「ソフトスキル」の正体

今回の経験を通じて、シニアエンジニア以上に求められるスキルの輪郭が見えてきました。

  • 合意形成の技術:チームやステークホルダーと「いつまでに」「何を」「どの優先度で」やるかを握る。
  • タスクの細分化:相手が「とっつきやすい」レベルまで解像度を下げてあげる。
  • AIの活用:これも一種のソフトスキル。思考の整理や、タスク分解の壁打ち相手としてAIを使い倒す。

結局、技術的な正解を知っているだけでは不十分で、それをいかに「組織の動き」に変換できるかが勝負なのだと思います。

今後のアクション:解決に向けて

今回の壁打ちを経て、以下の3点を徹底しようと考えています。

  1. PdMとの再握り:全体のタスクリストに明確に入れ込み、優先順位の合意を再確認する。
  2. 期限(いつまで)の明確化:自分が考えている期限と相手が考えている(または気にしていない)期限の認識を合わせる。
  3. タスクの細分化(解像度アップ):相手が迷わず一歩目を踏み出せるレベルまで、タスクを噛み砕く。

おわりに

「マネジメントっぽい動き」に戸惑いを感じることもありますが、これもエンジニアとしての市場価値を高める重要なソフトスキルの一環です。

同じような悩みを持つテックリード候補の読者に少しでもためになれば嬉しいです。

【参加レポート】TechLead Conference 2026 〜AI時代のエンジニアリングを再定義する〜

はじめに

2026年4月23日に開催された「TechLead Conference 2026」に参加してきました。

eight-event.8card.net

AIエージェントの普及が加速する中、私たちのエンジニアリング原則や組織のあり方がどう「進化」すべきか、主要なセッションの内容をメモ書きしたものをまとめた。


1. AI時代のエンジニアリング原則:変わるもの・変わらないもの

AIがコードを書くことが当たり前になった今、開発ライフサイクルは「終焉」ではなく「進化」の過程にある。

内部品質のパワーバランスの変化

  • 変わらないこと: 理解容易性やモジュール性の重要性は不変。むしろ、AIと人間が共存する上でこれまで以上に重要になる。
  • 変わること: 変更容易性の定義が変わります。人間よりも許容範囲が広いエージェントが変更を担うため、「読むのは人間、変更はAI」という新たなバランスをテックリードが采配する必要がある。

TDD(テスト駆動開発)の再評価

  • AIエージェントは迷走しやすいため、動的検査であるテストは強力なガードレールとなる。
  • 「テストファーストでエージェントに指示を出す」伴走モードや、リアルタイムに介入する同期モードなど、エージェントとのペアプログラミング的な関わり方が主流となる。

アンラーニングの必要性

  • 「人間がソフトウェアをメンテナンスする」という前提の一部を捨て、AIをアンプリファイ(増幅器)として活用するマインドセットへの転換が求めらる。

2. APIガバナンス:AIを制御する「門番」の役割

AIエージェントが自律的に行動する時代、API管理は不要になるどころか、その重要性は指数関数的に増大している。

  • リスクの正体: OWASP Top 10 for Agentic Applicationsでは、ツールの不正利用(ASI02)や権限の濫用(ASI03)が挙げられる。
  • セマンティックバリデーション: 従来の「型チェック」から、AIや専用ゲートウェイによる 「意味のチェック(ビジネスルールに反していないか)」 へと進化させる必要がある。
  • シフトレフト・ガバナンス: 後工程になるほど対応コストは増大します。設計・実装時からAPI設計図を活用し、Agent in the loopによる事前テストを行うことが推奨される。

3. シニア・新人それぞれの学習とキャリア

t_wadaさんのセッションを中心に、AI時代に求められるスキルについて。

対象 意識すべきポイント
共通 プログラミング能力は「外注できない能力」として学び続けるべき。コードが読めなければAIの回答の正誤を判断できない。
シニア 広く浅い知識でAIとの「壁打ち」を可能にしつつ、いくつかの深い専門性を持つことでAIの誤りを見抜く。
新人 焦らず、AIと二人三脚ですべての工程を体験する。効率よりも「学びの強度」を優先し、基礎を固める時期とする。
  • チームプログラミングへの移行: 1人のシニアがレビューのボトルネックになるのを防ぐため、数人でエージェントの出力を確認し、即断即決する「多対多」の開発スタイルへ移行していく兆しがある。

4. テックリードが今すぐ取り組むべきこと

AI活用の定着に向けた具体的なアクション。

  1. 「戻れなくなる便利さ」を構築する: CI/CDが当たり前になったように、AIがプルリクエストを自動作成するなど、新しい働き方に標準を合わせたフォーマットを作ること。
  2. 具体と抽象の往復: AIに質の高い指示を出すためには、人間側が具体的な事象を想像し、抽象化して伝える能力が不可欠です。
  3. 情報のオープン化: AIがプロジェクトのすべてを把握できるよう、一次情報を管理ソフト等に集約し、検索可能な状態に整理しておくことが重要です。

5. 所感

「AI時代は基礎が不要になる」という誤解がありますが、実際には 「基礎がある人ほどAIを増幅器として使いこなせる」という格差が広がる時代だと強く感じた。
特に、APIを単なるエンドポイントではなく「知的なフィルター」として再定義する考え方は、今後の業務においても積極的に取り入れていきたいポイントである。

【Datadog】不要なログを取り込む前に除外する

課題

Log Pipelineに合わないログなどがあった際に取り込む前に除外したいパターンがありました。
そのやり方がわからず調査しました。

解決方法

Log Index の Exclusion Filter を使用する

Datadog の Log Management では、特定のログをインデックスから除外するために Exclusion Filter を使うとのこと。

docs.datadoghq.com

Logs > Pipelines との違い

方法 用途
Exclusion Filter ログをインデックスから完全除外(コスト削減)
Pipeline Processor ログの属性加工・パース(除外には不向き)

ログを単純に見たくない・保存したくない場合は Exclusion Filter が最適ということです。