開発作業中、「このJSON を整形したい」「Base64 をデコードしたい」「Cron 式が正しいか確認したい」といった場面は毎日のように訪れます。その都度ブラウザで検索してオンラインツールを開いて…という作業が地味にストレスでした。
この記事では、ZERONOVA LAB の無料ツール群のうち、データ変換・コード支援に分類される14ツールを自作した背景と設計判断を紹介します。
きっかけ:開発中の「ちょっとした変換」が積み重なる
2026年2月、ZERONOVA LAB に無料ツールセクションを立ち上げました。当初はOGP画像ジェネレーターや文字数カウンターなど、フリーランス・クリエイター向けのツールが中心でした。
しかし、開発日記にはこう書いています:
25ツールの一気実装後の品質確認が必要だった。Phase 1〜7を1日で25ツール実装したため、リリース前にセキュリティと品質の包括的レビューが必要だった
その過程で、開発者自身が日常的に使うツールが手元にあると便利だと気づきました。JSON整形ツールや正規表現テスターは、実装中のデバッグや設定ファイルの確認で何度も使います。外部サービスに頼ると、データの送信先が気になったり、広告が邪魔だったりと、小さなストレスが積み重なります。
開発で便利なツール一覧 — データ変換・コード支援の14種
今回紹介する14ツールは以下の通りです。
| ツール | 主なユースケース |
|---|---|
| JSON整形・検証ツール | APIレスポンスの確認、設定ファイルの検証 |
| Base64 エンコード/デコード | 認証トークンの解析、Data URI の変換 |
| URLエンコード/デコード | クエリパラメータの確認、日本語URLの変換 |
| 正規表現テスター | パターンマッチングの検証 |
| UUID/ULIDジェネレーター | テストデータの生成、DB主キーの検討 |
| JWTデコーダー | 認証トークンのペイロード確認 |
| CSV⇔JSON変換 | データ形式の相互変換 |
| YAML⇔JSON変換 | 設定ファイルの変換、GitHub Actions の確認 |
| UNIX時間変換 | ログのタイムスタンプ解読 |
| ケース変換 | 変数名のリファクタリング |
| Cron式ジェネレーター | スケジュールタスクの設定確認 |
| curl→コード変換ツール | curlコマンドの多言語変換 |
| chmod計算機 | UNIXパーミッションの設定・確認 |
| コード差分チェッカー | コード変更点の行単位比較 |
設計判断:クライアントサイド完結にこだわった理由
14ツールすべてに共通する設計方針として、サーバーにデータを一切送信しないことを徹底しました。
開発日記にはこう記録しています:
クライアントサイドツールの実装速度が驚くほど速い。API route が不要なツールは驚くほど速く実装できる。文字数カウンター・QRコード・コントラストチェッカーの3つを1セッションで完成
JWTトークンやAPIレスポンスのJSONには、本番環境の認証情報やユーザーデータが含まれることがあります。「入力データはサーバーに送信されません」と明記できることは、開発者向けツールとしての信頼性に直結します。
技術的には、すべてのツールが以下のパターンで構成されています。
page.tsx(Server Component): SEO用のテキスト、メタデータ、JSON-LD[Form].tsx(Client Component):"use client"ディレクティブ付きのフォームUI
Server ComponentでSEOを担保しつつ、Client Componentで処理を完結させる構成です。
データ変換ツール群 — JSON整形ツールからUNIX時間変換まで
JSON整形:ツリービューとJSONPath
JSON整形・検証ツールは最もよく使うツールの一つです。Pretty Print / Minify / バリデーションに加え、ツリービューでJSONの構造を階層的に確認できます。
開発日記から:
JSON整形・検証ツール — Pretty Print / Minify / バリデーション / ツリービュー
操作は3ステップで完結します。
- 左側のテキストエリアにJSONを貼り付ける(APIレスポンスをそのままペースト)
- 「Pretty Print」タブで整形結果を確認する(構文エラーがあればリアルタイムで警告表示)
- 「Tree View」タブに切り替え、キーをクリックしてJSONPath(例:
$.users[0].name)をコピーする
このJSONPathコピー機能は、APIレスポンスの解析やjqクエリの作成で特に便利です。
Base64 / URLエンコード:双方向のリアクティブ変換
Base64エンコード/デコードとURLエンコード/デコードは、入力した瞬間に結果が表示されるリアクティブ変換を採用しました。
Phase 9 の開発日記にはこう記録されています:
useMemoでリアクティブ変換:入力→出力の単純な変換はuseMemoでリアクティブに計算すると、変換ボタンが不要になりUXが向上する。既存の Base64 / URLエンコードも同じパターン
「変換」ボタンを押す方式は操作の摩擦が大きく、特に何度も試行錯誤する開発中には不向きです。useMemo による即時変換は、React のパフォーマンスの仕組みに沿った自然な実装でもあります。
Base64はテキストだけでなくファイルの変換にも対応し、Data URI形式での出力やURL Safe Base64(+ / を - _ に置換)にも対応しています。
CSV⇔JSON / YAML⇔JSON:データ変換の相互性
CSV⇔JSON変換とYAML⇔JSON変換は、どちらも双方向の変換を提供します。
CSV⇔JSON では実装中に興味深い問題に遭遇しました。
CSV⇔JSON: Math.max スタックオーバーフロー修正(大量行対応)
Math.max(...array) はJavaScriptのコールスタック上限(通常10,000〜65,000)を超えるとクラッシュします。数万行のCSVデータを扱う場面は実際にあるため、Claude Code に依頼して reduce ベースの実装に切り替えました。
YAML⇔JSON では、テキストエリアでのTab キーによるインデント挿入に対応しています。YAMLはインデントベースの言語なので、ブラウザのデフォルト動作(Tabでフォーカス移動)をオーバーライドする必要がありました。
UNIX時間変換:桁数で秒/ミリ秒を自動判定
UNIX時間変換ツールは、ログファイルのタイムスタンプを解読するときに重宝します。10桁なら秒(例: 1738886400)、13桁ならミリ秒(例: 1738886400000)を自動判定します。
UNIX時間変換: ミリ秒判定の閾値修正(10桁/13桁で秒/ミリ秒を自動判定)
JavaScriptの Date.now() はミリ秒、Pythonの time.time() は秒を返すなど、言語によって単位が異なるのは開発者なら誰もが経験する混乱です。
コード支援ツール群
正規表現テスター:リアルタイムマッチング
正規表現テスターは、リアルタイムでマッチ結果をハイライト表示します。フラグ(g/i/m/s/u)の切り替えやよく使うパターンのプリセットも用意しています。
正規表現のデバッグは「書いてみて、試して、修正して」の繰り返しです。入力の変更が即座にマッチ結果に反映される体験は、この試行錯誤のサイクルを短縮します。
UUID/ULIDジェネレーター:v4からv7への移行
UUID/ULIDジェネレーターは、UUID v4 / v7 / ULID の3種類を生成できます。
開発日記にはこう記録されています:
UuidGeneratorForm の初期化パターン:
useEffectでgenerate()を呼ぶ方式はreact-hooks/set-state-in-effectルールに違反。lazy state initialization(useState(() => [generateUUIDv4()]))で解決
React 19の厳格なlintルールにより、useEffect 内での同期的な setState がエラーとして検出されるようになりました。代わりに useState の遅延初期化を使うパターンが有効です。
UUID v7はタイムスタンプベースでソート可能なため、PostgreSQLやMySQLのB-treeインデックスとの相性が良く、近年はv4からv7への移行が進んでいます。ツール上でも、v4/v7/ULIDの違いを体感できます。
JWTデコーダー:ペイロードの可視化
JWTデコーダーは、Header / Payload / Signatureの3パートを分解して表示します。有効期限のチェックやクレーム一覧の日本語説明も提供しています。
JwtDecoderForm の派生状態:
useEffectでtokenの変更を監視してdecoded/errorを setState する方式は、React 19 の厳格なルールに違反。useMemoで{ decoded, error }を派生させる方式に変更
JWTトークンのPayloadはBase64URLでエンコードされているだけで、暗号化されていません。このツールでデコードできることからも分かるように、パスワードや個人情報をPayloadに含めるべきではありません。ツールの解説を通じてこうしたセキュリティ上の注意点も伝えられます。
ケース変換:10種類の同時変換
ケース変換ツールは、入力するだけでcamelCase, PascalCase, snake_case, kebab-case, UPPER_SNAKE_CASEなど10種類に同時変換します。
ケース変換のタッチ操作: 元の実装はホバーでコピーアイコンが表示される仕組みだったが、モバイルではホバーが使えない。カード全体を
<button>にしてクリック=コピーに変更
opacity-0 group-hover:opacity-100 というパターンはデスクトップでは直感的ですが、モバイルでは操作不能になります。カード全体をクリック可能にして常時コピーアイコンを表示する方式に変更しました。
Cron式ジェネレーター:自然言語で確認
Cron式ジェネレーターは、ビジュアルUIで分・時・日・月・曜日を選択するとCron式が生成され、次回実行日時5件のプレビューと自然言語での説明(例:「平日の9時0分」)が表示されます。
GitHub Actionsのscheduleトリガーや、KubernetesのCronJob、AWS CloudWatch Eventsなどで共通のCron式を扱うため、開発者にとって実用性が高いツールです。
Phase 17 で追加した開発ユーティリティ3種
Phase 9-10 で上記11ツールを公開した後、開発日記にはこう書いています:
開発者が毎日使うユーティリティ系ツールを追加し、「ブックマークして毎日使うツール集」としてのリピート率を向上させる狙い。curl変換・chmod計算はニッチだが開発者の固定需要がある
この振り返りをもとに、Claude Code に依頼して3ツールを追加しました。
curl→コード変換:curlコマンドを4言語に変換
curl→コード変換ツールは、curlコマンドをJavaScript(fetch)・Python(requests)・PHP(curl_exec)・Go(net/http)のコードに変換します。
ブラウザのDevToolsで「Copy as cURL」を使うと、リクエストの再現用curlコマンドが取得できます。しかしそこから本番のコードに書き直すのは手間がかかります。-H でヘッダーを1つずつ解析して、-d でボディを取り出して、-X でメソッドを確認して…という作業をツールに任せられます。
curl変換の対応言語数: 最初は10言語対応を検討したが、実需の高いJavaScript/Python/PHP/Goの4言語に絞った。各言語の変換精度を高める方が、対応言語数を増やすよりもユーザー価値が高い
複数行のcurlコマンド(バックスラッシュで改行されたもの)にも対応しています。
chmod計算機:パーミッションの視覚的理解
chmod計算機は、GUIのチェックボックスでowner/group/otherの読み取り・書き込み・実行権限を設定すると、8進数表記(例: 755)とシンボリック表記(例: rwxr-xr-x)を生成します。
chmod計算機のUI設計: チェックボックス9個(owner/group/other × read/write/execute)の配置をどうするか。3×3のマトリックス表示にして、視覚的にパーミッションの構造が理解できるようにした
「755と644の違いは何か」をチェックボックスで見比べると、一目瞭然です。755はownerの実行権限とgroup/otherの実行権限がオンになっているのに対し、644は全ての実行権限がオフです。プリセットとして755・644・600・777などの定番パターンも用意しているため、ワンクリックで設定を確認できます。
逆変換にも対応しており、既存の8進数(例: 750)を入力するとチェックボックスとシンボリック表記に自動反映されます。サーバーの設定確認時に便利です。
コード差分チェッカー:行単位のコード比較
コード差分チェッカーは、2つのコードを貼り付けると追加・削除・変更箇所を行番号付きでハイライト表示します。インライン表示とサイドバイサイド表示の切り替えにも対応しています。
コード差分チェッカーをテキスト差分チェッカーと別ツールにした理由: テキスト差分は一般ユーザー向け(文章の比較)、コード差分は開発者向け(シンタックスハイライト+行番号)と用途が異なる。SEO的にも「コード 差分 比較」と「テキスト 差分」は別の検索意図
既存のテキスト差分チェッカーとの棲み分けを意識しています。テキスト差分チェッカーは文章やメモの比較に適していますが、コード差分チェッカーは行番号・追加行数・削除行数の統計表示など、コードレビュー向けの機能を備えています。
React 19で学んだパターン
11ツールの実装を通じて、React 19のlintルールへの対応パターンが整理されました。
| 問題 | 対応パターン | 適用例 |
|---|---|---|
useEffect 内の setState | useMemo で派生状態に変換 | JWTデコーダー |
| マウント時の初期値生成 | useState(() => compute()) の遅延初期化 | UUIDジェネレーター |
レンダー中の ref.current 更新 | useEffect 内での ref 更新に移動 | 画像フォーマット変換 |
React 19 の
react-hooks/set-state-in-effectルール:useEffect内で同期的にsetStateを呼ぶとカスケーディングレンダーが発生する。React 19 ではこれがlintエラーとして検出される
これらのパターンはツール開発に限らず、あらゆるReactアプリケーションで適用可能です。
14ツールを一気に実装できた理由
14ツールのうち、Phase 9で6ツール、Phase 10で5ツールを Claude Code で実装し、Phase 17で3ツールを追加しました。いずれも1セッション内で完了しています。
高速に実装できた背景には、以下の3つの要因があります。
1. Server Component + Client Component のパターン化
すべてのツールが同じ構造(page.tsx + Form.tsx)で統一されているため、新しいツールの追加は「テンプレートをコピーして、変換ロジックを書き換える」だけで済みます。
2. API route が不要
クライアントサイド完結のため、サーバー側のコードを書く必要がありません。ブラウザの標準APIだけで実現できるツールは実装コストが低いのです。
3. SEOデータの一元管理
tools.ts にFAQ、関連ツール、更新日を集約しているため、新ツール追加時のSEO設定は1ファイルへのデータ追加だけで完了します。
1セッションで25ツール: Phase 1-4(10ツール)に加え、Phase 5-7(15ツール)を1日で完了。技術基盤(Server Component + Client Component パターン)の再利用と並列実装が成功の鍵
まとめ
開発者が日常的に使うデータ変換・コード支援ツールは、「クライアントサイド完結」「リアクティブ変換」「モバイル対応」の3原則で設計すると使いやすくなります。
- クライアントサイド完結: 機密データを含むJWTやAPIレスポンスをサーバーに送信しない安心感
- リアクティブ変換:
useMemoによる即時変換で、変換ボタンを押す手間を排除 - モバイル対応: ホバー依存のUIを排除し、タッチフレンドリーなインタラクションに統一
すべてのツールは ZERONOVA LAB の無料ツール一覧 から利用できます。ブラウザだけで動作し、登録やインストールは不要です。
Phase 17 の追加により14ツール体制となり、データ変換からコード比較、サーバー設定まで、開発中に発生する「ちょっとした作業」をカバーできるようになりました。
関連記事として、Web開発のモックアップを効率化するツール活用術 ではダミー画像やMarkdownプレビューアーなどモックアップ用ツールの設計判断を紹介しています。また、CSSジェネレーターでコーディング時間を半減させる方法 や Web制作者のためのSEO設定ツール完全ガイド もあわせてご覧ください。
Zeronova(ゼロノバ)
Product Manager / AI-Native Builder
Web/IT業界19年以上・20以上のWebサービスを担当したPdM。東証プライム上場企業の子会社代表として事業経営を経験。現在はAIを駆使して企画から実装まで完結させる個人開発を実践中。